Extended ckb-indexer

背景

当前的 ckb-indexer 查询只接受单一 scirpt 查询,而随着 ACPL (anyone-can-pay lock) 和 SUDT (simple user defined token) 的加入,为了适应更多的应用场景,ckb-indexer 需要加入新的功能。

1. ex_get_cells

拓展筛选条件:双 scripts (lock script and type script)、data、区块范围筛选条件及 cell 的 capacity 大小排序检索。

Parameters

search_lock_key:  // optional 
		script -  Script 
		args_len - maximal prefix search args len, optional
search_type_key:  // optional
		script -  Script | null
		args_len - maximal prefix search args len, optional
search_data_key: occupied | null   // optional
order: enum, asc | desc | size_asc | size_desc
range: [fromBlock, toBlock]    // optional e.g.[0x253b40, 0x253f28] ["0x" + 2440000n.toString(16), "0x" + 2441000n.toString(16)]
needed_capacity: needed capacity, optional
limit: result size limit
after_cursor: pagination parameter, optional

Returns

objects - live cells
last_cursor - pagination parameter

部分参数说明

不填字段与字段值为 null 的区别:

*parameter 中字段不进行填写则指不进行筛选,当 parameter 中字段值为:Script 指该部分数据需满足 Script 格式,null 指该部分数据为,occupied 指该部分数据为非空

此外,script args 也应有筛选检索 :指定 args | null (==all),当 script args 为 null 时,检索返回满足指定 codehash 条件的 cells。*参考 ckb-lumos-indexer: 是否 script_args 填写 “”,args_len=N,prefix search 前缀搜索即满足此功能。

needed_capacity: 根据请求的 CKB 数量,返回满足需求的 cells:

示例:某用户需要转账 1000 CKB 时,在请求 cells 时,不需要返回全部 cells,而是需要根据某些 order 策略返回满足 1000 CKB 转账需求的 cells。

  • 对于with lock scriptwithout type scriptwithout data的 cells(即为某地址中可用的 CKB)。提供所需 capacity 参数,根据所需的 capacity 数量返回 cells

order 排序:

  • asc | desc: 按 cell 形成的时间新旧进行排序
  • size_asc | size_desc:增加 size_asc | size_desc,按 cell 的 capacity 大小进行排序

筛选 Block 查询范围:

  • [fromBlock, toBlock]

参考 ckb-lumos-indexer: [0x253b40, 0x253f28] 即 [“0x” + 2440000n.toString(16), “0x” + 2441000n.toString(16)]

2.ex_get_transactions

Returns the transactions by the lock script, type script and data

Parameters

search_lock_key:  // optional 
		script -  Script 
		args_len - maximal prefix search args len, optional
search_type_key:  // optional
		script -  Script | null
		args_len - maximal prefix search args len, optional
search_data_key: occupied | null   // optional
order: enum, asc | desc
range: [fromBlock, toBlock]    // optional e.g.[0x253b40, 0x253f28] ["0x" + 2440000n.toString(16), "0x" + 2441000n.toString(16)]
limit: result size limit
after_cursor: pagination parameter, optional

Returns

objects - transactions
last_cursor - pagination parameter

3.ex_get_cells_capacity

Returns the live cells‘ capacity by the lock script, type script and data

Parameters

search_lock_key:  //optional 
		script -  Script 
		args_len - maximal prefix search args len, optional
search_type_key:  //optional
		script -  Script | null
		args_len - maximal prefix search args len, optional
search_data_key: occupied | null   //optional

Returns

capacity - total capacity
block_hash - indexed tip block hash
block_number - indexed tip block number

4.get_sudt_cells_balance

Returns the live sudt cells‘ sudt balance and capacity by the lock script and type script.

Parameters

search_lock_key: //optional
		script -  Script
		args_len - maximal prefix search args len, optional
search_type_key:
		script -  Script
				args: <SUDT args>
				code_hash: <SUDT code_hash>
				hash_type: type
		args_len - maximal prefix search args len, optional

Returns

balance - total balance
capacity - total capacity
block_hash - indexed tip block hash
block_number - indexed tip block number

一些实际用例说明

查询某地址中可用 CKB 余额

  • 对于with lock scriptwithout type scriptwithout data的 cells(即为某地址中可用的 CKB),返回该地址的可用 CKB 余额

ex_get_cells_capacity(search_lock_key : Scirpt, search_type_key : null, search_data_key: null)

查询某地址中已占用 CKB 余额(无 type script)

  • 对于with lock scriptwithout type scriptwith data的 cells(即为某地址中无 type 占用的 CKB),返回该地址的正在被占用的 CKB 余额(无 type script)

ex_get_cells_capacity (search_lock_key : Scirpt, search_type_key : null, search_data_key: occupied)

查询某地址中已占用 CKB 余额(有 type script)

  • 对于with lock scriptwith type script的 cells(即为某地址中有 type 占用的 CKB),返回该地址的正在被占用的 CKB 余额(有 type)

ex_get_cells_capacity (search_lock_key : Scirpt, search_type_key : script)

查询某地址中某种 SUDT 的余额,和占用 CKB 的数量(适用于 Nervos DAO)

  • 对于with lock scriptwith type scripttype script 的 code_hash 为 SUDT 合约,args 为某 SUDT的 cells(即为某地址的 SUDT cell),提供 balance 函数,返回该地址的某种 SUDT 的余额;提供 capacity 函数,返回该地址的某种 SUDT 占用的 CKB 数量

get_sudt_cells_balance (search_lock_key : Scirpt, search_type_key : sudt_ID_script)

查询某种 SUDT 的可流通量,和占用 CKB 的总量(适用于 Nervos DAO)

  • 对于without lock scriptwith type scripttype script 的 code_hash 为 SUDT 合约,args 为某 SUDT的 cells(即为某种 SUDT cell),提供 balance 函数,返回该 SUDT 的可流通量;提供 capacity 函数,返回某种 SUDT 占用的 CKB 总数量

get_sudt_cells_balance (search_type_key : sudt_ID_script)

2 Likes