class NearApi::Base58
Constants
- BASE
Public Class Methods
decode(encoded_string)
click to toggle source
# 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)
click to toggle source
# 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)
click to toggle source
# 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)
click to toggle source
# 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)
click to toggle source
# 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