Class: RecordOnChain::NemController

Inherits:
Object
  • Object
show all
Defined in:
lib/record_on_chain/nem_controller.rb

Constant Summary collapse

@@NET_TYPES =
[:testnet , :mainnet].freeze

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(node_url_set, network_type = :testnet) ⇒ NemController

Returns a new instance of NemController.

Raises:

  • (ArgumentError)


20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/record_on_chain/nem_controller.rb', line 20

def initialize( node_url_set , network_type = :testnet )
  raise ArgumentError,"Node set must not be empty." if node_url_set.empty?
  raise ArgumentError,"Unknown network type.[:testnet,:mainnet]" unless @@NET_TYPES.include?(network_type.to_sym)

  # make node_pool from node_set
  node_objects = []
  node_url_set.each do |url|
    node_object = Nem::Node.new( url: url )
    node_objects.push( node_object )
  end
  @node_pool = Nem::NodePool.new( node_objects )
  @network_type  = network_type.to_sym
end

Class Method Details

.address_from_public(public_key, network_type) ⇒ Object



11
12
13
# File 'lib/record_on_chain/nem_controller.rb', line 11

def self.address_from_public( public_key , network_type )
  return Nem::Unit::Address.from_public_key( public_key , network_type.to_sym ).to_s
end

.address_from_secret(secret, network_type) ⇒ Object



15
16
17
18
# File 'lib/record_on_chain/nem_controller.rb', line 15

def self.address_from_secret( secret , network_type )
  public_key = public_from_secret( secret )
  return address_from_public( public_key , network_type.to_sym )
end

.public_from_secret(secret) ⇒ Object



7
8
9
# File 'lib/record_on_chain/nem_controller.rb', line 7

def self.public_from_secret( secret )
  return Nem::Keypair.new( secret ).public
end

Instance Method Details

#calc_feeObject



48
49
50
51
52
# File 'lib/record_on_chain/nem_controller.rb', line 48

def calc_fee
  prepared?
  fee = Nem::Fee::Transfer.new( @tx )
  return fee.to_i
end

#get_address_status(address) ⇒ Object



34
35
36
37
38
39
# File 'lib/record_on_chain/nem_controller.rb', line 34

def get_address_status( address )
  endpoint = Nem::Endpoint::Account.new( @node_pool )
  add = endpoint.find( address )
  multisig = !add.cosignatories.empty?
  return { balance: add.balance , multisig: multisig }
end

#prepare_tx(recipient_str, msg) ⇒ Object



41
42
43
44
45
46
# File 'lib/record_on_chain/nem_controller.rb', line 41

def prepare_tx( recipient_str, msg )
  check_address( recipient_str )
  modified_address = modify_address( recipient_str )
  # NOTE: Timestamp is set to -10 sec from Time.now.It prevent FAILURE_TIMESTAMP_TOO_FAR_IN_FUTURE
  @tx = Nem::Transaction::Transfer.new( modified_address, 0, msg, timestamp: Time.now() -10, network: @network_type )
end

#send_transfer_tx(private_key) ⇒ Object



54
55
56
57
58
# File 'lib/record_on_chain/nem_controller.rb', line 54

def send_transfer_tx( private_key )
  prepared?
  result = broadcast_transfer_tx( private_key )
  return result
end

#set_log_path(dir_path) ⇒ Object

default log path : stdout



61
62
63
64
# File 'lib/record_on_chain/nem_controller.rb', line 61

def set_log_path( dir_path )
  log_name = "nem_controller.log"
  Nem.logger = Logger.new( dir_path + log_name )
end