1.0.9 • Published 4 years ago

txbuilderjs v1.0.9

Weekly downloads
2
License
ISC
Repository
github
Last release
4 years ago

wallet.js

支持 btc,usdt,eth,erc20,ltc,bch 的私钥地址的生成及单签和多签交易的构建。

Installation

npm install txbuilderjs

Test

npm run test

Usage

import * as tb from 'txbuilderjs';

const builder = tb.Builder();

const {mnemonic, path, wif, address} = builder.btc.genAccount();

BTC

btc_genAccount

/**
 * @method genAccount 根据公钥生成P2PKH地址, 支持压缩、非压缩公钥
 * @param {String} mnemonic 助记词如果这个参数不为空,就是通过助记词恢复账户
 * @param {Number} strength 默认 128
 * 熵128 ==> 助记词12个单词
 * 熵160 ==> 助记词15个单词
 * 熵192 ==> 助记词18个单词
 * 熵224 ==> 助记词21个单词
 * 熵256 ==> 助记词24个单词
 * @param {String} path 分层确定性路径,默认使用BIP44路径 "m/44'/0'/0'/0/0"
 * @returns {Promise<{mnemonic, path, wif, publicKey, address}>}
 * mnemonic 助记词
 * path 路径
 * wif 秘钥 hex
 * publicKey 公钥 buffer
 * address 地址
 */

Example

看第一个测试 generate btc account


btc_genMultiAddress

/**
 * @method genMultiAddress 生成多签地址和脚本
 * @param {Number} m 可支配者个数
 * @param {Number} n 所有者个数
 * @param {Buffer Array} pubkeys 所有者公钥列表
 * @returns {Promise<{address, redeemscript}>}
 * address===>多签地址
 * redeemscript====>redeem脚本 多重签名地址的赎回脚本
 * */

Example

看第二个测试 generate multi address


btc_genTransaction

/**
 * @method genTransaction 构建btc交易
 * @param {Array} ins inputs
 * @param {Array} outs outputs
 * @returns {String} tx hex
 * */

const ins = [
    {
        // txHash UTXO交易hash
        txHash: 'ba850540254378c3a6bad35d24ede8ce438b0e9dce4834f154962f153c8c8dc4',
        // vout UTXO交易输出索引
        vout: 0
    }
];

const outs = [
    {
        // scriptPubKey 收款地址
        scriptPubKey: '1qp9Gy2WGCFLQfhjLLDnVuRSGnuy8tmgn',
        // value 收款金额
        value: 499999 * 1e4
    }
];

Example

看第三个测试 generate btc transaction and sign


btc_signTransaction

/**
 * @method signTransaction 对交易进行单签名
 * @param {String} txHex 函数genTransaction返回的tx
 * @param {Array} keyPairs 私钥以及脚本
 * @returns {String} tx hex string
 * */

const keyPairs = [
    {
        // wif 私钥
        wif: 'KzbSeQ3Sqwa4h27Adj3qszScuKbGd8MToLYbooxuB5Ap3UxJUUoB',
        // inputIndex UTXO交易输出索引
        inputIndex: 0
    }
];

Example

看第三个测试 generate btc transaction and sign


btc_multiSignTransaction

/**
 * @method multiSignTransaction 对交易进行多重签名
 * @param {String} txHex 函数genTransaction返回的tx
 * @param {Array} keyPairs 私钥以及脚本
 * @param {Boolean} finish 是否所有人都签名完毕,false 否,true 是
 * @returns {String} tx hex string
 * */

const keyPairs = [
    {
        // wif 私钥
        wif: 'KzbSeQ3Sqwa4h27Adj3qszScuKbGd8MToLYbooxuB5Ap3UxJUUoB',
        // inputIndex UTXO交易输出索引
        inputIndex: 0,
        // redeemScript 多重签名地址的赎回脚本,就是genMultiAddress函数返回的那个脚本
        redeemScript:
            '522102c2d1fd9f2beeef8516c89fa62ad973b105773468b5d06e117e63d227aa2a051a2102ffedaa1ab2c5475ce41e0bf84419ec7fcd90a78ea9ec76a41663d38ed20bf45221024d20355b46c3a3fe9c4fb66c07394d0c38ee669e9815b5779b4124ed426a6a7053ae'
    }
];

Example

看第四个测试 generate btc multi sign transaction

USDT

usdt其实是 btc 网络中的一个脚本,所以和btc的接口都是一样的,唯一有区别的是构建交易的outs不同

usdt_genTransaction

const amount = btc.toPaddedHexString(Math.floor(1 * 1e7), 16);
const simpleSend = [
    '6f6d6e69', // omni 不用改
    '0000', // version 不用改
    '00000000001f', // 31 for Tether 不用改
    amount // amount = 1 * 10 000 000 in HEX, usdt转账的金额,只需改这个
].join('');

const data = [Buffer.from(simpleSend, 'hex')]; // NEW** data must be an Array(Buffer)
const omniOutput = bitcoin.payments.embed({data}).output; // NEW** Payments API

// 这里构建outs和普通btc不一样,第一个out必须是收款方,第二个是usdt的output,顺序不能反。
const outs = [
    {
        // scriptPubKey usdt收款地址
        scriptPubKey: '1qp9Gy2WGCFLQfhjLLDnVuRSGnuy8tmgn',
        // value 不用改
        value: 546
    },
    {
        scriptPubKey: omniOutput, // usdt payment
        value: 0
    }
];

Example

看第一个测试 generate usdt transaction and sign

看第二个测试 generate usdt multi sign transaction


ETH

eth_genAccount

/**
 * @method genAccount 生成账户
 * @param {String} mnemonic 助记词如果这个参数不为空,就是通过助记词恢复账户
 * @param {Object} options 不写就默认
 * options.extraEntropy 额外的熵加入随机源
 * options.path 分层确定性路径,默认使用BIP44路径 "m/44'/60'/0'/0/0"
 * options.locale 助记词的语言,默认英语
 *@returns {Promise<{mnemonic, path, privateKey, address}>}
 * mnemonic 助记词
 * path 路径
 * privateKey 秘钥
 * address 地址
 */

example

看第一个测试 generate eth account


eth_multiAccountTx

/**
 * @method genAccount 生成账户
 * @param {String} privateKey hex 字符串
 * @param {Object} txData 一个交易的基础内容
 * @param {Number} m 可支配者个数
 * @param {Array} addrs 所有者地址列表 hex
 * @returns {Promise<{rawTransaction,transactionHash,multiAddr}>}
 * rawTransaction 建立多重签名地址交易hex数据,
 * transactionHash hash
 * multiAddr 多重签名地址
 *
 */
const txData = {
    nonce: '0x00', // 账户nonce
    gasPrice: '0x09184e72a000', // gasprice
    gasLimit: '0x2710', // 交易消耗最大gas
    value: '0x00' // 转账金额,无特殊需求不写也行,因为这个只是创建账户交易,不需要转账。
};

example

看第二个测试 generate multi account transaction


eth_genTransaction

/**
 * @method genTransaction 创建以太坊交易
 * @param {Object} txData 一个交易的基础内容
 * @returns {Object} tx 返回交易
 * */

const txData = {
    nonce: '0x00', // 账户nonce
    gasPrice: '0x09184e72a000', // price
    gasLimit: '0x2710', // 最大消耗gas
    to: '0x0000000000000000000000000000000000000000', //收款方
    value: '0x00', // 转账金额
    data: '0x7f7465737432000000000000000000000000000000000000000000000000000000600057' // 交易额外字段,交易的附带信息
};

example

看第三个测试 generate eth transaction and sign


eth_signTransaction

/**
 * @method signTransaction 签名以太坊交易
 * @param {Object} tx 交易结构
 * @param {String}  privateKey 私钥
 * @returns {Promise<{rawTransaction,transactionHash}>}
 * rawTransaction ===>交易序列化后的结果
 * transactionHash ===> 交易hash
 * */

example

看第三个测试 generate eth transaction and sign


eth_genMultiSignTxPayloadSignMessage

/**
 * @method genMultiSignTxPayloadSignMessage 生成多签messageHash
 * @param {String} to 收款地址
 * @param {Number} value 多种签名转账金额
 * @param {Number} multiNonce 多重签名地址支付Nonce
 * @param {String} multiAddr 收款地址
 * @returns {String} message hash
 * */

example

看第三个测试 generate multi sign transaction


eth_signMultiSignTxPayload

/**
 * @method signMultiSignTxPayload 对生成的多签messageHash签名
 * @param {String} message hash
 * @param {String} privateKey 私钥
 * @returns {Object} sig 签名 hex
 * */

example

看第三个测试 generate multi sign transaction


eth_genMultiSignTx

/**
 * @method genMultiSignTx 对支付进行多重签名
 * @param {String} to 收款地址
 * @param {Number} value 多种签名转账金额
 * @param {String} multiAddr 收款地址
 * @param {Object} txData 一个交易的基础内容
 * @param {Object Array} sigs 签名
 * @returns {Object} transaction 多重签名后的交易
 */

const txData = {
    nonce: '0x03',
    gasPrice: '0x2540be400',
    gasLimit: '0xdbba0',
    value: '0x0'
};

example

看第三个测试 generate multi sign transaction


ERC20

erc20_genErc20Transaction

/**
 * @method getErc20Transaction 创建以太坊erc20交易
 * @param {Object} txData 一个交易的基础内容
 * @param {String} to 代币收款人地址
 * @param {String} value 代币转账金额
 *
 * @returns {Object} tx 返回交易
 */

const txData = {
    nonce: '0x01',
    gasPrice: '0x2540be400',
    gasLimit: '0x15f90',
    value: '0x0', //这个value指的是交易eth转账的value,不是代币的
    to: '0xe86fdcc4a93c476b8bbc03a80868fa42f6c9919e' //erc20合约的地址
};

example

看第一个测试 generate erc20 transaction


erc20_genERC20MultiSignTx

/**
 * @method genERC20MultiSignTx 对erc20支付进行多重签名
 * @param {String} to 收款地址
 * @param {String} multiAddress 收款地址
 * @param {String} tokenAddress erc20合约地址
 * @param {Object} txData 一个交易的基础内容
 * @param {Array} sigs 签名
 * @returns {Object} transaction 多重签名后的交易
 */

let txData = {
    nonce: '0x02',
    gasPrice: '0x2540be400',
    gasLimit: '0x895440',
    value: '0x0'
};

example

看第二个测试 generate multi sign erc20 transaction


LTC

ltc_genAccount

/**
 * @method genAccount 根据公钥生成P2PKH地址, 支持压缩、非压缩公钥
 * @param {String} mnemonic 助记词如果这个参数不为空,就是通过助记词恢复账户
 * @param {Number} strength 默认 128
 * 熵128 ==> 助记词12个单词
 * 熵160 ==> 助记词15个单词
 * 熵192 ==> 助记词18个单词
 * 熵224 ==> 助记词21个单词
 * 熵256 ==> 助记词24个单词
 * @param {String} path 分层确定性路径,默认使用BIP44路径 "m/44'/0'/2'/0/0"
 * @returns {Promise<{mnemonic, path, wif, publicKey, address}>}
 * mnemonic 助记词
 * path 路径
 * wif 秘钥
 * publicKey 公钥 buffer
 * address 地址
 */

Example

看第一个测试 generate ltc account


ltc_genMultiAddress

/**
 * @method genMultiAddress 生成多签地址和脚本
 * @param {Number} m 可支配者个数
 * @param {Number} n 所有者个数
 * @param {Buffer Array} pubkeys 所有者公钥列表
 * @returns {Promise<{address, redeemscript}>}
 * address===>多签地址
 * redeemscript====>redeem脚本 多重签名地址的赎回脚本
 * */

Example

看第二个测试 generate ltc multi address


ltc_genTransaction

/**
 * @method genTransaction 构建btc交易
 * @param {Array} ins inputs
 * @param {Array} outs outputs
 * @returns {Object} tx
 * */

const ins = [
    {
        // txHash UTXO交易hash
        txHash: 'ba850540254378c3a6bad35d24ede8ce438b0e9dce4834f154962f153c8c8dc4',
        // vout UTXO交易输出索引
        vout: 0
    }
];

const outs = [
    {
        // scriptPubKey 收款地址
        scriptPubKey: '1qp9Gy2WGCFLQfhjLLDnVuRSGnuy8tmgn',
        // value 收款金额
        value: 499999 * 1e4
    }
];

Example

看第三个测试 generate ltc transaction and sign


ltc_signTransaction

/**
 * @method signTransaction 对交易进行单签名
 * @param {Object} tx 函数genTransaction返回的tx
 * @param {Array} keyPairs 私钥以及脚本
 * @returns {String} tx hex string
 * */

const keyPairs = [
    {
        // wif 私钥
        wif: 'KzbSeQ3Sqwa4h27Adj3qszScuKbGd8MToLYbooxuB5Ap3UxJUUoB',
        // inputIndex UTXO交易输出索引
        inputIndex: 0
    }
];

Example

看第三个测试 generate ltc transaction and sign 1


ltc_multiSignTransaction

/**
 * @method multiSignTransaction 对交易进行多重签名
 * @param {Object} tx 函数genTransaction返回的tx
 * @param {Array} keyPairs 私钥以及脚本
 * @param {Boolean} finish 是否完成签名
 * @returns {String} tx hex string
 * */

const keyPairs = [
    {
        // wif 私钥
        wif: 'KzbSeQ3Sqwa4h27Adj3qszScuKbGd8MToLYbooxuB5Ap3UxJUUoB',
        // inputIndex UTXO交易输出索引
        inputIndex: 0,
        // redeemScript 多重签名地址的赎回脚本,就是genMultiAddress函数返回的那个脚本
        redeemScript:
            '522102c2d1fd9f2beeef8516c89fa62ad973b105773468b5d06e117e63d227aa2a051a2102ffedaa1ab2c5475ce41e0bf84419ec7fcd90a78ea9ec76a41663d38ed20bf45221024d20355b46c3a3fe9c4fb66c07394d0c38ee669e9815b5779b4124ed426a6a7053ae'
    }
];

Example

看第五个测试 generate ltc multi sign transaction

BCH

bch_genAccount

/**
 * @method genAccount 根据公钥生成P2PKH地址, 支持压缩、非压缩公钥
 * @param {String} mnemonic 助记词如果这个参数不为空,就是通过助记词恢复账户
 * @param {Number} strength 默认 128
 * 熵128 ==> 助记词12个单词
 * 熵160 ==> 助记词15个单词
 * 熵192 ==> 助记词18个单词
 * 熵224 ==> 助记词21个单词
 * 熵256 ==> 助记词24个单词
 * @param {String} path 分层确定性路径,默认使用BIP44路径 "m/44'/0'/145'/0/0'/0/0"
 * @returns {Promise<{mnemonic, path, wif, publicKey, address}>}
 * mnemonic 助记词
 * path 路径
 * wif 秘钥
 * publicKey 公钥
 * address 地址
 */

Example

看第一个测试 generate bch account


bch_genMultiAddress

/**
 * @method genMultiAddress 生成多签地址和脚本
 * @param {Number} m 可支配者个数
 * @param {Number} n 所有者个数
 * @param {Buffer Array} pubKeys 所有者公钥列表
 * @returns {Promise<{address, redeemscript}>}
 * address===>多签地址
 * redeemscript====>redeem脚本 多重签名地址的赎回脚本
 * */

Example

看第二个测试 generate bch multi address


bch_genTransaction

  /**
     * @method genTransaction 构建bch交易
     * @param {Array} ins inputs
     * @param {Array} outs outputs
     * @param {String} publicKey 公钥
     * @returns {String} tx object
     * */

const ins = [
    {
        // txHash UTXO交易hash
        txHash: 'ba850540254378c3a6bad35d24ede8ce438b0e9dce4834f154962f153c8c8dc4',
        // vout UTXO交易输出索引
        vout: 0
        // value
        value:499999 *  1e4
    }
];

const outs = [
    {
        // scriptPubKey 收款地址
        scriptPubKey: '1qp9Gy2WGCFLQfhjLLDnVuRSGnuy8tmgn',
        // value 收款金额
        value: 499999 * 1e4
    }
];

Example

看第三个测试 generate bch transaction and sign


bch_signTransaction

/**
 * @method signTransaction 签名交易
 * @param {String} serialized 可支配者个数
 * @param {String} wif 私钥
 * @returns {String} tx hex
 * */

Example

看第三个测试 generate bch transaction and sign


bch_genMultiSignTx

/**
 * @method genMultiSignTx 构建bch交易
 * @param {Array} ins inputs
 * @param {Array} outs outputs
 * @param {String} multiAddr 多签地址
 * @param {Number} m 可支配者个数
 * @param {Array Buffer} pubKeys 所有人公钥
 * @returns {String} tx hex
 * */

Example

看第四个测试 generate bch multi sign transaction