UNPKG

@coolwallet/xrp

Version:
60 lines (52 loc) 1.96 kB
import * as types from '../config/types'; import * as cryptoUtil from './cryptoUtil'; import * as params from '../config/params'; const base58 = require('base-x')(params.R_B58_DICT); const codec = require('ripple-binary-codec'); export const generateRawTx = (signature: string, payment: types.BasePayment): string => { /* eslint-disable-next-line no-param-reassign */ payment.TxnSignature = signature.toUpperCase(); return codec.encode(payment); }; // eslint-disable-next-line import/prefer-default-export export const pubKeyToAddress = (publicKey: string): string => { const pubKeyBuf = Buffer.from(publicKey, 'hex'); const pubkeyHash = cryptoUtil.sha256(pubKeyBuf); const accountId = cryptoUtil.ripemd160(pubkeyHash); const addressTypePrefix = Buffer.from('00', 'hex'); const payload = Buffer.concat([addressTypePrefix, accountId]); const checksum = cryptoUtil.sha256(cryptoUtil.sha256(payload)).slice(0, 4); const address = base58.encode(Buffer.concat([payload, checksum])); return address; }; export const getAccount = (address: string): string => { const addressBuf = base58.decode(address); const accountBuf = addressBuf.slice(1, 21); return accountBuf.toString('hex'); }; export const generateTrustSetRawTx = (signature: string, tokenPayment: types.TokenPayment): string => { const { Token, ...rest } = tokenPayment; const payload = { ...rest, TxnSignature: signature.toUpperCase(), LimitAmount: { currency: Token.code, issuer: Token.issuer, value: Token.value, }, }; return codec.encode(payload); }; export const generateIouTransferRawTx = (signature: string, iouPayment: types.IouTransferPayment): string => { const { Token, ...rest } = iouPayment; const payload = { ...rest, TxnSignature: signature.toUpperCase(), Amount: { currency: Token.code, issuer: Token.issuer, value: Token.value, }, }; return codec.encode(payload); };