【PolkaDevWeekly 波卡开发者周报】2020-03-09

Interlay Receives W3F Grant to Build Trustless BTC-Polkadot Bridge
https://medium.com/interlay/interlay-receives-w3f-grant-to-build-trustless-btc-polkadot-bridge-c4bdb40173a3

Interlay 团队会在波卡上做一个 BTC-Polkadot Bridge,设计上应该基本和 ChainX 类似,BTC互换的部分使用了原子交换。

HASH CIB 深度报告:即将上线的波卡开发进度、启动过程与竞争优势
http://mp.weixin.qq.com/s?__biz=MzI1Mzk4ODIwOA==&mid=2247490014&idx=1&sn=aa0272227aa0802a3610d734d5a2eaa9&chksm=e9cd45c1debaccd721625ae8063e582e03c159c125880c6507fca5fb038c5a0d9db572794609&mpshare=1&scene=1&srcid=&sharer_sharetime=1583573514442&sharer_shareid=7134817600c1844f17b9c0df52e52765#rd

比较新和完整的波卡报告,对主网和主要功能的时间预测上应该比较准确。波卡应该是 Eth2 的主要而且唯一的对手,而且落地很可能比 Eth2 更快

学习Substrate编程之加密猫扩展-带生命周期的 kitty
http://mp.weixin.qq.com/s?__biz=MzU0ODk1MTE1MA==&mid=2247484444&idx=3&sn=d739cc516cfd3dc020dfa460496ee176&chksm=fbb6011dccc1880b8e84771a56f9b0e45ed852126c23c9719885bfd51aee4f2161319abe747f&mpshare=1&scene=1&srcid=&sharer_sharetime=1583251832330&sharer_shareid=7134817600c1844f17b9c0df52e52765#rd
http://mp.weixin.qq.com/s?__biz=MzU0ODk1MTE1MA==&mid=2247484452&idx=3&sn=4cfe5f3a41a0711008b009841b7999ae&chksm=fbb60125ccc18833cb7242cd32bb0b341723a74450bf5468afdb168cc5d46d48ee859292c13a&mpshare=1&scene=1&srcid=&sharer_sharetime=1583340117506&sharer_shareid=7134817600c1844f17b9c0df52e52765#rd

官方的 cryptokitty 的例子只写了最简单的第一步,作者继续增加更复杂的一些功能,可以看出用substrate开发,还是比智能合约要简单

Substrate VS Smart contract
https://zhuanlan.zhihu.com/p/108000025

锤姐的substrate开发者入门,可以看出除了开发语言rust本身的灵活性,自定义资源、链上升级、自定义账户、开源基础功能库、自动执行链上逻辑会是应用链的突出优势。

Substrate 区块链应用的交易费用设计
https://zhuanlan.zhihu.com/p/108194544

以 EOS 为例,交易费用设计在链活跃度不高时都不是问题,一但进入资源竞争阶段,则会是大问题,substrate交易费设计矿机能帮助高效调节资源的使用,灵活地往社区期望的方向调整。

波卡运行原理系列(三)组件字典

Substrate

  • Parity 开发的区块链基础框架
  • 开发者可以定制一个区块链的各个模块,自定义开发主要关注 State Machine,Substrate 中称之为 Runtime
  • Polkadot 的 Relay Chain 和 Parachain 都是基于 Substrate 框架开发的

Full node 全节点

  • 同步和保存所有区块数据

Light node 轻节点

  • 仅同步和保存区块头数据

Relay Chain 中继链

  • 类似 ETH 2.0 的信标链或 Cosmos 的 Hub
  • 块中记录的是各个 Parachain 的 Candidate Receipts 和 Erasure Coding
  • 基于 NPoS 共识
  • 为 Parachain 提供安全保证
  • 提供 Parachain 之间消息通信的可靠性凭证

Parachain 平行链

  • 也叫应用链
  • 数量 10-100
  • 基于 Substrate 开发的 runtime
  • 需要通过拍卖的方式获得插槽 Slot 才能成为 Parachain,如果未获得插槽则可以用 Parathread 方式的方式接入 Relay Chain
  • 需要组建 Collator

Collator 收集人

  • Parachain 的 Full node、Relay Chain 的 Light node
  • 哪个 Collator 生成块,由 Parachain 自定义,可以通过类似 POS 或者 POW 的机制来选定(但不提供验证和共识),可以设置激励机制
  • 生成 Candidate Receipts 和 Erasure Coding 发给 Validator
  • 细分的话存在两种 Collator: Polkadot Collator & Cumulus Collator

Validator 验证人

  • 数量 250-1000,由 DOT 持有者投票选出
  • 每个 Parachain 会被随机分配 10 个 Validator
  • 与 Collator 交互验证 Parachain 新的区块数据
  • 需要5-7个 Validator 来验证和签署 Parachain 中新产生的区块
  • 生成 Candidate Receipts 和 Erasure Coding,写入 Relay Chain 交易队列
  • BABE 出块 Validator 选择 Candidate Receipts 构建 Relay Chain 区块
  • 在 GRANDPA 中对区块进行投票,超过三分之二则最终确认

Fishermen 钓鱼人

  • Fishermen 需要抵押 DOT(Collator不需要抵押 DOT)
  • Fishermen 是 Parachain 的 Full node
  • 出块(BABE)与最终确定(GRANDPA)之间,Fishermen 进行有效性检查,防止 Validator 合谋

Bridge 桥

  • 一种特殊的 Parachain,通过运行一个 Sovereign Chain(BTC、ETH等非 substrate 构建)的轻节点,完成资产的跨链
  • 再通过 XCMP 将资产传递到其它 Parachain
  • Sovereign Chain 和 Parachain 的一个简单的区分方法是 Sovereign Chain 自己提供共识,Parachain 由 Relay Chain 提供共识(验证 Parachain 数据需要跑一个 Relay Chain 轻节点)

Nominator 提名人/投票人

  • 一般指 DOT 的投票人(Parachain 可以有自己的Staking机制,所以也可能有 Nominator)
  • 最多投票给 16 个 Validator, 系统会自动分配票数,使得票数尽量分散
  • Stake 解委托:Kusama 是7天
  • 参与治理投票:自定义 Conviction,不同锁定期产生不同的投票权重

Merkle 树

  • 特性:如果某些值发生更改,则可以通过查看新的值和树中受其影响的路径来验证更改
  • 基于此属性,Validator 可以验证状态转换,而无需访问整个状态

Parachain Block

Parachain 区块,由 Collator 生成,Validator 验证后将 Parachain Block 的 Candidate Receipts 和 Erasure Coding 写入 Relay Chain 交易队列

Relay Chain Block

Relay Chain 区块,由 Validator 生成

Candidate Receipt 候选回执

Validator 通过签名为 Parachain 区块构造 Candidate Receipt:

  • Parachain ID
  • Collator ID 和签名
  • 父块 Candidate Receipts 的哈希值
  • 区块 Erasure Coding 的 Merkle 根
  • 跨链消息的 Merkle 根
  • 区块的哈希散列
  • 执行区块之前的 Parachain 的状态根
  • 执行区块之后的 Parachain 的状态根

Erasure Coding 纠删码

  • 解决数据无法获得的问题:Validator 和 Fishermen 谁犯错
  • 三分之一的 Validator 获得了区块编码了的数据片段时,即可重新构建出这个 Parachain 的区块
  • Grandpa 共识机制是一种拜占庭容错的共识算法,也就是说仅在大于三分之二的 Validator 投票验证通过了之后,才完成区块的最终确认,所以可以获得三分之二的有 Erasure Coding 数据片段后,重构 Parachain 产出的区块并进行最终确认
  • Erasure Coding 也用于 Fishermen 来报告区块是否无效时的复核,额外的 Validator 会需要取得这个区块,或者通过数据片段来重组出这个区块并再次检查

Parathread

  • 本质是将部分 Parachain 插槽以类似出租、非独占的方式开放,使得更多基于 Substrate 的链可以接入
  • Parathread 需要激励特定的 Collator 来帮助自己打包区块并提交给 Validator,这里的 Collator 如何组建目前还未看到明确的资料
  • Parathread 通过支付 DOT + TIP 的方式让 Validator 将自己的 Candidate Receipts 写入 Relay Chain
  • Parathread 和 Parachain 的安全性相同,但出块时间稳定性上会比 Parachain 差

Cumulus

  • 本质是一个 Substrate Pallet
  • 为 Substrate 的 Runtime 链提供 Polkadot 共识的工具库
  • 同步 Relay Chain 到 Parachain,从而确定目前已敲定的 Parachain 区块
  • 运行 Collator node 并生成 Parachain 区块数据
  • 发送和接收跨链消息 XCMP 的工具

XCMP

  • Parachain 之间通信的机制
  • 本质上 Parachain 之间直接建立网络连接传递消息
  • 消息的安全性通过 Relay Chain 验证

SPREE(也叫 Trust Wormhole)

  • Relay Chain 解决了 Parachain 被51%攻击的情况,SPREE 解决 Parachain A 由治理的修改对 Parachain B 造成某种意义上攻击的情况。
  • 解决方法是把约定的执行操作的代码wasm放到 Relay Chain 上,单个 Parachain 不能通过自己的治理机制修改该操作。

Hermit Relay Chain 隐继链

  • 将 DOT 的转让、抵押、管理等事务放到一条单独的 Parachain 中,以接入的方式加到 Relay Chain
  • 这样做的好处是 Relay Chain 中将仅包含 Candidate Receipts

2nd Layer Relay Chain 二级中继链

  • Parachain 本身变成一个二级的 Relay Chain
  • 安全性更低、出块敲定速度更慢、跨链消息传递速度更长
  • 接入成本更低,满足安全性要求更低的 Parachain 需求
  • 可以继续往下级联实现无限的拓展性

其它

  • Collator、Validator、Fishermen 只是经济角度定义的角色,实际运行中一个节点可以扮演了多个不同的角色

参考文献

Substrate开发环境配置 – Substrate Playground

写了几篇不同的配置 Substrate 开发环境的方法,本文介绍一种最简单的环境配置方法:

Substrate Playground
https://playground.substrate.dev/

(可能需要科学上网,否则打开较慢)

Substrate Playground 是完全网页端的 Substrate 开发 IDE,类似 Rust Playground 和 CodeSandbox,功能强大到令人惊叹。

以下是它包含的功能:

1 一个完整的代码编辑和编译工具

Screen Shot 2020-02-29 at 15.31.53

2 远程运行一个免费的 node template 节点

Screen Shot 2020-02-29 at 15.28.30

3 该节点已经自动配置好 wss,可以一键链接 Polkadot Apps

Screen Shot 2020-02-29 at 15.28.57

4 还有一套 React 的前端模板,并可以直接启动

Screen Shot 2020-02-29 at 15.30.40

这个环境对于新人快速上手,或者分享DEMO简直好用到炸裂,不得不佩服Parity大神们的功利。

Substrate开发环境配置 – 本地配置 Substrate 2.0 node template 以及画布应用

安装 Substrate 2.0

https://substrate.dev/docs/en/tutorials/creating-your-first-substrate-chain/setup

使用 substrate-node-template 创建一个本地节点并启动

https://substrate.dev/docs/en/tutorials/creating-your-first-substrate-chain/interact

访问 https://polkadot.js.org/apps/ 连接到本地节点

启动 substrate-one-million-remarks

git clone https://github.com/laboon/substrate-one-million-remarks

修改 index.js 中的 WsProvider 代码

启动

/substrate-one-million-remarks
yarn && yarn start

通过浏览器访问画布
http://localhost/

使用 Extrinsics 发送 system.remark
内容:0x1337020020cccccc

然后就可以在 20,20 位置看到画的像素点了

使用 draw.js 发送交易来作画

用 node 命令启动

node draw.js

刷新页面即可看到输出

小结

本例子中的画布应用通过与 system.remark Extrinsic 交互,完成链上作画的操作。该 Extrinsic 为 Substrate 2.0 新增,可以用于多种存证记录用途。

Substrate开发环境配置 – 如何在 VPS 上创建一个 Substrate 1.0 节点

VPS 安装的好处是不影响本机的环境和占用本机性能,不需要时也可以随时释放。

VPS 准备

申请一个 VPS 服务器

本文测试时使用的环境如下
阿里云 HK
系统:Ubuntu 18.04
配置:2核4G
硬盘:默认 40G 系统盘

建议海外服务器,安装速度较快

安装

参考 substrate kitties 教程安装
https://substrate.dev/substrate-collectables-workshop/#/zh-cn/0/setup

配置 wss

安装 ngnix

sudo apt-get install nginx

安装 certbot

https://certbot.eff.org/lets-encrypt/ubuntubionic-nginx.html

修改 nginx 配置 /etc/nginx/site-available/default

server {
    server_name test.substrate.cc; # managed by Certbot
    location / {
    try_files $uri $uri/ =404;
    proxy_pass http://localhost:9944;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
  }
    listen [::]:443 ssl ipv6only=on; # managed by Certbot
    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/test.substrate.cc/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/test.substrate.cc/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}

重启nginx

sudo service nginx restart

启动 substrate

通过 Screen 或 PM2 启动

./target/release/substratekitties --dev

测试

如果你配置的域名是 wss://test.substrate.cc
可以访问 https://test.substrate.cc
如果页面输出
“WebSocket Protocol Error: Unable to parse WebSocket key.”
则应该已经配置好了,接下去用 https://polkadot.js.org/apps/ 测试连接即可。

 

Substrate开发环境配置 – 本地调试 Substrate 2.0

本地调试环境的好处一方面可以更快的定位问题,一方面可以方便学习。
Substrate 2.0 是最新的 substrate 版本,相比 1.0 在模块设计和抽象上做得更好,一些模块的名字做了较大修改。

安装环境

可以直接用官方的fast模式自动安装环境。

curl https://getsubstrate.io -sSf | bash -s -- --fast

建议走代理,否则很慢
Mac Terminal 走 ss 可以看这个 https://github.com/mrdulin/blog/issues/18

下载代码和安装

git clone https://github.com/paritytech/substrate.git
export WASM_BUILD_TYPE=release
cd substrate
cargo build

运行

cargo run --bin substrate -- --dev -d .chaindata --execution=NativeElseWasm

数据文件默认放在 .chaindata 目录
重启如果碰到问题,可以尝试删除数据文件目录 rm -rf .chaindata

配置CLion

可以参考 Aten 的文章
https://learnblockchain.cn/2019/12/21/substrate-run-debug/

 

Substrate开发环境配置 – 为什么 substratekitties 等应用教程测试失败

按照教程
https://substrate.dev/substrate-collectables-workshop/#/zh-cn/README

成功安装substratekitties应用后,使用 https://polkadot.js.org/apps/
进行测试时报如下错误:

submitAndWatchExtrinsic(extrinsic: Extrinsic): ExtrinsicStatus:: 1010: Invalid Transaction: 0

原因

substratekitties应用是基于 substrate 1.0 的,而 polkadot.js 的网页钱包已经切换到 substrate 2.0 了,所以存在兼容性问题

解决方案

1 自己本地安装 0.36 版本的 polkadot.js 网页钱包,教程见:
http://blog.boka.network/2020/02/17/polkadot-xue-xi-bi-ji-polkadotjs-app-an-zhuang/

2 也可以访问下面的站点,是笔者搭的一个 0.36 版本的网页钱包
http://app.substrate.cc/

如何查看版本

在 polkadot.js 网页钱包左下角可以看到 substrate 以及 apps 的版本

43D5A040-6E62-47CE-9660-D129632F06D8

 

Substrate开发环境配置 – polkadot-js app 安装

Github
https://github.com/polkadot-js/apps

是什么

polkadot-js 既是Substrate的钱包,也是Substrate的客户端。

为什么

默认情况下该工具可以通过 https://polkadot.js.org/apps 直接访问,自己本地安装的好处是:

1 解决版本兼容性问题
比如使用 substrate 1.0 开发一些应用链,包括 substratekitties,在新版的 polkadot-js 中存在签名错误的问题。

2 学习substrate网页应用的开发
polkadot-js 使用REACT开发,代码质量很高。

3 给自己的应用链定制钱包

4 https://polkadot.js.org/apps 因为默认走 https,所以节点必须 wss 支持或为本地节点,如果一个远程的 ws 节点无法使用

如何安装

下载 github 代码后,按 README 中步骤安装即可。
关注 Node 和 Yarn 的版本要求。

如何安装老版本

使用git切换到以前的版本即可,比如下面的命令可以切换到 0.36 版本,是一个支持 substrate 1.0 应用链的版本。

git checkout  2e7f28a62

如何配置 VPS

修改 ngnix 的站点配置如下

server {
    listen 80 default_server;
    listen [::]:80 default_server;

  server_name app.substrate.cc;

  # Add index.php to the list if you are using PHP
  index index.html index.htm index.nginx-debian.html;

    location / {

    proxy_pass http://localhost:3000;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    }
}

 

波卡治理系列(一)存储和控制账户

波卡钱包有一下三种账户类型

存储账户 Stash Account

控制账户 Controller Account

会话账户 Session Account(用于验证节点配置,本文暂不涉及)

Staking操作相关的是【存储账户】和【控制账户】两种,对于新用户来说不太容易理解。

首先说下这么做的好处:提供了一种更安全的委托投票管理机制,将资金和操作分离,从而提高Staking操作的安全性。

【存储账户】和【控制账户】不同的权限

存储账户
– 设置控制账户
– 绑定和解绑投票金额

控制账户
– 解绑投票金额
– 设置奖励归集方式
– 提名节点

存储账户可以设置自身为控制账户。
控制账户本身也可以作为存储账户并设置下一级控制账户,实现嵌套的模型。

奖励领取设置

奖励归集到哪个钱包,以及是否自动续投也可以进行设置

所以,如果你持有较多的DOT和KSM,比较安全的方式是先导入存储钱包到麦子钱包,并完成控制账号设置,和资产绑定,然后删除该钱包。
之后所有投票、奖励领取、解委托操作全都通过控制账户来进行操作。

转自:http://blog.mathwallet.net/?p=2665

 

关于 KSM Staking 的一些信息

机制 – NPoS 提名权益证明

Polkadot 使用提名权益证明(NPoS, Nominated Proof of Stake)机制来选择验证人集合,该机制设计有验证人(validator)和提名人(nominator)两种角色,以实现链安全性的最大化。

参与抵押:
* 代币将被锁定12周左右
* 验证人如果做出损害网络行为将面临惩罚

https://mp.weixin.qq.com/s?__biz=MzA5NTQyNDIyNw==&mid=2247483820&idx=1&sn=4759dba8723486661f388f3f80c4d839

通胀率

KSM通胀系统设定:当系统抵押率低于50%时,年平均收益率会高于20%,激励更多的KSM代币抵押进来;相反,当系统抵押率高于50%时,年平均收益率会低于20%,鼓励部分矿工退出。
https://mp.weixin.qq.com/s?__biz=MzI1NTUwOTcwNQ==&mid=2247483658&idx=1&sn=29faa0d0e8b8c63ece760440af017ec6

目前的抵押率和年化:
抵押率 17.66 %
年收益率 20.40 %

更多实时数据:
https://depool.io

节点信息

https://polkascan.io/pre/kusama-cc3/session/validator

https://depool.io

https://labs.hashquark.io/#/polka

如何 Staking

Kusama Staking 工具操作视频
http://blog.mathwallet.net/?p=2654