Module: BSV::Wallet::Serializer::CreateActionArgs

Defined in:
lib/bsv/wallet/serializer/create_action_args.rb

Overview

BRC-103 serialiser for create_action args (call byte 1).

Wire layout (port of go-sdk/wallet/serializer/create_action_args.go):

[string]          description
[optional_bytes]  input_beef (NegativeOne = nil)
[inputs]          NegativeOne | varint_count + input_record…
[outputs]         NegativeOne | varint_count + output_record…
[optional_uint32] lock_time
[optional_uint32] version
[string_slice]    labels
[options_block]   0x00 = absent | 0x01 + fields

Input record:

[32 bytes] outpoint txid (wire order)
[varint]   outpoint vout
[int_bytes or NegativeOne + varint] unlocking_script or length placeholder
[string]   input_description
[optional_uint32] sequence_number

Output record:

[int_bytes] locking_script
[varint]    satoshis
[string]    output_description
[optional_string] basket
[optional_string] custom_instructions
[string_slice] tags

Options block (after 0x01 presence byte):

[optional_bool] sign_and_process
[optional_bool] accept_delayed_broadcast
[0x01 or 0xFF]     trust_self (1=known, 0xFF=absent)
[txid_slice]       known_txids
[optional_bool] return_txid_only
[optional_bool] no_send
[optional_bytes]   no_send_change (encoded outpoints, NegativeOne = nil)
[txid_slice]       send_with
[optional_bool] randomize_outputs

Constant Summary collapse

TRUST_SELF_KNOWN =
1

Class Method Summary collapse

Class Method Details

.deserialize(bytes) ⇒ Hash

Parameters:

  • bytes (String)

    binary

Returns:

  • (Hash)

Raises:

  • (ArgumentError)


75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
# File 'lib/bsv/wallet/serializer/create_action_args.rb', line 75

def deserialize(bytes)
  raise ArgumentError, 'empty message' if bytes.b.empty?

  r = Wire::Reader.new(bytes)

  description = r.read_string
  input_beef  = r.read_int_bytes
  input_beef  = nil if input_beef.empty?

  inputs  = deserialize_inputs(r)
  outputs = deserialize_outputs(r)

  lock_time = r.read_optional_uint32
  version   = r.read_optional_uint32
  labels    = r.read_string_slice

  options = deserialize_options(r)

  result = { description: description }
  result[:input_beef] = input_beef unless input_beef.nil?
  result[:inputs]  = inputs  unless inputs.nil?
  result[:outputs] = outputs unless outputs.nil?
  result[:lock_time] = lock_time unless lock_time.nil?
  result[:version]   = version   unless version.nil?
  result[:labels]    = labels    unless labels.nil?
  result[:options]   = options   unless options.nil?
  result
end

.serialize(args) ⇒ String

Returns binary.

Parameters:

  • args (Hash)

Returns:

  • (String)

    binary



50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/bsv/wallet/serializer/create_action_args.rb', line 50

def serialize(args)
  w = Wire::Writer.new

  w.write_string(args[:description].to_s)
  input_beef = args[:input_beef]
  if input_beef.nil? || input_beef.b.empty?
    w.write_negative_one
  else
    w.write_int_bytes(input_beef)
  end

  serialize_inputs(w, args[:inputs])
  serialize_outputs(w, args[:outputs])

  w.write_optional_uint32(args[:lock_time])
  w.write_optional_uint32(args[:version])
  w.write_string_slice(args[:labels])

  serialize_options(w, args[:options])

  w.buf
end