簡體   English   中英

在 Solidity 中繼承 function 調用后無法訪問的代碼

[英]Unreachable code after an inherited function call in Solidity

編譯代碼

contract Bar {

    function blockingFunction() public pure returns (bool) {
        assembly {
            return(0,0x20)
        }
    }
}

contract Foo is Bar {

    function foo() public pure returns(bool) {
        bool result = blockingFunction();
        require(result == true, "msg");
        return result;
    }
}

給我一個警告

Warning: Unreachable code.
  --> contracts/implementation/Foo.sol:18:9:
   |
18 |         require(result == true, "msg");
   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^


Warning: Unreachable code.
  --> contracts/implementation/Foo.sol:19:9:
   |
19 |         return result;
   |         ^^^^^^^^^^^^^

這對我來說毫無意義。 blockingFunction調用似乎阻止了以下代碼的執行,即使它應該返回 boolean。有人能告訴我如何解決這個問題嗎? 這是我的hardhat.config.ts

import "@nomicfoundation/hardhat-toolbox";
import { HardhatUserConfig } from "hardhat/config";

const config: HardhatUserConfig = {
  solidity: "0.8.9",
  mocha: {
    timeout: 100000000
  }
}

export default config;

來自文檔

return(p, s)    end execution, return data mem[p…(p+s))

執行將以assembly{return(0,0x20)}代碼結束。 所以當你打電話給這個

bool result = blockingFunction();

之后的代碼將不會執行

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM