交易所整合 CKB 简明方案

简介

Nervos CKB (简称 CKB) 是一个基于 UXTO 账户模型的 PoW 智能合约区块链,其虚拟机使用 RISC-V 指令集。Nervos CKB 的基础资产叫 CKB,或 CKBytes,其主要用途是支付状态空间占用费以及矿工费。

CKB 默认的签名算法是 secp256k1,默认的哈希算法是 blake2b。与 Bitcoin 和 Ethereum 充值方式相同,交易所可以为每个用户生成专用地址,用户向该专用地址充值。

区块链浏览器: https://explorer.nervos.org/
测试链水龙头:https://faucet.nervos.org/
桌面钱包:https://github.com/nervosnetwork/neuron
移动钱包:imToken, Bitpie, ABCWallet, Cobo, Hoo 等
SDK: ckb-sdk-js, ckb-sdk-java, ckb-sdk-go

整合步骤

1. 运行节点

Nervos 基金会并不提供中心化的公共 API。为了安全考虑,作为钱包或交易所运营方应该自行运行区块链节点(ckb node)和缓存中间件(ckb-indexer)。缓存中间件提供了查询余额、历史交易等便捷的接口。

这里还可以找到 ckb 开发团队维护的二合一 docker 映像,可以一键运行。它包括两组 API:ckb rpcckb-indexer rpc,分别在 http://localhost:8117/rpc,http://localhost:8117/indexer。

2. 生成充值地址

私钥生成

CKB 默认签名算法采用 secp256k1,公私钥生成算法与比特币、以太坊相同。

公钥与地址的关系

CKB 上的用户资产由 lock script 管理,每一个 lock script 对应一种签名算法和一个公钥哈希。地址是对 lock script 的人类可读编码:lock script ⇔ 地址

lock_script: {
	code_hash:	// 32 bytes 签名算法合约地址或代码hash (*固定数值*)
	hash_type:	// type/data 与 code_hash 配对设置 (*固定数值*)
	args: 		// 用户的公钥哈希
}

CKB 节点仅识别 lock script,应用层需要对地址进行转换。对于交易所充值地址来说,code_hashhash_type 都是固定值,仅需要根据 args 变化。

地址生成

生成私钥 => 生成公钥 => 取 blake2b 哈希前20字节作为 args 
  => 拼凑 lock script => 转换成地址

公钥到地址的 API:java sdkjs sdk(utils.pubkeyToAddress)

地址合法性校验

CKB 转账支持多种地址格式,SDK 已经对他们进行了恰当处理。前端可以使用 utils.parseAddress 进行地址合法性校验,后端 SDK 会自动把他们转换成 lock script 处理。

3. 查询

  • 余额查询:get_cell_capacity (from ckb-indexer-rpc)

  • tip header: get_tip (from ckb-indexer-rpc)

  • 不可逆确认数:24

  • 根据高度查block:get_block_by_number (from ckb-rpc)

  • 根据hash查block:get_block (from ckb-rpc)

  • 有效交易判定:所有的入块交易都是有效交易(与以太坊不同)

  • 交易历史查询:get_transactions (from ckb-indexer-rpc)

4. 转账

注意:由于 CKB 的底层逻辑,默认情况下转账和找零的最小金额是 61 ckb

转账实现请参考:

关于转账的原理,请参考 How to sign the transaction.

转账手续费的设置原理,请参考 Transaction Fee.

5. 公共服务器

注意:个人建议,考虑到安全性和可靠性,接入方在生产环境务必使用自己维护的节点。下面收集的公共服务器由社区公益维护,仅供测试,不保证可用性。

Testnet:

https://testnet.ckb.dev/rpc => ckb node rpc
https://testnet.ckb.dev/indexer => ckb-indexer rpc

Mainnet:

https://mainnet.ckb.dev/rpc => ckb node rpc
https://mainnet.ckb.dev/indexer => ckb-indexer rpc

5 Likes