diff --git a/src/components/chain/BlockChain.js b/src/components/chain/BlockChain.js index fa7ddbf..02f85e1 100644 --- a/src/components/chain/BlockChain.js +++ b/src/components/chain/BlockChain.js @@ -209,6 +209,8 @@ export class BlockChain { async logout() { if (this.store.walletType != 3 && this.passportProvider) { new PassportWallet().logout(); + } else if (this.store.walletType == 3 && this.eoaWallet) { + await this.eoaWallet.logout(); } this.store.reset(); this.store.$persist(); @@ -239,16 +241,20 @@ export class BlockChain { console.log(`current chain: ${chainId}, want: ${targetChainId}`) chainId = await switchEthereumChain(provider.provider, targetChainId); } - + let eoaAddress; if (this.store.walletType == 3) { const { provider, accounts } = await this.eoaWallet.web3Provider(); this.eoaProvider = provider; + eoaAddress = accounts[0]; } else { const { provider, accounts } = await this.wallet.web3Provider(); this.web3Provider = provider; this.eoaProvider = provider; + eoaAddress = accounts[0]; + } + if (this.store.eoaAddress !== eoaAddress) { + throw new Error('eoa address changed') } - } async checkPassportLogin() { diff --git a/src/components/chain/contract/Locker.js b/src/components/chain/contract/Locker.js index 67b4f06..51b351b 100644 --- a/src/components/chain/contract/Locker.js +++ b/src/components/chain/contract/Locker.js @@ -29,14 +29,20 @@ export class Locker { const addressApproval = await nftContract.getApproved(tokenId) if ((addressApproval || "").toLowerCase() != lockAddress.toLowerCase()) { const resApproval = await nftContract.approve(lockAddress, tokenId); - await provider.waitForTransaction(resApproval.hash) + const res = await provider.waitForTransaction(resApproval.hash) + if (res.status == 0) { + throw new Error('approval failed') + } console.debug('approve', resApproval.hash) } } const contract = new ethers.Contract(lockAddress, lockAbi, provider.getSigner()) const res = await contract.lock(nft, address, tokenIds) - await provider.waitForTransaction(res.hash) + const resConfirm = await provider.waitForTransaction(res.hash) + if (resConfirm.status == 0) { + throw new Error('lock failed') + } return res.hash } @@ -66,7 +72,10 @@ export class Locker { }] }) console.log(txHash) - await provider.waitForTransaction(txHash) + const res = await provider.waitForTransaction(txHash) + if (res.status == 0) { + throw new Error('transaction failed') + } return txHash } async execUnlock(provider, chainId, nft, tokenIds) {