首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Opcode LOG3数据值问题

Opcode LOG3数据值问题
EN

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

我正在尝试从LOG3获取事件数据,但这些数据有时在stack5上,有时在stack6上,有人能帮上忙吗?

例如,传输量=两个传输函数中的1,请看一下

操作码栈.

代码语言:javascript
复制
event Transfer(address indexed from, address indexed to, uint256 value);


function transfer1(address to, uint tokens) public returns (bool success) {
    emit Transfer(msg.sender, to, tokens);
    return true;
}

function transfer2() public returns (bool success){
    uint256 amount = 1;
    emit Transfer(msg.sender, msg.sender, amount);
    return true;
}

传输量数据位于transfer1:

的LOG3结构日志第5位

"0x0000000000000000000000000000000000000000000000000000000000000080","0x0000000000000000000000000000000000000000000000000000000000000020","0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef","0x0000000000000000000000005b38da6a701c568545dcfcb03fcb875f56beddc4","0x0000000000000000000000005b38da6a701c568545dcfcb03fcb875f56beddc4","0x0000000000000000000000000000000000000000000000000000000000000001","0x000000000000000000000000000000000000000000000000000000000000004e","0x000000000000000000000000000000000000000000000000000000002e687de1“

传输量数据位于transfer2:

的LOG3结构日志第6位置

"0x0000000000000000000000000000000000000000000000000000000000000080","0x0000000000000000000000000000000000000000000000000000000000000020","0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef","0x0000000000000000000000005b38da6a701c568545dcfcb03fcb875f56beddc4","0x000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000001","0x000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c","0x000000000000000000000000000000000000000000000000000000000000006a","0x00000000000000000000000000000000000000000000000000000000a9059cbb“

我怎么知道该做什么?谢谢。

EN

回答 1

Ethereum用户

回答已采纳

发布于 2022-04-25 13:35:11

好的,我想我现在理解你的问题了,这不是一个坚实的问题,在我看来,你似乎误解了这两个执行点的堆栈。

LOG3操作码(通常是LOGX )从堆栈中获取以下输入:

  • 0x00 -偏移量:在数据内存中)
  • 0x20 -长度:内存中的数据)
  • 0x40 -主题0:keccak256(“Transfer(地址、地址、uint256)")
  • 0x60 -主题1:从
  • 0x80 -主题2:索引到

因此,在这一点上,只有堆栈中的前5个槽与您相关,其他任何内容都适用于执行的其余部分,但与LOGX操作码无关。

您将在内存偏移:偏移+长度中找到其余的数据(即值),实际上,在这两种情况下,值1都是按32个字节编码的。

索引参数放置在主题部分,其中非索引参数放置在数据部分,因此主题部分(堆栈3和4)中包括fromto,而写入数据部分的只有value,这就是为什么内存长度仅为0x20 (只有一个ABI编码参数)。

我希望这能回答你的问题。

票数 0
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

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

复制
相关文章

相似问题

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