Contract-Design

兩個合約的相互依賴

  • September 2, 2020

我有以下程式碼AuthorTokens.sol

   Files files;

   // ...

   function mintAuthor(address _owner) external {
       require(msg.sender == files, "System function");
       uint256 _id = _sellerToToken(_owner);
       balances[_id][_owner] = 10**digitsConstant;
       TransferSingle(msg.sender, 0, _owner, _id, 10**digitsConstant);
   }

Files.sol當添加新的“作者”時,應由合約呼叫此函式。

所以,我有兩個契約的相互依賴:FilesAuthorTokens. 如何處理?我應該將兩個契約都設置為指向彼此的地址嗎?

我可以將這兩個契約合二為一,但Files它是 ERC-20 和AuthorTokensERC-1155。

那麼該怎麼辦?

一種解決方案是將合約初始化移動到一個單獨的函式中

contract Files {
   ERC20 authorToken;
   function init(ERC20 token) public {
       require(address(authorToken) == address(0x0));
       authorToken = token;
   }
}


contract AuthorToken {
   Files files;
   function init(Files f) public {
       require(address(files) == address(0x0));
       files = f;
   }
}

部署會稍微複雜一些,因為您必須呼叫 init 函式。

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