首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用“安全帽”检测另一项合同中的排放?

如何使用“安全帽”检测另一项合同中的排放?
EN

Ethereum用户
提问于 2022-04-29 23:23:21
回答 1查看 240关注 0票数 0

我正试图从expectEvent.inTransaction()中复制@openzeppelin/test-helpers中的“硬帽子”。

场景:token正在从owner转移到receiverContract。我想检查receiverContract是否发出了一个Received事件。

事务如下所示,由所有者发起。

代码语言:javascript
复制
const tx = await token.transferFrom(
  owner.address, // <- From this wallet
  receiverContract.address, // <- To this contract
  tokenId,
  {
    from: owner.address,
  }
);

此测试可以显示发出Transfer事件的令牌。

代码语言:javascript
复制
await expect(tx)
  .to.emit(this.token, "Transfer")
  .withArgs(owner.address, receiverContract.address, tokenId);

但我想写这样的东西..。

代码语言:javascript
复制
await expect(tx) // <- Not sure what to put here
  .to.emit(receiverContract, "Received") // <- This may also be off
  .withArgs(token, owner.address, tokenId, null);

或者,我可以查看接收者的收据对象,但我也不知道如何得到.通常是通过..。

代码语言:javascript
复制
const tx = await token.transferFrom(owner.address, receiverContract.address, tokenId, {from: owner.address});
const receipt = await tx.wait();
console.log("receipt", receipt); // <- This will show an events array 
// which I can check. But how do I get this same receipt object for
// the receiverContract
EN

回答 1

Ethereum用户

回答已采纳

发布于 2022-05-02 19:17:19

每个合同都可以通过console.log(receiverContract)查看.因此,我最终导航到合同中的event对象。这是合同记录的片段.

代码语言:javascript
复制
{
  interface: Interface {
    fragments: [ [ConstructorFragment], [EventFragment], [FunctionFragment] ],
    _abiCoder: AbiCoder { coerceFunc: null },
    functions: {
      'onERC721Received(address,address,uint256,bytes)': [FunctionFragment]
    },
    errors: {},
    events: { // <- This is what we're looking for
      'Received(address,address,uint256,bytes,uint256)': [EventFragment {
    name: 'Received',
    anonymous: false,
    inputs: [ [ParamType], [ParamType], [ParamType], [ParamType], [ParamType] ],
    type: 'event',
    _isFragment: true
  }],
  // ...
}

运行console.log(receiverContract.interface.events)将为您提供以下嵌套对象

代码语言:javascript
复制
  'Received(address,address,uint256,bytes,uint256)',
  EventFragment {
    name: 'Received', // <- This is the event name
    anonymous: false,
    inputs: [ [ParamType], [ParamType], [ParamType], [ParamType], [ParamType] ],
    type: 'event',
    _isFragment: true
  }

因此,为了查找和测试所发出的事件,这是可行的。

代码语言:javascript
复制
expect(
  Object.entries(receiverContract.interface.events).some(
    ([k, v]: any) => v.name === "Received"
  )
).to.be.equal(true);
票数 0
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/127208

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档