module Platon::Utils
Public Instance Methods
base256_to_int(str)
click to toggle source
# File lib/platon/utils.rb, line 26 def base256_to_int(str) RLP::Sedes.big_endian_int.deserialize str.sub(/\A(\x00)+/, '') end
bech32_to_bin(bech32Address)
click to toggle source
bech32 address to bin
# File lib/platon/utils.rb, line 66 def bech32_to_bin(bech32Address) address = decode_bech32_address(bech32Address) hex_to_bin address end
bin_to_hex(string)
click to toggle source
# File lib/platon/utils.rb, line 18 def bin_to_hex(string) RLP::Utils.encode_hex string end
bin_to_prefixed_hex(binary)
click to toggle source
# File lib/platon/utils.rb, line 50 def bin_to_prefixed_hex(binary) prefix_hex bin_to_hex(binary) end
decode_bech32_address(bech32Address)
click to toggle source
Resolve the bech32 address
@method decode_bech32_address
@param {String} bech32Address @return {String} formatted address eg: Platon::Utils.decode_bech32_address
(“atp1kh9dktnszj04zn6d8ae9edhqfmt4awx94n6h4m”)
# File lib/platon/utils.rb, line 85 def decode_bech32_address(bech32Address) if is_bech32_address?(bech32Address) ## is_bech32_address? ## TODO segwit_addr = SegwitAddr.new(bech32Address) address = segwit_addr.to_script_pubkey if address return "0x" + address end end return '' end
format_address(address)
click to toggle source
# File lib/platon/utils.rb, line 158 def format_address(address) Address.new(address).checksummed end
hash160(x)
click to toggle source
# File lib/platon/utils.rb, line 134 def hash160(x) ripemd160 sha256(x) end
hex_to_bin(string)
click to toggle source
# File lib/platon/utils.rb, line 22 def hex_to_bin(string) RLP::Utils.decode_hex remove_hex_prefix(string) end
int_to_base256(int)
click to toggle source
# File lib/platon/utils.rb, line 30 def int_to_base256(int) RLP::Sedes.big_endian_int.serialize int end
is_bech32_address?(bech32Address)
click to toggle source
# File lib/platon/utils.rb, line 71 def is_bech32_address?(bech32Address) return false if bech32Address.length != 42 hrp,data,spec = Bech32.decode bech32Address return false if data == nil return true end
keccak256(x)
click to toggle source
# File lib/platon/utils.rb, line 118 def keccak256(x) Digest::SHA3.new(256).digest(x) end
keccak256_rlp(x)
click to toggle source
# File lib/platon/utils.rb, line 126 def keccak256_rlp(x) keccak256 RLP.encode(x) end
keccak512(x)
click to toggle source
# File lib/platon/utils.rb, line 122 def keccak512(x) Digest::SHA3.new(512).digest(x) end
normalize_address(address)
click to toggle source
# File lib/platon/utils.rb, line 6 def normalize_address(address) if address.nil? || address == '' '' elsif address.size == 40 hex_to_bin address elsif address.size == 42 && address[0..1] == '0x' hex_to_bin address[2..-1] else address end end
prefix_hex(hex)
click to toggle source
# File lib/platon/utils.rb, line 42 def prefix_hex(hex) hex.match(/\A0x/) ? hex : "0x#{hex}" end
prefix_message(message)
click to toggle source
# File lib/platon/utils.rb, line 54 def prefix_message(message) "\x19Platon Signed Message:\n#{message.length}#{message}" # "\x19Ethereum Signed Message:\n#{message.length}#{message}" end
public_key_to_address(hex)
click to toggle source
# File lib/platon/utils.rb, line 59 def public_key_to_address(hex) bytes = hex_to_bin(hex) address_bytes = Utils.keccak256(bytes[1..-1])[-20..-1] format_address bin_to_prefixed_hex(address_bytes) end
remove_hex_prefix(s)
click to toggle source
# File lib/platon/utils.rb, line 46 def remove_hex_prefix(s) s[0,2] == '0x' ? s[2..-1] : s end
ripemd160(x)
click to toggle source
# File lib/platon/utils.rb, line 130 def ripemd160(x) Digest::RMD160.digest x end
sha256(x)
click to toggle source
# File lib/platon/utils.rb, line 114 def sha256(x) Digest::SHA256.digest x end
to_bech32_address(hrp,address)
click to toggle source
Platon::Utils.to_bech32_address
(“atp”,“0xb5cadb2e70149f514f4d3f725cb6e04ed75eb8c5”)
# File lib/platon/utils.rb, line 105 def to_bech32_address(hrp,address) if true ## isAddress segwit_addr = SegwitAddr.new segwit_addr.hrp = hrp segwit_addr.script_pubkey = remove_hex_prefix(address) ## remove 0x segwit_addr.addr end end
v_r_s_for(signature)
click to toggle source
# File lib/platon/utils.rb, line 34 def v_r_s_for(signature) [ signature[0].bytes[0], Utils.base256_to_int(signature[1..32]), Utils.base256_to_int(signature[33..65]), ] end
valid_address?(address)
click to toggle source
# File lib/platon/utils.rb, line 154 def valid_address?(address) Address.new(address).valid? end
zpad(x, l)
click to toggle source
# File lib/platon/utils.rb, line 138 def zpad(x, l) lpad x, BYTE_ZERO, l end
zpad_hex(s, l=32)
click to toggle source
# File lib/platon/utils.rb, line 150 def zpad_hex(s, l=32) zpad decode_hex(s), l end
zpad_int(n, l=32)
click to toggle source
# File lib/platon/utils.rb, line 146 def zpad_int(n, l=32) zpad encode_int(n), l end
zunpad(x)
click to toggle source
# File lib/platon/utils.rb, line 142 def zunpad(x) x.sub(/\A\x00+/, '') end
Private Instance Methods
encode_int(n)
click to toggle source
# File lib/platon/utils.rb, line 171 def encode_int(n) unless n.is_a?(Integer) && n >= 0 && n <= UINT_MAX raise ArgumentError, "Integer invalid or out of range: #{n}" end int_to_base256 n end
lpad(x, symbol, l)
click to toggle source
# File lib/platon/utils.rb, line 166 def lpad(x, symbol, l) return x if x.size >= l symbol * (l - x.size) + x end