Solidity

在 Solidity 中處理錯誤是否有很好的解決模式和實踐?

  • September 6, 2021

本著Solidity是否有很好解決且簡單的儲存模式的精神?

是否有已知的、久經考驗的實踐來處理大型 Solidity 程式碼庫中的錯誤?

在軟體工程中,錯誤名稱、程式碼和描述的清晰集合是很常見的,通常通過列舉來實現。我見過的唯一一個堅持這種嚴格的錯誤處理的項目是Compound,但肯定還有更多。Compound 的程式碼庫很大,並且與形式驗證腳本等其他技巧交織在一起,因此嚴格來說,它們的程式碼庫並不是回答這個問題時要參考的最佳實現。

Solidity v0.8.4 來救援!

// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.4;

error Unauthorized();

contract VendingMachine {
   address payable owner = payable(msg.sender);

   function withdraw() public {
       if (msg.sender != owner) {
           revert Unauthorized();
       }

       owner.transfer(address(this).balance);
   }
   // ...
}

注意第 4 行新的閃亮error語句。這是 Solidity 的遊戲規則改變者 - 比恢復原因字元串更易於使用、更高效、更優雅。

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