Contract-Development
什麼是重新映射以及它們如何可靠地工作?
它們如何與 solc 一起使用?
您可能想查看關於Solidity Source File 佈局的文件。
solidity 編譯器只能引用電腦本地存在的文件。所以直接從 GitHub 導入(例如)是不可能的。
現在,讓我們假設您想使用 OpenZeppelin 令人驚嘆的智能合約庫@openzeppelin/contracts-ethereum-package:
pragma solidity 0.5.11; import "@openzeppelin/contracts-ethereum-package/contracts/math/SafeMath.sol"; contract MyContract { using SafeMath for uint256; ... }
如果您使用的是truffle,這很容易。您只需執行
truffle compile
,就會為您神奇地整理好導入。如果你想使用
solc
,事情會變得有點複雜。您必須指定以下內容:
- “prefix” = 智能合約中使用的路徑,即“@openzeppelin/contracts-ethereum-package”
- “target” = 下載到您電腦上的 OpenZeppelin 合約的絕對路徑
格式如下所示:
solc prefix=target ./MyContract.sol
讓我們即插即用路徑:
solc --bin @openzeppelin/contracts-ethereum-package=/Your/Absolute/Path/To/@openzeppelin/contracts-ethereum-package ./MyContract.sol
(我指定
--bin
編譯器將在您的終端中列印字節碼)如果你通過 npm 下載了 OpenZeppelin 庫,它應該位於 repo 根目錄下的“node_modules”文件夾中。
注意事項:
- 如果您沒有
solc
編譯器,請查看文件以確保它適合您的作業系統。- 不要使用 npm/node 來安裝編譯器,因為它的功能較少並且重新映射不起作用。
- 不同的工具可能會以不同的方式處理重新映射。在撰寫此答案時,sol-compiler@3.1.13在合約字節碼末尾生成的數據區域與truffle@5.0.33 不同。