module Ethereum::SPV

Public Class Methods

grabbing(node) click to toggle source
# File lib/ethereum/spv.rb, line 19
def grabbing(node)
  proof.grabbing node if proof
end
make_transaction_proof(block, tx) click to toggle source
# File lib/ethereum/spv.rb, line 54
def make_transaction_proof(block, tx)
  result, nodes = record do
    block.apply_transaction(tx)
  end

  nodes
    .map {|x| RLP.encode(x) }
    .uniq
    .map {|x| RLP.decode(x) }
end
mode() click to toggle source
# File lib/ethereum/spv.rb, line 43
def mode
  case proof
  when ProofConstructor
    :record
  when ProofVerifier
    :verify
  else
    nil
  end
end
proof() click to toggle source
# File lib/ethereum/spv.rb, line 15
def proof
  proofs.last
end
proofs() click to toggle source
# File lib/ethereum/spv.rb, line 11
def proofs
  @proofs ||= []
end
record() { || ... } click to toggle source
# File lib/ethereum/spv.rb, line 27
def record
  proofs.push ProofConstructor.new
  result = yield
  nodes = proof.decoded_nodes
  [result, nodes]
ensure
  proofs.pop
end
store(node) click to toggle source
# File lib/ethereum/spv.rb, line 23
def store(node)
  proof.store node if proof
end
verify(nodes) { || ... } click to toggle source
# File lib/ethereum/spv.rb, line 36
def verify(nodes)
  proofs.push ProofVerifier.new(nodes: nodes)
  yield
ensure
  proofs.pop
end
verify_transaction_proof(block, tx, nodes) click to toggle source
# File lib/ethereum/spv.rb, line 65
def verify_transaction_proof(block, tx, nodes)
  verify do
    block.apply_transaction(tx)
  end
  true
rescue
  puts $!
  false
end