Tippy
One click CKB devnet
Install / Use
/learn @nervosnetwork/TippyREADME

Getting Started
You can download Tippy binary for your platform of choice from the releases page.
Tippy is pre-built as self-contained .Net Core application. You don't have to install .Net Core to run it. If you're running it on Linux or macOS and want to use the Debugger feature, please install debugger dependencies following this section.
On Windows:
- Download
tippy-win-x64.zip - Extract the zip file (default to
tippy-win-x64) - Enter
tippy-win-x64folder and clickTippy.exeto start
On Linux:
1、start with docker
docker run -it --rm -v /mnt/f/docker.tippy.user/CKBSTATE:/app/CKBSTATE -v /mnt/f/docker.tippy.user/scripts:/app/BinDeps/scripts -p 8000:80 --name tippy registry.cn-hangzhou.aliyuncs.com/nervos/tippy:0.3.3
2、also you can start with tippy Run files
- Download
tippy-linux-x64.tar.gz - Extract the tar.gz file (default to
tippy-linux-x64) - Make
Tippyexecutable:chmod +x ./tippy-linux-x64/Tippy cd tippy-linux-x64then run./Tippyto start
We also provide a Homebrew formula to install with one-liner:
brew install nervosnetwork/tap/tippy-linux
Then simply run tippy to start
On macOS:
- Download
Tippy.dmg - Open the dmg file and drag
Tippy.appto/Applicationsfolder - From
/ApplicationsclickTippy.appto start
We also provide a Homebrew cask to install with one-liner:
brew install nervosnetwork/tap/tippy
Tippy Console and UI
While Tippy runs as a console application, it also provides web UI. By default the dashboard UI will be opened automatically, if not you can access it by visiting http://localhost:5000/ from a browser.
Override the App URL
If you want to access the Web UI and Tippy API from another URL than the default http://localhost URL, there are two options.
1. Set Environment Variable ASPNETCORE_URLS
On Linux you can set the ASPNETCORE_URLS Environment Variable to override the default App URL. For example, launch Tippy this way to use http://0.0.0.0:5000:
ASPNETCORE_URLS="http://0.0.0.0:5000" tippy
2. Modify appsettings.json
You can also modify appsettings.json file to override the default App URL. For example, add the following section to use http://0.0.0.0:5000:
"Kestrel": {
"EndPoints": {
"Http": {
"Url": "http://0.0.0.0:5000"
}
}
}
appsettings.json locates in /Applications/Tippy.app/Contents/MacOS/ on macOS and in the root Tippy folder on Windows/Linux. If Tippy is installed with Homebrew on Linux then it locates in /home/linuxbrew/.linuxbrew/Cellar/tippy-linux/[version]/libexec/.
Debugger
Tippy ships with CKB Debugger to help off-chain contract development.
Note: debugger is only supported on Linux and macOS. It's unavailable on Windows.

Install Dependencies
Debugger requires ttyd and gdb. We recommend that you install them with homebrew.
For Linux
brew install ttyd gdb
For macOS, build gdb from source (with --build-from-source option)
brew install gdb --HEAD --build-from-source
brew install ttyd
API
Tippy exposes a set of RPCs in JSON-RPC 2.0 protocols for controlling a devchain.
It also proxies API calls to the active running devchain for transparent CKB interactions.
The URL of Tippy RPC is <code>http://localhost:5000/api</code>.
CKB RPCs
For CKB RPCs, simply call any API method with Tippy API URL. For example:
echo '{
"id": 2,
"jsonrpc": "2.0",
"method": "get_tip_block_number",
"params": []
}' \
| tr -d '\n' \
| curl -H 'content-type: application/json' -d @- \
http://localhost:5000/api
See CKB JSON-RPC doc for more information.
The send_transaction API method
If you call CKB's send_transaction API method through Tippy API, the transactions will be recorded in Tippy. Go to the Recorded Transactions tab to view them.
Tippy RPCs
Method create_chain
create_chain({assembler_lock_arg, genesis_issued_cells})assembler_lock_arg(optional): Lock arg for block assembler (miner address).genesis_issued_cells(optional): An array of genesis issued cells. See example for the structure.
- result:
{ id, name }
Create a devchain and set it as current active chain.
Example
Request
{
"id": "1",
"jsonrpc": "2.0",
"method": "create_chain",
"params": [
{
"assembler_lock_arg": "0xc8328aabcd9b9e8e64fbc566c4385c3bdeb219d8",
"genesis_issued_cells": [
{
"capacity": "0x5af3107a4000",
"lock": {
"code_hash": "0x9bd7e06f3ecf4be0f2fcd2188b23f1b9fcc88e5d4b65a8637b17723bbda3cce8",
"args": "0xf2cb132b2f6849ef8abe57e98cddf713bb8d71cb",
"hash_type": "type"
}
}
]
}
]
}
Response
{
"jsonrpc": "2.0",
"id": "1",
"result": {
"id": 4,
"name": "CKB devchain"
}
}
Method delete_chain
delete_chain(chain_id)chain_id: ID of the chain to delete.
- result:
"ok"
Delete a chain.
Example
Request
{
"id": "1",
"jsonrpc": "2.0",
"method": "delete_chain",
"params": [4]
}
Response
{
"jsonrpc": "2.0",
"id": "1",
"result": "ok"
}
Method list_chains
- result:
[{ id, name, chain_type, is_active }]
List all chains.
Example
Request
{
"id": "1",
"jsonrpc": "2.0",
"method": "list_chains",
"params": []
}
Response
{
"jsonrpc": "2.0",
"id": "1",
"result": [
{
"id": 1,
"name": "Aggron",
"chain_type": "testnet",
"is_active": false
},
{
"id": 2,
"name": "CKB devchain",
"chain_type": "dev",
"is_active": true
}
]
}
Method set_active_chain
set_active_chain(chain_id)chain_id: ID of the chain to set to active.
- result:
"ok"
Set active chain.
Example
Request
{
"id": "1",
"jsonrpc": "2.0",
"method": "set_active_chain",
"params": [4]
}
Response
{
"jsonrpc": "2.0",
"id": "1",
"result": "ok"
}
Method start_chain
start_chain()- result:
"ok"
Start the current active chain.
Example
Request
{
"id": "1",
"jsonrpc": "2.0",
"method": "start_chain",
"params": []
}
Response
{
"jsonrpc": "2.0",
"id": "1",
"result": "ok"
}
Method stop_chain
stop_chain()- result:
"ok"
Stop the current active chain if it's running.
Example
Request
{
"id": "1",
"jsonrpc": "2.0",
"method": "stop_chain",
"params": []
}
Response
{
"jsonrpc": "2.0",
"id": "1",
"result": "ok"
}
Method start_miner
start_miner()- result:
"ok"
Start the default miner.
Example
Request
{
"id": "1",
"jsonrpc": "2.0",
"method": "start_miner",
"params": []
}
Response
{
"jsonrpc": "2.0",
"id": "1",
"result": "ok"
}
Method stop_miner
stop_miner()- result:
"ok"
Stop the current running default miner.
Example
Request
{
"id": "1",
"jsonrpc": "2.0",
"method": "stop_miner",
"params": []
}
Response
{
"jsonrpc": "2.0",
"id": "1",
"result": "ok"
}
Method mine_blocks
mine_blocks(number_of_blocks)- result:
"Wait for blocks to be mined."
Mine number_of_blocks blocks at the interval of 1 second.
Example
Request
{
"id": "1",
"jsonrpc": "2.0",
"method": "mine_blocks",
"params": [3]
}
Response
{
"jsonrpc": "2.0",
"id": "1",
"result": "Wait for blocks to be mined."
}
Method revert_blocks
revert_blocks(number_of_blocks)- result:
"Reverted blocks."
Mine number_of_blocks blocks at the interval of 1 second.
Example
Request
{
"id": "1",
"jsonrpc": "2.0",
"method": "revert_blocks",
"params": [3]
}
Response
{
"jsonrpc": "2.0",
"id": "1",
"result": "Reverted blocks."
}
Method ban_transaction
ban_transaction(tx_hash, type)tx_hash: Tx hash of the transaction.type: Deny type,proposeorcommit.
- result:
"Added to denylist."
Add a tx to denylist.
Example
Request
{
"id": "1",
"jsonrpc": "2.0",
"method": "ban_transaction",
"params": ["0x9a0580274e9921e04e139214b58ffc60df1625055ab7806ee635b56d329d7732", "propose"]
}
Response
{
"jsonrpc": "2.0",
"id": "1",
"result": "Added to denylist."
}
Method unban_transaction
unban_transaction(tx_hash, type)tx_hash: Tx hash of the transaction.type: Deny type,proposeorcommit.
- result:
"Removed from denylist."
Remove a tx from denylist.
Example
Request
{
"id": "1",
"jsonrpc": "2.0",
"method": "unban_transaction",
"params": ["0x9a0580274e9921e04e139214b58ffc60df1625055ab7806ee635b56d329d7732", "propose"]
}
Response
{
"jsonrpc": "2.0",
"id": "1",
"result": "Removed from denylist."
}
Contributing
- Fetch the codebase:
git clone https://github.com/nervosnetwork/tippy.git - Install .NET Core SDK 5.0
- Install CKB related binary dependencies:
Related Skills
node-connect
350.1kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
109.9kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
350.1kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
qqbot-media
350.1kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。
