Class: OpenAssets::Provider::BitcoinCoreProvider

Inherits:
BlockChainProviderBase show all
Defined in:
lib/openassets/provider/bitcoin_core_provider.rb

Overview

The implementation of BlockChain provider using Bitcoin Core.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(config) ⇒ BitcoinCoreProvider

Returns a new instance of BitcoinCoreProvider.



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/openassets/provider/bitcoin_core_provider.rb', line 11

def initialize(config)
  @config = config

  commands = request(:help).split("\n").inject([]) do |memo_ary, line|
    if !line.empty? && !line.start_with?('==')
      memo_ary << line.split(' ').first.to_sym
    end
    memo_ary
  end
  BitcoinCoreProvider.class_eval do
    commands.each do |command|
      define_method(command) do |*params|
        request(command, *params)
      end
    end
  end
end

Instance Attribute Details

#configObject (readonly)

Returns the value of attribute config.



9
10
11
# File 'lib/openassets/provider/bitcoin_core_provider.rb', line 9

def config
  @config
end

Instance Method Details

#get_transaction(transaction_hash, verbose = 0) ⇒ String

Get raw transaction.

Parameters:

  • transaction_hash (String)

    The transaction hash.

  • verbose (String) (defaults to: 0)

    Whether to get the serialized or decoded transaction. 0: serialized transaction (Default). 1: decode transaction.

Returns:

  • (String)

    (if verbose=0)—the serialized transaction. (if verbose=1)—the decoded transaction. (if transaction not found)—nil.



41
42
43
44
45
46
47
# File 'lib/openassets/provider/bitcoin_core_provider.rb', line 41

def get_transaction(transaction_hash, verbose = 0)
  begin
    getrawtransaction(transaction_hash, verbose)
  rescue OpenAssets::Provider::ApiError => e
    nil
  end
end

#import_address(address) ⇒ Object

Adds an address or pubkey script to the wallet without the associated private key, allowing you to watch for transactions affecting that address or pubkey script without being able to spend any of its outputs.

Parameters:

  • address (String)

    Either a P2PKH or P2SH address encoded in base58check, or a pubkey script encoded as hex.



67
68
69
# File 'lib/openassets/provider/bitcoin_core_provider.rb', line 67

def import_address(address)
  importaddress(address)
end

#list_unspent(addresses = [], min = 1, max = 9999999) ⇒ Object

Get an array of unspent transaction outputs belonging to this wallet.

Parameters:

  • addresses (Array) (defaults to: [])

    If present, only outputs which pay an address in this array will be returned.

  • min (Integer) (defaults to: 1)

    The minimum number of confirmations the transaction containing an output must have in order to be returned. Default is 1.

  • max (Integer) (defaults to: 9999999)

    The maximum number of confirmations the transaction containing an output may have in order to be returned. Default is 9999999.



33
34
35
# File 'lib/openassets/provider/bitcoin_core_provider.rb', line 33

def list_unspent(addresses = [], min = 1 , max = 9999999)
  listunspent(min, max, addresses)
end

#send_transaction(tx) ⇒ String

Validates a transaction and broadcasts it to the peer-to-peer network.

Parameters:

  • tx (String)

    The serialized format transaction.

Returns:

  • (String)

    The TXID or error message.



61
62
63
# File 'lib/openassets/provider/bitcoin_core_provider.rb', line 61

def send_transaction(tx)
  sendrawtransaction(tx)
end

#sign_transaction(tx) ⇒ Bitcoin::Protocol::Tx

Signs a transaction in the serialized transaction format using private keys.

Parameters:

  • tx (String)

    The serialized format transaction.

Returns:

  • (Bitcoin::Protocol::Tx)

    The signed transaction.

Raises:



52
53
54
55
56
# File 'lib/openassets/provider/bitcoin_core_provider.rb', line 52

def sign_transaction(tx)
  signed_tx = signrawtransaction(tx)
  raise OpenAssets::Error, 'Could not sign the transaction.' unless signed_tx['complete']
  Bitcoin::Protocol::Tx.new(signed_tx['hex'].htb)
end