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

Parameters:

  • bytes (String)

    binary

Returns:

  • (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.

Parameters:

  • args (Hash)

Returns:

  • (String)

    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