nis-ruby 0.0.14 → 0.0.15

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.
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