nis-ruby 0.0.11.1 → 0.0.12

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 (63) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +1 -1
  3. data/LICENSE +21 -0
  4. data/README.md +23 -43
  5. data/{samples/request_account.rb → examples/account.rb} +2 -10
  6. data/{samples/request_block.rb → examples/block.rb} +0 -0
  7. data/{samples/request_debug.rb → examples/debug.rb} +0 -8
  8. data/{samples/request_local.rb → examples/local.rb} +0 -5
  9. data/{samples/request_namespace.rb → examples/namespace.rb} +0 -3
  10. data/{samples/request_nis.rb → examples/nis.rb} +0 -0
  11. data/{samples/request_node.rb → examples/node.rb} +0 -9
  12. data/examples/shutdown.rb +6 -0
  13. data/examples/transactions/importance_transfer.rb +22 -0
  14. data/examples/transactions/mosaic_definition_creation.rb +50 -0
  15. data/examples/transactions/mosaic_supply_change.rb +24 -0
  16. data/examples/transactions/multisig.rb +26 -0
  17. data/examples/transactions/multisig_add_cosignatory.rb +31 -0
  18. data/examples/transactions/multisig_aggregate_modification.rb +28 -0
  19. data/examples/transactions/multisig_signature.rb +38 -0
  20. data/examples/transactions/provision_namespace.rb +19 -0
  21. data/examples/transactions/transfer.rb +22 -0
  22. data/lib/nis.rb +8 -4
  23. data/lib/nis/client.rb +2 -1
  24. data/lib/nis/endpoint/shutdown.rb +7 -0
  25. data/lib/nis/endpoint/transaction/announce.rb +1 -1
  26. data/lib/nis/endpoint/transaction/prepareAnnounce.rb +1 -1
  27. data/lib/nis/fee.rb +1 -0
  28. data/lib/nis/fee/importance_transfer.rb +22 -0
  29. data/lib/nis/fee/mosaic_definition_creation.rb +22 -0
  30. data/lib/nis/fee/mosaic_supply_change_transfer.rb +22 -0
  31. data/lib/nis/fee/multisig.rb +22 -0
  32. data/lib/nis/fee/multisig_aggregation_modification.rb +30 -0
  33. data/lib/nis/fee/provision_namespace.rb +32 -0
  34. data/lib/nis/fee/transfer.rb +51 -0
  35. data/lib/nis/keypair.rb +18 -0
  36. data/lib/nis/mixin/struct.rb +50 -0
  37. data/lib/nis/request.rb +1 -0
  38. data/lib/nis/request/announce.rb +10 -0
  39. data/lib/nis/request/prepare_announce.rb +48 -0
  40. data/lib/nis/struct/block.rb +1 -1
  41. data/lib/nis/struct/mosaic_properties.rb +2 -2
  42. data/lib/nis/transaction/importance_transfer.rb +25 -28
  43. data/lib/nis/transaction/mosaic_definition_creation.rb +33 -34
  44. data/lib/nis/transaction/mosaic_supply_change.rb +30 -30
  45. data/lib/nis/transaction/multisig.rb +17 -36
  46. data/lib/nis/transaction/multisig_aggregate_modification.rb +29 -31
  47. data/lib/nis/transaction/multisig_signature.rb +24 -23
  48. data/lib/nis/transaction/provision_namespace.rb +53 -33
  49. data/lib/nis/transaction/transfer.rb +22 -52
  50. data/lib/nis/util.rb +16 -13
  51. data/lib/nis/version.rb +1 -1
  52. data/nis.gemspec +2 -0
  53. metadata +62 -19
  54. data/lib/nis/mixin/network.rb +0 -20
  55. data/samples/request_importance_transfer_transaction.rb +0 -34
  56. data/samples/request_mosaic_definition_creation_transaction.rb +0 -62
  57. data/samples/request_mosaic_supply_change_transaction.rb +0 -35
  58. data/samples/request_multisig_add_cosignatory_transaction.rb +0 -58
  59. data/samples/request_multisig_aggregate_modification_transaction.rb +0 -45
  60. data/samples/request_multisig_signature_transaction.rb +0 -53
  61. data/samples/request_multisig_transaction.rb +0 -54
  62. data/samples/request_provision_namespace_transaction.rb +0 -31
  63. data/samples/request_transfer_transaction.rb +0 -47
@@ -0,0 +1,50 @@
1
+ class Nis
2
+ module Mixin
3
+ module Struct
4
+ # @param [Symbol, String] attr Attribute name
5
+ # @return [Any] Attribute value
6
+ def [](attr)
7
+ send(attr)
8
+ end
9
+
10
+ # @return [Hash] Attribute and value pairs
11
+ def to_hash
12
+ hashed_properties = instance_variables.each_with_object({}) do |var, hash|
13
+ hash[var.to_s.delete('@').to_sym] = instance_variable_get(var)
14
+ end
15
+ hashnize(hashed_properties)
16
+ end
17
+
18
+ # @return [String] JSON formatted structure
19
+ def to_json(state = nil)
20
+ to_hash.to_json(state)
21
+ end
22
+
23
+ private
24
+
25
+ def hashnize(obj)
26
+ case true
27
+ when obj.class.to_s.start_with?('Nis::Fee')
28
+ obj.to_i
29
+ when obj.class.to_s.start_with?('Nis::Unit')
30
+ obj.to_s
31
+ when obj.class.to_s.start_with?('Nis::Transaction')
32
+ obj.to_hash
33
+ when obj.class.to_s.start_with?('Nis::Struct')
34
+ obj.to_hash
35
+ when obj.class.to_s.start_with?('Nis::Keypair')
36
+ obj.to_hash
37
+ when obj.is_a?(Array)
38
+ obj.map { |el| hashnize(el) }
39
+ when obj.is_a?(Hash)
40
+ obj.inject({}) do |hash, (k, v)|
41
+ hash[k] = hashnize(v)
42
+ hash
43
+ end
44
+ else
45
+ obj
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1 @@
1
+ Dir[File.expand_path('../request/*.rb', __FILE__)].each { |f| require f }
@@ -0,0 +1,10 @@
1
+ class Nis::Request
2
+ # @attr [String] data
3
+ # @attr [String] signature
4
+ # @see http://bob.nem.ninja/docs/#requestAnnounce
5
+ class Announce
6
+ include Nis::Mixin::Struct
7
+
8
+ attr_accessor :data, :signature
9
+ end
10
+ end
@@ -0,0 +1,48 @@
1
+ class Nis::Request
2
+ # @attr [Nis::Struct::Transaction] transaction
3
+ # @attr [Nis::Keypair] keypair
4
+ # @see http://bob.nem.ninja/docs/#requestPrepareAnnounce
5
+ class PrepareAnnounce
6
+ include Nis::Mixin::Struct
7
+
8
+ attr_accessor :transaction, :keypair
9
+
10
+ DEADLINE = 3600
11
+
12
+ def initialize(transaction, keypair)
13
+ @keypair = keypair
14
+ @transaction = transaction
15
+ end
16
+
17
+ def to_hash
18
+ if @transaction.respond_to?(:other_trans)
19
+ other_trans(@transaction)
20
+ end
21
+
22
+ @transaction.tap do |tx|
23
+ tx.timeStamp = Nis::Util.timestamp
24
+ tx.deadline = Nis::Util.deadline(DEADLINE)
25
+ tx.version = Nis::Util.parse_version(tx.network, 1)
26
+ tx.signer = @keypair.public
27
+ end
28
+
29
+ { transaction: @transaction.to_hash,
30
+ privateKey: @keypair.private }
31
+ end
32
+
33
+ private
34
+
35
+ def other_trans(transaction)
36
+ transaction.other_trans.tap do |tx|
37
+ tx.timeStamp = Nis::Util.timestamp
38
+ tx.deadline = Nis::Util.deadline(DEADLINE)
39
+ tx.version = Nis::Util.parse_version(tx.network, 1)
40
+
41
+ # tx.signer = @keypair.public
42
+
43
+ # multisig transfer
44
+ tx.signer = transaction.signer
45
+ end
46
+ end
47
+ end
48
+ end
@@ -18,7 +18,7 @@ class Nis::Struct
18
18
  alias :prev_block_hash= :prevBlockHash=
19
19
 
20
20
  def self.build(attrs)
21
- attrs[:transactions] = attrs[:transactions].map {|tx| Transaction.build(tx) }
21
+ attrs[:transactions] = attrs[:transactions].map { |tx| Transaction.build(tx) }
22
22
  new(attrs)
23
23
  end
24
24
  end
@@ -36,10 +36,10 @@ class Nis::Struct
36
36
  value: initial_supply.to_s
37
37
  }, {
38
38
  name: 'supplyMutable',
39
- value: supply_mutable ? 'true' : 'false'
39
+ value: supply_mutable.to_s
40
40
  }, {
41
41
  name: 'transferable',
42
- value: transferable ? 'true' : 'false'
42
+ value: transferable.to_s
43
43
  }]
44
44
  end
45
45
  end
@@ -1,52 +1,49 @@
1
1
  class Nis::Transaction
2
- # @attr [Integer] timeStamp
3
- # @attr [String] signature
4
- # @attr [Integer] fee
5
- # @attr [Integer] mode
6
2
  # @attr [String] remoteAccount
3
+ # @attr [Integer] mode
7
4
  # @attr [Integer] type
5
+ # @attr [Integer] fee
8
6
  # @attr [Integer] deadline
7
+ # @attr [Integer] timeStamp
9
8
  # @attr [Integer] version
10
- # @attr [String] signer
9
+ # @attr [String] signer
10
+ # @attr [String] signature
11
+ # @attr [Symbol] network
11
12
  # @see http://bob.nem.ninja/docs/#importanceTransferTransaction
12
13
  class ImportanceTransfer
13
- include Nis::Mixin::Network
14
- attr_writer :version, :fee
14
+ include Nis::Mixin::Struct
15
15
 
16
- include Nis::Util::Assignable
17
- attr_accessor :timeStamp, :signature, :mode, :remoteAccount, :type, :deadline, :signer
16
+ attr_reader :type, :fee
17
+ attr_accessor :mode, :remoteAccount,
18
+ :deadline, :timeStamp, :version, :signer, :signature,
19
+ :network
18
20
 
19
- alias timestamp timeStamp
20
- alias timestamp= timeStamp=
21
21
  alias remote_account remoteAccount
22
22
  alias remote_account= remoteAccount=
23
+ alias timestamp timeStamp
23
24
 
24
25
  TYPE = 0x0801 # 2049 (importance transfer transaction)
25
- FEE = 6_000_000
26
26
 
27
27
  ACTIVATE = 0x0001
28
28
  DEACTIVATE = 0x0002
29
29
 
30
- def self.build(attrs)
31
- new(attrs)
32
- end
33
-
34
- # @return [Integer]
35
- def type
36
- @type ||= TYPE
37
- end
30
+ def initialize(remote_account, mode, network: :testnet)
31
+ @type = TYPE
32
+ @network = network
38
33
 
39
- # @return [Integer]
40
- def fee
41
- @fee ||= FEE
34
+ @remoteAccount = remote_account
35
+ @mode = parse_mode(mode)
36
+ @fee = Nis::Fee::ImportanceTransfer.new(self)
42
37
  end
43
38
 
44
- alias to_hash_old to_hash
39
+ private
45
40
 
46
- def to_hash
47
- type
48
- fee
49
- to_hash_old
41
+ def parse_mode(mode)
42
+ case mode
43
+ when :activate then ACTIVATE
44
+ when :deactivate then DEACTIVATE
45
+ else raise "Not implemented mode: #{mode}"
46
+ end
50
47
  end
51
48
  end
52
49
  end
@@ -1,55 +1,54 @@
1
1
  class Nis::Transaction
2
- # @attr [Integer] timeStamp
3
- # @attr [Integer] signature
4
- # @attr [Integer] fee
2
+ # @attr [Nis::Struct::MosaicDefinition] mosaic_definition
3
+ # @attr [Integer] creationFee
4
+ # @attr [Integer] creationFeeSink
5
5
  # @attr [Integer] type
6
+ # @attr [Integer] fee
6
7
  # @attr [Integer] deadline
8
+ # @attr [Integer] timeStamp
7
9
  # @attr [Integer] version
8
10
  # @attr [String] signer
9
- # @attr [Integer] creationFee
10
- # @attr [Integer] creationFeeSink
11
+ # @attr [String] signature
12
+ # @attr [Symbol] network
11
13
  # @attr [Nis::Struct::MosaicDefinition] mosaicDefinition
12
14
  # @see http://bob.nem.ninja/docs/#mosaicDefinitionCreationTransaction
13
15
  class MosaicDefinitionCreation
14
- include Nis::Mixin::Network
15
- attr_writer :version, :fee
16
+ include Nis::Mixin::Struct
16
17
 
17
- include Nis::Util::Assignable
18
- attr_accessor :timeStamp, :signature, :type, :deadline, :signer,
19
- :creationFee, :creationFeeSink, :mosaicDefinition
18
+ attr_reader :type, :fee
19
+ attr_accessor :mosaicDefinition, :creationFee, :creationFeeSink,
20
+ :deadline, :timeStamp, :version, :signer, :signature,
21
+ :network
20
22
 
21
- alias timestamp timeStamp
22
- alias timestamp= timeStamp=
23
- alias creation_fee creationFee
24
- alias creation_fee= creationFee=
25
- alias creation_feeSink creationFeeSink
26
- alias creation_feeSink= creationFeeSink=
27
23
  alias mosaic_definition mosaicDefinition
28
24
  alias mosaic_definition= mosaicDefinition=
25
+ alias creation_fee creationFee
26
+ alias creation_fee_sink creationFeeSink
27
+ alias timestamp timeStamp
29
28
 
30
29
  TYPE = 0x4001 # 16385 (mosaic definition creation transaction)
31
- FEE = 20_000_000
32
30
 
33
- def self.build(attrs)
34
- new(attrs)
35
- end
36
-
37
- # @return [Integer]
38
- def type
39
- @type ||= TYPE
40
- end
31
+ def initialize(mosaic_definition, network: :testnet)
32
+ @type = TYPE
33
+ @network = network
41
34
 
42
- # @return [Integer]
43
- def fee
44
- @fee ||= FEE
35
+ @mosaicDefinition = mosaic_definition
36
+ @creationFee = creation[:fee]
37
+ @creationFeeSink = creation[:sink]
38
+ @fee = Nis::Fee::MosaicDefinitionCreation.new(self)
45
39
  end
46
40
 
47
- alias to_hash_old to_hash
48
-
49
- def to_hash
50
- type
51
- fee
52
- to_hash_old
41
+ private
42
+
43
+ # @see http://www.nem.ninja/docs/#mosaics
44
+ def creation
45
+ if @network == :testnet
46
+ { sink: 'TBMOSAICOD4F54EE5CDMR23CCBGOAM2XSJBR5OLC',
47
+ fee: 20 * 1_000_000 }
48
+ else
49
+ { sink: 'NBMOSAICOD4F54EE5CDMR23CCBGOAM2XSIUX6TRS',
50
+ fee: 500 * 1_000_000 }
51
+ end
53
52
  end
54
53
  end
55
54
  end
@@ -1,53 +1,53 @@
1
1
  class Nis::Transaction
2
- # @attr [Integer] timeStamp
3
- # @attr [Integer] signature
2
+ # @attr [Nis::Struct::MosaicId] mosaic_id
3
+ # @attr [Symbol] supplyType
4
+ # @attr [Integer] delta
4
5
  # @attr [Integer] fee
5
6
  # @attr [Integer] type
6
7
  # @attr [Integer] deadline
8
+ # @attr [Integer] timeStamp
7
9
  # @attr [Integer] version
8
10
  # @attr [String] signer
11
+ # @attr [String] signature
12
+ # @attr [Symbol] network
9
13
  # @see http://bob.nem.ninja/docs/#mosaicSupplyChangeTransaction
10
14
  class MosaicSupplyChange
11
- include Nis::Mixin::Network
12
- attr_writer :version, :fee
15
+ include Nis::Mixin::Struct
13
16
 
14
- include Nis::Util::Assignable
15
- attr_accessor :timeStamp, :signature, :type, :deadline, :signer,
16
- :supplyType, :delta, :mosaicId
17
+ attr_reader :type, :fee
18
+ attr_accessor :mosaicId, :supplyType, :delta,
19
+ :deadline, :timeStamp, :version, :signer, :signature,
20
+ :network
17
21
 
18
- alias timestamp timeStamp
19
- alias timestamp= timeStamp=
20
- alias supply_type supplyType
21
- alias supply_type= supplyType=
22
22
  alias mosaid_id mosaicId
23
23
  alias mosaid_id= mosaicId=
24
+ alias supply_type supplyType
25
+ alias supply_type= supplyType=
26
+ alias timestamp timeStamp
24
27
 
25
28
  TYPE = 0x4002 # 16386 (mosaic supply change transaction)
26
- FEE = 20_000_000
27
29
 
28
- INCREASE = 1
29
- DECREASE = 2
30
+ INCREASE = 0x0001
31
+ DECREASE = 0x0002
30
32
 
31
- def self.build(attrs)
32
- new(attrs)
33
- end
34
-
35
- # @return [Integer]
36
- def type
37
- @type ||= TYPE
38
- end
33
+ def initialize(mosaic_id, type, delta, network: :testnet)
34
+ @type = TYPE
35
+ @network = network
39
36
 
40
- # @return [Integer]
41
- def fee
42
- @fee ||= FEE
37
+ @mosaicId = mosaic_id
38
+ @supplyType = parse_type(type)
39
+ @delta = delta
40
+ @fee = Nis::Fee::MosaicSupplyChangeTransfer.new(self)
43
41
  end
44
42
 
45
- alias to_hash_old to_hash
43
+ private
46
44
 
47
- def to_hash
48
- type
49
- fee
50
- to_hash_old
45
+ def parse_type(type)
46
+ case type
47
+ when :increase then INCREASE
48
+ when :descrease then DECREASE
49
+ else raise "Not implemented type: #{type}"
50
+ end
51
51
  end
52
52
  end
53
53
  end
@@ -1,52 +1,33 @@
1
1
  class Nis::Transaction
2
- # @attr [Integer] timeStamp
3
- # @attr [Integer] fee
2
+ # @attr [Nis::Transaction::*] otherTrans
3
+ # @attr [String] signer
4
4
  # @attr [Integer] type
5
+ # @attr [Integer] fee
5
6
  # @attr [Integer] deadline
7
+ # @attr [Integer] timeStamp
6
8
  # @attr [Integer] version
7
- # @attr [String] signer
8
- # @attr [Nis::Struct::TransferTransaction] otherTrans
9
9
  # @see http://bob.nem.ninja/docs/#multisigTransaction
10
10
  class Multisig
11
- include Nis::Mixin::Network
12
- attr_writer :version, :fee
11
+ include Nis::Mixin::Struct
13
12
 
14
- include Nis::Util::Assignable
15
- attr_accessor :timeStamp, :type, :deadline, :signer,
16
- :otherTrans
13
+ attr_reader :type, :fee
14
+ attr_accessor :otherTrans, :signer,
15
+ :deadline, :timeStamp, :version,
16
+ :network
17
17
 
18
- alias timestamp timeStamp
19
- alias timestamp= timeStamp=
20
18
  alias other_trans otherTrans
21
19
  alias other_trans= otherTrans=
20
+ alias timestamp timeStamp
22
21
 
23
- TYPE = 0x1004 # 4099 (multisig transaction)
24
- FEE = 6_000_000
25
-
26
- def self.build(attrs)
27
- new(attrs)
28
- end
29
-
30
- # @return [Integer]
31
- def type
32
- @type ||= TYPE
33
- end
34
-
35
- # @return [Integer]
36
- def fee
37
- @fee ||= FEE
38
- end
39
-
40
- def mosaics
41
- @mosaics ||= []
42
- end
22
+ TYPE = 0x1004 # 4100 (multisig transaction)
43
23
 
44
- alias to_hash_old to_hash
24
+ def initialize(tx, signer, network: :testnet)
25
+ @type = TYPE
26
+ @network = network
45
27
 
46
- def to_hash
47
- type
48
- fee
49
- to_hash_old
28
+ @otherTrans = tx
29
+ @signer = signer
30
+ @fee = Nis::Fee::Multisig.new(self)
50
31
  end
51
32
  end
52
33
  end