nerve-sdk-js
Version:
nerve nerve-js nerve-sdk nerve-js-sdk
454 lines (384 loc) • 12.5 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 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;