nem-ruby 0.0.6 → 0.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -3
  3. data/docs/examples/define_mosaic_attachment.md +2 -1
  4. data/docs/examples/transactions.md +2 -1
  5. data/docs/examples/util.md +4 -4
  6. data/docs/mosaic.md +2 -1
  7. data/examples/endpoint/local.rb +7 -4
  8. data/examples/offline/announce_offline_transfer.rb +5 -2
  9. data/examples/offline/future_timestamp.rb +32 -0
  10. data/examples/transaction/transfer_mosaic.rb +2 -1
  11. data/examples/util/deserialize.rb +11 -5
  12. data/lib/nem/endpoint/local/account.rb +12 -12
  13. data/lib/nem/mixin/mosaic_attachable.rb +63 -0
  14. data/lib/nem/mixin/{mosaic.rb → mosaic_definition.rb} +0 -0
  15. data/lib/nem/model/mosaic_collection.rb +2 -2
  16. data/lib/nem/model/transaction.rb +8 -9
  17. data/lib/nem/mosaic/comsa_cms.rb +11 -0
  18. data/lib/nem/mosaic/dim_coin.rb +2 -1
  19. data/lib/nem/mosaic/dim_token.rb +2 -1
  20. data/lib/nem/mosaic/ecobit_eco.rb +2 -1
  21. data/lib/nem/mosaic/xem.rb +2 -1
  22. data/lib/nem/request/announce.rb +8 -4
  23. data/lib/nem/transaction/base.rb +2 -3
  24. data/lib/nem/transaction/importance_transfer.rb +3 -1
  25. data/lib/nem/transaction/mosaic_definition_creation.rb +3 -1
  26. data/lib/nem/transaction/mosaic_supply_change.rb +3 -1
  27. data/lib/nem/transaction/multisig.rb +3 -1
  28. data/lib/nem/transaction/multisig_aggregate_modification.rb +3 -1
  29. data/lib/nem/transaction/multisig_signature.rb +3 -1
  30. data/lib/nem/transaction/provision_namespace.rb +3 -1
  31. data/lib/nem/transaction/transfer.rb +5 -3
  32. data/lib/nem/unit/time.rb +39 -0
  33. data/lib/nem/unit/version.rb +50 -0
  34. data/lib/nem/version.rb +1 -1
  35. metadata +8 -4
  36. data/lib/nem/mosaic/base.rb +0 -39
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ecc626aa901b8ebab5b35db375fb920ac1a66a9feb2193d79ff34d35eef37904
4
- data.tar.gz: 6aa07a4ba05b0757c8e78a25abecbbb3169a726eecabeeb86ac047c8a4de7d75
3
+ metadata.gz: 6cda64b6f121acde42a6bfa87e5b511e5b1724745501c6f870fb7e117633c3a0
4
+ data.tar.gz: 8adbe26b6f262f6c6aad3481d94d5eb1c83732c3a011ac811ebc7816cd7a66e1
5
5
  SHA512:
6
- metadata.gz: a051321b5579cee745c6922530f07e0fb30431401e6957a7f56bf598403aa6f9131652d1d04d8cd37172980ed1c416f337b77654b6a36795224a1d66b0811568
7
- data.tar.gz: 7946079fc07bb27eaa1631562fb3a444fd94423a35ba9a3e9e1655f23583bf482a4f819c28240f5f55bfde39b6128492384e52a74e8e07be7231922b01c30ec2
6
+ metadata.gz: d3b070d76441e1b7ce75fcf33c0a1b25b8aa73bf81c065ba62bab645d36f41344eac4a9395b3bdf6e0820da79b2c5e663dd46324bf376fe707bd2c03b8ef9cb6
7
+ data.tar.gz: 8379caf982918d94d683070ee350d85eb1e8fe3ec1ec18da39e5bb33c3320d2db65bb1e4426acd7225264db43a9fde32a1ab299881b087379ddd9103742fa608
data/README.md CHANGED
@@ -7,12 +7,10 @@
7
7
 
8
8
  <img src="https://cloud.githubusercontent.com/assets/370508/24320282/a332d238-1175-11e7-96dc-75bc30e562d2.png" width="280" height="280" alt="nem" align="right" />
9
9
 
10
- Ruby gem for communicating with the nem.
10
+ Ruby gem for communicating with nem network through the NIS API.
11
11
 
12
12
  *The gem is under development. Incompatible changes can be made.*
13
13
 
14
- *Not recommended for production use because of lack of testing, needed more improvement.*
15
-
16
14
  For further development of nem with ruby, [feel free to send me your feedback!](#feedback-and-contact)
17
15
 
18
16
  * [NEM \- Distributed Ledger Technology \(Blockchain\)](https://www.nem.io/)
@@ -1,7 +1,8 @@
1
1
  ## Mosaic attachment definition
2
2
 
3
3
  ```ruby
4
- class MyMosaic < Nem::Mosaic::Base
4
+ class MyMosaic
5
+ include Nem::Mixin::MosaicAttachable
5
6
  namespace_id 'my'
6
7
  name 'moz'
7
8
  divisibility 3
@@ -27,7 +27,8 @@ pp "TransactionHash: #{res.transaction_hash}"
27
27
  tx = Nem::Transaction::Transfer.new(B_ADDRESS, 1, 'Good luck!')
28
28
 
29
29
  # define custom mosaic attachment if you already know mosaic definition
30
- class KonHeart < Nem::Mosaic::Base
30
+ class KonHeart
31
+ include Nem::Mixin::MosaicAttachable
31
32
  namespace_id 'kon'
32
33
  name 'heart'
33
34
  divisibility 3
@@ -13,12 +13,12 @@ B_ADDRESS = 'TAWKJTUP4DWKLDKKS534TYP6G324CBNMXKBA4X7B'
13
13
  kp = Nem::Keypair.new(A_PRIVATE_KEY)
14
14
  tx = Nem::Transaction::Transfer.new(B_ADDRESS, 1, 'Good luck!')
15
15
  req = Nem::Request::Announce.new(tx, kp)
16
-
17
- entity = req.to_entity
16
+ data = req.to_entity[:data]
18
17
 
19
18
  # You can also announce to nem Network later.
20
- pp entity.to_json
19
+ pp data
21
20
 
22
21
  # deserialize data into hash
23
- pp Nem::Util::Deserializer.deserialize_transaction(req.to_entity[:data])
22
+ hash = Nem::Util::Deserializer.deserialize_transaction(data)
23
+ pp Nem::Model::Transaction.new_from_account_transaction(hash)
24
24
  ```
data/docs/mosaic.md CHANGED
@@ -1,7 +1,8 @@
1
1
  ## Mosaic attachment definition
2
2
 
3
3
  ```ruby
4
- class MyMosaic < Nem::Mosaic::Base
4
+ class MyMosaic
5
+ include Nem::Mixin::MosaicAttachable
5
6
  namespace_id 'my'
6
7
  name 'moz'
7
8
  divisibility 3
@@ -4,6 +4,13 @@ require 'nem'
4
4
  node = Nem::Node.new
5
5
 
6
6
  # new Local Endpoint Object
7
+
8
+ ## Local Chain
9
+ lchain_endpoint = Nem::Endpoint::Local::Chain.new(node)
10
+
11
+ pp lchain_endpoint.blocks_after(1_223_559)
12
+
13
+ ## Local Account
7
14
  laccount_endpoint = Nem::Endpoint::Local::Account.new(node)
8
15
 
9
16
  pp laccount_endpoint.transfers('00b4a68d16dc505302e9631b860664ba43a8183f0903bc5782a2403b2f9eb3c8a1', dir: :in)
@@ -11,7 +18,3 @@ pp laccount_endpoint.transfers('00b4a68d16dc505302e9631b860664ba43a8183f0903bc57
11
18
  pp laccount_endpoint.transfers('00b4a68d16dc505302e9631b860664ba43a8183f0903bc5782a2403b2f9eb3c8a1', dir: :out)
12
19
 
13
20
  pp laccount_endpoint.transfers('00b4a68d16dc505302e9631b860664ba43a8183f0903bc5782a2403b2f9eb3c8a1', dir: :all)
14
-
15
- lchain_endpoint = Nem::Endpoint::Local::Chain.new(node)
16
-
17
- pp lchain_endpoint.blocks_after(1_223_559)
@@ -1,11 +1,14 @@
1
1
  require 'pp'
2
2
  require 'nem'
3
3
 
4
+ req = JSON.parse(File.read('tx.json'), symbolize_names: true)
5
+ hash = Nem::Util::Deserializer.deserialize_transaction(req[:data])
6
+ pp Nem::Model::Transaction.new_from_account_transaction(hash)
7
+
4
8
  node = Nem::Node.new(host: 'bigalice2.nem.ninja')
5
9
  tx_endpoint = Nem::Endpoint::Transaction.new(node)
6
10
 
7
- req = File.read('tx.json')
8
- res = tx_endpoint.announce(JSON.parse(req))
11
+ res = tx_endpoint.announce(req)
9
12
 
10
13
  pp res
11
14
  pp "Message: #{res.message}"
@@ -0,0 +1,32 @@
1
+ require 'pp'
2
+ require 'nem'
3
+
4
+ Nem.logger.level = Logger::DEBUG
5
+
6
+ # sender
7
+ A_PRIVATE_KEY = '4ce5c8f9fce571db0d9ac1adf00b8d3ba0f078ed40835fd3d730a2f24b834214'
8
+
9
+ # recipient
10
+ B_ADDRESS = 'TA4TX6U5HG2MROAESH2JE5524T4ZOY2EQKQ6ELHF'
11
+
12
+ kp = Nem::Keypair.new(A_PRIVATE_KEY)
13
+ node = Nem::Node.new(host: 'bigalice2.nem.ninja')
14
+ tx_endpoint = Nem::Endpoint::Transaction.new(node)
15
+
16
+ # with future timestamp
17
+ tx = Nem::Transaction::Transfer.new(B_ADDRESS, 0, 'Good luck! Set future timestamp',
18
+ timestamp: Time.now + 300,
19
+ deadline: Time.now + 3900
20
+ )
21
+
22
+ req = Nem::Request::Announce.new(tx, kp)
23
+ res = tx_endpoint.announce(req)
24
+
25
+ # # It occurs "FAILURE_TIMESTAMP_TOO_FAR_IN_FUTURE"
26
+ pp "Message: #{res.message}"
27
+ pp "TransactionHash: #{res.transaction_hash}"
28
+
29
+ # Save signed transaction for announcing after 5 mins.
30
+ pp data = req.to_entity
31
+ pp 'save as tx.json'
32
+ File.write 'tx.json', data.to_json
@@ -28,7 +28,8 @@ moa = Nem::Model::MosaicAttachment.new(
28
28
  tx.mosaics << moa
29
29
 
30
30
  # define custom mosaic attachment if you already know definition.
31
- class KonHeart < Nem::Mosaic::Base
31
+ class KonHeart
32
+ include Nem::Mixin::MosaicAttachable
32
33
  namespace_id 'kon'
33
34
  name 'heart'
34
35
  divisibility 3
@@ -9,12 +9,18 @@ B_ADDRESS = 'TAWKJTUP4DWKLDKKS534TYP6G324CBNMXKBA4X7B'
9
9
 
10
10
  kp = Nem::Keypair.new(A_PRIVATE_KEY)
11
11
  tx = Nem::Transaction::Transfer.new(B_ADDRESS, 1, 'Good luck!')
12
- req = Nem::Request::Announce.new(tx, kp)
13
12
 
14
- entity = req.to_entity
13
+ tx.mosaics << Nem::Mosaic::Xem.new(1_000)
14
+ tx.mosaics << Nem::Mosaic::DimCoin.new(100)
15
+ tx.mosaics << Nem::Mosaic::DimToken.new(10)
16
+ tx.mosaics << Nem::Mosaic::EcobitEco.new(10_000)
17
+
18
+ req = Nem::Request::Announce.new(tx, kp)
19
+ data = req.to_entity[:data]
15
20
 
16
- # You can also announce to nem Network later.
17
- pp entity.to_json
21
+ # serialized transaction data
22
+ pp data
18
23
 
19
24
  # deserialize data into hash
20
- pp Nem::Util::Deserializer.deserialize_transaction(req.to_entity[:data])
25
+ hash = Nem::Util::Deserializer.deserialize_transaction(data)
26
+ pp Nem::Model::Transaction.new_from_account_transaction(hash)
@@ -4,12 +4,12 @@ module Nem
4
4
  class Account < Nem::Endpoint::Base
5
5
  # @see https://nemproject.github.io/#transaction-data-with-decoded-messages
6
6
  def transfers_incoming(value, hash: nil, id: nil, page_size: nil)
7
- request!(:post, '/local/account/transfers/incoming',
7
+ page = {
8
8
  value: value,
9
9
  hash: hash,
10
- id: id,
11
- pageSize: page_size
12
- ) do |res|
10
+ id: id
11
+ }
12
+ request!(:post, '/local/account/transfers/incoming', page) do |res|
13
13
  res[:data].map do |tx|
14
14
  Nem::Model::Transaction.new_from_account_transaction_meta_data_pair(tx)
15
15
  end
@@ -18,12 +18,12 @@ module Nem
18
18
 
19
19
  # @see https://nemproject.github.io/#transaction-data-with-decoded-messages
20
20
  def transfers_outgoing(value, hash: nil, id: nil, page_size: nil)
21
- request!(:post, '/local/account/transfers/outgoing',
21
+ page = {
22
22
  value: value,
23
23
  hash: hash,
24
- id: id,
25
- pageSize: page_size
26
- ) do |res|
24
+ id: id
25
+ }
26
+ request!(:post, '/local/account/transfers/outgoing', page) do |res|
27
27
  res[:data].map do |tx|
28
28
  Nem::Model::Transaction.new_from_account_transaction_meta_data_pair(tx)
29
29
  end
@@ -32,12 +32,12 @@ module Nem
32
32
 
33
33
  # @see https://nemproject.github.io/#transaction-data-with-decoded-messages
34
34
  def transfers_all(value, hash: nil, id: nil, page_size: nil)
35
- request!(:post, '/local/account/transfers/all',
35
+ page = {
36
36
  value: value,
37
37
  hash: hash,
38
- id: id,
39
- pageSize: page_size
40
- ) do |res|
38
+ id: id
39
+ }
40
+ request!(:post, '/local/account/transfers/all', page) do |res|
41
41
  res[:data].map do |tx|
42
42
  Nem::Model::Transaction.new_from_account_transaction_meta_data_pair(tx)
43
43
  end
@@ -0,0 +1,63 @@
1
+ module Nem
2
+ module Mixin
3
+ module MosaicAttachable
4
+ extend Forwardable
5
+ def_delegators :@mosaic_id, :fqn
6
+ def_delegators :@properties,
7
+ :divisibility,
8
+ :initial_supply,
9
+ :supply_mutable,
10
+ :transferable
11
+
12
+ attr_reader :mosaic_id, :quantity, :properties
13
+
14
+ def initialize(quantity)
15
+ mosaic_id = Nem::Model::MosaicId.new(
16
+ namespace_id: namespace_id,
17
+ name: name
18
+ )
19
+ properties = Nem::Model::MosaicProperties.new(
20
+ divisibility: divisibility,
21
+ initial_supply: initial_supply
22
+ )
23
+ @mosaic_id = mosaic_id
24
+ @properties = properties
25
+ @quantity = quantity
26
+ end
27
+
28
+ def amount
29
+ return quantity * (10**properties.divisibility)
30
+ end
31
+
32
+ def self.included(base)
33
+ base.send :prepend, self
34
+
35
+ base.class_eval do
36
+ def self.namespace_id(value)
37
+ define_method "#{__method__}" do
38
+ value
39
+ end
40
+ end
41
+
42
+ def self.name(value)
43
+ define_method "#{__method__}" do
44
+ value
45
+ end
46
+ end
47
+
48
+ def self.divisibility(value)
49
+ define_method "#{__method__}" do
50
+ value
51
+ end
52
+ end
53
+
54
+ def self.initial_supply(value)
55
+ define_method "#{__method__}" do
56
+ value
57
+ end
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end
File without changes
@@ -16,7 +16,7 @@ module Nem
16
16
  # @param [String] fqn
17
17
  # @return [Nem::Model::MosaicAttachment]
18
18
  def find_by_fqn(fqn)
19
- attachments.find {|a| a.fqn == fqn }
19
+ attachments.find { |a| a.fqn == fqn }
20
20
  end
21
21
 
22
22
  alias :[] :find_by_fqn
@@ -24,7 +24,7 @@ module Nem
24
24
  # @param [String] namespace_id
25
25
  # @return [Nem::Model::MosaicCollection]
26
26
  def find_by_namespace_id(namespace_id)
27
- self.class.new(attachments.select {|a| a.namespace_id == namespace_id })
27
+ self.class.new(attachments.select { |a| a.namespace_id == namespace_id })
28
28
  end
29
29
  end
30
30
  end
@@ -3,6 +3,9 @@ module Nem
3
3
  class Transaction
4
4
  include Nem::Mixin::Assignable
5
5
 
6
+ extend Forwardable
7
+ def_delegators :@version, :version, :network
8
+
6
9
  attr_reader :timestamp,
7
10
  :version,
8
11
  :type,
@@ -13,10 +16,6 @@ module Nem
13
16
  :hash,
14
17
  :height
15
18
 
16
- def version?(num)
17
- version & 0x00000003 == num ? true : false
18
- end
19
-
20
19
  def self.new_from_account_transaction(hash)
21
20
  new_from_account_transaction_meta_data_pair(
22
21
  meta: { data: nil },
@@ -44,12 +43,12 @@ module Nem
44
43
 
45
44
  def self.common_part(hash)
46
45
  {
47
- timestamp: hash[:timeStamp],
48
- version: hash[:version],
49
- type: hash[:type],
50
- signer: hash[:signer],
46
+ timestamp: Nem::Unit::Time.new_from_nemtime(hash[:timeStamp]),
47
+ deadline: Nem::Unit::Time.new_from_nemtime(hash[:deadline]),
51
48
  fee: hash[:fee],
52
- deadline: hash[:deadline]
49
+ type: hash[:type],
50
+ version: Nem::Unit::Version.new(hash[:version]),
51
+ signer: hash[:signer]
53
52
  }
54
53
  end
55
54
 
@@ -0,0 +1,11 @@
1
+ module Nem
2
+ module Mosaic
3
+ class ComsaCms
4
+ include Nem::Mixin::MosaicAttachable
5
+ namespace_id 'comsa'
6
+ name 'cms'
7
+ divisibility 6
8
+ initial_supply 219042298
9
+ end
10
+ end
11
+ end
@@ -1,6 +1,7 @@
1
1
  module Nem
2
2
  module Mosaic
3
- class DimCoin < Base
3
+ class DimCoin
4
+ include Nem::Mixin::MosaicAttachable
4
5
  namespace_id 'dim'
5
6
  name 'coin'
6
7
  divisibility 6
@@ -1,6 +1,7 @@
1
1
  module Nem
2
2
  module Mosaic
3
- class DimToken < Base
3
+ class DimToken
4
+ include Nem::Mixin::MosaicAttachable
4
5
  namespace_id 'dim'
5
6
  name 'token'
6
7
  divisibility 6
@@ -1,6 +1,7 @@
1
1
  module Nem
2
2
  module Mosaic
3
- class EcobitEco < Base
3
+ class EcobitEco
4
+ include Nem::Mixin::MosaicAttachable
4
5
  namespace_id 'ecobit'
5
6
  name 'eco'
6
7
  divisibility 0
@@ -1,6 +1,7 @@
1
1
  module Nem
2
2
  module Mosaic
3
- class Xem < Base
3
+ class Xem
4
+ include Nem::Mixin::MosaicAttachable
4
5
  namespace_id 'nem'
5
6
  name 'xem'
6
7
  divisibility 6
@@ -41,11 +41,13 @@ module Nem
41
41
  end
42
42
 
43
43
  def prepare_multisig(tx)
44
+ timestamp = Nem::Unit::Time.new(tx.other_trans.timestamp)
45
+ deadline = Nem::Unit::Time.new(tx.other_trans.deadline)
44
46
  other_trans = tx.other_trans.to_hash.merge(
45
47
  type: tx.other_trans.type,
46
48
  fee: tx.other_trans.fee.to_i,
47
- timeStamp: Nem::Util.timestamp,
48
- deadline: Nem::Util.deadline(Nem.default_deadline),
49
+ timeStamp: timestamp.to_i,
50
+ deadline: deadline.to_i,
49
51
  signer: tx.signer,
50
52
  version: tx.other_trans.version
51
53
  )
@@ -55,11 +57,13 @@ module Nem
55
57
  end
56
58
 
57
59
  def set_common(hash)
60
+ timestamp = Nem::Unit::Time.new(transaction.timestamp)
61
+ deadline = Nem::Unit::Time.new(transaction.deadline)
58
62
  hash.merge(
59
63
  type: transaction.type,
60
64
  fee: transaction.fee.to_i,
61
- timeStamp: Nem::Util.timestamp,
62
- deadline: Nem::Util.deadline(Nem.default_deadline),
65
+ timeStamp: timestamp.to_i,
66
+ deadline: deadline.to_i,
63
67
  signer: keypair.public,
64
68
  version: transaction.version
65
69
  )
@@ -7,9 +7,8 @@ module Nem
7
7
  # @attr [String] signer
8
8
  # @attr [String] signature
9
9
  class Base
10
- attr_reader :type, :fee,
11
- :timestamp, :deadline, :signer, :signature
12
- # :version, :network
10
+ attr_reader :type, :fee, :timestamp, :deadline,
11
+ :signer, :signature
13
12
 
14
13
  {
15
14
  transfer: 0x0101,
@@ -11,13 +11,15 @@ module Nem
11
11
 
12
12
  attr_reader :mode, :remote_account
13
13
 
14
- def initialize(remote_account, mode, network: nil)
14
+ def initialize(remote_account, mode, timestamp: nil, deadline: nil, network: nil)
15
15
  @remote_account = remote_account
16
16
  @mode = mode
17
17
 
18
18
  @network = network || Nem.default_network
19
19
  @type = TYPE
20
20
  @fee = Nem::Fee::ImportanceTransfer.new(self)
21
+ @timestamp = timestamp || Time.now
22
+ @deadline = deadline || Time.now + Nem.default_deadline
21
23
  end
22
24
 
23
25
  # attributes must be CAMEL CASE for NIS params
@@ -9,7 +9,7 @@ module Nem
9
9
 
10
10
  attr_reader :mosaic_definition, :creation_fee, :creation_fee_sink
11
11
 
12
- def initialize(mosaic_definition, network: nil)
12
+ def initialize(mosaic_definition, timestamp: nil, deadline: nil, network: nil)
13
13
  @mosaic_definition = mosaic_definition
14
14
  @creation_fee = creation[:fee]
15
15
  @creation_fee_sink = creation[:sink]
@@ -17,6 +17,8 @@ module Nem
17
17
  @network = network || Nem.default_network
18
18
  @type = TYPE
19
19
  @fee = Nem::Fee::MosaicDefinitionCreation.new(self)
20
+ @timestamp = timestamp || Time.now
21
+ @deadline = deadline || Time.now + Nem.default_deadline
20
22
  end
21
23
 
22
24
  # attributes must be CAMEL CASE for NIS params
@@ -12,7 +12,7 @@ module Nem
12
12
 
13
13
  attr_accessor :mosaic_id, :supply_type, :delta
14
14
 
15
- def initialize(mosaic_id, type, delta, network: nil)
15
+ def initialize(mosaic_id, type, delta, timestamp: nil, deadline: nil, network: nil)
16
16
  @mosaic_id = mosaic_id
17
17
  @supply_type = type
18
18
  @delta = delta
@@ -20,6 +20,8 @@ module Nem
20
20
  @network = network || Nem.default_network
21
21
  @type = TYPE
22
22
  @fee = Nem::Fee::MosaicSupplyChangeTransfer.new(self)
23
+ @timestamp = timestamp || Time.now
24
+ @deadline = deadline || Time.now + Nem.default_deadline
23
25
  end
24
26
 
25
27
  # attributes must be CAMEL CASE for NIS params
@@ -8,13 +8,15 @@ module Nem
8
8
 
9
9
  attr_reader :other_trans, :signer
10
10
 
11
- def initialize(trans, signer, network: nil)
11
+ def initialize(trans, signer, timestamp: nil, deadline: nil, network: nil)
12
12
  @other_trans = trans
13
13
  @signer = signer
14
14
 
15
15
  @network = network || Nem.default_network
16
16
  @type = TYPE
17
17
  @fee = Nem::Fee::Multisig.new(self)
18
+ @timestamp = timestamp || Time.now
19
+ @deadline = deadline || Time.now + Nem.default_deadline
18
20
  end
19
21
 
20
22
  # attributes must be CAMEL CASE for NIS params
@@ -8,13 +8,15 @@ module Nem
8
8
 
9
9
  attr_reader :modifications, :relative_change, :min_cosignatories
10
10
 
11
- def initialize(modifications, relative_change, network: nil)
11
+ def initialize(modifications, relative_change, timestamp: nil, deadline: nil, network: nil)
12
12
  @modifications = modifications
13
13
  @relative_change = relative_change
14
14
 
15
15
  @network = network || Nem.default_network
16
16
  @type = TYPE
17
17
  @fee = Nem::Fee::MultisigAggregateModification.new(self)
18
+ @timestamp = timestamp || Time.now
19
+ @deadline = deadline || Time.now + Nem.default_deadline
18
20
  end
19
21
 
20
22
  # attributes must be CAMEL CASE for NIS params
@@ -8,7 +8,7 @@ module Nem
8
8
 
9
9
  attr_reader :other_hash, :other_account, :signer
10
10
 
11
- def initialize(other_hash, other_account, signer, network: nil)
11
+ def initialize(other_hash, other_account, signer, timestamp: nil, deadline: nil, network: nil)
12
12
  @other_hash = other_hash
13
13
  @other_account = other_account
14
14
  @signer = signer
@@ -16,6 +16,8 @@ module Nem
16
16
  @network = network || Nem.default_network
17
17
  @type = TYPE
18
18
  @fee = Nem::Fee::Multisig.new(self)
19
+ @timestamp = timestamp || Time.now
20
+ @deadline = deadline || Time.now + Nem.default_deadline
19
21
  end
20
22
 
21
23
  # attributes must be CAMEL CASE for NIS params
@@ -9,7 +9,7 @@ module Nem
9
9
 
10
10
  attr_reader :new_part, :parent, :rental_fee_sink, :rental_fee
11
11
 
12
- def initialize(new_part, parent = nil, network: nil)
12
+ def initialize(new_part, parent = nil, timestamp: nil, deadline: nil, network: nil)
13
13
  @new_part = new_part
14
14
  @parent = parent
15
15
  @rental_fee = rental[:fee]
@@ -18,6 +18,8 @@ module Nem
18
18
  @network = network || Nem.default_network
19
19
  @type = TYPE
20
20
  @fee = Nem::Fee::ProvisionNamespace.new(self)
21
+ @timestamp = timestamp || Time.now
22
+ @deadline = deadline || Time.now + Nem.default_deadline
21
23
  end
22
24
 
23
25
  # @return [Boolean]
@@ -13,7 +13,7 @@ module Nem
13
13
 
14
14
  attr_reader :amount, :recipient, :message, :mosaics
15
15
 
16
- def initialize(recipient, amount, message = '', mosaics: [], network: nil)
16
+ def initialize(recipient, amount, message = '', mosaics: [], timestamp: nil, deadline: nil, network: nil)
17
17
  @amount = amount
18
18
  @recipient = recipient
19
19
  @message = message.is_a?(Nem::Model::Message) ?
@@ -24,16 +24,18 @@ module Nem
24
24
  @network = network || Nem.default_network
25
25
  @type = TYPE
26
26
  @fee = Nem::Fee::Transfer.new(self)
27
+ @timestamp = timestamp || Time.now
28
+ @deadline = deadline || Time.now + Nem.default_deadline
27
29
  end
28
30
 
29
31
  # @return [Boolean]
30
32
  def has_message?
31
- @message.bytesize > 0
33
+ message.bytesize > 0
32
34
  end
33
35
 
34
36
  # @return [Boolean]
35
37
  def has_mosaics?
36
- @mosaics.size > 0
38
+ mosaics.size > 0
37
39
  end
38
40
 
39
41
  def version
@@ -0,0 +1,39 @@
1
+ module Nem
2
+ module Unit
3
+ class Time
4
+ NEM_EPOCH = ::Time.utc(2015, 3, 29, 0, 6, 25, 0)
5
+
6
+ def initialize(value)
7
+ @value = value
8
+ end
9
+
10
+ def +(other)
11
+ self.class.new(@value + other)
12
+ end
13
+
14
+ def -(other)
15
+ self.class.new(@value - other)
16
+ end
17
+
18
+ def to_i
19
+ (@value - NEM_EPOCH).to_i
20
+ end
21
+
22
+ def to_time
23
+ @value.to_time
24
+ end
25
+
26
+ def self.parse(datetime)
27
+ new(::Time.parse(datetime))
28
+ end
29
+
30
+ def self.now
31
+ new(::Time.now.utc)
32
+ end
33
+
34
+ def self.new_from_nemtime(nemtime)
35
+ new(NEM_EPOCH + nemtime)
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,50 @@
1
+ module Nem
2
+ module Unit
3
+ # @attr [String] value
4
+ class Version
5
+ TESTNET = 0x98 << 24 # -1744830464
6
+ MAINNET = 0x68 << 24 # 1744830464
7
+ MIJIN = 0x60 << 24
8
+
9
+ MASK_VERSION = 0x00000003
10
+ MASK_NETWORK = 0xfffffffc
11
+
12
+ attr_accessor :value
13
+
14
+ def initialize(value)
15
+ @value = value
16
+ end
17
+
18
+ # @return [Integer]
19
+ def version
20
+ @version ||= value & MASK_VERSION
21
+ end
22
+
23
+ # @return [Integer]
24
+ def network
25
+ @network ||= value & MASK_NETWORK
26
+ end
27
+
28
+ %w[testnet mainnet mijin].each do |k|
29
+ # @return [Boolean]
30
+ define_method("#{k}?") {
31
+ network == self.class.const_get(k.upcase) }
32
+ end
33
+
34
+ # @return [String]
35
+ def to_s
36
+ to_i.to_s
37
+ end
38
+
39
+ # @return [Integer]
40
+ def to_i
41
+ value.to_i
42
+ end
43
+
44
+ # @return [Boolean]
45
+ def ==(other)
46
+ version == other
47
+ end
48
+ end
49
+ end
50
+ end
data/lib/nem/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Nem
2
- VERSION = '0.0.6'
2
+ VERSION = '0.0.7'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nem-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yoshiyuki Ieyama
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-01-05 00:00:00.000000000 Z
11
+ date: 2018-01-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -234,6 +234,7 @@ files:
234
234
  - examples/node_pool.rb
235
235
  - examples/offline/announce_offline_transfer.rb
236
236
  - examples/offline/create_offline_transfer.rb
237
+ - examples/offline/future_timestamp.rb
237
238
  - examples/transaction/importance_transfer.rb
238
239
  - examples/transaction/mosaic_definition_creation.rb
239
240
  - examples/transaction/mosaic_supply_change.rb
@@ -277,7 +278,8 @@ files:
277
278
  - lib/nem/keypair.rb
278
279
  - lib/nem/mixin.rb
279
280
  - lib/nem/mixin/assignable.rb
280
- - lib/nem/mixin/mosaic.rb
281
+ - lib/nem/mixin/mosaic_attachable.rb
282
+ - lib/nem/mixin/mosaic_definition.rb
281
283
  - lib/nem/model.rb
282
284
  - lib/nem/model/account.rb
283
285
  - lib/nem/model/account_historical.rb
@@ -320,7 +322,7 @@ files:
320
322
  - lib/nem/model/transfer_transaction.rb
321
323
  - lib/nem/model/unlocked_info.rb
322
324
  - lib/nem/mosaic.rb
323
- - lib/nem/mosaic/base.rb
325
+ - lib/nem/mosaic/comsa_cms.rb
324
326
  - lib/nem/mosaic/dim_coin.rb
325
327
  - lib/nem/mosaic/dim_token.rb
326
328
  - lib/nem/mosaic/ecobit_eco.rb
@@ -342,6 +344,8 @@ files:
342
344
  - lib/nem/transaction/transfer.rb
343
345
  - lib/nem/unit.rb
344
346
  - lib/nem/unit/address.rb
347
+ - lib/nem/unit/time.rb
348
+ - lib/nem/unit/version.rb
345
349
  - lib/nem/util.rb
346
350
  - lib/nem/util/convert.rb
347
351
  - lib/nem/util/deserializer.rb
@@ -1,39 +0,0 @@
1
- module Nem
2
- module Mosaic
3
- class Base < Nem::Model::MosaicAttachment
4
- extend Nem::Mixin::MosaicDefinition
5
-
6
- def initialize(quantity)
7
- mosaic_id = Nem::Model::MosaicId.new(
8
- namespace_id: namespace_id,
9
- name: name
10
- )
11
- properties = Nem::Model::MosaicProperties.new(
12
- divisibility: divisibility,
13
- initial_supply: initial_supply
14
- )
15
- super(
16
- mosaic_id: mosaic_id,
17
- properties: properties,
18
- quantity: quantity
19
- )
20
- end
21
-
22
- def namespace_id
23
- raise NotImplementedError, "#{self.class}##{__method__} must be implemented."
24
- end
25
-
26
- def name
27
- raise NotImplementedError, "#{self.class}##{__method__} must be implemented."
28
- end
29
-
30
- def divisibility
31
- raise NotImplementedError, "#{self.class}##{__method__} must be implemented."
32
- end
33
-
34
- def initial_supply
35
- raise NotImplementedError, "#{self.class}##{__method__} must be implemented."
36
- end
37
- end
38
- end
39
- end