nerve-sdk-js
Version:
nerve nerve-js nerve-sdk nerve-js-sdk
90 lines (79 loc) • 2.63 kB
JavaScript
const nerve = require('../index');
nerve.testnet();
const {getNulsBalance, countFee, inputsOrOutputs, validateTx, broadcastTx} = require('./api/util');
/**
* @disc: 转账 dome
* @date: 2020-05-20 13:47
* @author: Wave
*/
let pri = '';
let pub = nerve.getPubByPri(pri);
let fromAddress = "TNVTdTSPNEpLq2wnbsBcD8UDTVMsArtkfxWgz";
let toAddress = 'TNVTdTSPUZYyUW8ThLzJXWdgWaDFSy5trakjk';
let amount = 800000000;
let remark = 'transfer transaction remark...';
//调用
transferTransaction(pri, pub, fromAddress, toAddress, 2, 1, amount, remark);
/**
* 转账交易
* @param pri
* @param pub
* @param fromAddress
* @param toAddress
* @param assetsChainId
* @param assetsId
* @param amount
* @param remark
* @returns {Promise<void>}
*/
async function transferTransaction(pri, pub, fromAddress, toAddress, assetsChainId, assetsId, amount, remark) {
const balanceInfo = await getNulsBalance(fromAddress);
console.log(balanceInfo);
if (!balanceInfo.success) {
console.log("获取账户balanceInfo错误");
return;
}
let transferInfo = {
fromAddress: fromAddress,
toAddress: toAddress,
assetsChainId: assetsChainId,
assetsId: assetsId,
amount: amount,
fee: 100000
};
let newAmount = transferInfo.amount + transferInfo.fee;
if (balanceInfo.data.balance < newAmount) {
console.log("余额不住,请更换账户");
return;
}
let inOrOutputs = await inputsOrOutputs(transferInfo, balanceInfo.data, 2);
if (!inOrOutputs.success) {
console.log("inputOutputs组装失败!");
return;
}
let tAssemble = await nerve.transactionAssemble(inOrOutputs.data.inputs, inOrOutputs.data.outputs, remark, 2);//交易组装
let txhex = "";//交易签名
let newFee = countFee(tAssemble, 1); //获取手续费
//手续费大于0.001的时候重新组装交易及签名
if (transferInfo.fee !== newFee) {
transferInfo.fee = newFee;
inOrOutputs = await inputsOrOutputs(transferInfo, balanceInfo.data, 2);
tAssemble = await nerve.transactionAssemble(inOrOutputs.data.inputs, inOrOutputs.data.outputs, remark, 2);
txhex = await nerve.transactionSerialize(pri, pub, tAssemble);
} else {
txhex = await nerve.transactionSerialize(pri, pub, tAssemble);
}
console.log(txhex);
let result = await validateTx(txhex);
if (result.success) {
console.log(result.data.value);
let results = await broadcastTx(txhex);
if (results && results.value) {
console.log("交易完成")
} else {
console.log("广播交易失败")
}
} else {
console.log("验证交易失败:" + JSON.stringify(result.error))
}
}