主页 > imtoken官网苹果版 > 区块链钱包开发-USDT-3.实战(nodejs版)

区块链钱包开发-USDT-3.实战(nodejs版)

imtoken官网苹果版 2023-01-17 13:01:23

如何注册usdt钱包地址_闪钱包注册邀请码_blockchain钱包usdt

1.安装钱包

请参考另一篇文章:入门

2、获取测试usdt(TestOmni)的步骤:

1.导入地址到钱包,充值地址测试比特币,

2.然后发送一部分btc(testnet)到moneyqMan7uh8FqdCA2BV5yZ8qVrc9ikLP地址,然后返回一部分usdt(TestOmni)

3. omni_getbalance方法查看账户状态或访问测试网页浏览器查询

介绍一些常用的RPC接口命令:查看地址私钥

> ./bin/omnicore-cli -rpcconnect=127.0.0.1 -rpcport=18332 -rpcuser=RPCUser -rpcpassword=RPCPassword dumpprivkey n1dnFGMxuxkDf1Ns5G2uYhaqk2ETWPuYQG(btc/usdt地址)

支票账户:

> ./bin/omnicore-cli -rpcconnect=127.0.0.1 -rpcport=18332 -rpcuser=RPCUser -rpcpassword=RPCPassword getbalance

获取交易信息:

> ./bin/omnicore-cli -rpcconnect=127.0.0.1 -rpcport=18332 -rpcuser=RPCUser -rpcpassword=RPCPassword omni_listtransactions 

支票账户:

> ./bin/omnicore-cli -rpcconnect=127.0.0.1 -rpcport=18332 -rpcuser=RPCUser -rpcpassword=RPCPassword omni_getbalance mhf2ibPWMoeyibR2jS3jPLZQYTJsFSoG5r 1 (1: 表示彩色币id,usdt为31,钱包客户端我选择的是2) 

测试网进入QT桌面

> ./bin/omnicore-qt -testnet -server -rpcbind=127.0.0.1 -rpcport=18332 -rpcuser=RPCUser -rpcpassword=RPCPassword 

获取指定地址交易列表listUnspent

> ./bin/omnicore-cli -rpcconnect=127.0.0.1 -rpcport=18332 -rpcuser=RPCUser -rpcpassword=RPCPassword listunspent  0 999999 \'["mhf2ibPWMoeyibR2jS3jPLZQYTJsFSoG5r"]\'

发送usdt

如何注册usdt钱包地址_闪钱包注册邀请码_blockchain钱包usdt

> ./bin/omnicore-cli -rpcconnect=127.0.0.1 -rpcport=18332 -rpcuser=RPCUser -rpcpassword=RPCPassword  omni_sendrawtx "mhf2ibPWMoeyibR2jS3jPLZQYTJsFSoG5r" "000000000000001f000000000000000a" "msis3b45PQriomes1zCAfNJpobggP1yusr" 

将特定地址导入节点:

> ./bin/omnicore-cli -rpcconnect=127.0.0.1 -rpcport=18332 -rpcuser=RPCUser -rpcpassword=RPCPassword importprivkey cVKMjDVaWevxmRCrNXjTPpz77SSjWvQWp1eCj5zKBpEcaASK7Gib \'\' false  

\'cVKMjDVaWevxmRCrNXjTPpz77SSjWvQWp1eCj5zKBpEcaASK7Gib\':地址账户

false:表示是否全节点扫描

如果(btc/usdt)想通过api查询余额,rescan需要设置为true

分享一个地址:

usdt测试网地址(带测试币):n1dnFGMxuxkDf1Ns5G2uYhaqk2ETWPuYQG

私钥:cVZT8qHGs5g1qyVYmFgfUyz7CcRS7LX84xjgdNS8DdRbtJ5uXtYU

3.开发这里主要介绍使用nodejs生成USDT地址,创建新的USDT转账交易等; 一、环境安装

(1)、8.x以上版本nodejs、mongodb

(2)、快递、pm2

2.依赖包| btc提供的官方库和加密包 | usdt是基于btc的底层协议,所以可以共享很多api

(1)、随机字符串

(2)、bitcoinjs-lib

(3)、比吉

(4)、加密货币

3、部分模型准备(1)地址表

    id: { type: String, required: true },
    address: { type: String, required: true, default: \'\' }, //USDT地址
    testnet: { type: Boolean, required: true, default: true }, //是否为测试网络地址
    privateKey: { type: String, required: true, default: \'\' }, //USDT地址私钥
    privateKeySalt: { type: String, required: true, default: \'\' }, //USDT地址加密盐
    hash: { type: String, required: true, default: \'\' }, //防篡改hash

如何注册usdt钱包地址_闪钱包注册邀请码_blockchain钱包usdt

used: { type: Boolean, required: true, default: true }, //是否已被使用 watch: { type: Boolean, required: true, default: false }, //是否已经添加到bitcoind监控列表 invalid: { type: Boolean, required: true, default: false }, //是否已经失效

(2) 交易表

    id: { type: String, required: true },
    txid: { type: String, required: true }, // 交易编号
    fee: { type: Number }, // 手续费
    sendingaddress: { type: String, required: true, default: \'\' }, // 发送方
    referenceaddress: { type: String, required: true, default: \'\' }, // 接收方
    ismine: { type: Boolean }, // 订单是否涉及钱包中的地址
    version: { type: Number }, // 版本
    type_int: { type: Number }, // 交易类型为数字
    type: { type: String, default: \'\' }, //  交易类型为字符串
    propertyid: { type: Number, required: true }, //要发送的令牌的标识符 如 31对应的是usdt
    divisible: { type: Boolean }, //令牌是否可以分割
    amount: { type: Number, required: true }, // 充值数量
    valid: { type: Boolean }, // 交易是否有效
    blockhash: { type: String }, // 相应块的hash
    blocktime: { type: Number }, // 最后处理的块的时间戳
    positioninblock: { type: Number }, //  块内交易的位置
    block: { type: Number }, // 当前块高度
    confirmations: { type: Number, default: 0 }, // 当前确认数

3.部分代码块(一),生成usdt钱包地址

  function createAddress(){

如何注册usdt钱包地址_闪钱包注册邀请码_blockchain钱包usdt

try { let string = random.randomString(1048) //创建随机值 let hash = bitcoin.crypto.sha256(string) //sha256加密,创建对应哈希 let d = bigi.fromBuffer(hash) let keyPair = new bitcoin.ECPair(d, null, { network: network }) //创建新私钥 let privateKey = keyPair.toWIF() let publicAddress = keyPair.getAddress() let obj = { id: unique.uuid(), address: publicAddress, testnet: appConfig.usdt.testnet, privateKey: privateKey, } let addr = new Address(obj) addr.encryptPrivateKey() //私钥加密 addr.createHash() //指定盐加密 importAddrToNet(publicAddress).then(function(data) { // 添加到对应网络节点 return addr.save() //保存地址到数据库 }).then(function(d) { return res.json({ data: { address: publicAddress //最后返回地址 } }) }).catch(function(e) { ws.log(\'importAddrToNet error\', e)

如何注册usdt钱包地址_blockchain钱包usdt_闪钱包注册邀请码

}) } catch (e) { ws.error(`catch importAddrToNet error ${e}`) } }

(2) 生成交易

USDT是BTC的彩色货币。 每笔交易的原理是生成一笔BTC交易如何注册usdt钱包地址,并在交易中附加USDT交易。

所以usdt转账需要提供少量的btc作为手续费如何注册usdt钱包地址,一般需要有专门的手续费地址账号。

 * @param {*} id  omni_id usdt:31
 * @param {*} sender_address 转出金额的临时地址
 * @param {*} sender_privatekey 转出临时地址的私钥
 * @param {*} value 转账金额
 * @param {*} receiver_address 接收地址
 * @param {*} fee 手续费
const createTransaction = (sender_address, value, id) => {
    try {
        isBalanceEnough(sender_address, value, id).then(e => { //验证发送方余额
            if (e) {
                return listUnspentForFee(sender_address, fee) //获取手续费地址账号的未花费交易unspentList
            } else {
                ws.log(\'余额不足\')
                return reject(`余额不足,${e}`)
            }
        }).then(async (sender_tx) => {
            if (!tx.length) {

闪钱包注册邀请码_如何注册usdt钱包地址_blockchain钱包usdt

ws.log(\'等待上笔交易确认后再尝试..\') return resolve(\'等待上笔交易确认后再尝试..\') } const _payload = await omniHelper.createpayloadSimplesend(id, parseFloat(value).toString()) //创建Usdt交易 await omniHelper.createRawtransaction(sender_tx, {}) // 创建交易 const opreturn = await omniHelper.createRawtx_opreturn(create, _payload) // //usdt交易附加到BTC交易上 const reference = await omniHelper.createRawtx_reference(opreturn, receiver_address) //设置归总地址 const data = await omniHelper.createRawtx_change(reference, sender_tx, sender_address, fee) //填写手续费及找零地址 const sign = await omniHelper.signRawtransaction(data, sender_tx, [sender_privatekey]) //获取原生交易hex const result = await omniHelper.sendRawtransaction(sign.hex) //广播交易 return await isOnOmni(result) //验证结果 }).then(data => { resolve(data) }).catch(e => { reject(e) }) } catch (error) { ws.error(error) } }

总结

本文主要提供解决方案;

离开圈子好久了。 如需讨论,可留言或私信。 我希望这些总结能对你有所帮助;

参考:优化的js api库