如何從我的 nft 契約中刪除版稅地址?
所以我最近創建了一個 nft 集合,在創建了合約並鑄造了 1000 個 nft 之後,我在原始碼中看到它的創建者(hashlips)有一行程式碼收取 5% 的費用:
function withdraw() public paid onlyOwner { // 這將支付 HashLips 初始銷售額的 5%。// 如果需要,您可以刪除它,或者保留它以支持 HashLips 和他的頻道。// ================================================= ============================ (bool hs, ) = 應付(0x943590A42C27D08e3744202c4Ae5eD55c2dE240D).call{value: address(this).balance * 5 / 100}(""); 要求(hs);// ================================================= ==============================
// This will payout the owner 95% of the contract balance. // Do not remove this otherwise you will not be able to withdraw the funds. // ============================================================================ (bool os, ) = payable(owner()).call{value: address(this).balance}(""); require(os); // ============================================================================ }
之後我刪除了它並在 remix 中編譯它,現在它看起來像這樣:
函式withdraw() public pay onlyOwner { // ========================================= ===================================== (bool os, ) = payable(owner()).call {value: 地址(this).balance}(""); 要求(作業系統);// ================================================= ============================= }
問題是我讀到你不能更改已經部署的合約的原始碼,所以我之後刪除它並在 remix 中編譯文件並不重要。當我從合約地址提現到我的時,他仍然會得到 5% 的費用。該系列在 Opensea 上,我在那裡設置了 3.5% 的費用。是否有可能以某種方式從已部署的契約中刪除版稅地址,還是我必須使用正確的原始碼創建一個新契約並再次鑄造 nft?
完整程式碼:
// SPDX 許可證標識符:GPL-3.0
實用性 >=0.7.0 <0.9.0;
導入“@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol”;導入“@openzeppelin/contracts/access/Ownable.sol”;
合約 NFT 是 ERC721Enumerable, Ownable { using Strings for uint256;
字元串公共baseURI;字元串 public baseExtension = “.json”;
uint256 公共成本 = 0.025 乙太幣;uint256 公共 maxSupply = 10000; uint256 public maxMintAmount = 10000; 布爾公共暫停=假;
映射(地址 => 布爾)公共白名單;
建構子(字元串記憶體_name,字元串記憶體_symbol,字元串記憶體_initBaseURI)ERC721(_name,_symbol){setBaseURI(_initBaseURI);薄荷(msg.sender,100);}
// internal function _baseURI() internal view virtual override returns (string memory) { return baseURI; }
// public function mint(address _to, uint256 _mintAmount) public應付{ uint256 supply = totalSupply(); 要求(!暫停);要求(_mintAmount > 0);要求(_mintAmount <= maxMintAmount);要求(供應 + _mintAmount <= maxSupply);
if (msg.sender != owner()) { if(whitelisted[msg.sender] != true) { require(msg.value >= cost * _mintAmount); } } for (uint256 i = 1; i <= _mintAmount; i++) { _safeMint(_to, supply + i); } }
function walletOfOwner(address _owner) public view 返回 (uint256
$$ $$memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256$$ $$記憶體 tokenIds = new uint256; for (uint256 i; i < ownerTokenCount; i++) { tokenIds$$ i $$= tokenOfOwnerByIndex(_owner, i); } 返回tokenIds;} function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), “ERC721Metadata: URI query for nonexistent token” );
string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), baseExtension)) : ""; }
//唯一所有者函式 setCost(uint256 _newCost) public onlyOwner { cost = _newCost; }
函式 setmaxMintAmount(uint256 _newmaxMintAmount) public onlyOwner { maxMintAmount = _newmaxMintAmount; }
函式 setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; }
函式 setBaseExtension(字元串記憶體 _newBaseExtension) public onlyOwner { baseExtension = _newBaseExtension; }
功能暫停(布爾_狀態)公共onlyOwner {暫停=_狀態;} function whitelistUser(address _user) public onlyOwner { whitelisted
$$ _user $$=真;} function removeWhitelistUser(address _user) public onlyOwner { whitelisted$$ _user $$=假;} 函式withdraw() public pay onlyOwner { // ========================================= ===================================== (bool os, ) = payable(owner()).call {value: 地址(this).balance}(""); 要求(作業系統);// ================================================= ============================= } }
哎喲。更改區塊鏈上的程式碼是不可能的,所以是的,您的選擇是接受它或重新開始新契約。看看單元測試,因為您可能在部署之前已經發現了這一點。
如果您出售了任何 NFT,您應該能夠使用自毀來獲得合約的餘額而無需使用費,但問題是如何設置新合約仍然兌現已售出的 NFT。