Solidity
可鑄幣 ERC721 的 CappedCrowdsale
我正在考慮使用 OpenZeppelin 的 CappedCrowdsale 和 MintableERC721 建立一個有上限的人群銷售。我想知道是在達到上限後鑄造代幣還是在收到付款後單獨鑄造更好?我已經開始通過假設在人群銷售結束時鑄造它來建構它,但我不確定一些事情。我想出了以下幾點:
pragma solidity ^0.4.24; import "./openzeppelin-solidity/contracts/crowdsale/validation/CappedCrowdsale.sol"; import "./openzeppelin-solidity/contracts/token/ERC721/ERC721Full.sol"; import "./openzeppelin-solidity/contracts/token/ERC721/ERC721Mintable.sol"; import "./openzeppelin-solidity/contracts/token/ERC721/IERC721.sol"; contract SSale is CappedCrowdsale, ERC721Full { using SafeMath for uint256; /* ??? using ERC721Mintable for ERC721Full; ??? uint256 private _rate; address private _wallet; */ IERC721 private _token; /* @param _rate for Crowdsale @param _wallet for Crowdsale @param _token for Crowdsale @param _cap for CappedCrowdsale @param name for ERC721Full @param symbol for ERC721Full */ constructor(uint256 _rate, address _wallet, IERC721 token, uint _cap, string name, string symbol) public Crowdsale(_rate, _wallet, _token) CappedCrowdsale(_cap) ERC721Full(name, symbol){} }
目前版本在第 17 行給出了 DeclarationError: Identifier not found or not unique:
IERC721Full private _token;
原因 CappedCrowdsale 繼承了 Crowdsale 合約,該合約除了 CappedCrowdsale 的 _cap 外,還以(uint256 匯率、地址錢包、IERC20 代幣)為參數。在我的情況下,我必須用 IERC721 替換 IERC20。
我不確定是否/如何導入 ERC721Full 和介面 ERC721Mintable,因為 ERC721Mintable 不接受建構子參數,但繼承了 ERC721Full,它分別採用兩個字元串名稱、符號。對於導入相關庫和相應地建構建構子的任何提示、更正和建議,我將不勝感激。也請隨意評論我選擇的庫,讓我知道您對 0xcert,Modular-Networks 的看法。
顯然,將
Crowdsale.sol
,CappedCrowdsale.sol
用於潛在的可鑄造 ERC721 眾籌並不是最好的主意,因為它們的編寫考慮了 ERC20。OpenZeppelin 的 repo 上的 PR #776 旨在解決這種情況,但是 ERC721s 的新送出帶來了修改程式碼的需要。我會嘗試提出一些問題,完成後我會編輯這個答案。