ethereum.rb 1.6.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.
- checksums.yaml +7 -0
- data/.gitignore +11 -0
- data/.rspec +2 -0
- data/.ruby-gemset +1 -0
- data/.travis.yml +26 -0
- data/CODE_OF_CONDUCT.md +13 -0
- data/Gemfile +4 -0
- data/LICENSE +22 -0
- data/LICENSE.txt +21 -0
- data/README.md +183 -0
- data/Rakefile +11 -0
- data/bin/console +14 -0
- data/bin/install_parity +29 -0
- data/bin/setup +7 -0
- data/contracts/AccountingLib.sol +112 -0
- data/contracts/AuditorInterface.sol +4 -0
- data/contracts/AuditorRegistry.sol +14 -0
- data/contracts/CustodianInterface.sol +27 -0
- data/contracts/CustodianRegistry.sol +40 -0
- data/contracts/DigixConfiguration.sol +68 -0
- data/contracts/Directory.sol +67 -0
- data/contracts/DoublyLinked.sol +54 -0
- data/contracts/GenericInterface.sol +56 -0
- data/contracts/GenericRegistry.sol +15 -0
- data/contracts/Gold.sol +105 -0
- data/contracts/GoldRegistry.sol +82 -0
- data/contracts/GoldTokenLedger.sol +3 -0
- data/contracts/Interface.sol +27 -0
- data/contracts/Minter.sol +3 -0
- data/contracts/Recaster.sol +3 -0
- data/contracts/Testing.sol +59 -0
- data/contracts/VendorInterface.sol +82 -0
- data/contracts/VendorRegistry.sol +39 -0
- data/contracts/classic/Digixbot.sol +106 -0
- data/contracts/classic/DigixbotConfiguration.sol +62 -0
- data/contracts/classic/DigixbotEthereum.sol +86 -0
- data/contracts/classic/DigixbotUsers.sol +103 -0
- data/contracts/classic/Gold.sol +497 -0
- data/contracts/classic/GoldRegistry.sol +503 -0
- data/contracts/classic/GoldTokenLedger.sol +560 -0
- data/contracts/classic/GoldTokenMinter.sol +607 -0
- data/contracts/classic/ParticipantRegistry.sol +94 -0
- data/contracts/classic/QueueSample.sol +54 -0
- data/ethereum.gemspec +35 -0
- data/lib/ethereum.rb +24 -0
- data/lib/ethereum/client.rb +97 -0
- data/lib/ethereum/contract.rb +266 -0
- data/lib/ethereum/contract_event.rb +25 -0
- data/lib/ethereum/contract_initializer.rb +54 -0
- data/lib/ethereum/deployment.rb +49 -0
- data/lib/ethereum/formatter.rb +172 -0
- data/lib/ethereum/function.rb +20 -0
- data/lib/ethereum/function_input.rb +13 -0
- data/lib/ethereum/function_output.rb +14 -0
- data/lib/ethereum/http_client.rb +38 -0
- data/lib/ethereum/initializer.rb +27 -0
- data/lib/ethereum/ipc_client.rb +46 -0
- data/lib/ethereum/project_initializer.rb +28 -0
- data/lib/ethereum/railtie.rb +10 -0
- data/lib/ethereum/singleton.rb +39 -0
- data/lib/ethereum/solidity.rb +47 -0
- data/lib/ethereum/transaction.rb +36 -0
- data/lib/ethereum/version.rb +3 -0
- data/lib/tasks/ethereum_contract.rake +27 -0
- data/lib/tasks/ethereum_node.rake +51 -0
- data/lib/tasks/ethereum_test.rake +32 -0
- data/lib/tasks/ethereum_transaction.rake +24 -0
- metadata +198 -0
@@ -0,0 +1,28 @@
|
|
1
|
+
module Ethereum
|
2
|
+
|
3
|
+
class ProjectInitializer
|
4
|
+
|
5
|
+
attr_accessor :contract_names, :combined_output, :contracts, :libraries
|
6
|
+
|
7
|
+
def initialize(location, optimize = false)
|
8
|
+
ENV['ETHEREUM_SOLIDITY_BINARY'] ||= "/usr/local/bin/solc"
|
9
|
+
solidity = ENV['ETHEREUM_SOLIDITY_BINARY']
|
10
|
+
contract_dir = location
|
11
|
+
if optimize
|
12
|
+
opt_flag = "--optimize"
|
13
|
+
else
|
14
|
+
opt_flag = ""
|
15
|
+
end
|
16
|
+
compile_command = "#{solidity} #{opt_flag} --combined-json abi,bin #{contract_dir}"
|
17
|
+
raw_data = `#{compile_command}`
|
18
|
+
data = JSON.parse(raw_data)
|
19
|
+
@contract_names = data["contracts"].keys
|
20
|
+
@libraries = {}
|
21
|
+
@contracts = @contract_names.collect do |contract_name|
|
22
|
+
ContractInitializer.new(contract_name, data["contracts"][contract_name], self)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
class Ethereum::Singleton
|
2
|
+
|
3
|
+
class << self
|
4
|
+
|
5
|
+
attr_accessor :client, :ipcpath, :host, :log, :instance, :default_account
|
6
|
+
|
7
|
+
def instance
|
8
|
+
@instance ||= configure_instance(create_instance)
|
9
|
+
end
|
10
|
+
|
11
|
+
def setup(&block)
|
12
|
+
yield(self)
|
13
|
+
end
|
14
|
+
|
15
|
+
def reset
|
16
|
+
@instance = nil
|
17
|
+
@client = nil
|
18
|
+
@host = nil
|
19
|
+
@log = nil
|
20
|
+
@ipcpath = nil
|
21
|
+
@default_account = nil
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
def create_instance
|
26
|
+
return Ethereum::IpcClient.new(@ipcpath) if @client == :ipc
|
27
|
+
return Ethereum::HttpClient.new(@host) if @client == :http
|
28
|
+
Ethereum::IpcClient.new
|
29
|
+
end
|
30
|
+
|
31
|
+
def configure_instance(instance)
|
32
|
+
instance.tap do |i|
|
33
|
+
i.default_account = @default_account if @default_account.present?
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
|
39
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require 'tmpdir'
|
2
|
+
require 'open3'
|
3
|
+
|
4
|
+
module Ethereum
|
5
|
+
class CompilationError < StandardError;
|
6
|
+
def initialize(msg)
|
7
|
+
super
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
class Solidity
|
12
|
+
|
13
|
+
def initialize(bin_path = "solc")
|
14
|
+
@bin_path = bin_path
|
15
|
+
@args = "--bin --abi --userdoc --devdoc --add-std --optimize -o"
|
16
|
+
end
|
17
|
+
|
18
|
+
def compile(filename)
|
19
|
+
{}.tap do |result|
|
20
|
+
Dir.mktmpdir do |dir|
|
21
|
+
execute_solc(dir, filename)
|
22
|
+
Dir.foreach(dir) do |file|
|
23
|
+
process_file(dir, file, result)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
def process_file(dir, file, result)
|
31
|
+
extension = File.extname(file)
|
32
|
+
path = "#{dir}/#{file}"
|
33
|
+
basename = File.basename(path, extension)
|
34
|
+
unless File.directory?(path)
|
35
|
+
result[basename] ||= {}
|
36
|
+
result[basename][extension[1..-1]] = File.read(path)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def execute_solc(dir, filename)
|
41
|
+
cmd = "#{@bin_path} #{@args} '#{dir}' '#{filename}'"
|
42
|
+
stdout, stderr, status = Open3.capture3(cmd)
|
43
|
+
raise SystemCallError, "Unanable to run solc compliers" if status.exitstatus == 127
|
44
|
+
raise CompilationError, stderr unless status.exitstatus == 0
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module Ethereum
|
2
|
+
|
3
|
+
class Transaction
|
4
|
+
attr_accessor :id, :mined, :connection, :input, :input_parameters
|
5
|
+
|
6
|
+
def initialize(id, connection, data, input_parameters = [])
|
7
|
+
@mined = false
|
8
|
+
@connection = connection
|
9
|
+
@id = id
|
10
|
+
@input = data
|
11
|
+
@input_parameters = input_parameters
|
12
|
+
end
|
13
|
+
|
14
|
+
def address
|
15
|
+
@id
|
16
|
+
end
|
17
|
+
|
18
|
+
def mined?
|
19
|
+
return true if @mined
|
20
|
+
@mined = @connection.eth_get_transaction_by_hash(@id)["result"]["blockNumber"].present?
|
21
|
+
end
|
22
|
+
|
23
|
+
def wait_for_miner(timeout = 1500.seconds)
|
24
|
+
start_time = Time.now
|
25
|
+
while self.mined? == false
|
26
|
+
raise Timeout::Error if ((Time.now - start_time) > timeout)
|
27
|
+
sleep 5
|
28
|
+
return true if self.mined?
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.from_blockchain(address, connection = IpcClient.new)
|
33
|
+
Transaction.new(address, connection, nil, nil)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require File.expand_path("../../ethereum.rb", __FILE__)
|
2
|
+
|
3
|
+
namespace :ethereum do
|
4
|
+
namespace :contract do
|
5
|
+
|
6
|
+
desc "Compile a contract"
|
7
|
+
task :compile, [:path] do |t, args|
|
8
|
+
contract = Ethereum::Solidity.new.compile(args[:path])
|
9
|
+
puts "Contract abi:"
|
10
|
+
puts contract["Works"]["abi"]
|
11
|
+
puts
|
12
|
+
puts "Contract binary code:"
|
13
|
+
puts contract["Works"]["bin"]
|
14
|
+
puts
|
15
|
+
end
|
16
|
+
|
17
|
+
desc "Compile and deploy contract"
|
18
|
+
task :deploy, [:path] do |t, args|
|
19
|
+
puts "Deploing contract #{args[:path]}"
|
20
|
+
@works = Ethereum::Contract.from_file(args[:path])
|
21
|
+
@works.deploy_and_wait { puts "." }
|
22
|
+
address = @works.deployment.contract_address
|
23
|
+
puts "Contract deployed under address: #{address}"
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require 'open3'
|
2
|
+
|
3
|
+
namespace :ethereum do
|
4
|
+
namespace :node do
|
5
|
+
|
6
|
+
desc "Run testnet node "
|
7
|
+
task :test do
|
8
|
+
stdout, stdeerr, status = Open3.capture3("parity --chain ~/.parity/ropsten.json account list")
|
9
|
+
account = stdeerr.split(/[\[,\]]/)[1]
|
10
|
+
cmd = "parity --chain ~/.parity/ropsten.json --password ~/.parity/pass --unlock #{account} --author #{account}"
|
11
|
+
puts cmd
|
12
|
+
system cmd
|
13
|
+
end
|
14
|
+
|
15
|
+
desc "Run morden (production) node"
|
16
|
+
task :run do
|
17
|
+
stdout, stdeerr, status = Open3.capture3("parity account list")
|
18
|
+
account = stdeerr.split(/[\[,\]]/)[1]
|
19
|
+
system "parity --password ~/.parity/pass --unlock #{account} --author #{account} --no-jsonrpc"
|
20
|
+
end
|
21
|
+
|
22
|
+
desc "Mine ethereum testing environment for ethereum node"
|
23
|
+
task :mine do
|
24
|
+
cmd = "ethminer"
|
25
|
+
puts cmd
|
26
|
+
system cmd
|
27
|
+
end
|
28
|
+
|
29
|
+
desc "Check if node is syncing"
|
30
|
+
task :waitforsync do
|
31
|
+
formatter = Ethereum::Formatter.new
|
32
|
+
begin
|
33
|
+
while (1) do
|
34
|
+
result = Ethereum::Singleton.instance.eth_syncing["result"]
|
35
|
+
unless result
|
36
|
+
puts "Synced"
|
37
|
+
break
|
38
|
+
else
|
39
|
+
current = formatter.to_int(result["currentBlock"])
|
40
|
+
highest = formatter.to_int(result["highestBlock"])
|
41
|
+
puts "Syncing block: #{current}/#{highest}"
|
42
|
+
end
|
43
|
+
sleep 5
|
44
|
+
end
|
45
|
+
rescue
|
46
|
+
puts "Ethereum node not running?"
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
namespace :ethereum do
|
2
|
+
namespace :test do
|
3
|
+
|
4
|
+
desc "Setup testing environment for ethereum node"
|
5
|
+
task :setup do
|
6
|
+
@client = Ethereum::Singleton.instance
|
7
|
+
|
8
|
+
network_id = @client.net_version["result"].to_i
|
9
|
+
raise "Error: Run your tests on ropsten testnet. Use rake ethereum:node:test to run node. Net id: #{network_id}" if network_id != 3
|
10
|
+
|
11
|
+
accounts = @client.eth_accounts["result"]
|
12
|
+
if accounts.size > 0
|
13
|
+
puts "Account already exist, skipping this step"
|
14
|
+
else
|
15
|
+
puts "Creating account..."
|
16
|
+
`parity --chain testnet account new`
|
17
|
+
end
|
18
|
+
|
19
|
+
balance = @client.eth_get_balance(@client.default_account)["result"]
|
20
|
+
formatter = Ethereum::Formatter.new
|
21
|
+
balance = formatter.to_int(balance)
|
22
|
+
balance = formatter.from_wei(balance).to_f
|
23
|
+
|
24
|
+
if balance.to_f > 0.02
|
25
|
+
puts "Done. You're ready to run tests.\nTests will use ether from account: #{@client.default_account} with #{balance} ether"
|
26
|
+
else
|
27
|
+
puts "Not enough ether to run tests. \nYou have: #{balance} ether. \nYou need at least 0.02 ether to run tests.\nTransfer ether to account: #{@client.default_account}.\nThe easiest way to get ether is to use Ethereum Testnet Faucet."
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'pp'
|
2
|
+
require File.expand_path("../../ethereum.rb", __FILE__)
|
3
|
+
|
4
|
+
namespace :ethereum do
|
5
|
+
namespace :transaction do
|
6
|
+
|
7
|
+
desc "Get info about transaction"
|
8
|
+
task :byhash, [:id] do |t, args|
|
9
|
+
@client = Ethereum::Singleton.instance
|
10
|
+
pp @client.eth_get_transaction_by_hash(args[:id])
|
11
|
+
end
|
12
|
+
|
13
|
+
desc "Send"
|
14
|
+
task :send, [:address, :amount] do |t, args|
|
15
|
+
@client = Ethereum::Singleton.instance
|
16
|
+
@formatter = Ethereum::Formatter.new
|
17
|
+
address = @formatter.to_address(args[:address])
|
18
|
+
value = @client.int_to_hex(@formatter.to_wei(args[:amount].to_f))
|
19
|
+
puts "Transfer from: #{@client.default_account} to: #{address}, amount: #{value}wei"
|
20
|
+
pp @client.eth_send_transaction({from: @client.default_account, to: address, value: value})
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
end
|
metadata
ADDED
@@ -0,0 +1,198 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: ethereum.rb
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.6.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Marek Kirejczyk
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2017-01-18 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.13'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.13'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '12.0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '12.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: pry
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: activesupport
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 5.0.1
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 5.0.1
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: digest-sha3
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: 1.1.0
|
90
|
+
type: :runtime
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: 1.1.0
|
97
|
+
description: Ethereum.rb is Ruby Ethereum client using the JSON-RPC interface. Provides
|
98
|
+
interface for sending transactions, creating and interacting with contracts as well
|
99
|
+
as usefull toolkit to work with Ethereum node.
|
100
|
+
email:
|
101
|
+
- marek.kirejczyk@gmail.com
|
102
|
+
executables: []
|
103
|
+
extensions: []
|
104
|
+
extra_rdoc_files: []
|
105
|
+
files:
|
106
|
+
- ".gitignore"
|
107
|
+
- ".rspec"
|
108
|
+
- ".ruby-gemset"
|
109
|
+
- ".travis.yml"
|
110
|
+
- CODE_OF_CONDUCT.md
|
111
|
+
- Gemfile
|
112
|
+
- LICENSE
|
113
|
+
- LICENSE.txt
|
114
|
+
- README.md
|
115
|
+
- Rakefile
|
116
|
+
- bin/console
|
117
|
+
- bin/install_parity
|
118
|
+
- bin/setup
|
119
|
+
- contracts/AccountingLib.sol
|
120
|
+
- contracts/AuditorInterface.sol
|
121
|
+
- contracts/AuditorRegistry.sol
|
122
|
+
- contracts/CustodianInterface.sol
|
123
|
+
- contracts/CustodianRegistry.sol
|
124
|
+
- contracts/DigixConfiguration.sol
|
125
|
+
- contracts/Directory.sol
|
126
|
+
- contracts/DoublyLinked.sol
|
127
|
+
- contracts/GenericInterface.sol
|
128
|
+
- contracts/GenericRegistry.sol
|
129
|
+
- contracts/Gold.sol
|
130
|
+
- contracts/GoldRegistry.sol
|
131
|
+
- contracts/GoldTokenLedger.sol
|
132
|
+
- contracts/Interface.sol
|
133
|
+
- contracts/Minter.sol
|
134
|
+
- contracts/Recaster.sol
|
135
|
+
- contracts/Testing.sol
|
136
|
+
- contracts/VendorInterface.sol
|
137
|
+
- contracts/VendorRegistry.sol
|
138
|
+
- contracts/classic/Digixbot.sol
|
139
|
+
- contracts/classic/DigixbotConfiguration.sol
|
140
|
+
- contracts/classic/DigixbotEthereum.sol
|
141
|
+
- contracts/classic/DigixbotUsers.sol
|
142
|
+
- contracts/classic/Gold.sol
|
143
|
+
- contracts/classic/GoldRegistry.sol
|
144
|
+
- contracts/classic/GoldTokenLedger.sol
|
145
|
+
- contracts/classic/GoldTokenMinter.sol
|
146
|
+
- contracts/classic/ParticipantRegistry.sol
|
147
|
+
- contracts/classic/QueueSample.sol
|
148
|
+
- ethereum.gemspec
|
149
|
+
- lib/ethereum.rb
|
150
|
+
- lib/ethereum/client.rb
|
151
|
+
- lib/ethereum/contract.rb
|
152
|
+
- lib/ethereum/contract_event.rb
|
153
|
+
- lib/ethereum/contract_initializer.rb
|
154
|
+
- lib/ethereum/deployment.rb
|
155
|
+
- lib/ethereum/formatter.rb
|
156
|
+
- lib/ethereum/function.rb
|
157
|
+
- lib/ethereum/function_input.rb
|
158
|
+
- lib/ethereum/function_output.rb
|
159
|
+
- lib/ethereum/http_client.rb
|
160
|
+
- lib/ethereum/initializer.rb
|
161
|
+
- lib/ethereum/ipc_client.rb
|
162
|
+
- lib/ethereum/project_initializer.rb
|
163
|
+
- lib/ethereum/railtie.rb
|
164
|
+
- lib/ethereum/singleton.rb
|
165
|
+
- lib/ethereum/solidity.rb
|
166
|
+
- lib/ethereum/transaction.rb
|
167
|
+
- lib/ethereum/version.rb
|
168
|
+
- lib/tasks/ethereum_contract.rake
|
169
|
+
- lib/tasks/ethereum_node.rake
|
170
|
+
- lib/tasks/ethereum_test.rake
|
171
|
+
- lib/tasks/ethereum_transaction.rake
|
172
|
+
homepage: https://github.com/marekkirejczyk/ethereum.rb
|
173
|
+
licenses:
|
174
|
+
- MIT
|
175
|
+
metadata:
|
176
|
+
allowed_push_host: https://rubygems.org
|
177
|
+
post_install_message:
|
178
|
+
rdoc_options: []
|
179
|
+
require_paths:
|
180
|
+
- lib
|
181
|
+
- bin
|
182
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
183
|
+
requirements:
|
184
|
+
- - ">="
|
185
|
+
- !ruby/object:Gem::Version
|
186
|
+
version: '0'
|
187
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
188
|
+
requirements:
|
189
|
+
- - ">="
|
190
|
+
- !ruby/object:Gem::Version
|
191
|
+
version: '0'
|
192
|
+
requirements: []
|
193
|
+
rubyforge_project:
|
194
|
+
rubygems_version: 2.5.2
|
195
|
+
signing_key:
|
196
|
+
specification_version: 4
|
197
|
+
summary: Ruby Ethereum client using the JSON-RPC interface
|
198
|
+
test_files: []
|