Solidity

錯誤:在 Solidity 0.4.11 上的函式參數列表中找不到記錄的參數“{uint”

  • July 1, 2019

我正在嘗試在最新的 Solidity 編譯器上編譯 Gav Wood 的錢包。看起來最新的 Solidity 編譯器對我不完全理解的程式碼有一些問題。我想知道如何修復程式碼或編譯過程。

我收到錯誤:

       Error: Documented parameter "{uint" not found in the parameter list of the function.
contracts/Wallet.sol:358:13: Warning: Return value of low-level calls not used.
           _to.call.value(_value)(_data);
           ^---------------------------^

相關程式碼為:

   // first, take the opportunity to check that we're under the daily limit.
   if (underLimit(_value)) {
       SingleTransact(msg.sender, _value, _to, _data);
       // yes - just execute the call.
       _to.call.value(_value)(_data);
       return 0;
   }

此錯誤是指DocString 註釋(通常稱為NatSpec 格式註釋)中的Doxygen 標籤格式錯誤。

**如果您沒有正確格式化這些標籤值,Solidity 編譯器會“呻吟”**並且不會編譯(不幸的是,即使其餘程式碼是正確的!)。


解決您的問題

注意:你的問題真的很老,我找不到語法錯誤的原始原始碼。我將使用 Oleg Kondrahanov 程式碼範例的修改版本來解釋(同時刪除constant已棄用的關鍵字。

您程式碼中的問題並非來自_to.call.value(_value)(_data);(這只是一個警告,您仍然可以使用 Solidity 中的警告進行編譯)。相反,問題來自您如何在 NatSpec 中使用 doxygen 標籤記錄參數。

在您的情況下,您必須在@param標記後包含函式參數的名稱(而不是類型)。

從這裡改變它:

/**
* Calculate the current price for buy in amount.
*
*      REPLACE THIS SECTION
*         |           |
*         v           v
* @param  {uint amount} Buy-in value in wei.
*/
function calculatePrice(uint amount) public pure returns (uint) {
   // Do something
}

對此:

/**
* Calculate the current price for buy in amount.
* 
*       WITH THIS
*        |    |
*        v    v
* @param amount Buy-in value in wei.  
*/
function calculatePrice(uint amount) public pure returns (uint) {
   // Do something
}

所以在@paramdoxygen 標籤之後,你總是提到變數名(而不是@return你提到變數類型的地方。所以格式是這樣的:

  /**
   * @param _charity The ethereum address of the charity you want to donate
   * @param _amount The amount in Wei to donate to the charity
   * @return bool returns true if success
   */
   function donateEther(address _charity, uint _amount) public pure returns (bool) {
       // your code here
   }

什麼是 NatSpec 評論?

在以前的 Remix IDE 中,您可以通過顏色看到Standard Solidity 註釋 **Natspec 註釋之間的區別。**見下圖:

Solidity 中的正常與 Natspec 評論

基本上,NatSpec 註釋用於兩個目的。當您通過 CLI 使用編譯器編譯 Solidity 合約時solc,您可以指定以下兩個標誌之一(或兩者),以生成兩個文件文件(JSON 格式):

  • solc <file_name.sol> --devdoc: 生成開發者文件
  • solc <file_name.sol> --userdoc: 生成使用者文件

請注意,這不會創建單獨的文件!但只需在 CLI 中以 JSON 格式輸出文件。請參閱Solidity 文件


可用的 Doxygen 標籤

Solidity 中可用的Doxygen 標籤包括@title@author@notice@dev和. 只有標籤可用於在 UI 上生成自定義消息(當使用者送出與智能合約互動時)。例子 :@param``@return``@notice

/// @notice Thank you for your donation, you are about to send `_value / 10**18` Ether to the charity address `_address`.
/// @param _value The amount of ether you want to donate
/// @param _charity The Ethereum address of the charity
function donateEther(address _charity, uint _amount) external returns (bool) {
   // your code here
}

假設我們將發送**0.34 ethers(目前 ≈ 10 美元)到 address0x7a84B6d2B1A1021df402437712AaE717472e829F**的範例,當您發送交易時,上面的範常式式碼將在 UI 上生成如下消息:

感謝您的捐贈,您即將向慈善地址**0x7a84B6d2B1A1021df402437712AaE717472e829F發送****0.34個乙太幣**  

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