Solidity
事件參數的限制是什麼?
事件中可以發送的參數數量是否有任何限制?
我有一個函式,我想在其中觸發具有 12 個參數的事件,其中 6 個參數是數組。我的堆棧太深,嘗試使用更少的變數。沒有該事件,該功能正常工作。
我猜事件參數有一些限製或計入solidity函式中的最大參數,但我找不到任何關於它的文件。
任何人都可以澄清這一點嗎?
回答我自己的問題:
如果查看聲明 FunctionDefinition 的 ContractCompiler.cpp,您會看到堆棧上的元素限制為 17 個;
if (stackLayout.size() > 17) BOOST_THROW_EXCEPTION( CompilerError() << errinfo_sourceLocation(_function.location()) << errinfo_comment("Stack too deep, try removing local variables.") );
事件被定義為函式,如 ExpressionCompiler.cpp 中所示。
簡單地說,事件被視為函式,因此它們的參數限制為 17 個。數組計為 2,所以在我的範例中,我有 6 個數組 + 6 個普通參數,這等於 18,我將堆棧打破 1。