class Bitcoin::Node::SPV

SPV class

Attributes

bloom[RW]
chain[R]
configuration[R]
logger[R]
pool[R]
running[RW]
server[RW]
wallet[RW]

Public Class Methods

new(configuration) click to toggle source

Initialize spv settings @param [Bitcoin::Node::Configuration] configuration configuration for spv.

“`ruby config = Bitcoin::Node::Configuration.new(network: :mainnet) spv = Bitcoin::Node::SPV.new(config) spv.run ““

# File lib/bitcoin/node/spv.rb, line 24
def initialize(configuration)
  @chain = Bitcoin::Store::SPVChain.new
  @configuration = configuration
  @pool = Bitcoin::Network::Pool.new(self, @chain, @configuration)
  @logger = Bitcoin::Logger.create(:debug)
  @running = false
  @wallet = Bitcoin::Wallet::Base.current_wallet
  # TODO : optimize bloom filter parameters
  setup_filter
end

Public Instance Methods

add_observer(observer) click to toggle source
# File lib/bitcoin/node/spv.rb, line 71
def add_observer(observer)
  pool.add_observer(observer)
end
broadcast(tx) click to toggle source

broadcast a transaction

# File lib/bitcoin/node/spv.rb, line 54
def broadcast(tx)
  pool.broadcast(tx)
  logger.debug "broadcast tx: #{tx.to_hex}"
end
delete_observer(observer) click to toggle source
# File lib/bitcoin/node/spv.rb, line 75
def delete_observer(observer)
  pool.delete_observer(observer)
end
filter_add(element) click to toggle source

add filter element to bloom filter.

String

element. the hex string of txid, public key, public key hash or outpoint.

# File lib/bitcoin/node/spv.rb, line 61
def filter_add(element)
  bloom.add(element)
  pool.filter_add(element)
end
filter_clear() click to toggle source

clear bloom filter.

# File lib/bitcoin/node/spv.rb, line 67
def filter_clear
  pool.filter_clear
end
run() click to toggle source

open the node.

# File lib/bitcoin/node/spv.rb, line 36
def run
  # TODO need process running check.
  return if running
  logger.debug 'SPV node start running.'
  EM.run do
    # EM.start_server('0.0.0.0', Bitcoin.chain_params.default_port, Bitcoin::Network::InboundConnector, self)
    pool.start
    @server = Bitcoin::RPC::HttpServer.run(self, configuration.port)
  end
end
shutdown() click to toggle source

close the node.

# File lib/bitcoin/node/spv.rb, line 48
def shutdown
  pool.terminate
  logger.debug 'SPV node shutdown.'
end

Private Instance Methods

setup_filter() click to toggle source
# File lib/bitcoin/node/spv.rb, line 81
def setup_filter
  @bloom = Bitcoin::BloomFilter.create_filter(512, 0.01)
  wallet.watch_targets.each{|t|bloom.add(t.htb)} if wallet
end