minter 0.3.0 → 0.4.0

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
  SHA256:
3
- metadata.gz: cca09f64ab8a3f6f9121c7781c5cc426115c528db338637fd0e4981f336a2626
4
- data.tar.gz: db213270516e20bea78292e5bf357a9486ae662a0f965dfc4abbe04865a23dd6
3
+ metadata.gz: e2d85833d44cf775519ae1b0df6bc8ccf534385bee66987f12faa99df0d29374
4
+ data.tar.gz: 7fc304397e7cc9079e81512ae722148c8f1d6397e23851d0098297ea5138e35b
5
5
  SHA512:
6
- metadata.gz: d8e6e0d3532e0a3557b3f12dfc7a6275f49d25cff4b2574be7b0bf335c50c8e4e2fe676434ec0d63b68364ebd8dd7271b630c0eb7e83c14f832d96867b7651c0
7
- data.tar.gz: 48bd8c44f72558d0e2784151fd1e1b6f0af04544d89d88b4dc7163877ac18c32902c53c2eb7deda527dbc4ceca1d534ad0d065a3dc090f6ede8f1b4410d61c20
6
+ metadata.gz: 35c26150780d7efc77481e8ce8647f4cbe2344ffbd84329c9e2a081fb467ff198c8466f4d315dcba062870553d76c8d94c73917036f9d31e2b8cf362fcf43ff4
7
+ data.tar.gz: a30987140a968126e241bf2dc8005d811e2ac71eda91685c49037b4250b19238549b69837af41c833faf258332bac057d5aaf75a612c06a58a960dad45e408da
data/README.md CHANGED
@@ -62,6 +62,7 @@ Or install it yourself as:
62
62
  - [Unbond](#unbond-transaction)
63
63
  - [Multisend](#multisend-transaction)
64
64
  - [EditCandidate](#edit-candidate-transaction)
65
+ - [CreateMultisigAddress](#create-multisig-address)
65
66
  - [Sign transaction](#sign-transaction)
66
67
  - [Single signature](#single-signature)
67
68
  - [Multi signature](#multi-signatures)
@@ -544,14 +545,31 @@ transaction = Minter::SendCoinTx.new(
544
545
  gas_price: 10
545
546
  )
546
547
 
547
- signed_tx = sign(private_key)
548
+ signed_tx = transaction.sign(private_key)
548
549
  signed_tx.tx_hash
549
550
  #=> "0xf88501020a8a4d4e540000000000000001abea8a4d4e540000000000000094e7812ab98ac5ac37e2ab20da3136ad91bb22d49789014d1120d7b1600000808001b845f8431ba07fde3c0e8d9ffb5fd7025099c9f3672deffab0b784787f5d45ea8f27b0ffe989a02f7cd63ac0d75e559f540d8b33464b11da4605e623d62a5b2ddce5adf70c35cb"
550
551
  ```
551
552
 
552
553
  #### Multi signatures
553
554
  ```ruby
554
- # IN PROGRESS
555
+ multisig_address = "Mxeda4bb5456f5eb8a19f57c8c6ec844d05feae879"
556
+ private_key1 = "4de029ca7b95c163f88c66e6351f2a986a48834b4681ec1e43eed5d120227103"
557
+ private_key2 = "49e48cd0f81e7aabfc840301c66f00318f50b25c79664c3f337d7ad4f919638e"
558
+ transaction = Minter::SendCoinTx.new(
559
+ address_to: "Mxe7812ab98ac5ac37e2ab20da3136ad91bb22d497",
560
+ value: 4_000_000_000_000_000_000,
561
+ coin: "MNT",
562
+ nonce: 2,
563
+ chain_id: 2,
564
+ gas_coin: "MNT",
565
+ gas_price: 10
566
+ )
567
+ signed_tx = transaction.multisign(multisig_address, private_key1, private_key2)
568
+ #=> #<Minter::SignedTx:0x00007fe340120090
569
+ # @transaction=
570
+ # #<Minter::SendCoinTx:0x00007fe3411da908 @address_to="Mxe7812ab98ac5ac37e2ab20da3136ad91bb22d497", @chain_id=2, @coin="MNT", @gas_coin="MNT", @gas_price=10, @nonce=2, @value=4000000000000000000>,
571
+ # @tx_hash=
572
+ # "0xf8e202020a8a4d4e540000000000000001aae98a4d4e540000000000000094e7812ab98ac5ac37e2ab20da3136ad91bb22d497883782dace9d900000808002b8a3f8a194eda4bb5456f5eb8a19f57c8c6ec844d05feae879f88af8431ba0287dd3956acae624abc25e6ba60018f60a80e144f5678ceb35c35613fcd363bfa01886706c7ffa0e6ccfc7c3dda186d3e8beea5214c30502ad9a24d8a29ced685af8431ba0302a560b420ed0da95f4f8425ac605a2462d35449e44557f152c4308845e1710a04cd1b834752e3a26b0fd543a20e3ef99ca233b049e064146c6a8cdf19d895552">
555
573
  ```
556
574
 
557
575
  ### Create transaction
@@ -822,7 +840,25 @@ Minter::EditCandidateTx.new(
822
840
  Transaction for creating multisignature address.
823
841
 
824
842
  ```ruby
825
- # IN PROGRESS
843
+ address1 = "Mx08d920c5d93dbf23038fe1a54bbb34f41f77677c"
844
+ address2 = "Mx9c7f68ff71b5819c41e8f87cc99bdf6359da3d75"
845
+ address3 = "Mx9c7f68ff71b5819c41e8f87cc99bdf6359da3d75"
846
+ private_key = "ae089b32e4e0976ca6888cb1023148bd1a9f1cc28c5d442e52e586754ff48d63"
847
+
848
+ transaction = Minter::CreateMultisigAddressTx.new(
849
+ threshold: 7,
850
+ nonce: 11,
851
+ chain_id: 2,
852
+ gas_coin: "MNT",
853
+ gas_price: 1
854
+ )
855
+
856
+ transaction.add_address(address: address1, weight: 1)
857
+ transaction.add_address(address: address2, weight: 3)
858
+ transaction.add_address(address: address3, weight: 5)
859
+
860
+ transaction.multisig_address
861
+ => "Mxc0edeaee8750330d01bcefcbd34198b2ef7b1167"
826
862
  ```
827
863
  #### Multisend transaction
828
864
 
@@ -850,7 +886,19 @@ transaction.add_item(
850
886
  ```
851
887
  ### Get fee of transaction
852
888
  ```ruby
853
- # IN PROGRESS
889
+ transaction = Minter::SendCoinTx.new(
890
+ address_to: "Mxe7812ab98ac5ac37e2ab20da3136ad91bb22d497",
891
+ value: 24_000_000_000_000_000_000,
892
+ coin: "MNT",
893
+ nonce: 65,
894
+ chain_id: 2,
895
+ gas_coin: "MNT",
896
+ gas_price: 10
897
+ )
898
+
899
+ transaction.fee
900
+ #=> ""
901
+
854
902
  ```
855
903
  ### Decode Transaction
856
904
 
@@ -1,9 +1,11 @@
1
- out_path = './transaction'
1
+ # frozen_string_literal: true
2
+
3
+ out_path = "./sign"
2
4
  arg_string = ""
3
5
  {
4
6
  out: out_path,
5
- targets: ['linux/amd64', 'darwin/amd64'],
6
- buildmode: 'c-shared',
7
+ targets: ["linux/amd64", "darwin/amd64"],
8
+ buildmode: "c-shared"
7
9
  }.each_pair do |name, args|
8
10
  arg_string += "-#{name}"
9
11
  arg_string += "=#{[args].flatten.join(',')}" unless args.nil?
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "ffi"
4
+ module Minter
5
+ module SignFfi
6
+ extend FFI::Library
7
+ filename = RUBY_PLATFORM.match("darwin") ? "/sign-darwin-10.6-amd64.dylib" : "/sign-linux-amd64.so"
8
+ ffi_lib File.join(File.dirname(__FILE__), filename)
9
+ attach_function :Sign, [:string], :string
10
+ attach_function :MultiSign, [:string], :string
11
+ end
12
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ out_path = "./tx-hash"
4
+ arg_string = ""
5
+ {
6
+ out: out_path,
7
+ targets: ["linux/amd64", "darwin/amd64"],
8
+ buildmode: "c-shared"
9
+ }.each_pair do |name, args|
10
+ arg_string += "-#{name}"
11
+ arg_string += "=#{[args].flatten.join(',')}" unless args.nil?
12
+ arg_string += " "
13
+ end
14
+
15
+ puts "xgo #{arg_string.strip} ./"
16
+ system("xgo #{arg_string.strip} ./")
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "ffi"
4
+ module Minter
5
+ module TxHashFfi
6
+ extend FFI::Library
7
+ filename = RUBY_PLATFORM.match("darwin") ? "/tx-hash-darwin-10.6-amd64.dylib" : "/tx-hash-linux-amd64.so"
8
+ ffi_lib File.join(File.dirname(__FILE__), filename)
9
+ attach_function :BuyCoinTx, [:string], :string
10
+ attach_function :CreateCoinTx, [:string], :string
11
+ attach_function :CreateMultisigAddressTx, [:string], :string
12
+ attach_function :GetMultisigAddress, [:string], :string
13
+ attach_function :DeclareCandidacyTx, [:string], :string
14
+ attach_function :DelegateTx, [:string], :string
15
+ attach_function :EditCandidateTx, [:string], :string
16
+ attach_function :MultiSendTx, [:string], :string
17
+ attach_function :RedeemCheckTx, [:string], :string
18
+ attach_function :SellAllCoinTx, [:string], :string
19
+ attach_function :SellCoinTx, [:string], :string
20
+ attach_function :SendCoinTx, [:string], :string
21
+ attach_function :SetCandidateOffTx, [:string], :string
22
+ attach_function :SetCandidateOnTx, [:string], :string
23
+ attach_function :UnbondTx, [:string], :string
24
+ end
25
+ end
@@ -1,9 +1,11 @@
1
- out_path = './wallet'
1
+ # frozen_string_literal: true
2
+
3
+ out_path = "./wallet"
2
4
  arg_string = ""
3
5
  {
4
6
  out: out_path,
5
- targets: ['linux/amd64', 'darwin/amd64'],
6
- buildmode: 'c-shared',
7
+ targets: ["linux/amd64", "darwin/amd64"],
8
+ buildmode: "c-shared"
7
9
  }.each_pair do |name, args|
8
10
  arg_string += "-#{name}"
9
11
  arg_string += "=#{[args].flatten.join(',')}" unless args.nil?
@@ -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
@@ -7,7 +7,8 @@ require "minter/version"
7
7
  require "minter/wallet.rb"
8
8
  require "minter/key.rb"
9
9
  require "ffi/wallet/wallet_ffi.rb"
10
- require "ffi/transaction/transaction_ffi.rb"
10
+ require "ffi/tx_hash/tx_hash_ffi.rb"
11
+ require "ffi/sign/sign_ffi.rb"
11
12
  require "minter/transactions/transaction.rb"
12
13
  Dir[File.dirname(__FILE__) + "/minter/transactions/*.rb"].each { |file| require_relative file }
13
14
 
@@ -2,7 +2,6 @@
2
2
 
3
3
  module Minter
4
4
  class BuyCoinTx < Transaction
5
- SIGN_METHOD = :SignBuyCoinTransaction
6
5
  attr_accessor :coin_to_buy, :value_to_buy, :coin_to_sell, :maximum_value_to_sell, :nonce, :chain_id, :gas_coin, :gas_price
7
6
 
8
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
@@ -2,7 +2,6 @@
2
2
 
3
3
  module Minter
4
4
  class CreateCoinTx < Transaction
5
- SIGN_METHOD = :SignCreateCoinTransaction
6
5
  attr_accessor :name, :symbol, :initial_amount, :max_supply, :initial_reserve, :reserve_ratio, :nonce, :chain_id, :gas_coin, :gas_price
7
6
 
8
7
  def initialize(name:, symbol:, initial_amount:, max_supply:, initial_reserve:, reserve_ratio:, nonce:, chain_id:, gas_coin:, gas_price:) # rubocop:disable Metrics/ParameterLists
@@ -1,8 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Minter
4
- class CreateMultisiqAddressTx < Transaction
5
- SIGN_METHOD = :SignCreateMultisiqAddressTransaction
4
+ class CreateMultisigAddressTx < Transaction
6
5
  attr_accessor :addresses, :threshold, :nonce, :chain_id, :gas_coin, :gas_price
7
6
 
8
7
  def initialize(threshold:, nonce:, chain_id:, gas_coin:, gas_price:)
@@ -29,16 +28,11 @@ module Minter
29
28
  }
30
29
  end
31
30
 
32
- def sign(private_key)
33
- params = to_params
34
- params[:PrivateKey] = private_key
31
+ def multisig_address
32
+ result = JSON.parse(Minter::TxHashFfi.GetMultisigAddress(to_params.to_json))
33
+ raise TransactionError, result["error"] unless result["success"] == "true"
35
34
 
36
- result = JSON.parse(Minter::TransactionFfi.send(self.class::SIGN_METHOD, params.to_json))
37
- if result["success"]
38
- [SignedTx.new(result["tx_hash"]), result["multisiq_address"]]
39
- else
40
- raise TransactionError, result["error"]
41
- end
35
+ result["multisig_address"]
42
36
  end
43
37
  end
44
38
  end
@@ -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,7 +2,6 @@
2
2
 
3
3
  module Minter
4
4
  class EditCandidateTx < Transaction
5
- SIGN_METHOD = :SignEditCandidateTransaction
6
5
  attr_accessor :pubkey, :reward_address, :owner_address, :nonce, :chain_id, :gas_coin, :gas_price
7
6
 
8
7
  def initialize(pubkey:, reward_address:, owner_address:, nonce:, chain_id:, gas_coin:, gas_price:) # rubocop:disable Metrics/ParameterLists
@@ -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:)
@@ -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.3.0"
4
+ VERSION = "0.4.0"
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.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alexander Nikolaev
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-05-22 00:00:00.000000000 Z
11
+ date: 2020-05-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dotenv
@@ -141,8 +141,10 @@ 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/sign_ffi.rb
146
+ - lib/ffi/tx_hash/compile.rb
147
+ - lib/ffi/tx_hash/tx_hash_ffi.rb
146
148
  - lib/ffi/wallet/compile.rb
147
149
  - lib/ffi/wallet/wallet_ffi.rb
148
150
  - lib/minter.rb
@@ -167,7 +169,7 @@ files:
167
169
  - lib/minter/key.rb
168
170
  - lib/minter/transactions/buy_coin_tx.rb
169
171
  - lib/minter/transactions/create_coin_tx.rb
170
- - lib/minter/transactions/create_multisiq_address_tx.rb
172
+ - lib/minter/transactions/create_multisig_address_tx.rb
171
173
  - lib/minter/transactions/declare_candidacy_tx.rb
172
174
  - lib/minter/transactions/delegate_tx.rb
173
175
  - lib/minter/transactions/edit_candidate_tx.rb
@@ -1,94 +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
- attach_function :SignCreateMultisiqAddressTransaction, [:string], :string
24
- end
25
- end
26
-
27
- # Examples of USAGE FFI
28
- # ===SEND MNT===
29
- # tx_params = {
30
- # Nonce: 27,
31
- # ChainId: 2,
32
- # Type: 1,
33
- # AddressTo: "Mx7633980c000139dd3bd24a3f54e06474fa941e16",
34
- # Value: 24_000_000_000_000_000_000,
35
- # Coin: "MNT",
36
- # GasCoin: "MNT",
37
- # GasPrice: 10,
38
- # PrivateKey: "290cd647206bea71ec06d8dfacce30c872aea3fb1ea333b7f475b70467250ca0"
39
- # }
40
- # tx = Minter::TransactionFfi.SignTransaction(tx_params.to_json)
41
- # Minter::Api::Client.new.send_transaction(transaction: tx)
42
-
43
- # ==CREATE COIN==
44
- # tx_params = {
45
- # Name: "DEVTWO",
46
- # Symbol: "DEVTWO",
47
- # InitialAmount: 1000000000000000000,
48
- # MaxSupply: 10000000000000000000,
49
- # InitialReserve: 10000,
50
- # ReserveRation: 10,
51
- #
52
- # Nonce: 29,
53
- # ChainId: 2,
54
- # GasCoin: "MNT",
55
- # GasPrice: 1,
56
- # PrivateKey: "290cd647206bea71ec06d8dfacce30c872aea3fb1ea333b7f475b70467250ca0"
57
- # }
58
- #
59
- # tx = Minter::TransactionFfi.SignCreateCoinTransaction(tx_params.to_json)
60
- # Minter::Api::Client.new.send_transaction(transaction: tx)
61
-
62
- # ===SELL_COIN===
63
- # tx_params = {
64
- # CoinToSell: "DEVDEV",
65
- # ValueToSell: 1000,
66
- # CoinToBuy: "MNT",
67
- # MinimumValueToBuy: 100000000,
68
- #
69
- # Nonce: 31,
70
- # ChainId: 2,
71
- # GasCoin: "MNT",
72
- # GasPrice: 1,
73
- # PrivateKey: "290cd647206bea71ec06d8dfacce30c872aea3fb1ea333b7f475b70467250ca0"
74
- # }
75
- #
76
- # tx = Minter::TransactionFfi.SignSellCoinTransaction(tx_params.to_json)
77
- # Minter::Api::Client.new.send_transaction(transaction: tx)
78
-
79
- # ===BUY_COIN===
80
- # tx_params = {
81
- # CoinToBuy: "DEVDEV",
82
- # ValueToBuy: 1000,
83
- # CoinToSell: "MNT",
84
- # MaximumValueToSell: 100000000,
85
- #
86
- # Nonce: 31,
87
- # ChainId: 2,
88
- # GasCoin: "MNT",
89
- # GasPrice: 1,
90
- # PrivateKey: "290cd647206bea71ec06d8dfacce30c872aea3fb1ea333b7f475b70467250ca0"
91
- # }
92
- #
93
- # tx = Minter::TransactionFfi.SignBuyCoinTransaction(tx_params.to_json)
94
- # Minter::Api::Client.new.send_transaction(transaction: tx)