Class: NearApi::Base58
- Inherits:
-
Object
- Object
- NearApi::Base58
- Defined in:
- lib/near_api/base58.rb
Constant Summary collapse
- BASE =
'123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
Class Method Summary collapse
- .decode(encoded_string) ⇒ Object
- .encode(bytestring) ⇒ Object
- .to_bytestring(number) ⇒ Object
- .toi(string = to_s, base = 58, digits = BASE) ⇒ Object
- .tos(integer = to_i, base = 58, digits = BASE) ⇒ Object
Class Method Details
.decode(encoded_string) ⇒ Object
15 16 17 18 19 20 |
# File 'lib/near_api/base58.rb', line 15 def self.decode(encoded_string) integer = toi encoded_string nzeroes = encoded_string.chars.find_index { |c| c != BASE[0] } || encoded_string.length - 1 prefix = nzeroes < 0 ? '' : 0.chr * nzeroes prefix + to_bytestring(integer) end |
.encode(bytestring) ⇒ Object
6 7 8 9 10 11 12 13 |
# File 'lib/near_api/base58.rb', line 6 def self.encode(bytestring) number = bytestring.unpack('C*').reverse.each_with_index.inject(0) do |sum, (byte, index)| sum + byte * (256**index) end nzeroes = bytestring.bytes.find_index { |b| b != 0 } || bytestring.length - 1 prefix = BASE[0] * nzeroes prefix + tos(number) end |
.to_bytestring(number) ⇒ Object
45 46 47 48 49 50 51 52 53 54 55 |
# File 'lib/near_api/base58.rb', line 45 def self.to_bytestring(number) return 0.chr if number == 0 integer = number result = '' while integer > 0 integer, remain = integer.divmod(256) result = remain.chr + result end result end |
.toi(string = to_s, base = 58, digits = BASE) ⇒ Object
22 23 24 25 26 27 28 29 30 31 |
# File 'lib/near_api/base58.rb', line 22 def self.toi(string = to_s, base = 58, digits = BASE) return nil if string.empty? integer = 0 string.each_char do |c| index = digits.index(c) integer = integer * base + index end integer end |
.tos(integer = to_i, base = 58, digits = BASE) ⇒ Object
33 34 35 36 37 38 39 40 41 42 43 |
# File 'lib/near_api/base58.rb', line 33 def self.tos(integer = to_i, base = 58, digits = BASE) return '' if integer.nil? return digits[0] if integer == 0 string = '' while integer > 0 integer, index = integer.divmod(base) string = digits[index] + string end string end |