我正在尝试侦听智能契约事件,但我的事件侦听器在每个事件中被触发不止一次。
事件将被发出,并返回两个字符串。该事件被声明为event UpdatedMessages(string oldStr, string newStr);,并且不存在任何问题。
我试图使用与Ethers.js事件触发问题相同的解决方案,但没有成功。
代码的相关部分是
let [provider, setProvider] = useState(null)
let [contract, setContract] = useState("");
let [network, setNetwork] = useState("");
let [signer, setSigner] = useState(null)
const loadBlockchainData = async () => {
provider = new ethers.providers.Web3Provider(window.ethereum)
setProvider(provider)
network = await provider.getNetwork()
setNetwork(network)
//const accounts = await window.ethereum.request({ method: 'eth_requestAccounts' })
//setAccount(accounts[0])
signer = provider.getSigner();
setSigner(signer)
// Javascript "version" of the smart contracts
contract = new ethers.Contract(config[network.chainId].helloWorld.address, HelloWorld, signer)
setContract(contract)
}
const addSmartContractListener = async () => {
if (network) {
provider.once("block", () => {
contract.on("UpdatedMessages", (old, data)=>{
console.log(old, data)
})
})
}
}
useEffect(() => {
addSmartContractListener();
loadBlockchainData();
}, [])知道我错过了什么吗?
该项目可在我的GitHub at https://github.com/Benjovengo/event-listener上使用。
发布于 2023-01-27 23:24:09
下面的代码解决了我的问题。
const addSmartContractListener = async () => {
if (network) {
provider.once("block", () => {
contract.once("UpdatedMessages", (old, data)=>{
console.log(old, data)
})
})
}
}现在,每个事件发出一次调用函数console.log(旧的数据)。
https://ethereum.stackexchange.com/questions/143295
复制相似问题