Class: AddressCodec::Codec
- Inherits:
-
Object
- Object
- AddressCodec::Codec
- Defined in:
- lib/address-codec/codec.rb
Direct Known Subclasses
Instance Method Summary collapse
- #decode(base58string, opts) ⇒ Object
- #decode_checked(base58string) ⇒ Object
- #encode(bytes, opts) ⇒ Object
- #encode_checked(bytes) ⇒ Object
-
#initialize ⇒ Codec
constructor
A new instance of Codec.
Constructor Details
#initialize ⇒ Codec
Returns a new instance of Codec.
9 10 11 |
# File 'lib/address-codec/codec.rb', line 9 def initialize @codec = Core::Base58XRP.new end |
Instance Method Details
#decode(base58string, opts) ⇒ Object
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/address-codec/codec.rb', line 18 def decode(base58string, opts) versions = opts[:versions] types = opts[:version_types] without_sum = decode_checked(base58string) if versions.length > 1 && !opts[:expected_length] raise 'expected_length is required because there are >= 2 possible versions' end version_length_guess = versions[0].is_a?(Numeric) ? 1 : versions[0].length payload_length = opts[:expected_length] || without_sum.length - version_length_guess version_bytes = without_sum[0...-payload_length] payload = without_sum[-payload_length..-1] versions.each_with_index do |version, i| version = Array(version) if version_bytes == version return { version: version, bytes: payload, type: types ? types[i] : nil } end end raise 'version_invalid: version bytes do not match any of the provided version(s)' end |
#decode_checked(base58string) ⇒ Object
52 53 54 55 56 57 58 59 60 61 62 63 64 |
# File 'lib/address-codec/codec.rb', line 52 def decode_checked(base58string) bytes = decode_raw(base58string) if bytes.length < 5 raise 'invalid_input_size: decoded data must have length >= 5' end unless verify_check_sum(bytes) raise 'checksum_invalid' end bytes[0...-4] end |
#encode(bytes, opts) ⇒ Object
13 14 15 16 |
# File 'lib/address-codec/codec.rb', line 13 def encode(bytes, opts) versions = opts[:versions] encode_versioned(bytes, versions, opts[:expected_length]) end |
#encode_checked(bytes) ⇒ Object
47 48 49 50 |
# File 'lib/address-codec/codec.rb', line 47 def encode_checked(bytes) check = sha256(sha256(bytes))[0, 4] encode_raw(bytes + check) end |