小弟是个内联汇编新手,在学习的时候,偶尔想通过内联汇编的方式,去获取token的balance 但是代码在有的时候会被revert 实在找不出原因 求助各位大佬
合约两个方法的区别,仅仅是一个_user变量 一个是从bytes参数中mload出来的,一个是hardcode写死的 通过require可以判断两个值是想等的
但是使用mload出来的变量,合约执行会revert,写死的可以执行通过
求助各位大大帮忙解惑
我已经找到原因了,不是这个问题
我通过
address _user = mload(add(data,21));
类似这样的方法,从bytes中取出一个地址的时候
读取的不是一个20个字节的地址类型,而是一个32字节的数据段,赋值给address类型,只是把前面的12个字节的内容『隐藏』了,而不是『清除』了
所以require在把_user当做address进行判断的时候,是没有出错的
但是其实user的前面的12个字节是有值的
通过mstore写入的时候,会把前面的值带入进去到memory中, 所以会在staticcall的时候出错