This commit is contained in:
kautukkundan
2022-04-18 05:53:44 +05:30
parent 933a3bf670
commit e4612169ea
33 changed files with 13320 additions and 27705 deletions

2
.env Normal file
View File

@@ -0,0 +1,2 @@
REACT_APP_TOKEN_CONTRACT=0xDc64a140Aa3E981100a9becA4E685f962f0cF6C9
REACT_APP_SPENDER_CONTRACT=0x5FC8d32690cc91D4c39d9d3abcBD16989F875707

View File

@@ -1,46 +1,48 @@
# Getting Started with Create React App
# BLS Wallet Demo App
This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app).
## How to setup
## Available Scripts
1. deploy Generic ERC20 contract with minting ability
In the project directory, you can run:
eg -
### `npm start`
```
//SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
Runs the app in the development mode.\
Open [http://localhost:3000](http://localhost:3000) to view it in the browser.
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
The page will reload if you make edits.\
You will also see any lint errors in the console.
contract Token is ERC20 {
constructor(string memory name_, string memory symbol_)
ERC20(name_, symbol_)
{}
### `npm test`
function mint(address _account, uint256 _amount) public {
_mint(_account, _amount);
}
}
Launches the test runner in the interactive watch mode.\
See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information.
```
### `npm run build`
2. deploy a spender contract (any contract which can pull tokens from user)
Builds the app for production to the `build` folder.\
It correctly bundles React in production mode and optimizes the build for the best performance.
eg -
The build is minified and the filenames include the hashes.\
Your app is ready to be deployed!
```solidity
//SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information.
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
### `npm run eject`
contract Spender {
function pullTokens(address _token, uint256 _amount) public {
IERC20(_token).transferFrom(msg.sender, address(this), _amount);
}
}
```
**Note: this is a one-way operation. Once you `eject`, you cant go back!**
If you arent satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project.
Instead, it will copy all the configuration files and the transitive dependencies (webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point youre on your own.
You dont have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldnt feel obligated to use this feature. However we understand that this tool wouldnt be useful if you couldnt customize it when you are ready for it.
## Learn More
You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started).
To learn React, check out the [React documentation](https://reactjs.org/).
3. note the addresses for the 2 contracts
4. update `.env` file with the 2 addresses
5. run `yarn install`
6. run `yarn start`
7. connect Quill Wallet

27602
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -9,12 +9,18 @@
"@types/jest": "^27.4.1",
"@types/node": "^16.11.26",
"@types/react": "^17.0.43",
"@types/react-blockies": "^1.4.1",
"@types/react-dom": "^17.0.14",
"easy-peasy": "^5.0.4",
"ethers": "^5.6.2",
"phosphor-react": "^1.4.1",
"react": "^17.0.2",
"react-blockies": "^1.4.1",
"react-dom": "^17.0.2",
"react-scripts": "5.0.0",
"typescript": "^4.6.3",
"web-vitals": "^2.1.4"
"web-vitals": "^2.1.4",
"web3modal": "^1.9.5"
},
"scripts": {
"start": "react-scripts start",
@@ -39,5 +45,10 @@
"last 1 firefox version",
"last 1 safari version"
]
},
"devDependencies": {
"autoprefixer": "^10.4.4",
"postcss": "^8.4.12",
"tailwindcss": "^3.0.24"
}
}

6
postcss.config.js Normal file
View File

@@ -0,0 +1,6 @@
module.exports = {
plugins: {
tailwindcss: {},
autoprefixer: {},
},
}

View File

@@ -1,38 +0,0 @@
.App {
text-align: center;
}
.App-logo {
height: 40vmin;
pointer-events: none;
}
@media (prefers-reduced-motion: no-preference) {
.App-logo {
animation: App-logo-spin infinite 20s linear;
}
}
.App-header {
background-color: #282c34;
min-height: 100vh;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
font-size: calc(10px + 2vmin);
color: white;
}
.App-link {
color: #61dafb;
}
@keyframes App-logo-spin {
from {
transform: rotate(0deg);
}
to {
transform: rotate(360deg);
}
}

View File

@@ -1,9 +0,0 @@
import React from 'react';
import { render, screen } from '@testing-library/react';
import App from './App';
test('renders learn react link', () => {
render(<App />);
const linkElement = screen.getByText(/learn react/i);
expect(linkElement).toBeInTheDocument();
});

View File

@@ -1,25 +1,30 @@
import React from 'react';
import logo from './logo.svg';
import './App.css';
import { StoreProvider } from "easy-peasy";
// import Contract from "./components/tokenContract";
import User from "./components/user";
import { store } from "./store";
import Connection from "./components/Connection";
import SpenderContract from "./components/spender";
import User2 from "./components/user2";
function App() {
return (
<div className="App">
<header className="App-header">
<img src={logo} className="App-logo" alt="logo" />
<p>
Edit <code>src/App.tsx</code> and save to reload.
</p>
<a
className="App-link"
href="https://reactjs.org"
target="_blank"
rel="noopener noreferrer"
>
Learn React
</a>
</header>
</div>
<StoreProvider store={store}>
<div className="flex flex-col justify-center items-center w-2/3 mx-auto">
<div className="mb-4">
<Connection />
{/* <Contract /> */}
</div>
<div className="flex w-[70rem] gap-10">
<User />
<SpenderContract />
</div>
<div className="flex w-[70rem] mt-4">
<User2 />
</div>
</div>
</StoreProvider>
);
}

View File

@@ -0,0 +1,92 @@
import { useEffect, useState } from "react";
import { ethers } from "ethers";
import Web3Modal from "web3modal";
import { useStoreActions, useStoreState } from "../store";
import { PenNibStraight, Wallet } from "phosphor-react";
import Blockies from "react-blockies";
declare global {
interface Window {
ethereum: any;
}
}
const Connection = () => {
const [errorMessage, setErrorMessage] = useState<any>(null);
const [connButtonText, setConnButtonText] = useState<any>("Connect");
const [amount, setAmount] = useState<any>("0.0");
const { account, provider } = useStoreState((state) => state);
const setGlobalProvider = useStoreActions((actions) => actions.setProvider);
const setAcc = useStoreActions((actions) => actions.setAccount);
const connectWalletHandler = async () => {
if (window.ethereum && account === "") {
const providerOptions = {};
const web3Modal = new Web3Modal({
providerOptions, // required
});
const instance = await web3Modal.connect();
const provider = new ethers.providers.Web3Provider(instance);
setGlobalProvider(provider);
window.ethereum
.request({ method: "eth_accounts" })
.then((result: any) => {
setConnButtonText("Connected");
setAcc(result[0]);
});
} else if (!window.ethereum) {
console.log("Need to install MetaMask");
setErrorMessage("Please install MetaMask browser extension to interact");
}
};
const fetchBalance = async () => {
const amount = await provider.getBalance(account);
setAmount(ethers.utils.formatEther(amount));
};
useEffect(() => {
provider && fetchBalance();
}, [account]);
return (
<div className="py-8">
<div className=" flex justify-between items-center py-8 w-[70rem]">
<div className="text-3xl font-medium flex items-center gap-2">
<PenNibStraight weight="duotone" size={28} color={"#60a5fa"} />
BLS Wallet - ERC20 Demo <sup>beta</sup>
</div>
<button
className="bg-blue-400 rounded-xl px-4 py-2 text-white font-semibold flex items-center gap-2"
onClick={connectWalletHandler}
>
<Wallet weight="duotone" size={28} /> {connButtonText}
</button>
</div>
{errorMessage}
{account && (
<div className="bg-slate-100 p-8 rounded-xl flex items-center gap-4">
<Blockies
seed={account + "random"}
className="rounded-md"
size={5}
scale={10}
/>
<div className="">
<div className="text-lg font-bold">{account}</div>
<div className="text-lg font-normal">{amount} ETH</div>
</div>
</div>
)}
</div>
);
};
export default Connection;

14
src/components/Loader.tsx Normal file
View File

@@ -0,0 +1,14 @@
const Loader = () => {
return (
<div className="flex items-center justify-center text-3xl font-extrabold">
<div
className="spinner-border animate-spin inline-block w-6 h-6 border-4 rounded-full"
role="status"
>
<span className="visually-hidden">.</span>
</div>
</div>
);
};
export default Loader;

View File

@@ -0,0 +1,96 @@
import { ethers } from "ethers";
import { MaskHappy } from "phosphor-react";
import { useEffect, useState } from "react";
import { useStoreActions, useStoreState } from "../store";
import { Token, Token__factory } from "../typechain";
import { Spender__factory } from "../typechain/factories/Spender__factory";
import { Spender } from "../typechain/Spender";
import Loader from "./Loader";
const SpenderContract = () => {
const { contract, provider, spender, account, reload } = useStoreState(
(state) => state
);
const { setReload } = useStoreActions((actions) => actions);
const [tokenBalance, setTokenBalance] = useState("0.0");
const [allowance, setAllowance] = useState("0.0");
const [pending, setPending] = useState(false);
const getContract = () => {
return new ethers.Contract(
spender,
Spender__factory.createInterface(),
provider
) as Spender;
};
const updateAllowance = async () => {
const erc20 = getTokenContract();
const allowance = await erc20.allowance(account, spender);
setAllowance(ethers.utils.formatEther(allowance));
console.log(allowance);
};
const pullTokens = async () => {
const spender = getContract();
const signer = provider.getSigner();
const tx = await spender
.connect(signer)
.pullTokens(contract, ethers.utils.parseEther("10"));
setPending(true);
await tx.wait();
await updateTokenBalance();
await updateAllowance();
setReload(true);
setPending(false);
};
const getTokenContract = () => {
return new ethers.Contract(
contract,
Token__factory.createInterface(),
provider
) as Token;
};
const updateTokenBalance = async () => {
const erc20 = getTokenContract();
const balance = await erc20.balanceOf(spender);
setTokenBalance(ethers.utils.formatEther(balance));
};
useEffect(() => {
if (provider) {
updateTokenBalance();
updateAllowance();
}
setReload(false);
}, [spender, contract, provider, reload]);
return (
<div className="bg-gray-700 rounded-xl w-1/2">
<div className="text-[2rem] p-8 text-white flex items-center gap-3">
<MaskHappy weight="duotone" size={52} /> SPENDER {pending && <Loader />}
</div>
<div className="text-[8rem] px-8 text-white leading-none flex items-baseline gap-4 mb-10">
{tokenBalance} <div className="text-[2rem] font-black">TOKENS</div>
</div>
<div className="flex w-full justify-center text-xl text-white border-t-2 border-white ">
<button
className="p-4 font-black hover:text-slate-400 disabled:text-gray-500"
onClick={async () => await pullTokens()}
>
PULL TOKENS (10)
</button>
</div>
</div>
);
};
export default SpenderContract;

View File

@@ -0,0 +1,30 @@
import { useStoreState } from "../store";
const Contract = () => {
const { contract, spender } = useStoreState((state) => state);
// const setContract = useStoreActions((actions) => actions.setContract);
// const [updatedContract, setUpdatedContract] = useState("");
return (
<div className="bg-slate-100 p-5 rounded-xl flex flex-col gap-1">
{/* <input
type="contract"
onChange={(e) => setUpdatedContract(e.target.value)}
/>
<button
onClick={() => {
if (updatedContract !== "") {
setContract(updatedContract);
}
}}
>
Set Token Contract
</button> */}
<div className="text-sm font-medium">TOKEN: {contract}</div>
<div className="text-sm font-medium">SPENDER: {spender}</div>
</div>
);
};
export default Contract;

112
src/components/user.tsx Normal file
View File

@@ -0,0 +1,112 @@
import { ethers } from "ethers";
import { FinnTheHuman } from "phosphor-react";
import { useEffect, useState } from "react";
import { useStoreActions, useStoreState } from "../store";
import { Token, Token__factory } from "../typechain";
import Loader from "./Loader";
const User = () => {
const { contract, provider, account, spender, reload } = useStoreState(
(state) => state
);
const { setReload } = useStoreActions((actions) => actions);
const [tokenBalance, setTokenBalance] = useState("0.0");
const [pending, setPending] = useState(false);
const getContract = () => {
return new ethers.Contract(
contract,
Token__factory.createInterface(),
provider
) as Token;
};
const updateTokenBalance = async () => {
const erc20 = getContract();
const balance = await erc20.balanceOf(account);
setTokenBalance(ethers.utils.formatEther(balance));
setReload(false);
};
const mintTokens = async () => {
const erc20 = getContract();
const signer = provider.getSigner();
const tx = await erc20
.connect(signer)
.mint(account, ethers.utils.parseEther("10"));
setPending(true);
await tx.wait();
setPending(false);
await updateTokenBalance();
};
const approveTokens = async () => {
const erc20 = getContract();
const signer = provider.getSigner();
const tx = await erc20
.connect(signer)
.approve(spender, ethers.utils.parseEther("10"));
setPending(true);
await tx.wait();
setReload(true);
setPending(false);
};
const transferTokens = async () => {
const erc20 = new ethers.Contract(
contract,
Token__factory.createInterface(),
provider
) as Token;
const signer = provider.getSigner();
await erc20
.connect(signer)
.transfer(account, ethers.utils.parseEther("20"));
};
useEffect(() => {
provider && updateTokenBalance();
}, [account, contract, provider]);
useEffect(() => {
updateTokenBalance();
}, [reload]);
return (
<div className="bg-blue-400 rounded-xl w-1/2">
<div className="text-[2rem] p-8 text-white flex items-center gap-3">
<FinnTheHuman weight="duotone" size={52} /> YOU-SER{" "}
{pending && <Loader />}
</div>
<div className="text-[8rem] px-8 text-white leading-none flex items-baseline gap-4 mb-10">
{tokenBalance} <div className="text-[2rem] font-black">TOKENS</div>
</div>
<div className="flex w-full text-xl text-white border-t-2 border-white">
<button
className="w-1/2 p-4 border-r-2 border-white font-black hover:text-gray-700"
onClick={async () => await mintTokens()}
>
MINT (10)
</button>
<button
className="w-1/2 p-4 font-black hover:text-gray-700"
onClick={async () => await approveTokens()}
>
APPROVE
</button>
</div>
</div>
);
};
export default User;

83
src/components/user2.tsx Normal file
View File

@@ -0,0 +1,83 @@
import { ethers } from "ethers";
import { FinnTheHuman } from "phosphor-react";
import { useEffect, useState } from "react";
import { useStoreActions, useStoreState } from "../store";
import { Spender, Spender__factory, Token, Token__factory } from "../typechain";
import Loader from "./Loader";
const User2 = () => {
const { contract, provider, account, spender, reload } = useStoreState(
(state) => state
);
const { setReload } = useStoreActions((actions) => actions);
const [tokenBalance, setTokenBalance] = useState("0.0");
const [pending, setPending] = useState(false);
const getTokenContract = () => {
return new ethers.Contract(
contract,
Token__factory.createInterface(),
provider
) as Token;
};
const getSpender = () => {
return new ethers.Contract(
spender,
Spender__factory.createInterface(),
provider
) as Spender;
};
const bundleUp = async () => {
const erc20 = getTokenContract();
const signer = provider.getSigner();
const mintTx = await erc20
.connect(signer)
.populateTransaction.mint(account, ethers.utils.parseEther("10"));
const aproveTx = await erc20
.connect(signer)
.populateTransaction.approve(spender, ethers.utils.parseEther("10"));
const spenderContract = getSpender();
const pulltx = await spenderContract
.connect(signer)
.populateTransaction.pullTokens(contract, ethers.utils.parseEther("10"));
console.log([mintTx, aproveTx, pulltx]);
setPending(true);
const txHash = await window.ethereum.request({
method: "eth_sendTransaction",
params: [mintTx, aproveTx, pulltx],
});
const interval = setInterval(async function () {
console.log("Attempting to get transaction receipt...");
const rec = await provider.getTransactionReceipt(txHash);
if (rec) {
setReload(true);
setPending(false);
clearInterval(interval);
}
}, 2000);
};
return (
<button
className="p-4 font-black hover:text-gray-700 bg-teal-500 text-white rounded-xl w-full mt-10 text-center"
onClick={async () => await bundleUp()}
>
<div className="text-[1.5rem] flex gap-2 justify-center">
BUNDLE UP {pending && <Loader />}
</div>
MINT (10) + APPROVE + PULL
</button>
);
};
export default User2;

View File

@@ -1,13 +1,16 @@
@import url("https://fonts.googleapis.com/css2?family=Montserrat:wght@100;200;300;400;500;600&display=swap");
body {
margin: 0;
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
sans-serif;
font-family: "Montserrat", sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
code {
font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',
font-family: source-code-pro, Menlo, Monaco, Consolas, "Courier New",
monospace;
}
@tailwind base;
@tailwind components;
@tailwind utilities;

45
src/store.tsx Normal file
View File

@@ -0,0 +1,45 @@
import { action, Action, createStore, createTypedHooks } from "easy-peasy";
import { ethers } from "ethers";
interface StoreModel {
contract: string;
spender: string;
account: string;
provider: any;
reload: boolean;
setContract: Action<StoreModel, string>;
setSpender: Action<StoreModel, string>;
setAccount: Action<StoreModel, string>;
setProvider: Action<StoreModel, ethers.providers.Web3Provider>;
setReload: Action<StoreModel, boolean>;
}
export const store = createStore<StoreModel>({
account: "",
contract: process.env.REACT_APP_TOKEN_CONTRACT || "",
spender: process.env.REACT_APP_SPENDER_CONTRACT || "",
provider: null,
reload: false,
setAccount: action((state, payload) => {
state.account = payload;
}),
setContract: action((state, payload) => {
state.contract = payload;
}),
setSpender: action((state, payload) => {
state.spender = payload;
}),
setProvider: action((state, payload) => {
state.provider = payload;
}),
setReload: action((state, payload) => {
state.reload = payload;
}),
});
const typedHooks = createTypedHooks<StoreModel>();
export const useStoreActions = typedHooks.useStoreActions;
export const useStoreState = typedHooks.useStoreState;

441
src/typechain/ERC20.d.ts vendored Normal file
View File

@@ -0,0 +1,441 @@
/* Autogenerated file. Do not edit manually. */
/* tslint:disable */
/* eslint-disable */
import {
ethers,
EventFilter,
Signer,
BigNumber,
BigNumberish,
PopulatedTransaction,
BaseContract,
ContractTransaction,
Overrides,
CallOverrides,
} from "ethers";
import { BytesLike } from "@ethersproject/bytes";
import { Listener, Provider } from "@ethersproject/providers";
import { FunctionFragment, EventFragment, Result } from "@ethersproject/abi";
import type { TypedEventFilter, TypedEvent, TypedListener } from "./common";
interface ERC20Interface extends ethers.utils.Interface {
functions: {
"allowance(address,address)": FunctionFragment;
"approve(address,uint256)": FunctionFragment;
"balanceOf(address)": FunctionFragment;
"decimals()": FunctionFragment;
"decreaseAllowance(address,uint256)": FunctionFragment;
"increaseAllowance(address,uint256)": FunctionFragment;
"name()": FunctionFragment;
"symbol()": FunctionFragment;
"totalSupply()": FunctionFragment;
"transfer(address,uint256)": FunctionFragment;
"transferFrom(address,address,uint256)": FunctionFragment;
};
encodeFunctionData(
functionFragment: "allowance",
values: [string, string]
): string;
encodeFunctionData(
functionFragment: "approve",
values: [string, BigNumberish]
): string;
encodeFunctionData(functionFragment: "balanceOf", values: [string]): string;
encodeFunctionData(functionFragment: "decimals", values?: undefined): string;
encodeFunctionData(
functionFragment: "decreaseAllowance",
values: [string, BigNumberish]
): string;
encodeFunctionData(
functionFragment: "increaseAllowance",
values: [string, BigNumberish]
): string;
encodeFunctionData(functionFragment: "name", values?: undefined): string;
encodeFunctionData(functionFragment: "symbol", values?: undefined): string;
encodeFunctionData(
functionFragment: "totalSupply",
values?: undefined
): string;
encodeFunctionData(
functionFragment: "transfer",
values: [string, BigNumberish]
): string;
encodeFunctionData(
functionFragment: "transferFrom",
values: [string, string, BigNumberish]
): string;
decodeFunctionResult(functionFragment: "allowance", data: BytesLike): Result;
decodeFunctionResult(functionFragment: "approve", data: BytesLike): Result;
decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result;
decodeFunctionResult(functionFragment: "decimals", data: BytesLike): Result;
decodeFunctionResult(
functionFragment: "decreaseAllowance",
data: BytesLike
): Result;
decodeFunctionResult(
functionFragment: "increaseAllowance",
data: BytesLike
): Result;
decodeFunctionResult(functionFragment: "name", data: BytesLike): Result;
decodeFunctionResult(functionFragment: "symbol", data: BytesLike): Result;
decodeFunctionResult(
functionFragment: "totalSupply",
data: BytesLike
): Result;
decodeFunctionResult(functionFragment: "transfer", data: BytesLike): Result;
decodeFunctionResult(
functionFragment: "transferFrom",
data: BytesLike
): Result;
events: {
"Approval(address,address,uint256)": EventFragment;
"Transfer(address,address,uint256)": EventFragment;
};
getEvent(nameOrSignatureOrTopic: "Approval"): EventFragment;
getEvent(nameOrSignatureOrTopic: "Transfer"): EventFragment;
}
export type ApprovalEvent = TypedEvent<
[string, string, BigNumber] & {
owner: string;
spender: string;
value: BigNumber;
}
>;
export type TransferEvent = TypedEvent<
[string, string, BigNumber] & { from: string; to: string; value: BigNumber }
>;
export class ERC20 extends BaseContract {
connect(signerOrProvider: Signer | Provider | string): this;
attach(addressOrName: string): this;
deployed(): Promise<this>;
listeners<EventArgsArray extends Array<any>, EventArgsObject>(
eventFilter?: TypedEventFilter<EventArgsArray, EventArgsObject>
): Array<TypedListener<EventArgsArray, EventArgsObject>>;
off<EventArgsArray extends Array<any>, EventArgsObject>(
eventFilter: TypedEventFilter<EventArgsArray, EventArgsObject>,
listener: TypedListener<EventArgsArray, EventArgsObject>
): this;
on<EventArgsArray extends Array<any>, EventArgsObject>(
eventFilter: TypedEventFilter<EventArgsArray, EventArgsObject>,
listener: TypedListener<EventArgsArray, EventArgsObject>
): this;
once<EventArgsArray extends Array<any>, EventArgsObject>(
eventFilter: TypedEventFilter<EventArgsArray, EventArgsObject>,
listener: TypedListener<EventArgsArray, EventArgsObject>
): this;
removeListener<EventArgsArray extends Array<any>, EventArgsObject>(
eventFilter: TypedEventFilter<EventArgsArray, EventArgsObject>,
listener: TypedListener<EventArgsArray, EventArgsObject>
): this;
removeAllListeners<EventArgsArray extends Array<any>, EventArgsObject>(
eventFilter: TypedEventFilter<EventArgsArray, EventArgsObject>
): this;
listeners(eventName?: string): Array<Listener>;
off(eventName: string, listener: Listener): this;
on(eventName: string, listener: Listener): this;
once(eventName: string, listener: Listener): this;
removeListener(eventName: string, listener: Listener): this;
removeAllListeners(eventName?: string): this;
queryFilter<EventArgsArray extends Array<any>, EventArgsObject>(
event: TypedEventFilter<EventArgsArray, EventArgsObject>,
fromBlockOrBlockhash?: string | number | undefined,
toBlock?: string | number | undefined
): Promise<Array<TypedEvent<EventArgsArray & EventArgsObject>>>;
interface: ERC20Interface;
functions: {
allowance(
owner: string,
spender: string,
overrides?: CallOverrides
): Promise<[BigNumber]>;
approve(
spender: string,
amount: BigNumberish,
overrides?: Overrides & { from?: string | Promise<string> }
): Promise<ContractTransaction>;
balanceOf(account: string, overrides?: CallOverrides): Promise<[BigNumber]>;
decimals(overrides?: CallOverrides): Promise<[number]>;
decreaseAllowance(
spender: string,
subtractedValue: BigNumberish,
overrides?: Overrides & { from?: string | Promise<string> }
): Promise<ContractTransaction>;
increaseAllowance(
spender: string,
addedValue: BigNumberish,
overrides?: Overrides & { from?: string | Promise<string> }
): Promise<ContractTransaction>;
name(overrides?: CallOverrides): Promise<[string]>;
symbol(overrides?: CallOverrides): Promise<[string]>;
totalSupply(overrides?: CallOverrides): Promise<[BigNumber]>;
transfer(
to: string,
amount: BigNumberish,
overrides?: Overrides & { from?: string | Promise<string> }
): Promise<ContractTransaction>;
transferFrom(
from: string,
to: string,
amount: BigNumberish,
overrides?: Overrides & { from?: string | Promise<string> }
): Promise<ContractTransaction>;
};
allowance(
owner: string,
spender: string,
overrides?: CallOverrides
): Promise<BigNumber>;
approve(
spender: string,
amount: BigNumberish,
overrides?: Overrides & { from?: string | Promise<string> }
): Promise<ContractTransaction>;
balanceOf(account: string, overrides?: CallOverrides): Promise<BigNumber>;
decimals(overrides?: CallOverrides): Promise<number>;
decreaseAllowance(
spender: string,
subtractedValue: BigNumberish,
overrides?: Overrides & { from?: string | Promise<string> }
): Promise<ContractTransaction>;
increaseAllowance(
spender: string,
addedValue: BigNumberish,
overrides?: Overrides & { from?: string | Promise<string> }
): Promise<ContractTransaction>;
name(overrides?: CallOverrides): Promise<string>;
symbol(overrides?: CallOverrides): Promise<string>;
totalSupply(overrides?: CallOverrides): Promise<BigNumber>;
transfer(
to: string,
amount: BigNumberish,
overrides?: Overrides & { from?: string | Promise<string> }
): Promise<ContractTransaction>;
transferFrom(
from: string,
to: string,
amount: BigNumberish,
overrides?: Overrides & { from?: string | Promise<string> }
): Promise<ContractTransaction>;
callStatic: {
allowance(
owner: string,
spender: string,
overrides?: CallOverrides
): Promise<BigNumber>;
approve(
spender: string,
amount: BigNumberish,
overrides?: CallOverrides
): Promise<boolean>;
balanceOf(account: string, overrides?: CallOverrides): Promise<BigNumber>;
decimals(overrides?: CallOverrides): Promise<number>;
decreaseAllowance(
spender: string,
subtractedValue: BigNumberish,
overrides?: CallOverrides
): Promise<boolean>;
increaseAllowance(
spender: string,
addedValue: BigNumberish,
overrides?: CallOverrides
): Promise<boolean>;
name(overrides?: CallOverrides): Promise<string>;
symbol(overrides?: CallOverrides): Promise<string>;
totalSupply(overrides?: CallOverrides): Promise<BigNumber>;
transfer(
to: string,
amount: BigNumberish,
overrides?: CallOverrides
): Promise<boolean>;
transferFrom(
from: string,
to: string,
amount: BigNumberish,
overrides?: CallOverrides
): Promise<boolean>;
};
filters: {
"Approval(address,address,uint256)"(
owner?: string | null,
spender?: string | null,
value?: null
): TypedEventFilter<
[string, string, BigNumber],
{ owner: string; spender: string; value: BigNumber }
>;
Approval(
owner?: string | null,
spender?: string | null,
value?: null
): TypedEventFilter<
[string, string, BigNumber],
{ owner: string; spender: string; value: BigNumber }
>;
"Transfer(address,address,uint256)"(
from?: string | null,
to?: string | null,
value?: null
): TypedEventFilter<
[string, string, BigNumber],
{ from: string; to: string; value: BigNumber }
>;
Transfer(
from?: string | null,
to?: string | null,
value?: null
): TypedEventFilter<
[string, string, BigNumber],
{ from: string; to: string; value: BigNumber }
>;
};
estimateGas: {
allowance(
owner: string,
spender: string,
overrides?: CallOverrides
): Promise<BigNumber>;
approve(
spender: string,
amount: BigNumberish,
overrides?: Overrides & { from?: string | Promise<string> }
): Promise<BigNumber>;
balanceOf(account: string, overrides?: CallOverrides): Promise<BigNumber>;
decimals(overrides?: CallOverrides): Promise<BigNumber>;
decreaseAllowance(
spender: string,
subtractedValue: BigNumberish,
overrides?: Overrides & { from?: string | Promise<string> }
): Promise<BigNumber>;
increaseAllowance(
spender: string,
addedValue: BigNumberish,
overrides?: Overrides & { from?: string | Promise<string> }
): Promise<BigNumber>;
name(overrides?: CallOverrides): Promise<BigNumber>;
symbol(overrides?: CallOverrides): Promise<BigNumber>;
totalSupply(overrides?: CallOverrides): Promise<BigNumber>;
transfer(
to: string,
amount: BigNumberish,
overrides?: Overrides & { from?: string | Promise<string> }
): Promise<BigNumber>;
transferFrom(
from: string,
to: string,
amount: BigNumberish,
overrides?: Overrides & { from?: string | Promise<string> }
): Promise<BigNumber>;
};
populateTransaction: {
allowance(
owner: string,
spender: string,
overrides?: CallOverrides
): Promise<PopulatedTransaction>;
approve(
spender: string,
amount: BigNumberish,
overrides?: Overrides & { from?: string | Promise<string> }
): Promise<PopulatedTransaction>;
balanceOf(
account: string,
overrides?: CallOverrides
): Promise<PopulatedTransaction>;
decimals(overrides?: CallOverrides): Promise<PopulatedTransaction>;
decreaseAllowance(
spender: string,
subtractedValue: BigNumberish,
overrides?: Overrides & { from?: string | Promise<string> }
): Promise<PopulatedTransaction>;
increaseAllowance(
spender: string,
addedValue: BigNumberish,
overrides?: Overrides & { from?: string | Promise<string> }
): Promise<PopulatedTransaction>;
name(overrides?: CallOverrides): Promise<PopulatedTransaction>;
symbol(overrides?: CallOverrides): Promise<PopulatedTransaction>;
totalSupply(overrides?: CallOverrides): Promise<PopulatedTransaction>;
transfer(
to: string,
amount: BigNumberish,
overrides?: Overrides & { from?: string | Promise<string> }
): Promise<PopulatedTransaction>;
transferFrom(
from: string,
to: string,
amount: BigNumberish,
overrides?: Overrides & { from?: string | Promise<string> }
): Promise<PopulatedTransaction>;
};
}

324
src/typechain/IERC20.d.ts vendored Normal file
View File

@@ -0,0 +1,324 @@
/* Autogenerated file. Do not edit manually. */
/* tslint:disable */
/* eslint-disable */
import {
ethers,
EventFilter,
Signer,
BigNumber,
BigNumberish,
PopulatedTransaction,
BaseContract,
ContractTransaction,
Overrides,
CallOverrides,
} from "ethers";
import { BytesLike } from "@ethersproject/bytes";
import { Listener, Provider } from "@ethersproject/providers";
import { FunctionFragment, EventFragment, Result } from "@ethersproject/abi";
import type { TypedEventFilter, TypedEvent, TypedListener } from "./common";
interface IERC20Interface extends ethers.utils.Interface {
functions: {
"allowance(address,address)": FunctionFragment;
"approve(address,uint256)": FunctionFragment;
"balanceOf(address)": FunctionFragment;
"totalSupply()": FunctionFragment;
"transfer(address,uint256)": FunctionFragment;
"transferFrom(address,address,uint256)": FunctionFragment;
};
encodeFunctionData(
functionFragment: "allowance",
values: [string, string]
): string;
encodeFunctionData(
functionFragment: "approve",
values: [string, BigNumberish]
): string;
encodeFunctionData(functionFragment: "balanceOf", values: [string]): string;
encodeFunctionData(
functionFragment: "totalSupply",
values?: undefined
): string;
encodeFunctionData(
functionFragment: "transfer",
values: [string, BigNumberish]
): string;
encodeFunctionData(
functionFragment: "transferFrom",
values: [string, string, BigNumberish]
): string;
decodeFunctionResult(functionFragment: "allowance", data: BytesLike): Result;
decodeFunctionResult(functionFragment: "approve", data: BytesLike): Result;
decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result;
decodeFunctionResult(
functionFragment: "totalSupply",
data: BytesLike
): Result;
decodeFunctionResult(functionFragment: "transfer", data: BytesLike): Result;
decodeFunctionResult(
functionFragment: "transferFrom",
data: BytesLike
): Result;
events: {
"Approval(address,address,uint256)": EventFragment;
"Transfer(address,address,uint256)": EventFragment;
};
getEvent(nameOrSignatureOrTopic: "Approval"): EventFragment;
getEvent(nameOrSignatureOrTopic: "Transfer"): EventFragment;
}
export type ApprovalEvent = TypedEvent<
[string, string, BigNumber] & {
owner: string;
spender: string;
value: BigNumber;
}
>;
export type TransferEvent = TypedEvent<
[string, string, BigNumber] & { from: string; to: string; value: BigNumber }
>;
export class IERC20 extends BaseContract {
connect(signerOrProvider: Signer | Provider | string): this;
attach(addressOrName: string): this;
deployed(): Promise<this>;
listeners<EventArgsArray extends Array<any>, EventArgsObject>(
eventFilter?: TypedEventFilter<EventArgsArray, EventArgsObject>
): Array<TypedListener<EventArgsArray, EventArgsObject>>;
off<EventArgsArray extends Array<any>, EventArgsObject>(
eventFilter: TypedEventFilter<EventArgsArray, EventArgsObject>,
listener: TypedListener<EventArgsArray, EventArgsObject>
): this;
on<EventArgsArray extends Array<any>, EventArgsObject>(
eventFilter: TypedEventFilter<EventArgsArray, EventArgsObject>,
listener: TypedListener<EventArgsArray, EventArgsObject>
): this;
once<EventArgsArray extends Array<any>, EventArgsObject>(
eventFilter: TypedEventFilter<EventArgsArray, EventArgsObject>,
listener: TypedListener<EventArgsArray, EventArgsObject>
): this;
removeListener<EventArgsArray extends Array<any>, EventArgsObject>(
eventFilter: TypedEventFilter<EventArgsArray, EventArgsObject>,
listener: TypedListener<EventArgsArray, EventArgsObject>
): this;
removeAllListeners<EventArgsArray extends Array<any>, EventArgsObject>(
eventFilter: TypedEventFilter<EventArgsArray, EventArgsObject>
): this;
listeners(eventName?: string): Array<Listener>;
off(eventName: string, listener: Listener): this;
on(eventName: string, listener: Listener): this;
once(eventName: string, listener: Listener): this;
removeListener(eventName: string, listener: Listener): this;
removeAllListeners(eventName?: string): this;
queryFilter<EventArgsArray extends Array<any>, EventArgsObject>(
event: TypedEventFilter<EventArgsArray, EventArgsObject>,
fromBlockOrBlockhash?: string | number | undefined,
toBlock?: string | number | undefined
): Promise<Array<TypedEvent<EventArgsArray & EventArgsObject>>>;
interface: IERC20Interface;
functions: {
allowance(
owner: string,
spender: string,
overrides?: CallOverrides
): Promise<[BigNumber]>;
approve(
spender: string,
amount: BigNumberish,
overrides?: Overrides & { from?: string | Promise<string> }
): Promise<ContractTransaction>;
balanceOf(account: string, overrides?: CallOverrides): Promise<[BigNumber]>;
totalSupply(overrides?: CallOverrides): Promise<[BigNumber]>;
transfer(
to: string,
amount: BigNumberish,
overrides?: Overrides & { from?: string | Promise<string> }
): Promise<ContractTransaction>;
transferFrom(
from: string,
to: string,
amount: BigNumberish,
overrides?: Overrides & { from?: string | Promise<string> }
): Promise<ContractTransaction>;
};
allowance(
owner: string,
spender: string,
overrides?: CallOverrides
): Promise<BigNumber>;
approve(
spender: string,
amount: BigNumberish,
overrides?: Overrides & { from?: string | Promise<string> }
): Promise<ContractTransaction>;
balanceOf(account: string, overrides?: CallOverrides): Promise<BigNumber>;
totalSupply(overrides?: CallOverrides): Promise<BigNumber>;
transfer(
to: string,
amount: BigNumberish,
overrides?: Overrides & { from?: string | Promise<string> }
): Promise<ContractTransaction>;
transferFrom(
from: string,
to: string,
amount: BigNumberish,
overrides?: Overrides & { from?: string | Promise<string> }
): Promise<ContractTransaction>;
callStatic: {
allowance(
owner: string,
spender: string,
overrides?: CallOverrides
): Promise<BigNumber>;
approve(
spender: string,
amount: BigNumberish,
overrides?: CallOverrides
): Promise<boolean>;
balanceOf(account: string, overrides?: CallOverrides): Promise<BigNumber>;
totalSupply(overrides?: CallOverrides): Promise<BigNumber>;
transfer(
to: string,
amount: BigNumberish,
overrides?: CallOverrides
): Promise<boolean>;
transferFrom(
from: string,
to: string,
amount: BigNumberish,
overrides?: CallOverrides
): Promise<boolean>;
};
filters: {
"Approval(address,address,uint256)"(
owner?: string | null,
spender?: string | null,
value?: null
): TypedEventFilter<
[string, string, BigNumber],
{ owner: string; spender: string; value: BigNumber }
>;
Approval(
owner?: string | null,
spender?: string | null,
value?: null
): TypedEventFilter<
[string, string, BigNumber],
{ owner: string; spender: string; value: BigNumber }
>;
"Transfer(address,address,uint256)"(
from?: string | null,
to?: string | null,
value?: null
): TypedEventFilter<
[string, string, BigNumber],
{ from: string; to: string; value: BigNumber }
>;
Transfer(
from?: string | null,
to?: string | null,
value?: null
): TypedEventFilter<
[string, string, BigNumber],
{ from: string; to: string; value: BigNumber }
>;
};
estimateGas: {
allowance(
owner: string,
spender: string,
overrides?: CallOverrides
): Promise<BigNumber>;
approve(
spender: string,
amount: BigNumberish,
overrides?: Overrides & { from?: string | Promise<string> }
): Promise<BigNumber>;
balanceOf(account: string, overrides?: CallOverrides): Promise<BigNumber>;
totalSupply(overrides?: CallOverrides): Promise<BigNumber>;
transfer(
to: string,
amount: BigNumberish,
overrides?: Overrides & { from?: string | Promise<string> }
): Promise<BigNumber>;
transferFrom(
from: string,
to: string,
amount: BigNumberish,
overrides?: Overrides & { from?: string | Promise<string> }
): Promise<BigNumber>;
};
populateTransaction: {
allowance(
owner: string,
spender: string,
overrides?: CallOverrides
): Promise<PopulatedTransaction>;
approve(
spender: string,
amount: BigNumberish,
overrides?: Overrides & { from?: string | Promise<string> }
): Promise<PopulatedTransaction>;
balanceOf(
account: string,
overrides?: CallOverrides
): Promise<PopulatedTransaction>;
totalSupply(overrides?: CallOverrides): Promise<PopulatedTransaction>;
transfer(
to: string,
amount: BigNumberish,
overrides?: Overrides & { from?: string | Promise<string> }
): Promise<PopulatedTransaction>;
transferFrom(
from: string,
to: string,
amount: BigNumberish,
overrides?: Overrides & { from?: string | Promise<string> }
): Promise<PopulatedTransaction>;
};
}

363
src/typechain/IERC20Metadata.d.ts vendored Normal file
View File

@@ -0,0 +1,363 @@
/* Autogenerated file. Do not edit manually. */
/* tslint:disable */
/* eslint-disable */
import {
ethers,
EventFilter,
Signer,
BigNumber,
BigNumberish,
PopulatedTransaction,
BaseContract,
ContractTransaction,
Overrides,
CallOverrides,
} from "ethers";
import { BytesLike } from "@ethersproject/bytes";
import { Listener, Provider } from "@ethersproject/providers";
import { FunctionFragment, EventFragment, Result } from "@ethersproject/abi";
import type { TypedEventFilter, TypedEvent, TypedListener } from "./common";
interface IERC20MetadataInterface extends ethers.utils.Interface {
functions: {
"allowance(address,address)": FunctionFragment;
"approve(address,uint256)": FunctionFragment;
"balanceOf(address)": FunctionFragment;
"decimals()": FunctionFragment;
"name()": FunctionFragment;
"symbol()": FunctionFragment;
"totalSupply()": FunctionFragment;
"transfer(address,uint256)": FunctionFragment;
"transferFrom(address,address,uint256)": FunctionFragment;
};
encodeFunctionData(
functionFragment: "allowance",
values: [string, string]
): string;
encodeFunctionData(
functionFragment: "approve",
values: [string, BigNumberish]
): string;
encodeFunctionData(functionFragment: "balanceOf", values: [string]): string;
encodeFunctionData(functionFragment: "decimals", values?: undefined): string;
encodeFunctionData(functionFragment: "name", values?: undefined): string;
encodeFunctionData(functionFragment: "symbol", values?: undefined): string;
encodeFunctionData(
functionFragment: "totalSupply",
values?: undefined
): string;
encodeFunctionData(
functionFragment: "transfer",
values: [string, BigNumberish]
): string;
encodeFunctionData(
functionFragment: "transferFrom",
values: [string, string, BigNumberish]
): string;
decodeFunctionResult(functionFragment: "allowance", data: BytesLike): Result;
decodeFunctionResult(functionFragment: "approve", data: BytesLike): Result;
decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result;
decodeFunctionResult(functionFragment: "decimals", data: BytesLike): Result;
decodeFunctionResult(functionFragment: "name", data: BytesLike): Result;
decodeFunctionResult(functionFragment: "symbol", data: BytesLike): Result;
decodeFunctionResult(
functionFragment: "totalSupply",
data: BytesLike
): Result;
decodeFunctionResult(functionFragment: "transfer", data: BytesLike): Result;
decodeFunctionResult(
functionFragment: "transferFrom",
data: BytesLike
): Result;
events: {
"Approval(address,address,uint256)": EventFragment;
"Transfer(address,address,uint256)": EventFragment;
};
getEvent(nameOrSignatureOrTopic: "Approval"): EventFragment;
getEvent(nameOrSignatureOrTopic: "Transfer"): EventFragment;
}
export type ApprovalEvent = TypedEvent<
[string, string, BigNumber] & {
owner: string;
spender: string;
value: BigNumber;
}
>;
export type TransferEvent = TypedEvent<
[string, string, BigNumber] & { from: string; to: string; value: BigNumber }
>;
export class IERC20Metadata extends BaseContract {
connect(signerOrProvider: Signer | Provider | string): this;
attach(addressOrName: string): this;
deployed(): Promise<this>;
listeners<EventArgsArray extends Array<any>, EventArgsObject>(
eventFilter?: TypedEventFilter<EventArgsArray, EventArgsObject>
): Array<TypedListener<EventArgsArray, EventArgsObject>>;
off<EventArgsArray extends Array<any>, EventArgsObject>(
eventFilter: TypedEventFilter<EventArgsArray, EventArgsObject>,
listener: TypedListener<EventArgsArray, EventArgsObject>
): this;
on<EventArgsArray extends Array<any>, EventArgsObject>(
eventFilter: TypedEventFilter<EventArgsArray, EventArgsObject>,
listener: TypedListener<EventArgsArray, EventArgsObject>
): this;
once<EventArgsArray extends Array<any>, EventArgsObject>(
eventFilter: TypedEventFilter<EventArgsArray, EventArgsObject>,
listener: TypedListener<EventArgsArray, EventArgsObject>
): this;
removeListener<EventArgsArray extends Array<any>, EventArgsObject>(
eventFilter: TypedEventFilter<EventArgsArray, EventArgsObject>,
listener: TypedListener<EventArgsArray, EventArgsObject>
): this;
removeAllListeners<EventArgsArray extends Array<any>, EventArgsObject>(
eventFilter: TypedEventFilter<EventArgsArray, EventArgsObject>
): this;
listeners(eventName?: string): Array<Listener>;
off(eventName: string, listener: Listener): this;
on(eventName: string, listener: Listener): this;
once(eventName: string, listener: Listener): this;
removeListener(eventName: string, listener: Listener): this;
removeAllListeners(eventName?: string): this;
queryFilter<EventArgsArray extends Array<any>, EventArgsObject>(
event: TypedEventFilter<EventArgsArray, EventArgsObject>,
fromBlockOrBlockhash?: string | number | undefined,
toBlock?: string | number | undefined
): Promise<Array<TypedEvent<EventArgsArray & EventArgsObject>>>;
interface: IERC20MetadataInterface;
functions: {
allowance(
owner: string,
spender: string,
overrides?: CallOverrides
): Promise<[BigNumber]>;
approve(
spender: string,
amount: BigNumberish,
overrides?: Overrides & { from?: string | Promise<string> }
): Promise<ContractTransaction>;
balanceOf(account: string, overrides?: CallOverrides): Promise<[BigNumber]>;
decimals(overrides?: CallOverrides): Promise<[number]>;
name(overrides?: CallOverrides): Promise<[string]>;
symbol(overrides?: CallOverrides): Promise<[string]>;
totalSupply(overrides?: CallOverrides): Promise<[BigNumber]>;
transfer(
to: string,
amount: BigNumberish,
overrides?: Overrides & { from?: string | Promise<string> }
): Promise<ContractTransaction>;
transferFrom(
from: string,
to: string,
amount: BigNumberish,
overrides?: Overrides & { from?: string | Promise<string> }
): Promise<ContractTransaction>;
};
allowance(
owner: string,
spender: string,
overrides?: CallOverrides
): Promise<BigNumber>;
approve(
spender: string,
amount: BigNumberish,
overrides?: Overrides & { from?: string | Promise<string> }
): Promise<ContractTransaction>;
balanceOf(account: string, overrides?: CallOverrides): Promise<BigNumber>;
decimals(overrides?: CallOverrides): Promise<number>;
name(overrides?: CallOverrides): Promise<string>;
symbol(overrides?: CallOverrides): Promise<string>;
totalSupply(overrides?: CallOverrides): Promise<BigNumber>;
transfer(
to: string,
amount: BigNumberish,
overrides?: Overrides & { from?: string | Promise<string> }
): Promise<ContractTransaction>;
transferFrom(
from: string,
to: string,
amount: BigNumberish,
overrides?: Overrides & { from?: string | Promise<string> }
): Promise<ContractTransaction>;
callStatic: {
allowance(
owner: string,
spender: string,
overrides?: CallOverrides
): Promise<BigNumber>;
approve(
spender: string,
amount: BigNumberish,
overrides?: CallOverrides
): Promise<boolean>;
balanceOf(account: string, overrides?: CallOverrides): Promise<BigNumber>;
decimals(overrides?: CallOverrides): Promise<number>;
name(overrides?: CallOverrides): Promise<string>;
symbol(overrides?: CallOverrides): Promise<string>;
totalSupply(overrides?: CallOverrides): Promise<BigNumber>;
transfer(
to: string,
amount: BigNumberish,
overrides?: CallOverrides
): Promise<boolean>;
transferFrom(
from: string,
to: string,
amount: BigNumberish,
overrides?: CallOverrides
): Promise<boolean>;
};
filters: {
"Approval(address,address,uint256)"(
owner?: string | null,
spender?: string | null,
value?: null
): TypedEventFilter<
[string, string, BigNumber],
{ owner: string; spender: string; value: BigNumber }
>;
Approval(
owner?: string | null,
spender?: string | null,
value?: null
): TypedEventFilter<
[string, string, BigNumber],
{ owner: string; spender: string; value: BigNumber }
>;
"Transfer(address,address,uint256)"(
from?: string | null,
to?: string | null,
value?: null
): TypedEventFilter<
[string, string, BigNumber],
{ from: string; to: string; value: BigNumber }
>;
Transfer(
from?: string | null,
to?: string | null,
value?: null
): TypedEventFilter<
[string, string, BigNumber],
{ from: string; to: string; value: BigNumber }
>;
};
estimateGas: {
allowance(
owner: string,
spender: string,
overrides?: CallOverrides
): Promise<BigNumber>;
approve(
spender: string,
amount: BigNumberish,
overrides?: Overrides & { from?: string | Promise<string> }
): Promise<BigNumber>;
balanceOf(account: string, overrides?: CallOverrides): Promise<BigNumber>;
decimals(overrides?: CallOverrides): Promise<BigNumber>;
name(overrides?: CallOverrides): Promise<BigNumber>;
symbol(overrides?: CallOverrides): Promise<BigNumber>;
totalSupply(overrides?: CallOverrides): Promise<BigNumber>;
transfer(
to: string,
amount: BigNumberish,
overrides?: Overrides & { from?: string | Promise<string> }
): Promise<BigNumber>;
transferFrom(
from: string,
to: string,
amount: BigNumberish,
overrides?: Overrides & { from?: string | Promise<string> }
): Promise<BigNumber>;
};
populateTransaction: {
allowance(
owner: string,
spender: string,
overrides?: CallOverrides
): Promise<PopulatedTransaction>;
approve(
spender: string,
amount: BigNumberish,
overrides?: Overrides & { from?: string | Promise<string> }
): Promise<PopulatedTransaction>;
balanceOf(
account: string,
overrides?: CallOverrides
): Promise<PopulatedTransaction>;
decimals(overrides?: CallOverrides): Promise<PopulatedTransaction>;
name(overrides?: CallOverrides): Promise<PopulatedTransaction>;
symbol(overrides?: CallOverrides): Promise<PopulatedTransaction>;
totalSupply(overrides?: CallOverrides): Promise<PopulatedTransaction>;
transfer(
to: string,
amount: BigNumberish,
overrides?: Overrides & { from?: string | Promise<string> }
): Promise<PopulatedTransaction>;
transferFrom(
from: string,
to: string,
amount: BigNumberish,
overrides?: Overrides & { from?: string | Promise<string> }
): Promise<PopulatedTransaction>;
};
}

119
src/typechain/Puller.d.ts vendored Normal file
View File

@@ -0,0 +1,119 @@
/* Autogenerated file. Do not edit manually. */
/* tslint:disable */
/* eslint-disable */
import {
ethers,
EventFilter,
Signer,
BigNumber,
BigNumberish,
PopulatedTransaction,
BaseContract,
ContractTransaction,
Overrides,
CallOverrides,
} from "ethers";
import { BytesLike } from "@ethersproject/bytes";
import { Listener, Provider } from "@ethersproject/providers";
import { FunctionFragment, EventFragment, Result } from "@ethersproject/abi";
import type { TypedEventFilter, TypedEvent, TypedListener } from "./common";
interface PullerInterface extends ethers.utils.Interface {
functions: {
"pullTokens(address,uint256)": FunctionFragment;
};
encodeFunctionData(
functionFragment: "pullTokens",
values: [string, BigNumberish]
): string;
decodeFunctionResult(functionFragment: "pullTokens", data: BytesLike): Result;
events: {};
}
export class Puller extends BaseContract {
connect(signerOrProvider: Signer | Provider | string): this;
attach(addressOrName: string): this;
deployed(): Promise<this>;
listeners<EventArgsArray extends Array<any>, EventArgsObject>(
eventFilter?: TypedEventFilter<EventArgsArray, EventArgsObject>
): Array<TypedListener<EventArgsArray, EventArgsObject>>;
off<EventArgsArray extends Array<any>, EventArgsObject>(
eventFilter: TypedEventFilter<EventArgsArray, EventArgsObject>,
listener: TypedListener<EventArgsArray, EventArgsObject>
): this;
on<EventArgsArray extends Array<any>, EventArgsObject>(
eventFilter: TypedEventFilter<EventArgsArray, EventArgsObject>,
listener: TypedListener<EventArgsArray, EventArgsObject>
): this;
once<EventArgsArray extends Array<any>, EventArgsObject>(
eventFilter: TypedEventFilter<EventArgsArray, EventArgsObject>,
listener: TypedListener<EventArgsArray, EventArgsObject>
): this;
removeListener<EventArgsArray extends Array<any>, EventArgsObject>(
eventFilter: TypedEventFilter<EventArgsArray, EventArgsObject>,
listener: TypedListener<EventArgsArray, EventArgsObject>
): this;
removeAllListeners<EventArgsArray extends Array<any>, EventArgsObject>(
eventFilter: TypedEventFilter<EventArgsArray, EventArgsObject>
): this;
listeners(eventName?: string): Array<Listener>;
off(eventName: string, listener: Listener): this;
on(eventName: string, listener: Listener): this;
once(eventName: string, listener: Listener): this;
removeListener(eventName: string, listener: Listener): this;
removeAllListeners(eventName?: string): this;
queryFilter<EventArgsArray extends Array<any>, EventArgsObject>(
event: TypedEventFilter<EventArgsArray, EventArgsObject>,
fromBlockOrBlockhash?: string | number | undefined,
toBlock?: string | number | undefined
): Promise<Array<TypedEvent<EventArgsArray & EventArgsObject>>>;
interface: PullerInterface;
functions: {
pullTokens(
_token: string,
_amount: BigNumberish,
overrides?: Overrides & { from?: string | Promise<string> }
): Promise<ContractTransaction>;
};
pullTokens(
_token: string,
_amount: BigNumberish,
overrides?: Overrides & { from?: string | Promise<string> }
): Promise<ContractTransaction>;
callStatic: {
pullTokens(
_token: string,
_amount: BigNumberish,
overrides?: CallOverrides
): Promise<void>;
};
filters: {};
estimateGas: {
pullTokens(
_token: string,
_amount: BigNumberish,
overrides?: Overrides & { from?: string | Promise<string> }
): Promise<BigNumber>;
};
populateTransaction: {
pullTokens(
_token: string,
_amount: BigNumberish,
overrides?: Overrides & { from?: string | Promise<string> }
): Promise<PopulatedTransaction>;
};
}

119
src/typechain/Spender.d.ts vendored Normal file
View File

@@ -0,0 +1,119 @@
/* Autogenerated file. Do not edit manually. */
/* tslint:disable */
/* eslint-disable */
import {
ethers,
EventFilter,
Signer,
BigNumber,
BigNumberish,
PopulatedTransaction,
BaseContract,
ContractTransaction,
Overrides,
CallOverrides,
} from "ethers";
import { BytesLike } from "@ethersproject/bytes";
import { Listener, Provider } from "@ethersproject/providers";
import { FunctionFragment, EventFragment, Result } from "@ethersproject/abi";
import type { TypedEventFilter, TypedEvent, TypedListener } from "./common";
interface SpenderInterface extends ethers.utils.Interface {
functions: {
"pullTokens(address,uint256)": FunctionFragment;
};
encodeFunctionData(
functionFragment: "pullTokens",
values: [string, BigNumberish]
): string;
decodeFunctionResult(functionFragment: "pullTokens", data: BytesLike): Result;
events: {};
}
export class Spender extends BaseContract {
connect(signerOrProvider: Signer | Provider | string): this;
attach(addressOrName: string): this;
deployed(): Promise<this>;
listeners<EventArgsArray extends Array<any>, EventArgsObject>(
eventFilter?: TypedEventFilter<EventArgsArray, EventArgsObject>
): Array<TypedListener<EventArgsArray, EventArgsObject>>;
off<EventArgsArray extends Array<any>, EventArgsObject>(
eventFilter: TypedEventFilter<EventArgsArray, EventArgsObject>,
listener: TypedListener<EventArgsArray, EventArgsObject>
): this;
on<EventArgsArray extends Array<any>, EventArgsObject>(
eventFilter: TypedEventFilter<EventArgsArray, EventArgsObject>,
listener: TypedListener<EventArgsArray, EventArgsObject>
): this;
once<EventArgsArray extends Array<any>, EventArgsObject>(
eventFilter: TypedEventFilter<EventArgsArray, EventArgsObject>,
listener: TypedListener<EventArgsArray, EventArgsObject>
): this;
removeListener<EventArgsArray extends Array<any>, EventArgsObject>(
eventFilter: TypedEventFilter<EventArgsArray, EventArgsObject>,
listener: TypedListener<EventArgsArray, EventArgsObject>
): this;
removeAllListeners<EventArgsArray extends Array<any>, EventArgsObject>(
eventFilter: TypedEventFilter<EventArgsArray, EventArgsObject>
): this;
listeners(eventName?: string): Array<Listener>;
off(eventName: string, listener: Listener): this;
on(eventName: string, listener: Listener): this;
once(eventName: string, listener: Listener): this;
removeListener(eventName: string, listener: Listener): this;
removeAllListeners(eventName?: string): this;
queryFilter<EventArgsArray extends Array<any>, EventArgsObject>(
event: TypedEventFilter<EventArgsArray, EventArgsObject>,
fromBlockOrBlockhash?: string | number | undefined,
toBlock?: string | number | undefined
): Promise<Array<TypedEvent<EventArgsArray & EventArgsObject>>>;
interface: SpenderInterface;
functions: {
pullTokens(
_token: string,
_amount: BigNumberish,
overrides?: Overrides & { from?: string | Promise<string> }
): Promise<ContractTransaction>;
};
pullTokens(
_token: string,
_amount: BigNumberish,
overrides?: Overrides & { from?: string | Promise<string> }
): Promise<ContractTransaction>;
callStatic: {
pullTokens(
_token: string,
_amount: BigNumberish,
overrides?: CallOverrides
): Promise<void>;
};
filters: {};
estimateGas: {
pullTokens(
_token: string,
_amount: BigNumberish,
overrides?: Overrides & { from?: string | Promise<string> }
): Promise<BigNumber>;
};
populateTransaction: {
pullTokens(
_token: string,
_amount: BigNumberish,
overrides?: Overrides & { from?: string | Promise<string> }
): Promise<PopulatedTransaction>;
};
}

513
src/typechain/Token.d.ts vendored Normal file
View File

@@ -0,0 +1,513 @@
/* Autogenerated file. Do not edit manually. */
/* tslint:disable */
/* eslint-disable */
import {
ethers,
EventFilter,
Signer,
BigNumber,
BigNumberish,
PopulatedTransaction,
BaseContract,
ContractTransaction,
Overrides,
CallOverrides,
} from "ethers";
import { BytesLike } from "@ethersproject/bytes";
import { Listener, Provider } from "@ethersproject/providers";
import { FunctionFragment, EventFragment, Result } from "@ethersproject/abi";
import type { TypedEventFilter, TypedEvent, TypedListener } from "./common";
interface TokenInterface extends ethers.utils.Interface {
functions: {
"allowance(address,address)": FunctionFragment;
"approve(address,uint256)": FunctionFragment;
"balanceOf(address)": FunctionFragment;
"burn(address,uint256)": FunctionFragment;
"decimals()": FunctionFragment;
"decreaseAllowance(address,uint256)": FunctionFragment;
"increaseAllowance(address,uint256)": FunctionFragment;
"mint(address,uint256)": FunctionFragment;
"name()": FunctionFragment;
"symbol()": FunctionFragment;
"totalSupply()": FunctionFragment;
"transfer(address,uint256)": FunctionFragment;
"transferFrom(address,address,uint256)": FunctionFragment;
};
encodeFunctionData(
functionFragment: "allowance",
values: [string, string]
): string;
encodeFunctionData(
functionFragment: "approve",
values: [string, BigNumberish]
): string;
encodeFunctionData(functionFragment: "balanceOf", values: [string]): string;
encodeFunctionData(
functionFragment: "burn",
values: [string, BigNumberish]
): string;
encodeFunctionData(functionFragment: "decimals", values?: undefined): string;
encodeFunctionData(
functionFragment: "decreaseAllowance",
values: [string, BigNumberish]
): string;
encodeFunctionData(
functionFragment: "increaseAllowance",
values: [string, BigNumberish]
): string;
encodeFunctionData(
functionFragment: "mint",
values: [string, BigNumberish]
): string;
encodeFunctionData(functionFragment: "name", values?: undefined): string;
encodeFunctionData(functionFragment: "symbol", values?: undefined): string;
encodeFunctionData(
functionFragment: "totalSupply",
values?: undefined
): string;
encodeFunctionData(
functionFragment: "transfer",
values: [string, BigNumberish]
): string;
encodeFunctionData(
functionFragment: "transferFrom",
values: [string, string, BigNumberish]
): string;
decodeFunctionResult(functionFragment: "allowance", data: BytesLike): Result;
decodeFunctionResult(functionFragment: "approve", data: BytesLike): Result;
decodeFunctionResult(functionFragment: "balanceOf", data: BytesLike): Result;
decodeFunctionResult(functionFragment: "burn", data: BytesLike): Result;
decodeFunctionResult(functionFragment: "decimals", data: BytesLike): Result;
decodeFunctionResult(
functionFragment: "decreaseAllowance",
data: BytesLike
): Result;
decodeFunctionResult(
functionFragment: "increaseAllowance",
data: BytesLike
): Result;
decodeFunctionResult(functionFragment: "mint", data: BytesLike): Result;
decodeFunctionResult(functionFragment: "name", data: BytesLike): Result;
decodeFunctionResult(functionFragment: "symbol", data: BytesLike): Result;
decodeFunctionResult(
functionFragment: "totalSupply",
data: BytesLike
): Result;
decodeFunctionResult(functionFragment: "transfer", data: BytesLike): Result;
decodeFunctionResult(
functionFragment: "transferFrom",
data: BytesLike
): Result;
events: {
"Approval(address,address,uint256)": EventFragment;
"Transfer(address,address,uint256)": EventFragment;
};
getEvent(nameOrSignatureOrTopic: "Approval"): EventFragment;
getEvent(nameOrSignatureOrTopic: "Transfer"): EventFragment;
}
export type ApprovalEvent = TypedEvent<
[string, string, BigNumber] & {
owner: string;
spender: string;
value: BigNumber;
}
>;
export type TransferEvent = TypedEvent<
[string, string, BigNumber] & { from: string; to: string; value: BigNumber }
>;
export class Token extends BaseContract {
connect(signerOrProvider: Signer | Provider | string): this;
attach(addressOrName: string): this;
deployed(): Promise<this>;
listeners<EventArgsArray extends Array<any>, EventArgsObject>(
eventFilter?: TypedEventFilter<EventArgsArray, EventArgsObject>
): Array<TypedListener<EventArgsArray, EventArgsObject>>;
off<EventArgsArray extends Array<any>, EventArgsObject>(
eventFilter: TypedEventFilter<EventArgsArray, EventArgsObject>,
listener: TypedListener<EventArgsArray, EventArgsObject>
): this;
on<EventArgsArray extends Array<any>, EventArgsObject>(
eventFilter: TypedEventFilter<EventArgsArray, EventArgsObject>,
listener: TypedListener<EventArgsArray, EventArgsObject>
): this;
once<EventArgsArray extends Array<any>, EventArgsObject>(
eventFilter: TypedEventFilter<EventArgsArray, EventArgsObject>,
listener: TypedListener<EventArgsArray, EventArgsObject>
): this;
removeListener<EventArgsArray extends Array<any>, EventArgsObject>(
eventFilter: TypedEventFilter<EventArgsArray, EventArgsObject>,
listener: TypedListener<EventArgsArray, EventArgsObject>
): this;
removeAllListeners<EventArgsArray extends Array<any>, EventArgsObject>(
eventFilter: TypedEventFilter<EventArgsArray, EventArgsObject>
): this;
listeners(eventName?: string): Array<Listener>;
off(eventName: string, listener: Listener): this;
on(eventName: string, listener: Listener): this;
once(eventName: string, listener: Listener): this;
removeListener(eventName: string, listener: Listener): this;
removeAllListeners(eventName?: string): this;
queryFilter<EventArgsArray extends Array<any>, EventArgsObject>(
event: TypedEventFilter<EventArgsArray, EventArgsObject>,
fromBlockOrBlockhash?: string | number | undefined,
toBlock?: string | number | undefined
): Promise<Array<TypedEvent<EventArgsArray & EventArgsObject>>>;
interface: TokenInterface;
functions: {
allowance(
owner: string,
spender: string,
overrides?: CallOverrides
): Promise<[BigNumber]>;
approve(
spender: string,
amount: BigNumberish,
overrides?: Overrides & { from?: string | Promise<string> }
): Promise<ContractTransaction>;
balanceOf(account: string, overrides?: CallOverrides): Promise<[BigNumber]>;
burn(
_account: string,
_amount: BigNumberish,
overrides?: Overrides & { from?: string | Promise<string> }
): Promise<ContractTransaction>;
decimals(overrides?: CallOverrides): Promise<[number]>;
decreaseAllowance(
spender: string,
subtractedValue: BigNumberish,
overrides?: Overrides & { from?: string | Promise<string> }
): Promise<ContractTransaction>;
increaseAllowance(
spender: string,
addedValue: BigNumberish,
overrides?: Overrides & { from?: string | Promise<string> }
): Promise<ContractTransaction>;
mint(
_account: string,
_amount: BigNumberish,
overrides?: Overrides & { from?: string | Promise<string> }
): Promise<ContractTransaction>;
name(overrides?: CallOverrides): Promise<[string]>;
symbol(overrides?: CallOverrides): Promise<[string]>;
totalSupply(overrides?: CallOverrides): Promise<[BigNumber]>;
transfer(
to: string,
amount: BigNumberish,
overrides?: Overrides & { from?: string | Promise<string> }
): Promise<ContractTransaction>;
transferFrom(
from: string,
to: string,
amount: BigNumberish,
overrides?: Overrides & { from?: string | Promise<string> }
): Promise<ContractTransaction>;
};
allowance(
owner: string,
spender: string,
overrides?: CallOverrides
): Promise<BigNumber>;
approve(
spender: string,
amount: BigNumberish,
overrides?: Overrides & { from?: string | Promise<string> }
): Promise<ContractTransaction>;
balanceOf(account: string, overrides?: CallOverrides): Promise<BigNumber>;
burn(
_account: string,
_amount: BigNumberish,
overrides?: Overrides & { from?: string | Promise<string> }
): Promise<ContractTransaction>;
decimals(overrides?: CallOverrides): Promise<number>;
decreaseAllowance(
spender: string,
subtractedValue: BigNumberish,
overrides?: Overrides & { from?: string | Promise<string> }
): Promise<ContractTransaction>;
increaseAllowance(
spender: string,
addedValue: BigNumberish,
overrides?: Overrides & { from?: string | Promise<string> }
): Promise<ContractTransaction>;
mint(
_account: string,
_amount: BigNumberish,
overrides?: Overrides & { from?: string | Promise<string> }
): Promise<ContractTransaction>;
name(overrides?: CallOverrides): Promise<string>;
symbol(overrides?: CallOverrides): Promise<string>;
totalSupply(overrides?: CallOverrides): Promise<BigNumber>;
transfer(
to: string,
amount: BigNumberish,
overrides?: Overrides & { from?: string | Promise<string> }
): Promise<ContractTransaction>;
transferFrom(
from: string,
to: string,
amount: BigNumberish,
overrides?: Overrides & { from?: string | Promise<string> }
): Promise<ContractTransaction>;
callStatic: {
allowance(
owner: string,
spender: string,
overrides?: CallOverrides
): Promise<BigNumber>;
approve(
spender: string,
amount: BigNumberish,
overrides?: CallOverrides
): Promise<boolean>;
balanceOf(account: string, overrides?: CallOverrides): Promise<BigNumber>;
burn(
_account: string,
_amount: BigNumberish,
overrides?: CallOverrides
): Promise<void>;
decimals(overrides?: CallOverrides): Promise<number>;
decreaseAllowance(
spender: string,
subtractedValue: BigNumberish,
overrides?: CallOverrides
): Promise<boolean>;
increaseAllowance(
spender: string,
addedValue: BigNumberish,
overrides?: CallOverrides
): Promise<boolean>;
mint(
_account: string,
_amount: BigNumberish,
overrides?: CallOverrides
): Promise<void>;
name(overrides?: CallOverrides): Promise<string>;
symbol(overrides?: CallOverrides): Promise<string>;
totalSupply(overrides?: CallOverrides): Promise<BigNumber>;
transfer(
to: string,
amount: BigNumberish,
overrides?: CallOverrides
): Promise<boolean>;
transferFrom(
from: string,
to: string,
amount: BigNumberish,
overrides?: CallOverrides
): Promise<boolean>;
};
filters: {
"Approval(address,address,uint256)"(
owner?: string | null,
spender?: string | null,
value?: null
): TypedEventFilter<
[string, string, BigNumber],
{ owner: string; spender: string; value: BigNumber }
>;
Approval(
owner?: string | null,
spender?: string | null,
value?: null
): TypedEventFilter<
[string, string, BigNumber],
{ owner: string; spender: string; value: BigNumber }
>;
"Transfer(address,address,uint256)"(
from?: string | null,
to?: string | null,
value?: null
): TypedEventFilter<
[string, string, BigNumber],
{ from: string; to: string; value: BigNumber }
>;
Transfer(
from?: string | null,
to?: string | null,
value?: null
): TypedEventFilter<
[string, string, BigNumber],
{ from: string; to: string; value: BigNumber }
>;
};
estimateGas: {
allowance(
owner: string,
spender: string,
overrides?: CallOverrides
): Promise<BigNumber>;
approve(
spender: string,
amount: BigNumberish,
overrides?: Overrides & { from?: string | Promise<string> }
): Promise<BigNumber>;
balanceOf(account: string, overrides?: CallOverrides): Promise<BigNumber>;
burn(
_account: string,
_amount: BigNumberish,
overrides?: Overrides & { from?: string | Promise<string> }
): Promise<BigNumber>;
decimals(overrides?: CallOverrides): Promise<BigNumber>;
decreaseAllowance(
spender: string,
subtractedValue: BigNumberish,
overrides?: Overrides & { from?: string | Promise<string> }
): Promise<BigNumber>;
increaseAllowance(
spender: string,
addedValue: BigNumberish,
overrides?: Overrides & { from?: string | Promise<string> }
): Promise<BigNumber>;
mint(
_account: string,
_amount: BigNumberish,
overrides?: Overrides & { from?: string | Promise<string> }
): Promise<BigNumber>;
name(overrides?: CallOverrides): Promise<BigNumber>;
symbol(overrides?: CallOverrides): Promise<BigNumber>;
totalSupply(overrides?: CallOverrides): Promise<BigNumber>;
transfer(
to: string,
amount: BigNumberish,
overrides?: Overrides & { from?: string | Promise<string> }
): Promise<BigNumber>;
transferFrom(
from: string,
to: string,
amount: BigNumberish,
overrides?: Overrides & { from?: string | Promise<string> }
): Promise<BigNumber>;
};
populateTransaction: {
allowance(
owner: string,
spender: string,
overrides?: CallOverrides
): Promise<PopulatedTransaction>;
approve(
spender: string,
amount: BigNumberish,
overrides?: Overrides & { from?: string | Promise<string> }
): Promise<PopulatedTransaction>;
balanceOf(
account: string,
overrides?: CallOverrides
): Promise<PopulatedTransaction>;
burn(
_account: string,
_amount: BigNumberish,
overrides?: Overrides & { from?: string | Promise<string> }
): Promise<PopulatedTransaction>;
decimals(overrides?: CallOverrides): Promise<PopulatedTransaction>;
decreaseAllowance(
spender: string,
subtractedValue: BigNumberish,
overrides?: Overrides & { from?: string | Promise<string> }
): Promise<PopulatedTransaction>;
increaseAllowance(
spender: string,
addedValue: BigNumberish,
overrides?: Overrides & { from?: string | Promise<string> }
): Promise<PopulatedTransaction>;
mint(
_account: string,
_amount: BigNumberish,
overrides?: Overrides & { from?: string | Promise<string> }
): Promise<PopulatedTransaction>;
name(overrides?: CallOverrides): Promise<PopulatedTransaction>;
symbol(overrides?: CallOverrides): Promise<PopulatedTransaction>;
totalSupply(overrides?: CallOverrides): Promise<PopulatedTransaction>;
transfer(
to: string,
amount: BigNumberish,
overrides?: Overrides & { from?: string | Promise<string> }
): Promise<PopulatedTransaction>;
transferFrom(
from: string,
to: string,
amount: BigNumberish,
overrides?: Overrides & { from?: string | Promise<string> }
): Promise<PopulatedTransaction>;
};
}

35
src/typechain/common.d.ts vendored Normal file
View File

@@ -0,0 +1,35 @@
/* Autogenerated file. Do not edit manually. */
/* tslint:disable */
/* eslint-disable */
import { EventFilter, Event } from "ethers";
import { Result } from "@ethersproject/abi";
export interface TypedEventFilter<_EventArgsArray, _EventArgsObject>
extends EventFilter {}
export interface TypedEvent<EventArgs extends Result> extends Event {
args: EventArgs;
}
export type TypedListener<
EventArgsArray extends Array<any>,
EventArgsObject
> = (
...listenerArg: [
...EventArgsArray,
TypedEvent<EventArgsArray & EventArgsObject>
]
) => void;
export type MinEthersFactory<C, ARGS> = {
deploy(...a: ARGS[]): Promise<C>;
};
export type GetContractTypeFromFactory<F> = F extends MinEthersFactory<
infer C,
any
>
? C
: never;
export type GetARGsTypeFromFactory<F> = F extends MinEthersFactory<any, any>
? Parameters<F["deploy"]>
: never;

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,248 @@
/* Autogenerated file. Do not edit manually. */
/* tslint:disable */
/* eslint-disable */
import { Contract, Signer, utils } from "ethers";
import { Provider } from "@ethersproject/providers";
import type {
IERC20Metadata,
IERC20MetadataInterface,
} from "../IERC20Metadata";
const _abi = [
{
anonymous: false,
inputs: [
{
indexed: true,
internalType: "address",
name: "owner",
type: "address",
},
{
indexed: true,
internalType: "address",
name: "spender",
type: "address",
},
{
indexed: false,
internalType: "uint256",
name: "value",
type: "uint256",
},
],
name: "Approval",
type: "event",
},
{
anonymous: false,
inputs: [
{
indexed: true,
internalType: "address",
name: "from",
type: "address",
},
{
indexed: true,
internalType: "address",
name: "to",
type: "address",
},
{
indexed: false,
internalType: "uint256",
name: "value",
type: "uint256",
},
],
name: "Transfer",
type: "event",
},
{
inputs: [
{
internalType: "address",
name: "owner",
type: "address",
},
{
internalType: "address",
name: "spender",
type: "address",
},
],
name: "allowance",
outputs: [
{
internalType: "uint256",
name: "",
type: "uint256",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "spender",
type: "address",
},
{
internalType: "uint256",
name: "amount",
type: "uint256",
},
],
name: "approve",
outputs: [
{
internalType: "bool",
name: "",
type: "bool",
},
],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "account",
type: "address",
},
],
name: "balanceOf",
outputs: [
{
internalType: "uint256",
name: "",
type: "uint256",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "decimals",
outputs: [
{
internalType: "uint8",
name: "",
type: "uint8",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "name",
outputs: [
{
internalType: "string",
name: "",
type: "string",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "symbol",
outputs: [
{
internalType: "string",
name: "",
type: "string",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "totalSupply",
outputs: [
{
internalType: "uint256",
name: "",
type: "uint256",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "to",
type: "address",
},
{
internalType: "uint256",
name: "amount",
type: "uint256",
},
],
name: "transfer",
outputs: [
{
internalType: "bool",
name: "",
type: "bool",
},
],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "from",
type: "address",
},
{
internalType: "address",
name: "to",
type: "address",
},
{
internalType: "uint256",
name: "amount",
type: "uint256",
},
],
name: "transferFrom",
outputs: [
{
internalType: "bool",
name: "",
type: "bool",
},
],
stateMutability: "nonpayable",
type: "function",
},
];
export class IERC20Metadata__factory {
static readonly abi = _abi;
static createInterface(): IERC20MetadataInterface {
return new utils.Interface(_abi) as IERC20MetadataInterface;
}
static connect(
address: string,
signerOrProvider: Signer | Provider
): IERC20Metadata {
return new Contract(address, _abi, signerOrProvider) as IERC20Metadata;
}
}

View File

@@ -0,0 +1,203 @@
/* Autogenerated file. Do not edit manually. */
/* tslint:disable */
/* eslint-disable */
import { Contract, Signer, utils } from "ethers";
import { Provider } from "@ethersproject/providers";
import type { IERC20, IERC20Interface } from "../IERC20";
const _abi = [
{
anonymous: false,
inputs: [
{
indexed: true,
internalType: "address",
name: "owner",
type: "address",
},
{
indexed: true,
internalType: "address",
name: "spender",
type: "address",
},
{
indexed: false,
internalType: "uint256",
name: "value",
type: "uint256",
},
],
name: "Approval",
type: "event",
},
{
anonymous: false,
inputs: [
{
indexed: true,
internalType: "address",
name: "from",
type: "address",
},
{
indexed: true,
internalType: "address",
name: "to",
type: "address",
},
{
indexed: false,
internalType: "uint256",
name: "value",
type: "uint256",
},
],
name: "Transfer",
type: "event",
},
{
inputs: [
{
internalType: "address",
name: "owner",
type: "address",
},
{
internalType: "address",
name: "spender",
type: "address",
},
],
name: "allowance",
outputs: [
{
internalType: "uint256",
name: "",
type: "uint256",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "spender",
type: "address",
},
{
internalType: "uint256",
name: "amount",
type: "uint256",
},
],
name: "approve",
outputs: [
{
internalType: "bool",
name: "",
type: "bool",
},
],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "account",
type: "address",
},
],
name: "balanceOf",
outputs: [
{
internalType: "uint256",
name: "",
type: "uint256",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "totalSupply",
outputs: [
{
internalType: "uint256",
name: "",
type: "uint256",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "to",
type: "address",
},
{
internalType: "uint256",
name: "amount",
type: "uint256",
},
],
name: "transfer",
outputs: [
{
internalType: "bool",
name: "",
type: "bool",
},
],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "from",
type: "address",
},
{
internalType: "address",
name: "to",
type: "address",
},
{
internalType: "uint256",
name: "amount",
type: "uint256",
},
],
name: "transferFrom",
outputs: [
{
internalType: "bool",
name: "",
type: "bool",
},
],
stateMutability: "nonpayable",
type: "function",
},
];
export class IERC20__factory {
static readonly abi = _abi;
static createInterface(): IERC20Interface {
return new utils.Interface(_abi) as IERC20Interface;
}
static connect(address: string, signerOrProvider: Signer | Provider): IERC20 {
return new Contract(address, _abi, signerOrProvider) as IERC20;
}
}

View File

@@ -0,0 +1,68 @@
/* Autogenerated file. Do not edit manually. */
/* tslint:disable */
/* eslint-disable */
import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers";
import { Provider, TransactionRequest } from "@ethersproject/providers";
import type { Puller, PullerInterface } from "../Puller";
const _abi = [
{
inputs: [
{
internalType: "address",
name: "_token",
type: "address",
},
{
internalType: "uint256",
name: "_amount",
type: "uint256",
},
],
name: "pullTokens",
outputs: [],
stateMutability: "nonpayable",
type: "function",
},
];
const _bytecode =
"0x608060405234801561001057600080fd5b5061029c806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063eada79cc14610030575b600080fd5b61004a6004803603810190610045919061011f565b61004c565b005b8173ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b8152600401610089939291906101a2565b602060405180830381600087803b1580156100a357600080fd5b505af11580156100b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100db919061015b565b505050565b6000813590506100ef81610221565b92915050565b60008151905061010481610238565b92915050565b6000813590506101198161024f565b92915050565b6000806040838503121561013257600080fd5b6000610140858286016100e0565b92505060206101518582860161010a565b9150509250929050565b60006020828403121561016d57600080fd5b600061017b848285016100f5565b91505092915050565b61018d816101d9565b82525050565b61019c81610217565b82525050565b60006060820190506101b76000830186610184565b6101c46020830185610184565b6101d16040830184610193565b949350505050565b60006101e4826101f7565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b61022a816101d9565b811461023557600080fd5b50565b610241816101eb565b811461024c57600080fd5b50565b61025881610217565b811461026357600080fd5b5056fea2646970667358221220d25cc84c6f2e1c37e0f8119d277a3f4c3c349908f2c5877a6d34a21b0e7fe42f64736f6c63430008040033";
export class Puller__factory extends ContractFactory {
constructor(
...args: [signer: Signer] | ConstructorParameters<typeof ContractFactory>
) {
if (args.length === 1) {
super(_abi, _bytecode, args[0]);
} else {
super(...args);
}
}
deploy(
overrides?: Overrides & { from?: string | Promise<string> }
): Promise<Puller> {
return super.deploy(overrides || {}) as Promise<Puller>;
}
getDeployTransaction(
overrides?: Overrides & { from?: string | Promise<string> }
): TransactionRequest {
return super.getDeployTransaction(overrides || {});
}
attach(address: string): Puller {
return super.attach(address) as Puller;
}
connect(signer: Signer): Puller__factory {
return super.connect(signer) as Puller__factory;
}
static readonly bytecode = _bytecode;
static readonly abi = _abi;
static createInterface(): PullerInterface {
return new utils.Interface(_abi) as PullerInterface;
}
static connect(address: string, signerOrProvider: Signer | Provider): Puller {
return new Contract(address, _abi, signerOrProvider) as Puller;
}
}

View File

@@ -0,0 +1,71 @@
/* Autogenerated file. Do not edit manually. */
/* tslint:disable */
/* eslint-disable */
import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers";
import { Provider, TransactionRequest } from "@ethersproject/providers";
import type { Spender, SpenderInterface } from "../Spender";
const _abi = [
{
inputs: [
{
internalType: "address",
name: "_token",
type: "address",
},
{
internalType: "uint256",
name: "_amount",
type: "uint256",
},
],
name: "pullTokens",
outputs: [],
stateMutability: "nonpayable",
type: "function",
},
];
const _bytecode =
"0x608060405234801561001057600080fd5b5061029c806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063eada79cc14610030575b600080fd5b61004a6004803603810190610045919061011f565b61004c565b005b8173ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b8152600401610089939291906101a2565b602060405180830381600087803b1580156100a357600080fd5b505af11580156100b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100db919061015b565b505050565b6000813590506100ef81610221565b92915050565b60008151905061010481610238565b92915050565b6000813590506101198161024f565b92915050565b6000806040838503121561013257600080fd5b6000610140858286016100e0565b92505060206101518582860161010a565b9150509250929050565b60006020828403121561016d57600080fd5b600061017b848285016100f5565b91505092915050565b61018d816101d9565b82525050565b61019c81610217565b82525050565b60006060820190506101b76000830186610184565b6101c46020830185610184565b6101d16040830184610193565b949350505050565b60006101e4826101f7565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b61022a816101d9565b811461023557600080fd5b50565b610241816101eb565b811461024c57600080fd5b50565b61025881610217565b811461026357600080fd5b5056fea264697066735822122016def4cd3472533f4dfe58c6cfa8fef957636c7a9b626fd17296df2052618bd564736f6c63430008040033";
export class Spender__factory extends ContractFactory {
constructor(
...args: [signer: Signer] | ConstructorParameters<typeof ContractFactory>
) {
if (args.length === 1) {
super(_abi, _bytecode, args[0]);
} else {
super(...args);
}
}
deploy(
overrides?: Overrides & { from?: string | Promise<string> }
): Promise<Spender> {
return super.deploy(overrides || {}) as Promise<Spender>;
}
getDeployTransaction(
overrides?: Overrides & { from?: string | Promise<string> }
): TransactionRequest {
return super.getDeployTransaction(overrides || {});
}
attach(address: string): Spender {
return super.attach(address) as Spender;
}
connect(signer: Signer): Spender__factory {
return super.connect(signer) as Spender__factory;
}
static readonly bytecode = _bytecode;
static readonly abi = _abi;
static createInterface(): SpenderInterface {
return new utils.Interface(_abi) as SpenderInterface;
}
static connect(
address: string,
signerOrProvider: Signer | Provider
): Spender {
return new Contract(address, _abi, signerOrProvider) as Spender;
}
}

File diff suppressed because one or more lines are too long

87
src/typechain/hardhat.d.ts vendored Normal file
View File

@@ -0,0 +1,87 @@
/* Autogenerated file. Do not edit manually. */
/* tslint:disable */
/* eslint-disable */
import { ethers } from "ethers";
import {
FactoryOptions,
HardhatEthersHelpers as HardhatEthersHelpersBase,
} from "@nomiclabs/hardhat-ethers/types";
import * as Contracts from ".";
declare module "hardhat/types/runtime" {
interface HardhatEthersHelpers extends HardhatEthersHelpersBase {
getContractFactory(
name: "ERC20",
signerOrOptions?: ethers.Signer | FactoryOptions
): Promise<Contracts.ERC20__factory>;
getContractFactory(
name: "IERC20Metadata",
signerOrOptions?: ethers.Signer | FactoryOptions
): Promise<Contracts.IERC20Metadata__factory>;
getContractFactory(
name: "IERC20",
signerOrOptions?: ethers.Signer | FactoryOptions
): Promise<Contracts.IERC20__factory>;
getContractFactory(
name: "Puller",
signerOrOptions?: ethers.Signer | FactoryOptions
): Promise<Contracts.Puller__factory>;
getContractFactory(
name: "Spender",
signerOrOptions?: ethers.Signer | FactoryOptions
): Promise<Contracts.Spender__factory>;
getContractFactory(
name: "Token",
signerOrOptions?: ethers.Signer | FactoryOptions
): Promise<Contracts.Token__factory>;
getContractAt(
name: "ERC20",
address: string,
signer?: ethers.Signer
): Promise<Contracts.ERC20>;
getContractAt(
name: "IERC20Metadata",
address: string,
signer?: ethers.Signer
): Promise<Contracts.IERC20Metadata>;
getContractAt(
name: "IERC20",
address: string,
signer?: ethers.Signer
): Promise<Contracts.IERC20>;
getContractAt(
name: "Puller",
address: string,
signer?: ethers.Signer
): Promise<Contracts.Puller>;
getContractAt(
name: "Spender",
address: string,
signer?: ethers.Signer
): Promise<Contracts.Spender>;
getContractAt(
name: "Token",
address: string,
signer?: ethers.Signer
): Promise<Contracts.Token>;
// default types
getContractFactory(
name: string,
signerOrOptions?: ethers.Signer | FactoryOptions
): Promise<ethers.ContractFactory>;
getContractFactory(
abi: any[],
bytecode: ethers.utils.BytesLike,
signer?: ethers.Signer
): Promise<ethers.ContractFactory>;
getContractAt(
nameOrAbi: string | any[],
address: string,
signer?: ethers.Signer
): Promise<ethers.Contract>;
}
}

16
src/typechain/index.ts Normal file
View File

@@ -0,0 +1,16 @@
/* Autogenerated file. Do not edit manually. */
/* tslint:disable */
/* eslint-disable */
export type { ERC20 } from "./ERC20";
export type { IERC20Metadata } from "./IERC20Metadata";
export type { IERC20 } from "./IERC20";
export type { Puller } from "./Puller";
export type { Spender } from "./Spender";
export type { Token } from "./Token";
export { ERC20__factory } from "./factories/ERC20__factory";
export { IERC20Metadata__factory } from "./factories/IERC20Metadata__factory";
export { IERC20__factory } from "./factories/IERC20__factory";
export { Puller__factory } from "./factories/Puller__factory";
export { Spender__factory } from "./factories/Spender__factory";
export { Token__factory } from "./factories/Token__factory";

7
tailwind.config.js Normal file
View File

@@ -0,0 +1,7 @@
module.exports = {
content: ["./src/**/*.{js,jsx,ts,tsx}"],
theme: {
extend: {},
},
plugins: [],
};

9433
yarn.lock Normal file

File diff suppressed because it is too large Load Diff