UNPKG

nerve-sdk-js

Version:
187 lines (154 loc) 6.58 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.testnet(); // nerve.mainnet(); nerve.customnet(5, "http://127.0.0.1:17004/jsonrpc"); var { NERVE_INFOS, Plus, timesDecimals } = require('./htgConfig'); var { getNulsBalance, validateTx, broadcastTx, getSymbolPriceOfUsdt, getHeterogeneousMainAsset } = require('./api/util'); require('dotenv').config(); var NERVE_INFO = nerve.chainId() == 9 ? NERVE_INFOS.mainnet : nerve.chainId() == 5 ? NERVE_INFOS.testnet : null; // 提现账户信息 var pri = process.env.acc4; var fromAddress = nerve.getAddressByPri(nerve.chainId(), pri); console.log(fromAddress); // 提现接收地址 // let toAddress = 'bchtest:qqla4yswdp3f903jfdpc6egfzglvmrs7nussfx247n'; var toAddress = '0xC9aFB4fA1D7E2B7D324B7cb1178417FF705f5996'; // 提现金额 var withdrawalAmount = '33.31'; // 提现异构链网络ID(ETH:101, BSC:102, HECO:103, OKT:104, ONE:105, MATIC:106, KCS:107, TRX:108) var heterogeneousChainId = 141; // 提现资产信息 5-171: BTC, 5-168: FCH, 5-184: BCH, 9-889:TBC, 9-195:USDT var withdrawalAssetChainId = 5; var withdrawalAssetId = 1; // 提现资产小数位 var withdrawalDecimals = 8; // 提现手续费(NVT) var withdrawalFee = '20'; var feeChain = 'NVT'; var remark = 'withdrawal transaction remarkkkkk...'; //调用 withdrawalTest(pri, fromAddress, toAddress, heterogeneousChainId, withdrawalAssetChainId, withdrawalAssetId, withdrawalAmount, withdrawalDecimals, withdrawalFee, feeChain, remark); // test(); function test() { return _test.apply(this, arguments); } /** * 异构链提现交易 */ function _test() { _test = _asyncToGenerator(function* () { console.log('process.env.tron_test_addr', process.env.tron_test_addr); // let result = await getHeterogeneousMainAsset(102); // console.log(JSON.stringify(result)); }); return _test.apply(this, arguments); } function withdrawalTest(_x, _x2, _x3, _x4, _x5, _x6, _x7, _x8, _x9, _x10, _x11) { return _withdrawalTest.apply(this, arguments); } /** * 获取inputs and outputs * @param transferInfo * @returns {*} **/ function _withdrawalTest() { _withdrawalTest = _asyncToGenerator(function* (pri, fromAddress, toAddress, heterogeneousChainId, assetsChainId, assetsId, withdrawalAmount, withdrawalDecimals, withdrawalFee, feeChain, remark) { // 默认使用NVT作为跨链手续费 if (!feeChain || feeChain == '') { feeChain = 'NVT'; } // 获取手续费资产信息 var feeCoin = NERVE_INFO.htgMainAsset[feeChain]; var newAmount = timesDecimals(withdrawalAmount, withdrawalDecimals).toFixed(); var transferInfo = { fromAddress: fromAddress, toAddress: toAddress, withdrawalFee: withdrawalFee, fee: 0, chainId: assetsChainId, assetId: assetsId, feeCoin: feeCoin, amount: newAmount }; var inOrOutputs = yield inputsOrOutputs(transferInfo); //console.log(inOrOutputs); if (!inOrOutputs.success) { throw "inputs、outputs组装错误"; } var tAssemble = yield nerve.transactionAssemble(inOrOutputs.data.inputs, inOrOutputs.data.outputs, remark, 43, { heterogeneousAddress: toAddress, heterogeneousChainId: heterogeneousChainId }); //获取hash var hash = yield tAssemble.getHash(); //交易签名 var txSignature = yield nerve.getSignDataWithPS(hash.toString('hex'), pri); //通过拼接签名、公钥获取HEX var signData = yield nerve.appSplicingPubWithPS(txSignature.signValue, nerve.getPubByPri(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 _withdrawalTest.apply(this, arguments); } function inputsOrOutputs(_x12) { return _inputsOrOutputs.apply(this, arguments); } function _inputsOrOutputs() { _inputsOrOutputs = _asyncToGenerator(function* (transferInfo) { var feeCoin = transferInfo.feeCoin; var withdrawalBalance = yield getNulsBalance(transferInfo.fromAddress, transferInfo.chainId, transferInfo.assetId); var feeAmount = timesDecimals(transferInfo.withdrawalFee, feeCoin.decimals).toFixed(); var inputs = []; if (transferInfo.chainId === feeCoin.chainId && transferInfo.assetId === feeCoin.assetId) { var newAmount = Plus(transferInfo.amount, feeAmount).toFixed(); inputs.push({ address: transferInfo.fromAddress, amount: newAmount, assetsChainId: transferInfo.chainId, assetsId: transferInfo.assetId, nonce: withdrawalBalance.data.nonce, locked: 0 }); } else { var feeBalance = yield getNulsBalance(transferInfo.fromAddress, feeCoin.chainId, feeCoin.assetId); inputs = [{ address: transferInfo.fromAddress, amount: transferInfo.amount, assetsChainId: transferInfo.chainId, assetsId: transferInfo.assetId, nonce: withdrawalBalance.data.nonce, locked: 0 }, { address: transferInfo.fromAddress, amount: feeAmount, assetsChainId: feeCoin.chainId, assetsId: feeCoin.assetId, nonce: feeBalance.data.nonce, locked: 0 }]; } var feeAddress = nerve.getAddressByPub(NERVE_INFO.chainId, NERVE_INFO.assetId, NERVE_INFO.feePubkey, NERVE_INFO.prefix); var outputs = [{ address: NERVE_INFO.blockHoleAddress, //黑洞地址 amount: transferInfo.amount, assetsChainId: transferInfo.chainId, assetsId: transferInfo.assetId, locked: 0 }, { address: feeAddress, //提现费用地址 amount: feeAmount, assetsChainId: feeCoin.chainId, assetsId: feeCoin.assetId, locked: 0 }]; return { success: true, data: { inputs: inputs, outputs: outputs } }; }); return _inputsOrOutputs.apply(this, arguments); }