Solidity
導入他人合約時的 SPDX 許可證
從 Solidity 0.6.8開始,如果合約沒有使用 SPDX 許可證標識符進行註釋,編譯器就會開始拋出警告:
// SPDX-License-Identifier: MIT contract MyContract { ... }
假設我正在導入第三方合約,例如來自 OpenZeppelin 或Rob Hitchens 建構的 UnorderedKeySet 庫的合約。我最終會想在 Etherscan 上驗證我的合約的原始碼,在此之前將合約展平是很常見的。在這種情況下,我應該如何處理 SPDX 標識符?
一個扁平化的文件可以包含多個 SPDX 標識符嗎?
您說得對,這是扁平化 Etherscan 驗證的原始碼時的一個問題。有兩種解決方案。
最好的解決方案是不扁平化原始碼,而是使用標準輸入 JSON 進行驗證。到目前為止,大多數工具外掛都支持這一點(如truffle -plugin-verify和hardhat-etherscan)。如果您不使用這些工具中的任何一個,您還可以使用Solt工具,該工具為特定合約生成標準輸入 JSON 文件,然後可以將其送出給 Etherscan。
另一種(但更糟糕的)解決方案是使用可以刪除 SPDX 標識符的展平工具,例如sol-merger。然後,您可以將您選擇的 SPDX 標識符添加到展平文件的頂部(如果您願意,也可以不使用)。