@dahlia-labs/use-ethers
Version:
Multicall extensions to ethers.
87 lines • 3.97 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getToken = exports.allowanceMulticall = exports.totalSupplyMulticall = exports.decimalsMulticall = exports.symbolMulticall = exports.nameMulticall = exports.balanceOfMulticall = exports.getTokenContract = exports.getTokenContractFromAddress = exports.tokenInterface = exports.getTokenInterface = void 0;
const tslib_1 = require("tslib");
const token_utils_1 = require("@dahlia-labs/token-utils");
const abi_1 = require("@ethersproject/abi");
const erc20_json_1 = tslib_1.__importDefault(require("./abis/erc20.json"));
const contracts_1 = require("./contracts");
const index_1 = require("./index");
function getTokenInterface() {
return new abi_1.Interface(erc20_json_1.default);
}
exports.getTokenInterface = getTokenInterface;
exports.tokenInterface = getTokenInterface();
const getTokenContractFromAddress = (address, provider) => (0, contracts_1.getContract)(address, erc20_json_1.default, provider);
exports.getTokenContractFromAddress = getTokenContractFromAddress;
const getTokenContract = (token, provider) => (0, contracts_1.getContract)(token.address, erc20_json_1.default, provider);
exports.getTokenContract = getTokenContract;
const balanceOfMulticall = (token, address) => ({
call: {
target: token.address,
callData: exports.tokenInterface.encodeFunctionData("balanceOf", [address]),
},
parseReturn: (returnData) => new token_utils_1.TokenAmount(token, exports.tokenInterface.decodeFunctionResult("balanceOf", returnData).toString()),
});
exports.balanceOfMulticall = balanceOfMulticall;
const nameMulticall = (tokenAddress) => ({
call: {
target: tokenAddress,
callData: exports.tokenInterface.encodeFunctionData("name"),
},
parseReturn: (returnData) => exports.tokenInterface.decodeFunctionResult("name", returnData).toString(),
});
exports.nameMulticall = nameMulticall;
const symbolMulticall = (tokenAddress) => ({
call: {
target: tokenAddress,
callData: exports.tokenInterface.encodeFunctionData("symbol"),
},
parseReturn: (returnData) => exports.tokenInterface.decodeFunctionResult("symbol", returnData).toString(),
});
exports.symbolMulticall = symbolMulticall;
const decimalsMulticall = (tokenAddress) => ({
call: {
target: tokenAddress,
callData: exports.tokenInterface.encodeFunctionData("decimals"),
},
parseReturn: (returnData) => +exports.tokenInterface.decodeFunctionResult("decimals", returnData).toString(),
});
exports.decimalsMulticall = decimalsMulticall;
const totalSupplyMulticall = (token) => ({
call: {
target: token.address,
callData: exports.tokenInterface.encodeFunctionData("totalSupply"),
},
parseReturn: (returnData) => new token_utils_1.TokenAmount(token, exports.tokenInterface
.decodeFunctionResult("totalSupply", returnData)
.toString()),
});
exports.totalSupplyMulticall = totalSupplyMulticall;
const allowanceMulticall = (token, address, spender) => ({
call: {
target: token.address,
callData: exports.tokenInterface.encodeFunctionData("allowance", [
address,
spender,
]),
},
parseReturn: (returnData) => new token_utils_1.TokenAmount(token, exports.tokenInterface.decodeFunctionResult("allowance", returnData).toString()),
});
exports.allowanceMulticall = allowanceMulticall;
const getToken = async (multicallContract, address, chainId) => {
const multicallData = await (0, index_1.fetchMulticalls)([
(0, exports.nameMulticall)(address),
(0, exports.symbolMulticall)(address),
(0, exports.decimalsMulticall)(address),
], multicallContract);
return new token_utils_1.Token({
chainId,
address,
name: multicallData[0],
symbol: multicallData[1],
decimals: multicallData[2],
});
};
exports.getToken = getToken;
//# sourceMappingURL=token.js.map