ethereum.rb 2.0.8 → 2.0.10
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 +4 -4
- data/lib/ethereum/contract.rb +38 -21
- data/lib/ethereum/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6b37350a4448636d876aaeb83825c01b2903b4e8
|
4
|
+
data.tar.gz: ec8e0b741ce6d4f3a7b4ed1125d5e34ebb0f522a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7cfdc7e200941bf4876eb809f7929e9cd8a110f75eec933660814027891c3e56e2c024571587720be515e8549c90bfa6fb3d52e0bfd27c277c3bfb999b76b7f1
|
7
|
+
data.tar.gz: 53b4188861d6f9f901bbcdcce2f7d9c7f22525633b42281ad4ff5ea047d2ac7e802892f8ce2a5af0f7834f20c0257a6fa75760b990fba632b1293901b5b636af
|
data/lib/ethereum/contract.rb
CHANGED
@@ -2,6 +2,7 @@ module Ethereum
|
|
2
2
|
class Contract
|
3
3
|
|
4
4
|
attr_reader :address
|
5
|
+
attr_accessor :key
|
5
6
|
attr_accessor :gas, :gas_price
|
6
7
|
attr_accessor :code, :name, :abi, :class_object, :sender, :deployment, :client
|
7
8
|
attr_accessor :events, :functions, :constructor_inputs
|
@@ -44,15 +45,32 @@ module Ethereum
|
|
44
45
|
end
|
45
46
|
end
|
46
47
|
|
47
|
-
def
|
48
|
+
def deploy_payload(params)
|
48
49
|
if @constructor_inputs.present?
|
49
|
-
raise "
|
50
|
+
raise ArgumentError, "Wrong number of arguments in a constructor" and return if params.length != @constructor_inputs.length
|
50
51
|
end
|
51
52
|
deploy_arguments = @encoder.encode_arguments(@constructor_inputs, params)
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
53
|
+
"0x" + @code + deploy_arguments
|
54
|
+
end
|
55
|
+
|
56
|
+
def deploy_args(params)
|
57
|
+
add_gas_options_args({from: sender, data: deploy_payload(params)})
|
58
|
+
end
|
59
|
+
|
60
|
+
def send_transaction(tx_args)
|
61
|
+
if key
|
62
|
+
Eth.configure { |c| c.chain_id = @client.net_version["result"].to_i }
|
63
|
+
tx = Eth::Tx.new({ from: key.address, to: main_address, value: value, data: data, nonce: 0, gas_limit: 1_000_000, gas_price: gas_price})
|
64
|
+
tx.sign key
|
65
|
+
else
|
66
|
+
@client.eth_send_transaction(tx_args)["result"]
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
def deploy(*params)
|
71
|
+
tx = send_transaction(deploy_args(params))
|
72
|
+
tx_failed = tx.nil? || tx == "0x0000000000000000000000000000000000000000000000000000000000000000"
|
73
|
+
raise IOError, "Failed to deploy, did you unlock #{sender} account? Transaction hash: #{tx}" if tx_failed
|
56
74
|
@deployment = Ethereum::Deployment.new(tx, @client)
|
57
75
|
end
|
58
76
|
|
@@ -67,22 +85,22 @@ module Ethereum
|
|
67
85
|
end
|
68
86
|
|
69
87
|
def estimate(*params)
|
70
|
-
|
71
|
-
if @constructor_inputs.present?
|
72
|
-
raise "Wrong number of arguments in a constructor" and return if params.length != @constructor_inputs.length
|
73
|
-
deploy_arguments = @encoder.encode_arguments(@constructor_inputs, params)
|
74
|
-
end
|
75
|
-
deploy_payload = @code + deploy_arguments
|
76
|
-
result = @client.eth_estimate_gas({from: @sender, data: "0x" + deploy_payload})
|
88
|
+
result = @client.eth_estimate_gas(deploy_args(params))
|
77
89
|
@decoder.decode_int(result["result"])
|
78
90
|
end
|
79
91
|
|
92
|
+
def call_payload(fun, args)
|
93
|
+
"0x" + fun.signature + @encoder.encode_arguments(fun.inputs, args)
|
94
|
+
end
|
95
|
+
|
96
|
+
def call_args(fun, args)
|
97
|
+
add_gas_options_args({to: @address, from: @sender, data: call_payload(fun, args)})
|
98
|
+
end
|
99
|
+
|
80
100
|
def call_raw(fun, *args)
|
81
|
-
|
82
|
-
raw_result = @client.eth_call({to: @address, from: @sender, data: "0x" + payload})
|
83
|
-
raw_result = raw_result["result"]
|
101
|
+
raw_result = @client.eth_call(call_args(fun, args))["result"]
|
84
102
|
output = @decoder.decode_arguments(fun.outputs, raw_result)
|
85
|
-
return {data:
|
103
|
+
return {data: call_payload(fun, args), raw: raw_result, formatted: output}
|
86
104
|
end
|
87
105
|
|
88
106
|
def call(fun, *args)
|
@@ -95,10 +113,8 @@ module Ethereum
|
|
95
113
|
end
|
96
114
|
|
97
115
|
def transact(fun, *args)
|
98
|
-
|
99
|
-
|
100
|
-
txid = @client.eth_send_transaction(add_gas_options_args(args))["result"]
|
101
|
-
return Ethereum::Transaction.new(txid, @client, payload, args)
|
116
|
+
tx = send_transaction(call_args(fun, args))
|
117
|
+
return Ethereum::Transaction.new(tx, @client, call_payload(fun, args), args)
|
102
118
|
end
|
103
119
|
|
104
120
|
def transact_and_wait(fun, *args)
|
@@ -153,6 +169,7 @@ module Ethereum
|
|
153
169
|
create_event_proxies
|
154
170
|
class_methods = Class.new do
|
155
171
|
extend Forwardable
|
172
|
+
def_delegators :parent, :deploy_payload, :deploy_args, :call_payload, :call_args
|
156
173
|
def_delegators :parent, :gas, :gas_price, :gas=, :gas_price=
|
157
174
|
def_delegators :parent, :abi, :deployment, :events
|
158
175
|
def_delegators :parent, :estimate, :deploy, :deploy_and_wait
|
data/lib/ethereum/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ethereum.rb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.10
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Marek Kirejczyk
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-04-
|
11
|
+
date: 2017-04-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|