elchapo 0.1.0 → 0.1.1
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/README.md +23 -0
- data/elchapo.gemspec +2 -0
- data/lib/elchapo/ethereum/client.rb +69 -0
- data/lib/elchapo/ethereum/connection.rb +19 -0
- data/lib/elchapo/ethereum/http_connection.rb +36 -0
- data/lib/elchapo/version.rb +1 -1
- data/lib/elchapo.rb +7 -1
- metadata +33 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3ef89a15a572c27a49e4066309407551be248f52
|
4
|
+
data.tar.gz: b0ecc19e544d7c0b78f11de540b9bc6b32be2e5c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0c00f2979a40759c7b43af5bfcbf742f7a650013a959051ee7ff63796fd49fa2835a09d6fcade15c1a694b9d6fe6dedf0877450e1a4c03837657eb02a19957f1
|
7
|
+
data.tar.gz: 73191d5eaa4a42a75583ed9aac9621e310a137108da7212f72cd12c7e3a1c3b73de995d9e8ce4628bc0b6dec0c21041a624abbe9c4802c3c2396442e752639cc
|
data/README.md
CHANGED
@@ -2,6 +2,29 @@
|
|
2
2
|
|
3
3
|
Ruby API for Ethereum Blockchain network
|
4
4
|
|
5
|
+
## IPC Connection
|
6
|
+
|
7
|
+
```ruby
|
8
|
+
require 'elchapo'
|
9
|
+
|
10
|
+
client = Ethereum::Connection.new("/root/.ethereum/rinkeby/geth.ipc")
|
11
|
+
|
12
|
+
```
|
13
|
+
|
14
|
+
After you create the connection client, you can use all these Ethereum `eth` commands & call those methods.
|
15
|
+
|
16
|
+
[https://github.com/ethereum/wiki/wiki/JSON-RPC](https://github.com/ethereum/wiki/wiki/JSON-RPC)
|
17
|
+
|
18
|
+
[https://github.com/ethereum/go-ethereum/wiki/Management-APIs](https://github.com/ethereum/go-ethereum/wiki/Management-APIs)
|
19
|
+
|
20
|
+
`client.eth_accounts`
|
21
|
+
|
22
|
+
Make sure you are using underscore instead of capitals. Eg: `getBalance` => `get_balance`
|
23
|
+
|
24
|
+
`client.get_balance("ACCOUNT NUMBER")`
|
25
|
+
|
26
|
+
This gem is inspired & forked from [ethereum.rb](https://github.com/EthWorks/ethereum.rb)
|
27
|
+
|
5
28
|
## License
|
6
29
|
|
7
30
|
The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
|
data/elchapo.gemspec
CHANGED
@@ -21,4 +21,6 @@ Gem::Specification.new do |spec|
|
|
21
21
|
spec.add_development_dependency "bundler", "~> 1.15"
|
22
22
|
spec.add_development_dependency "rake", "~> 10.0"
|
23
23
|
spec.add_development_dependency "rspec", "~> 3.0"
|
24
|
+
spec.add_dependency "activesupport", "~> 5.0"
|
25
|
+
spec.add_dependency "digest-sha3", "~> 1.1"
|
24
26
|
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
module Ethereum
|
2
|
+
class Client
|
3
|
+
|
4
|
+
DEFAULT_GAS_LIMIT = 4_000_000
|
5
|
+
|
6
|
+
DEFAULT_GAS_PRICE = 22_000_000_000
|
7
|
+
|
8
|
+
# https://github.com/ethereum/wiki/wiki/JSON-RPC
|
9
|
+
RPC_COMMANDS = %w(web3_clientVersion web3_sha3 net_version net_peerCount net_listening eth_protocolVersion eth_syncing eth_coinbase eth_mining eth_hashrate eth_gasPrice eth_accounts eth_blockNumber eth_getBalance eth_getStorageAt eth_getTransactionCount eth_getBlockTransactionCountByHash eth_getBlockTransactionCountByNumber eth_getUncleCountByBlockHash eth_getUncleCountByBlockNumber eth_getCode eth_sign eth_sendTransaction eth_sendRawTransaction eth_call eth_estimateGas eth_getBlockByHash eth_getBlockByNumber eth_getTransactionByHash eth_getTransactionByBlockHashAndIndex eth_getTransactionByBlockNumberAndIndex eth_getTransactionReceipt eth_getUncleByBlockHashAndIndex eth_getUncleByBlockNumberAndIndex eth_getCompilers eth_compileLLL eth_compileSolidity eth_compileSerpent eth_newFilter eth_newBlockFilter eth_newPendingTransactionFilter eth_uninstallFilter eth_getFilterChanges eth_getFilterLogs eth_getLogs eth_getWork eth_submitWork eth_submitHashrate db_putString db_getString db_putHex db_getHex shh_post shh_version shh_newIdentity shh_hasIdentity shh_newGroup shh_addToGroup shh_newFilter shh_uninstallFilter shh_getFilterChanges shh_getMessages)
|
10
|
+
|
11
|
+
# https://github.com/ethereum/go-ethereum/wiki/Management-APIs
|
12
|
+
RPC_MANAGEMENT_COMMANDS = %w(admin_addPeer admin_datadir admin_nodeInfo admin_peers admin_setSolc admin_startRPC admin_startWS admin_stopRPC admin_stopWS debug_backtraceAt debug_blockProfile debug_cpuProfile debug_dumpBlock debug_gcStats debug_getBlockRlp debug_goTrace debug_memStats debug_seedHash debug_setHead debug_setBlockProfileRate debug_stacks debug_startCPUProfile debug_startGoTrace debug_stopCPUProfile debug_stopGoTrace debug_traceBlock debug_traceBlockByNumber debug_traceBlockByHash debug_traceBlockFromFile debug_traceTransaction debug_verbosity debug_vmodule debug_writeBlockProfile debug_writeMemProfile miner_hashrate miner_makeDAG miner_setExtra miner_setGasPrice miner_start miner_startAutoDAG miner_stop miner_stopAutoDAG personal_importRawKey personal_listAccounts personal_lockAccount personal_newAccount personal_unlockAccount personal_sendTransaction txpool_content txpool_inspect txpool_status)
|
13
|
+
|
14
|
+
attr_accessor :command, :id, :log, :logger, :default_account, :gas_price, :gas_limit
|
15
|
+
|
16
|
+
def initialize
|
17
|
+
@id = 0
|
18
|
+
@log = log
|
19
|
+
@batch = nil
|
20
|
+
# @formatter = Ethereum::Formatter.new
|
21
|
+
@gas_price = DEFAULT_GAS_PRICE
|
22
|
+
@gas_limit = DEFAULT_GAS_LIMIT
|
23
|
+
if @log == true
|
24
|
+
@logger = Logger.new("/tmp/ethereum_ruby_http.log")
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def get_id
|
29
|
+
@id += 1
|
30
|
+
return @id
|
31
|
+
end
|
32
|
+
|
33
|
+
def reset_id
|
34
|
+
@id = 0
|
35
|
+
end
|
36
|
+
|
37
|
+
def int_to_hex(p)
|
38
|
+
p.is_a?(Integer) ? "0x#{p.to_s(16)}" : p
|
39
|
+
end
|
40
|
+
|
41
|
+
def encode_params(params)
|
42
|
+
params.map(&method(:int_to_hex))
|
43
|
+
end
|
44
|
+
|
45
|
+
def send_command(command,args)
|
46
|
+
if ["eth_getBalance", "eth_call"].include?(command)
|
47
|
+
args << "latest"
|
48
|
+
end
|
49
|
+
|
50
|
+
payload = {jsonrpc: "2.0", method: command, params: encode_params(args), id: get_id}
|
51
|
+
@logger.info("Sending #{payload.to_json}") if @log
|
52
|
+
|
53
|
+
output = JSON.parse(send_single(payload.to_json))
|
54
|
+
@logger.info("Received #{output.to_json}") if @log
|
55
|
+
reset_id
|
56
|
+
raise IOError, output["error"]["message"] if output["error"]
|
57
|
+
return output["result"]
|
58
|
+
end
|
59
|
+
|
60
|
+
(RPC_COMMANDS + RPC_MANAGEMENT_COMMANDS).each do |rpc_command|
|
61
|
+
method_name = rpc_command.underscore
|
62
|
+
define_method method_name do |*args|
|
63
|
+
send_command(rpc_command, args)
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
end
|
68
|
+
|
69
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'socket'
|
2
|
+
module Ethereum
|
3
|
+
class Connection < Client
|
4
|
+
attr_accessor :ipcpath
|
5
|
+
|
6
|
+
def initialize(ipcpath)
|
7
|
+
super
|
8
|
+
@ipcpath = ipcpath
|
9
|
+
end
|
10
|
+
|
11
|
+
def send_single(payload)
|
12
|
+
socket = UNIXSocket.new(@ipcpath)
|
13
|
+
socket.puts(payload)
|
14
|
+
read = socket.recvmsg(nil)[0]
|
15
|
+
socket.close
|
16
|
+
return read
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'net/http'
|
2
|
+
require 'json'
|
3
|
+
module Ethereum
|
4
|
+
class HttpConnection < Client
|
5
|
+
attr_accessor :host, :port, :uri, :ssl
|
6
|
+
|
7
|
+
def initialize(host, log = false)
|
8
|
+
super(log)
|
9
|
+
uri = URI.parse(host)
|
10
|
+
raise ArgumentError unless ['http', 'https'].include? uri.scheme
|
11
|
+
@host = uri.host
|
12
|
+
@port = uri.port
|
13
|
+
|
14
|
+
@ssl = uri.scheme == 'https'
|
15
|
+
if ssl
|
16
|
+
@uri = URI("https://#{@host}:#{@port}")
|
17
|
+
else
|
18
|
+
@uri = URI("http://#{@host}:#{@port}")
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def send_single(payload)
|
23
|
+
http = ::Net::HTTP.new(@host, @port)
|
24
|
+
if @ssl
|
25
|
+
http.use_ssl = true
|
26
|
+
end
|
27
|
+
header = {'Content-Type' => 'application/json'}
|
28
|
+
request = ::Net::HTTP::Post.new(uri, header)
|
29
|
+
request.body = payload
|
30
|
+
response = http.request(request)
|
31
|
+
return response.body
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
data/lib/elchapo/version.rb
CHANGED
data/lib/elchapo.rb
CHANGED
@@ -1,5 +1,11 @@
|
|
1
1
|
require "elchapo/version"
|
2
|
+
require 'active_support'
|
3
|
+
require 'active_support/core_ext'
|
4
|
+
require 'digest/sha3'
|
2
5
|
|
3
6
|
module Elchapo
|
4
|
-
|
7
|
+
|
8
|
+
require 'elchapo/ethereum/client'
|
9
|
+
require 'elchapo/ethereum/connection'
|
10
|
+
require 'elchapo/ethereum/http_connection'
|
5
11
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: elchapo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- DilumN
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-10-
|
11
|
+
date: 2017-10-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -52,6 +52,34 @@ dependencies:
|
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '3.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: activesupport
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '5.0'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '5.0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: digest-sha3
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '1.1'
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '1.1'
|
55
83
|
description: This will enable your Ruby application to connect to Ethereum Blockchain
|
56
84
|
email:
|
57
85
|
- dilumnavanjana@gmail.com
|
@@ -67,6 +95,9 @@ files:
|
|
67
95
|
- bin/setup
|
68
96
|
- elchapo.gemspec
|
69
97
|
- lib/elchapo.rb
|
98
|
+
- lib/elchapo/ethereum/client.rb
|
99
|
+
- lib/elchapo/ethereum/connection.rb
|
100
|
+
- lib/elchapo/ethereum/http_connection.rb
|
70
101
|
- lib/elchapo/version.rb
|
71
102
|
homepage: http://dilumn.github.io
|
72
103
|
licenses:
|