首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ERC-1155合同用更少的汽油来制造代金券吗?

ERC-1155合同用更少的汽油来制造代金券吗?
EN

Ethereum用户
提问于 2021-11-18 03:08:08
回答 1查看 4.5K关注 0票数 0

使用ERC-1155 (比ERC-721)普遍接受的好处是它节省了大量的气体。但是,在制造代币的时候,它真的能节省汽油吗?

如果是这样的话,我们是否应该在部署合同时预置薄荷令牌?我想知道OpenSea是怎么做到的。

EN

回答 1

Ethereum用户

发布于 2021-11-18 20:54:52

它真的在制造代币的时候节省汽油吗?

是的,在制造代币的时候可以节省很多汽油。让我们看看下面的示例,其中我创建了两个简单的OpenZeppelin契约。一个是ERC721,一个是ERC1155。

当我部署这些函数和薄荷时,我得到以下结果:

  • 用ERC721制造煤气要花费96,073英镑。
  • 用ERC1155铸币需要51,935美元的汽油

因此,您可以看到,在这种基本情况下,ERC721的成本几乎是薄荷糖的两倍。同样重要的是要注意的是,实现可能会有很大的变化,这会改变汽油价格。

ERC1155s之所以通常更便宜,是因为它们有一种更有效的存储数据的方法。

在部署合同时,我们是否应该预置铸币券?

这将取决于您的用例。如果您正在部署10k NFT集合,那么自己创建所有NFT可能不是一个好主意。相反,目前使用的一个常见模式是允许人们通过您的网站自己创建NFT。

我想知道OpenSea是怎么做到的

OpenSea使用一个名为LazyMinting的方法。在这里,你上传了所有的元数据,但实际上,你并没有把NFT的链,直到一个用户铸币NFT。这允许您上传NFT而无需支付任何费用。这也类似于在您的网站上有一个薄荷功能,在这两种情况下,最终用户谁想要NFT支付铸币的费用。这个解决方案的规模很好。

代码语言:javascript
复制
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.3;

import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/token/ERC1155/ERC1155.sol";


contract MyERC721 is ERC721, ERC721URIStorage, Ownable {
    constructor() ERC721("MyToken", "MTK") {}

    function safeMint(address to, uint256 tokenId, string memory uri)
        public
        onlyOwner
    {
        _safeMint(to, tokenId);
        _setTokenURI(tokenId, uri);
    }

    // The following functions are overrides required by Solidity.

    function _burn(uint256 tokenId) internal override(ERC721, ERC721URIStorage) {
        super._burn(tokenId);
    }

    function tokenURI(uint256 tokenId)
        public
        view
        override(ERC721, ERC721URIStorage)
        returns (string memory)
    {
        return super.tokenURI(tokenId);
    }
}

contract MyERC1155 is ERC1155, Ownable {
    constructor() ERC1155("") {}

    function setURI(string memory newuri) public onlyOwner {
        _setURI(newuri);
    }

    function mint(address account, uint256 id, uint256 amount, bytes memory data)
        public
        onlyOwner
    {
        _mint(account, id, amount, data);
    }

    function mintBatch(address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data)
        public
        onlyOwner
    {
        _mintBatch(to, ids, amounts, data);
    }
}
票数 2
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/113811

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档