【5分钟玩转Lighthouse】快速发行数字藏品

2022-07-14 16:33:10 浏览数 (1)

1、整体介绍

Lighthouse 长安链发布上线后在社区广受好评,同时也有不少社区朋友前来咨询小编如何基于Lighthouse 长安链开发自己的应用,比如区块链数字藏品、区块链存证、区块链游戏等等,那必须得安排。

因此我们将持续的根据应用场景推出教程文章。

其中数字藏品是指使用区块链技术,对特定的作品、艺术品生成的在区块链上生成唯一数字凭证,本文将将讲述如何通过Lighthouse 长安链镜像,在长安链上快速发行数字藏品。

主要内容如下:

  • 购买lighthouse长安链镜像,自动部署长安链和长安链管理台应用
  • 准备好所要发行的数字藏品的基本信息
  • 登录长安链管理台,通过可视化界面发行和管理数字藏品

2、购买Lighthouse 长安链服务

我们首先在腾讯云Lighthouse轻量应用服务器购买页面,购买一台服务器。如下图所示。

服务器具体配置如下

  • 镜像类型:应用镜像
  • 应用名称:长安链Chainmaker
支付页面支付页面

点击立即购买,按步骤付款之后,即可在自己购买的腾讯云服务器上拥有了一套长安链环境。

3、通过长安链管理台发行数字藏品

此处我们以给账户地址为:0x96759b16ab543551D06B5E6B0E4f887C9401b651 的用户派发以下图为基础生成的数字藏品为例

示例数字藏品.png示例数字藏品.png

3.1、登录长安链管理台

Lighthouse管理台首页Lighthouse管理台首页

进入Lighthouse(轻量应用服务器)控制台,在服务器模块找到自己购买的长安链服务,点击进入服务详情。

应用管理应用管理

在应用管理里,找到长安链管理台应用,其中

  • 登录地址为该管理台的访问地址
  • 默认到账户名为admin,默认密码可点击登录按钮,登录到服务器内并输入如下指令获取密码。 cat /home/chainmaker/credentials.txt
登录登录

使用上文获取到的账户和密码登录管理台。

3.2、查看长安链

区块链列表区块链列表

登录后在区块链管理处,可看到已经内置部署的长安链,主要配置信息如下

序号

内容

说明

1

长安链版本

V2.2.1

2

链id

chain1

3

组织数

4个组织

4

节点数

4个共识节点

5

共识算法

TBFT

6

单区块最大交易容量

100笔交易

7

交易过期时长

600s

8

交易间隔

2000ms

9

是否支持docker_VM

支持

3.3、查看智能合约

合约列表合约列表
  • 进入区块链管理-合约管理的界面,可以看到已经内置部署的几个常用的智能合约。包含存证合约,转账合约,ERC-20合约,ERC-721合约。
  • 合约的源代码及详细介绍,可查看合约介绍章节。

3.4、使用智能合约发行数字藏品

切换到区块链管理-上链管理界面,点击发起上链按钮,调用已经安装的ERC-721合约发行新的数字藏品。

上链记录列表上链记录列表
发行新数字藏品.png发行新数字藏品.png
  • 然后再选择数字藏品(ERC-721)合约,并选择调用mint合约方法,然后输入所需的参数。其中:
    • 接收人:0x96759b16ab543551D06B5E6B0E4f887C9401b651
    • tokenid:该数字藏品图片的SHA256哈希值。
    • tokenRUI:以如下json串为值
代码语言:txt复制
{
    "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"
        }
    ]
}
  • 点击确认,即完成发行新数字藏品的过程。发送成功后,可到区块链浏览器里查看详情。
查看交易详情.png查看交易详情.png

3.6、管理数字藏品

除了发行数字藏品外还可通过管理台管理数字藏品,如查询、销毁,转让等。可根据实际的需求,在发起上链处,选择不同的合约方法,传入对应的参数进行管理操作。

合约方法.png合约方法.png

此外,也支持通过长安链SDK等方式,直接调用智能合约,发行并管理数字藏品。

3.7、部署新的智能合约

若有部署新的智能合约(包含但不限于数字藏品类的合约)的需求,可以通过长安链管理台或者SDK将合约部署到长安链在进行管理。

image.pngimage.png

4、数字藏品(ERC721)合约介绍

4.1、合约列表

目前在lighthouse 长安链中预先部署了4个示例合约,如下表所示:

序号

合约名称

合约功能

1

SaveContract

存证合约,可保存Key-Value及描述信息

2

TransferContract

普通转账合约,用于普通的转账业务,无权限等相关设计

3

ERC20Contract

ERC20合约,基本符合以太坊官方标准,可作为Token发布的Demo

4

ERC721Contract

ERC721合约,基本符合以太坊官方标准,可作为NFT发布的Demo

并在 /home/chainmaker/contract/demos目录中,放置了合约源码,及部分单元测试代码

image.pngimage.png

下文我们主要介绍下数字藏品(ERC721)合约。

4.2 合约初始化

合约在初始化的过程中可以设置一些基础配置,包括发行NFT的名称、简称等信息,若不设置则会使用合约代码中默认的配置。初始化过程中涉及到的参数配置列表说明如下:

参数名

参数含义

默认值

name

token名称

NFT-DEMO

symbol

token简称

NFDO

4.3 合约函数集

函数名

函数类型

函数说明

入参说明

返回值

备注

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

查询

返回当前用户地址

该用户的地址

任何账号都可以查询

4.4 合约使用指南

交易发起者的地址需要用户通过调用合约中address()方法获取。

ERC721是一个发行NFT的合约,可通过该合约发行NFT或转让NFT等操作。它的核心流程包括以下几个步骤:

  • 发布合约:即初始化合约,可在初始化的时候设置该类NFT的名称(name)和简称(symbol);
  • 发布NFT:调用合约的 mint 方法可发行指定的NFT,建议在发行时就设置NFT的URI信息,不建议调用 setTokenURI 进行调整;
  • 授权NFT:即授权别人操作自己的NFT,可通过 approve 方法进行某个NFT的授权,也可以通过 setApprovalForAll 函数授权某个用户替代自己的所有操作,这两者中后者的优先级更高,当然用户可通过调整合约方式来实现自己的逻辑;
  • 普通转移NFT:可通过调用合约的 transferFrom 方法,实现NFT的转移,若当前操作者不是对应NFT的拥有者,则需要其拥有者为当前操作者进行授权;
  • 安全转移NFT:可通过调用合约的 safeTransferFrom 方法实现NFT的安全转移,所谓的安全转移是指在转移的内容中添加了 data 参数,可通过对data的校验来实现安全的操作;
  • 销毁NFT:当用户不再想使用NFT时,可通过 burn 函数实现对NFT的销毁,销毁后无法找回。

0 人点赞