Class: Bech32::SilentPaymentAddr
- Inherits:
-
Object
- Object
- Bech32::SilentPaymentAddr
- Defined in:
- lib/bech32/silent_payment_addr.rb
Overview
BIP-352 silent payment address. github.com/bitcoin/bips/blob/master/bip-0352.mediawiki#user-content-Address_encoding
Constant Summary collapse
- HRP_MAINNET =
'sp'- HRP_TESTNET =
'tsp'
Instance Attribute Summary collapse
-
#hrp ⇒ Object
readonly
Returns the value of attribute hrp.
-
#scan_key ⇒ Object
readonly
Returns the value of attribute scan_key.
-
#spend_key ⇒ Object
readonly
Returns the value of attribute spend_key.
-
#version ⇒ Object
readonly
Returns the value of attribute version.
Class Method Summary collapse
-
.parse(addr) ⇒ Bech32::SilentPaymentAddr
Parse silent payment address.
Instance Method Summary collapse
-
#initialize(hrp, version, scan_key, spend_key) ⇒ SilentPaymentAddr
constructor
Constructor.
-
#to_s ⇒ String
Get silent payment address.
Constructor Details
#initialize(hrp, version, scan_key, spend_key) ⇒ SilentPaymentAddr
Constructor
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
#hrp ⇒ Object (readonly)
Returns the value of attribute hrp.
8 9 10 |
# File 'lib/bech32/silent_payment_addr.rb', line 8 def hrp @hrp end |
#scan_key ⇒ Object (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_key ⇒ Object (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 |
#version ⇒ Object (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.
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 |