遵循ERC20规则,
钱包里可以有很多种类型的token:USDT,DFI,DFA
1.合约交互之前需要先判断是否仍允许purchasePool合约从账户(钱包里的账户) 中提取的ERC20dfaContract 这本合约里(DFA)的金额
await this.contract.ERC20dfaContract.methods.allowance(this.address,this.addressMap.AcceleratePool).call();
ERC20dfaContract:这个是dfa合约地址
ERC20dfaContract:new window.web3.eth.Contract(ERC20Token,address.DFAToken)
purchasePool:这个是池子的合约地址
purchasePool:new window.web3.eth.Contract(DistributionInAbi,address.AcceleratePool),
ERC20Token:是ERC20的abi? ,? address.DFAToken:是创建合约的token地址,
this.address这个是钱包的账户地址
this.addressMap.AcceleratePool:这个是池子的token地址
注:如果返回值是0,可以直接授权,如果不为0,就不可以授权,如果一定要授权需要将返回值置为0,再授权。
2.授权(ERC20dfaContract这个合约允许这个池子(AcceleratePool)从它这里转走这么多钱)
this.contract.ERC20dfaContract.methods.approve(this.addressMap.AcceleratePool,"转多少钱")
.send({ from: this.address, gas: approveGas })
.then((result) => {}).catch(() => {});
3.充值(池子里的合约方法,自己写的合约,根据合约接口操作)?
this.contract.purchasePool.methods.purchase(input).send({from:this.address,gas:getPurchaseGas}).then((result)=>{}).catch(()=>{})
purchase:这个是合约里的充值的方法
4.赎回?(池子里的合约方法,自己写的合约,根据合约接口操作)
this.contract.purchasePool.methods.claim().send({ from: this.address, gas: claimGas }).then((result) => {}).catch(() => {});
注:充值,赎回这些不是查询的,是需要消耗gas的,所以每次转账,赎回时需要查询消耗的gas?(上文中的 getPurchaseGas)
async getPurchaseGas(){return await this.contract.purchasePool.methods.purchase(this.input).estimateGas({from:this.address})},
*这个是充值消耗gas例子
|