Contract-Design
兩個合約的相互依賴
我有以下程式碼
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
當添加新的“作者”時,應由合約呼叫此函式。所以,我有兩個契約的相互依賴:
Files
和AuthorTokens
. 如何處理?我應該將兩個契約都設置為指向彼此的地址嗎?我可以將這兩個契約合二為一,但
Files
它是 ERC-20 和AuthorTokens
ERC-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 函式。