分享

2019-04-25

第6次BCD线下活动:通过趣味小游戏教你开发DAPP

时间 2019年5月12日 1:30 PM ~ 5:30 PM 限额 20人 地点 北京朝阳望京诚盈中心1号楼9层 活动简介 我们希望通过coding这种不一样的方式让你对区块链应用,获得直观操作的体验,了解他们是如何工作的。 为你打开通往区块链世界的一扇大门,为你提供一个有力的工具撬动加密经济的巨大引擎。 活动使用的区块链框架是CITA。 游戏简介...

Read More
2019-04-15

如何用 CITA 实现一个类 DPoS 的高性能区块链

导读:Nervos Network通过分层的设计来解决区块链的“不可能三角”,Layer 1主要关注安全,Layer 2关注性能。作为Nervos Network的Layer 2,让我们来看看如何用CITA实现一个DPoS的高性能区块链。 早期的 CITA 是针对联盟链进行场景优化的。目前的 CITA 是一个通用的区块链框架,其设计目标是可以灵活实现各种类型的区块链。CITA 默认的配置是 BFT 共识 + EVM 虚拟机,同时编程框架支持微服务可替换。例如,CITAHub 社区的小伙伴们通过底层修改实现了 POA 和 WASM 虚拟机等功能。不过利用 CITA 强大的合约功能可以更简单地实现记账机制的定制化。本文中,我们将介绍如何不修改底层代码,仅在合约层定制实现一个类 DPoS 的高性能公链。 以 EOS 为代表的 DPoS 公链通常采用代理选举候选节点、节点上任、定期更新记账节点的方式实现记账节点的民主化更替。对应地,CITA 也需要实现选举合约、共识节点治理、节点分类激励以及共识节点出块比例管理等功能。 选举合约 节点选举合约是一个标准的链上智能合约,负责节点注册、收集用户的投票并输出选举结果到节点管理合约。不同的社区可能会对节点选举具有不同的要求,所以这里的投票方案非常灵活。既可以使用系统代币投票,也可以指定某个 ERC20 的代币投票,也可以按账号投票等等。例如,在偏公链的场景下,节点需要抵押代币,用户使用代币进行投票对节点进行支持;而在一个存在实名认证服务的场景下,节点可能需要获得尽可能多的实名用户的支持。 选举合约应该能够周期性地输出得票最多的若干个节点到节点管理合约,同时能够给出得票次之的候选节点,他们可以同时获得系统激励合约的激励。 节点管理合约 CITA 的节点管理合约( https://docs.citahub.com/zh-CN/cita/system/node[1] 2 )具备两个重要的系统功能:增删共识节点、调整节点的出块权重。这两个功能是我们实现一个“类 DPoS”共识的高性能区块链的核心。节点管理合约只能由系统超级管理员权限的账号发起调用,我们可以将前面的选举合约设置为系统超级管理员权限,并允许它调用节点管理合约。具体方法可以参考 CITA 治理机制的定制化设计代码( https://github.com/cryptape/appchain-gov-general[2] 2 )。这样,选举合约给出的记账节点上任信息就可以直接转化为节点管理合约的输入,实现记账节点的无缝更替。 此外,节点管理合约还可以接收记账节点的权重参数,实现不同的记账节点由于得票占比不同,出块比例不同的功能。不同的出块比例意味着后续出块的激励不同、记账话语权不同,从而实现类似 DPoS 的效果。 需要指出的是,这种模式下 CITA 的每一轮投票仍然是采取 BFT 的每个节点一票方式,记账权重体现在长期(例如1000个块)不同记账权重的节点出块的数量比例不同,并非 EOS 等区块链的 DPoS 共识中不同权重的节点 BFT 投票权重不同。当然,作为区块链框架,CITA 也可以通过修改底层的方式实现相同的功能,有兴趣的开发者可以提 issue 实现。 激励合约 获得记账权的节点以及暂未获得记账权但获得足够多的投票的候选节点按照社区同行的规则可以获得出块奖励或分红。CITA 采用了“系统自动执行合约”的机制,可以实现每区块自动执行一个代币分发合约( https://docs.citahub.com/zh-CN/cita/system-contract-interface/auto-exec[3] 3 ),从而为记账节点和候选节点分发奖励。 运营方可以在创世块创建足够多的系统代币,锁定到一个激励合约,并在激励合约中编写按照选举合约结果分发出块奖励的命令。具体命令可以是类似每区块将预定代币的 40% 分配给当前记账节点,并将 40% 平均分给在任的记账节点,剩余 20% 平均分配给候选节点。当然,类似的方案完全由社区决定,并可以通过投票随时修改。 结论 不同的社区、不同的行业领域绝不可能千篇一律,必须有不同的协作模式。如果每种模式都需要修改底层协议,编写底层代码,那么其开发难度是不可想象的。CITA 灵活的框架结构以及治理和经济模型可以实现非常适合特定社区的记账、激励模式。期待开发者利用 CITA 实现更多创新的落地场景。...

Read More
2019-04-14

理解Nervos 网络中的几种核心角色

一个好的经济模型需要将各个参与方的利益诉求统一起来,达到一种平衡,并且可以持续的运行下去。为了更好的理解Nervos网络中各个参与方,下面我们从每个角色付出和得到什么来进行分析。 矿工 矿工和比特币或者其它区块链一样,是整个网络的最底层,它们的主要作用是通过争夺出块权来达成整个网络的共识。 提供什么 软件上,矿工为整个网络提供一个安全的根基。硬件上矿工提供了三种资源:计算,带宽和存储;计算和带宽是一种瞬时的资源,用来进行哈希计算和网络传输,而存储是一种持续的资源,用来存储整个网络的状态数据。 得到什么 矿工的诉求很简单,就是通过挖矿获得CKB代币。 法院——CKB状态 前面提到的矿工的角色是给网络提供一个安全的根基,保证CKB的状态不会被恶意篡改,这个时候CKB的状态就像一个法院一样,它是公正的,可以作为证据的来源。 提供什么 法院提供的是证据,CKB状态提供的是不可篡改的状态数据,如果任何人对于当前状态有异议,都可以找这个法院来进行裁决,一个典型的例子是如果用户怀疑Layer 2的开发者作恶的话,那可以提交交易的哈希证明,假设这个哈希证明是Layer 2上一周内所有交易数据的哈希值,如果这周内有任意一笔交易被篡改的话,那当前计算的哈希值和提交到CKB上的哈希值肯定是不一样的,通过这种方式来进行公正的判决,处罚Layer 2开发者抵押的CKB。 得到什么 法院是无私的,公正和网络的顺畅运行就是对它最好的回报了。 中央银行——NervosDAO NervosDAO是一个智能合约,如果整个网络有1000个CKB,你有100个CKB占有10%的比例,这时候你把100个CKB存入到NervosDAO中,当CKB二级发行出10个新的CKB的时候,你就可以获得10 * 10% = 1个CKB了。这个例子为了方便理解进行了简化,实际情况中还会对矿工进行补偿。 提供什么...

Read More
2019-04-11

探索Nervos Network上会出现的应用场景

当我们提到Nervos的时候,一般会有两种含义,一种是Nervos CKB,专门指Layer 1的公链,第二种含义是Nervos Network,代表了整个Nervos的生态,不但包括CKB,还包括了Layer 2以及更上一层的DApp。 CKB作为一个基于PoW共识的公链,通过更加合理的多层架构设计,解决了区块链的“不可能三角”难题。良好的设计为区块链应用的扩展提供了很好的设计范式:Layer 1最重要的是关注安全,为上层创造信任,而上层则关注计算,通过提供更高的tps让应用更加易用。 从数据结构上,通过将比特币的UTXO结构泛化,CKB将只支持数字类型的UTXO扩展为支持任意数据类型的新的状态模型——Cell。这样的设计实现了二级资产(UDT,User Defined Token)的所有权第一次真正回归到了用户手中 ( https://talk.nervos.org/t/first-class-asset/405[1] )。 更安全的代币发行 虽然代币发行是从以太坊开始发展并流行的,但在实践过程中也暴露出了一些问题,特别是安全问题,曾经遇到过很多起因为合约安全漏洞造成用户的资产损失,对整个项目产生了巨大影响。 有了Cell这样的数据结构,每个用户的资产互相分离并且拥有完全的所有权,这样就保证了用户资产的安全;同时可以让资产的定义和资产的状态分离,这样就算资产定义的合约出现了bug,也很容易进行升级更新,只要资产定义的逻辑允许。 资源租赁市场 用户用的的CKB不但是一种代币,还是一种稀有的存储资源,如果一个开发者基于CKB开发了一个DApp,这个DApp比较受用户欢迎,用户量增加导致占用的CKB增加,如果开发者手中的CKB不多的话,那他可以去资源租赁市场以可以负担得起的价格租赁一段时间一定数量CKB的使用权,等到租赁期结束,CKB租赁商可以获得一定比例的费用,而开发者可以缓解一时的资源紧张。 Layer 2节点提供商 AppChain是Layer 2中的一种解决方案,它是一条联盟链,具有较高的TPS和较好的可定制性,和CKB的配合使用也符合Nervos Network设计中的“Layer 1专注安全,Layer 2做好计算”的原则。 对于一个小团队或者个人来说,维护一个区块链的节点成本不低,如果有Layer 2节点提供商可以很容易的搭建一个节点,用户只需要按需付费,就好像今天的AWS和阿里云一样,开发者可以留出更多的时间去思考自己的业务逻辑,让基于区块链的尝试更加容易。 理财 CKB中因为有二级发行的存在,所以所有人手中的CKB都是会相对贬值的。Nervos CKB中有一个国有银行NervosDAO,主要目的是为了防止用户手中的“闲钱”贬值,“闲钱”是指属于用户的CKB没有被使用,只是被当做“钱”而“闲”在那里。NervosDAO的实现方式是一个智能合约,只要用户将自己的币锁定在这个合约中,那么二级发行的CKB就会有一部分会分给锁定的CKB的所有者,通过这种方式来对抗通胀。 有国有银行同时也会有民间银行,民间银行可以提供更灵活的资金管理方式,不但可以让你的资产部贬值,还可以让你跑赢通胀,赚到一些。 稳定币...

Read More
2019-03-26

Daniel 为你解读 CKB 经济模型提案

自从我们发布了 Nervos CKB 经济模型提案之后,收到了很多社区小伙伴的反馈,大家在论坛中掀起了不少有意思的讨论,也提出了很多问题。上周,我们举行了第 17 场 Dev Meetup,这次 Daniel 借机为大家解读了这份经济模型提案,并解答了小伙伴们的疑问。对于这份提案你是否也有许多疑惑呢?快来点击活动视频,看看 Daniel 是否解答了你的疑惑。 精彩回顾 Daniel 在活动中提出了他认为 Nervos...

Read More
2019-03-25

Blockchain Coding Day 5th 活动精彩回顾

2019年3月24日,Nervos北京社区主办的Blockchain Coding Day如期举办,本次的联合主办方有珠峰培训[1],HiBlock社区[2]和好奇猫学院[3]。 在举办了5次活动之后,我们发现每次都有不同职业的人参与,相同的是他们都有强烈的好奇心和探索精神。这次活动让人印象深刻的是一个做硬件电路的同学,从“遥远”的通州赶来学习交流,虽然也是IT行业,但他说“隔行如隔山”,自己对于区块链是个小白,所以有很多问题要了解,和我们的教练交流了将近3个小时,从比特币、以太坊到Nervos基础知识,到区块链如何应用,到区块链未来的发展趋势,有一股“把你们知道的通通告诉我”的架势。 本次活动的同学们强烈建议我们普及一下更基础的知识,比如比特币和以太坊的原理,所以我们亮出了77页的幻灯片——初探以太坊[4],由社区管理员兼教练刘宁给大家讲解。让大家了解了coinbase交易,UTXO模型,如何验证区块,叔块奖励,为何引入gas,以及分叉的一些趣事。 活动后同学表示:收获很大,PPT动画特效不错啊 。 之后当然是一起coding(抠腚)了。因为这个过程比较耗费脑力,所以我们特意给大家准备了稻香村的甜点,还准备了秘猿科技[5]的贴纸。 我们在活动的过程中还收到了对于社区以及活动的建议,如:内容方面,增加更加基础的内容,探索一些应用的场景;社区方面,扩展合作渠道, 将社区的影响力做大。我们相信,通过我们和社区一起努力,Nervos北京社区一定会帮助到更多的人。 我们把BCD所用的资源已经公开,如果你想在自己的城市举办BCD,欢迎和我们联系,我们将提供全程支持,和大家一道完善这个有意义的活动。 Nervos北京社区致力于将区块链带给更多的人,通过整合不同的资源,让基于区块链的创新更加容易。Nervos北京社区主办的Blockchain Coding Day活动已经通过5场活动影响了近百人,通过coding这种最硬核的方式帮助同学们提升了对于区块链的认知,为未来的创新提供了更多的可能。 链接 [1] 珠峰培训: http://www.zhufengpeixun.cn[2] HiBlock社区: https://hiblock.one[3] 好奇猫学院: haoqicat.com[4] 初探以太坊: https://myslide.cn/slides/9076[5] 秘猿科技: https://www.cryptape.com BCD的资源请点击下方的原文链接获取。...

Read More
2019-03-15

强力推荐的值得关注的几个以太坊技术社区

以下排名不分先后 以太坊爱好者 EthFans,以太坊爱好者,创立于 2015 年,是国内最早的以太坊社区之一。三年来,以太坊爱好者一直秉持着“传播新知、凝聚共识”的理念,为中文的以太坊和密码学货币社区贡献翻译和原创内容,介绍以太坊的技术和运行原理、探讨去中心化网络的意义、聚焦密码学货币技术和生态的前沿议题。 HiBlock区块链社区https://hiblock.one[1] 价值观:开放、协作、透明、链接、分享 翻译过Solidity 0.4.22 https://solidity-cn.readthedocs.io/[2] 获得Ethereum Community Fund支持 专注于区块链的开发者社区,组织过60+线下技术沙龙,3场黑客马拉松,100+篇区块链技术文章。 橙皮书 橙皮书为区块链创造者和专业投资者提供内容服务。如果你希望在区块链世界里创造有价值的新事物,或者捕捉到有价值的投资标的,欢迎关注橙皮书。 Nervosfans...

Read More
2019-02-28

Nervos CKB区块链中的一等资产

文中提到的下面一些词,中英文是等价的: state:状态 asset:资产 First-class:一等 Account:账户 从一等函数到一等资产 一等函数(First-class Function):函数编程中,函数可以赋值给一个变量,可以当做参数传递给另外一个函数,也可以从一个函数当做返回值返回。这时候函数和数据也没什么区别,所以我们叫它“一等公民(First-class Citizen)”。这样的函数就是一等函数。 CKB的Cell模型用来构建整个区块链的状态,Cell模型的设计是和目前区块链都不同的一种设计模式,从这个模式中,用户定义的加密资产就像“一等公民”一样。后面我们一步步详细解释。 状态模型 在解释CKB的状态模型前,有必要先了解目前常见的两种状态模型: UTXO 模型 Account 模型...

Read More
2019-01-12

第三期blockchain coding day活动,你来参加么

题图:第二次BCD活动集体照片 上个月,已经是去年了,12月23日第二次BCD活动举办完,第三次活动姗姗来迟。这个月大家都比较忙,没定下来什么时候举办这次活动。 陆续有几个朋友问到:什么时候举行下一次活动啊? 我们定下了时间:2019年1月20号 下午1:00 ~ 下午6:00 地点:北京海淀中关村南二条一号九章大厦B座三层 如何参与: 此次活动为免费活动,为了保证参与质量与人数,需要先交20元报名费,当天参加活动后会退还。如未参与活动,押金将不退还。 提交报名申请后:  1. 扫下方二维码添加管理员微信,添加好友时请注明 ”BCD”  2. 微信转账20元报名费给管理员 ...

Read More
2018-12-07

智能合约 | 如何调试Solidity

对于一个新手来说,ta的Aha时刻来自于ta终于可以运行自己的第一行代码,我还记得我当年写的可以运行的“烂代码”的兴奋时刻。而当我利用自己的编程技能找到工作时,其中的一个Aha时刻来自于我学会了如何调试程序。调试程序占用工作的时间有时候会达到50%,面对着一堆代码逻辑就是不知道问题在哪里。而当我掌握了如何利用断点查看当前的变量和状态后,我的工作效率提升了一倍,bug变少了,幸福感提升了。 调试Solidity有一个很好的工具:Remix,通过这个链接可以进入到Remix的网站:http://remix.ethereum.org 。 代码编辑 之后我们可以把Solidity代码放到编辑器中,上图中可以看到最左侧的行数旁边有警告/错误提示,把鼠标放到上面会有具体的信息提示,根据提示修改代码就可以消除错误信息了。修改后的示例代码可以在这里获取:https://gist.github.com/luckyyang/8edc58ad647f35424823448ea4404f8d 。 合约编译 之后我们可以选择对应的编译器版本,示例代码中的版本是0.4.25,然后就可以编译了,看到绿色的提示表明编译成功。编译的主要工作是生成ABI和bytecode,本文不做阐述。 合约部署 编译成功后,就可以切换到Run标签进行合约的部署了,这里我们可以选择Environment为JavaScript VM,直接在浏览器中运行一个虚拟的区块链网络,这样就不用我们使用Mist和ganache-cli这类的工具再去运行区块链网络了。 如上图所示,选择JavaScript VM后,会自动帮我们生成5个Account,每个Account中有100个Ether,足够我们开发使用了。 如上图所示,点击Deploy按钮后就可以部署合约了,部署成功后会自动显示合约的信息。点击合约会显示所有的变量和方法。 合约交互 如上图所示,红色表示此类方法会修改合约的状态,也表明了需要消耗gas;青色表示此类方法的作用是获取信息,不会修改合约的状态。点击具体的方法名字就可以和合约进行交互了。 合约调试 如上图所示,同时与合约交互的transaction也会显示到代码区下面的区域。点击Debug按钮会跳转到Debugger界面(下图),不但可以进行单步调试,还可以看到合约中更具体的信息,如变量和合约状态等。...

Read More
2018-12-04

以太坊智能合约与逆波兰表达式

想必大家对 1+1,3-4,5*6, 8/4,(1+6)*9,1+6*7,这些简单的数学四则运算都不陌生,有时候遇到买菜大姐, 这些菜称称,一共多少钱啊? 8块,给10块,哎这还有3块,找个儿整。人民群众喜闻乐见,耳熟能详的四则运算,有个高级的称呼中缀表达式。   为什么是中缀,而不是前缀、后缀、上缀、下缀? 中缀因为操作符都在中间位置,那能放到后面去么?当然可以了。 这种把操作符置后的方式叫逆波兰表达式,即 RPN,更通俗的叫法是后缀表达式。 中缀表达式怎么和后缀表达式对应呢? 后缀表达式有什么优点? 相较于前缀表达式更易于转换,最左边一定为运算资源。 不用括号,依靠运算顺序就能确定运算符的优先级,运算更简洁。 更符合计算机的计算方式。计算机通过从左至右读取后缀表达式,就可以将遇到的运算对象压入栈,在遇到运算符时就弹出运算资源,完成计算,再将结果压入栈。最后留在栈中的就是计算结果。 来点小例子,展示后缀表达式的方便与神奇。...

Read More