NFT盲盒质押借贷理财dapp系统开发源代码

282 阅读2分钟

写NFT合约要实现哪些功能

比如你要发行一套NFT,开发对接v+hkkf5566,你要怎么写合约呢?

这个合约要实现至少以下几个功能:

1、“铸造”(mint)功能。

NFT是非同质化代币,也就是一种“币”(token)了。

根据我前面的NFT科普文章,所谓铸造,就是在区块链上记载了一个token的ID和其拥有者的地址。

2、转移功能。

要能让拥有者把一个token转移给另外一个人。

3、查询功能。

要能查询某个token在谁手里,一个人有多少token,等等这种类似功能。

4、元数据功能。

元数据这个术语,其实就是描述某事物各种属性的信息。由于图片一般比较大,所以图片本身都不放在以太坊上,而是放在web上或者IPFS上,链上只是存储了一个链接信息。

合约有了元数据功能,提供了tokenURI函数,人们就可以通过该函数的调用,获取某个token的元数据链接,然后读取元数据,并最终取得其图像。

5、合约元数据功能。

如果你想把你的NFT放在OpenSea上作为一个Collection(收藏集)出现,就要让OpenSea能获取关于你Collection的一些基本设置。

6、其他功能

比如团队分账功能(团队成员按一定的比例获取收益)、白名单预售功能(只有白名单里的人才能在预售阶段mint)等等。

import` `"@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol"; …… contract MyNFT is Ownable, ERC721Enumerable, PaymentSplitter { …… function setBaseURI(string memory _newBaseURI) public` `onlyOwner {` `    baseURI = _newBaseURI;   }` `function _baseURI() internal view virtual override returns (string memory) {` `    return baseURI;   }` `  {   "name""",   "description""NFT",   "image": "   "external_link": "   "seller_fee_basis_points"100, # Indicates a 1% seller fee.   "fee_recipient""0xA97F337c39cccE66adfeCB2BF99C1DdC54C2D721"`  `}` `import` `"@openzeppelin/contracts/security/ReentrancyGuard.sol"; pragma solidity ^0.4.22;contract SimpleStorage{     uint storedDate;` `    `  `    function set (uint x) public{         storedDate = x;` `    }     function get() public view returns(uint){         return` `storedDate;` `    }} pragma solidity ^0.4.22;contract SolidityTest{     constructor() public{` `         function getResult() public view returns(uint){            //这是单行注释` `     /*      *这是多行注释` `     *类似其他语言的注释      */` `        uint a = 1;         uint b = 2;` `        uint result = a + b;         return` `result;` `    }}``