主页 > imtoken钱包如何解除授权 > 区块链合约交互web3
区块链合约交互web3
遵循ERC20规则,
钱包中可以有多种代币:USDT、DFI、DFA
1、合约交互前波场usdt支付接口,需要判断purchasePool合约是否仍允许从账户(钱包内账户)中提取本合约(DFA)中的ERC20dfaContract金额
等待 this.contract.ERC20dfaContract.methods.allowance(this.address, this.addressMap.AcceleratePool).call();
ERC20dfaContract:这是dfa合约地址
ERC20dfaContract: 新窗口.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:这是矿池的代币地址
注意:如果返回值为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波场usdt支付接口,所以每次转账和赎回都需要查询消耗的gas(上面的getPurchaseGas)
async getPurchaseGas(){return await this.contract.purchasePool.methods.purchase(this.input).estimateGas({from:this.address})},
*这是充电气体消耗的例子