4. NFA数字藏品类合约

在数字经济日益发展的今天,数字藏品已经成为了一种新型的资产形态。随着区块链技术的普及,利用其去中心化、不可篡改和可追溯的特性来创建、销售和管理数字藏品(如数字艺术、游戏内稀有物品、虚拟商品等)已经变得越来越流行。数字藏品是指那些具有独特性、可收集性和所有权的数字资产。随着数字化内容的激增,人们越来越希望能够拥有并交易这些独一无二的数字项。因此,需要一个透明且可信的系统来证明数字藏品的真实性和所有权,以及提供一个平台来进行买卖和交换。区块链技术提供了一个完美的解决方案,因为它能够为数字资产创建一个不可篡改的记录,确保每个数字藏品的唯一性和原创性得到验证。此外,智能合约可以自动执行交易,简化了购买、销售和转让的过程。

长安链数字藏品类合约标准CM-CS-221221-NFA(CMNFA-1),是官方推出的基于长安链的数字藏品类合约的撰写和使用规范。方便大家在编写相关合约时能够做到有章可循,长安链的各生态工具也会基于此标准对相应的合约进行适配。

NFA合约具有以下功能:

  1. NFA铸造上链:这是数字藏品合约的核心功能,它允许将数字作品转化为NFA并记录在区块链上。这样做不仅确保了每件数字藏品的唯一性,还保证了其不可篡改性。通过这种方式,创作者可以将自己的作品以一种安全且可信的方式数字化,并在全球范围内进行交易。

  2. 交易上链:数字藏品合约还负责记录所有相关的交易信息并将其上链。这意味着每一笔交易都被透明地记录在区块链上,从而确保了交易数据的真实性和可追溯性。这对于建立市场信任和减少欺诈行为至关重要。

  3. 授权:允许所有者将特定权限或使用权授予第三方,同时确保所有权和版权的不可改变性。

  4. 查询:使用户能够追踪和验证数字藏品的所有权历史、交易记录及其在区块链上的存储状态。

NFA合约适用于以下场景:

  1. 创作的数字艺术品:艺术家通过区块链数字藏品合约将独特的数字创作转化为NFA,实现作品所有权的易于验证和全球范围内的无缝交易。

  2. 游戏中虚拟物品:游戏开发者利用区块链数字藏品合约确保游戏内稀有物品的唯一性和可交易性,增强玩家间的互信并激发经济生态。

  3. 音乐、视频和其他多媒体内容的版权管理:创作者使用区块链数字藏品合约为音乐和视频内容创建独特的数字指纹,简化授权流程,并确保其创作成果得到公正的回报。

  4. 供应链管理中的商品追踪:通过确保每个商品的唯一性和完整交易历史的不可篡改性,提供透明的产品来源验证和流通过程监控。

  5. 重要单据的流转:通过确保单据真实性和所有权转移的不可篡改记录,提高交易安全性和效率。

4.1. 合约标准

NFA合约中的核心方法包括铸造、交易、授权、查询等功能。 这些数据结构和接口定义都定义在:这里

合约标准参考:合约标准

NFA合约源码参考:https://git.chainmaker.org.cn/contracts/contracts-go/-/tree/chainweaver_v0.1/standard-nfa

4.2. 调用示例

在cmc命令行下,可以快速安装、调用和查询该NFA合约,使用示例如下:

4.2.1. 安装合约

./cmc client contract user create --contract-name=CMNFA --version=1.0 --sync-result=true \
--sdk-conf-path=./testdata/sdk_config_solo.yml --byte-code-path=./testdata/CMNFA.7z --runtime-type=DOCKER_GO \
--admin-crt-file-paths=./testdata/crypto-config/wx-org.chainmaker.org/user/admin1/admin1.sign.crt \
--admin-key-file-paths=./testdata/crypto-config/wx-org.chainmaker.org/user/admin1/admin1.sign.key \
--params="{\"categoryName\":\"1111\", \"categoryURI\":\"chainmaker.org.cn/\", \"admin\":\"ec47ae0f0d6a0e952c240383d70ab43b19997a9f\"}"

4.2.2. 升级合约

./cmc client contract user upgrade --contract-name=CMNFA --version=2.0 --sync-result=true \
--sdk-conf-path=./testdata/sdk_config_solo.yml --byte-code-path=./testdata/CMNFA.7z --runtime-type=DOCKER_GO \
--admin-crt-file-paths=./testdata/crypto-config/wx-org.chainmaker.org/user/admin1/admin1.sign.crt \
--admin-key-file-paths=./testdata/crypto-config/wx-org.chainmaker.org/user/admin1/admin1.sign.key \
--params="{\"categoryName\":\"1111\", \"categoryURI\":\"chainmaker.org.cn/\", \"admin\":\"ec47ae0f0d6a0e952c240383d70ab43b19997a9f\"}"

4.2.3. 发行NFA

# 发行一个
./cmc client contract user invoke --contract-name=CMNFA --method=Mint --sync-result=true --sdk-conf-path=./testdata/sdk_config_solo.yml \
--params="{\"to\":\"ec47ae0f0d6a0e952c240383d70ab43b19997a9f\", \"tokenId\":\"111111111111111111111112\", \"categoryName\":\"1111\", \"metadata\":\"aaa\"}"

# 批量发行
./cmc client contract user invoke --contract-name=CMNFA --method=MintBatch --sync-result=true --sdk-conf-path=./testdata/sdk_config_solo.yml \
--params="{
  \"tokens\": [{
    \"tokenId\": \"xxxxx\",
    \"categoryName\": \"1111\",
    \"to\": \"ec47ae0f0d6a0e952c240383d70ab43b19997a9f\",
    \"metadata\": \"YWFh\"
  }, {
    \"tokenId\": \"xxxxx1\",
    \"categoryName\": \"1111\",
    \"to\": \"ec47ae0f0d6a0e952c240383d70ab43b19997a9f\",
    \"metadata\": \"YWFh\"
  }]
}"

# 销毁
./cmc client contract user invoke --contract-name=CMNFA --method=Burn --sync-result=true --sdk-conf-path=./testdata/sdk_config_solo.yml \
--params="{\"tokenId\":\"111111111111111111111112\"}"

4.2.4. 授权

# 授权某个
./cmc client contract user invoke --contract-name=CMNFA --method=SetApproval --sync-result=true --sdk-conf-path=./testdata/sdk_config_solo.yml \
--params="{\"to\":\"a04f7895de24f61807a729be230f03da8c0eef42\", \"tokenId\":\"111111111111111111111112\", \"isApproval\":\"true\"}"

# 授权全部
./cmc client contract user invoke --contract-name=CMNFA --method=SetApprovalForAll --sync-result=true --sdk-conf-path=./testdata/sdk_config_solo.yml \
--params="{\"to\":\"a04f7895de24f61807a729be230f03da8c0eef42\", \"isApproval\":\"true\"}"

4.2.5. 交易

# 转账一个
./cmc client contract user invoke --contract-name=CMNFA --method=TransferFrom --sync-result=true --sdk-conf-path=./testdata/sdk_config_solo.yml \
--params="{\"from\":\"ec47ae0f0d6a0e952c240383d70ab43b19997a9f\", \"to\":\"a04f7895de24f61807a729be230f03da8c0eef42\", \"tokenId\":\"111111111111111111111112\"}"

# 批量转账
./cmc client contract user invoke --contract-name=CMNFA --method=TransferFromBatch --sync-result=true --sdk-conf-path=./testdata/sdk_config_solo.yml \
--params="{
  \"from\":\"ec47ae0f0d6a0e952c240383d70ab43b19997a9f\",
  \"to\":\"a04f7895de24f61807a729be230f03da8c0eef42\", 
  \"tokenIds\": [
    \"111111111111111111111111\",
    \"111111111111111111111112\"
  ]
}"

4.2.6. 查询

# 查询owner
./cmc client contract user invoke --contract-name=CMNFA --method=OwnerOf --sync-result=true --sdk-conf-path=./testdata/sdk_config_solo.yml \
--params="{\"tokenId\":\"111111111111111111111112\"}"

# 查询tokenURI
./cmc client contract user invoke --contract-name=CMNFA --method=TokenURI --sync-result=true --sdk-conf-path=./testdata/sdk_config_solo.yml \
--params="{\"tokenId\":\"111111111111111111111112\"}"

# 查询已发行NFA总数量
./cmc client contract user invoke --contract-name=CMNFA --method=TotalSupply --sync-result=true --sdk-conf-path=./testdata/sdk_config_solo.yml

# 查询账户NFA数量
./cmc client contract user invoke --contract-name=CMNFA --method=BalanceOf --sync-result=true --sdk-conf-path=./testdata/sdk_config_solo.yml \
--params="{\"account\":\"ec47ae0f0d6a0e952c240383d70ab43b19997a9f\"}"

# 查询token metadata信息
./cmc client contract user invoke --contract-name=CMNFA --method=TokenMetadata --sync-result=true --sdk-conf-path=./testdata/sdk_config_solo.yml \
--params="{\"tokenId\":\"111111111111111111111112\"}"