bitcoinrb 0.2.0 → 0.2.1

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: 3bff3d97122521e4859ca7dc471eeda350a5156d763731384c1ed8c3e54b7117
4
- data.tar.gz: 95a8ef84f38ced9e9f07279eefac81e774a923c0d048593783c4c4c2d5dda49f
3
+ metadata.gz: 79b3878cc9efefd8c38b5cd870144bc23a80bbf7bf1c741378dd66c9e5ebdbf8
4
+ data.tar.gz: a5d9956a5a6b7bed15b73e552b84110d9636f1b069c1d97978be4e94c1e0a0f0
5
5
  SHA512:
6
- metadata.gz: 2c493349ad0cb5ac702b88a080cb5880407b5b37fc08171d450454e977874e056fcd21b5022c7aee5ffc4f40f43bfd8f63eabdec2e4ba5c6d5655a950da74cea
7
- data.tar.gz: 84d4d0e3c1b93ea90af3414223b5c83a5753d66bc174a101b4e10388d74ba0077431bedc67ab670ada33226c5a73339973afeda87fda97d1877983f318cf5e29
6
+ metadata.gz: b779fd9decef5b224144dae60e06b99f3ac0fbb17b34202af0ce31eb2bd7e0a6076b3a940dcfe2e460923017c14feb40c2d0bf891f3ebe9553b65be124559a32
7
+ data.tar.gz: 7f011d31ab1ec5364cc8f04a63b6baf74d37db05d49666588dd1329d5005f3ba01a8e8b83752989121b73c3956eda8a5808365b729f6d21dc136f6abf0c817cd
data/LICENSE.txt CHANGED
@@ -1,6 +1,6 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright (c) 2017-2018 HAW International, Inc.
3
+ Copyright (c) 2017-2018 HAW International, Inc. / chaintope, Inc.
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
@@ -141,7 +141,7 @@ module Bitcoin
141
141
  def finalize!
142
142
  if non_witness_utxo
143
143
  self.final_script_sig = Bitcoin::Script.new << Bitcoin::Opcodes::OP_0 if redeem_script.multisig?
144
- partial_sigs.values.each {|sig|final_script_sig << sig.bth}
144
+ partial_sigs.values.each {|sig|final_script_sig << sig}
145
145
  final_script_sig << redeem_script.to_payload.bth
146
146
  self.partial_sigs = {}
147
147
  self.hd_key_paths = {}
@@ -0,0 +1,72 @@
1
+ require 'rest-client'
2
+
3
+ module Bitcoin
4
+ module RPC
5
+
6
+ # Client implementation for RPC to Bitcoin Core.
7
+ #
8
+ # [Usage]
9
+ # config = {schema: 'http', host: 'localhost', port: 18332, user: 'xxx', password: 'yyy'}
10
+ # client = Bitcoin::RPC::BitcoinCoreClient.new(config)
11
+ #
12
+ # You can execute the CLI command supported by Bitcoin Core as follows:
13
+ #
14
+ # client.listunspent
15
+ # client.getblockchaininfo
16
+ #
17
+ class BitcoinCoreClient
18
+
19
+ attr_reader :config
20
+
21
+ # @param [Hash] config a configuration required to connect to Bitcoin Core.
22
+ def initialize(config)
23
+ @config = config
24
+
25
+ commands = request(:help).split("\n").inject([]) do |memo_ary, line|
26
+ if !line.empty? && !line.start_with?('==')
27
+ memo_ary << line.split(' ').first.to_sym
28
+ end
29
+ memo_ary
30
+ end
31
+ BitcoinCoreClient.class_eval do
32
+ commands.each do |command|
33
+ define_method(command) do |*params|
34
+ request(command, *params)
35
+ end
36
+ end
37
+ end
38
+ end
39
+
40
+ private
41
+
42
+ def server_url
43
+ url = "#{config[:schema]}://#{config[:user]}:#{config[:password]}@#{config[:host]}:#{config[:port]}"
44
+ if !config[:wallet].nil? && !config[:wallet].empty?
45
+ url += "/wallet/#{config[:wallet]}"
46
+ end
47
+ url
48
+ end
49
+
50
+ def request(command, *params)
51
+ data = {
52
+ :method => command,
53
+ :params => params,
54
+ :id => 'jsonrpc'
55
+ }
56
+ post(server_url, @config[:timeout], @config[:open_timeout], data.to_json, content_type: :json) do |respdata, request, result|
57
+ raise result.message if !result.kind_of?(Net::HTTPSuccess) && respdata.empty?
58
+ response = JSON.parse(respdata.gsub(/\\u([\da-fA-F]{4})/) { [$1].pack('H*').unpack('n*').pack('U*').encode('ISO-8859-1').force_encoding('UTF-8') })
59
+ raise response['error'] if response['error']
60
+ response['result']
61
+ end
62
+ end
63
+
64
+ def post(url, timeout, open_timeout, payload, headers={}, &block)
65
+ RestClient::Request.execute(method: :post, url: url, timeout: timeout,
66
+ open_timeout: open_timeout, payload: payload, headers: headers, &block)
67
+ end
68
+
69
+ end
70
+
71
+ end
72
+ end
data/lib/bitcoin/rpc.rb CHANGED
@@ -2,5 +2,6 @@ module Bitcoin
2
2
  module RPC
3
3
  autoload :HttpServer, 'bitcoin/rpc/http_server'
4
4
  autoload :RequestHandler, 'bitcoin/rpc/request_handler'
5
+ autoload :BitcoinCoreClient, 'bitcoin/rpc/bitcoin_core_client'
5
6
  end
6
7
  end
@@ -264,7 +264,7 @@ module Bitcoin
264
264
  if obj.is_a?(Integer)
265
265
  push_int(obj)
266
266
  elsif obj.is_a?(String)
267
- append_data(obj.b)
267
+ append_data(obj)
268
268
  elsif obj.is_a?(Array)
269
269
  obj.each { |o| self.<< o}
270
270
  self
@@ -295,7 +295,8 @@ module Bitcoin
295
295
  # @param [String] data append data. this data is not binary
296
296
  # @return [Script] return self
297
297
  def append_data(data)
298
- chunks << Bitcoin::Script.pack_pushdata(data.htb)
298
+ data = Encoding::ASCII_8BIT == data.encoding ? data : data.htb
299
+ chunks << Bitcoin::Script.pack_pushdata(data)
299
300
  self
300
301
  end
301
302
 
@@ -13,6 +13,14 @@ module Bitcoin
13
13
 
14
14
  DISABLE_OPCODES = [OP_CAT, OP_SUBSTR, OP_LEFT, OP_RIGHT, OP_INVERT, OP_AND, OP_OR, OP_XOR, OP_2MUL, OP_2DIV, OP_DIV, OP_MUL, OP_MOD, OP_LSHIFT, OP_RSHIFT]
15
15
 
16
+
17
+ # syntax sugar for simple evaluation for script.
18
+ # @param [Bitcoin::Script] script_sig a scriptSig.
19
+ # @param [Bitcoin::Script] script_pubkey a scriptPubkey.
20
+ def self.eval(script_sig, script_pubkey)
21
+ self.new.verify_script(script_sig, script_pubkey)
22
+ end
23
+
16
24
  # initialize runner
17
25
  def initialize(flags: SCRIPT_VERIFY_NONE, checker: TxChecker.new)
18
26
  @stack, @debug = [], []
@@ -1,3 +1,3 @@
1
1
  module Bitcoin
2
- VERSION = "0.2.0"
2
+ VERSION = "0.2.1"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bitcoinrb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - azuchi
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-07-30 00:00:00.000000000 Z
11
+ date: 2018-08-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ecdsa
@@ -371,6 +371,7 @@ files:
371
371
  - lib/bitcoin/psbt/output.rb
372
372
  - lib/bitcoin/psbt/tx.rb
373
373
  - lib/bitcoin/rpc.rb
374
+ - lib/bitcoin/rpc/bitcoin_core_client.rb
374
375
  - lib/bitcoin/rpc/http_server.rb
375
376
  - lib/bitcoin/rpc/request_handler.rb
376
377
  - lib/bitcoin/script/multisig.rb