lock和unlock时检查owner是否符合执行条件
This commit is contained in:
parent
b1d6322a07
commit
6dd7a4ed0c
@ -1,7 +1,6 @@
|
||||
|
||||
import { ethers } from 'ethers'
|
||||
import { apiUnlockOrMint, apiMintNft } from '@/utils/marketplace'
|
||||
import { BlockChain } from "@/components/chain/BlockChain"
|
||||
|
||||
const lockAbi = [
|
||||
'function lock(address nft, address to, uint256[] tokenIds) external'
|
||||
@ -9,7 +8,8 @@ const lockAbi = [
|
||||
|
||||
const erc721Abi = [
|
||||
'function approve(address to, uint256 tokenId) external',
|
||||
'function getApproved(uint256 tokenId) public view returns (address)'
|
||||
'function getApproved(uint256 tokenId) public view returns (address)',
|
||||
'function ownerOf(uint256 tokenId) public view returns (address)'
|
||||
]
|
||||
|
||||
const lockAddressImtbl = import.meta.env.VUE_APP_LOCKER_ADDRESS
|
||||
@ -25,9 +25,14 @@ export class Locker {
|
||||
const nftContract = new ethers.Contract(nft, erc721Abi, provider.getSigner())
|
||||
const address = this.bc.store.passportAddress
|
||||
console.log('lock', nft, address, tokenIds)
|
||||
const userAddress = await provider.getSigner().getAddress()
|
||||
for (let tokenId of tokenIds) {
|
||||
const addressApproval = await nftContract.getApproved(tokenId)
|
||||
if ((addressApproval || "").toLowerCase() != lockAddress.toLowerCase()) {
|
||||
const owner = await nftContract.ownerOf(tokenId)
|
||||
if (owner.toLowerCase() != userAddress.toLowerCase()) {
|
||||
throw new Error('params mismatch, perhaps one transaction is pending')
|
||||
}
|
||||
const resApproval = await nftContract.approve(lockAddress, tokenId);
|
||||
const res = await provider.waitForTransaction(resApproval.hash)
|
||||
if (res.status == 0) {
|
||||
@ -79,6 +84,13 @@ export class Locker {
|
||||
return txHash
|
||||
}
|
||||
async execUnlock(provider, chainId, nft, tokenIds) {
|
||||
for (let tokenId of tokenIds) {
|
||||
const nftContract = new ethers.Contract(nft, erc721Abi, provider.getSigner())
|
||||
const owner = await nftContract.ownerOf(tokenId)
|
||||
if (owner.toLowerCase() != lockAddressImtbl.toLowerCase() && owner.toLowerCase() != lockAddressMain.toLowerCase()) {
|
||||
throw new Error('params mismatch, perhaps one transaction is pending')
|
||||
}
|
||||
}
|
||||
const preDatas = {
|
||||
net_id: chainId,
|
||||
contract_address: nft,
|
||||
|
Loading…
x
Reference in New Issue
Block a user