関数を介してそれを行うことができますContract.on()
。これがドキュメントです。
コントラクトのフィルターを作成するには、まずコントラクト オブジェクトを宣言する必要があります。
コントラクト オブジェクトを宣言するには、コントラクト アドレスとコントラクト ABI が必要です。
コントラクト アドレスは誰でも知っているので、etherscan (またはネットワーク スキャナーに依存する他のサイト) から取得できます。
ethers.js を使っているので、etherscan のように JavaScript のコントラクトの ABI を等しくする必要はありません! ERC721標準インターフェースがそのまま使える!あなたはここでそれを見つけることができます
したがって_mint()
、ERC721 標準コントラクト (ここ)の関数を見るTransfer
と、イベントが発行されます。ミント トークンのログを取得するだけの場合は、このインターフェイスで十分です。
mint emitを見ると、常にaddress(0)
送信者として使用されていることがわかります0x0000000000000000000000000000000000000000
。
したがって、次のようにコーディングできます。
//making contract object!
const smallContractABI = ['event Transfer(address indexed from, address indexed to, uint256 value)']
const contractAddress = CONTRACT_ADDRESS_YOU_ARE_LOOKING_AFTER;
const contract = new ethers.Contract(contractAddress, smallContractABI, customHttpProvider);
//here I can show you 2 ways.
//First way:
//Filtering
let filter = contract.filters.Transfer('0x0000000000000000000000000000000000000000', null, null)
//Note that null is not necessary if you are just filtering first argument, but if you want
//just filter second argument, you have to set first argument null.
//For example when you want to specify transfer events when
//a transfer has been reached a specific address. then you filter like this:
//let filter = contract.filters.Transfer(null, ADDRESS, null)
//Listening to events
contract.on(filter, (from, to, amount, event) =>{
//code here
}
//Second way:
//You do not have to filter
contract.on("Transfer", (from, to, amount, event) => {
if (from == '0x0000000000000000000000000000000000000000'){
//code here
}
}
どちらの方法でも 1 つのことしかできませんが、最初の方法をお勧めします。