目錄
-
- 介紹
- 與其他公鍊的差別
- CKB特性
-
- NC Max
- Cell 模型
- RISC-V VM
- 經濟模型
- 資料結構
- CKB 程式設計模型
- 加入測試網絡Aggron
-
- 系統環境
- 下載下傳指令行程式
- 初始化配置
- 運作測試鍊
- 通路測試鍊
- 加入主網
-
- 初始化配置
- 修改挖礦配置
- 運作主鍊
- 開啟挖礦
- ckb-cli指令行
-
- 使用方法
- 設定rpc url
- TUI
- 建立新賬戶
- 領取測試币
- 檢視餘額
- 再建立一個賬戶(接收轉賬)
- 轉賬
- 檢視交易
- 查詢餘額
- 導出私鑰
- 檢視公鑰、生成block_assembler
- 導入私鑰
- IDE
介紹
Nervos 是一個旨在滿足去中心化經濟需求的
分層網絡
。Layer 1 協定 CKB(Common Knowledge Base 共同知識庫)是整個網絡的價值存儲層,Layer 2 協定在 Layer 1 區塊鍊上提供了無限的可擴充性。
Nervos 網絡 = 堅持安全和去中心化的 CKB + 百花齊放的 Layer2
與其他公鍊的差別
- 比特币作為一個單一的可程式設計資産,在 Nervos CKB 上,所有的使用者自定義代币(UDT)都可以和原生代币(CKB)都可以通過圖靈完備的腳本進行程式設計,Nervos CKB 是一個多資産可程式設計的底層智能合約平台。
- CKB 并沒有采用賬戶模型,而是
,并基于 UTXO 設計了一套新的程式設計模型 —— cell 模型。采用了和比特币一樣的 UTXO 模型
- 以太坊不同:
。以太坊采用的是鍊上計算,鍊上驗證的模式,而 CKB 采用的是鍊下計算,鍊上驗證的設計思路
CKB特性
NC Max
比特币的中本聰共識(Nakamoto Consensus,簡稱 NC)的變體,命名為 NC Max,在保留 NC 優點的同時,提升了其性能極限和抵抗自私挖礦攻擊的能力
Cell 模型
Nervos CKB 采用的是一種稱為 cell 模型的通用的 UTXO 模型,通過 cell 模型來進行原生代币(CKB)和使用者自定義代币(UDT)的描述和程式設計
RISC-V VM
CKB VM 是為 CKB 設計的基于開源 RISC-V 指令集的虛拟機。通過 CKB VM,
任意一種可以編譯成 RISC-V 二進制代碼的語言都可以用來當作 CKB 的程式設計語言
,比如 C/C++,比如 JavaScript/Ruby/Rust 等等
經濟模型
在 Nervos CKB 中,CKB 不僅僅是底層網絡的原生代币,還代表了狀态存儲的權限,你持有 1 個 CKB 就擁有了 1 Byte 在 CKB 底層網絡上的存儲空間。
資料結構
CKB 程式設計模型
CKB 中的狀态是一等公民(First-Class Citizen),狀态包含在交易和區塊中,它們直接同步在節點之間。CKB 的程式設計模型由三部分組成:
- 狀态生成(鍊下)
- 狀态存儲(Cell 模型)
- 狀态驗證(CKB VM)
Cell 是 CKB 中的主要狀态存儲單元,資産所有權歸使用者所有,并且必須遵循腳本指定的相關應用程式邏輯
。
這樣一個模型的特點是:
- 狀态是第一性的;
- 所有者是狀态的屬性,每一份狀态隻有一個所有者;
- 狀态不斷的被銷毀和建立
utxo
class TxOut
{
public:
Amount Value;
Script scriptPubKey;
...
}
cell
pub struct CellOutput {
pub capacity: Capacity,
pub data: Vec<u8>,
pub lock: Script,
pub type_: Option<Script>,
}
- capacity 定義 cell 容量的大小(用 shannons 表示,1 CKB = 100,000,000 shannons)
- data 用于存儲資料(包括狀态資料、腳本資料等)
- type script 定義 cell 類型的腳本
- lock script 定義 cell 所有權的腳本
lock 管死,type 管生。lock 負責 tx 中 input cells 的驗證,type 負責 output cells 的驗證。type 負責的是不能随意建立有某個 type 的 cell 出來,反過來的話,如果 cell 的 type 是 X,那 cell 一定通過了 X 的驗證。
加入測試網絡Aggron
系統環境
- centos7.6
- glibc, libstdc++, openssl
下載下傳指令行程式
mkdir ~/nervosnetwork
cd ~/nervosnetwork
wget https://github.com/nervosnetwork/ckb/releases/download/v0.32.0/ckb_v0.32.0_x86_64-unknown-centos-gnu.tar.gz
tar zxvf ckb_v0.32.0_x86_64-unknown-centos-gnu.tar.gz
解壓後的目錄結構
tree ckb_v0.32.0_x86_64-unknown-centos-gnu
ckb_v0.32.0_x86_64-unknown-centos-gnu
├── CHANGELOG.md
├── ckb ①
├── ckb-cli ②
├── COPYING
├── docs
│ ├── ckb-core-dev.md
│ ├── ckb-debugging.md
│ ├── configure.md
│ ├── get-ckb.md
│ ├── hashes.toml
│ ├── integrity-check.md
│ ├── quick-start.md
│ ├── rpc.md
│ └── run-ckb-with-docker.md
├── init
│ ├── linux-systemd
│ │ ├── ckb-miner.service
│ │ ├── ckb.service
│ │ └── README.md
│ └── README.md
└── README.md
① ckb 是主程式,通過指令行操作,我們可以生産配置,運作節點,同步區塊資訊,并開啟挖礦等。
② ckb-cli 是官方的附加指令行工具,rpc 請求,生成 ckb 位址,管理錢包,模拟發送交易,并可以向 Nervos Dao 中存币。
拷貝指令至bin目錄
cp ckb_v0.32.0_x86_64-unknown-centos-gnu/ckb /usr/local/bin/
cp ckb_v0.32.0_x86_64-unknown-centos-gnu/ckb-cli /usr/local/bin/
清除不需要的檔案
rm -rf ckb_v0.32.0_x86_64-unknown-centos-gnu
rm -f ckb_v0.32.0_x86_64-unknown-centos-gnu.tar.gz
初始化配置
檢視指令是否正确安裝
ckb --version
ckb-cli --version
ckb init --chain testnet
生成的配置檔案如下
├── ckb-miner.toml
└── ckb.toml
運作測試鍊
日志在data/logs目錄下
啟動後會生成資料目錄,并同步測試鍊的資料
tree data
data
├── db
│ ├── 000003.log
│ ├── CURRENT
│ ├── IDENTITY
│ ├── LOCK
│ ├── LOG
│ ├── LOG.old.1591171377564776
│ ├── MANIFEST-000004
│ ├── OPTIONS-000028
│ └── OPTIONS-000030
├── indexer_db
│ ├── 000003.log
│ ├── CURRENT
│ ├── IDENTITY
│ ├── LOCK
│ ├── LOG
│ ├── LOG.old.1591171377671827
│ ├── MANIFEST-000004
│ ├── OPTIONS-000012
│ └── OPTIONS-000014
├── logs
│ └── run.log
└── network
├── peer_store
│ ├── addr_manager.db
│ └── ban_list.db
└── secret_key
通路測試鍊
加入主網
系統環境,下載下傳指令行程式同上一步測試網絡
初始化配置
ckb init --chain mainnet
修改挖礦配置
具體用法可參考下一章節 ckb-cli指令行
#建立賬号
ckb-cli account new
# 導出私鑰
ckb-cli account export --extended-privkey-path wallet --lock-arg 你的賬戶lock-arg
# 根據私鑰生成配置
ckb-cli util key-info --privkey-path wallet
# 修改block_assembler資訊,添加上一步得到的
vi ckb.toml
運作主鍊
日志在data/logs目錄下
開啟挖礦
ckb-cli指令行
使用方法
USAGE:
ckb-cli [FLAGS] [OPTIONS] [SUBCOMMAND]
FLAGS:
# 輸出 jason 取消高亮
--no-color Do not highlight(color) output json
# 顯示請求參數
--debug Display request parameters
# 確定索引庫在執行指令前完成同步
--wait-for-sync Ensure the index-store synchronizes completely before command being executed
# 列印幫助資訊
-h, --help Prints help information
# 列印版本資訊
-V, --version Prints version information
OPTIONS:
# RPC API 服務 url
--url <url> RPC API server url
# 選擇輸出格式,預設 yaml,可選項:yaml,json
--output-format <output-format> Select output format [default: yaml] [possible values: yaml, json]
SUBCOMMANDS:
# 對節點調用 RPC 指令
rpc Invoke RPC call to node
# 賬戶管理
account Manage accounts
# 處理模拟交易(驗證/發送)
mock-tx Handle mock transactions (verify/send)
# 處理常見的簽名/多簽交易
tx Handle common sighash/multisig transaction
# 啟動 API 服務
server Start advanced API server
# 常用工具
util Utilities
# molecule 編碼/解碼工具
molecule Molecule encode/decode utilities
# 交易 / 查詢餘額(通過本地索引)/ key utils
wallet Transfer / query balance (with local index) / key utils
# 存入 / 準備 / 取出 / 查詢 Nervos DAO 餘額(通過本地索引)/ key utils
dao Deposit / prepare / withdraw / query NervosDAO balance (with local index) / key utils
# 進入 TUI 模式
tui Enter TUI mode
# help
help Prints this message or the help of the given subcommand(s)
設定rpc url
在執行一些指令時,會從設定的 rpc url 中獲得資料,如要連接配接到其他服務端請修改API_URL環境變量,預設值如下
export API_URL=http://127.0.0.1:8114
TUI
終端裡的圖形化界面,需在鍊啟動後使用
ckb-cli tui
┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ <ckb_testnet> CKB 0.32.0 (248aa88 ) │
└─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
┌Menu───────────┐┌Summary─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ Summary ││ │
│ Recent Blocks ││ API URL : http://127.0.0.1:8114 │
│ Peers ││ Chain : ckb_testnet │
│ Top Capacity ││ Epoch : 1315016309473354 │
│ ││ Difficulty : 30966321 │
│ ││ IBD : false │
│ ││ Tip Block : 48883 => Byte32(0x66fab37fa85bb385522750598a62fabec0af2da5ea919761e1fc9c37913c11ae) │
│ ││ TxPool : pending=0, proposed=0, orphan=0 │
│ ││ Peers : 8 │
│ ││ │
│ ││ │
│ ││ │
│ ││ │
│ ││ │
│ ││ │
│ ││ │
│ ││ │
│ ││ │
└───────────────┘│ │
┌Help───────────┐│ │
│ ││ │
│ Quit : Q ││ │
│ Help : ? ││ │
│ ││ │
└───────────────┘└────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
建立新賬戶
$ckb-cli account new
Your new account is locked with a password. Please give a password. Do not forget this password.
Password:#輸入密碼
Repeat password:#重複輸入密碼
address:
mainnet: ckb1qyqt9h89me8e2ttugkh9c3xr0872mzda09hqqku8r0
testnet: ckt1qyqt9h89me8e2ttugkh9c3xr0872mzda09hqanzc0n
lock_arg: 0xb2dce5de4f952d7c45ae5c44c379fcad89bd796e
lock_hash: 0xf2bb0bc1a7c41ba1fbc804776bf01d876e0a1b51f655e92f8c5e5700b1d36b11
領取測試币
打開https://faucet.nervos.org/ ,填入你的testnet address,即可領取5000ckb,每三個小時能領取一次
檢視餘額
等待上一步領取測試币的交易區塊确認(12個區塊?),即可查詢
$ckb-cli wallet get-capacity --address ckt1qyqt9h89me8e2ttugkh9c3xr0872mzda09hqanzc0n
total: 5000.0 (CKB)
再建立一個賬戶(接收轉賬)
$ckb-cli account new
Your new account is locked with a password. Please give a password. Do not forget this password.
Password:
Repeat password:
address:
mainnet: ckb1qyqxqtqcmj6ar2v6x4ep9227xmcd842pcd3skjm2jr
testnet: ckt1qyqxqtqcmj6ar2v6x4ep9227xmcd842pcd3sth947l
lock_arg: 0x602c18dcb5d1a99a357212a95e36f0d3d541c363
lock_hash: 0x8465e5aca5b34daf2764154885e99da78cdd112646c80f1c9cee8d1d93cf1e96
轉賬
–from-account 指定lock-arg
ckb-cli wallet transfer --from-account 0xb2dce5de4f952d7c45ae5c44c379fcad89bd796e --to-address ckt1qyqxqtqcmj6ar2v6x4ep9227xmcd842pcd3sth947l --capacity 100 --tx-fee 0.1
Password:
0xbf2c81bd89ca7589e95b48d6eec3b8a3feecb82bd6e0323acf283a600e54f083
檢視交易
$ckb-cli rpc get_transaction --hash 0xbf2c81bd89ca7589e95b48d6eec3b8a3feecb82bd6e0323acf283a600e54f083
transaction:
version: 0
cell_deps:
- out_point:
tx_hash: 0xf8de3bb47d055cdf460d93a2a6e1b05f7432f9777c8c474abf4eec1d4aee5d37
index: 0
dep_type: dep_group
header_deps: []
inputs:
- since: 0x0 (absolute block(0))
previous_output:
tx_hash: 0x63ccba3685254e38e604e544fab1f3ba79ddb59a8ddf13bb41a81ee112be5522
index: 0
outputs:
- capacity: "100.0"
lock:
code_hash: 0x9bd7e06f3ecf4be0f2fcd2188b23f1b9fcc88e5d4b65a8637b17723bbda3cce8 (sighash)
args: 0x602c18dcb5d1a99a357212a95e36f0d3d541c363
hash_type: type
type: ~
- capacity: "4899.9"
lock:
code_hash: 0x9bd7e06f3ecf4be0f2fcd2188b23f1b9fcc88e5d4b65a8637b17723bbda3cce8 (sighash)
args: 0xb2dce5de4f952d7c45ae5c44c379fcad89bd796e
hash_type: type
type: ~
outputs_data:
- 0x
- 0x
witnesses:
- 0x5500000010000000550000005500000041000000c8066f434dcdb96d4f4ee36778471649911b7fa15a4d6123d2f1ae99ac209b326560713cf0b00bf64c8685034b8d88d6e8646759383b5d153d2517b1c42f570a00
hash: 0xbf2c81bd89ca7589e95b48d6eec3b8a3feecb82bd6e0323acf283a600e54f083
tx_status:
status: committed
block_hash: 0x3c00035aee191361a3841a56e1cb7a6ab0a26c0059edeb75904af44edd88499e
查詢餘額
下面兩條指令等價,需要等待區塊确認(100個區塊?)
也可以在區塊鍊浏覽器查詢
ckb-cli wallet get-capacity --address ckt1qyqt9h89me8e2ttugkh9c3xr0872mzda09hqanzc0n
ckb-cli wallet get-capacity --lock-hash 0xf2bb0bc1a7c41ba1fbc804776bf01d876e0a1b51f655e92f8c5e5700b1d36b11
導出私鑰
–extended-privkey-path 後跟導出的檔案位置和檔案名
–lock-arg 0x834ae5… 導出 lock-arg 對應值的私鑰
$ckb-cli account export --extended-privkey-path wallet --lock-arg 0xb2dce5de4f952d7c45ae5c44c379fcad89bd796e
Password:#輸入密碼
Success exported account as extended privkey to: "wallet", please use this file carefully
目前目錄會生成一個wallet檔案,第一行為私鑰
$cat wallet
3afde6f941c3196658ca55e3098570cc730b66d97047fa34fb5df8b088d3876a
b2d5cf1ab9d01720163494210595720b7fc25e71df60cd53ef35ee5b2140a316
檢視公鑰、生成block_assembler
$ckb-cli util key-info --privkey-path wallet
Put this config in < ckb.toml >:
[block_assembler]
code_hash = "0x9bd7e06f3ecf4be0f2fcd2188b23f1b9fcc88e5d4b65a8637b17723bbda3cce8"
hash_type = "type"
args = "0xb2dce5de4f952d7c45ae5c44c379fcad89bd796e"
message = "0x"
address:
mainnet: ckb1qyqt9h89me8e2ttugkh9c3xr0872mzda09hqqku8r0
testnet: ckt1qyqt9h89me8e2ttugkh9c3xr0872mzda09hqanzc0n
lock_arg: 0xb2dce5de4f952d7c45ae5c44c379fcad89bd796e
lock_hash: 0xf2bb0bc1a7c41ba1fbc804776bf01d876e0a1b51f655e92f8c5e5700b1d36b11
old-testnet-address: ckt1q9gry5zgktwwthj0j5khc3dwt3zvx70u4kym67twlsen7q
pubkey: 02ed6f2b6f20c4711222133a4ff13a753fa00666f7e02449015697f1455364c8c9
導入私鑰
ckb-cli account import --privkey-path wallet
IDE
主要提供以下功能
- 搭建本地開發網絡、連接配接測試網絡、主網
- 簡易的區塊浏覽器
- Tx 構造器
- 智能合約開發、部署
- 私鑰、公鑰管理
視訊教程:https://docs.ckb.dev/docs/docs/ide/ide-ckb-studio