写在前面的话
从6月初到七月研究了将近一个月NFT 区块链这方面的东西,从啥都不会到了解原理,总算是有点成果了,在这里分享给大家。
核心大纲
- 百度超级链开放网络(Solidity语言)
- 集成openzeppelin中的ERC721合约快速完成合约开发
- Springboot 作为后台开发语言调用线上合约
- 通过调用线上合约将数据永久存储在链上
由于篇幅受限,在这里我就不过多的阐述有关NFT的背景知识,总结成一句话就是把用户的数据永久存到区块链上使得用户的资产私有化。
编写合约于编译合约
- 依赖安装
全局安装 solcjs 用于编译可部署到链上的solidity合约
cnpm install solcjs -g
node安装openzepplin
npm initnpm install --save @openzeppelin/contracts
在项目根目录编写合约 main.sol
示例合约详情
// SPDX-License-Identifier: MITpragma solidity ^0.8.4;import "../node_modules/@openzeppelin/contracts/token/ERC721/ERC721.sol";import "../node_modules/@openzeppelin/contracts/access/Ownable.sol";contract Xj is ERC721, Ownable { constructor() ERC721("nft", "MTK") {} }
合约编写完成之后通过刚刚安装的solcjs 进行编译
编译命令如下
solcjs --abi --bin .\main.sol -o build
最后,合约项目目录如下,其中build文件夹下的 main_sol_Xj.abi main_sol_Xj.bin这两个文件就是咱们需要部署到线上的合约文件了
部署合约到链上以及调用合约方法
以Springboot为例
在部署调用合约之前需要去百度超级链官网上注册账号,点我去超级链官网
选择开发网络完成注册流程,然后充点钱,10块够用很久。
最后得到private.key文件 以及设置6位的交易密码,这两个在超级链服务初始化时需要使用
官方开发文档
可以调用里面的铸造 转移等方法 生成nft,并交易给个人用户。唯一需要注意的是,在百度超级链里有一个用户唯一编码,需要通过用户输入获取,用来确定用户在百度链上的唯一性
在这里获取
其实仔细读一下openzeppelin里的源码,就能了解NFT数字藏品的真正原理
所有的nft藏品数据以及权限控制,其实都是通过合约里的各种 map(key,value) 等变量来实现的
藏品数据也是存在合约里的map里
通过Java或者调用合约里的方法去生成修改里面的数据