[email protected]:~$

  • Break the liquidity limitation of NervosDAO

    Tags: CKB English

    I always wonder about breaking the liquidity limitation of NervosDAO since I first learned it from the CKB economic paper. NervosDAO’s liquidity limitation For readers who do not know what the NervosDAO is: NervosDAO is a builtin contract that allows people to deposit CKB into it and get compensation back(to...

  • Introducing Godwoken - A missing piece of the cell model

    Tags: CKB English

    For developers, the cell programming model certainly is the most interesting part of Nervos CKB. There is a short description of the cell model: Cell is generalized UTXO. A cell is a UTXO contains arbitrary data and customizable scripts. When tx consume or create a cell, CKB will load and...

  • An optimized compacted sparse merkle tree

    Tags: Merkletree Cryptography English

    Recently, I have designed and implemented a sparse merkle tree which has the following advantages: No pre-calculated hash set Support both exist proof and non-exists proof Efficient storage and key updating I write this article to explain the construction and optimization tricks of the SMT. Before diving into details, please...

  • Rust contract, part 2 - Write contract with ckb-std

    Tags: Rust CKB English

    Edited at 2020-03-27 Update ckb-std and ckb-tool This article introduces the ckb-std library; and shows how to rewrite our minimal contract with ckb-std, to enables syscalls and Vec, String. The previous contract: #![no_std] #![no_main] #![feature(asm)] #![feature(lang_items)] #[no_mangle] pub fn _start() -> ! { exit(0) } /// Exit syscall pub fn...

  • Rust contract, part 1 - Build CKB contract with Rust

    Tags: Rust CKB English

    Edited at 2020-03-27 Update ckg-std link Remove the linker script section since I found its unnecessary to customize linker Refactor the main function interface AFAIK, the most popular contracts that deployed on CKB is writing in C. There are 3 default contracts in the genesis block: secp256k1 lock, secp256k1 multisig...

  • Merkle Mountain Range

    Tags: Merkletree Cryptography

    Merkle Tree Merkle Tree 是区块链中经常(或者说必须?)会用到结构。 // 比特币交易列表的 Merkle Tree A / \ B C / \ / \ D E F G / \ / \ / \ / \ 1 2 3 4 5 6 7 8 树的叶子节点(图中的 1,2,3,4,5,6,7,8)是插入的元素,在图例中是比特币的 txid。 非叶子节点是对左右子节点的 hash 摘要如 D = hash(1, 2), B =...

  • layer 2 友好的原生代币

    Tags: 区块链 CKB

    矿工奖励 矿工奖励是个很有意思的话题,目前大部分公链如 Bitcoin 的出块奖励主要由增发构成。 矿工出块奖励 = 交易手续费 + 增发奖励 Bitcoin 以及其他大多数加密货币都有总发行量, 增发奖励会逐年减少,直到货币供应达到总发行量, 这时矿工奖励完全由交易费构成。 完全以交易费维护矿工的想法招致了质疑, 很多人担心增发奖励变少后, 交易费无法满足矿工的收益, 矿工会流失导致网络失去安全性, 毕竟在现实中 Bitcoin 和 Ethereum 的矿工收入主要来自增发部分。 完全用手续费作为矿工奖励是否合理?能否满足加密货币网络的安全和发展? layer 2 我真正想谈的是 layer 2 ,这才是交易手续费 vs 增发奖励的核心。 无论是 Lighting network 还是各种 PLASMA 实现,世界上最大的两个加密货币社区花了大量精力在 layer 2 技术上,layer 2 是公认的发展方向。 那么 layer 1 (指 Bitcoin 和 Ethereum 等公链)...

  • 用 Ruby 体验快速开发 P2P 网络程序

    Tags: Ruby

    很多开发者很熟悉 Server-Client 这一套网络结构,Server-Client 是构建互联网应用的基础。 但在区块链技术这里就有点过时了,区块链的世界普遍采用 P2P 网络。 P2P network 是什么呢? 对等式网络(peer-to-peer, 简称P2P),又称点对点技术,是无中心服务器、依靠用户群(peers)交换信息的互联网体系,它的作用在于,减低以往网路传输中的节点,以降低资料遗失的风险。与有中心服务器的中央网络系统不同,对等网络的每个用户端既是一个节点,也有服务器的功能,任何一个节点无法直接找到其他节点,必须依靠其户群进行信息交流。 From 维基百科 ciri-p2p 是在我尝试实现以太坊协议(Ciri Ethereum) 时的一个副产品,使用这个库可以轻松的用 Ruby 来实现 P2P network 服务 考虑到如果可以用 Ruby 来试验各种 P2P 网络协议会非常爽, 所以我把以太坊的底层 P2P 通信协议 - DevP2P 的实现作为了单独的一个库抽离了出来。 DevP2P 是一个相对独立的协议,和区块链、以太坊都没什么太多关联, 所以 ciri-p2p 也可以用来做和区块链完全不相关的事情:比如实现个 “基于 P2P 网络的 DNS 服务”,我们会在下文中用 ciri-p2p 来实现这个例子。 DevP2P 主要包括了以下部分: 基于公私钥的端到端加密 基于...

  • 实现以太坊第三月

    Tags: Ethereum

    系列第三篇文章。转眼之间三个月过去了,还是没有实现以太坊。两个月实现以太坊是不可能的了,黄皮书又不想看,只能写写文章装逼度日。 不过的确是学到了非常丰富的知识,并且对以太坊核心组件的内外有了整体概念。 我在这段时间从黄皮书实现了 EVM 和 Chain (后来几个命令实在看不下去参考了 py-evm),有时会想是不是 Gavin wood 故意把黄皮书写的如此晦涩,来根据智商过滤实现者?为什么简单的规则非要用到这么多符号?公示的解释还是层层递归?耗尽了我的调用栈。 以太坊的规范化的确不是很好,Trie 等规则只有黄皮书上晦涩的公式,和 Ethereum Wiki 上并不完整的解释。唯一用来保证以太坊规范并且值得赞扬的是 Ethereum tests 项目,通过了这个项目的所有测试,就可以认为你基本实现了以太坊协议。 Ciri 项目 3 个月的工作成果转化成了在 Ethereum tests 上通过的八千多个测试(VMTest, VMStateTest, RLPTest, 常跑的有 5726 个测试,其余的测试耗时长跳过)。主要的测试部分还剩下 BlockChainTest 没有通过,这部分包含了以太坊大量的 Fork 规则,和各种区块运行状态的判断,通过了这个测试可以说算是完整的实现了以太坊的核心。(更新:现在 Ciri Ethereum 已经通过了 Constantinople 分叉之前的所有测试!) 同时还输出了 ciri-rlp ,实现了以太坊的 RLP 编码(还是要吐槽下官方 Wiki 给的 RLP python 代码示例都是错的,而且...

  • 实现以太坊第二周 RLPX 子协议、Actor 模型

    Tags: Ethereum

    根据上篇继续: 实现以太坊第一周 DEVP2P::RLPX 握手协议 本周比较懒,字写的尽量少一点。 上周实现了以太坊的网络协议 DevP2P 中的握手部分。DevP2P 还包括了节点发现功能,子协议传输功能,还有整合了所有以上逻辑的 Server。 下一步我打算优先实现以太坊子协议,而不是继续实现 DevP2P 的其他功能。 以太坊子协议定义了一整套以太坊节点间的消息格式:同步区块,获取交易信息,获取区块头等等。实现了以太坊子协议,就可以接着实现区块同步,挖矿,还有相关的 web 3 接口。这部分功能触及了区块链、以太坊的核心机制,实现起来很有意思。比起单纯的 DevP2P 协议更有趣,所以我们采用深度优先的方式来实现以太坊,先做个能部分使用的客户端。 以太坊子协议是通过 DevP2P 中『RLPX 子协议』功能实现。上周我们实现了 RLPX 握手,握手之后就可以通过 RLPX 传输数据。RLPX 使用子协议的概念进行数据传输。 RLPX 子协议 RLPX 包包含了 code, size, payload 三个字段。 RLPX 包(message): code | size | payload payload 中用来保存二进制信息。(经过以太坊使用的 RLP 编码后的内容) 『RLPX 子协议』是在 RLPX...