nem-ruby 0.0.1

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 (136) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +12 -0
  3. data/.rspec +2 -0
  4. data/.rubocop.yml +119 -0
  5. data/.travis.yml +23 -0
  6. data/CODE_OF_CONDUCT.md +74 -0
  7. data/Gemfile +6 -0
  8. data/README.md +81 -0
  9. data/Rakefile +6 -0
  10. data/examples/apostille_audit.rb +22 -0
  11. data/examples/apostille_create.rb +31 -0
  12. data/examples/endpoint/account.rb +73 -0
  13. data/examples/endpoint/account_local.rb +21 -0
  14. data/examples/endpoint/block.rb +14 -0
  15. data/examples/endpoint/chain.rb +15 -0
  16. data/examples/endpoint/debug.rb +17 -0
  17. data/examples/endpoint/local.rb +17 -0
  18. data/examples/endpoint/mosaic.rb +9 -0
  19. data/examples/endpoint/namespace.rb +13 -0
  20. data/examples/endpoint/node.rb +24 -0
  21. data/examples/endpoint/timesync.rb +9 -0
  22. data/examples/endpoint/transaction.rb +42 -0
  23. data/examples/localnode.rb +0 -0
  24. data/examples/nis.rb +34 -0
  25. data/examples/node_pool.rb +23 -0
  26. data/examples/transaction/importance_transfer.rb +23 -0
  27. data/examples/transaction/mosaic_definition_creation.rb +52 -0
  28. data/examples/transaction/mosaic_supply_change.rb +25 -0
  29. data/examples/transaction/multisig_add_cosignatory.rb +31 -0
  30. data/examples/transaction/multisig_aggregate_modification.rb +29 -0
  31. data/examples/transaction/multisig_signature.rb +41 -0
  32. data/examples/transaction/multisig_transfer.rb +35 -0
  33. data/examples/transaction/provision_namespace.rb +20 -0
  34. data/examples/transaction/transfer.rb +32 -0
  35. data/examples/transaction/transfer_mosaic.rb +72 -0
  36. data/examples/transaction/transfer_with_encrypted_message.rb +40 -0
  37. data/examples/transaction/transfer_with_local.rb +34 -0
  38. data/lib/nem.rb +21 -0
  39. data/lib/nem/apostille.rb +104 -0
  40. data/lib/nem/apostille_audit.rb +47 -0
  41. data/lib/nem/client.rb +170 -0
  42. data/lib/nem/configuration.rb +29 -0
  43. data/lib/nem/endpoint.rb +4 -0
  44. data/lib/nem/endpoint/account.rb +264 -0
  45. data/lib/nem/endpoint/base.rb +45 -0
  46. data/lib/nem/endpoint/block.rb +15 -0
  47. data/lib/nem/endpoint/chain.rb +17 -0
  48. data/lib/nem/endpoint/debug.rb +54 -0
  49. data/lib/nem/endpoint/local/account.rb +54 -0
  50. data/lib/nem/endpoint/local/chain.rb +15 -0
  51. data/lib/nem/endpoint/mosaic.rb +13 -0
  52. data/lib/nem/endpoint/namespace.rb +37 -0
  53. data/lib/nem/endpoint/node.rb +83 -0
  54. data/lib/nem/endpoint/timesync.rb +9 -0
  55. data/lib/nem/endpoint/transaction.rb +34 -0
  56. data/lib/nem/error.rb +6 -0
  57. data/lib/nem/fee.rb +2 -0
  58. data/lib/nem/fee/importance_transfer.rb +24 -0
  59. data/lib/nem/fee/mosaic_definition_creation.rb +24 -0
  60. data/lib/nem/fee/mosaic_supply_change_transfer.rb +24 -0
  61. data/lib/nem/fee/multisig.rb +24 -0
  62. data/lib/nem/fee/multisig_aggregation_modification.rb +28 -0
  63. data/lib/nem/fee/provision_namespace.rb +34 -0
  64. data/lib/nem/fee/transfer.rb +66 -0
  65. data/lib/nem/keypair.rb +44 -0
  66. data/lib/nem/mixin.rb +2 -0
  67. data/lib/nem/mixin/assignable.rb +12 -0
  68. data/lib/nem/model.rb +3 -0
  69. data/lib/nem/model/account.rb +67 -0
  70. data/lib/nem/model/account_historical.rb +19 -0
  71. data/lib/nem/model/block.rb +33 -0
  72. data/lib/nem/model/chain.rb +14 -0
  73. data/lib/nem/model/connection.rb +23 -0
  74. data/lib/nem/model/experience.rb +20 -0
  75. data/lib/nem/model/explorer_block.rb +21 -0
  76. data/lib/nem/model/harvest.rb +23 -0
  77. data/lib/nem/model/heartbeat.rb +21 -0
  78. data/lib/nem/model/importance.rb +29 -0
  79. data/lib/nem/model/importance_transfer_transaction.rb +16 -0
  80. data/lib/nem/model/keypair.rb +19 -0
  81. data/lib/nem/model/message.rb +91 -0
  82. data/lib/nem/model/mosaic.rb +21 -0
  83. data/lib/nem/model/mosaic_attachment.rb +22 -0
  84. data/lib/nem/model/mosaic_definition.rb +65 -0
  85. data/lib/nem/model/mosaic_definition_creation_transaction.rb +18 -0
  86. data/lib/nem/model/mosaic_id.rb +27 -0
  87. data/lib/nem/model/mosaic_levy.rb +32 -0
  88. data/lib/nem/model/mosaic_owned.rb +22 -0
  89. data/lib/nem/model/mosaic_properties.rb +44 -0
  90. data/lib/nem/model/mosaic_supply.rb +21 -0
  91. data/lib/nem/model/mosaic_supply_change_transaction.rb +18 -0
  92. data/lib/nem/model/multisig_aggregate_modification_transaction.rb +21 -0
  93. data/lib/nem/model/multisig_info.rb +16 -0
  94. data/lib/nem/model/multisig_signature_transaction.rb +17 -0
  95. data/lib/nem/model/multisig_transaction.rb +21 -0
  96. data/lib/nem/model/namespace.rb +24 -0
  97. data/lib/nem/model/nem_announce_result.rb +19 -0
  98. data/lib/nem/model/network_time.rb +16 -0
  99. data/lib/nem/model/nis_node_info.rb +26 -0
  100. data/lib/nem/model/node.rb +41 -0
  101. data/lib/nem/model/provision_namespace_transaction.rb +18 -0
  102. data/lib/nem/model/status.rb +21 -0
  103. data/lib/nem/model/timer.rb +31 -0
  104. data/lib/nem/model/timesync.rb +19 -0
  105. data/lib/nem/model/transaction.rb +71 -0
  106. data/lib/nem/model/transfer_transaction.rb +24 -0
  107. data/lib/nem/model/unlocked_info.rb +24 -0
  108. data/lib/nem/mosaic.rb +2 -0
  109. data/lib/nem/mosaic/dim_coin.rb +21 -0
  110. data/lib/nem/mosaic/dim_token.rb +21 -0
  111. data/lib/nem/mosaic/ecobit_eco.rb +21 -0
  112. data/lib/nem/mosaic/xem.rb +21 -0
  113. data/lib/nem/node.rb +29 -0
  114. data/lib/nem/node_pool.rb +31 -0
  115. data/lib/nem/request.rb +2 -0
  116. data/lib/nem/request/announce.rb +76 -0
  117. data/lib/nem/transaction.rb +3 -0
  118. data/lib/nem/transaction/base.rb +45 -0
  119. data/lib/nem/transaction/importance_transfer.rb +42 -0
  120. data/lib/nem/transaction/mosaic_definition_creation.rb +45 -0
  121. data/lib/nem/transaction/mosaic_supply_change.rb +45 -0
  122. data/lib/nem/transaction/multisig.rb +29 -0
  123. data/lib/nem/transaction/multisig_aggregate_modification.rb +30 -0
  124. data/lib/nem/transaction/multisig_cosignatory_modification.rb +33 -0
  125. data/lib/nem/transaction/multisig_signature.rb +31 -0
  126. data/lib/nem/transaction/provision_namespace.rb +65 -0
  127. data/lib/nem/transaction/transfer.rb +63 -0
  128. data/lib/nem/util.rb +44 -0
  129. data/lib/nem/util/assignable.rb +51 -0
  130. data/lib/nem/util/convert.rb +112 -0
  131. data/lib/nem/util/deserializer.rb +158 -0
  132. data/lib/nem/util/ed25519.rb +316 -0
  133. data/lib/nem/util/serializer.rb +260 -0
  134. data/lib/nem/version.rb +3 -0
  135. data/nem-ruby.gemspec +46 -0
  136. metadata +350 -0
@@ -0,0 +1,22 @@
1
+ module Nem
2
+ module Model
3
+ class MosaicAttachment
4
+ include Nem::Mixin::Assignable
5
+
6
+ extend Forwardable
7
+
8
+ def_delegators :@mosaic_id, :fqn
9
+ def_delegators :@properties,
10
+ :divisibility,
11
+ :initial_supply,
12
+ :supply_mutable,
13
+ :transferable
14
+
15
+ attr_reader :mosaic_id, :properties, :quantity
16
+
17
+ def amount
18
+ return quantity * (10**properties.divisibility)
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,65 @@
1
+ module Nem
2
+ module Model
3
+ class MosaicDefinition
4
+ include Nem::Mixin::Assignable
5
+
6
+ extend Forwardable
7
+
8
+ def_delegators :@properties,
9
+ :divisibility,
10
+ :initial_supply,
11
+ :supply_mutable,
12
+ :transferable
13
+
14
+ attr_reader :creator,
15
+ :id,
16
+ :description,
17
+ :properties,
18
+ :levy,
19
+ :meta_id
20
+
21
+ def self.new_from_mosaic_definition(hash)
22
+ id = Nem::Model::MosaicId.new_from_mosaic_id(hash[:id])
23
+ props = Nem::Model::MosaicProperties.new_from_mosaic_properties(hash[:properties])
24
+ levy = Nem::Model::MosaicLevy.new_from_mosaic_levy(hash[:levy])
25
+ new(
26
+ creator: hash[:creator],
27
+ description: hash[:description],
28
+ id: id,
29
+ properties: props,
30
+ levy: levy
31
+ )
32
+ end
33
+
34
+ def self.new_from_mosaic_definition_meta_data_pair(hash)
35
+ meta = hash[:meta]
36
+ mosaic = hash[:mosaic]
37
+ id = Nem::Model::MosaicId.new_from_mosaic_id(mosaic[:id])
38
+ props = Nem::Model::MosaicProperties.new_from_mosaic_properties(mosaic[:properties])
39
+ levy = Nem::Model::MosaicLevy.new_from_mosaic_levy(mosaic[:levy])
40
+ new(
41
+ meta_id: meta[:id],
42
+ creator: hash[:creator],
43
+ description: hash[:description],
44
+ id: id,
45
+ properties: props,
46
+ levy: levy
47
+ )
48
+ end
49
+
50
+ def has_levy?
51
+ ! @levy.empty?
52
+ end
53
+
54
+ def to_hash
55
+ {
56
+ creator: creator,
57
+ id: id.to_hash,
58
+ description: description,
59
+ properties: properties.to_hash,
60
+ levy: levy.to_hash
61
+ }
62
+ end
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,18 @@
1
+ module Nem
2
+ module Model
3
+ class MosaicDefinitionCreationTransaction < Transaction
4
+ attr_reader :creation_fee, :creation_fee_sink, :mosaic_definition
5
+
6
+ def self.new_from_transaction_meta_data_pair(hash)
7
+ transaction = hash[:transaction]
8
+ mo_def = MosaicDefinition.new_from_mosaic_definition(transaction[:mosaicDefinition])
9
+ attrs = common_part_meta_data_pair(hash).merge(
10
+ creation_fee: transaction[:creationFee],
11
+ creation_fee_sink: transaction[:creationFeeSink],
12
+ mosaic_definition: mo_def
13
+ )
14
+ new(attrs)
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,27 @@
1
+ module Nem
2
+ module Model
3
+ class MosaicId
4
+ include Nem::Mixin::Assignable
5
+
6
+ attr_reader :namespace_id, :name
7
+
8
+ def self.new_from_mosaic_id(hash)
9
+ new(
10
+ namespace_id: hash[:namespaceId],
11
+ name: hash[:name]
12
+ )
13
+ end
14
+
15
+ def fqn
16
+ @fqn ||= "#{@namespace_id}:#{@name}"
17
+ end
18
+
19
+ def to_hash
20
+ {
21
+ namespaceId: namespace_id,
22
+ name: name
23
+ }
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,32 @@
1
+ module Nem
2
+ module Model
3
+ class MosaicLevy
4
+ include Nem::Mixin::Assignable
5
+
6
+ attr_reader :fee,
7
+ :recipient,
8
+ :type,
9
+ :mosaic_id
10
+
11
+ def self.new_from_mosaic_levy(hash)
12
+ return nil if hash.empty?
13
+ mosaic_id = Nem::Model::MosaicId.new_from_mosaic_id(hash[:mosaicId])
14
+ new(
15
+ fee: hash[:fee],
16
+ recipient: hash[:recipient],
17
+ type: hash[:type],
18
+ mosaic_id: mosaic_id
19
+ )
20
+ end
21
+
22
+ def to_hash
23
+ {
24
+ fee: fee,
25
+ recipient: recipient,
26
+ type: type,
27
+ mosaicId: mosaic_id.to_hash
28
+ }
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,22 @@
1
+ module Nem
2
+ module Model
3
+ class MosaicOwned
4
+ include Nem::Mixin::Assignable
5
+
6
+ attr_reader :mosaics
7
+
8
+ def self.new_from_mosaic_owned(hash)
9
+ mosaics = hash[:data].inject({}) do |memo, mos|
10
+ mosaic = Nem::Model::Mosaic.new_from_mosaic(mos)
11
+ memo[mosaic.fqn] = mosaic
12
+ memo
13
+ end
14
+ new(mosaics: mosaics)
15
+ end
16
+
17
+ def find(fqn)
18
+ mosaics[fqn]
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,44 @@
1
+ module Nem
2
+ module Model
3
+ class MosaicProperties
4
+ include Nem::Mixin::Assignable
5
+
6
+ attr_reader :divisibility,
7
+ :initial_supply,
8
+ :supply_mutable,
9
+ :transferable
10
+
11
+ def self.new_from_mosaic_properties(hash)
12
+ props = hash.inject({}) do |memo, prop|
13
+ memo[prop[:name]] = case prop[:name]
14
+ when 'divisibility' then prop[:value].to_i
15
+ when 'initialSupply' then prop[:value].to_i
16
+ when 'supplyMutable' then prop[:value] == 'true' ? true : false
17
+ when 'transferable' then prop[:value] == 'true' ? true : false
18
+ else prop[:value]
19
+ end
20
+ memo
21
+ end
22
+ new(
23
+ divisibility: props['divisibility'],
24
+ initial_supply: props['initialSupply'],
25
+ supply_mutable: props['supplyMutable'],
26
+ transferable: props['transferable']
27
+ )
28
+ end
29
+
30
+ def to_a
31
+ [
32
+ { name: 'divisibility', value: divisibility.to_s },
33
+ { name: 'initialSupply', value: initial_supply.to_s },
34
+ { name: 'supplyMutable', value: supply_mutable ? 'true' : 'false' },
35
+ { name: 'transferable', value: transferable ? 'true' : 'false' }
36
+ ]
37
+ end
38
+
39
+ def to_hash
40
+ to_a
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,21 @@
1
+ module Nem
2
+ module Model
3
+ class MosaicSupply
4
+ include Nem::Mixin::Assignable
5
+
6
+ extend Forwardable
7
+
8
+ def_delegators :@id, :namespace_id, :name
9
+
10
+ attr_reader :id, :supply
11
+
12
+ def self.new_from_mosaic_supply(hash)
13
+ id = Nem::Model::MosaicId.new_from_mosaic_id(hash[:mosaicId])
14
+ new(
15
+ id: id,
16
+ supply: hash[:supply]
17
+ )
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,18 @@
1
+ module Nem
2
+ module Model
3
+ class MosaicSupplyChangeTransaction < Transaction
4
+ attr_reader :supply_type, :delta, :mosaic_id
5
+
6
+ def self.new_from_transaction_meta_data_pair(hash)
7
+ transaction = hash[:transaction]
8
+ mo_id = MosaicId.new_from_mosaic_id(transaction[:mosaicId])
9
+ attrs = common_part_meta_data_pair(hash).merge(
10
+ supply_type: transaction[:supplyType],
11
+ delta: transaction[:delta],
12
+ mosaic_id: mo_id
13
+ )
14
+ new(attrs)
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,21 @@
1
+ module Nem
2
+ module Model
3
+ class MultisigAggregateModificationTransaction < Transaction
4
+ attr_reader :min_cosignatories, :relative_change, :modifications
5
+
6
+ Modification = Struct.new(:modification_type, :cosignatory_account)
7
+ def self.new_from_transaction_meta_data_pair(hash)
8
+ transaction = hash[:transaction]
9
+ modifications = transaction[:modifications].map do |mod|
10
+ Modification.new(mod[:modificationType], mod[:cosignatoryAccount])
11
+ end
12
+ attrs = common_part_meta_data_pair(hash).merge(
13
+ # TODO: check
14
+ # relative_change: transaction[:minCosignatories][:relativeChange],
15
+ modifications: modifications
16
+ )
17
+ new(attrs)
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,16 @@
1
+ module Nem
2
+ module Model
3
+ class MultisigInfo
4
+ include Nem::Mixin::Assignable
5
+
6
+ attr_reader :cosignatories_count, :min_cosignatories
7
+
8
+ def self.new_from_multisig_info(hash)
9
+ new(
10
+ cosignatories_count: hash[:cosignatoriesCount],
11
+ min_cosignatories: hash[:minCosignatories]
12
+ )
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,17 @@
1
+ module Nem
2
+ module Model
3
+ class MultisigSignatureTransaction < Transaction
4
+ include Nem::Mixin::Assignable
5
+
6
+ attr_reader :other_hash, :other_account
7
+
8
+ def self.new_from_multisig_signature(hash)
9
+ attrs = common_part(hash).merge(
10
+ other_hash: hash[:otherHash][:data],
11
+ other_account: hash[:otherAccount]
12
+ )
13
+ new(attrs)
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,21 @@
1
+ module Nem
2
+ module Model
3
+ class MultisigTransaction < Transaction
4
+ attr_reader :other_trans, :signatures
5
+
6
+ def self.new_from_transaction_meta_data_pair(hash)
7
+ transaction = hash[:transaction]
8
+ signs = transaction[:signatures].map do |sign|
9
+ MultisigSignatureTransaction.new_from_multisig_signature(sign)
10
+ end
11
+ other = transaction[:otherTrans]
12
+ other_trans = new_from_account_transaction(other)
13
+ attrs = common_part_meta_data_pair(hash).merge(
14
+ signatures: signs,
15
+ other_trans: other_trans
16
+ )
17
+ new(attrs)
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,24 @@
1
+ module Nem
2
+ module Model
3
+ class Namespace
4
+ include Nem::Mixin::Assignable
5
+
6
+ attr_reader :id, :fqn, :owner, :height
7
+
8
+ def self.new_from_namespace_meta_data_pair(hash)
9
+ meta = hash[:meta]
10
+ ns = hash[:namespace]
11
+ new(
12
+ id: meta[:id],
13
+ fqn: ns[:fqn],
14
+ owner: ns[:owner],
15
+ height: ns[:height]
16
+ )
17
+ end
18
+
19
+ def self.new_from_namespace(hash)
20
+ new(hash)
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,19 @@
1
+ module Nem
2
+ module Model
3
+ class NemAnnounceResult
4
+ include Nem::Mixin::Assignable
5
+
6
+ attr_reader :type, :code, :message, :transaction_hash, :inner_transaction_hash
7
+
8
+ def self.new_from_nem_announce_result(hash)
9
+ new(
10
+ type: hash[:type],
11
+ code: hash[:code],
12
+ message: hash[:message],
13
+ transaction_hash: hash[:transactionHash][:data],
14
+ inner_transaction_hash: hash[:innerTransactionHash][:data]
15
+ )
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,16 @@
1
+ module Nem
2
+ module Model
3
+ class NetworkTime
4
+ include Nem::Mixin::Assignable
5
+
6
+ attr_reader :send_timestamp, :receive_timestamp
7
+
8
+ def self.new_from_network_time(hash)
9
+ new(
10
+ send_timestamp: hash[:sendTimeStamp],
11
+ receive_timestamp: hash[:receiveTimeStamp]
12
+ )
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,26 @@
1
+ module Nem
2
+ module Model
3
+ class NisInfo
4
+ include Nem::Mixin::Assignable
5
+
6
+ attr_reader :current_time,
7
+ :application,
8
+ :start_time,
9
+ :version,
10
+ :signer
11
+ end
12
+
13
+ class NisNodeInfo
14
+ include Nem::Mixin::Assignable
15
+
16
+ attr_reader :node, :nis_info
17
+
18
+ def self.new_from_nis_node_info(hash)
19
+ new(
20
+ node: Node.new_from_node(hash[:node]),
21
+ nis_info: NisInfo.new(hash[:nisInfo])
22
+ )
23
+ end
24
+ end
25
+ end
26
+ end