Nervos CKB初体验
目录
- 介绍
- 与其他公链的区别
- 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 模型
,并基于 UTXO 设计了一套新的编程模型 —— cell 模型。 - 以太坊不同:
以太坊采用的是链上计算,链上验证的模式,而 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目录下
nohup ckb run >/dev/null 2>&1 &
启动后会生成数据目录,并同步测试链的数据
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
访问测试链
curl http://127.0.0.1:8114 -H 'content-type: application/json' -d ' {"id":1,"jsonrpc":"2.0","method":"get_tip_block_number","params":[]} '
加入主网
系统环境,下载命令行程序同上一步测试网络
初始化配置
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目录下
nohup ckb run >/dev/null 2>&1 &
开启挖矿
nohup ckb miner >/dev/null 2>&1 &
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 informationOPTIONS:# 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 utilswallet Transfer / query balance (with local index) / key utils# 存入 / 准备 / 取出 / 查询 Nervos DAO 余额(通过本地索引)/ key utilsdao Deposit / prepare / withdraw / query NervosDAO balance (with local index) / key utils# 进入 TUI 模式tui Enter TUI mode# helphelp 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: ckb1qyqt9h89me8e2ttugkh9c3xr0872mzda09hqqku8r0testnet: 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: ckb1qyqxqtqcmj6ar2v6x4ep9227xmcd842pcd3skjm2jrtestnet: 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: 0cell_deps:- out_point:tx_hash: 0xf8de3bb47d055cdf460d93a2a6e1b05f7432f9777c8c474abf4eec1d4aee5d37index: 0dep_type: dep_groupheader_deps: []inputs:- since: 0x0 (absolute block(0))previous_output:tx_hash: 0x63ccba3685254e38e604e544fab1f3ba79ddb59a8ddf13bb41a81ee112be5522index: 0outputs:- capacity: "100.0"lock:code_hash: 0x9bd7e06f3ecf4be0f2fcd2188b23f1b9fcc88e5d4b65a8637b17723bbda3cce8 (sighash)args: 0x602c18dcb5d1a99a357212a95e36f0d3d541c363hash_type: typetype: ~- capacity: "4899.9"lock:code_hash: 0x9bd7e06f3ecf4be0f2fcd2188b23f1b9fcc88e5d4b65a8637b17723bbda3cce8 (sighash)args: 0xb2dce5de4f952d7c45ae5c44c379fcad89bd796ehash_type: typetype: ~outputs_data:- 0x- 0xwitnesses:- 0x5500000010000000550000005500000041000000c8066f434dcdb96d4f4ee36778471649911b7fa15a4d6123d2f1ae99ac209b326560713cf0b00bf64c8685034b8d88d6e8646759383b5d153d2517b1c42f570a00hash: 0xbf2c81bd89ca7589e95b48d6eec3b8a3feecb82bd6e0323acf283a600e54f083
tx_status:status: committedblock_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: ckb1qyqt9h89me8e2ttugkh9c3xr0872mzda09hqqku8r0testnet: 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
Nervos CKB初体验相关推荐
- 教你如何极简上手 Nervos CKB 上的智能合约开发
Nervos CKB 是一条基于 PoW 的 Layer 1 公链,其 Cell 模型是比特币 UTXO 模型的泛化,因此它的智能合约开发有别于基于以太坊账户模型的智能合约开发.在本文中,Nervso ...
- 区块链合约协议C语言,Nervos CKB将支持多语言编写智能合约
作者:Nervos社区投稿 / 来源:Nervos 中文社区 多语言智能合约 " 可以使用多种语言编程和编写智能合约." 我们计划构建多个使用高级语言或 DSL 的框架来促进 CK ...
- 苹果电脑安装python3密码_mac系统安装Python3初体验
前沿 对于iOS开发不要随便拆卸系统自带的Python,因为有很多 library 还是使用 Python2.7. 1 安装Xcode 1.1 App Store 搜索Xcode 并安装 1.2 安装 ...
- MapReduce编程初体验
需求:在给定的文本文件中统计输出每一个单词出现的总次数 第一步: 准备一个aaa.txt文本文档 第二步: 在文本文档中随便写入一些测试数据,这里我写入的是 hello,world,hadoop he ...
- 小程序 缩放_缩放流星应用程序的初体验
小程序 缩放 by Elie Steinbock 埃莉·斯坦博克(Elie Steinbock) 缩放流星应用程序的初体验 (First Experiences Scaling a Meteor Ap ...
- wxWidgets刚開始学习的人导引(3)——wxWidgets应用程序初体验
wxWidgets刚開始学习的人导引全文件夹 PDF版及附件下载 1 前言 2 下载.安装wxWidgets 3 wxWidgets应用程序初体验 4 wxWidgets学习资料及利用方法指导 5 ...
- 用鸿蒙跑了个 “hello world”!鸿蒙开发初体验
点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 来源 | https://my.oschina.net/u ...
- Windows Embedded Standard开发初体验(二)
支持Silverlight的Windows Embedded Standard 好了,完成安装之后,我们就可以来做Windows Embedded Standard的第一个操作系统镜像了.在开始菜单中 ...
- 深度探索Hyperledger技术与应用之超级账本初体验(附部署代码)
2019独角兽企业重金招聘Python工程师标准>>> 本章零基础地介绍了如何快速体验超级账本搭建的区块链网络,我们先绕过了比较复杂的初始化配置,用官方提供的fabric-sampl ...
最新文章
- 一文带你了解如何打造持续学习文化
- 《给教师的阅读建议》经典语录
- ps怎么清屏_黑洞PS大赛刷屏!最后一张扎心了……
- 相机模型和双目立体匹配
- 【推荐视频】中科院赵军:知识图谱关键技术及其在推荐系统中的应用
- nginx发布PHP代码,nginx服务器配置返回php代码
- javascript 方法总结(Array篇)
- java static 执行顺序
- IPTV和宽带网络融合
- 翼支付门户CAS单点登录相关介绍
- 计算机右键菜单更换顺序,win10系统调整右键菜单选项顺序的恢复技巧
- vue 实现电子签名功能 支持生成图片
- 用QQ群推广网站的方法
- 提升自信心的十五个心理暗示法
- 15个最好的PDF转word的在线转换器,将PDF文件转换成doc文件
- qemu对acpi的模拟
- 用matlab画饼状图和相量图
- 计算机学习路线+必读书籍
- Distraction-Aware Shadow Detection
- win10任意形状截屏
热门文章
- 极简html4网页布局,浅淡极简的网页设计:少即多
- Linux tar 命令 将归档内指定文件解压到指定目录
- SOFT_RoCE环境搭建
- 运用 Elasticsearch 8.1.x 实现智能问答系统
- win10去除桌面快捷方式小箭头
- 数据处理(一)数据清洗
- python3安装setuptools步骤_简单python2.7.3安装setuptools模块
- kubectl cordon 标记节点不可部署Pod SchedulingDisabled uncordon 取消标记
- Gerrit版本升级
- 治服FME之clipper转换器幺蛾子(出现丢失、多余裁剪结果)