UNPKG

revos-sdk-js-mainnet

Version:
100 lines (77 loc) 3.11 kB
'use strict'; import * as common from '../common'; export const BITCOIN_BASE58 = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'; const base58 = require('base-x')(BITCOIN_BASE58); export const ADDRESS_GEN_PREFIX = '031fc9'; export const ADDRESS_GEN_PREFIX_LEN = ADDRESS_GEN_PREFIX.length / 2; export const UINT160_LEN = 20; export const CHECKSUM_LEN = 4; export const ADDRESS_LEN = ADDRESS_GEN_PREFIX_LEN + UINT160_LEN + CHECKSUM_LEN; export function verifyAddress(address) { try { let addressBytes = base58.decode(address); if (addressBytes.length !== ADDRESS_LEN) { return false; } let addressPrefixBytes = addressBytes.slice(0, ADDRESS_GEN_PREFIX_LEN); let addressPrefix = common.util.bytesToHex(addressPrefixBytes); if (addressPrefix !== ADDRESS_GEN_PREFIX) { return false } let programHash = addressStringToProgramHash(address) let addressVerifyCode = getAddressStringVerifyCode(address) let programHashVerifyCode = genAddressVerifyCodeFromProgramHash(programHash) return addressVerifyCode === programHashVerifyCode; } catch (e) { return false; } } export function publicKeyToSignatureRedeem(publicKey) { return '20' + publicKey + 'ac'; } export function hexStringToProgramHash(hexStr) { return common.hash.ripemd160Hex(common.hash.sha256Hex(hexStr)) } export function programHashStringToAddress(programHash) { let addressVerifyBytes = genAddressVerifyBytesFromProgramHash(programHash) let addressBaseData = common.util.hexToBytes(ADDRESS_GEN_PREFIX + programHash) return base58.encode(Buffer.from(common.util.mergeTypedArrays(addressBaseData, addressVerifyBytes))) } export function addressStringToProgramHash(address) { let addressBytes = base58.decode(address) let programHashBytes = addressBytes.slice(ADDRESS_GEN_PREFIX_LEN, addressBytes.length - CHECKSUM_LEN) return common.util.bytesToHex(programHashBytes) } export function genAddressVerifyBytesFromProgramHash(programHash) { programHash = ADDRESS_GEN_PREFIX + programHash let verifyBytes = common.util.hexToBytes(common.hash.doubleSha256Hex(programHash)) return verifyBytes.slice(0, CHECKSUM_LEN) } export function genAddressVerifyCodeFromProgramHash(programHash) { let verifyBytes = genAddressVerifyBytesFromProgramHash(programHash) return common.util.bytesToHex(verifyBytes) } export function getAddressStringVerifyCode(address) { let addressBytes = base58.decode(address) let verifyBytes = addressBytes.slice(-CHECKSUM_LEN) return common.util.bytesToHex(verifyBytes) } export function signatureToParameter(signatureHex) { return '40' + signatureHex; } export function prefixByteCountToHexString(hexString) { let len = hexString.length if(0 === len) { return '00' } if(1 === len%2) { hexString = '0' + hexString len += 1 } let byteCount = len / 2 byteCount = byteCount.toString(16) if(1 === byteCount.length % 2) { byteCount = '0' + byteCount } return byteCount + hexString }