我目前正在使用nfts的openzeppelin ERC721标准进行NFT项目。
当从openzeppelin继承ERC721 NFT合同标准时,需要在构造函数中传递nft的"tokenName“和"tokenSymbol”。
我的问题是,为了做到这一点,在部署之前,我需要硬代码 nft的名称和契约中的符号。此代码片段来自将从不同契约(主契约)控制的NFT合同,我需要能够将信息( e:g tokenName和tokenSymbol)从主合同传递给nft契约。
将tokenName和tokenSymbol硬编码到这个nft合同中是个问题。
与硬编码不同,我希望在从主契约部署契约时,能够给NFT一个动态的名称和符号。
坚固版0.8.4
这是openzeppelin的常规ERC721构造函数;令牌名"Metaverse令牌“和符号"METT”被硬编码到契约中。
constructor (address marketPlaceAddress) ERC721 ("Metaverse Tokens", "METT") {
contractAddress = marketPlaceAddress;
}这是我修改的代码;令牌名称和符号被收集为来自契约中的构造函数的输入。
//导入erc721令牌标准导入erc721
//导入扩展设置令牌uri导入"@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol";
契约NFT是ERC721URIStorage { // NFT分发器地址contractAddress的合同地址;//跟踪令牌uint256公共tokenCount;字符串公共tokenName;字符串公共tokenSymbol;
constructor (address Dispenser, string memory _tokenName, string memory _tokenSymbol)
ERC721 ( tokenName , tokenSymbol) {
// use Dispenser address to deploy NFT contract
contractAddress = Dispenser;
// set the name of the token
tokenName = _tokenName;
// set the symbol of the token
tokenSymbol = _tokenSymbol;
// set the tokenCount to 0 on deployment
tokenCount = 0;
}我的代码的问题是,它不会将名称和符号传递给它继承的ERC721契约,但是未经修改的代码会传递它们(名称和符号)。
因此,我的问题如下:
请帮帮忙
发布于 2022-07-02 17:40:29
试试这个:
string tokenName = "TokenName";
string tokenSymbol = "TKS";
address contractAddress;
constructor (address Dispenser,) ERC721 ( tokenName , tokenSymbol)
{
//your other codes here, excluding token name and symbol//
contractAddress = Dispenser;
}您的方法不起作用,因为构造函数在部署时运行,而且您的ERC721继承的契约需要立即在它自己的构造函数中设置令牌名称和符号,因为您导入了它。
另一种方法是
constructor() ERC721("TokenName", "Symbol") {
//your other codes here
}https://ethereum.stackexchange.com/questions/131075
复制相似问题