《Solidity 教程》源文件結構

這一系列教程中,我們會用最詳細的方式講解如何解析合約,配合Solidity官方教程,了解這些神合約為什麼能被眾多項目方和開發者接受及使用,並且在學習完這些後,了解如何寫出好的合約

SPDX License Identifier

Solidity編譯器鼓勵使用機器可讀的SPDX許可證標識符每個源檔都應以指示其許可證的註釋開頭

// SPDX-Licence-Identifier: MIT

有關如何使用SPDX許可證標識碼的詳細資訊,請參考SPDX網站,這邊會有一些許可證註釋開頭的其他用法,不過我們可以看到 Azuki.solERC721A.sol 都只有用最開始提到的,這邊就不對其他種許可證多做解釋

Version Pragma

我們可以且應該在 Solidity 源檔中使用版本編譯指示,以避免引入不相容更改的未來編譯器版本的編譯,版本編譯指示按如下方式使用:

pragma solidity ^0.8.0;

這表示 Azuki.solERC721A.sol 都不會被早於版本 0.8.0 的編譯器進行編譯,並且也不能在從版本 0.9.0 開始的編譯器上工作(這個條件是由於在版本號前加上了 ^

如果想為編譯器指定更複雜的規則,可以參考這邊

ABI Code Pragma

通過使用 pragma abicoder v1pragma abicoder v2 可以在 ABI 編碼器和解碼器的兩種實現之間進行選擇

新的 ABI 編碼器(abicoder v2)能夠對任意嵌套的數位和結構進行編碼和解碼。由於預設情況下將從 Solidity 0.8.0 開始啟動它,也可以選擇使用 pragma abicoder v1;選擇舊編碼器

Azuki.solERC721A.sol 都使用abicoder v2,新編碼器支援的類型集是舊編碼器支援的類型的嚴格超集,使用它的合同可以與不受限制的合同進行交互

匯入其他源檔語法

Solidity 支援導入語句,以使用模組化的代碼,語法類似於 JavaScript 中導入的代碼(從 ES6 開始),不過Solidity 不支援 export default 的概念

Azuki.sol 中使用:

import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/security/ReentrancyGuard.sol";
import "./ERC721A.sol";
import "@openzeppelin/contracts/utils/Strings.sol";

ERC721A.sol 中使用:

import "@openzeppelin/contracts/token/ERC721/IERC721.sol";
import "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol";
import "@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol";
import "@openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol";
import "@openzeppelin/contracts/utils/Address.sol";
import "@openzeppelin/contracts/utils/Context.sol";
import "@openzeppelin/contracts/utils/Strings.sol";
import "@openzeppelin/contracts/utils/introspection/ERC165.sol";

可以看到其匯入了openzeppelin的 Ownable.sol , ReentrancyGuard.sol , Strings.sol 等常用合約,讀者可以分別到以下連結閱讀合約解析:

  • ERC721A & ERC721 合約解析
  • ERC165 合約解析
  • Ownable 合約解析
  • ReentrancyGuard 合約解析
  • Address, Context, Strings 合約解析

Comment

使用 // 進行單行註釋、 /*...*/ 進行多行註釋,這邊通常會用來解釋代碼,尤其是在一些模板類型的原碼,像是 ERC721A.sol (算是優化版的 ERC721),我們可以看到他使用了非常多的註釋,方便使用這個合約的開發者了解這個合約的使用辦法,反之, Azuki.sol 就沒有這麼多的註釋

今天的內容就到這邊,後面我們會從各個面向繼續解讀Azuki合約

Subscribe to Samumu.eth
Receive the latest updates directly to your inbox.
Verification
This entry has been permanently stored onchain and signed by its creator.