Remix

如何從我的 nft 契約中刪除版稅地址?

  • June 2, 2022

所以我最近創建了一個 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 &gt;= cost * _mintAmount);
    }
}

for (uint256 i = 1; i &lt;= _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 &gt; 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。

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