我有一个有这个构造函数的合同:
constructor(address _nativeTokenWrapper) TokenStore(_nativeTokenWrapper) initializer {}这个initialize函数是:
/// @dev Initiliazes the contract, like a constructor.
function initialize(
address _defaultAdmin,
string memory _name,
string memory _symbol,
string memory _contractURI,
address[] memory _trustedForwarders,
address _royaltyRecipient,
uint256 _royaltyBps
) external initializer {
// Initialize inherited contracts, most base-like -> most derived.
__ReentrancyGuard_init();
__ERC2771Context_init(_trustedForwarders);
__ERC721_init(_name, _symbol);
// Initialize this contract's state.
_setupDefaultRoyaltyInfo(_royaltyRecipient, _royaltyBps);
_setupOwner(_defaultAdmin);
_setupContractURI(_contractURI);
_setupRole(DEFAULT_ADMIN_ROLE, _defaultAdmin);
_setupRole(MINTER_ROLE, _defaultAdmin);
_setupRole(TRANSFER_ROLE, _defaultAdmin);
// note: see `_beforeTokenTransfer` for TRANSFER_ROLE behaviour.
_setupRole(TRANSFER_ROLE, address(0));
// note: see `onlyRoleWithSwitch` for UNWRAP_ROLE behaviour.
_setupRole(UNWRAP_ROLE, address(0));
// note: see `onlyRoleWithSwitch` for UNWRAP_ROLE behaviour.
_setupRole(ASSET_ROLE, address(0));
}当我使用Remix部署时,当我试图调用initialize函数时,我会看到一个错误:"message": "execution reverted: Initializable: contract is already initialized"。
我遇到的问题是契约初始化时所有的值都是空的,没有所有者,也没有管理员或其他任何东西。
如何使用部署智能契约后所需的所有数据调用函数initialize?
发布于 2022-11-10 05:32:35
您的initialize函数有一个修饰符initializer,我相信它是从这里导入的。
修饰符要求您在部署契约本身时调用initialize函数,在部署契约后不能调用该函数。
您是否试图使用可升级的模式进行部署?
https://ethereum.stackexchange.com/questions/139130
复制相似问题