evm-blockchain-tools
Version:
This is a collection of resuseable tools to support development for EVM-powered blockchains
75 lines (62 loc) • 1.86 kB
text/typescript
import { Signer } from "ethers";
import { ContractModel } from "./contract-model";
import { ContractTxOption, Waitable } from "../common/interfaces";
export interface IERC20Model extends ContractModel {
name(): Promise<string>;
symbol(): Promise<string>;
decimals(): Promise<string>;
balanceOf(address: string): Promise<string>;
mint(
address: string,
amount: string,
options?: ContractTxOption
): Promise<Waitable>;
burn(amount: string, options?: ContractTxOption): Promise<Waitable>;
burnFrom(
address: string,
amount: string,
options?: ContractTxOption
): Promise<Waitable>;
}
export class ERC20ContractModel extends ContractModel implements IERC20Model {
constructor(address: string, abi: any, signer: Signer) {
super(address, abi, signer);
}
public async transfer(
address: string,
amount: string,
options?: ContractTxOption
): Promise<Waitable> {
return this.contract.transfer(address, amount, options);
}
public async balanceOf(address: string): Promise<string> {
const bn = await this.contract.balanceOf(address);
return bn.toString();
}
public name(): Promise<string> {
return this.contract.name();
}
public symbol(): Promise<string> {
return this.contract.symbol();
}
public decimals(): Promise<string> {
return this.contract.decimals();
}
public mint(
address: string,
amount: string,
options?: ContractTxOption
): Promise<Waitable> {
return this.contract.mint(address, amount, options);
}
public burn(amount: string, options?: ContractTxOption): Promise<Waitable> {
return this.contract.burn(amount, options);
}
public burnFrom(
address: string,
amount: string,
options?: ContractTxOption
): Promise<Waitable> {
return this.contract.burnFrom(address, amount, options);
}
}