UNPKG

nerve-sdk-js

Version:
454 lines (384 loc) 12.5 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 BufferReader = require("./utils/bufferreader"); var txsignatures = require("./model/txsignatures"); var sdk = require('./api/sdk'); var txs = require('./model/txs'); var eccrypto = require("./crypto/eciesCrypto"); var axios = require('axios').default; var API_CHAIN_ID; module.exports = { mainnet() { API_CHAIN_ID = 9; axios.defaults.timeout = 9000; axios.defaults.baseURL = 'https://public.nerve.network'; }, testnet() { API_CHAIN_ID = 5; axios.defaults.timeout = 9000; axios.defaults.baseURL = 'https://beta.public.nerve.network'; }, customnet(chainId, url, timeout) { API_CHAIN_ID = chainId; axios.defaults.baseURL = url; if (!timeout) { axios.defaults.timeout = 9000; } else { axios.defaults.timeout = timeout; } }, chainId() { return API_CHAIN_ID; }, getPubByPri(pri) { return sdk.getPub(pri); }, getAddressByPri(chainId, pri) { return sdk.getStringAddress(chainId, pri); }, /** * 生成地址 * @param chainId * @param passWord * @param prefix * @returns {{}} */ newAddress(chainId, passWord, prefix) { var addressInfo = { "prefix": prefix }; if (passWord) { addressInfo = sdk.newEcKey(passWord); addressInfo.aesPri = sdk.encrypteByAES(addressInfo.pri, passWord); addressInfo.pri = null; } else { addressInfo = sdk.newEcKey(passWord); } addressInfo.address = sdk.getStringAddress(chainId, addressInfo.pri, addressInfo.pub, prefix); return addressInfo; }, /** * 根据公钥获取地址 * @param chainId * @param type * @param pub * @param prefix * @returns {*|string} */ getAddressByPub(chainId, type, pub, prefix) { return sdk.getStringAddressBase(chainId, type, '', pub, prefix); }, /** * 验证地址 * @param address * @returns {*} */ verifyAddress(address) { return sdk.verifyAddress(address); }, /** * 导入地址 * @param chainId * @param pri * @param passWord * @param prefix * @returns {{}} */ importByKey(chainId, pri, passWord, prefix) { var addressInfo = {}; var patrn = /^[A-Fa-f0-9]+$/; if (!patrn.exec(pri)) { //判断私钥是否为16进制 return { success: false, data: 'Bad private key format' }; } addressInfo.pri = pri; addressInfo.address = sdk.getStringAddress(chainId, pri, null, prefix); addressInfo.pub = sdk.getPub(pri); if (passWord) { addressInfo.aesPri = sdk.encrypteByAES(addressInfo.pri, passWord); addressInfo.pri = null; } return addressInfo; }, /** * 组装交易 * @param inputs * @param outputs * @param remark * @param type * @param info * @returns {Array} */ transactionAssemble(inputs, outputs, remark, type, info) { var tt = []; if (type === 2) { //转账交易 tt = new txs.TransferTransaction(); } else if (type === 3) { //设置别名 tt = new txs.AliasTransaction(info.fromAddress, info.alias); } else if (type === 4) { //创建节点 tt = new txs.CreateAgentTransaction(info); } else if (type === 5) { //加入staking tt = new txs.addStakingTransaction(info); } else if (type === 6) { //nvt退出staking 锁定7天 outputs[0].lockTime ? tt = new txs.outStakingTransaction(info, outputs[0].lockTime - 86400 * 7) : tt = new txs.outStakingTransaction(info); // tt = new txs.outStakingTransaction(info, outputs[0].lockTime - 86400 * 7); } else if (type === 9) { //注销节点 锁定15天 =86400*15 tt = new txs.StopAgentTransaction(info, outputs[0].lockTime - 86400 * 15); } else if (type === 10) { //跨链转账 tt = new txs.CrossChainTransaction(); } else if (type === 28) { //追加保证金 tt = new txs.DepositTransaction(info); } else if (type === 29) { //退出保证金 tt = new txs.WithdrawTransaction(info); } else if (type === 32) { //批量退出 outputs[0].lockTime ? tt = new txs.batchOutStakingTransaction(info, outputs[0].lockTime - 86400 * 7) : tt = new txs.batchOutStakingTransaction(info); } else if (type === 33) { //批量合并 tt = new txs.batchMergeTransaction(info); } else if (type === 43) { //跨链提现 tt = new txs.WithdrawalTransaction(info); } else if (type === 56) { //提现追加手续费 tt = new txs.AdditionFeeTransaction(info); } else if (type === 61) { //创建Swap交易对 tt = new txs.SwapCreatePairTransaction(info); } else if (type === 64) { //Swap添加流动性 tt = new txs.SwapAddLiquidityTransaction(info); } else if (type === 65) { //Swap移除流动性 tt = new txs.SwapRemoveLiquidityTransaction(info); } else if (type === 63) { //Swap币币交易 tt = new txs.SwapTradeTransaction(info); } else if (type === 62) { //创建挖矿池 tt = new txs.FarmCreateTransaction(info); } else if (type === 66) { //质押挖矿 tt = new txs.FarmStakeTransaction(info); } else if (type === 67) { //退出质押 tt = new txs.FarmWithdrawTransaction(info); } else if (type === 71) { //创建Stable-Swap交易对 tt = new txs.StableSwapCreatePairTransaction(info); } else if (type === 72) { //Stable-Swap币币交易 tt = new txs.StableSwapTradeTransaction(info); } else if (type === 73) { //Stable-Swap添加流动性 tt = new txs.StableSwapAddLiquidityTransaction(info); } else if (type === 74) { //Stable-Swap移除流动性 tt = new txs.StableSwapRemoveLiquidityTransaction(info); } else if (type === 75) { //Stable-Swap移除流动性 tt = new txs.FarmUpdateTransaction(info); } else if (type === 77) { //Stable-Lp-Swap-Trade交易 tt = new txs.StableLpSwapTradeTransaction(info); } else if (type === 83) { //Swap-Trade-Stable-Remove-Lp Swap交易聚合稳定币撤销流动性交易 tt = new txs.SwapTradeStableRemoveLpTransaction(info); } else if (type === 228) { //创建交易对 tt = new txs.CoinTradingTransaction(info); } else if (type === 229) { //委托挂单 tt = new txs.TradingOrderTransaction(info); } else if (type === 230) { //取消委托挂单 tt = new txs.CancelTradingOrderTransaction(info); } tt.setCoinData(inputs, outputs); tt.remark = remark; return tt; }, /** * 交易签名 * @param pri * @param pub * @param tAssemble * @returns {boolean} */ transactionSerialize(pri, pub, tAssemble) { sdk.signatureTx(tAssemble, pri, pub); return tAssemble.txSerialize().toString('hex'); }, transactionSerializeWithPS(pri, pub, tAssemble) { var _this = this; return _asyncToGenerator(function* () { var hash = tAssemble.getHash().toString('hex'); var signData = yield sdk.getSignDataWithPS(hash, pri); tAssemble.signatures = _this.appSplicingPubWithPS(signData.signValue, pub); return tAssemble.txSerialize().toString('hex'); })(); }, getSignDataWithPS(hashHex, priHex) { return _asyncToGenerator(function* () { var signData = yield sdk.getSignDataWithPS(hashHex, priHex); return signData; })(); }, /** * @disc: App签名,拼接公钥 * @date: 2019-12-03 16:01 * @author: Wave */ appSplicingPub: function appSplicingPub(signValue, pubHex) { return sdk.appSplicingPub(signValue, pubHex); }, appSplicingPubWithPS: function appSplicingPubWithPS(signValue, pubHex) { return sdk.appSplicingPubWithPS(signValue, pubHex); }, /** * 交易签名原数据(使用personal_sign) */ getSignMessageWithPS(hashHex) { return sdk.getSignMessageWithPS(hashHex); }, /** * 交易签名 * @param pri * @param tAssemble * @returns {boolean} */ transactionSignature(pri, tAssemble) { return sdk.signatureTransaction(tAssemble, pri); }, /** * 解密私钥 * @param aesPri * @param password * @returns {*} */ decrypteOfAES(aesPri, password) { return sdk.decrypteOfAES(aesPri, password); }, /** * 公钥加密内容 * @param pub * @param data * @returns {Promise<string>} */ encryptOfECIES(pub, data) { return _asyncToGenerator(function* () { var bufferData = Buffer.from(data); var encrypted = yield eccrypto.encrypt(pub, bufferData); return encrypted.toString("hex"); })(); }, /** * 私钥解密内容 * @param pri * @param encrypted * @returns {Promise<string>} */ decryptOfECIES(pri, encrypted) { return _asyncToGenerator(function* () { var bufferData = Buffer.from(encrypted, "hex"); var decrypted = yield eccrypto.decrypt(pri, bufferData); return decrypted.toString(); })(); }, /** * 追加签名 * @params: txHex 签名hex * @params: prikeyHex 追加签名私钥 * @date: 2020-08-12 15:24 * @author: Wave **/ appendSignature(txHex, prikeyHex) { // 解析交易 var bufferReader = new BufferReader(Buffer.from(txHex, "hex"), 0); // 反序列回交易对象 var tx = new txs.Transaction(); tx.parse(bufferReader); // 初始化签名对象 var txSignData = new txsignatures.TransactionSignatures(); // 反序列化签名对象 var reader = new BufferReader(tx.signatures, 0); txSignData.parse(reader); //获取本账户公钥 var pub = sdk.getPub(prikeyHex); // 签名 var sigHex = sdk.signature(tx.getHash().toString("hex"), prikeyHex); var signValue = Buffer.from(sigHex, 'hex'); // 追加签名到对象中 txSignData.addSign(Buffer.from(pub, "hex"), signValue); // 追加签名到交易中 tx.signatures = txSignData.serialize(); //计算交易hash tx.calcHash(); //console.log(tx.getHash().toString("hex")); // 结果 //console.log(tx.txSerialize().toString("hex")); return { success: true, data: { hash: tx.getHash().toString("hex"), hex: tx.txSerialize().toString("hex") } }; }, /** * 反序列化交易 * @param txHex * @returns {Transaction} */ deserializationTx(txHex) { // 解析交易 var bufferReader = new BufferReader(Buffer.from(txHex, "hex"), 0); // 反序列回交易对象 var tx = new txs.Transaction(); tx.parse(bufferReader); return tx; }, programEncodePacked(args) { return sdk.newProgramEncodePacked(args); }, parseProgramEncodePacked(data) { return sdk.parseProgramEncodePacked(data); }, getL1Fee(htgChainId, ethNetworkGasPrice) { return sdk.getL1Fee(htgChainId, ethNetworkGasPrice); }, getNulsL1Fee(htgChainId, decimals) { return sdk.getNulsL1Fee(htgChainId, decimals); } }; var swap = require("./utils/swap"); module.exports.swap = swap; var rpcUtil = require('./test/api/util'); var broadcastTx = /*#__PURE__*/function () { var _ref = _asyncToGenerator(function* (txhex) { var result = yield rpcUtil.validateTx(txhex); if (result.success) { var results = yield rpcUtil.broadcastTx(txhex); if (results && results.value) { return results.hash; } else { return "广播交易失败: " + JSON.stringify(results); } } else { return "验证交易失败:" + JSON.stringify(result); } }); return function broadcastTx(_x) { return _ref.apply(this, arguments); }; }(); module.exports.broadcastTx = broadcastTx; var btc = require("./utils/bitcoin"); module.exports.bitcoin = btc; var fch = require("./utils/freecash"); module.exports.fch = fch; var bch = require("./utils/bitcoincash"); module.exports.bch = bch; var tbcLib = require("./utils/tbc/tbc"); module.exports.tbcLib = tbcLib;