[email protected]:~$

  • Break the liquidity limitation of NervosDAO

    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

    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

    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

    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

    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...

  • Mac 定时备份 GitHub 仓库

    GitHub 身为一家在美国的公司,随时有可能不出乎意料的由于不可抗原因停止对用户的服务。 1. 安装备份脚本 python-github-backup 提供了足够多的备份选择 repos, issues, PR 等等,几乎 GitHub 上有价值的信息都可以备份,而且还支持从 MacOS KeyChain 里读取 GitHub token 安装最新版 python-github-backup,README 中表示支持 python3,但我使用时仍遇到了些兼容问题,使用 python2 可以正常运行 pip install git+https://github.com/josegonzalez/python-github-backup.git#egg=github-backup 安装完成,执行命令试一试能否成功备份 2. 申请 GitHub personal access token 去 GitHub 申请 personal access token 尝试执行命令,替换 jjyr 为自己的用户名,access_token 为实际 token,以及替换备份目录路径 github-backup jjyr -t access_token --output-directory /Users/jiangjinyang/github_backups...

  • Merkle Mountain Range

    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 友好的原生代币

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

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

    很多开发者很熟悉 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 主要包括了以下部分: 基于公私钥的端到端加密 基于...

  • 区块链的偏见

    刷知乎看到一句话,引以为戒。 世人患作文字少,又懒读书,每一篇出,即求过人,如此少有至者。 - 欧阳修 本想写一写对于状态通道的看法,动笔时又看到了知乎上的一个问题 区块链是否是骗局?它是否有弊端? 最近关于区块链被网上各种炒热,虽然一些国外企业尝试使用区块链技术,但是无论怎么看都感觉很有争议性,区块链是否本身是个骗局?它的本身是否有弊端? 还是因为受国内区块链炒作的影响? 没忍住写了回答,反驳对区块链常见的误解,修改了下凑一篇博客。 一部分人没有思考跟着老师们去当韭菜,一部分人经过肤浅的思考然后认定区块链是个骗局 高票答案充满技术性错误,能看出答主没有看过任何的加密经济文章(我怀疑是不是只从知乎上了解过区块链),凭借自己的理解把区块链生搬硬套到不适合的场景再去否认。然后举出愚蠢的区块链应用例子加以反驳,看似合理,实则毫无逻辑。我能用 P2P 诈骗和神奇百货这些东西来否认掉互联网么? 但是大家都喜欢。因为给群众讲技术是听不懂的。所以谁讲的好就听谁的,李笑来讲得好就买山寨币,另一方讲得好就否认掉区块链。 我不想在答案中包括太多技术细节,所以涉及到了也不会展开解释 否认几个最浅显的谬论 1, 区块链上存的数据是否无法保证真伪?(比如追踪鸡蛋这类农作物的安全) 链上的数据可以使用智能合约来验证(所以不是随便存数据这么简单),现实中的事物则需要有机构作为接口提供验证。 看到这里是不是兴奋了?需要机构不是打了区块链的脸了么?不是去中心化么?吹这么厉害居然不能自动检查鸡蛋是哪只鸡生的? 那么分析下这是不是打了脸了? 有链上的数据验证(合约),链下的接口(不属于区块链的中心化认证机构),这两个机制再加上区块链的去中心化机制的成果,就是任何人可以完全的追踪链上信息,并且这些信息都是开放的有接口获取(可用来编程)。 那么区块链不是也无法保证中心化的认证机构作假么?我们来看看区块链能保证什么: 认证机构发布的所有信息都被记录(有私钥保证是该机构签发,所以不可伪造) 所有人都可以看到区块链上的信息且不可篡改 区块链无法帮鸡接生,但是所有信息公开并不可伪造、不可篡改。所有人的眼睛都能盯着公开的信息,能让监管和检举不诚信的检验机构的成本大幅下降 作为反例,想一想最近的热门事件。中心化机构是否可信?(在没有信息公开和来自群众监督的情况下) 有人反驳,分布式数据库就能做到,那么再思考下分布式数据库能否做到不可篡改和所有人都可见,并且有无动机这样做?最好请把这个已经用来存鸡蛋信息的数据库服务告诉我 2,数据爆炸,区块链不可能保存所有数据 实际上,区块链可以不用保存所有数据。 链上可以只保存摘要和默克尔树的根哈希。可以理解成只保存数据的摘要,具体数据放在链外,并通过默克尔证明来证明数据是共识的一部分(交易发送者,执行了哪些合约,所以和数据在链上并无大区别) 3,区块链浪费资源 从两点来考虑 浪费资源是否是个伪命题?电不用也算是被浪费了 区块链是可以使用 POS 等不消耗大量能源的共识算法的 那为什么十多年了没有见到 POS 的区块链? POS 有理论上的难点,但不代表无法解决,需要时间。而且考虑电能是否被浪费的问题,许多链换成 POS 的动机并没有这么强烈。 再讲下我对区块链落地和场景的看法 为什么几年过去了区块链仍难以落地?(为什么几十年了人类还没登上火星?) 缺少基础设施 缺少链外接口(现实世界资产上链、链上身份验证等),最近已经有多种和法币挂钩的稳定币,也有些机构开始尝试提供链上身份验证的服务 还没有可以让一般人轻松使用的钱包,浏览器等基础软件 资本炒作导致区块链的项目看上去都不靠谱...