Solidity

可鑄幣 ERC721 的 CappedCrowdsale

  • September 14, 2018

我正在考慮使用 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 的新送出帶來了修改程式碼的需要。我會嘗試提出一些問題,完成後我會編輯這個答案。

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