Module: BSV::Wallet::Serializer::ListActionsArgs
- Defined in:
- lib/bsv/wallet/serializer/list_actions.rb
Overview
BRC-103 serialiser for list_actions (call byte 4).
Wire layout (port of go-sdk/wallet/serializer/list_actions.go):
Args:
[string_slice] labels
[1 byte] label_query_mode: 0x01=any, 0x02=all, 0xFF=absent
[optional_bool] include_labels
[optional_bool] include_inputs
[optional_bool] include_input_source_locking_scripts
[optional_bool] include_input_unlocking_scripts
[optional_bool] include_outputs
[optional_bool] include_output_locking_scripts
[optional_uint32] limit
[optional_uint32] offset
[optional_bool] seek_permission
Result:
[varint] total_actions
For each action:
[32 bytes] txid (display order — reversed from wire storage)
[varint] satoshis (int64 as varint)
[1 byte] status code
[optional_bool ptr] is_outgoing (written as optional_bool pointer in Go)
[string] description
[string_slice] labels
[varint] version
[varint] lock_time
[inputs] NegativeOne | varint count + input_record…
[outputs] NegativeOne | varint count + output_record…
Input record:
[36 bytes] source_outpoint (32-byte wire txid + varint vout)
[varint] source_satoshis
[int_bytes_optional] source_locking_script
[int_bytes_optional] unlocking_script
[string] input_description
[varint] sequence_number
Output record:
[varint] output_index
[varint] satoshis
[int_bytes_optional] locking_script
[optional_bool ptr] spendable
[string] output_description
[string] basket
[string_slice] tags
[optional_string] custom_instructions
Constant Summary collapse
- LABEL_QUERY_MODE_ANY =
1- LABEL_QUERY_MODE_ALL =
2
Class Method Summary collapse
Class Method Details
.deserialize(bytes) ⇒ Hash
92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 |
# File 'lib/bsv/wallet/serializer/list_actions.rb', line 92 def deserialize(bytes) r = Wire::Reader.new(bytes) labels = r.read_string_slice mode_byte = r.read_byte label_query_mode = case mode_byte when LABEL_QUERY_MODE_ANY then :any when LABEL_QUERY_MODE_ALL then :all end result = {} result[:labels] = labels unless labels.nil? result[:label_query_mode] = label_query_mode unless label_query_mode.nil? v = r.read_optional_bool result[:include_labels] = v unless v.nil? v = r.read_optional_bool result[:include_inputs] = v unless v.nil? v = r.read_optional_bool result[:include_input_source_locking_scripts] = v unless v.nil? v = r.read_optional_bool result[:include_input_unlocking_scripts] = v unless v.nil? v = r.read_optional_bool result[:include_outputs] = v unless v.nil? v = r.read_optional_bool result[:include_output_locking_scripts] = v unless v.nil? lim = r.read_optional_uint32 result[:limit] = lim unless lim.nil? off = r.read_optional_uint32 result[:offset] = off unless off.nil? v = r.read_optional_bool result[:seek_permission] = v unless v.nil? result end |
.serialize(args) ⇒ String
Returns binary.
62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
# File 'lib/bsv/wallet/serializer/list_actions.rb', line 62 def serialize(args) w = Wire::Writer.new w.write_string_slice(args[:labels]) case args[:label_query_mode] when :any w.write_byte(LABEL_QUERY_MODE_ANY) when :all w.write_byte(LABEL_QUERY_MODE_ALL) else w.write_byte(0xFF) end w.write_optional_bool(args[:include_labels]) w.write_optional_bool(args[:include_inputs]) w.write_optional_bool(args[:include_input_source_locking_scripts]) w.write_optional_bool(args[:include_input_unlocking_scripts]) w.write_optional_bool(args[:include_outputs]) w.write_optional_bool(args[:include_output_locking_scripts]) w.write_optional_uint32(args[:limit]) w.write_optional_uint32(args[:offset]) w.write_optional_bool(args[:seek_permission]) w.buf end |