nerve-sdk-js
Version:
nerve nerve-js nerve-sdk nerve-js-sdk
329 lines (285 loc) • 14.5 kB
JavaScript
const nerve = require('../index');
const {NERVE_INFOS, RPC_URL} = require('./htgConfig');
let isMainnet = true;
if (isMainnet) {
nerve.mainnet();
} else {
nerve.testnet();
}
let NERVE_INFO = nerve.chainId() == 9 ? NERVE_INFOS.mainnet : nerve.chainId() == 5 ? NERVE_INFOS.testnet : null;
const api_ethers = require('./api_ethers');
const util = require('./api/util');
const ethers = require("ethers");
// 9-445 metis
// 9-446 iotx
// 9-447 op
// 9-448 klay
// 9-449 bch
async function getPrice(chainId, assetId) {
let withdrawCoinPrice = await util.getSymbolPriceOfUsdt(chainId, assetId);
console.log(withdrawCoinPrice, "withdrawCoinPrice", chainId + "-" + assetId);
}
// getPrice(9, 445);
// getPrice(9, 446);
// getPrice(9, 447);
// getPrice(9, 448);
// getPrice(9, 449);
// 917958010468536
// f();
// withdrawalToETH(isMainnet);
// withdrawalToOETH(isMainnet);
// withdrawalToKAVA(isMainnet);
// withdrawalToBSC(isMainnet);
// withdrawalToHECO(isMainnet);
// withdrawalToOKT(isMainnet);
// withdrawalToONE(isMainnet);
// withdrawalToMATIC(isMainnet);
// withdrawalToKCS(isMainnet);
// withdrawalToTRX(isMainnet, 'TRX');
// withdrawalToCRO(isMainnet);
// withdrawalToFTM(isMainnet);
// withdrawalToFTMByNVT(isMainnet);
// withdrawalToLineaByNVT(isMainnet);
// withdrawalToLineaByNVT(isMainnet);
// withdrawalToLineaByETH(isMainnet);
// withdrawalToLineaByETH(isMainnet);
// withdrawalToAvaxByNVT(isMainnet);
// withdrawalToAvaxByETH(isMainnet);
// withdrawalToPolygon(isMainnet);
// withdrawalToScrollByNVT(isMainnet);
// withdrawalToScrollByETH(isMainnet);
// withdrawalToSomeoneByNVT("SCROLL", isMainnet);
// withdrawalToSomeoneByETH("SCROLL", isMainnet);
// withdrawalToSomeoneByNVT("BASE", isMainnet);
// withdrawalToSomeoneByETH("BASE", isMainnet);
// withdrawalToSomeoneByNVT("OP", isMainnet);
// withdrawalToSomeoneByETH("OP", isMainnet);
// withdrawalToL2SomeoneByETH("BASE", 129, isMainnet);
// withdrawalToL2SomeoneByETH("MANTA", 133, isMainnet);
// withdrawalToL2SomeoneByNVT("MANTA", 133, isMainnet);
// withdrawalToL2SomeoneByETH("OP", 115, isMainnet);
// withdrawalToL2SomeoneByNVT("OP", 115, isMainnet);
// withdrawalToL2SomeoneByETH("BASE", 129, isMainnet);
withdrawalToL2SomeoneByNVT("BASE", 129, isMainnet);
// withdrawalToL2SomeoneByETH("SCROLL", 130, isMainnet);
// withdrawalToL2SomeoneByNVT("SCROLL", 130, isMainnet);
// let provider = new ethers.providers.JsonRpcProvider('https://geth.nerve.network');
// getWithdrawGas(new ethers.providers.JsonRpcProvider('https://geth.nerve.network'))
// getWithdrawGas(new ethers.providers.JsonRpcProvider('https://eth.drpc.org/'))
// withdrawalToL2SomeoneByNVT("BLAST", 139, isMainnet);
// withdrawalToSomeoneByNVT("REI", isMainnet);
// withdrawalToSomeoneByOwnMainAsset("REI", isMainnet);
async function getWithdrawGas(provider) {
return provider.getGasPrice().then((gasPrice) => {
console.log('gasPrice', provider.connection.url, ethers.utils.formatUnits(gasPrice, 9), 'gasPriceHex', gasPrice)
return gasPrice;
});
}
async function withdrawalToL2SomeoneByETH(chain, htgChainId, isMainnet) {
// let ethRpc = isMainnet ? "https://geth.nerve.network" : "https://rpc.ankr.com/eth_goerli";
let ethRpc = isMainnet ? "https://cloudflare-eth.com" : "https://rpc.ankr.com/eth_goerli";
// const ethGasPrice = new ethers.utils.BigNumber("47486431180");
let provider = new ethers.providers.JsonRpcProvider(ethRpc);
const ethGasPrice = await getWithdrawGas(provider);
console.log(ethers.utils.formatUnits(ethGasPrice, 9), 'eth gasPrice');
let providerChain = api_ethers.getProvider(chain, isMainnet ? "main" : "test");
const chainGasPrice = await getWithdrawGas(providerChain);
console.log(ethers.utils.formatUnits(chainGasPrice, 9), chain + 'gasPrice');
let feeNumber = ethers.utils.formatUnits(chainGasPrice.mul(210000), 18);
console.log("提现到"+chain+"网络需要L2Fee的ETH:" + feeNumber);
let l1Fee = nerve.getL1Fee(htgChainId, ethGasPrice);
console.log("提现到"+chain+"网络需要L1Fee的ETH:" + ethers.utils.formatUnits(l1Fee, 18));
console.log("提现到"+chain+"网络需要totalFee的ETH:" + ethers.utils.formatUnits(l1Fee.add(ethers.utils.parseUnits(feeNumber, 18)), 18));
console.log("-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=")
}
async function withdrawalToL2SomeoneByNVT(chain, htgChainId, isMainnet) {
let nerveChainId = isMainnet ? 9 : 5;
// let ethRpc = isMainnet ? "https://geth.nerve.network" : "https://rpc.ankr.com/eth_goerli";
let ethRpc = isMainnet ? "https://eth.drpc.org/" : "https://rpc.ankr.com/eth_goerli";
let feeNumber = await calcFee(chain, isMainnet, true, "NVT");
console.log("提现到"+chain+"网络需要的NVT:" + feeNumber);
let nvtCoinPrice = await util.getSymbolPriceOfUsdt(nerveChainId, 1, 'FEE');
let ethCoinPrice = await util.getSymbolPriceOfUsdt(nerveChainId, 2);
console.log(nvtCoinPrice, "nvtCoinPrice");
console.log(ethCoinPrice, "ethCoinPrice");
let provider = new ethers.providers.JsonRpcProvider(ethRpc);
const gasPrice = await getWithdrawGas(provider);
// const gasPrice = '54861998732';
console.log(ethers.utils.formatUnits(gasPrice, 9), 'eth gasPrice');
let l1Fee = nerve.getL1Fee(htgChainId, gasPrice);
let nvtTemp = l1Fee.mul(ethers.utils.parseUnits(ethCoinPrice, 18)).mul(ethers.utils.parseUnits("1", 18)).div(ethers.utils.parseUnits(nvtCoinPrice, 18));
let l1FeeNvtNumber = ethers.utils.formatUnits(nvtTemp, 36)
console.log("提现到"+chain+"网络需要L1Fee的ETH:" + ethers.utils.formatUnits(l1Fee, 18));
console.log("提现到"+chain+"网络需要L1Fee的NVT:" + l1FeeNvtNumber);
console.log("提现到"+chain+"网络需要totalFee的NVT:" + (Number(l1FeeNvtNumber) + Number(feeNumber)));
console.log("-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=")
}
async function withdrawalToOETH(isMainnet) {
let feeNumber = await calcFee("OETH", isMainnet, true, "NVT");
console.log("提现到OETH网络:" + feeNumber);
}
async function withdrawalToKAVA(isMainnet) {
let feeNumber = await calcFee("KAVA", isMainnet, true, "NVT");
console.log("提现到KAVA网络:" + feeNumber);
}
async function withdrawalToETH(isMainnet) {
let feeNumber = await calcFee("ETH", isMainnet, true, "BNB");
console.log("提现到ETH网络:" + feeNumber);
}
async function withdrawalToBSC(isMainnet) {
let feeNumber = await calcFee("BNB", isMainnet, true, "NVT");
console.log("提现到BSC网络:" + feeNumber);
}
async function withdrawalToHECO(isMainnet) {
let feeNumber = await calcFee("HT", isMainnet, true, "ONE");
console.log("提现到HECO网络:" + feeNumber);
}
async function withdrawalToOKT(isMainnet) {
let feeNumber = await calcFee("OKT", isMainnet, true, "NVT");
console.log("提现到OKT网络:" + feeNumber);
}
async function withdrawalToONE(isMainnet) {
let feeNumber = await calcFee("ONE", isMainnet, true, "NVT");
console.log("提现到ONE网络:" + feeNumber);
}
async function withdrawalToMATIC(isMainnet) {
let feeNumber = await calcFee("MATIC", isMainnet, true, "NVT");
console.log("提现到MATIC网络:" + feeNumber);
}
async function withdrawalToKCS(isMainnet) {
let feeNumber = await calcFee("KCS", isMainnet, true, "NVT");
console.log("提现到KCS网络:" + feeNumber);
}
async function withdrawalToTRX(isMainnet, feeChain = "NVT") {
let feeNumber = await calcFee("TRX", isMainnet, true, feeChain);
console.log("提现到TRX网络:" + feeNumber);
}
async function withdrawalToCRO(isMainnet) {
let feeNumber = await calcFee("CRO", isMainnet, true, "NVT");
console.log("提现到CRO网络:" + feeNumber);
}
async function withdrawalToFTM(isMainnet) {
let feeNumber = await calcFee("FTM", isMainnet, false, "FTM");
console.log("提现到FTM网络:" + feeNumber);
}
async function withdrawalToFTMByNVT(isMainnet) {
let feeNumber = await calcFee("FTM", isMainnet, false, "NVT");
console.log("提现到FTM网络:" + feeNumber);
}
async function withdrawalToLineaByNVT(isMainnet) {
let feeNumber = await calcFee("LINEA", isMainnet, true, "NVT");
console.log("提现到LINEA网络:" + feeNumber);
console.log("1.1倍+5个: ", Number(feeNumber) * 1.1 + 5)
console.log("1.2倍+5个: ", Number(feeNumber) * 1.2 + 5)
console.log("1.5倍+5个: ", Number(feeNumber) * 1.5 + 5)
}
async function withdrawalToLineaByETH(isMainnet) {
let feeNumber = await calcFee("LINEA", isMainnet, true, "ETH");
console.log("提现到LINEA网络:" + feeNumber);
console.log("1.2倍: ", Number(feeNumber) * 1.2)
console.log("1.5倍: ", Number(feeNumber) * 1.5)
}
async function withdrawalToScrollByNVT(isMainnet) {
let feeNumber = await calcFee("SCROLL", isMainnet, true, "NVT");
console.log("提现到SCROLL网络需要的NVT:" + feeNumber);
console.log("1.1倍+5个: ", Number(feeNumber) * 1.1 + 5)
console.log("1.2倍+5个: ", Number(feeNumber) * 1.2 + 5)
console.log("1.5倍+5个: ", Number(feeNumber) * 1.5 + 5)
}
async function withdrawalToScrollByETH(isMainnet) {
let feeNumber = await calcFee("SCROLL", isMainnet, true, "ETH");
console.log("提现到SCROLL网络需要的ETH:" + feeNumber);
console.log("1.2倍ETH: ", Number(feeNumber) * 1.2)
console.log("1.5倍ETH: ", Number(feeNumber) * 1.5)
}
async function withdrawalToSomeoneByNVT(chain, isMainnet) {
let feeNumber = await calcFee(chain, isMainnet, true, "NVT");
console.log("提现到"+chain+"网络需要的NVT:" + feeNumber);
// console.log("1.1倍+5个: ", Number(feeNumber) * 1.1 + 5)
// console.log("1.2倍+5个: ", Number(feeNumber) * 1.2 + 5)
// console.log("1.5倍+5个: ", Number(feeNumber) * 1.5 + 5)
console.log(chain + ", 15倍+5个: ", Number(feeNumber) * 15 + 5)
console.log(chain + ", 20倍+5个: ", Number(feeNumber) * 20 + 5)
console.log(chain + ", 200倍+5个: ", Number(feeNumber) * 200 + 5)
}
async function withdrawalToSomeoneByETH(chain, isMainnet) {
let feeNumber = await calcFee(chain, isMainnet, true, "ETH");
console.log("提现到"+chain+"网络需要的ETH:" + feeNumber);
// console.log("1.2倍ETH: ", Number(feeNumber) * 1.2)
// console.log("1.5倍ETH: ", Number(feeNumber) * 1.5)
console.log(chain + ", 15倍ETH: ", Number(feeNumber) * 15)
console.log(chain + ", 20倍ETH: ", Number(feeNumber) * 20)
console.log(chain + ", 2000倍ETH: ", Number(feeNumber) * 2000)
}
async function withdrawalToSomeoneByOwnMainAsset(chain, isMainnet) {
let feeNumber = await calcFee(chain, isMainnet, true, chain);
console.log("提现到"+chain+"网络需要的" + chain + ":" + feeNumber);
console.log(chain + ", 1.2倍: ", Number(feeNumber) * 1.2)
console.log(chain + ", 1.5倍: ", Number(feeNumber) * 1.5)
console.log(chain + ", 15倍: ", Number(feeNumber) * 15)
console.log(chain + ", 20倍: ", Number(feeNumber) * 20)
console.log(chain + ", 2000倍: ", Number(feeNumber) * 2000)
}
async function withdrawalToAvaxByNVT(isMainnet) {
let feeNumber = await calcFee("AVAX", isMainnet, true, "NVT");
console.log("提现到AVAX网络:" + feeNumber);
console.log("1.2倍+5个: ", Number(feeNumber) * 1.2 + 5)
console.log("1.5倍+5个: ", Number(feeNumber) * 1.5 + 5)
}
async function withdrawalToAvaxByETH(isMainnet) {
let feeNumber = await calcFee("AVAX", isMainnet, true, "AVAX");
console.log("提现到AVAX网络:" + feeNumber);
console.log("1.2倍: ", Number(feeNumber) * 1.2)
console.log("1.5倍: ", Number(feeNumber) * 1.5)
}
async function withdrawalToPolygon(isMainnet) {
let feeNumber = await calcFee("MATIC", isMainnet, true, "HT");
console.log("提现到Polygon网络:" + feeNumber);
}
async function calcFee(withdrawChain, isMainnet, isToken, feeChain) {
// 默认使用NVT作为跨链手续费
if (!feeChain || feeChain === '') {
feeChain = 'NVT';
}
if (withdrawChain === 'TRX') {
return calcFeeForTRX(isMainnet, isToken, feeChain);
}
let provider = api_ethers.getProvider(withdrawChain, isMainnet ? "main" : "test");
let withdrawCoin = NERVE_INFO.htgMainAsset[withdrawChain];
if (feeChain === withdrawChain) {
let result = await api_ethers.calcMainAssetOfWithdrawProtocol15Test(provider, isToken);
return api_ethers.formatOtherMainAsset(result, withdrawCoin);
}
// 获取资产信息
let feeCoin = NERVE_INFO.htgMainAsset[feeChain];
let feeCoinPrice = await util.getSymbolPriceOfUsdt(feeCoin.chainId, feeCoin.assetId, 'FEE');
// let feeCoinPrice = await util.getSymbolPriceOfUsdt(feeCoin.chainId, feeCoin.assetId);
let withdrawCoinPrice = await util.getSymbolPriceOfUsdt(withdrawCoin.chainId, withdrawCoin.assetId);
console.log(feeCoinPrice, "feeCoinPrice", feeChain);
console.log(withdrawCoinPrice, "withdrawCoinPrice", withdrawChain);
let result = await api_ethers.calcOtherMainAssetOfWithdrawTest(provider, feeCoin, feeCoinPrice, withdrawCoinPrice, isToken);
return api_ethers.formatOtherMainAsset(result, feeCoin);
}
async function calcFeeForTRX(isMainnet, isToken, feeChain) {
let withdrawChain = 'TRX';
let withdrawCoin = NERVE_INFO.htgMainAsset[withdrawChain];
if (feeChain === withdrawChain) {
return api_ethers.formatOtherMainAsset(NERVE_INFO.trxWithdrawFee, withdrawCoin);
}
// 获取资产信息
let feeCoin = NERVE_INFO.htgMainAsset[feeChain];
let feeCoinPrice = await util.getSymbolPriceOfUsdt(feeCoin.chainId, feeCoin.assetId);
let withdrawCoinPrice = await util.getSymbolPriceOfUsdt(withdrawCoin.chainId, withdrawCoin.assetId);
// console.log(feeCoinPrice, "feeCoinPrice", feeChain);
// console.log(withdrawCoinPrice, "withdrawCoinPrice", withdrawChain);
let result = await api_ethers.calcOtherMainAssetOfWithdrawForTRX(feeCoin, feeCoinPrice, withdrawCoinPrice, NERVE_INFO.trxWithdrawFee);
return api_ethers.formatOtherMainAsset(result, feeCoin);
}
async function f() {
let provider = api_ethers.getProvider("BNB", "test");
let nvtFeeCoin = NERVE_INFO.htgMainAsset['NVT'];
let nvtPrice = '0.0355';
let htgPrice = '504.482';
let result = await api_ethers.calcOtherMainAssetOfWithdrawTest(provider, nvtFeeCoin, nvtPrice, htgPrice, true);
console.log(api_ethers.formatNVT(result));
}