nerve-sdk-js
Version:
nerve nerve-js nerve-sdk nerve-js-sdk
141 lines (113 loc) • 4.76 kB
JavaScript
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);
}