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
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 = (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] = unless .nil? result end |
.serialize(args) ⇒ String
Returns 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]) (w, args[:options]) w.buf end |