Class: Bech32::SilentPaymentAddr

Inherits:
Object
  • Object
show all
Defined in:
lib/bech32/silent_payment_addr.rb

Overview

Constant Summary collapse

HRP_MAINNET =
'sp'
HRP_TESTNET =
'tsp'

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(hrp, version, scan_key, spend_key) ⇒ SilentPaymentAddr

Constructor

Parameters:

  • hrp (String)

    HRP for silent payment address.

  • version (Integer)

    The version of sp address.

  • scan_key (String)

    The scan public key with hex format.

  • spend_key (String)

    The spend public key with hex format.

Raises:

  • (ArgumentError)


18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/bech32/silent_payment_addr.rb', line 18

def initialize(hrp, version, scan_key, spend_key)
  raise ArgumentError, "hrp must be sp or tsp." unless [HRP_MAINNET, HRP_TESTNET].include?(hrp)
  raise ArgumentError, "version must be Integer." unless version.is_a?(Integer)
  raise ArgumentError, "scan_key must be String." unless scan_key.is_a?(String)
  raise ArgumentError, "spend_key must be String." unless spend_key.is_a?(String)
  raise ArgumentError, 'scan_key must be 33 bytes.' unless [scan_key].pack('H*').bytesize == 33
  raise ArgumentError, 'spend_key must be 33 bytes.' unless [spend_key].pack('H*').bytesize == 33
  @hrp = hrp
  @version = version
  @scan_key = scan_key
  @spend_key = spend_key
end

Instance Attribute Details

#hrpObject (readonly)

Returns the value of attribute hrp.



8
9
10
# File 'lib/bech32/silent_payment_addr.rb', line 8

def hrp
  @hrp
end

#scan_keyObject (readonly)

Returns the value of attribute scan_key.



10
11
12
# File 'lib/bech32/silent_payment_addr.rb', line 10

def scan_key
  @scan_key
end

#spend_keyObject (readonly)

Returns the value of attribute spend_key.



11
12
13
# File 'lib/bech32/silent_payment_addr.rb', line 11

def spend_key
  @spend_key
end

#versionObject (readonly)

Returns the value of attribute version.



9
10
11
# File 'lib/bech32/silent_payment_addr.rb', line 9

def version
  @version
end

Class Method Details

.parse(addr) ⇒ Bech32::SilentPaymentAddr

Parse silent payment address.

Parameters:

  • addr (String)

    Silent payment address.

Returns:

Raises:

  • (ArgumentError)


35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/bech32/silent_payment_addr.rb', line 35

def self.parse(addr)
  raise ArgumentError, "addr must be String." unless addr.is_a?(String)
  hrp, data, spec = Bech32.decode(addr, addr.length)
  raise ArgumentError, "addr must be encoded with bech32m." unless spec == Bech32::Encoding::BECH32M
  raise ArgumentError, 'Invalid hrp.' if hrp.nil? || data[0].nil? || ![HRP_MAINNET, HRP_TESTNET].include?(hrp)
  version = data[0]
  keys = Bech32.convert_bits(data[1..-1], 5, 8, false).pack('C*').unpack1('H*')
  raise ArgumentError, "Invalid key size." unless keys.length == 132
  scan = keys[0...66]
  spend = keys[66..-1]
  Bech32::SilentPaymentAddr.new(hrp, version, scan, spend)
end

Instance Method Details

#to_sString

Get silent payment address.

Returns:

  • (String)


50
51
52
53
54
# File 'lib/bech32/silent_payment_addr.rb', line 50

def to_s
  keys = scan_key + spend_key
  data = [keys].pack('H*').unpack('C*')
  Bech32.encode(hrp, [version] + Bech32.convert_bits(data, 8, 5), Bech32::Encoding::BECH32M)
end