minter 0.2.0 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (61) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +208 -278
  3. data/lib/ffi/{transaction → sign}/compile.rb +5 -3
  4. data/lib/ffi/sign/go.mod +5 -0
  5. data/lib/ffi/sign/go.sum +520 -0
  6. data/lib/ffi/sign/sign-darwin-10.6-amd64.dylib +0 -0
  7. data/lib/ffi/sign/sign-darwin-10.6-amd64.h +78 -0
  8. data/lib/ffi/sign/sign-linux-amd64.h +78 -0
  9. data/lib/ffi/sign/sign-linux-amd64.so +0 -0
  10. data/lib/ffi/sign/sign.go +84 -0
  11. data/lib/ffi/sign/sign_ffi.rb +12 -0
  12. data/lib/ffi/tx_hash/compile.rb +16 -0
  13. data/lib/ffi/tx_hash/go.mod +5 -0
  14. data/lib/ffi/tx_hash/go.sum +525 -0
  15. data/lib/ffi/tx_hash/tx-hash-darwin-10.6-amd64.dylib +0 -0
  16. data/lib/ffi/tx_hash/tx-hash-darwin-10.6-amd64.h +100 -0
  17. data/lib/ffi/tx_hash/tx-hash-linux-amd64.h +100 -0
  18. data/lib/ffi/tx_hash/tx-hash-linux-amd64.so +0 -0
  19. data/lib/ffi/tx_hash/tx_hash.go +618 -0
  20. data/lib/ffi/tx_hash/tx_hash_ffi.rb +25 -0
  21. data/lib/ffi/wallet/compile.rb +5 -3
  22. data/lib/ffi/wallet/go.mod +5 -0
  23. data/lib/ffi/wallet/go.sum +525 -0
  24. data/lib/ffi/wallet/wallet-darwin-10.6-amd64.dylib +0 -0
  25. data/lib/ffi/wallet/wallet-darwin-10.6-amd64.h +86 -0
  26. data/lib/ffi/wallet/wallet-linux-amd64.h +86 -0
  27. data/lib/ffi/wallet/wallet-linux-amd64.so +0 -0
  28. data/lib/ffi/wallet/wallet.go +50 -0
  29. data/lib/ffi/wallet/wallet_ffi.rb +1 -1
  30. data/lib/minter.rb +2 -1
  31. data/lib/minter/api/client.rb +4 -1
  32. data/lib/minter/api/connection.rb +6 -0
  33. data/lib/minter/api/resources/address_resource.rb +2 -6
  34. data/lib/minter/api/resources/block_resource.rb +2 -3
  35. data/lib/minter/api/resources/candidate_resource.rb +2 -2
  36. data/lib/minter/api/resources/coin_resource.rb +2 -2
  37. data/lib/minter/api/resources/estimate_resource.rb +1 -1
  38. data/lib/minter/api/resources/events_resource.rb +2 -3
  39. data/lib/minter/api/resources/max_gas_resource.rb +1 -1
  40. data/lib/minter/api/resources/nonce_resource.rb +3 -4
  41. data/lib/minter/api/resources/send_transaction_resource.rb +2 -3
  42. data/lib/minter/api/resources/transactions_resource.rb +2 -3
  43. data/lib/minter/transactions/buy_coin_tx.rb +0 -1
  44. data/lib/minter/transactions/create_coin_tx.rb +0 -1
  45. data/lib/minter/transactions/create_multisig_address_tx.rb +38 -0
  46. data/lib/minter/transactions/declare_candidacy_tx.rb +0 -2
  47. data/lib/minter/transactions/delegate_tx.rb +0 -1
  48. data/lib/minter/transactions/edit_candidate_tx.rb +4 -3
  49. data/lib/minter/transactions/multi_send_tx.rb +2 -3
  50. data/lib/minter/transactions/redeem_check_tx.rb +0 -1
  51. data/lib/minter/transactions/sell_all_coin_tx.rb +0 -1
  52. data/lib/minter/transactions/sell_coin_tx.rb +0 -1
  53. data/lib/minter/transactions/send_coin_tx.rb +0 -2
  54. data/lib/minter/transactions/set_candidate_off_tx.rb +0 -1
  55. data/lib/minter/transactions/set_candidate_on_tx.rb +0 -1
  56. data/lib/minter/transactions/signed_tx.rb +3 -3
  57. data/lib/minter/transactions/transaction.rb +34 -10
  58. data/lib/minter/transactions/unbond_tx.rb +0 -1
  59. data/lib/minter/version.rb +1 -1
  60. metadata +32 -8
  61. data/lib/ffi/transaction/transaction_ffi.rb +0 -93
@@ -2,8 +2,6 @@
2
2
 
3
3
  module Minter
4
4
  class DeclareCandidacyTx < Transaction
5
- SIGN_METHOD = :SignDeclareCandidacyTransaction
6
-
7
5
  attr_accessor :address, :pubkey, :commission, :coin, :stake, :nonce, :chain_id, :gas_coin, :gas_price
8
6
 
9
7
  def initialize(address:, pubkey:, commission:, coin:, stake:, nonce:, chain_id:, gas_coin:, gas_price:) # rubocop:disable Metrics/ParameterLists
@@ -2,7 +2,6 @@
2
2
 
3
3
  module Minter
4
4
  class DelegateTx < Transaction
5
- SIGN_METHOD = :SignDelegateTransaction
6
5
  attr_accessor :pubkey, :coin, :value, :nonce, :chain_id, :gas_coin, :gas_price
7
6
 
8
7
  def initialize(pubkey:, coin:, value:, nonce:, chain_id:, gas_coin:, gas_price:) # rubocop:disable Metrics/ParameterLists
@@ -2,13 +2,13 @@
2
2
 
3
3
  module Minter
4
4
  class EditCandidateTx < Transaction
5
- SIGN_METHOD = :SignEditCandidateTransaction
6
- attr_accessor :pubkey, :reward_address, :owner_address, :nonce, :chain_id, :gas_coin, :gas_price
5
+ attr_accessor :pubkey, :reward_address, :owner_address, :control_address, :nonce, :chain_id, :gas_coin, :gas_price
7
6
 
8
- def initialize(pubkey:, reward_address:, owner_address:, nonce:, chain_id:, gas_coin:, gas_price:) # rubocop:disable Metrics/ParameterLists
7
+ def initialize(pubkey:, reward_address:, owner_address:, control_address:, nonce:, chain_id:, gas_coin:, gas_price:) # rubocop:disable Metrics/ParameterLists
9
8
  @pubkey = pubkey
10
9
  @reward_address = reward_address
11
10
  @owner_address = owner_address
11
+ @control_address = control_address
12
12
  @nonce = nonce
13
13
  @chain_id = chain_id
14
14
  @gas_coin = gas_coin
@@ -19,6 +19,7 @@ module Minter
19
19
  { PubKey: pubkey,
20
20
  RewardAddress: reward_address,
21
21
  OwnerAddress: owner_address,
22
+ ControlAddress: control_address,
22
23
  Nonce: nonce,
23
24
  ChainId: chain_id,
24
25
  GasCoin: gas_coin,
@@ -2,7 +2,6 @@
2
2
 
3
3
  module Minter
4
4
  class MultiSendTx < Transaction
5
- SIGN_METHOD = :SignMultiSendTransaction
6
5
  attr_accessor :items, :coin, :nonce, :chain_id, :gas_coin, :gas_price
7
6
 
8
7
  def initialize(nonce:, chain_id:, gas_coin:, gas_price:)
@@ -13,8 +12,8 @@ module Minter
13
12
  @items = []
14
13
  end
15
14
 
16
- def add_item(symbol:, value:, address_to:)
17
- @items << { Symbol: symbol, Value: value, AddressTo: address_to }
15
+ def add_item(coin_id:, value:, address_to:)
16
+ @items << { CoinID: coin_id, Value: value, AddressTo: address_to }
18
17
  end
19
18
 
20
19
  def to_params
@@ -2,7 +2,6 @@
2
2
 
3
3
  module Minter
4
4
  class RedeemCheckTx < Transaction
5
- SIGN_METHOD = :SignRedeemCheckTransaction
6
5
  attr_accessor :check, :proof, :nonce, :chain_id, :gas_coin, :gas_price
7
6
 
8
7
  def initialize(check:, proof:, nonce:, chain_id:, gas_coin:, gas_price:) # rubocop:disable Metrics/ParameterLists
@@ -2,7 +2,6 @@
2
2
 
3
3
  module Minter
4
4
  class SellAllCoinTx < Transaction
5
- SIGN_METHOD = :SignSellAllCoinTransaction
6
5
  attr_accessor :coin_to_sell, :coin_to_buy, :minimum_value_to_buy, :nonce, :chain_id, :gas_coin, :gas_price
7
6
 
8
7
  def initialize(coin_to_sell:, coin_to_buy:, minimum_value_to_buy:, nonce:, chain_id:, gas_coin:, gas_price:) # rubocop:disable Metrics/ParameterLists
@@ -2,7 +2,6 @@
2
2
 
3
3
  module Minter
4
4
  class SellCoinTx < Transaction
5
- SIGN_METHOD = :SignSellCoinTransaction
6
5
  attr_accessor :coin_to_sell, :value_to_sell, :coin_to_buy, :minimum_value_to_buy, :nonce, :chain_id, :gas_coin, :gas_price
7
6
 
8
7
  def initialize(coin_to_sell:, value_to_sell:, coin_to_buy:, minimum_value_to_buy:, nonce:, chain_id:, gas_coin:, gas_price:) # rubocop:disable Metrics/ParameterLists
@@ -2,8 +2,6 @@
2
2
 
3
3
  module Minter
4
4
  class SendCoinTx < Transaction
5
- SIGN_METHOD = :SignTransaction
6
-
7
5
  attr_accessor :type, :address_to, :value, :coin, :nonce, :chain_id, :gas_coin, :gas_price
8
6
 
9
7
  def initialize(address_to:, value:, coin:, nonce:, chain_id:, gas_coin:, gas_price:) # rubocop:disable Metrics/ParameterLists
@@ -2,7 +2,6 @@
2
2
 
3
3
  module Minter
4
4
  class SetCandidateOffTx < Transaction
5
- SIGN_METHOD = :SignSetCandidateOffTransaction
6
5
  attr_accessor :pubkey, :nonce, :chain_id, :gas_coin, :gas_price
7
6
 
8
7
  def initialize(pubkey:, nonce:, chain_id:, gas_coin:, gas_price:)
@@ -2,7 +2,6 @@
2
2
 
3
3
  module Minter
4
4
  class SetCandidateOnTx < Transaction
5
- SIGN_METHOD = :SignSetCandidateOnTransaction
6
5
  attr_accessor :pubkey, :nonce, :chain_id, :gas_coin, :gas_price
7
6
 
8
7
  def initialize(pubkey:, nonce:, chain_id:, gas_coin:, gas_price:)
@@ -2,14 +2,14 @@
2
2
 
3
3
  module Minter
4
4
  class SignedTx
5
- attr_reader :tx_hash
5
+ attr_reader :tx_hash, :transaction
6
6
 
7
- def initialize(tx_hash)
7
+ def initialize(tx_hash: nil, transaction: nil)
8
8
  @tx_hash = tx_hash
9
+ @transaction = transaction
9
10
  end
10
11
 
11
12
  def send
12
- # TODO: maybe create client one time
13
13
  Minter::Api::Client.new.send_transaction(transaction: tx_hash)
14
14
  end
15
15
  end
@@ -1,17 +1,41 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Minter
2
4
  class TransactionError < StandardError; end
5
+ class SignError < StandardError; end
3
6
 
4
7
  class Transaction
5
8
  def sign(private_key)
6
- params = to_params
7
- params[:PrivateKey] = private_key
8
-
9
- result = JSON.parse(Minter::TransactionFfi.send(self.class::SIGN_METHOD, params.to_json))
10
- if result["success"]
11
- SignedTx.new(result["tx_hash"])
12
- else
13
- raise TransactionError.new(result["error"])
14
- end
9
+ sign_params = {}
10
+ sign_params[:PrivateKey] = private_key
11
+ sign_params[:TxHash] = tx_hash
12
+
13
+ result = JSON.parse(Minter::SignFfi.Sign(sign_params.to_json))
14
+ raise SignError, result["error"] unless result["success"] == "true"
15
+
16
+ SignedTx.new(tx_hash: result["tx_hash"], transaction: self)
17
+ end
18
+
19
+ def multisign(multisig_address, *private_keys)
20
+ multisign_params = {}
21
+ multisign_params[:PrivateKeys] = private_keys
22
+ multisign_params[:TxHash] = tx_hash(multisign: true)
23
+ multisign_params[:MultiSigAddress] = multisig_address
24
+
25
+ result = JSON.parse(Minter::SignFfi.MultiSign(multisign_params.to_json))
26
+ raise SignError, result["error"] unless result["success"] == "true"
27
+
28
+ SignedTx.new(tx_hash: result["tx_hash"], transaction: self)
29
+ end
30
+
31
+ def tx_hash(multisign: false)
32
+ transaction_params = to_params
33
+ transaction_params[:SignatureType] = multisign ? 2 : 1
34
+
35
+ result = JSON.parse(Minter::TxHashFfi.send(self.class.to_s.split("::")[1], transaction_params.to_json))
36
+ raise TransactionError, result["error"] unless result["success"] == "true"
37
+
38
+ result["tx_hash"]
15
39
  end
16
40
  end
17
- end
41
+ end
@@ -2,7 +2,6 @@
2
2
 
3
3
  module Minter
4
4
  class UnbondTx < Transaction
5
- SIGN_METHOD = :SignUnbondTransaction
6
5
  attr_accessor :pubkey, :coin, :value, :nonce, :chain_id, :gas_coin, :gas_price
7
6
 
8
7
  def initialize(pubkey:, coin:, value:, nonce:, chain_id:, gas_coin:, gas_price:) # rubocop:disable Metrics/ParameterLists
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Minter
4
- VERSION = "0.2.0"
4
+ VERSION = "1.0.1"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: minter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alexander Nikolaev
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-05-19 00:00:00.000000000 Z
11
+ date: 2020-11-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dotenv
@@ -131,7 +131,7 @@ dependencies:
131
131
  - !ruby/object:Gem::Version
132
132
  version: '3.9'
133
133
  description: This is a Ruby SDK based on Golang SDK for working with Minter blockchain
134
- email:
134
+ email:
135
135
  executables: []
136
136
  extensions: []
137
137
  extra_rdoc_files: []
@@ -141,9 +141,32 @@ files:
141
141
  - README.md
142
142
  - bin/console
143
143
  - bin/setup
144
- - lib/ffi/transaction/compile.rb
145
- - lib/ffi/transaction/transaction_ffi.rb
144
+ - lib/ffi/sign/compile.rb
145
+ - lib/ffi/sign/go.mod
146
+ - lib/ffi/sign/go.sum
147
+ - lib/ffi/sign/sign-darwin-10.6-amd64.dylib
148
+ - lib/ffi/sign/sign-darwin-10.6-amd64.h
149
+ - lib/ffi/sign/sign-linux-amd64.h
150
+ - lib/ffi/sign/sign-linux-amd64.so
151
+ - lib/ffi/sign/sign.go
152
+ - lib/ffi/sign/sign_ffi.rb
153
+ - lib/ffi/tx_hash/compile.rb
154
+ - lib/ffi/tx_hash/go.mod
155
+ - lib/ffi/tx_hash/go.sum
156
+ - lib/ffi/tx_hash/tx-hash-darwin-10.6-amd64.dylib
157
+ - lib/ffi/tx_hash/tx-hash-darwin-10.6-amd64.h
158
+ - lib/ffi/tx_hash/tx-hash-linux-amd64.h
159
+ - lib/ffi/tx_hash/tx-hash-linux-amd64.so
160
+ - lib/ffi/tx_hash/tx_hash.go
161
+ - lib/ffi/tx_hash/tx_hash_ffi.rb
146
162
  - lib/ffi/wallet/compile.rb
163
+ - lib/ffi/wallet/go.mod
164
+ - lib/ffi/wallet/go.sum
165
+ - lib/ffi/wallet/wallet-darwin-10.6-amd64.dylib
166
+ - lib/ffi/wallet/wallet-darwin-10.6-amd64.h
167
+ - lib/ffi/wallet/wallet-linux-amd64.h
168
+ - lib/ffi/wallet/wallet-linux-amd64.so
169
+ - lib/ffi/wallet/wallet.go
147
170
  - lib/ffi/wallet/wallet_ffi.rb
148
171
  - lib/minter.rb
149
172
  - lib/minter/api/client.rb
@@ -167,6 +190,7 @@ files:
167
190
  - lib/minter/key.rb
168
191
  - lib/minter/transactions/buy_coin_tx.rb
169
192
  - lib/minter/transactions/create_coin_tx.rb
193
+ - lib/minter/transactions/create_multisig_address_tx.rb
170
194
  - lib/minter/transactions/declare_candidacy_tx.rb
171
195
  - lib/minter/transactions/delegate_tx.rb
172
196
  - lib/minter/transactions/edit_candidate_tx.rb
@@ -189,7 +213,7 @@ metadata:
189
213
  homepage_uri: https://github.com/rubyroid-team/minter
190
214
  source_code_uri: https://github.com/rubyroid-team/minter
191
215
  changelog_uri: https://github.com/rubyroid-team/minter/blob/master/CHANGELOG.md
192
- post_install_message:
216
+ post_install_message:
193
217
  rdoc_options: []
194
218
  require_paths:
195
219
  - lib
@@ -205,7 +229,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
205
229
  version: '0'
206
230
  requirements: []
207
231
  rubygems_version: 3.0.8
208
- signing_key:
232
+ signing_key:
209
233
  specification_version: 4
210
234
  summary: This is a Ruby SDK based on Golang SDK for working with Minter blockchain
211
235
  test_files: []
@@ -1,93 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "ffi"
4
- module Minter
5
- module TransactionFfi
6
- extend FFI::Library
7
- filename = RUBY_PLATFORM.match('darwin') ? "/transaction-darwin-10.6-amd64.dylib" : "/transaction-linux-amd64.so"
8
- ffi_lib File.join(File.dirname(__FILE__), filename)
9
- attach_function :SignTransaction, [:string], :string
10
- attach_function :DecodeTransaction, [:string], :string
11
- attach_function :SignCreateCoinTransaction, [:string], :string
12
- attach_function :SignSellCoinTransaction, [:string], :string
13
- attach_function :SignBuyCoinTransaction, [:string], :string
14
- attach_function :SignSellAllCoinTransaction, [:string], :string
15
- attach_function :SignDeclareCandidacyTransaction, [:string], :string
16
- attach_function :SignDelegateTransaction, [:string], :string
17
- attach_function :SignUnbondTransaction, [:string], :string
18
- attach_function :SignSetCandidateOffTransaction, [:string], :string
19
- attach_function :SignSetCandidateOnTransaction, [:string], :string
20
- attach_function :SignRedeemCheckTransaction, [:string], :string
21
- attach_function :SignEditCandidateTransaction, [:string], :string
22
- attach_function :SignMultiSendTransaction, [:string], :string
23
- end
24
- end
25
-
26
- # Examples of USAGE FFI
27
- # ===SEND MNT===
28
- # tx_params = {
29
- # Nonce: 27,
30
- # ChainId: 2,
31
- # Type: 1,
32
- # AddressTo: "Mx7633980c000139dd3bd24a3f54e06474fa941e16",
33
- # Value: 24_000_000_000_000_000_000,
34
- # Coin: "MNT",
35
- # GasCoin: "MNT",
36
- # GasPrice: 10,
37
- # PrivateKey: "290cd647206bea71ec06d8dfacce30c872aea3fb1ea333b7f475b70467250ca0"
38
- # }
39
- # tx = Minter::TransactionFfi.SignTransaction(tx_params.to_json)
40
- # Minter::Api::Client.new.send_transaction(transaction: tx)
41
-
42
- # ==CREATE COIN==
43
- # tx_params = {
44
- # Name: "DEVTWO",
45
- # Symbol: "DEVTWO",
46
- # InitialAmount: 1000000000000000000,
47
- # MaxSupply: 10000000000000000000,
48
- # InitialReserve: 10000,
49
- # ReserveRation: 10,
50
- #
51
- # Nonce: 29,
52
- # ChainId: 2,
53
- # GasCoin: "MNT",
54
- # GasPrice: 1,
55
- # PrivateKey: "290cd647206bea71ec06d8dfacce30c872aea3fb1ea333b7f475b70467250ca0"
56
- # }
57
- #
58
- # tx = Minter::TransactionFfi.SignCreateCoinTransaction(tx_params.to_json)
59
- # Minter::Api::Client.new.send_transaction(transaction: tx)
60
-
61
- # ===SELL_COIN===
62
- # tx_params = {
63
- # CoinToSell: "DEVDEV",
64
- # ValueToSell: 1000,
65
- # CoinToBuy: "MNT",
66
- # MinimumValueToBuy: 100000000,
67
- #
68
- # Nonce: 31,
69
- # ChainId: 2,
70
- # GasCoin: "MNT",
71
- # GasPrice: 1,
72
- # PrivateKey: "290cd647206bea71ec06d8dfacce30c872aea3fb1ea333b7f475b70467250ca0"
73
- # }
74
- #
75
- # tx = Minter::TransactionFfi.SignSellCoinTransaction(tx_params.to_json)
76
- # Minter::Api::Client.new.send_transaction(transaction: tx)
77
-
78
- # ===BUY_COIN===
79
- # tx_params = {
80
- # CoinToBuy: "DEVDEV",
81
- # ValueToBuy: 1000,
82
- # CoinToSell: "MNT",
83
- # MaximumValueToSell: 100000000,
84
- #
85
- # Nonce: 31,
86
- # ChainId: 2,
87
- # GasCoin: "MNT",
88
- # GasPrice: 1,
89
- # PrivateKey: "290cd647206bea71ec06d8dfacce30c872aea3fb1ea333b7f475b70467250ca0"
90
- # }
91
- #
92
- # tx = Minter::TransactionFfi.SignBuyCoinTransaction(tx_params.to_json)
93
- # Minter::Api::Client.new.send_transaction(transaction: tx)