nis-ruby 0.0.14 → 0.0.15

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 681592f0869e7c2ff1956e2b04ad32ffcd07f002
4
- data.tar.gz: d3f7c8660d39d09d9186c3df607e5b00682ca5d1
3
+ metadata.gz: aa8c49e0cd78c5bdde006099b1fcda37b2708a64
4
+ data.tar.gz: cb8a3175db3121d2f761265423b93407ae8013e7
5
5
  SHA512:
6
- metadata.gz: f7c4b08efb1324125b792de4df01fa6dc7aaacc355358a65e10ce337dbad2dce308a830103aa23bebb954488b673cd00ab086036c41cef5dfbdc9522bd6aa5ee
7
- data.tar.gz: 05e7ed7f141eb73a948b3690376dc5d5b4a43ebdd343d6a68942470d46f6d5dd089b396026567f6fcf579d996332e6c9ec28bc5d62593fb4893c68a247f66bdd
6
+ metadata.gz: 563b492199ffbce3d85d8914eff9d166e60c3f2a6751082980ae2a8a722006a78c07cfd66271433bfbe9b09a42a883e1f493ddcdba52d331d5b48c5bb9c85cb6
7
+ data.tar.gz: 254df0dfe30be08e4bd7ec23241c181001db04d9d5ca005b7b74f72e636617fff7438a5816fb948a99bd8c27e96e8bcde0722bcc3d0664fc3d8ca1b286200028
data/README.md CHANGED
@@ -35,11 +35,13 @@ gem 'nis-ruby'
35
35
 
36
36
  ### Examples
37
37
 
38
- More specific example codes are in **examples/** directory.
38
+ More specific example codes are in **[examples/](examples/)** directory.
39
39
 
40
40
  ### Methods
41
41
 
42
42
  ```ruby
43
+ require 'rubygems'
44
+ require 'nis'
43
45
  nis = Nis.new
44
46
 
45
47
  nis.heartbeat
@@ -53,7 +55,7 @@ nis.status
53
55
  kp = Nis::Keypair.new(SENDER_PRIV_KEY)
54
56
  tx = Nis::Transaction::Transfer.new(
55
57
  RECIPIENT_ADDRESS,
56
- 10_000_000,
58
+ 1, # send 1xem
57
59
  'Message'
58
60
  )
59
61
  req = Nis::Request::PrepareAnnounce.new(tx, kp)
@@ -63,12 +65,15 @@ nis.transaction_prepare_announce(req)
63
65
  # => {innerTransactionHash: {}, code: 1, type: 1, message: "SUCCESS", transactionHash: {data: "9da41fd6c6886740ae6a15c869df0470015d78103e5b216971aa09fdbcce9cde"}}
64
66
 
65
67
  # Request to remote node.
68
+ # nis = Nis.new(host: '104.128.226.60')
66
69
  # nis.transaction_announce(req)
67
70
  ```
68
71
 
69
72
  ### Requesting
70
73
 
71
74
  ```ruby
75
+ require 'rubygems'
76
+ require 'nis'
72
77
  nis = Nis.new
73
78
 
74
79
  nis.request(:get, '/account/get',
@@ -102,22 +107,22 @@ $ nis request get account/harvests --params=address:TALICELCD3XPH4FFI5STGGNSNSWP
102
107
 
103
108
  ## Connection
104
109
 
105
- You can find nodes here. [NEM Node Rewards](https://supernodes.nem.io/)
110
+ You can choose nodes from [NEM Node Rewards](https://supernodes.nem.io/).
106
111
 
107
112
  ### Hash
108
113
 
109
114
  ```ruby
110
115
  # Passing hostname
111
- Nis.new(host: 'bigalice3.nem.ninja')
116
+ Nis.new(host: '104.128.226.60')
112
117
 
113
118
  # Passing url
114
- Nis.new(url: 'http://bigalice3.nem.ninja:7890')
119
+ Nis.new(url: 'http://104.128.226.60:7890')
115
120
  ```
116
121
 
117
122
  ### Environment Variable
118
123
 
119
124
  ```bash
120
- $ export NIS_URL=http://bigalice3.nem.ninja:7890
125
+ $ export NIS_URL=http://104.128.226.60:7890
121
126
  $ nis heartbeat # => {"code":1,"type":2,"message":"ok"}
122
127
  ```
123
128
 
@@ -127,13 +132,6 @@ Environment variable used as default value.
127
132
 
128
133
  * [Documentation for nis-ruby - rubydoc.info](http://www.rubydoc.info/gems/nis-ruby)
129
134
 
130
- ## TODO
131
-
132
- * Do more improvements
133
- * Encryption message
134
- * Failover connection
135
- * Be more easy to use
136
-
137
135
  ## Contact
138
136
 
139
137
  Feel free to ask me if you have any questions.
data/examples/block.rb CHANGED
@@ -1,11 +1,9 @@
1
1
  require 'nis'
2
- hr = '-' * 64
3
2
 
4
3
  nis = Nis.new
5
4
 
6
- block = nis.block_at_public(block_height: 890761)
5
+ block = nis.block_at_public(block_height: 890_761)
6
+
7
7
  puts block.to_hash
8
- puts hr
9
8
 
10
9
  puts nis.block_get(block_hash: 'fb5e76bf137eb27451926d29fd2b308e672e5d9ec405d9cbcd47cc0f83492cd0')
11
- puts hr
data/examples/local.rb CHANGED
@@ -15,5 +15,5 @@ puts outgoing.last.to_hash
15
15
  all = nis.local_account_transfers_all(page: page)
16
16
  puts all.last.to_hash
17
17
 
18
- blocks = nis.local_chain_blocks_after(block_height: 2649)
18
+ blocks = nis.local_chain_blocks_after(block_height: 2_649)
19
19
  puts blocks.last
@@ -1,6 +1,6 @@
1
1
  require 'nis'
2
2
 
3
- # owner
3
+ # mosaic creator
4
4
  A_PRIVATE_KEY = '4ce5c8f9fce571db0d9ac1adf00b8d3ba0f078ed40835fd3d730a2f24b834214'
5
5
  A_ADDRESS = 'TDPP2C4XQLMESBMCYGWN4NRAJAKZEYRV75KGYSOB'
6
6
 
@@ -1,6 +1,6 @@
1
1
  require 'nis'
2
2
 
3
- # owner
3
+ # mosaic owner
4
4
  A_PRIVATE_KEY = '4ce5c8f9fce571db0d9ac1adf00b8d3ba0f078ed40835fd3d730a2f24b834214'
5
5
 
6
6
  kp = Nis::Keypair.new(A_PRIVATE_KEY)
@@ -1,16 +1,18 @@
1
1
  require 'nis'
2
2
 
3
3
  # multisig
4
- A_PUBLIC_KEY = '4b26a75313b747985470977a085ae6f840a0b84ebd96ddf17f4a31a2b580d078'
4
+ M_PUBLIC_KEY = '00f077782658ae91b77f238ba5fcd7ef110564b5c189072e4d4590d9b17f9d76f3'
5
5
 
6
6
  # cosignatory
7
- B_PRIVATE_KEY = '260206d683962350532408e8774fd14870a173b7fba17f6b504da3dbc5f1cc9f'
8
- B_ADDRESS = 'TAWKJTUP4DWKLDKKS534TYP6G324CBNMXKBA4X7B'
7
+ A_PRIVATE_KEY = '4ce5c8f9fce571db0d9ac1adf00b8d3ba0f078ed40835fd3d730a2f24b834214'
9
8
 
10
- kp = Nis::Keypair.new(B_PRIVATE_KEY)
9
+ # recipient
10
+ B_ADDRESS = 'TA4TX6U5HG2MROAESH2JE5524T4ZOY2EQKQ6ELHF'
11
11
 
12
- ttx = Nis::Transaction::Transfer.new(B_ADDRESS, 1_000_000, 'Good luck!')
13
- tx = Nis::Transaction::Multisig.new(ttx, A_PUBLIC_KEY)
12
+ kp = Nis::Keypair.new(A_PRIVATE_KEY)
13
+
14
+ ttx = Nis::Transaction::Transfer.new(B_ADDRESS, 1, 'Good luck!')
15
+ tx = Nis::Transaction::Multisig.new(ttx, M_PUBLIC_KEY)
14
16
  puts "Fee: #{tx.fee.to_i}"
15
17
 
16
18
  nis = Nis.new
@@ -1,24 +1,24 @@
1
1
  require 'nis'
2
2
 
3
- # Account A (multisig)
4
- A_PUBLIC_KEY = '4b26a75313b747985470977a085ae6f840a0b84ebd96ddf17f4a31a2b580d078'
3
+ # multisig
4
+ M_PUBLIC_KEY = '6d72b57d2bc199d328e7ea3e24775f7f614760bc18f3f8501cd3daa9870cc40c'
5
5
 
6
- # Account B (cosignatory1)
7
- B_PRIVATE_KEY = '260206d683962350532408e8774fd14870a173b7fba17f6b504da3dbc5f1cc9f'
6
+ # cosignatory1
7
+ A_PRIVATE_KEY = '4ce5c8f9fce571db0d9ac1adf00b8d3ba0f078ed40835fd3d730a2f24b834214'
8
8
 
9
- # Account C (cosignatory2)
10
- C_PUBLIC_KEY = '9fd1e5e886c4006efc715a0e183f2a87f198b8d19c44e7c67925b01aa45a7114'
9
+ # cosignatory2
10
+ B_PUBLIC_KEY = '9e7ab2924cd1a3482df784db190614cfc8a33671f5d80a5b15a9c9e8b4d13933'
11
11
 
12
- kp = Nis::Keypair.new(B_PRIVATE_KEY)
12
+ kp = Nis::Keypair.new(A_PRIVATE_KEY)
13
13
 
14
14
  mcm = Nis::Struct::MultisigCosignatoryModification.new(
15
15
  modificationType: 1,
16
- cosignatoryAccount: C_PUBLIC_KEY
16
+ cosignatoryAccount: B_PUBLIC_KEY
17
17
  )
18
- min_cosigs = 2
19
- mtx = Nis::Transaction::MultisigAggregateModification.new([mcm], min_cosigs)
18
+ min_cosigs = 1
20
19
 
21
- tx = Nis::Transaction::Multisig.new(mtx, A_PUBLIC_KEY)
20
+ mtx = Nis::Transaction::MultisigAggregateModification.new([mcm], min_cosigs)
21
+ tx = Nis::Transaction::Multisig.new(mtx, M_PUBLIC_KEY)
22
22
 
23
23
  nis = Nis.new
24
24
  req = Nis::Request::PrepareAnnounce.new(tx, kp)
@@ -1,16 +1,17 @@
1
1
  require 'nis'
2
2
 
3
3
  # multisig
4
- A_PRIVATE_KEY = '9bf8e6fd1a178a3cce39840cda34f80f55fe075c15f48eefad8506f4a70c2b47'
4
+ M_PRIVATE_KEY = '00f077782658ae91b77f238ba5fcd7ef110564b5c189072e4d4590d9b17f9d76f3'
5
5
 
6
6
  # cosignatory
7
- B_PUBLIC_KEY = 'cc63b4dcdec745417043c3fa0992ec3a1695461a26d90264744648abbd5caa0d'
7
+ A_PRIVATE_KEY = '4ce5c8f9fce571db0d9ac1adf00b8d3ba0f078ed40835fd3d730a2f24b834214'
8
+ A_PUBLIC_KEY = 'cc63b4dcdec745417043c3fa0992ec3a1695461a26d90264744648abbd5caa0d'
8
9
 
9
- kp = Nis::Keypair.new(A_PRIVATE_KEY)
10
+ kp = Nis::Keypair.new(M_PRIVATE_KEY)
10
11
 
11
12
  mcm = Nis::Struct::MultisigCosignatoryModification.new(
12
13
  modificationType: 1,
13
- cosignatoryAccount: B_PUBLIC_KEY
14
+ cosignatoryAccount: A_PUBLIC_KEY
14
15
  )
15
16
  min_cosigs = 1
16
17
 
@@ -1,22 +1,22 @@
1
1
  require 'nis'
2
2
 
3
3
  # multisig
4
- A_PUBLIC_KEY = '4b26a75313b747985470977a085ae6f840a0b84ebd96ddf17f4a31a2b580d078'
5
- A_ADDRESS = 'TBAOYZS4FGY5XPQ5OD2VL3SY7GQ5FLH66GRCX5DL'
4
+ M_PUBLIC_KEY = '6d72b57d2bc199d328e7ea3e24775f7f614760bc18f3f8501cd3daa9870cc40c'
5
+ M_ADDRESS = 'TDJNDAQ7F7AQRXKP2YVTH67QYCWWKE6QLSJFWN64'
6
6
 
7
7
  # cosignatory1
8
- # B_PRIVATE_KEY = '260206d683962350532408e8774fd14870a173b7fba17f6b504da3dbc5f1cc9f'
9
- # B_PUBLIC_KEY = 'cc63b4dcdec745417043c3fa0992ec3a1695461a26d90264744648abbd5caa0d'
10
- # B_ADDRESS = 'TAWKJTUP4DWKLDKKS534TYP6G324CBNMXKBA4X7B'
8
+ # A_PRIVATE_KEY = '4ce5c8f9fce571db0d9ac1adf00b8d3ba0f078ed40835fd3d730a2f24b834214'
9
+ # A_PUBLIC_KEY = 'be2ba9cb15a547110d511a4d43c0482fbb584d78781abac01fb053d18f4a0033'
10
+ # A_ADDRESS = 'TDPP2C4XQLMESBMCYGWN4NRAJAKZEYRV75KGYSOB'
11
11
 
12
12
  # cosignatory2
13
- C_PRIVATE_KEY = '2f6bececfaa81e0ce878be6263df29d11412559132743eebde99f695fbc4e288'
14
- C_ADDRESS = 'TAFPFQOTRYEKMKWWKLLLMYA3I5SCFDGYFACCOFWS'
13
+ B_PRIVATE_KEY = '1d13af2c31ee6fb0c3c7aaaea818d9b305dcadba130ba663fc42d9f25b24ded1'
14
+ B_ADDRESS = 'TA4TX6U5HG2MROAESH2JE5524T4ZOY2EQKQ6ELHF'
15
15
 
16
- kp = Nis::Keypair.new(C_PRIVATE_KEY)
16
+ kp = Nis::Keypair.new(B_PRIVATE_KEY)
17
17
 
18
18
  nis = Nis.new
19
- txes = nis.account_unconfirmed_transactions(address: C_ADDRESS)
19
+ txes = nis.account_unconfirmed_transactions(address: B_ADDRESS)
20
20
 
21
21
  unless txes.size > 0
22
22
  puts 'There are no transactions to sign.'
@@ -26,7 +26,7 @@ end
26
26
  hash = txes.first.meta.data
27
27
  puts "Unconfirmed Transaction Hash: #{hash}"
28
28
 
29
- tx = Nis::Transaction::MultisigSignature.new(hash, A_ADDRESS, C_PUBLIC_KEY)
29
+ tx = Nis::Transaction::MultisigSignature.new(hash, M_ADDRESS, B_PUBLIC_KEY)
30
30
 
31
31
  req = Nis::Request::PrepareAnnounce.new(tx, kp)
32
32
  res = nis.transaction_prepare_announce(req)
@@ -1,7 +1,7 @@
1
1
  require 'nis'
2
2
 
3
- # owner
4
- A_PRIVATE_KEY = '260206d683962350532408e8774fd14870a173b7fba17f6b504da3dbc5f1cc9f'
3
+ # namespace creator
4
+ A_PRIVATE_KEY = '4ce5c8f9fce571db0d9ac1adf00b8d3ba0f078ed40835fd3d730a2f24b834214'
5
5
 
6
6
  kp = Nis::Keypair.new(A_PRIVATE_KEY)
7
7
 
@@ -1,14 +1,14 @@
1
1
  require 'nis'
2
2
 
3
3
  # sender
4
- A_PRIVATE_KEY = '260206d683962350532408e8774fd14870a173b7fba17f6b504da3dbc5f1cc9f'
4
+ A_PRIVATE_KEY = '4ce5c8f9fce571db0d9ac1adf00b8d3ba0f078ed40835fd3d730a2f24b834214'
5
5
 
6
- # receiver
7
- B_ADDRESS = 'TAWKJTUP4DWKLDKKS534TYP6G324CBNMXKBA4X7B'
6
+ # recipient
7
+ B_ADDRESS = 'TA4TX6U5HG2MROAESH2JE5524T4ZOY2EQKQ6ELHF'
8
8
 
9
9
  kp = Nis::Keypair.new(A_PRIVATE_KEY)
10
10
 
11
- tx = Nis::Transaction::Transfer.new(B_ADDRESS, 1_000_000, 'Good luck!')
11
+ tx = Nis::Transaction::Transfer.new(B_ADDRESS, 1, 'Good luck!')
12
12
  puts "Fee: #{tx.fee.to_i}"
13
13
 
14
14
  nis = Nis.new
@@ -1,48 +1,52 @@
1
1
  require 'nis'
2
- require 'pp'
3
2
 
4
3
  # sender
5
- A_PRIVATE_KEY = '260206d683962350532408e8774fd14870a173b7fba17f6b504da3dbc5f1cc9f'
4
+ A_PRIVATE_KEY = '4ce5c8f9fce571db0d9ac1adf00b8d3ba0f078ed40835fd3d730a2f24b834214'
6
5
 
7
- # receiver
8
- B_ADDRESS = 'TAWKJTUP4DWKLDKKS534TYP6G324CBNMXKBA4X7B'
6
+ # recipient
7
+ B_ADDRESS = 'TA4TX6U5HG2MROAESH2JE5524T4ZOY2EQKQ6ELHF'
9
8
 
10
9
  kp = Nis::Keypair.new(A_PRIVATE_KEY)
11
10
 
12
- # fetch mosaic information
13
- nis = Nis.new(host: '104.128.226.60')
14
- mo_dmdps = nis.namespace_mosaic_definition_page(namespace: 'sushi')
11
+ # fetch mosaic definition
12
+ nis = Nis.new
13
+ mo_dmdps = nis.namespace_mosaic_definition_page(namespace: 'kon')
15
14
  mo_def = mo_dmdps.first.mosaic
16
15
 
17
- # require 'pry'; binding.pry
18
-
16
+ # Or you can use built object if you already know mosaic definition.
19
17
  # mosaic_id = Nis::Struct::MosaicId.new(
20
- # namespaceId: 'sushi',
21
- # name: 'anago'
18
+ # namespaceId: 'kon',
19
+ # name: 'heart'
22
20
  # )
23
-
24
21
  # properties = Nis::Struct::MosaicProperties.new(
25
- # divisibility: 0,
26
- # initialSupply: 10_000,
27
- # supplyMutable: true,
28
- # transferable: true
22
+ # divisibility: 3,
23
+ # initialSupply: 100_000_000
29
24
  # )
30
-
31
25
  # mo_def = Nis::Struct::MosaicDefinition.new(
32
26
  # id: mosaic_id,
33
27
  # properties: properties,
34
28
  # )
35
29
 
36
- tx = Nis::Transaction::Transfer.new(B_ADDRESS, 1_000_000, 'Good luck!')
37
- tx.mosaics << Nis::Struct::MosaicAttachment.new(mo_def, 1_000_000)
30
+ # sending 1xem as mosaic sample
31
+ # mosaic_id = Nis::Struct::MosaicId.new(
32
+ # namespaceId: 'nem',
33
+ # name: 'xem'
34
+ # )
35
+ # properties = Nis::Struct::MosaicProperties.new(
36
+ # divisibility: 6,
37
+ # initialSupply: 8_999_999_999
38
+ # )
39
+ # mo_def = Nis::Struct::MosaicDefinition.new(
40
+ # id: mosaic_id,
41
+ # properties: properties,
42
+ # )
43
+ # mosaic_attachment = Nis::Struct::MosaicAttachment.new(mo_def, 1_000_000)
38
44
 
39
- # pp tx.to_hash
45
+ tx = Nis::Transaction::Transfer.new(B_ADDRESS, 1, 'Good luck!')
46
+ tx.mosaics << Nis::Struct::MosaicAttachment.new(mo_def, 1)
40
47
 
41
- nis = Nis.new
42
48
  req = Nis::Request::PrepareAnnounce.new(tx, kp)
43
- pp req.to_hash
44
- # res = nis.transaction_prepare_announce(req)
49
+ res = nis.transaction_prepare_announce(req)
45
50
 
46
- #
47
- # puts "Message: #{res.message}"
48
- # puts "TransactionHash: #{res.transaction_hash}"
51
+ puts "Message: #{res.message}"
52
+ puts "TransactionHash: #{res.transaction_hash}"
@@ -1,14 +1,14 @@
1
1
  require 'nis'
2
2
 
3
3
  # sender
4
- A_PRIVATE_KEY = '260206d683962350532408e8774fd14870a173b7fba17f6b504da3dbc5f1cc9f'
4
+ A_PRIVATE_KEY = '4ce5c8f9fce571db0d9ac1adf00b8d3ba0f078ed40835fd3d730a2f24b834214'
5
5
 
6
- # receiver
7
- B_ADDRESS = 'TAWKJTUP4DWKLDKKS534TYP6G324CBNMXKBA4X7B'
6
+ # recipient
7
+ B_ADDRESS = 'TA4TX6U5HG2MROAESH2JE5524T4ZOY2EQKQ6ELHF'
8
8
 
9
9
  kp = Nis::Keypair.new(A_PRIVATE_KEY)
10
10
 
11
- tx = Nis::Transaction::Transfer.new(B_ADDRESS, 1_000_000, 'Good luck!')
11
+ tx = Nis::Transaction::Transfer.new(B_ADDRESS, 1, 'Good luck!')
12
12
  puts "Fee: #{tx.fee.to_i}"
13
13
 
14
14
  nis = Nis.new(host: '104.128.226.60')
@@ -0,0 +1,14 @@
1
+ require 'nis'
2
+
3
+ # sender
4
+ A_PRIVATE_KEY = '260206d683962350532408e8774fd14870a173b7fba17f6b504da3dbc5f1cc9f'
5
+
6
+ # receiver
7
+ B_ADDRESS = 'TAWKJTUP4DWKLDKKS534TYP6G324CBNMXKBA4X7B'
8
+
9
+ kp = Nis::Keypair.new(A_PRIVATE_KEY)
10
+ tx = Nis::Transaction::Transfer.new(B_ADDRESS, 1, 'Good luck!')
11
+ req = Nis::Request::Announce.new(tx, kp)
12
+
13
+ puts req.to_hash[:data]
14
+ puts Nis::Util::Deserializer.deserialize_transaction(req.to_hash[:data])
@@ -22,11 +22,11 @@ class Nis::Fee
22
22
  private
23
23
 
24
24
  def root_fee
25
- 100 * 1_000_000
25
+ 0.15 * 1_000_000
26
26
  end
27
27
 
28
28
  def sub_fee
29
- 10 * 1_000_000
29
+ 0.15 * 1_000_000
30
30
  end
31
31
  end
32
32
  end
@@ -16,18 +16,31 @@ class Nis::Request
16
16
 
17
17
  # @return [Hash] Attribute and value pairs
18
18
  def to_hash
19
- if @transaction.respond_to?(:other_trans)
20
- other_trans(@transaction)
19
+ entity = @transaction.clone
20
+
21
+ entity.amount *= 1_000_000 if entity.respond_to?(:amount)
22
+
23
+ if entity.respond_to?(:other_trans)
24
+ other_trans(entity)
21
25
  end
22
26
 
23
- @transaction.tap do |tx|
27
+ entity.tap do |tx|
24
28
  tx.timeStamp = Nis::Util.timestamp
25
29
  tx.deadline = Nis::Util.deadline(DEADLINE)
26
30
  tx.version = Nis::Util.parse_version(tx.network, version(tx))
27
31
  tx.signer = @keypair.public
28
32
  end
29
33
 
30
- serialized = serialize(@transaction)
34
+ entity_hash = entity.to_hash
35
+ if entity.respond_to?(:has_mosaics?) && !entity.has_mosaics?
36
+ entity_hash.delete(:mosaics)
37
+ end
38
+
39
+ if entity.respond_to?(:other_trans) && !entity.other_trans.has_mosaics?
40
+ entity_hash[:otherTrans].delete(:mosaics)
41
+ end
42
+
43
+ serialized = serialize(entity_hash)
31
44
  hex_serialized = Nis::Util::Convert.ua2hex(serialized)
32
45
 
33
46
  { data: Nis::Util::Convert.ua2hex(serialized),
@@ -36,8 +49,8 @@ class Nis::Request
36
49
 
37
50
  private
38
51
 
39
- def serialize(transaction)
40
- Nis::Util::Serializer.serialize_transaction(transaction.to_hash)
52
+ def serialize(transaction_hash)
53
+ Nis::Util::Serializer.serialize_transaction(transaction_hash)
41
54
  end
42
55
 
43
56
  def signature(serialized)
@@ -46,6 +59,8 @@ class Nis::Request
46
59
 
47
60
  def other_trans(transaction)
48
61
  transaction.other_trans.tap do |tx|
62
+ tx.amount *= 1_000_000 if tx.respond_to?(:amount)
63
+
49
64
  tx.timeStamp = Nis::Util.timestamp
50
65
  tx.deadline = Nis::Util.deadline(DEADLINE)
51
66
  tx.version = Nis::Util.parse_version(tx.network, version(tx))
@@ -16,18 +16,31 @@ class Nis::Request
16
16
 
17
17
  # @return [Hash] Attribute and value pairs
18
18
  def to_hash
19
- if @transaction.respond_to?(:other_trans)
20
- other_trans(@transaction)
19
+ entity = @transaction.clone
20
+
21
+ entity.amount *= 1_000_000 if entity.respond_to?(:amount)
22
+
23
+ if entity.respond_to?(:other_trans)
24
+ other_trans(entity)
21
25
  end
22
26
 
23
- @transaction.tap do |tx|
27
+ entity.tap do |tx|
24
28
  tx.timeStamp = Nis::Util.timestamp
25
29
  tx.deadline = Nis::Util.deadline(DEADLINE)
26
30
  tx.version = Nis::Util.parse_version(tx.network, version(tx))
27
31
  tx.signer = @keypair.public
28
32
  end
29
33
 
30
- { transaction: @transaction.to_hash,
34
+ entity_hash = entity.to_hash
35
+ if entity.respond_to?(:has_mosaics?) && !entity.has_mosaics?
36
+ entity_hash.delete(:mosaics)
37
+ end
38
+
39
+ if entity.respond_to?(:other_trans) && !entity.other_trans.has_mosaics?
40
+ entity_hash[:otherTrans].delete(:mosaics)
41
+ end
42
+
43
+ { transaction: entity_hash,
31
44
  privateKey: @keypair.private }
32
45
  end
33
46
 
@@ -35,6 +48,8 @@ class Nis::Request
35
48
 
36
49
  def other_trans(transaction)
37
50
  transaction.other_trans.tap do |tx|
51
+ tx.amount *= 1_000_000 if tx.respond_to?(:amount)
52
+
38
53
  tx.timeStamp = Nis::Util.timestamp
39
54
  tx.deadline = Nis::Util.deadline(DEADLINE)
40
55
  tx.version = Nis::Util.parse_version(tx.network, version(tx))
@@ -5,18 +5,31 @@ module Nis::Util
5
5
  # @return [Hash]
6
6
  def self.deserialize_transaction(serialized)
7
7
  s = Nis::Util::Convert.hex2ua(serialized)
8
+ type = deserialize_int(s[0, 4])
9
+ method = case type
10
+ when 0x0101 then method(:deserialize_transfer)
11
+ when 0x0801 then method(:deserialize_importance_transfer)
12
+ when 0x1001 then method(:deserialize_multisig_aggregate_modification)
13
+ when 0x1002 then method(:deserialize_multisig_signature)
14
+ when 0x1004 then method(:deserialize_multisig)
15
+ when 0x2001 then method(:deserialize_provision_namespace)
16
+ when 0x4001 then method(:deserialize_mosaic_definition_creation)
17
+ when 0x4002 then method(:deserialize_mosaic_supply_change)
18
+ else raise "Not implemented entity type: #{type}"
19
+ end
20
+ method.call(serialized)
21
+ end
22
+
23
+ # Deserialize a transfer transaction object
24
+ # @param [String] serialized
25
+ # @return [Hash]
26
+ def self.deserialize_transfer(serialized)
27
+ s = Nis::Util::Convert.hex2ua(serialized)
28
+ common = deserialize_common(s)
8
29
  tx = {}
9
- tx[:type] = deserialize_int(s[0, 4])
10
- tx[:version] = deserialize_int(s[4, 4])
11
- tx[:timeStamp] = deserialize_int(s[8, 4])
12
- # s[12,4] # length of public key
13
- tx[:signer] = deserialize_hex(s[16, 32])
14
- tx[:fee] = deserialize_int(s[48, 8])
15
- tx[:deadline] = deserialize_int(s[56, 4])
16
30
  # s[60,4] # length of address
17
31
  tx[:recipient] = deserialize_a(s[64, 40])
18
32
  tx[:amount] = deserialize_int(s[104, 8])
19
-
20
33
  tx[:message] = {}
21
34
  message_len = deserialize_int(s[112, 4])
22
35
  if message_len > 0
@@ -26,11 +39,123 @@ module Nis::Util
26
39
  else
27
40
  tx[:message] = { type: 1, payload: '' }
28
41
  end
29
- tx
42
+ common.merge(tx)
43
+ end
44
+
45
+ # Deserialize a importance transaction object
46
+ # @param [String] serialized
47
+ # @return [Hash]
48
+ def self.deserialize_importance_transfer(serialized)
49
+ s = Nis::Util::Convert.hex2ua(serialized)
50
+ common = deserialize_common(s)
51
+ tx = {}
52
+ tx[:mode] = deserialize_int(s[60, 4])
53
+ # s[64, 4] # Length of remote account public key byte array
54
+ tx[:remoteAccount] = deserialize_hex(s[68, 32])
55
+ common.merge(tx)
56
+ end
57
+
58
+ # Deserialize a multisig aggregate modification transaction object
59
+ # @param [String] serialized
60
+ # @return [Hash]
61
+ def self.deserialize_multisig_aggregate_modification(serialized)
62
+ raise 'Not yet implimented.'
63
+ s = Nis::Util::Convert.hex2ua(serialized)
64
+ common = deserialize_common(s)
65
+ tx = {}
66
+ # TODO: deserializing
67
+ common.merge(tx)
68
+ end
69
+
70
+ # Deserialize a multisig signature transaction object
71
+ # @param [String] serialized
72
+ # @return [Hash]
73
+ def self.deserialize_multisig_signature(serialized)
74
+ s = Nis::Util::Convert.hex2ua(serialized)
75
+ common = deserialize_common(s)
76
+ tx = {}
77
+ tx[:otherHash] = {data: deserialize_hex(s[68, 32])}
78
+ tx[:otherAccount] = deserialize_a(s[104, 40])
79
+ common.merge(tx)
80
+ end
81
+
82
+ # Deserialize a multisig transfer transaction object
83
+ # @param [String] serialized
84
+ # @return [Hash]
85
+ def self.deserialize_multisig(serialized)
86
+ raise 'Not yet implimented.'
87
+ s = Nis::Util::Convert.hex2ua(serialized)
88
+ common = deserialize_common(s)
89
+ tx = {}
90
+ # TODO: deserializing
91
+ common.merge(tx)
92
+ end
93
+
94
+ # Deserialize a provision namespace transaction object
95
+ # @param [String] serialized
96
+ # @return [Hash]
97
+ def self.deserialize_provision_namespace(serialized)
98
+ s = Nis::Util::Convert.hex2ua(serialized)
99
+ common = deserialize_common(s)
100
+ tx = {}
101
+ # s[60, 4] # Length of rental fee sink's public key byte array (always 32): 4 bytes
102
+ tx[:rentalFeeSink] = deserialize_a(s[64, 40]) # Public key bytes of rental fee sink
103
+ tx[:rentalFee] = deserialize_int(s[104, 8]) # Fental fee: 8 bytes
104
+ newpart_len = deserialize_int(s[112, 4]) # Length of new part string: 4 bytes
105
+ tx[:newPart] = deserialize_a(s[116, newpart_len]) # New part string: UTF8 encoded string.
106
+ parent_len = deserialize_int(s[116 + newpart_len, 4]) # Length of parent string: 4 bytes
107
+ parent = s[116 + newpart_len, parent_len]
108
+ unless parent.all? { |val| val == 0xff }
109
+ tx[:parent] = deserialize_a(parent) # Parent string: UTF8 encoded string
110
+ end
111
+ common.merge(tx)
112
+ end
113
+
114
+ # Deserialize a mosaic definition creation transaction object
115
+ # @param [String] serialized
116
+ # @return [Hash]
117
+ def self.deserialize_mosaic_definition_creation(serialized)
118
+ raise 'Not yet implimented.'
119
+ s = Nis::Util::Convert.hex2ua(serialized)
120
+ common = deserialize_common(s)
121
+ tx = {}
122
+ # TODO: deserializing
123
+ common.merge(tx)
124
+ end
125
+
126
+ # Deserialize a mosaic supply change transaction object
127
+ # @param [String] serialized
128
+ # @return [Hash]
129
+ def self.deserialize_mosaic_supply_change(serialized)
130
+ s = Nis::Util::Convert.hex2ua(serialized)
131
+ common = deserialize_common(s)
132
+ tx = {}
133
+ # s[60, 4] # Length of mosaic id structure
134
+ ns_len = deserialize_int(s[64, 4]) # Length of namespace id string
135
+ mo_len = deserialize_int(s[68 + ns_len, 4]) # Length of mosaic name string
136
+ tx[:mosaicId] = {
137
+ namespaceId: deserialize_a(s[68, ns_len]),
138
+ name: deserialize_a(s[68 + ns_len + mo_len, mo_len])
139
+ }
140
+ tx[:supplyType] = deserialize_int(s[68 + ns_len + 4 + mo_len, 4]) # Supply type
141
+ tx[:delta] = deserialize_int(s[68 + ns_len + 4 + mo_len + 4, 8]) # Delta (change in supply)
142
+ common.merge(tx)
30
143
  end
31
144
 
32
145
  private
33
146
 
147
+ def self.deserialize_common(s)
148
+ tx = {}
149
+ tx[:type] = deserialize_int(s[0, 4])
150
+ tx[:version] = deserialize_int(s[4, 4])
151
+ tx[:timeStamp] = deserialize_int(s[8, 4])
152
+ # s[12,4] # length of public key
153
+ tx[:signer] = deserialize_hex(s[16, 32])
154
+ tx[:fee] = deserialize_int(s[48, 8])
155
+ tx[:deadline] = deserialize_int(s[56, 4])
156
+ tx
157
+ end
158
+
34
159
  def self.deserialize_int(ua)
35
160
  Nis::Util::Convert.ua2hex(ua.reverse).to_i(16)
36
161
  end
@@ -5,67 +5,163 @@ module Nis::Util
5
5
  # @return [Array]
6
6
  def self.serialize_transaction(entity)
7
7
  method = case entity[:type]
8
- when 257 then method(:serialize_transfer)
9
- when 4100 then method(:serialize_multisig_transfer)
8
+ when 0x0101 then method(:serialize_transfer)
9
+ when 0x0801 then method(:serialize_importance_transfer)
10
+ when 0x1001 then method(:serialize_multisig_aggregate_modification)
11
+ when 0x1002 then method(:serialize_multisig_signature)
12
+ when 0x1004 then method(:serialize_multisig)
13
+ when 0x2001 then method(:serialize_provision_namespace)
14
+ when 0x4001 then method(:serialize_mosaic_definition_creation)
15
+ when 0x4002 then method(:serialize_mosaic_supply_change)
10
16
  else raise "Not implemented entity type: #{entity[:type]}"
11
17
  end
12
18
  method.call(entity)
13
19
  end
14
20
 
15
- def self.serialize_common(entity)
21
+ def self.serialize_transfer(entity)
16
22
  a = []
17
- a += serialize_int(entity[:type])
18
- a += serialize_int(entity[:version])
19
- a += serialize_int(entity[:timeStamp])
23
+ # Common transaction part
24
+ a += serialize_common(entity)
25
+ # Transfer transaction part
26
+ a += serialize_safe_string(entity[:recipient])
27
+ a += serialize_long(entity[:amount])
28
+ temp = hex2ua(entity[:message][:payload])
29
+ if temp.size == 0
30
+ a += [0, 0, 0, 0]
31
+ else
32
+ a += serialize_int(temp.size + 8)
33
+ a += serialize_int(entity[:message][:type])
34
+ a += serialize_int(temp.size)
35
+ a += temp
36
+ end
37
+ a
38
+ end
20
39
 
21
- temp = hex2ua(entity[:signer])
40
+ def self.serialize_importance_transfer(entity)
41
+ a = []
42
+ a += serialize_common(entity)
43
+ a += serialize_int(entity[:mode])
44
+ temp = hex2ua(entity[:remoteAccount])
22
45
  a += serialize_int(temp.size)
23
46
  a += temp
24
-
25
- a += serialize_long(entity[:fee].to_i)
26
- a += serialize_int(entity[:deadline])
27
47
  a
28
48
  end
29
49
 
30
- def self.serialize_multisig_transfer(entity)
50
+ def self.serialize_multisig_aggregate_modification(entity)
31
51
  a = []
52
+ a += serialize_common(entity)
53
+ a += serialize_int(entity[:modifications].size)
54
+ a += entity[:modifications].map do |mod|
55
+ b = []
56
+ b += serialize_int(40)
57
+ b += serialize_int(mod[:modificationType])
58
+ b += serialize_int(32)
59
+ b += hex2ua(mod[:cosignatoryAccount])
60
+ b
61
+ end.flatten
32
62
 
33
- # Common transaction part
63
+ # The following part describes the minimum cosignatories modification.
64
+ # The part is optional. Version 1 aggregate modification transactions should omit this part.
65
+ # Version 2 aggregate modification transactions with no minimum cosignatories modification
66
+ # should only write the length field with value 0x00, 0x00, 0x00, 0x00.
67
+ if true # only version2
68
+ if entity[:minCosignatories][:relativeChange] > 0
69
+ a += serialize_int(4)
70
+ a += serialize_int(entity[:minCosignatories][:relativeChange])
71
+ else
72
+ a += [0, 0, 0, 0]
73
+ end
74
+ end
75
+ a
76
+ end
77
+
78
+ def self.serialize_multisig_signature(entity)
79
+ a = []
34
80
  a += serialize_common(entity)
81
+ temp = hex2ua(entity[:otherHash][:data])
82
+ a += serialize_int(4 + temp.size)
83
+ a += serialize_int(temp.size)
84
+ a += temp
85
+ a += serialize_safe_string(entity[:otherAccount])
86
+ end
35
87
 
36
- # Transfer transaction part
37
- tx = serialize_transfer(entity[:otherTrans])
88
+ def self.serialize_multisig(entity)
89
+ a = []
90
+ a += serialize_common(entity)
91
+ other_tx = entity[:otherTrans]
92
+ tx = case other_tx[:type]
93
+ when 0x0101 then serialize_transfer(other_tx)
94
+ when 0x0801 then serialize_importance_transfer(other_tx)
95
+ when 0x1001 then serialize_multisig_aggregate_modification(other_tx)
96
+ else raise "Unexpected type #{other_tx[:type]}"
97
+ end
38
98
  a += serialize_int(tx.size)
39
99
  a += tx
40
100
  a
41
101
  end
42
102
 
43
- def self.serialize_transfer(entity)
103
+ def self.serialize_provision_namespace(entity)
44
104
  a = []
45
-
46
- # Common transaction part
47
105
  a += serialize_common(entity)
48
-
49
- # Transfer transaction part
50
- temp = serialize_safe_string(entity[:recipient])
106
+ a += serialize_safe_string(entity[:rentalFeeSink])
107
+ a += serialize_long(entity[:rentalFee])
108
+ temp = hex2ua(utf8_to_hex(entity[:newPart]))
109
+ a += serialize_int(temp.size)
51
110
  a += temp
52
-
53
- a += serialize_long(entity[:amount])
54
-
55
- temp = hex2ua(entity[:message][:payload])
56
- if temp.size == 0
57
- a += [0, 0, 0, 0]
58
- else
59
- a += serialize_int(temp.size + 8)
60
- a += serialize_int(entity[:message][:type])
111
+ if entity[:parent]
112
+ temp = hex2ua(utf8_to_hex(entity[:parent]))
61
113
  a += serialize_int(temp.size)
62
114
  a += temp
115
+ else
116
+ a += [255, 255, 255, 255]
63
117
  end
64
118
  a
65
119
  end
66
120
 
121
+ def self.serialize_mosaic_definition_creation(entity)
122
+ a = []
123
+ a += serialize_common(entity)
124
+ a += serialize_mosaic_definition(entity[:mosaicDefinition])
125
+ a += serialize_safe_string(entity[:creationFeeSink])
126
+ a += serialize_long(entity[:creationFee])
127
+ a
128
+ end
129
+
130
+ def self.serialize_mosaic_supply_change(entity)
131
+ a = []
132
+ a += serialize_common(entity)
133
+ mo_id = entity[:mosaicId]
134
+ a_ns = hex2ua(utf8_to_hex(mo_id[:namespaceId]))
135
+ a_ns_len = serialize_int(a_ns.size)
136
+ a_mo = hex2ua(utf8_to_hex(mo_id[:name]))
137
+ a_mo_len = serialize_int(a_mo.size)
138
+ a += serialize_int((a_ns_len + a_ns + a_mo_len + a_mo).size)
139
+ a += a_ns_len
140
+ a += a_ns
141
+ a += a_mo_len
142
+ a += a_mo
143
+ a += serialize_int(entity[:supplyType])
144
+ a += serialize_long(entity[:delta])
145
+ a
146
+ end
147
+
67
148
  private
68
149
 
150
+ def self.serialize_common(entity)
151
+ a = []
152
+ a += serialize_int(entity[:type])
153
+ a += serialize_int(entity[:version])
154
+ a += serialize_int(entity[:timeStamp])
155
+
156
+ temp = hex2ua(entity[:signer])
157
+ a += serialize_int(temp.size)
158
+ a += temp
159
+
160
+ a += serialize_long(entity[:fee].to_i)
161
+ a += serialize_int(entity[:deadline])
162
+ a
163
+ end
164
+
69
165
  # Safe String - Each char is 8 bit
70
166
  # @param [String] str
71
167
  # @return [Array]
@@ -106,16 +202,6 @@ module Nis::Util
106
202
  a
107
203
  end
108
204
 
109
- # @param [Nis::Struct::MosaicId] mosaic_id
110
- # @return [Array]
111
- def self.serialize_mosaic_id(mosaic_id)
112
- serialized_namespace_id = serialize_safe_string(mosaic_id.namespace_id)
113
- serialized_name = serialize_safe_string(mosaic_id.name)
114
- [serialized_namespace_id.size + serialized_name.size, 0, 0, 0] +
115
- serialized_namespace_id +
116
- serialized_name
117
- end
118
-
119
205
  # @param [Nis::Struct::Mosaic] mosaic
120
206
  # @return [Array]
121
207
  def self.serialize_mosaic_and_quantity(mosaic)
@@ -145,74 +231,63 @@ module Nis::Util
145
231
  end.flatten
146
232
  end
147
233
 
234
+ # @param [Hash] entity
235
+ # @return [Array]
236
+ def self.serialize_mosaic_id(entity)
237
+ a = []
238
+ a += serialize_safe_string(entity[:namespaceId])
239
+ a += serialize_safe_string(entity[:name])
240
+ serialize_int(a.size) + a
241
+ end
242
+
148
243
  # @param [Hash] entity
149
244
  # @return [Array]
150
245
  def self.serialize_property(entity)
151
- a = [].fill(0, 0, 4)
152
- serialized_name = serialize_safe_string(entity[:name]);
153
- serialized_value = serialize_safe_string(entity[:value]);
154
- a[0] = serialized_name.size + serialized_value.size
155
- a + serialized_name + serialized_value
246
+ a = []
247
+ a += serialize_safe_string(entity[:name])
248
+ a += serialize_safe_string(entity[:value])
249
+ serialize_int(a.size) + a
156
250
  end
157
251
 
158
252
  # @param [Array] entities
159
253
  # @return [Array]
160
254
  def self.serialize_properties(entities)
161
- a = [].fill(0, 0, 4)
162
- a[0] = entities.size
163
-
164
- helper = {
255
+ order = {
165
256
  'divisibility' => 1,
166
257
  'initialSupply' => 2,
167
258
  'supplyMutable' => 3,
168
259
  'transferable' => 4
169
260
  }
170
- a + entities.sort_by { |ent| helper[ent[:name]] }
261
+ a = []
262
+ a = entities.sort_by { |ent| order[ent[:name]] }
171
263
  .map { |ent| serialize_property(ent) }.flatten
264
+ serialize_int(entities.size) + a
172
265
  end
173
266
 
174
267
  # @param [Hash] entity
175
268
  # @return [Array]
176
269
  def self.serialize_levy(entity)
177
- return [].fill(0, 0, 4) if entity.nil?
178
- a = [].fill(0, 0, 8)
179
- a[0] = entity[:type]
180
- temp = serialize_safe_string(entity[:recipient])
181
- serialized_mosaic_id = serialize_mosaic_id(entity[:mosaic_id])
182
- serialized_fee = serialize_long(entity[:fee])
183
- a += temp + serialized_mosaic_id + serialized_fee
184
- a[0] = 4 + temp.size + serialized_mosaic_id.size + 8;
185
- a
270
+ return [0, 0, 0, 0] if entity.nil?
271
+ a = []
272
+ a += serialize_int(entity[:type])
273
+ a += serialize_safe_string(entity[:recipient])
274
+ a += serialize_mosaic_id(entity[:mosaicId])
275
+ a += serialize_long(entity[:fee])
276
+ serialize_int(a.size) + a
186
277
  end
187
278
 
188
279
  # @param [Hash] entity
189
280
  # @return [Array]
190
281
  def self.serialize_mosaic_definition(entity)
191
- a = [].fill(0, 0, 4)
282
+ a = []
192
283
  temp = hex2ua(entity[:creator])
193
- a[0] = temp.size
284
+ a += serialize_int(temp.size)
194
285
  a += temp
195
286
  a += serialize_mosaic_id(entity[:id])
196
- utf8_to_bin = hex2ua(utf8_to_hex(entity[:description]));
197
- a += serialize_bin_string(utf8_to_bin);
198
- a += serialize_properties(entity[:properties]);
199
- a += serialize_levy(entity[:levy]);
200
- a
201
- end
202
-
203
- # @param [String] hex
204
- # @return [Array]
205
- # def self.hex2ua(hex)
206
- # hex.scan(/../).map(&:hex)
207
- # end
208
- #
209
- def self.bin2words(bin, bin_size)
210
- # temp = [];
211
- # for (let i = 0; i < ua_size; i += 4) {
212
- # let x = ua[i] * 0x1000000 + (ua[i + 1] || 0) * 0x10000 + (ua[i + 2] || 0) * 0x100 + (ua[i + 3] || 0);
213
- # temp.push((x > 0x7fffffff) ? x - 0x100000000 : x);
214
- # }
215
- # CryptoJS.lib.WordArray.create(temp, ua_size);
287
+ a += serialize_bin_string(hex2ua(utf8_to_hex(entity[:description])))
288
+ a += serialize_properties(entity[:properties])
289
+ a += serialize_levy(entity[:levy])
290
+ serialize_int(a.size) + a
216
291
  end
217
292
 
218
293
  # @param [String] hex
@@ -253,21 +328,5 @@ module Nis::Util
253
328
  end
254
329
  end.flatten.map(&:chr).join
255
330
  end
256
-
257
- def encode(sender_privkey, recipient_pubkey, message)
258
- # sk = hex2ua(sender_privkey)
259
- # pk = hex2ua(recipient_pubkey)
260
- # let shared = new Uint8Array(32);
261
- # let r = key_derive(shared, salt, sk, pk);
262
- # let encKey = r;
263
- # let encIv = {
264
- # iv: convert.bin2words(iv, 16)
265
- # };
266
- # let encrypted = CryptoJS.AES.encrypt(CryptoJS.enc.Hex.parse(convert.utf8ToHex(msg)), encKey, encIv);
267
- #
268
- salt = RbNaCl::Random.random_bytes(32)
269
- iv = RbNaCl::Random.random_bytes(16)
270
- bin2hex(salt) + bin2hex(iv) # + CryptoJS.enc.Hex.stringify(encrypted.ciphertext)
271
- end
272
331
  end
273
332
  end
data/lib/nis/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  class Nis
2
- VERSION = '0.0.14'.freeze
2
+ VERSION = '0.0.15'.freeze
3
3
  end
data/nis.gemspec CHANGED
@@ -25,6 +25,14 @@ Gem::Specification.new do |spec|
25
25
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
26
26
  spec.require_paths = ['lib']
27
27
 
28
+ spec.post_install_message = %q{
29
+ <nis-ruby>
30
+ Please see https://gitter.im/44uk/nis-ruby for the latest information.
31
+ The gem is under development. Incompatible changes can be made.
32
+ Feel free to ask and give feedback to https://twitter.com/44uk_i3
33
+ Good luck! NEM application development!
34
+ }
35
+
28
36
  spec.add_development_dependency 'rake', '~> 10.0'
29
37
  spec.add_development_dependency 'rspec', '~> 3.0'
30
38
  spec.add_development_dependency 'yard', '~> 0.9'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nis-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.14
4
+ version: 0.0.15
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yoshiyuki Ieyama
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-08-31 00:00:00.000000000 Z
11
+ date: 2017-09-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -215,6 +215,7 @@ files:
215
215
  - examples/transactions/transfer.rb
216
216
  - examples/transactions/transfer_mosaic.rb
217
217
  - examples/transactions/transfer_remote.rb
218
+ - examples/util/deserialize.rb
218
219
  - lib/nis.rb
219
220
  - lib/nis/client.rb
220
221
  - lib/nis/endpoint.rb
@@ -352,7 +353,10 @@ licenses:
352
353
  - MIT
353
354
  metadata:
354
355
  yard.run: yri
355
- post_install_message:
356
+ post_install_message: "\n <nis-ruby>\n Please see https://gitter.im/44uk/nis-ruby
357
+ for the latest information.\n The gem is under development. Incompatible changes
358
+ can be made.\n Feel free to ask and give feedback to https://twitter.com/44uk_i3\n
359
+ \ Good luck! NEM application development!\n "
356
360
  rdoc_options: []
357
361
  require_paths:
358
362
  - lib