“Web3.0”是对“Web2.0”的改进,【181公链2591合约開发3365微电】在此环境下,用户不必在不同中心化的平台创建多种身份,而是能打造一个去中心化的通用数字身份体系,通行各个平台。Web3.0被用来描述互联网潜在的下一阶段,一个运行在“区块链”技术之上的“去中心化”的互联网。使用Solidity编程语言编写合约代码。您可以使用Remix等在线IDE进行开发和测试。部署代币合约:将合约部署到ARB链上,并获取合约地址。 智能合约代码 直接上代码了,需要详细理解的自己百度吧,因为我也不是很懂 反正原理就是NFT的详细实体不可能传上区块链,完全上去要耗费太多gas了 所以只能将实体保存在系统后台,将NFT的文件URI上传到区块链形成NFT // SPDX-License-Identifier: MIT pragma solidity ^0.8.1; import "@openzeppelin/contracts/utils/Context.sol"; import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; contract NFTStore is Context, ERC20 { address private owner; struct Mints { address minter; uint256 amount; } mapping(uint256 => Mints) public tokenToMint; mapping(uint256 => uint256) private tokenAmounts; /** * @dev Constructor that gives _msgSender() all of existing tokens. */ constructor (uint256 tokenNum) ERC20("NFTStore", "NFC") { owner = msg.sender; _mint(_msgSender(), tokenNum * (10 ** uint256(decimals()))); } function mint(address _to,uint256 amount,uint256 tokenId) public { require(msg.sender == owner,"Only the owner of this Contract could mint!"); // 本文添加,否则函数 mint 会有逻辑错误 _mint( _to, amount) ; // 如果没有添加上一句 require,此处会有逻辑错误,任何人都可以免费获得NFC tokenAmounts[tokenId] = amount; Mints memory mintted = Mints({ minter: _to, amount: amount }); tokenToMint[tokenId]=mintted; } function getTokenAmount (uint256 tokenId) public view returns (uint256) { return tokenAmounts[tokenId]; } function gettokenMints(uint256 tokenId) public view returns ( address, uint256){ Mints memory mintted = tokenToMint[tokenId]; return (mintted.minter,mintted.amount); } function destroy() virtual public { require(msg.sender == owner,"Only the owner of this Contract could destroy It!"); selfdestruct(payable(owner)); } }