内联汇编调用问题

登链社区问答 2022-11-24 17:17:48 阅读数:933

问题调用汇编内联

小弟是个内联汇编新手,在学习的时候,偶尔想通过内联汇编的方式,去获取token的balance但是代码在有的时候会被revert实在找不出原因求助各位大佬

合约两个方法的区别,仅仅是一个_user变量一个是从bytes参数中mload出来的,一个是hardcode写死的通过require可以判断两个值是想等的

但是使用mload出来的变量,合约执行会revert,写死的可以执行通过

求助各位大大帮忙解惑

image.png




采纳答案1:

我已经找到原因了,不是这个问题

我通过

address _user = mload(add(data,21));

类似这样的方法,从bytes中取出一个地址的时候

读取的不是一个20个字节的地址类型,而是一个32字节的数据段,赋值给address类型,只是把前面的12个字节的内容『隐藏』了,而不是『清除』了

所以require在把_user当做address进行判断的时候,是没有出错的

但是其实user的前面的12个字节是有值的

通过mstore写入的时候,会把前面的值带入进去到memory中,所以会在staticcall的时候出错



其他答案1:
版权声明:本文为[登链社区问答]所创,转载请带上原文链接,感谢。 https://learnblockchain.cn/question/4326