背景
当前的 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 script
且without type script
且without 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 script
且without type script
且without 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 script
且without type script
且with 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 script
且with 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 script
且with type script
且type 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 script
且with type script
且type script 的 code_hash 为 SUDT 合约,args 为某 SUDT
的 cells(即为某种 SUDT cell),提供 balance 函数,返回该 SUDT 的可流通量;提供 capacity 函数,返回某种 SUDT 占用的 CKB 总数量
get_sudt_cells_balance (search_type_key : sudt_ID_script)