AmazingAng / WTF-Solidity

我最近在重新学solidity,巩固一下细节,也写一个“WTF Solidity极简入门”,供小白们使用,每周更新1-3讲。Now supports English! 官网: https://wtf.academy
https://wtf.academy
Other
10.75k stars 1.89k forks source link

45.时间锁 #746

Closed Jmagicc closed 2 weeks ago

Jmagicc commented 3 weeks ago

Details (细节)

call交易发生overflow

Jmagicc commented 3 weeks ago

3e765ce076005757ff3466b279a53aa call交易发生overflow

ompatil1357 commented 3 weeks ago

can you plz explain me the accurate error you trying to ask.

XdpCs commented 2 weeks ago

看起来只是简单call交易被revert了 能否给更多的细节

Jmagicc commented 2 weeks ago

https://www.wtf.academy/docs/solidity-103/Timelock/

执行 (6. 在锁定期满调用executeTransaction)时候发生错误,call交易发生overflow

XdpCs commented 2 weeks ago

https://www.wtf.academy/docs/solidity-103/Timelock/

执行 (6. 在锁定期满调用executeTransaction)时候发生错误,call交易发生overflow

I will check it. Wait.

XdpCs commented 2 weeks ago

3e765ce076005757ff3466b279a53aa call交易发生overflow

函数签名使用错误,应使用changeAdmin(address)

XdpCs commented 2 weeks ago
// SPDX-License-Identifier: GPL-3.0

pragma solidity >=0.7.0 <0.9.0;

contract SignatureTest {

    event Signature(bytes);

    function Sign(string memory signature, bytes memory data) public {
        emit Signature(abi.encodePacked(bytes4(keccak256(bytes(signature))), data));
    }
}

可以用这个合约测试一下签名

XdpCs commented 2 weeks ago

@Jmagicc 大佬如果看好没问题的话 可以关闭issue 谢谢

Jmagicc commented 2 weeks ago

数字签名验证没问题。 // 利用call执行交易 (bool success, bytes memory returnData) = target.call{value: value}(callData); require(success, "Timelock::executeTransaction: Transaction execution reverted."); 这里发生了overflow,这会不会是solidity的版本影响呢

XdpCs commented 2 weeks ago

你截图里面的参数传的是changeAdmin(address newAdmin),真正的函数签名是:changeAdmin(address) 建议看一下函数选择器那一章 https://github.com/AmazingAng/WTF-Solidity/blob/main/29_Selector/readme.md

Jmagicc commented 2 weeks ago

感谢提醒