UNPKG

nerve-sdk-js

Version:
141 lines (113 loc) 4.76 kB
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } var nerve = require('../index'); nerve.mainnet(); // nerve.testnet(); var sdk = require('../api/sdk'); var { NERVE_INFOS, Plus, timesDecimals } = require('./htgConfig'); var { getNulsBalance, validateTx, broadcastTx } = require('./api/util'); var NERVE_INFO = nerve.chainId() == 9 ? NERVE_INFOS.mainnet : nerve.chainId() == 5 ? NERVE_INFOS.testnet : null; require('dotenv').config(); // 设置追加手续费的账户 var pri = process.env.tron_test; var fromAddress = nerve.getAddressByPri(nerve.chainId(), pri); console.log(fromAddress); // let fromAddress = "TNVTdTSPRnXkDiagy7enti1KL75NU5AxC9sQA"; // let pri = ''; // 发出的提现交易hash var withdrawalTxHash = '2b3c54d082d19cb9bb585722b29fb51345088cb7d5912714629cabbc98e1d6c6'; // 追加的NVT手续费,此处设置为追加2个NVT var addFeeAmount = '270'; var feeChain = 'NVT'; var remark = 'withdrawal add fee transaction remark...'; //调用 withdrawalAddFeeTest(pri, fromAddress, withdrawalTxHash, addFeeAmount, feeChain, remark, false); /** * 异构链提现追加手续费交易 */ function withdrawalAddFeeTest(_x, _x2, _x3, _x4, _x5, _x6) { return _withdrawalAddFeeTest.apply(this, arguments); } /** * 获取inputs and outputs * @param transferInfo * @returns {*} **/ function _withdrawalAddFeeTest() { _withdrawalAddFeeTest = _asyncToGenerator(function* (pri, fromAddress, withdrawalTxHash, addFeeAmount, feeChain, remark) { var forBitCoin = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : false; // 默认使用NVT作为跨链手续费 if (!feeChain || feeChain == '') { feeChain = 'NVT'; } // 获取手续费资产信息 var feeCoin = NERVE_INFO.htgMainAsset[feeChain]; var feeAddress = nerve.getAddressByPub(NERVE_INFO.chainId, NERVE_INFO.assetId, NERVE_INFO.feePubkey, NERVE_INFO.prefix); var transferInfo = { fromAddress: fromAddress, toAddress: feeAddress, //this.info.blockHoleAddress, fee: 0, chainId: feeCoin.chainId, assetId: feeCoin.assetId, feeCoin: feeCoin, amount: addFeeAmount }; var inOrOutputs = yield inputsOrOutputs(transferInfo); //console.log(inOrOutputs); if (!inOrOutputs.success) { throw "inputs、outputs组装错误"; } var txData = { txHash: withdrawalTxHash }; if (forBitCoin) { txData.extend = '020000'; } var tAssemble = yield nerve.transactionAssemble(inOrOutputs.data.inputs, inOrOutputs.data.outputs, remark, 56, txData); //获取hash var hash = yield tAssemble.getHash(); //交易签名 var txSignature = yield sdk.getSignData(hash.toString('hex'), pri); //通过拼接签名、公钥获取HEX var signData = yield sdk.appSplicingPub(txSignature.signValue, sdk.getPub(pri)); tAssemble.signatures = signData; var txhex = tAssemble.txSerialize().toString("hex"); console.log(txhex.toString('hex')); var result = yield nerve.broadcastTx(txhex); console.log(result); }); return _withdrawalAddFeeTest.apply(this, arguments); } function inputsOrOutputs(_x7) { return _inputsOrOutputs.apply(this, arguments); } function _inputsOrOutputs() { _inputsOrOutputs = _asyncToGenerator(function* (transferInfo) { var feeCoin = transferInfo.feeCoin; var balanceInfo = yield getNulsBalance(transferInfo.fromAddress, transferInfo.chainId, transferInfo.assetId); var inAmount = timesDecimals(transferInfo.amount, feeCoin.decimals).toFixed(); var outAmount = inAmount; var inputs = [{ address: transferInfo.fromAddress, assetsChainId: transferInfo.chainId, assetsId: transferInfo.assetId, amount: inAmount, locked: 0, nonce: balanceInfo.data.nonce }]; var outputs = [{ address: transferInfo.toAddress, assetsChainId: transferInfo.chainId, assetsId: transferInfo.assetId, amount: outAmount, lockTime: 0 }]; return { success: true, data: { inputs: inputs, outputs: outputs } }; }); return _inputsOrOutputs.apply(this, arguments); }