马蹄链NFT智能合约系统开发丨技术分析
Matic Network是一种基于侧链的公共区块链扩展解决方案。它的基础是Plasma框架的调整实施。Matic提供了可扩展性,同时以安全和分散的方式确保了卓越的用户体验。它在KovanTestnet上为Etalum提供了一个工作实现。Matic打算在未来支持其他区块链,这将使它能够提供互操作性功能,同时为现有的公共区块链提供可伸缩性。
Matic计划在未来支持其他区块链,这将使其能够提供互操作性功能,同时为现有公共区块链提供可扩展性。
使用侧链进行可扩展,安全和即时的区块链交易,同时使用Plasma框架和去中心化网络的权益证明(PoS)验证器确保资产安全。
Web3.0”是对“Web2.0”的改进,在此环境下,用户不必在不同中心化的平台创建多种身份,而是能打造一个去中心化的通用数字身份体系,通行各个平台。
Web3.0被用来描述互联网潜在的下一阶段,一个运行在“区块链”技术之上的“去中心化”的互联网。
NFT智能合约
我们将使用OpenZeppelin来编写智能合约,该合约是基于ERC-721实现。因此我们需要安装OpenZeppelin的智能合约库。在项目根目录执行如下命令:
npm install @openzeppelin/contracts
1
安装好openZeppelin后,我们就可以开始编写智能合约了。打开contracts文件夹并创建一个新的文件NFT.sol,该合约文件非常简单,让我们看一下具体内容:
pragma solidity ^0.8.0;
import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import "@openzeppelin/contracts/utils/Counters.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
contract MyNFT is ERC721, Ownable {
using Counters for Counters.Counter;
using Strings for uint256;
Counters.Counter private _tokenIds;
mapping (uint256 => string) private _tokenURIs;
constructor() ERC721("MyNFT", "MNFT") {}
function _setTokenURI(uint256 tokenId, string memory _tokenURI)internalvirtual{_tokenURIs[tokenId] = _tokenURI;}
function tokenURI(uint256 tokenId) public view virtual override returns (string memory){
require(_exists(tokenId),
"ERC721Metadata: URI query for nonexistent token"
);
string memory _tokenURI = _tokenURIs[tokenId];
return _tokenURI;
}
function mint(address recipient, string memory uri)public returns (uint256){
_tokenIds.increment();
uint256 newItemId = _tokenIds.current();
_mint(recipient, newItemId);
_setTokenURI(newItemId, uri);
return newItemId;
}
}
由于我们使用了OpenZeppelin的ERC721合约,因此只需要很少的代码。
第一行定义了我们使用的solidiy的版本。
接下来的三行代码引入所需的OpenZeppelin合约,其中ERC-721合约是最重要的。 有了这些合约,我们编写智能合约的效率就大大提高了。
接下来我们定义contract名为MyNFT,它继承自OpenZeppeline提供的ERC721和Ownable合约。
然偶定义一些变量。Counters和Strings用来帮助计数以及将数据转换为字符串,然后我们定义一个变量来保存下一个token的ID。最后,我们定义一个从通证ID到通证URI的映射表。
引入声明和变量定义完成后,我们可以开始实质性的代码了。构造函数实际上就是定义下通证名称和符号。
在最近的OpenZeppelin更新中,其ERC-721合约不再内置setTokenURI函数。这一选择 的初衷可能是减少用户部署合约的gas成本,不过我们还需要这个函数。
没关系,我们可以自己实现。这就是第一个函数的功能。函数_setTokenURI传入参数通证ID 和通证URI,然后将其添加到映射表中。
通过上述操作,我们现在可以使用tokenURI方法返回通证URI的值。这一点很重要,因为这个URI指向了NFT的全部元数据,例如名称、属性以及资产自身。我们必须确保URI保存下来并能够返回给任何对此感兴趣的人。
const { expect } = require("chai");
describe("NFT", function() {
it("It should deploy the contract, mint a token, and resolve to the right URI", async function() {const NFT = await ethers.getContractFactory("MyNFT");
const nft = await NFT.deploy();
const URI = "ipfs://QmWJBNeQAm9Rh4YaW8GFRnSgwa4dN889VKm9poc2DQPBkv";
await nft.deployed();
await nft.mint("0xd72203a26D887b60Af3a11178eF4A48BE8DecbA6", URI)expect(await nft.tokenURI(1)).to.equal(URI)});
});
相关文章
- 【N32G457】基于N32G457和RT-Thread全新打造的私有化定制家用式智能告警系统(2022年国民技术MCU&RT-Thread设计大赛第一名作品)
- 技术男的春天:小姐姐求助&暖男分析
- 【技术分享】使用电报API免费创建个人通知系统
- 2+1链动模式开发系统商城技术
- 【Android Gradle 插件】热修复实现 ① ( Android 热修复系统组成 | 热修复工作流程 | 热修复使用到的技术 | 热修复框架选择注意事项 )
- Mozilla怒喷当前推荐系统技术:算法“陈旧弱智”,效果非常糟糕!
- 应用Oracle中的Vue即时技术(oraclevue)
- Linux内存管理:划分内存区域的技术(linux内存分区)
- 脑成像技术未来将与数字技术紧密结合
- MySQL使用逗号分隔:技巧与技术(mysql逗号隔开)
- Linux系统上PCSC卡片技术的使用(linuxpcsc)
- 交换Linux 脏页系统交换技术简介(linux脏页)
- Linux系统智能硬件检测技术初探(linux硬件检测)
- Linux网络技能提升,让你走在最新技术前沿(linux网络培训)
- 技术IDA Pro在Linux系统下的下载实现(idalinux下载)
- 李强强:一位热爱Linux的技术人才(李强强linux)
- 探究IPS技术在Linux系统中的应用与优势(ipslinux)
- 深入了解Oracle系统包,成为数据库技术高手(oracle系统包)
- Linux系统下的USB驱动技术(linux驱动usb)
- Linux监控系统录像:利用开源技术保障安全(linux监控录像)
- Linux桌面系统:基于开源技术的高效工作环境(linux桌面系统)
- Linux系统下使用UDP穿透技术实现网络通信(udp穿透linux)
- Linux平台下AWT技术简要解析(linuxawt)
- Linux系统下网卡流量过滤技术(linux网卡过滤)
- SQL Server技术专家:助您解决系统技术难题(sqlserver咨询)
- Oracle 覆盖:提高查询效率的重要技术(oracle 覆盖)
- ETL技术中使用Oracle优化数据分析(ETL使用ORACLE)
- 分布式缓存系统 Redis构建更快更强的技术栈(分布式缓存系统redis)
- 探索Oracle P6系统智能应用新技术(oracle p6 系统)
- 明晚8点丨网商银行基础技术架构部负责人蒋易民:我们是如何率先上云、长于云端的?
- 基于EJB技术的商务预订系统的开发