Contract-Development

什麼是重新映射以及它們如何可靠地工作?

  • September 2, 2019

它們如何與 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 不同

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