Lighthouse 长安链发布上线后在社区广受好评,同时也有不少社区朋友前来咨询小编如何基于Lighthouse 长安链开发自己的应用,比如区块链数字藏品、区块链存证、区块链游戏等等,那必须得安排。
因此我们将持续的根据应用场景推出教程文章。
其中数字藏品是指使用区块链技术,对特定的作品、艺术品生成的在区块链上生成唯一数字凭证,本文将将讲述如何通过Lighthouse 长安链镜像,在长安链上快速发行数字藏品。
主要内容如下:
我们首先在腾讯云Lighthouse轻量应用服务器购买页面,购买一台服务器。如下图所示。
服务器具体配置如下
点击立即购买,按步骤付款之后,即可在自己购买的腾讯云服务器上拥有了一套长安链环境。
此处我们以给账户地址为:0x96759b16ab543551D06B5E6B0E4f887C9401b651
的用户派发以下图为基础生成的数字藏品为例
进入Lighthouse(轻量应用服务器)控制台,在服务器模块找到自己购买的长安链服务,点击进入服务详情。
在应用管理里,找到长安链管理台应用,其中
cat /home/chainmaker/credentials.txt
使用上文获取到的账户和密码登录管理台。
登录后在区块链管理处,可看到已经内置部署的长安链,主要配置信息如下
序号 | 内容 | 说明 |
---|---|---|
1 | 长安链版本 | V2.2.1 |
2 | 链id | chain1 |
3 | 组织数 | 4个组织 |
4 | 节点数 | 4个共识节点 |
5 | 共识算法 | TBFT |
6 | 单区块最大交易容量 | 100笔交易 |
7 | 交易过期时长 | 600s |
8 | 交易间隔 | 2000ms |
9 | 是否支持docker_VM | 支持 |
切换到区块链管理-上链管理界面,点击发起上链按钮,调用已经安装的ERC-721合约发行新的数字藏品。
mint
合约方法,然后输入所需的参数。其中:{
"name": "testNFT",
"description": "演示发行新的数字藏品",
"metadata": [
{
"name": "lzsqh9fevc.jepg",
"ext": "jepg",
"size": "532480",
"uri": "https://ask.qcloudimg.com/http-save/2491414/lzsqh9fevc.jpeg?imageView2/2/w/1620",
"sha256": "385dd7718daf8a5ff38584659a846697d05a7e6bfd8a0c8a01bc9ef3de5f1480"
}
]
}
除了发行数字藏品外还可通过管理台管理数字藏品,如查询、销毁,转让等。可根据实际的需求,在发起上链处,选择不同的合约方法,传入对应的参数进行管理操作。
此外,也支持通过长安链SDK等方式,直接调用智能合约,发行并管理数字藏品。
若有部署新的智能合约(包含但不限于数字藏品类的合约)的需求,可以通过长安链管理台或者SDK将合约部署到长安链在进行管理。
目前在lighthouse 长安链中预先部署了4个示例合约,如下表所示:
序号 | 合约名称 | 合约功能 |
---|---|---|
1 | SaveContract | 存证合约,可保存Key-Value及描述信息 |
2 | TransferContract | 普通转账合约,用于普通的转账业务,无权限等相关设计 |
3 | ERC20Contract | ERC20合约,基本符合以太坊官方标准,可作为Token发布的Demo |
4 | ERC721Contract | ERC721合约,基本符合以太坊官方标准,可作为NFT发布的Demo |
并在 /home/chainmaker/contract/demos
目录中,放置了合约源码,及部分单元测试代码
下文我们主要介绍下数字藏品(ERC721)合约。
合约在初始化的过程中可以设置一些基础配置,包括发行NFT的名称、简称等信息,若不设置则会使用合约代码中默认的配置。初始化过程中涉及到的参数配置列表说明如下:
参数名 | 参数含义 | 默认值 |
---|---|---|
name | token名称 | NFT-DEMO |
symbol | token简称 | NFDO |
函数名 | 函数类型 | 函数说明 | 入参说明 | 返回值 | 备注 |
---|---|---|---|---|---|
name | 查询 | 查询NFT名称 | 该NFT的名称 | 任何账号都可以查询 | |
symbol | 查询 | 查询NFT简称 | 该NFT的简称 | 任何账号都可以查询 | |
tokenURI | 查询 | 查询指定NFT的URI配置信息 | tokenId: NFT唯一标识 | 该NFT的URI配置信息 | 任何账号都可以查询 |
totalSupply | 查询 | 查询已发布的NFT数量 | 该NFT的数量 | 任何账号都可以查询 | |
tokenByIndex | 查询 | 查询所有NFT集合中某个序号的NFT标识 | index: 该NFT在整个列表中的序号 | 对应序号的NFT标识(tokenId) | 任何账号都可以查询 |
tokenOfOwnerByIndex | 查询 | 查询某个账号下某个序号的NFT标识 | owner: 查询的账号; index: 查询的序号 | 对应序号的NFT标识(tokenId) | 任何账号都可以查询 |
balanceOf | 查询 | 查询某个地址拥有的NFT数量 | owner: 查询的账号 | 该地址拥有的NFT数量(销毁的不计算在内) | 任何账号都可以查询 |
ownerOf | 查询 | 查询某个NFT的拥有者 | tokenId: NFT唯一标识 | 拥有该NFT的地址 | 任何账号都可以查询 |
transferFrom | 执行 | 将NFT从一个地址转移至另外的地址 | from: 转出的地址(可选,不填时为当前账号); to: 转入的地址; tokenId: NFT唯一标识 | 字符串:“success” | 若from不是该NFT的拥有者需要其拥有者进行授权 |
safeTransferFrom | 执行 | 安全地将NFT从一个地址转移至另外的地址 | from: 转出的地址(可选,不填时为当前账号); to: 转入的地址; tokenId: NFT唯一标识 data: 校验的内容,通常由to地址对应用户给出,可通过setCheckData设置 | 字符串:“success” | 若from不是该NFT的拥有者需要其拥有者进行授权 |
approve | 执行 | 授权用户可代替自己操作某个NFT | approved: 被授权的账号 tokenId: 授权的的NFT唯一标识 | 字符串:“success” | 该操作会覆盖掉之前授权的账号 |
setApprovalForAll | 执行 | 设置某个用户对自己所有token的授权状态 | operator: 授权/回收授权的账号 approved: 被授权的状态,0:不授权,1:授权 | 0:不授权,1:授权 | 该授权的优先级比approve更高 |
getApproved | 查询 | 获取某个NFT授权操作的地址 | tokenId: NFT唯一标识 | 该NFT的授权操作地址 | 任何账号都可以查询,但只可查询自己的授权情况 |
isApprovedForAll | 查询 | 获取指定用户对某操作者的授权状态 | owner : 指定的用户(可选,不填代表自己) operator : 被授权的操作地址 | 0:不授权,1:授权 | 任何账号都可以查询 |
mint | 执行 | 增发指定的NFT至某个账号 | to: 增发给的账号(可选,不填时则增发给自己) tokenId: NFT唯一标识 tokenURI: NFT的URI属性 | NFT的唯一标识(tokenId) | 任何账号都可以增发,但tokenId不能重复 |
burn | 执行 | 销毁某个指定的NFT | tokenId: NFT唯一标识 | 字符串:“success” | 该账号必须是该NFT的拥有者,授权不可以 |
setTokenURI | 执行 | 设置NFT的URI属性 | tokenId: NFT唯一标识 tokenURI: NFT的URI属性 | 字符串:“success” | 该账号必须是该NFT的拥有者,授权不可以,但为保障唯一性,不建议调用该函数 |
setCheckData | 执行 | 设置账号的check数据 | data: 设置的check数据 | 字符串:“success” | 该账号只可设置自己的data,该data供safeTransferFrom中的data校验 |
checkData | 查询 | 查询设置的check数据 | 该账号设置的check数据 | 任何账号都可以查询 | |
address | 查询 | 返回当前用户地址 | 该用户的地址 | 任何账号都可以查询 |
交易发起者的地址需要用户通过调用合约中address()方法获取。
ERC721是一个发行NFT的合约,可通过该合约发行NFT或转让NFT等操作。它的核心流程包括以下几个步骤:
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。