nerve-sdk-js
Version:
nerve nerve-js nerve-sdk nerve-js-sdk
117 lines (94 loc) • 3.8 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');
var {
getNulsBalance,
countFee,
inputsOrOutputs,
validateTx,
broadcastTx
} = require('./api/util'); // nerve.customnet(5, "http://127.0.0.1:17004/jsonrpc");
nerve.testnet();
require('dotenv').config();
/**
* @disc: 转账 dome
* @date: 2020-05-20 13:47
* @author: Wave
*/
var pri = process.env.acc4;
var pub = nerve.getPubByPri(pri);
var fromAddress = nerve.getAddressByPri(nerve.chainId(), pri);
console.log('fromAddress', fromAddress);
var toAddress = 'TNVTdTSPUZYyUW8ThLzJXWdgWaDFSy5trakjk';
var amount = 800000000;
var remark = 'transfer transaction remark...'; //调用
transferTransaction(pri, pub, fromAddress, toAddress, 5, 1, amount, remark);
/**
* 转账交易
* @param pri
* @param pub
* @param fromAddress
* @param toAddress
* @param assetsChainId
* @param assetsId
* @param amount
* @param remark
* @returns {Promise<void>}
*/
function transferTransaction(_x, _x2, _x3, _x4, _x5, _x6, _x7, _x8) {
return _transferTransaction.apply(this, arguments);
}
function _transferTransaction() {
_transferTransaction = _asyncToGenerator(function* (pri, pub, fromAddress, toAddress, assetsChainId, assetsId, amount, remark) {
var balanceInfo = yield getNulsBalance(fromAddress);
console.log(balanceInfo);
if (!balanceInfo.success) {
console.log("获取账户balanceInfo错误");
return;
}
var transferInfo = {
fromAddress: fromAddress,
toAddress: toAddress,
assetsChainId: assetsChainId,
assetsId: assetsId,
amount: amount,
fee: 100000
};
var newAmount = transferInfo.amount + transferInfo.fee;
if (balanceInfo.data.balance < newAmount) {
console.log("余额不足,请更换账户");
return;
}
var inOrOutputs = yield inputsOrOutputs(transferInfo, balanceInfo.data, 2);
if (!inOrOutputs.success) {
console.log("inputOutputs组装失败!");
return;
}
var tAssemble = yield nerve.transactionAssemble(inOrOutputs.data.inputs, inOrOutputs.data.outputs, remark, 2); //交易组装
var txhex = ""; //交易签名
var newFee = countFee(tAssemble, 1); //获取手续费
//手续费大于0.001的时候重新组装交易及签名
if (transferInfo.fee !== newFee) {
transferInfo.fee = newFee;
inOrOutputs = yield inputsOrOutputs(transferInfo, balanceInfo.data, 2);
tAssemble = yield nerve.transactionAssemble(inOrOutputs.data.inputs, inOrOutputs.data.outputs, remark, 2);
txhex = yield nerve.transactionSerializeWithPS(pri, pub, tAssemble);
} else {
txhex = yield nerve.transactionSerializeWithPS(pri, pub, tAssemble);
}
console.log(txhex);
var result = yield validateTx(txhex);
if (result.success) {
console.log(result.data.value);
var results = yield broadcastTx(txhex);
if (results && results.value) {
console.log("交易完成");
} else {
console.log("广播交易失败");
}
} else {
console.log("验证交易失败:" + JSON.stringify(result.error));
}
});
return _transferTransaction.apply(this, arguments);
}