ARB链上代币合约质押挖矿系统开发

发布于: 雪球转发:0回复:0喜欢:0

“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));      } }