minter 0.1.1 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +80 -8
  3. data/lib/ffi/{go → sign}/compile.rb +6 -4
  4. data/lib/ffi/sign/go.mod +5 -0
  5. data/lib/ffi/sign/go.sum +520 -0
  6. data/lib/ffi/{transaction-darwin-10.6-amd64.dylib → sign/sign-darwin-10.6-amd64.dylib} +0 -0
  7. data/lib/ffi/{wallet.h → sign/sign-darwin-10.6-amd64.h} +3 -11
  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/{transaction-linux-amd64.h → tx_hash/tx-hash-darwin-10.6-amd64.h} +13 -17
  17. data/lib/ffi/tx_hash/tx-hash-linux-amd64.h +100 -0
  18. data/lib/ffi/{transaction-linux-amd64.so → 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 +16 -0
  22. data/lib/ffi/wallet/go.mod +5 -0
  23. data/lib/ffi/wallet/go.sum +525 -0
  24. data/lib/ffi/{wallet-darwin-10.6-amd64.dylib → wallet/wallet-darwin-10.6-amd64.dylib} +0 -0
  25. data/lib/ffi/{wallet-darwin-10.6-amd64.h → wallet/wallet-darwin-10.6-amd64.h} +0 -0
  26. data/lib/ffi/{wallet-linux-amd64.h → wallet/wallet-linux-amd64.h} +0 -0
  27. data/lib/ffi/{wallet-linux-amd64.so → wallet/wallet-linux-amd64.so} +0 -0
  28. data/lib/ffi/wallet/wallet.go +50 -0
  29. data/lib/ffi/{wallet_ffi.rb → wallet/wallet_ffi.rb} +1 -1
  30. data/lib/minter.rb +4 -2
  31. data/lib/minter/api/resources/estimate_resource.rb +1 -1
  32. data/lib/minter/transactions/buy_coin_tx.rb +1 -8
  33. data/lib/minter/transactions/create_coin_tx.rb +1 -8
  34. data/lib/minter/transactions/create_multisig_address_tx.rb +38 -0
  35. data/lib/minter/transactions/declare_candidacy_tx.rb +1 -8
  36. data/lib/minter/transactions/delegate_tx.rb +1 -8
  37. data/lib/minter/transactions/edit_candidate_tx.rb +5 -10
  38. data/lib/minter/transactions/multi_send_tx.rb +29 -0
  39. data/lib/minter/transactions/redeem_check_tx.rb +1 -8
  40. data/lib/minter/transactions/sell_all_coin_tx.rb +1 -8
  41. data/lib/minter/transactions/sell_coin_tx.rb +1 -8
  42. data/lib/minter/transactions/send_coin_tx.rb +1 -8
  43. data/lib/minter/transactions/set_candidate_off_tx.rb +1 -8
  44. data/lib/minter/transactions/set_candidate_on_tx.rb +1 -8
  45. data/lib/minter/transactions/signed_tx.rb +3 -3
  46. data/lib/minter/transactions/transaction.rb +41 -0
  47. data/lib/minter/transactions/unbond_tx.rb +1 -8
  48. data/lib/minter/version.rb +1 -1
  49. data/lib/minter/wallet.rb +3 -2
  50. metadata +36 -18
  51. data/lib/ffi/transaction-darwin-10.6-amd64.h +0 -104
  52. data/lib/ffi/transaction_ffi.rb +0 -94
@@ -0,0 +1,50 @@
1
+ package main
2
+
3
+ import (
4
+ "C"
5
+ "github.com/MinterTeam/minter-go-sdk/v2/wallet"
6
+
7
+ )
8
+
9
+ //export NewMnemonic
10
+ func NewMnemonic() *C.char {
11
+ mnemonic, _ := wallet.NewMnemonic()
12
+ return C.CString(mnemonic)
13
+ }
14
+
15
+ //export PrivateKeyFromMnemonic
16
+ func PrivateKeyFromMnemonic(mnemonic *C.char) *C.char {
17
+ seed, _ := wallet.Seed(C.GoString(mnemonic))
18
+ prKey, _ := wallet.PrivateKeyBySeed(seed)
19
+ return C.CString(prKey)
20
+ }
21
+
22
+ //export PublicKeyFromPrivateKey
23
+ func PublicKeyFromPrivateKey(prKey *C.char) *C.char {
24
+ pubKey, _ := wallet.PublicKeyByPrivateKey(C.GoString(prKey))
25
+ return C.CString(pubKey)
26
+ }
27
+
28
+ //export AddressFromMnemonic
29
+ func AddressFromMnemonic(mnemonic *C.char) *C.char {
30
+ seed, _ := wallet.Seed(C.GoString(mnemonic))
31
+ prKey, _ := wallet.PrivateKeyBySeed(seed)
32
+ pubKey, _ := wallet.PublicKeyByPrivateKey(prKey)
33
+ address, _ := wallet.AddressByPublicKey(pubKey)
34
+ return C.CString(address)
35
+ }
36
+
37
+ //export AddressFromPrivateKey
38
+ func AddressFromPrivateKey(prKey *C.char) *C.char {
39
+ pubKey, _ := wallet.PublicKeyByPrivateKey(C.GoString(prKey))
40
+ address, _ := wallet.AddressByPublicKey(pubKey)
41
+ return C.CString(address)
42
+ }
43
+
44
+ //export AddressFromPublicKey
45
+ func AddressFromPublicKey(mnemonic *C.char) *C.char {
46
+ address, _ := wallet.AddressByPublicKey(C.GoString(mnemonic))
47
+ return C.CString(address)
48
+ }
49
+
50
+ func main() {}
@@ -4,7 +4,7 @@ require "ffi"
4
4
  module Minter
5
5
  module WalletFfi
6
6
  extend FFI::Library
7
- filename = RUBY_PLATFORM.match('darwin') ? "/wallet-darwin-10.6-amd64.dylib" : "/wallet-linux-amd64.so"
7
+ filename = RUBY_PLATFORM.match("darwin") ? "/wallet-darwin-10.6-amd64.dylib" : "/wallet-linux-amd64.so"
8
8
  ffi_lib File.join(File.dirname(__FILE__), filename)
9
9
  attach_function :NewMnemonic, [], :string
10
10
  attach_function :PrivateKeyFromMnemonic, [:string], :string
@@ -6,8 +6,10 @@ require "minter/api/client"
6
6
  require "minter/version"
7
7
  require "minter/wallet.rb"
8
8
  require "minter/key.rb"
9
- require "ffi/wallet_ffi.rb"
10
- require "ffi/transaction_ffi.rb"
9
+ require "ffi/wallet/wallet_ffi.rb"
10
+ require "ffi/tx_hash/tx_hash_ffi.rb"
11
+ require "ffi/sign/sign_ffi.rb"
12
+ require "minter/transactions/transaction.rb"
11
13
  Dir[File.dirname(__FILE__) + "/minter/transactions/*.rb"].each { |file| require_relative file }
12
14
 
13
15
  module Minter
@@ -17,7 +17,7 @@ module Minter
17
17
 
18
18
  def estimate_coin_sell_all(coinToSell:, valueToSell:, coinToBuy:, gasPrice:, height: nil)
19
19
  path = "/estimate_coin_sell_all"
20
- params = { coinToSell: coinToSell, valueToSell: valueToBuy, coinToBuy: coinToBuy, gasPrice: gasPrice, height: height }.compact
20
+ params = { coinToSell: coinToSell, valueToSell: valueToSell, coinToBuy: coinToBuy, gasPrice: gasPrice, height: height }.compact
21
21
  get(path, params)
22
22
  end
23
23
 
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Minter
4
- class BuyCoinTx
4
+ class BuyCoinTx < Transaction
5
5
  attr_accessor :coin_to_buy, :value_to_buy, :coin_to_sell, :maximum_value_to_sell, :nonce, :chain_id, :gas_coin, :gas_price
6
6
 
7
7
  def initialize(coin_to_buy:, value_to_buy:, coin_to_sell:, maximum_value_to_sell:, nonce:, chain_id:, gas_coin:, gas_price:) # rubocop:disable Metrics/ParameterLists
@@ -15,13 +15,6 @@ module Minter
15
15
  @gas_price = gas_price
16
16
  end
17
17
 
18
- def sign(private_key)
19
- params = to_params
20
- params[:PrivateKey] = private_key
21
- tx_hash = Minter::TransactionFfi.SignBuyCoinTransaction(params.to_json)
22
- SignedTx.new(tx_hash)
23
- end
24
-
25
18
  def to_params
26
19
  { CoinToBuy: coin_to_buy,
27
20
  ValueToBuy: value_to_buy,
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Minter
4
- class CreateCoinTx
4
+ class CreateCoinTx < Transaction
5
5
  attr_accessor :name, :symbol, :initial_amount, :max_supply, :initial_reserve, :reserve_ratio, :nonce, :chain_id, :gas_coin, :gas_price
6
6
 
7
7
  def initialize(name:, symbol:, initial_amount:, max_supply:, initial_reserve:, reserve_ratio:, nonce:, chain_id:, gas_coin:, gas_price:) # rubocop:disable Metrics/ParameterLists
@@ -17,13 +17,6 @@ module Minter
17
17
  @gas_price = gas_price
18
18
  end
19
19
 
20
- def sign(private_key)
21
- params = to_params
22
- params[:PrivateKey] = private_key
23
- tx_hash = Minter::TransactionFfi.SignCreateCoinTransaction(params.to_json)
24
- SignedTx.new(tx_hash)
25
- end
26
-
27
20
  def to_params
28
21
  { Name: name,
29
22
  Symbol: symbol,
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Minter
4
+ class CreateMultisigAddressTx < Transaction
5
+ attr_accessor :addresses, :threshold, :nonce, :chain_id, :gas_coin, :gas_price
6
+
7
+ def initialize(threshold:, nonce:, chain_id:, gas_coin:, gas_price:)
8
+ @threshold = threshold
9
+ @nonce = nonce
10
+ @chain_id = chain_id
11
+ @gas_coin = gas_coin
12
+ @gas_price = gas_price
13
+ @addresses = []
14
+ end
15
+
16
+ def add_address(address:, weight:)
17
+ @addresses << { Address: address, Weight: weight }
18
+ end
19
+
20
+ def to_params
21
+ {
22
+ Threshold: threshold,
23
+ Nonce: nonce,
24
+ ChainId: chain_id,
25
+ GasCoin: gas_coin,
26
+ GasPrice: gas_price,
27
+ Addresses: addresses
28
+ }
29
+ end
30
+
31
+ def multisig_address
32
+ result = JSON.parse(Minter::TxHashFfi.GetMultisigAddress(to_params.to_json))
33
+ raise TransactionError, result["error"] unless result["success"] == "true"
34
+
35
+ result["multisig_address"]
36
+ end
37
+ end
38
+ end
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Minter
4
- class DeclareCandidacyTx
4
+ class DeclareCandidacyTx < Transaction
5
5
  attr_accessor :address, :pubkey, :commission, :coin, :stake, :nonce, :chain_id, :gas_coin, :gas_price
6
6
 
7
7
  def initialize(address:, pubkey:, commission:, coin:, stake:, nonce:, chain_id:, gas_coin:, gas_price:) # rubocop:disable Metrics/ParameterLists
@@ -16,13 +16,6 @@ module Minter
16
16
  @gas_price = gas_price
17
17
  end
18
18
 
19
- def sign(private_key)
20
- params = to_params
21
- params[:PrivateKey] = private_key
22
- tx_hash = Minter::TransactionFfi.SignDeclareCandidacyTransaction(params.to_json)
23
- SignedTx.new(tx_hash)
24
- end
25
-
26
19
  def to_params
27
20
  { Address: address,
28
21
  PubKey: pubkey,
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Minter
4
- class DelegateTx
4
+ class DelegateTx < Transaction
5
5
  attr_accessor :pubkey, :coin, :value, :nonce, :chain_id, :gas_coin, :gas_price
6
6
 
7
7
  def initialize(pubkey:, coin:, value:, nonce:, chain_id:, gas_coin:, gas_price:) # rubocop:disable Metrics/ParameterLists
@@ -14,13 +14,6 @@ module Minter
14
14
  @gas_price = gas_price
15
15
  end
16
16
 
17
- def sign(private_key)
18
- params = to_params
19
- params[:PrivateKey] = private_key
20
- tx_hash = Minter::TransactionFfi.SignDelegateTransaction(params.to_json)
21
- SignedTx.new(tx_hash)
22
- end
23
-
24
17
  def to_params
25
18
  { PubKey: pubkey,
26
19
  Coin: coin,
@@ -1,30 +1,25 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Minter
4
- class EditCandidateTx
5
- attr_accessor :pubkey, :reward_address, :owner_address, :nonce, :chain_id, :gas_coin, :gas_price
4
+ class EditCandidateTx < Transaction
5
+ attr_accessor :pubkey, :reward_address, :owner_address, :control_address, :nonce, :chain_id, :gas_coin, :gas_price
6
6
 
7
- 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
8
8
  @pubkey = pubkey
9
9
  @reward_address = reward_address
10
10
  @owner_address = owner_address
11
+ @control_address = control_address
11
12
  @nonce = nonce
12
13
  @chain_id = chain_id
13
14
  @gas_coin = gas_coin
14
15
  @gas_price = gas_price
15
16
  end
16
17
 
17
- def sign(private_key)
18
- params = to_params
19
- params[:PrivateKey] = private_key
20
- tx_hash = Minter::TransactionFfi.SignEditCandidateTransaction(params.to_json)
21
- SignedTx.new(tx_hash)
22
- end
23
-
24
18
  def to_params
25
19
  { PubKey: pubkey,
26
20
  RewardAddress: reward_address,
27
21
  OwnerAddress: owner_address,
22
+ ControlAddress: control_address,
28
23
  Nonce: nonce,
29
24
  ChainId: chain_id,
30
25
  GasCoin: gas_coin,
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Minter
4
+ class MultiSendTx < Transaction
5
+ attr_accessor :items, :coin, :nonce, :chain_id, :gas_coin, :gas_price
6
+
7
+ def initialize(nonce:, chain_id:, gas_coin:, gas_price:)
8
+ @nonce = nonce
9
+ @chain_id = chain_id
10
+ @gas_coin = gas_coin
11
+ @gas_price = gas_price
12
+ @items = []
13
+ end
14
+
15
+ def add_item(coin_id:, value:, address_to:)
16
+ @items << { CoinID: coin_id, Value: value, AddressTo: address_to }
17
+ end
18
+
19
+ def to_params
20
+ {
21
+ Nonce: nonce,
22
+ ChainId: chain_id,
23
+ GasCoin: gas_coin,
24
+ GasPrice: gas_price,
25
+ Items: items
26
+ }
27
+ end
28
+ end
29
+ end
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Minter
4
- class RedeemCheckTx
4
+ class RedeemCheckTx < Transaction
5
5
  attr_accessor :check, :proof, :nonce, :chain_id, :gas_coin, :gas_price
6
6
 
7
7
  def initialize(check:, proof:, nonce:, chain_id:, gas_coin:, gas_price:) # rubocop:disable Metrics/ParameterLists
@@ -13,13 +13,6 @@ module Minter
13
13
  @gas_price = gas_price
14
14
  end
15
15
 
16
- def sign(private_key)
17
- params = to_params
18
- params[:PrivateKey] = private_key
19
- tx_hash = Minter::TransactionFfi.SignRedeemCheckTransaction(params.to_json)
20
- SignedTx.new(tx_hash)
21
- end
22
-
23
16
  def to_params
24
17
  { Check: check,
25
18
  Proof: proof,
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Minter
4
- class SellAllCoinTx
4
+ class SellAllCoinTx < Transaction
5
5
  attr_accessor :coin_to_sell, :coin_to_buy, :minimum_value_to_buy, :nonce, :chain_id, :gas_coin, :gas_price
6
6
 
7
7
  def initialize(coin_to_sell:, coin_to_buy:, minimum_value_to_buy:, nonce:, chain_id:, gas_coin:, gas_price:) # rubocop:disable Metrics/ParameterLists
@@ -14,13 +14,6 @@ module Minter
14
14
  @gas_price = gas_price
15
15
  end
16
16
 
17
- def sign(private_key)
18
- params = to_params
19
- params[:PrivateKey] = private_key
20
- tx_hash = Minter::TransactionFfi.SignSellAllCoinTransaction(params.to_json)
21
- SignedTx.new(tx_hash)
22
- end
23
-
24
17
  def to_params
25
18
  { CoinToSell: coin_to_sell,
26
19
  CoinToBuy: coin_to_buy,
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Minter
4
- class SellCoinTx
4
+ class SellCoinTx < Transaction
5
5
  attr_accessor :coin_to_sell, :value_to_sell, :coin_to_buy, :minimum_value_to_buy, :nonce, :chain_id, :gas_coin, :gas_price
6
6
 
7
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
@@ -15,13 +15,6 @@ module Minter
15
15
  @gas_price = gas_price
16
16
  end
17
17
 
18
- def sign(private_key)
19
- params = to_params
20
- params[:PrivateKey] = private_key
21
- tx_hash = Minter::TransactionFfi.SignSellCoinTransaction(params.to_json)
22
- SignedTx.new(tx_hash)
23
- end
24
-
25
18
  def to_params
26
19
  { CoinToSell: coin_to_sell,
27
20
  ValueToSell: value_to_sell,
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Minter
4
- class SendCoinTx
4
+ class SendCoinTx < Transaction
5
5
  attr_accessor :type, :address_to, :value, :coin, :nonce, :chain_id, :gas_coin, :gas_price
6
6
 
7
7
  def initialize(address_to:, value:, coin:, nonce:, chain_id:, gas_coin:, gas_price:) # rubocop:disable Metrics/ParameterLists
@@ -14,13 +14,6 @@ module Minter
14
14
  @gas_price = gas_price
15
15
  end
16
16
 
17
- def sign(private_key)
18
- params = to_params
19
- params[:PrivateKey] = private_key
20
- tx_hash = Minter::TransactionFfi.SignTransaction(params.to_json)
21
- SignedTx.new(tx_hash)
22
- end
23
-
24
17
  def to_params
25
18
  { AddressTo: address_to,
26
19
  Value: value,
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Minter
4
- class SetCandidateOffTx
4
+ class SetCandidateOffTx < Transaction
5
5
  attr_accessor :pubkey, :nonce, :chain_id, :gas_coin, :gas_price
6
6
 
7
7
  def initialize(pubkey:, nonce:, chain_id:, gas_coin:, gas_price:)
@@ -12,13 +12,6 @@ module Minter
12
12
  @gas_price = gas_price
13
13
  end
14
14
 
15
- def sign(private_key)
16
- params = to_params
17
- params[:PrivateKey] = private_key
18
- tx_hash = Minter::TransactionFfi.SignSetCandidateOffTransaction(params.to_json)
19
- SignedTx.new(tx_hash)
20
- end
21
-
22
15
  def to_params
23
16
  { PubKey: pubkey,
24
17
  Nonce: nonce,
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Minter
4
- class SetCandidateOnTx
4
+ class SetCandidateOnTx < Transaction
5
5
  attr_accessor :pubkey, :nonce, :chain_id, :gas_coin, :gas_price
6
6
 
7
7
  def initialize(pubkey:, nonce:, chain_id:, gas_coin:, gas_price:)
@@ -12,13 +12,6 @@ module Minter
12
12
  @gas_price = gas_price
13
13
  end
14
14
 
15
- def sign(private_key)
16
- params = to_params
17
- params[:PrivateKey] = private_key
18
- tx_hash = Minter::TransactionFfi.SignSetCandidateOnTransaction(params.to_json)
19
- SignedTx.new(tx_hash)
20
- end
21
-
22
15
  def to_params
23
16
  { PubKey: pubkey,
24
17
  Nonce: nonce,
@@ -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