@bcpros/crypto-wallet-core
Version:
A multi-currency support library for address derivation, private key creation, and transaction creation
47 lines • 1.96 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.ERC20TxProvider = void 0;
const web3_1 = __importDefault(require("web3"));
const eth_1 = require("../eth");
const abi_1 = require("./abi");
const { toBN } = web3_1.default.utils;
class ERC20TxProvider extends eth_1.ETHTxProvider {
getERC20Contract(tokenContractAddress) {
const web3 = new web3_1.default();
const contract = new web3.eth.Contract(abi_1.ERC20Abi, tokenContractAddress);
return contract;
}
create(params) {
const { tokenAddress, contractAddress } = params;
const data = this.encodeData(params);
const recipients = [{ address: contractAddress || tokenAddress, amount: '0' }];
const newParams = { ...params, recipients, data };
return super.create(newParams);
}
encodeData(params) {
const { tokenAddress, recipients, contractAddress } = params;
if (recipients.length > 1) {
const addresses = [];
const amounts = [];
for (let recipient of recipients) {
addresses.push(recipient.address);
amounts.push(toBN(BigInt(recipient.amount).toString()));
}
const multisendContract = this.getMultiSendContract(contractAddress);
return multisendContract.methods.sendErc20(tokenAddress, addresses, amounts).encodeABI();
}
else {
const [{ address, amount }] = params.recipients;
const amountBN = toBN(BigInt(amount).toString());
const data = this.getERC20Contract(tokenAddress)
.methods.transfer(address, amountBN)
.encodeABI();
return data;
}
}
}
exports.ERC20TxProvider = ERC20TxProvider;
//# sourceMappingURL=index.js.map