butterjs-sdk
Version:
Butter Network SDK
65 lines (64 loc) • 2.21 kB
JavaScript
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.batchGetToChainToken = exports.batchGetRelayChainToken = void 0;
const web3_1 = __importDefault(require("web3"));
const bn_js_1 = __importDefault(require("bn.js"));
/**
* get relaychain token in batch to improve speed
* @param contract
* @param fromChainId
* @param tokenAddressArr
* @param mapRpcUrl
*/
async function batchGetRelayChainToken(contract, fromChainId, tokenAddressArr, mapRpcUrl) {
let calls = [];
for (let i = 0; i < tokenAddressArr.length; i++) {
const fromTokenAddress = tokenAddressArr[i];
calls.push(contract.methods.getRelayChainToken(fromChainId, fromTokenAddress).call);
}
return await _makeBatchRequest(calls, mapRpcUrl);
}
exports.batchGetRelayChainToken = batchGetRelayChainToken;
/**
* get tochain token in batch to improve speed
* @param contract
* @param tokenAddressArr
* @param toChain
* @param mapRpcUrl
*/
async function batchGetToChainToken(contract, tokenAddressArr, toChain, mapRpcUrl) {
let calls = [];
for (let i = 0; i < tokenAddressArr.length; i++) {
const tokenAddress = tokenAddressArr[i];
calls.push(contract.methods.getToChainToken(tokenAddress, new bn_js_1.default(toChain, 10)).call);
}
return await _makeBatchRequest(calls, mapRpcUrl);
}
exports.batchGetToChainToken = batchGetToChainToken;
/**
* make actual batch request using web3.js's batch request
* @param calls
* @param mapRpcUrl
*/
function _makeBatchRequest(calls, mapRpcUrl) {
const web3 = new web3_1.default(mapRpcUrl);
const batch = new web3.BatchRequest();
const promises = calls.map((call) => {
return new Promise((resolve, reject) => {
// @ts-ignore
const req = call.request({}, (err, data) => {
if (err)
reject(err);
else
resolve(data);
});
batch.add(req);
});
});
batch.execute();
// @ts-ignore
return Promise.all(promises);
}
;