Harry

2019-01-23

Blockchain Coding Day 3rd 活动精彩回顾

Nervos北京社区于本月20日在北京九章大厦举办了第三次线下活动。我们将把BCD(Blockchain coding day)活动一直推行下去,从而让更多人了解区块链技术。 虽然将近年关,但是还是有许多朋友来参与此次活动,着实感动。   破冰环节 首先由刘吉洋介绍了这次活动的目的,是为了让更多人了解区块链技术,了解Nervos; 也介绍了Nervos北京社区的由来和未来的一些计划,BCD活动每个月都会举办,也会进行更多有益的尝试。参与活动的朋友都分别做了自我介绍。 这次活动有中科院计算所研究区块链的妹子,有从内蒙古坐十几个小时火车赶来的银监局的公务员,有加班到凌晨七点最后也辛苦赶来的妹子,还有多次支持我们活动的周河教练,HiBlock社区的组织者,也是Nervos北京的组织者Bob 也给大家热情的介绍自己当初如何学习区块链知识,有大家的支持和参与,相信我们会越来越好。 本次教练: 参与者: 杨占坤、张国强、谭洪超、张兴泽、刘艳安、王恩凯、比特迷、陈双江、Jerry、Bob、刘一、张磊、梓翎 等 (部分参加活动的朋友,拍照者是梓翎)   分享环节...

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
2018-12-02

[视频文字稿大纲] 手把手教你开发DApp

我们在11月25日举行了第一场Blockchain Coding Day活动,活动内容是教大家写一个简单的Dapp。针对线下活动遇到的问题,特意在B站发布了一个视频,方便大家进行回顾。 视频链接:https://www.bilibili.com/video/av37213922/,时长18分钟。 视频内容分以下部分: 下载源码并安装依赖 替换地址 通过测试网的水龙头充值 替换abi与bytecode 部署合约 运行Dapp 部署到腾讯云 在上次活动中遇到的一个很棘手的问题是操作系统。 大家有用Window的,也有直接使用Linux的Ubunut,还有使用Mac的。因为Node.js某些类库依赖C++,本地编译需要安装node-gyp,node-gyp在纯windown环境安装非常麻烦。 我们不推荐Window, 可以使用虚拟机在Window系统中安装一个Linux的Ubunut系统,...

Read More
2018-11-26

Blockchain Coding Day活动精彩回顾

Blockchain Coding Day于2018年11月25日顺利举办,本次活动由Nervos北京社区主办,星群加速器、HAOQICAT.COM、HIBLOCK和小芦蜂联合主办。 活动的目标是希望通过一天的沉浸式的编程体验,让参与者学习到DApp开发的流程和编程的乐趣。活动的形式是随机的方式分成多个小组,每个小组由一个教练带领,根据Peter老师的DApp开发教程《基于 Nervos AppChain 的 DApp 开发》来一起学习,最终开发出一个属于自己的DApp。没有到现场的小伙伴也可以自学,课程链接为 https://learning.nervos.org/nerv-first 。 通过这次学习,大家学到了如何使用代码编辑器编写智能合约;然后学会了通过调试工具Remix编译合约,将合约编译成bytecode 和ABI,bytecode会被放到区块链上,是EVM执行所用到的,ABI(Application Binary Interface)用来告诉代码如何使用合约中的函数;然后大家学会了如何把合约部署到Nervos的Appchain上;最后大家学会了如何使用React编写前端页面,与智能合约交互,并显示结果在页面上。 下午Peter老师给大家做了一个light...

Read More
2018-11-23

种类繁多的比特币地址

在之前的一篇文章中,我们介绍了比特币地址的生成过程,分为了8个步骤,不知道大家有没有动手试试呢?自己就可以在离线环境中生成非常多的冷钱包地址,前提是你有非常多的比特币需要自己保存。壕,交个朋友吧。 其中有个细节,我们在计算完Hash160的结果后, 第四步的操作是加上主网的前缀符 00,大家对这个操作有很多疑问,这个前缀符有什么用?其实比特币的地址类型有很多种,不同类型的地址应用于不同的场景,如何区分呢,自然就是前缀符了。   P2PKH类型的地址最常用,比特币网络的很多地址是这种。可用于转账、发账, 支持最最常用的操作,安安静静,低调内敛。 P2SH类型的地址支持多重签名。 什么是多重签名呢? 假设3个人管理一个基金会的比特币账户,规定至少2个人同意的时候才能动用,我们就可以做一个3-2签名的多重签名,也可以做5-3签名的,5个人中只要有3个同意,就可以动用。其实还可以做5-5签名,只有5个人都同意了,才能动用,绝对的民煮。交易所的冷钱包往往都是多重签名地址,利于分权,其实也降低了风险。 以太坊的多重签名,需要编写智能合约,虽然有些麻烦,但能进行更细致的分配。 Testnet类型的地址,这个很好理解,软件工程中常常有测试环境,区块链也分为主网、测试网,主网是我们在使用的真正的转账网络,测试网主要用于测试,我们可以获取一定数量的测试币,进行调试,而不用花费真金白银,也能提前发现bug,是不是很像游戏的不删档内测。 下图是同一个私钥,生成的不同类型地址,这3个地址都是34位长度,由于大小写字体的字宽问题,在视觉上长度不一致。 以太坊的地址比较统一,主网地址,测试网地址都是同一个类型的。 最近很吸引眼球的吴比特币、澳比特币分叉事件,闹得鸡飞狗跳,吴比特币的前身BCH地址跟比特币地址差异很大,其实他们是能互相转换的,为什么呢?因为有相同的hash160, 地址只是一种方便人可读的呈现方式。欲要分叉,先改其地址 …… ...

Read More
2018-11-21

Nervos 如何支撑加密经济?

以前 Peter 提过,搞区块链的人们其实真正想要的是加密经济。但是对于如何更好的去支撑加密经济,不同的团队有不同的理解,所以各个区块链团队的技术架构也非常的不同。2018年11月,我参加了 Nervos 的 Meetup ,会上 Nervos CTO Jan 同学分享了 Nervos 的思路。演讲的完整视频在:https://www.youtube.com/watch?v=f2Gk64UpgD8 ,我这里的内容,是对演讲中 Nervos 宏观运行方式的整理,刻意的简化了一些技术细节的讨论,略去了一些术语,保证没有区块链和密码学基础的读者也能迅速看懂。 分层架构...

Read More
2018-11-13

使用代码生成比特币地址

手动生成Bitcoin地址 看似有点儿事倍功半,如果你了解了这个过程,就会明白眼花缭乱的Bitcoin分叉币 地址只是私钥的不同显示方式,对了解Eth EOS地址也很有帮助,也可以更清楚的了解Bitcoin是如何花费的,一通则百通,妙哉。 生成Bitcoin地址,先由私钥生成公钥,再有公钥生成hash160,最后hash160再进行base58运算得到地址,如下图所示: 生成私钥,再得到公钥,是由ECDSA实现的。ECDSA是Elliptic Curve Digital Signature Algorithm的缩写, 即椭圆曲线数字签名算法。 椭圆曲线其实不是椭圆,而是下面的模样: 那我们言归正传,直接进入主题,我把这个过程分成了8个步骤。 Step1. 生成私钥 Bitcoin要使用到Secp256k1这条特殊的椭圆曲线得到公私钥,我们通过OpenSSL命令来生成私钥。 openssl ecparam -name secp256k1 -genkey > priv.pem# DER格式openssl ec -in priv.pem -outform DER | tail -c +8 | head -c 32 | xxd -p -c 32# 输出read EC keywriting EC keyccea9c5a20e2b78c2e0fbdd8ae2d2b67e6b1894ccb7a55fc1de08bd53994ea64 得到秘钥文件priv.pem,输出DER格式,长度是...

Read More
2018-11-09

[转载] 货币、区块链和社会扩展性

比特币成功的秘诀在于:用大量的资源消耗和差劲的计算扩展性来换取更有价值的东西——社会扩展性。由于近几十年来信息技术的巨大进步,限制网络组织参与人数和类型的已经不再是计算机和网络,而是还没有充分跟上技术进步的人类思维和制度设计。区块链技术,通过计算机科学来实现数据完整性,使得迄今为止信任成本最小的货币(加密货币)成为可能,它也必然为其他金融领域以及主要基于在线数据进行交易的场景带来进步。(这是一份干货十足的文章,我们为大家翻译了一个更好的版本,enjoy~ 原文作者:Nick Szabo 原文链接:http://unenumerated.blogspot.com/2017/02/money-blockchains-and-social-scalability.html  译者:Jan, Joey 小编内心戏:人类的进步基本靠组织能力的衡量的,组织能力的大幅提高大多数是靠技术进步实现的。区块链技术通过数据共识的方式,使人类建立起更强大,更普遍的认知。 技术的进步,制度的进化,让人类从蛮荒时代过度到部落,再建立国家政体,团结了越来越多的人,人类共识的范围也从几百人的部落扩大到几亿人的国家。遥想未来,国家的形态也会慢慢消失,之后人类有一个共同的身份认知:地球人,我们的目标是:星辰大海。 未来的大同世界,货币都不统一,怎么干翻外星人,怎么走出地球这个摇篮呢? 最近读了大刘的小说,中二病又严重了,嘤嘤~ 介绍 当下,区块链风头正盛。比特币是其中最大、运行时间最长的区块链。直到今天,在它迄今为止的八年发展史中(原文写于2017年2月9号),比特币从 10,000 个币买一块披萨的价值(在交易所用传统货币给比特币定价之前)上涨到每个比特币值 1,000 美元以上。在撰写本文时,比特币的市值已超过...

Read More
2018-11-05

以太坊的 Gas 机制

以太坊对智能合约的影响是深刻的,即使不用以太坊,只要做智能合约开发,就避免不了要学一下以太坊。而学习以太坊的第一天就肯定会碰到的概念就是 Gas ,这个就是咱们今天的主角,理解了 Gas 机制也就基本理解的智能合约的工作原理了。文章中首先介绍以太坊的账户和交易,以便介绍清楚智能合约工作的基本上下文,或者说让大家理解 Gas 使用的场景,接下来聊聊 Gas 的工作原理,让大家理解为啥已经有了以太币还要有 Gas ,最后深入到细节聊聊 gasPrice 和 gasLimit 这些交易参数的实际作用。 账户和交易...

Read More
2018-11-01

密码学 | 区块链上的随机数

这集来聊随机性。随机性要保证的是机会均等,而只要机会均等,区块链上恶人就没有空子可钻,就可以达成真正的共识。所以有两点是非常明确的,第一,实现随机性非常重要,只要有随机就有共识。第二,真正去中心化环境下实现随机是非常困难的,以至于到目前为止,Peter 认为真正被验证过的可行方案只有一种,就是 POW 。 什么是随机? 有必要抛开区块链,先给随机性( Randomness ) 一个非常清晰的定义。 首先,要保证不可以预测性。比如掷骰子,不管你看我掷了多少次,下一次的结果,依然是完全没办法猜到的。不可预测性,肯定是随机的一个必要条件。 其次,要保证没有规律。只有不可预测,是不能保证随机性的。比如现在我同时掷两个骰子,最后要两个数之和。这个和肯定是不可预测的,但是和为7要比和为2的概率大很多倍,所以这也不是随机。 总之,随机性要同时保证不可预测和无规律,最终目的保证的是机会均等。没有任何人为耍花招的余地。 产生随机数的方式 随机的概念说完了,下面来看看产生随机数的方式。 首先说真随机这个概念。自然界有些事情是人类尚未找到任何规律的,例如大气噪声,量子活动,这些都可以作为真随机数的来源。有人会抬杠说,这些底层不一定没规律啊,只是我们还没找到而已,所以不能叫真随机。这个说法不是没道理,但是这些数据起码目前可以在人类社会能够保证机会公平的,所以我们认为是真随机的。 但是程序世界里面,只有伪随机,没有真随机的。计算机上随机数如何去生成呢?首先程序会去采集一些硬件噪声,注意,这些是来自真实世界的真随机数。程序中去生成随机数是通过伪随机数生成器,说白了就是一套算法。算法基于之前采集到的真随机数来做初始化,所以这些真随机数就被叫做随机种子。算法的输出是很多伪随机数,之所以说是伪随机数,是因为它们是完全是由种子决定的。...

Read More
2018-10-29

Nervos解读 | 信任自动化系统 CITA

CITA 的全称是 Cryptape Inter-enterprise Trust Automation,翻译过来就是“秘猿企业间信任自动化系统”。 Cryptape 是一家公司,中文名是秘猿科技。本文是 CITA 的一个入门简介。 何为信任自动化系统 CITA 号称企业间信任自动化系统。咱们先来解释一下什么是信任自动化。 首先说什么是信任。我们生活中的信任通常是褒义词,例如,我们应该信任我们的朋友。但是在区块链和密码学领域,信任是一个负面的意思。比如,你跟我说你有三根白菜要换我的一根萝卜。有两种方法可以达成交易,一种是白菜萝卜都摆在当场,直接交换,这种过程显然是不需要信任的。但是另外一种方式是,我信任你,先把萝卜给你,回头你再把白菜给我捎过来。通过这个例子,我们可以看到,什么叫做信任?信任就是在我选择相信那些自己没办法验证的数据。可见,信任是一个安全漏洞。 而区块链给大家带来的是“去信任化”,或者说,区块链保证的是交易各方共享数据,只要有完备可信的数据在,交易过程就不需要信任了。而 CITA...

Read More
2018-10-27

Nervos北京社区布道者培训精彩回顾

上周末,Nervos北京社区举办了首次布道者培训,邀请到了风静縠纹平老司机和Peter老师带来了精彩分享。 风静縠纹平@简书: Github:Rivers Yang(riversyang) 资深程序员,有十七年的软件行业从业经验;目前专注于区块链技术布道、中文技术社区贡献以及智能合约开发和安全审计方向。 第一部分: 以太坊是一个由交易所驱动的状态机,以区块为单位来记录“世界状态”的变动;可以简单地理解为“区块链 + EVM”。 以太坊的基础数据结构包含账户状态、交易、收据和区块,以及全局的状态树、存储树和区块级的交易树、收据树。 智能合约的本质是“自主对象(Autonomous Object)”。 以太坊中的所有交易和其关联代码的执行,都是在所有“矿工”以及全节点上分别运行的,据此来更新它们各自维护的“世界状态”,在网络节点间传输的只有区块数据。 以太坊虚拟机是基于“栈”的“准”图灵机,有自己的临时存储和永久存储机制,有自己的完整指令设计,它是以太坊的核心组件。 第二部分: ABI...

Read More