深入了解 Qtum 代币标准(一):QRC20 与 QRC721 完全指南

·

随着 区块链可扩展性智能合约 的快速发展,Qtum 将比特币的 UTXO 模型与以太坊虚拟机的灵活性无缝整合,推出了更符合开发者需求的 QRC20QRC721 代币标准。本文用通俗的语言拆解两者的技术细节、使用场景,并手把手教你如何在 Qtum 主网或测试网上创建属于自己的代币。

在开始之前,快速给出一组核心关键词,方便你迅速抓住要点:
QRC20、QRC721、Qtum 代币标准、智能合约、NFT、代币开发、区块链开发、UTXO+EVM 混合架构、代币转账、部署指南。它们会在下文反复出现,但绝不会“堆”得让人头疼。


为什么以太坊需要统一标准?Qtum 也是如此

想象一座只有一条商业街的小镇,却流通着 5 种互相不能兑换的货币。顾客和商家都会崩溃。2016 年以前,以太坊生态就处于这种“处处私币”的尴尬境地。开发者猛然发现,每个 DApp 都自立门户,“代币互操作性”成为燃眉之急。于是 ERC20、ERC721 等标准应运而生。

Qtum 借镜以太坊,把问题提前一步解决:与其重复造轮子,不如直接移植经过实战考验的 ERC 标准,同时在底层改用 UTXO 结算,保证安全与并发性能。最终诞生 QRC20(对应 ERC20)、QRC721(对应 ERC721)及后续 QRC1155。今天先聊 QRC20 和 QRC721。


QRC20:Qtum 上的同质化代币全权文档

标准定义

QRC20 ≈ ERC20,100% 代码级兼容。以下九个函数与三个可选字段构成了代币的 DNA:

三步完成一次转账

  1. 查询余额

    qtum-cli callcontract \
      "${TOKEN_CONTRACT_ADDRESS}" \
      70a08231$(to32bytesArg ${userAddress})

    在返回 JSON 的 executionResult.output 行即可看到余额。

  2. 发起提币

    qtum-cli sendtocontract \
      "${TOKEN_CONTRACT_ADDRESS}" \
      a9059cbb$(to32bytesArg ${userAddress})$(to32bytesArg ${amount}) \
      0 \
      ${DEFAULT_GAS_LIMIT} ${DEFAULT_GAS_PRICE} ${MAIN_QRC_ADDRESS}

    该命令直接返回交易哈希 txid。

  3. 监听充值/提现事件

    qtum-cli searchlogs \
      ${STARTING_BLOCK} 999999999 \
      '["${TOKEN_CONTRACT_ADDRESS}"]' \
      '{"topics":["ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"]}'

    通过 event Transfer(address _from, address _to, uint256 _value) 实时追踪链上流水。
    👉 如何最快 3 分钟读完官方文档并跑通整套流程?

一键生成充值地址

与普通 Qtum 地址复用,无需新私钥:

qtum-cli getnewaddress

案例演练:用五分钟发一个 STUDY 测试币

  1. 切换到 Qtum 测试网
  2. 安装依赖:

    git clone https://github.com/qtumproject/qrc20-token-template && cd qrc20-token-template
    npm install
  3. 编辑 contracts/STUDY.sol,把名字和符号改成 STUDY,精度 18,总量 100 万。
  4. 用 Solar 部署:solar deploy contracts/STUDY.sol '["STUDY","STUDY"]' --qtum_rpc=http://user:[email protected]:13889
  5. 拿到合约地址,立即呼叫 transfer 给自己钱包地址。恭喜,你拥有了 Qtum 生态的第一枚学习纪念币!

QRC721:NFT 一样能在 UTXO 上“随心铸造”

核心函数拆解

QRC721 本质是 ERC721 的 Qtum 翻译版。它用非同质化属性赋予每个 Token ID 唯一意义:

部署步骤

  1. 启动测试网节点

    Qtum-Qt -testnet -server -rpcuser=user -rpcpassword=pass -rpcport=13889
  2. 安装依赖

    git clone https://github.com/qtumproject/QRC721Token && cd QRC721Token
    npm install
  3. 用 Solar 发射

    solar deploy contracts/QRC721.sol '["MyArt","ART"]' \
      --qtum_rpc=http://user:[email protected]:13889

    成功后在 solar.development.json 里记下 addresstxid
    👉 想用海量 NFT 做一场链上艺术展?先在这把合约调通再说!


轻松避坑的 6 个高频问答

Q1:QRC20 代币转账成功却没到账?

A:最常见是 gasPrice 设得太低。测试网建议 40 UTXO/kB,主网则参考实时 Qtum Gas 站数据,宁可多给一点,别卡在排队池。

Q2:如何在浏览器监测转账状态?

A:把 txid 直接粘到 Qtum 公开浏览器(Qtum Explorer 或 Q等)查询确认数,当确认数 ≥1 即可视为到账。

Q3:QRC721 的 Token ID 可以重复吗?

A:不能。如果合约允许重复铸造,那就违背了 唯一性 核心原则,前端市场也无法识别正确藏品。

Q4:有没有一键图形化工具?

A:Qtum Qt 钱包提供 UI 合约交互;更复杂的批量管理可用 Solar CLI + 自定义脚本,灵活度更高。

Q5:主网真钱操作时该注意哪些坑?

A:

Q6:能在同一笔交易里同时调 QRC20 transfer 和 QRC721 transfer 吗?

A:这两个标准互不干扰。你可以写一个自定义路由合约,把用户输入转给两个子合约,实现 原子化交换。但需自行审计多签风险。


小洞察:UTXO vs 账户模型混合带来的三重优势

  1. 并行执行:UTXO 让每一笔代币转账天然并行,区块吞吐更高。
  2. 黑客门槛:批量双花极难实现;除非掌握过半算力,否则无法同时破坏大量交易。
  3. Gas 计费透明:主链采用比特币式 手续费竞标,与 EVM Gas 单位分离,开发者可以更好地预测发行成本。

写在下一篇之前的伏笔

了解了 QRC20 同质化代币QRC721 非同质化代币 之后,Part 2 将聚焦 QRC1155——一个能让你单合约同时管理多发币 + 多 NFT 的“瑞士军刀”。它会进一步降低开发门槛,尤其在游戏、票务、链游道具批量空投等高频场景内大放异彩。

抓紧把今天学的流程在测试网跑通吧,等到 QRC1155 上台,你就能无缝 升级合约模版、共享底层数据,并把过去 QRC20/QRC721 的宝贵经验原封不动迁移过去。
无论你是创业者、艺术家还是开发者,Qtum 都给你铺好了一条平滑的通道。现在,轮到你上场“铸”造未来了!