Solidity

事件參數的限制是什麼?

  • April 19, 2018

事件中可以發送的參數數量是否有任何限制?

我有一個函式,我想在其中觸發具有 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。

引用自:https://ethereum.stackexchange.com/questions/43459