iost_sdk 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (57) hide show
  1. checksums.yaml +7 -0
  2. data/lib/iost_sdk/crypto.rb +144 -0
  3. data/lib/iost_sdk/errors.rb +10 -0
  4. data/lib/iost_sdk/http/client.rb +58 -0
  5. data/lib/iost_sdk/http/get_account.rb +17 -0
  6. data/lib/iost_sdk/http/get_block_by_hash.rb +17 -0
  7. data/lib/iost_sdk/http/get_block_by_number.rb +17 -0
  8. data/lib/iost_sdk/http/get_chain_info.rb +17 -0
  9. data/lib/iost_sdk/http/get_contract.rb +17 -0
  10. data/lib/iost_sdk/http/get_contract_storage.rb +25 -0
  11. data/lib/iost_sdk/http/get_contract_storage_fields.rb +25 -0
  12. data/lib/iost_sdk/http/get_gas_ratio.rb +17 -0
  13. data/lib/iost_sdk/http/get_node_info.rb +17 -0
  14. data/lib/iost_sdk/http/get_ram_info.rb +17 -0
  15. data/lib/iost_sdk/http/get_token_balance.rb +17 -0
  16. data/lib/iost_sdk/http/get_tx_by_hash.rb +17 -0
  17. data/lib/iost_sdk/http/get_tx_receipt_by_tx_hash.rb +17 -0
  18. data/lib/iost_sdk/http/http_request_error.rb +11 -0
  19. data/lib/iost_sdk/http/send_tx.rb +26 -0
  20. data/lib/iost_sdk/models/abi.rb +20 -0
  21. data/lib/iost_sdk/models/account.rb +32 -0
  22. data/lib/iost_sdk/models/account_ram_info.rb +19 -0
  23. data/lib/iost_sdk/models/action.rb +24 -0
  24. data/lib/iost_sdk/models/amount_limit.rb +22 -0
  25. data/lib/iost_sdk/models/block.rb +30 -0
  26. data/lib/iost_sdk/models/block_info.rb +19 -0
  27. data/lib/iost_sdk/models/chain_info.rb +25 -0
  28. data/lib/iost_sdk/models/contract.rb +22 -0
  29. data/lib/iost_sdk/models/frozen_balance.rb +18 -0
  30. data/lib/iost_sdk/models/gas_info.rb +23 -0
  31. data/lib/iost_sdk/models/gas_ratio.rb +18 -0
  32. data/lib/iost_sdk/models/info.rb +19 -0
  33. data/lib/iost_sdk/models/network_info.rb +20 -0
  34. data/lib/iost_sdk/models/node_info.rb +21 -0
  35. data/lib/iost_sdk/models/peer_info.rb +18 -0
  36. data/lib/iost_sdk/models/permission.rb +20 -0
  37. data/lib/iost_sdk/models/permission_group.rb +19 -0
  38. data/lib/iost_sdk/models/permission_item.rb +20 -0
  39. data/lib/iost_sdk/models/pledge_info.rb +18 -0
  40. data/lib/iost_sdk/models/query/contract_storage.rb +24 -0
  41. data/lib/iost_sdk/models/query/contract_storage_fields.rb +23 -0
  42. data/lib/iost_sdk/models/query/signed_transaction.rb +114 -0
  43. data/lib/iost_sdk/models/query/transaction.rb +75 -0
  44. data/lib/iost_sdk/models/ram_info.rb +21 -0
  45. data/lib/iost_sdk/models/receipt.rb +18 -0
  46. data/lib/iost_sdk/models/signature.rb +42 -0
  47. data/lib/iost_sdk/models/token_balance.rb +19 -0
  48. data/lib/iost_sdk/models/transaction.rb +32 -0
  49. data/lib/iost_sdk/models/transaction_info.rb +19 -0
  50. data/lib/iost_sdk/models/tx_receipt.rb +24 -0
  51. data/lib/iost_sdk/models/util/serializer.rb +52 -0
  52. data/lib/iost_sdk/models/vote_info.rb +19 -0
  53. data/lib/iost_sdk/models.rb +276 -0
  54. data/lib/iost_sdk/string.rb +11 -0
  55. data/lib/iost_sdk/version.rb +3 -0
  56. data/lib/iost_sdk.rb +141 -0
  57. metadata +255 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: d0ba04a338a8f5867fc9f2e67972aef668c6cfd82f21ff03f3ebc3cc2366b1f1
4
+ data.tar.gz: '069a286d08b085e971a37b608875be1e11fb09e123759bc6bf0e122ed21ac3fb'
5
+ SHA512:
6
+ metadata.gz: 9c2b65bc592070cb2b943b2aaf6452b42e3b0d91176330fd108604d823af0f61d051f52d03ca2e92cb0b5b1044515dab0ea0c9513289667aca9e43055b3320d5
7
+ data.tar.gz: 0cdaa59f203f23b3694b9a8cfebce19da9740f6a52ed3543da58fa886a7c26d47db4513157e880628c79f245a3451a961e7789498b8bbcf2d8e1bca1ff7f5c99
@@ -0,0 +1,144 @@
1
+ # frozen_string_literal: true
2
+
3
+ module IOSTSdk
4
+ module Crypto
5
+ require 'btcruby'
6
+ require 'ed25519'
7
+ require 'base58'
8
+ require 'sha3'
9
+
10
+ KEY_ALGOS = {
11
+ Secp256k1: 'secp256k1',
12
+ Ed25519: 'ED25519'
13
+ }.freeze
14
+
15
+ def self.key_algos
16
+ KEY_ALGOS
17
+ end
18
+
19
+ # Create an instance of KeyPair by generating a brand new pair of public-private keys
20
+ #
21
+ # @param algo [String] the algorithm should be used to generate the new key pair
22
+ # @return an instance of +KeyPair+
23
+ def self.new_keypair(algo:)
24
+ raise ArgumentError.new("Invalid keypair algo: #{algo}") unless Set.new(KEY_ALGOS.values).include?(algo)
25
+
26
+ public_key, private_key = if algo == KEY_ALGOS[:Secp256k1]
27
+ p_key = BTC::Key.random
28
+ [p_key.public_key, p_key.private_key]
29
+ elsif algo == KEY_ALGOS[:Ed25519]
30
+ private_key = Ed25519::SigningKey.generate
31
+ public_key = private_key.verify_key
32
+
33
+ [public_key, private_key]
34
+ end
35
+ KeyPair.new(algo: algo, public_key: public_key, private_key: private_key)
36
+ end
37
+
38
+ # Create an instance of KeyPair from a +private_key_hex+ in a given +algo+
39
+ #
40
+ # @param algo [String] the algorithm used to generate the key pair
41
+ # @param encoded_private_key [String] the Base58 encoded string of an existing private key
42
+ # @return an instance of +KeyPair+
43
+ def self.keypair_from_private_key(algo:, encoded_private_key:)
44
+ raise ArgumentError.new("Invalid algo: #{algo}") unless Set.new(KEY_ALGOS.values).include?(algo)
45
+
46
+ public_key, private_key = if algo == KEY_ALGOS[:Secp256k1]
47
+ p_key = BTC::Key.new(
48
+ private_key: Base58.base58_to_binary(encoded_private_key, :bitcoin)
49
+ )
50
+ [p_key.public_key, p_key.private_key]
51
+ elsif algo == KEY_ALGOS[:Ed25519]
52
+ private_key = Ed25519::SigningKey.new(
53
+ Base58.base58_to_binary(encoded_private_key, :bitcoin)
54
+ )
55
+ public_key = private_key.verify_key
56
+
57
+ [public_key, private_key]
58
+ end
59
+
60
+ KeyPair.new(algo: algo, public_key: public_key, private_key: private_key)
61
+ end
62
+
63
+ # Create an instance of KeyPair from an +Ed25519+ keypair string
64
+ #
65
+ # @param encoded_kaypair [String] a Base58 encoded Ed25519 keypair string
66
+ # @return an instance of KeyPair
67
+ def self.from_keypair(encoded_keypair:)
68
+ private_key = Ed25519::SigningKey.from_keypair(
69
+ Base58.base58_to_binary(encoded_keypair, :bitcoin)
70
+ )
71
+
72
+ KeyPair.new(
73
+ algo: IOSTSdk::Crypto::KEY_ALGOS[:Ed25519],
74
+ public_key: private_key.verify_key,
75
+ private_key: private_key
76
+ )
77
+ end
78
+
79
+ class KeyPair
80
+ attr_reader :algo
81
+
82
+ # Create an instance of KeyPair
83
+ #
84
+ # @param algo [String] the algorithm used to generate the key pair
85
+ # @param public_key [Ed25519::VerifyKey|OpenSSL::PKey::EC::Point] an instance of the public key
86
+ # @param private_key [Ed25519::SigningKey|OpenSSL::BN] an instance of the private key
87
+ # @return an instance of KeyPair
88
+ def initialize(algo:, public_key:, private_key:)
89
+ @algo = algo
90
+ @public_key = public_key
91
+ @private_key = private_key
92
+ end
93
+
94
+ def value
95
+ Base58.binary_to_base58(@private_key.keypair, :bitcoin) if
96
+ @algo == IOSTSdk::Crypto.key_algos[:Ed25519]
97
+ end
98
+
99
+ def public_key
100
+ Base58.binary_to_base58(public_key_raw, :bitcoin)
101
+ end
102
+
103
+ def public_key_raw
104
+ if @algo == IOSTSdk::Crypto.key_algos[:Secp256k1]
105
+ # @public_key is in bytes already
106
+ @public_key
107
+ elsif @algo == IOSTSdk::Crypto.key_algos[:Ed25519]
108
+ @public_key.to_bytes
109
+ end
110
+ end
111
+
112
+ def private_key
113
+ Base58.binary_to_base58(private_key_raw, :bitcoin)
114
+ end
115
+
116
+ def private_key_raw
117
+ if @algo == IOSTSdk::Crypto.key_algos[:Secp256k1]
118
+ # @private_key is in bytes already
119
+ @private_key
120
+ elsif @algo == IOSTSdk::Crypto.key_algos[:Ed25519]
121
+ @private_key.to_bytes
122
+ end
123
+ end
124
+
125
+ def id
126
+ public_key
127
+ end
128
+
129
+ def sign(message:)
130
+ if @algo == IOSTSdk::Crypto.key_algos[:Secp256k1]
131
+ p_key = BTC::Key.new(private_key: @private_key)
132
+ der_signature = p_key.ecdsa_signature(message)
133
+ decoded_der = OpenSSL::ASN1.decode(der_signature)
134
+ decoded_der.value
135
+ .map { |v| v.value.to_s(2) }
136
+ .flatten
137
+ .join
138
+ elsif @algo == IOSTSdk::Crypto.key_algos[:Ed25519]
139
+ @private_key.sign(message)
140
+ end
141
+ end
142
+ end
143
+ end
144
+ end
@@ -0,0 +1,10 @@
1
+ module IOSTSdk
2
+ module Errors
3
+ class InvalidModelDataError < StandardError
4
+ def initialize(class_name, expected, actual)
5
+ @message = "Model data for #{class_name} is invalid. Expecting attribute names: #{expected}, actual: #{actual}"
6
+ super(@message)
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,58 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'json'
4
+ require 'httparty'
5
+ require 'iost_sdk/models/query/signed_transaction'
6
+ require 'iost_sdk/http/http_request_error'
7
+ require 'iost_sdk/string'
8
+
9
+ module IOSTSdk
10
+ module Http
11
+ class Client
12
+ # key: method name
13
+ # value: an array of args
14
+ METHODS = {
15
+ get_node_info: [],
16
+ get_chain_info: [],
17
+ get_gas_ratio: [],
18
+ get_ram_info: [],
19
+ get_tx_by_hash: [:hash_value],
20
+ get_tx_receipt_by_tx_hash: [:hash_value],
21
+ get_block_by_hash: [:hash_value, :complete],
22
+ get_block_by_number: [:number, :complete],
23
+ get_account: [:name, :by_longest_chain],
24
+ get_token_balance: [:account_name, :token_name, :by_longest_chain],
25
+ get_contract: [:id, :by_longest_chain],
26
+ get_contract_storage: [:query],
27
+ get_contract_storage_fields: [:query],
28
+ send_tx: [:transaction, :account_name, :key_pair]
29
+ # TODO: exec_tx
30
+ # TODO: subscribe
31
+ }
32
+
33
+ def initialize(base_url:)
34
+ @base_url = base_url
35
+
36
+ METHODS.each do |method_name, method_args|
37
+ # require the file
38
+ require "iost_sdk/http/#{method_name}"
39
+ # define the method
40
+ self.class.send(:define_method, method_name) do |**args|
41
+ # extract match args for the call
42
+ raise ArgumentError.new('Invalid method arguments.') unless
43
+ Set.new(method_args).subset?(Set.new(args.keys))
44
+
45
+ valid_args = method_args.reduce({}) do |memo, k|
46
+ memo[k] = args[k]
47
+ memo
48
+ end
49
+ # init and invoke
50
+ class_name = IOSTSdk::String.camelize(method_name)
51
+ clazz = IOSTSdk::String.classify("IOSTSdk::Http::#{class_name}")
52
+ clazz.new.invoke(valid_args.merge(base_url: @base_url))
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module IOSTSdk
4
+ module Http
5
+ class GetAccount
6
+ require 'iost_sdk/models/account'
7
+
8
+ def invoke(base_url:, name:, by_longest_chain:)
9
+ resp = HTTParty.get("#{base_url}/getAccount/#{name}/#{by_longest_chain}")
10
+ raise HttpRequestError.new(status_code: resp.code, body: resp.body) unless
11
+ resp.code == 200
12
+
13
+ IOSTSdk::Models::Account.new.populate(model_data: JSON.parse(resp.body))
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module IOSTSdk
4
+ module Http
5
+ class GetBlockByHash
6
+ require 'iost_sdk/models/block_info'
7
+
8
+ def invoke(base_url:, hash_value:, complete:)
9
+ resp = HTTParty.get("#{base_url}/getBlockByHash/#{hash_value}/#{complete}")
10
+ raise HttpRequestError.new(status_code: resp.code, body: resp.body) unless
11
+ resp.code == 200
12
+
13
+ IOSTSdk::Models::BlockInfo.new.populate(model_data: JSON.parse(resp.body))
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module IOSTSdk
4
+ module Http
5
+ class GetBlockByNumber
6
+ require 'iost_sdk/models/block_info'
7
+
8
+ def invoke(base_url:, number:, complete:)
9
+ resp = HTTParty.get("#{base_url}/getBlockByNumber/#{number}/#{complete}")
10
+ raise HttpRequestError.new(status_code: resp.code, body: resp.body) unless
11
+ resp.code == 200
12
+
13
+ IOSTSdk::Models::BlockInfo.new.populate(model_data: JSON.parse(resp.body))
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module IOSTSdk
4
+ module Http
5
+ class GetChainInfo
6
+ require 'iost_sdk/models/chain_info'
7
+
8
+ def invoke(base_url:)
9
+ resp = HTTParty.get("#{base_url}/getChainInfo")
10
+ raise HttpRequestError.new(status_code: resp.code, body: resp.body) unless
11
+ resp.code == 200
12
+
13
+ IOSTSdk::Models::ChainInfo.new.populate(model_data: JSON.parse(resp.body))
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module IOSTSdk
4
+ module Http
5
+ class GetContract
6
+ require 'iost_sdk/models/contract'
7
+
8
+ def invoke(base_url:, id:, by_longest_chain:)
9
+ resp = HTTParty.get("#{base_url}/getContract/#{id}/#{by_longest_chain}")
10
+ raise HttpRequestError.new(status_code: resp.code, body: resp.body) unless
11
+ resp.code == 200
12
+
13
+ IOSTSdk::Models::Contract.new.populate(model_data: JSON.parse(resp.body))
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'json'
4
+ require 'iost_sdk/models/query/contract_storage'
5
+
6
+ module IOSTSdk
7
+ module Http
8
+ class GetContractStorage
9
+ def invoke(base_url:, query:)
10
+ raise ArgumentError.new('query must be an instance of IOSTSdk::Models::Query::ContractStorage') unless
11
+ query.is_a?(IOSTSdk::Models::Query::ContractStorage)
12
+
13
+ resp = HTTParty.post(
14
+ "#{base_url}/getContractStorage",
15
+ body: JSON.generate(query.raw_data),
16
+ headers: { 'Content-Type' => 'application/json' }
17
+ )
18
+ raise HttpRequestError.new(status_code: resp.code, body: resp.body) unless
19
+ resp.code == 200
20
+
21
+ { data: JSON.parse(resp.body)['data'] }
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'json'
4
+ require 'iost_sdk/models/query/contract_storage_fields'
5
+
6
+ module IOSTSdk
7
+ module Http
8
+ class GetContractStorageFields
9
+ def invoke(base_url:, query:)
10
+ raise ArgumentError.new('query must be an instance of IOSTSdk::Models::Query::ContractStorageFields') unless
11
+ query.is_a?(IOSTSdk::Models::Query::ContractStorageFields)
12
+
13
+ resp = HTTParty.post(
14
+ "#{base_url}/getContractStorageFields",
15
+ body: JSON.generate(query.raw_data),
16
+ headers: { 'Content-Type' => 'application/json' }
17
+ )
18
+ raise HttpRequestError.new(status_code: resp.code, body: resp.body) unless
19
+ resp.code == 200
20
+
21
+ { fields: JSON.parse(resp.body)['fields'] }
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module IOSTSdk
4
+ module Http
5
+ class GetGasRatio
6
+ require 'iost_sdk/models/gas_ratio'
7
+
8
+ def invoke(base_url:)
9
+ resp = HTTParty.get("#{base_url}/getGasRatio")
10
+ raise HttpRequestError.new(status_code: resp.code, body: resp.body) unless
11
+ resp.code == 200
12
+
13
+ IOSTSdk::Models::GasRatio.new.populate(model_data: JSON.parse(resp.body))
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module IOSTSdk
4
+ module Http
5
+ class GetNodeInfo
6
+ require 'iost_sdk/models/node_info'
7
+
8
+ def invoke(base_url:)
9
+ resp = HTTParty.get("#{base_url}/getNodeInfo")
10
+ raise HttpRequestError.new(status_code: resp.code, body: resp.body) unless
11
+ resp.code == 200
12
+
13
+ IOSTSdk::Models::NodeInfo.new.populate(model_data: JSON.parse(resp.body))
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module IOSTSdk
4
+ module Http
5
+ class GetRamInfo
6
+ require 'iost_sdk/models/ram_info'
7
+
8
+ def invoke(base_url:)
9
+ resp = HTTParty.get("#{base_url}/getRAMInfo")
10
+ raise HttpRequestError.new(status_code: resp.code, body: resp.body) unless
11
+ resp.code == 200
12
+
13
+ IOSTSdk::Models::RAMInfo.new.populate(model_data: JSON.parse(resp.body))
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module IOSTSdk
4
+ module Http
5
+ class GetTokenBalance
6
+ require 'iost_sdk/models/token_balance'
7
+
8
+ def invoke(base_url:, account_name:, token_name:, by_longest_chain:)
9
+ resp = HTTParty.get("#{base_url}/getTokenBalance/#{account_name}/#{token_name}/#{by_longest_chain}")
10
+ raise HttpRequestError.new(status_code: resp.code, body: resp.body) unless
11
+ resp.code == 200
12
+
13
+ IOSTSdk::Models::TokenBalance.new.populate(model_data: JSON.parse(resp.body))
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module IOSTSdk
4
+ module Http
5
+ class GetTxByHash
6
+ require 'iost_sdk/models/transaction_info'
7
+
8
+ def invoke(base_url:, hash_value:)
9
+ resp = HTTParty.get("#{base_url}/getTxByHash/#{hash_value}")
10
+ raise HttpRequestError.new(status_code: resp.code, body: resp.body) unless
11
+ resp.code == 200
12
+
13
+ IOSTSdk::Models::TransactionInfo.new.populate(model_data: JSON.parse(resp.body))
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module IOSTSdk
4
+ module Http
5
+ class GetTxReceiptByTxHash
6
+ require 'iost_sdk/models/tx_receipt'
7
+
8
+ def invoke(base_url:, hash_value:)
9
+ resp = HTTParty.get("#{base_url}/getTxReceiptByTxHash/#{hash_value}")
10
+ raise HttpRequestError.new(status_code: resp.code, body: resp.body) unless
11
+ resp.code == 200
12
+
13
+ IOSTSdk::Models::TxReceipt.new.populate(model_data: JSON.parse(resp.body))
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module IOSTSdk
4
+ module Http
5
+ class HttpRequestError < StandardError
6
+ def initialize(status_code:, body:)
7
+ super("HTTP request error. Status code #{status_code}. Response body: #{body}")
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'json'
4
+ require 'iost_sdk/models/query/signed_transaction'
5
+
6
+ module IOSTSdk
7
+ module Http
8
+ class SendTx
9
+ def invoke(base_url:, transaction:, account_name:, key_pair:)
10
+ # sign the transaction first
11
+ signed_txn = IOSTSdk::Models::Query::SignedTransaction.from_transaction(transaction: transaction)
12
+ final_txn = signed_txn.sign(account_name: account_name, key_pair: key_pair)
13
+
14
+ resp = HTTParty.post(
15
+ "#{base_url}/sendTx",
16
+ body: JSON.generate(final_txn.raw_data),
17
+ headers: { 'Content-Type' => 'application/json' }
18
+ )
19
+ raise HttpRequestError.new(status_code: resp.code, body: resp.body) unless
20
+ resp.code == 200
21
+
22
+ JSON.parse(resp.body)
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'iost_sdk/models'
4
+ require 'iost_sdk/models/amount_limit'
5
+
6
+ module IOSTSdk
7
+ module Models
8
+ class ABI
9
+ include Models
10
+
11
+ def self.attr_names
12
+ [
13
+ 'name',
14
+ 'args',
15
+ 'amount_limit'
16
+ ]
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'iost_sdk/models'
4
+
5
+ module IOSTSdk
6
+ module Models
7
+ class Account
8
+ include Models
9
+
10
+ require 'iost_sdk/models/permission'
11
+ require 'iost_sdk/models/permission_group'
12
+ require 'iost_sdk/models/permission_item'
13
+ require 'iost_sdk/models/gas_info'
14
+ require 'iost_sdk/models/account_ram_info'
15
+ require 'iost_sdk/models/frozen_balance'
16
+ require 'iost_sdk/models/vote_info'
17
+
18
+ def self.attr_names
19
+ [
20
+ 'name',
21
+ 'balance',
22
+ 'gas_info',
23
+ 'ram_info',
24
+ 'permissions',
25
+ 'groups',
26
+ 'frozen_balances',
27
+ 'vote_infos'
28
+ ]
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'iost_sdk/models'
4
+
5
+ module IOSTSdk
6
+ module Models
7
+ class AccountRAMInfo
8
+ include Models
9
+
10
+ def self.attr_names
11
+ [
12
+ 'available',
13
+ 'used',
14
+ 'total'
15
+ ]
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'json'
4
+ require 'iost_sdk/models'
5
+
6
+ module IOSTSdk
7
+ module Models
8
+ class Action
9
+ include Models
10
+
11
+ def self.attr_names
12
+ [
13
+ 'contract',
14
+ 'action_name',
15
+ 'data'
16
+ ]
17
+ end
18
+
19
+ def raw_data_bytes
20
+ [contract, action_name, data.to_s]
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'iost_sdk/models'
4
+
5
+ module IOSTSdk
6
+ module Models
7
+ class AmountLimit
8
+ include Models
9
+
10
+ def self.attr_names
11
+ [
12
+ 'token',
13
+ 'value'
14
+ ]
15
+ end
16
+
17
+ def raw_data_bytes
18
+ [token, value.to_s]
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'iost_sdk/models'
4
+ require 'iost_sdk/models/transaction'
5
+ require 'iost_sdk/models/info'
6
+
7
+ module IOSTSdk
8
+ module Models
9
+ class Block
10
+ include Models
11
+
12
+ def self.attr_names
13
+ [
14
+ 'hash',
15
+ 'version',
16
+ 'parent_hash',
17
+ 'tx_merkle_hash',
18
+ 'tx_receipt_merkle_hash',
19
+ 'number',
20
+ 'witness',
21
+ 'time',
22
+ 'gas_usage',
23
+ 'tx_count',
24
+ 'info',
25
+ 'transactions'
26
+ ]
27
+ end
28
+ end
29
+ end
30
+ end