crypto-ducatus-wallet-core
Version:
A multi-currency support library for address derivation, private key creation, and transaction creation
37 lines (34 loc) • 1.21 kB
text/typescript
import Web3 from 'web3';
import { ETHTxProvider } from '../eth';
import { ERC20Abi } from './abi';
export class ERC20TxProvider extends ETHTxProvider {
getERC20Contract(tokenContractAddress: string) {
const web3 = new Web3();
const contract = new web3.eth.Contract(ERC20Abi, tokenContractAddress);
return contract;
}
create(params: {
recipients: Array<{ address: string; amount: string }>;
nonce: number;
gasPrice: number;
data: string;
gasLimit: number;
tokenAddress: string;
chainId?: number;
}) {
const { tokenAddress } = params;
const data = this.encodeData(params);
const recipients = [{ address: tokenAddress, amount: '0' }];
const newParams = { ...params, recipients, data };
return super.create(newParams);
}
encodeData(params: { recipients: Array<{ address: string; amount: string }>; tokenAddress: string }) {
const { tokenAddress } = params;
const [{ address, amount }] = params.recipients;
const amountStr = Number(amount).toLocaleString('en', { useGrouping: false });
const data = this.getERC20Contract(tokenAddress)
.methods.transfer(address, amountStr)
.encodeABI();
return data;
}
}