Solidity

在混音中顯示價值

  • August 13, 2022

我是 Solidity 的新手。下面是簡單的 Solidity 原始碼

pragma solidity ^0.4.21; 

contract CAT {
   event XYZ (uint Z ) ;
   uint[] x;  
   uint a ;

function f(uint[]  memoryArray) public returns (uint[] ){
      x = memoryArray; 
     uint[]  y = x; 
     y.length = 2 ;       // line 1
     a = y.length ; 
     emit XYZ ( a  );
    return x ; 
 }
}

我使用混音。我部署了契約,我可以輸入memoryArray1.

在此處輸入圖像描述

但是,我使用事件並發出,認為在部署後我會a在左側的混音中看到 的值,但那裡沒有顯示類似的東西。這意味著我在那裡完全錯過了一些東西。任何人都可以讓我知道我需要添加什麼,以便我也可以看到 a in remix 的價值。

如果你想在你的智能合約之外顯示值(在這種情況下在 remix IDE 中看到它)你必須使用view關鍵字。它是只讀函式,它確保狀態變數在呼叫後不能被修改。

重要提示:最佳實踐表明您view只能使用函式從智能合約中讀取變數。

在這種情況下,您在讀取數組之前實現了一個邏輯,並且您將為此操作花費更多的氣體。

您可以考慮實現一個getter()允許您讀取數組值的函式的選項。

調整原始智能合約的範例如下:

// SPDX-License-Identifier: MIT
pragma solidity ^0.4.21; 

contract CAT {
   event XYZ (uint Z ) ;
   uint[] x;  
   uint a ;

   function f(uint[] memoryArray) public {
       x = memoryArray; 
       uint[] storage y = x; 
       y.length = 2;
       a = y.length; 
       emit XYZ (a);
   }

   // NOTE: Getter() function
   function getValue() external view returns(uint[]) {
       return x;
   }
   
}

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