npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

txbuilderjs

v1.0.9

Published

generate tx JavaScript API

Downloads

2

Readme

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