{"id":18674158,"url":"https://github.com/nervosnetwork/tippy","last_synced_at":"2025-04-12T01:55:37.560Z","repository":{"id":44603172,"uuid":"305304440","full_name":"nervosnetwork/tippy","owner":"nervosnetwork","description":"One click CKB devnet","archived":false,"fork":false,"pushed_at":"2022-02-05T11:52:16.000Z","size":51176,"stargazers_count":18,"open_issues_count":4,"forks_count":5,"subscribers_count":11,"default_branch":"develop","last_synced_at":"2025-04-12T01:55:20.750Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"CSS","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nervosnetwork.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-10-19T07:50:10.000Z","updated_at":"2024-10-31T16:23:13.000Z","dependencies_parsed_at":"2022-09-04T00:02:35.011Z","dependency_job_id":null,"html_url":"https://github.com/nervosnetwork/tippy","commit_stats":null,"previous_names":[],"tags_count":19,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nervosnetwork%2Ftippy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nervosnetwork%2Ftippy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nervosnetwork%2Ftippy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nervosnetwork%2Ftippy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nervosnetwork","download_url":"https://codeload.github.com/nervosnetwork/tippy/tar.gz/refs/heads/develop","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248505867,"owners_count":21115354,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-07T09:17:44.815Z","updated_at":"2025-04-12T01:55:37.538Z","avatar_url":"https://github.com/nervosnetwork.png","language":"CSS","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"logo.png\" width=\"256px\"\u003e\n\u003c/p\u003e\n\n![tippy](https://github.com/nervosnetwork/tippy/workflows/tippy/badge.svg)\n\n![Tippy](tippy.png)\n\n## Getting Started\n\nYou can download Tippy binary for your platform of choice from the [releases](https://github.com/nervosnetwork/tippy/releases) page.\n\nTippy 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](#install-dependencies) section.\n\n### On Windows:\n\n* Download `tippy-win-x64.zip`\n* Extract the zip file (default to `tippy-win-x64`)\n* Enter `tippy-win-x64` folder and click `Tippy.exe` to start\n\n### On Linux:\n\n####  1、start with docker\n```\ndocker 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\n```\n\n####  2、also you can start with tippy Run files\n* Download `tippy-linux-x64.tar.gz`\n* Extract the tar.gz file (default to `tippy-linux-x64`)\n* Make `Tippy` executable: `chmod +x ./tippy-linux-x64/Tippy`\n* `cd tippy-linux-x64` then run `./Tippy` to start\n\nWe also provide a Homebrew formula to install with one-liner:\n\n```\nbrew install nervosnetwork/tap/tippy-linux\n```\n\nThen simply run `tippy` to start\n\n### On macOS:\n\n* Download `Tippy.dmg`\n* Open the dmg file and drag `Tippy.app` to `/Applications` folder\n* From `/Applications` click `Tippy.app` to start\n\nWe also provide a Homebrew cask to install with one-liner:\n\n```\nbrew install nervosnetwork/tap/tippy\n```\n\n### Tippy Console and UI\n\nWhile 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/](http://localhost:5000/) from a browser.\n\n### Override the App URL\n\nIf you want to access the Web UI and Tippy API from another URL than the default `http://localhost` URL, there are two options.\n\n#### 1. Set Environment Variable `ASPNETCORE_URLS`\n\nOn 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`:\n\n```shell\nASPNETCORE_URLS=\"http://0.0.0.0:5000\" tippy\n```\n\n#### 2. Modify `appsettings.json`\n\nYou 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`:\n\n```json\n\"Kestrel\": {\n  \"EndPoints\": {\n    \"Http\": {\n      \"Url\": \"http://0.0.0.0:5000\"\n    }\n  }\n}\n```\n\n`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/`.\n\n### Debugger\n\nTippy ships with [CKB Debugger](https://github.com/nervosnetwork/ckb-standalone-debugger) to help off-chain contract development.\n\n*Note: debugger is only supported on Linux and macOS. It's unavailable on Windows.*\n\n![CKB Debugger](debugger.png)\n\n## Install Dependencies\n\nDebugger requires `ttyd` and `gdb`. We recommend that you install them with homebrew.\n\nFor Linux\n\n```bash\nbrew install ttyd gdb\n```\n\nFor macOS, build gdb from source (with `--build-from-source` option)\n\n```bash\nbrew install gdb --HEAD --build-from-source\nbrew install ttyd\n```\n\n## API\n\nTippy exposes a set of RPCs in JSON-RPC 2.0 protocols for controlling a devchain.\n\nIt also proxies API calls to the active running devchain for transparent CKB interactions.\n\nThe URL of Tippy RPC is \u003ccode\u003ehttp://localhost:5000/api\u003c/code\u003e.\n\n### CKB RPCs\n\nFor CKB RPCs, simply call any API method with Tippy API URL. For example:\n\n```\necho '{\n  \"id\": 2,\n  \"jsonrpc\": \"2.0\",\n  \"method\": \"get_tip_block_number\",\n  \"params\": []\n}' \\\n| tr -d '\\n' \\\n| curl -H 'content-type: application/json' -d @- \\\nhttp://localhost:5000/api\n```\n\nSee [CKB JSON-RPC doc](https://docs.nervos.org/docs/reference/rpc) for more information.\n\n### The `send_transaction` API method\n\nIf 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.\n\n### Tippy RPCs\n\n#### Method `create_chain`\n* `create_chain({assembler_lock_arg, genesis_issued_cells})`\n  * `assembler_lock_arg`(optional): Lock arg for block assembler (miner address).\n  * `genesis_issued_cells`(optional): An array of genesis issued cells. See example for the structure.\n* result: `{ id, name }`\n\nCreate a devchain and set it as current active chain.\n\n**Example**\n\nRequest\n\n    {\n      \"id\": \"1\",\n      \"jsonrpc\": \"2.0\",\n      \"method\": \"create_chain\",\n      \"params\": [\n        {\n          \"assembler_lock_arg\": \"0xc8328aabcd9b9e8e64fbc566c4385c3bdeb219d8\",\n          \"genesis_issued_cells\": [\n              {\n                \"capacity\": \"0x5af3107a4000\",\n                \"lock\": {\n                  \"code_hash\": \"0x9bd7e06f3ecf4be0f2fcd2188b23f1b9fcc88e5d4b65a8637b17723bbda3cce8\",\n                  \"args\": \"0xf2cb132b2f6849ef8abe57e98cddf713bb8d71cb\",\n                  \"hash_type\": \"type\"\n                }\n            }\n          ]\n        }\n      ]\n    }\n\nResponse\n\n    {\n      \"jsonrpc\": \"2.0\",\n      \"id\": \"1\",\n      \"result\": {\n        \"id\": 4,\n        \"name\": \"CKB devchain\"\n      }\n    }\n\n#### Method `delete_chain`\n* `delete_chain(chain_id)`\n  * `chain_id`: ID of the chain to delete.\n* result: `\"ok\"`\n\nDelete a chain.\n\n**Example**\n\nRequest\n\n    {\n      \"id\": \"1\",\n      \"jsonrpc\": \"2.0\",\n      \"method\": \"delete_chain\",\n      \"params\": [4]\n    }\n\nResponse\n\n    {\n      \"jsonrpc\": \"2.0\",\n      \"id\": \"1\",\n      \"result\": \"ok\"\n    }\n\n#### Method `list_chains`\n* result: `[{ id, name, chain_type, is_active }]`\n\nList all chains.\n\n**Example**\n\nRequest\n\n    {\n      \"id\": \"1\",\n      \"jsonrpc\": \"2.0\",\n      \"method\": \"list_chains\",\n      \"params\": []\n    }\n\nResponse\n\n    {\n      \"jsonrpc\": \"2.0\",\n      \"id\": \"1\",\n      \"result\": [\n        {\n          \"id\": 1,\n          \"name\": \"Aggron\",\n          \"chain_type\": \"testnet\",\n          \"is_active\": false\n        },\n        {\n          \"id\": 2,\n          \"name\": \"CKB devchain\",\n          \"chain_type\": \"dev\",\n          \"is_active\": true\n        }\n      ]\n    }\n\n#### Method `set_active_chain`\n* `set_active_chain(chain_id)`\n  * `chain_id`: ID of the chain to set to active.\n* result: `\"ok\"`\n\nSet active chain.\n\n**Example**\n\nRequest\n\n    {\n      \"id\": \"1\",\n      \"jsonrpc\": \"2.0\",\n      \"method\": \"set_active_chain\",\n      \"params\": [4]\n    }\n\nResponse\n\n    {\n      \"jsonrpc\": \"2.0\",\n      \"id\": \"1\",\n      \"result\": \"ok\"\n    }\n\n#### Method `start_chain`\n\n* `start_chain()`\n* result: `\"ok\"`\n\nStart the current active chain.\n\n**Example**\n\nRequest\n\n    {\n      \"id\": \"1\",\n      \"jsonrpc\": \"2.0\",\n      \"method\": \"start_chain\",\n      \"params\": []\n    }\n\nResponse\n\n    {\n      \"jsonrpc\": \"2.0\",\n      \"id\": \"1\",\n      \"result\": \"ok\"\n    }\n\n#### Method `stop_chain`\n\n* `stop_chain()`\n* result: `\"ok\"`\n\nStop the current active chain if it's running.\n\n**Example**\n\nRequest\n\n    {\n      \"id\": \"1\",\n      \"jsonrpc\": \"2.0\",\n      \"method\": \"stop_chain\",\n      \"params\": []\n    }\n\nResponse\n\n    {\n      \"jsonrpc\": \"2.0\",\n      \"id\": \"1\",\n      \"result\": \"ok\"\n    }\n\n#### Method `start_miner`\n\n* `start_miner()`\n* result: `\"ok\"`\n\nStart the default miner.\n\n**Example**\n\nRequest\n\n    {\n      \"id\": \"1\",\n      \"jsonrpc\": \"2.0\",\n      \"method\": \"start_miner\",\n      \"params\": []\n    }\n\nResponse\n\n    {\n      \"jsonrpc\": \"2.0\",\n      \"id\": \"1\",\n      \"result\": \"ok\"\n    }\n\n#### Method `stop_miner`\n\n* `stop_miner()`\n* result: `\"ok\"`\n\nStop the current running default miner.\n\n**Example**\n\nRequest\n\n    {\n      \"id\": \"1\",\n      \"jsonrpc\": \"2.0\",\n      \"method\": \"stop_miner\",\n      \"params\": []\n    }\n\nResponse\n\n    {\n      \"jsonrpc\": \"2.0\",\n      \"id\": \"1\",\n      \"result\": \"ok\"\n    }\n\n#### Method `mine_blocks`\n\n* `mine_blocks(number_of_blocks)`\n* result: `\"Wait for blocks to be mined.\"`\n\nMine `number_of_blocks` blocks at the interval of 1 second.\n\n**Example**\n\nRequest\n\n    {\n      \"id\": \"1\",\n      \"jsonrpc\": \"2.0\",\n      \"method\": \"mine_blocks\",\n      \"params\": [3]\n    }\n\nResponse\n\n    {\n      \"jsonrpc\": \"2.0\",\n      \"id\": \"1\",\n      \"result\": \"Wait for blocks to be mined.\"\n    }\n\n#### Method `revert_blocks`\n\n* `revert_blocks(number_of_blocks)`\n* result: `\"Reverted blocks.\"`\n\nMine `number_of_blocks` blocks at the interval of 1 second.\n\n**Example**\n\nRequest\n\n    {\n      \"id\": \"1\",\n      \"jsonrpc\": \"2.0\",\n      \"method\": \"revert_blocks\",\n      \"params\": [3]\n    }\n\nResponse\n\n    {\n      \"jsonrpc\": \"2.0\",\n      \"id\": \"1\",\n      \"result\": \"Reverted blocks.\"\n    }\n\n#### Method `ban_transaction`\n\n* `ban_transaction(tx_hash, type)`\n  * `tx_hash`: Tx hash of the transaction.\n  * `type`: Deny type, `propose` or `commit`.\n* result: `\"Added to denylist.\"`\n\nAdd a tx to denylist.\n\n**Example**\n\nRequest\n\n    {\n      \"id\": \"1\",\n      \"jsonrpc\": \"2.0\",\n      \"method\": \"ban_transaction\",\n      \"params\": [\"0x9a0580274e9921e04e139214b58ffc60df1625055ab7806ee635b56d329d7732\", \"propose\"]\n    }\n\nResponse\n\n    {\n      \"jsonrpc\": \"2.0\",\n      \"id\": \"1\",\n      \"result\": \"Added to denylist.\"\n    }\n\n\n#### Method `unban_transaction`\n\n* `unban_transaction(tx_hash, type)`\n  * `tx_hash`: Tx hash of the transaction.\n  * `type`: Deny type, `propose` or `commit`.\n* result: `\"Removed from denylist.\"`\n\nRemove a tx from denylist.\n\n**Example**\n\nRequest\n\n    {\n      \"id\": \"1\",\n      \"jsonrpc\": \"2.0\",\n      \"method\": \"unban_transaction\",\n      \"params\": [\"0x9a0580274e9921e04e139214b58ffc60df1625055ab7806ee635b56d329d7732\", \"propose\"]\n    }\n\nResponse\n\n    {\n      \"jsonrpc\": \"2.0\",\n      \"id\": \"1\",\n      \"result\": \"Removed from denylist.\"\n    }\n\n## Contributing\n\n1. Fetch the codebase: `git clone https://github.com/nervosnetwork/tippy.git`\n2. Install [.NET Core SDK](https://www.microsoft.com/net/download) 5.0\n3. Install CKB related binary dependencies:\n  ```shell\n  ./tools/download-binaries.ps1\n  ```\n  or\n  ```shell\n  ./tools/download-binaries.sh\n  ```\n4. Open `Tippy.sln` with Visual Studio 2019 (v16.8 or later), Visual Studio 2019 for Mac (v8.8 or later), or Visual Studio Code\n5. Select `Tippy` as startup project for the solution, then start debugging it\n6. Browse `http://localhost:5000/` in your browser\n\n### Add Database Migration\n\n`EF` models are located in `Tippy.Core` project. When making any changes to them and migration is needed, run this\n\n```shell\ndotnet ef migrations add [MigrationName] --project src/Tippy.Core --startup-project src/Tippy\n```\n\nOr open `Package Manager Console` in Visual Studio, select `Tippy.Core` as `Default project`, then run\n\n```shell\nAdd-Migration [MigrationName]\n```\n\n## Design\n\nTippy's page design is based on [mazipan/bulma-admin-dashboard-template](https://github.com/mazipan/bulma-admin-dashboard-template).\n\n## Q\u0026A\n\n### I'm using Tippy in WSL and I can see the Tippy UI via localhost:5000, but the height is always 0\n\nThis is probably because you have proxy enabled. Try launching Tippy with the following command\n\n```\nunset HTTPS_PROXY HTTP_PROXY http_proxy https_proxy\npath/to/Tippy\n```\n\n### Where can I find the CKB node data started with Tippy\n\n- Linux: `~/.config/Tippy`\n- Win: `~/ApplicationData/Tippy`\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnervosnetwork%2Ftippy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnervosnetwork%2Ftippy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnervosnetwork%2Ftippy/lists"}