Module: BSV::Wallet::Serializer::DiscoverByAttributes

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

Overview

BRC-103 wire codec for the discover_by_attributes call (call byte 22).

Args wire layout:

[varint: attribute_count] per entry: [varint-int key_bytes][varint-int value_bytes]
[optional_uint32: limit]
[optional_uint32: offset]
[optional_bool: seek_permission]

Result wire layout: see DiscoverCertificatesResult.

Keys are written in sorted order (matching Go sort.Strings) to ensure deterministic encoding across SDK implementations.

Class Method Summary collapse

Class Method Details

.deserialize_args(bytes) ⇒ Object



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/bsv/wallet/serializer/discover_by_attributes.rb', line 35

def deserialize_args(bytes)
  r = Wire::Reader.new(bytes)
  count = r.read_varint
  attributes = {}
  count.times do
    k = r.read_int_bytes.force_encoding('UTF-8')
    v = r.read_int_bytes.force_encoding('UTF-8')
    attributes[k] = v
  end
  limit           = r.read_optional_uint32
  offset          = r.read_optional_uint32
  seek_permission = r.read_optional_bool
  { attributes: attributes, limit: limit, offset: offset,
    seek_permission: seek_permission }
end

.deserialize_result(bytes) ⇒ Object



55
56
57
# File 'lib/bsv/wallet/serializer/discover_by_attributes.rb', line 55

def deserialize_result(bytes)
  DiscoverCertificatesResult.deserialize(bytes)
end

.serialize_args(args) ⇒ Object



21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/bsv/wallet/serializer/discover_by_attributes.rb', line 21

def serialize_args(args)
  w = Wire::Writer.new
  attributes = args[:attributes] || {}
  w.write_varint(attributes.length)
  attributes.keys.sort.each do |k|
    w.write_int_bytes(k.to_s.b)
    w.write_int_bytes(attributes[k].to_s.b)
  end
  w.write_optional_uint32(args[:limit])
  w.write_optional_uint32(args[:offset])
  w.write_optional_bool(args[:seek_permission])
  w.buf
end

.serialize_result(result) ⇒ Object



51
52
53
# File 'lib/bsv/wallet/serializer/discover_by_attributes.rb', line 51

def serialize_result(result)
  DiscoverCertificatesResult.serialize(result)
end