TeaHour_ETH笔记

听了Terry Tai 和 Jan Xie 两位大神的 TeaHour 电台里谈到ethereum, 受益良多.
这篇文章算是自己的笔记, 边听边记吧. 再自行整理的 🙂

下面把内容的链接放出来

这次我们聊聊超酷的Ethereum

语录:

ruby – 参差多态才是幸福的本源

有屠龙刀, 没有龙

大神做的事情,不一定适合众生

区块链杂谈

自从比特币掀起了区块链的浪潮, 也得益于其代码的开源性质, 所以各种各样的币也就横空出世, 比如

  • 优化加密算法(scrypt)和出块速度的 LTC
  • 主打加密匿踪的 ZEC
  • 社区支持的DASH
  • etc….

这一类基于比特币思想, 再加上特定的其他特性(feature)的币 , 就统统称为Copycat coin (山寨币)
但是, 实际上这些种类的数字货币是不具有图灵完备.
以上就是我们的区块链1.0时代

现在的Ethereum

Ethereum的横空出世

以太坊是 Vitalik (当时才18岁, 天才骚年!) 提出, 并设计架构的一个区块链系统, 这个系统具有准图灵完备性(最近才支持循环).

这个项目也是个众筹项目, 众筹当时是众筹了30K个BTC, 折合成当时的币价的话大约 有一千八百万刀, 也正是这个项目的亮眼之处吸引了众多的投资者, 因为它力在搭建一个 platform 而不是基于BTC进行fork的另外的一种币而已.

Vitalik Buterin

Vitalik 其人, 据说是一周读两本书的, 主要是使用python进行开发, 可是这样的一个大神据说搞不定装 ARCH

BTC 的是采用的CPP进行的开发. ETH则是采用了go/python/C++ , 这三种语言开发了三个独立可用的节点应用(Jan吐槽:有钱..), 不过现在CPP的项目组已经退出了以太坊基金会了, 转而进行基于ETH的私链开发咨询.

ETH之所以选择了go,由于其强大的网络功能和与生俱来的并行特性

GAS的作用

ETH的网络上存在着GAS这一东西, 顾名思义是汽油, 也就是在以太坊网络上计算所需要消耗的东西

停机定理(halting problem)

证明一个程序能不能终止, 是不可能的 – Turing
停机问题 是个逻辑学和数学的问题,

参考文章:

如何通俗地解释停机问题

所以在以太坊这个平台上,为了防止恶意行为阻塞网络, 比如一个死循环.

工程师和科学家的思想就从现在体现出来了, 防止网络堵塞问题,如果数学上, 只能去解决这个停机问题. 但是工程上呢, 机智的添加了gas这个东西.

GAS 和以太币是两个东西, 以太币和gas有一个汇率.

为了使得计算的成本不随着币价波动,GAS作为中介把运行成本和以太币价格解耦 ,( 保证计算消耗和法币是对等的), 最后也是被矿工收走.

所以这样, 随着计算的进行, gas被消耗掉, 如果程序过于复杂, 或者是死循环, 那么就会抛出一个 OUT of GAS的异常, 并且回滚所有的数据改变

很机智的绕过了停机问题, 精妙!

Solidity 语言

Solidity 是一种类似于 JavaScript的语言 , 虽说语法想像, 可是写起来的感觉是完全不像的.

现在问题还是有待解决的, 比如: 返回值难得到, 返回变长数组, 循环支持(现在已经有了)

所以实际上Solidity的vers 只是算得上 零点几吧, 算得上是一个alpha (现在可能是beta了吧)

分布式数据库

如果一个区块链应用, 从架构上可以直接把数据库替换成区块链, 理论上理解就是这么简单

可以直接使用 client 对区块链进行操作.

比如这里有个论坛, 论坛使用 js 来进行区块链的读写, 当我们跑起自己的节点的时候相当于每人都有自己的一个网站

正如 sql 和数据库沟通, json rpc 可以控制节点

异步问题.

由于区块链的POW的共识机制, 现在如果我要把a = 1, 可是必须要等到矿工挖到块之后, 才会计算(给a赋值), 还需要一定的时间广播到全网, 过程是十分的异步

EVM的计算

####计算过程

使用Solidity 写一个合约, 相当于一个 class , 可以调用 json rpc , 编译成opcode, 在evm 上运行…

出块时间

  • BTC时间

    在BTC的网络是 10分钟出块, 60分钟 6 次确认. 所以我们一次交易得到处理的时间是十分钟, 完全放心就是一个小时了. 所以这个是还是相当久的

  • ETH时间

    在以太坊上的话, 是有所提速的,由于在网络传播的速度是有限的, 所以对共识的时间有很大的影响.

    如果高峰时间, 会出现了分叉, (同时挖出). eth 出块时间短了, 导致了分叉的很多, 出块的时间, 基本是15S 出块(单机测试是5S),这样的分叉出块, 被称为uncle(叔块)

参考文章:

以太坊中的叔块(Uncle Block)

ETH目前面临的问题

共识机制

dapp都是运行在EVM虚拟机上的, 使用pow , 虽然确认时间缩短 , 可是还是需要几分钟才能得到若干个确认,因为在POW的机制下的电脑一起做运算, 采取谁解出了这个块, 那么就采用谁的, 其他的全部从新开始, 其实这样就是单台电脑的计算能力了,

ETH之前决定使用Pos 可是实现过程受阻(deadline),为了尽快的实现这个plafrom ,所以先使用pow

ETH基金会承诺以后后会实现PoS的共识机制, 所以这点也很有意思的导致了eth 是没有矿机的, 因为害怕Pos转型, 这样矿机就一文不值了呀

方案

  • 新的共识机制

    以太坊 最后会实现Casper 作为新的共识协议, 其中有验证人节点, 交了押金作为一个可信对象, 如果说交易验证通过(是正确的块)的话, 使用自己的私钥对这个区块进行签名, 之后在全网得到共识, 这样是可以实现秒级的确认.

  • 网络分片(shard)

    defcon 上 的方法, 就是对eth的网络, 进行网络分片.不同的合约类型, 放在不同的网络片上,虽然说挖矿这种方式是为了实现一种网络信任, 不过还是有一定的优化空间, 动态网络分片 2^16 个shard(分片)

隐私问题

由于当前区块链技术网络上所有的数据都是透明的, 每个区块数据,都是可见的. 所以隐私问题是值得关注的一点

方案

采用同态加密技术
引用百科对于同态加密的定义

对经过同态加密的数据进行处理得到一个输出,将这一输出进行解密,其结果与用同一方法处理未加密的原始数据得到的输出结果是一样的。

参考文章:

同态加密的实现原理

伸缩性问题

早期的比特币是没有区块容量限制的, (一个区块就是十分钟里的所有链上数据的打包), 这样导致了一个交易被恶意的加入了大量的无用数据, 这样会白白牺牲节点的硬盘空间. 所以后面中本聪(Satoshi Nakamoto), 加入了1MB的区块大小限制, 并且也制订了后面的增长.

这1MB的区块容量也决定了, 区块的最大交易处理速度. 关联过程如下:

TPS = BlockSize / TxSize / (10 * 60)

一般的一次转账交易的数据大小是250B左右(BTC), 这样得到最后结果 TPS = 6Tx/s

所有由此见到区块小了, 网络速度就下降. 可是如果区块足够大, 又存在着节点空间的问题, 间接导致了比特币的中心化. 历史上关于比特币的扩容问题, 十分的激烈, 隔离见证, 闪电网络.

由于共识机制的存在 , 算力份额相当于手上的票一样 , 就是在矿工手上, 更明确的说, 是在矿池 , 和矿老板的手上 , 可是他们的目光只是保证自己的收入稳定, 这些观点往往和开发者是冲突的. 所以引起了扩容战争.

还有一件引人注意的事情,

比特币核心开发者Mike Hearn发表文章称比特币实验失败了,指出它被中国控制了,他宣布退出比特币项目,卖掉所有的币。Mike Hearn说,他很早就告诫其他人,比特币是一个实验,和所有实验一样,都可能会失败,如果不能承担损失不要去投资。但得出比特币已经失败的结论时,他仍然很伤感。比特币的基础已经破坏,不管短期的价格如何变化,它的长期趋势将是下滑。

以下来自博客翻译:
为什么比特币失败了?因为社区垮掉了。这个所谓的去中心化数字货币系统被少数人掌控,更糟糕的是,整个网络正处于技术崩溃的边缘。比特币不再好于现有的商业支付系统,它的手续费甚至超过了信用卡的交易费。他说,最根本的原因是中国的矿工控制了比特币,仅仅两个矿池的算力就超过整个比特币网络的50%。超过95%的算力控制在上面这幅图中的人手中。这些矿工不再允许块链增长。他们拒绝对比特币软件进行必要的修改,他们担心如果比特币太流行的话会被防火长城盯上,屏蔽掉比特币网络,导致他们失去收入。为了改进交易速度,增加区块大小,比特币社区去年就创建新分支举行投票,投票的方式是运行名为比特币XT的挖矿软件。比特币XT与现在的比特币核心挖矿软件没有区别,但是当有75%的节点运行XT,分支将会正式创建。但比特币XT引发了控制者们的强烈反对,比特币最大论坛http://bitcoin.org的管理员以缺乏民主为由封杀了比特币XT的讨论。更恶劣的是,当比特币XT节点占到总节点的15%时,XT用户遭到了大规模DDoS攻击,大到足以瘫痪矿工所在ISP的整个网络。这一信息很明确,任何支持大区块的人都会遭到攻击。攻击还在继续,创业公司Coinbase宣布支持XT时他们被攻击而下线了一段时间。他声称,比特币航行到了一个极端危险的水域,与 Mt Gox破产危机不同,这一次的危机发生在核心系统。他最后祝所有的人好运

参考文章:

比特币扩容之战

为什么比特币硬分叉不会分裂成两个币

比特币实验失败了?

存储问题

区块链在现在的阶段, 智能存储小量数据, 如果打算在上面存一部电影,当前还是无法实现的. 所以现在的发展趋势之一就是添加区块链的存储层的解决方案

在当前的众多区块链项目中, 不乏分布式存储的项目, 如下有:

  • IPFS (没有经济激励)
    Swarm (添加了IPFS的经济激励)
  • Sia
  • storJ

上面这几项, 经过几年的发展基本上是可以用的程度了

问题

过度依赖于经济激励, 而不是算法上解决的, 经济激励不是最logic的方式. 但是呢, 这些项目又是不具有图灵完整的,所以与ETH整合才是王道

理应使用算法优先吧 2333

以太坊的部分Q&A

公链和私链的区别

Public chain 和 private chain, 主要的区别在于 参与共识过程的人是否有准入门槛
联盟链, 多个地方一起跑起进行一个区块链的维护. 联盟链的应用, 很好的适用于银行, 这样数据库公有, 特别是跨行转账
联盟链特定用于解决了 : 审计方面的痛点, 事实上金融业早都在研究区块链了!

自己搭建btc/eth的私链

由于Pow的共识机制, 主要用于解决公网上的共识问题,拜占庭将军问题. 避免网络上出现了大量的恶意节点对网络发起了攻击(女妖攻击) ,

如果现在我们到了私有网络, 就没有必要使用POW机制了, 否则这个机制就是解决了一个本来就不存在的问题. 所以可以把共识机制, 改为其他的拜占庭容错. 这样也可以得到更快的出块速度

这些项目到底是什么?

区块链 可以被认为是一个可信数据库, 以太坊是基于区块链技术的EVM 实现了可信计算
94年互联网,就是现在的区块链!!!

区块链只是使用P2P下载账本? 其实不然, 不然,忽略了很多东西,

借助微博上的一句话:

你们知道比特币、以太坊、亦来云的区别吗?

  • 比特币=可信记账;
  • 以太坊=可信记账+可信计算;
  • 亦来云=可信记账+可信计算+可信应用环境;

很多人认为区块链的项目还是国外的靠谱,其实中国在区块链方面已走在世界的前列,比如亦来云就是最典型的例子。

这里也算是自己了解到了亦来云这个项目 , 这个说实话 需要好好关注一下.

与其类似的还有一个叫做基石的国外项目,(国人在币交易市场上叱咤, 导致现在这个项目是需要KYC(know your customer)了, 结果现在国人连公募资格都批不了了!!!ƒk), 这个项目几个小时就筹齐了!!

项目地址:

基石项目

亦来云项目

区块链和分布式数据库的区别

传统的分布式数据库, 如何可以并行的写?

由交易方发起交易请求,BC 可以做到选择交易和交易排序, 这样就在节点可以解决数据冲突,和消除错误虚假数据.
这样就不是, 由用户直接操作数据, 重要的达到可信.

这样想, 分布式的数据库, 有数据库本体, 和用户, 这两部分, 用户写入, 数据库存储.但是区块链, 更是一个体系! 用户发送交易请求, 开发负责网络的应用部署, 矿工来实现计算和合法性校验

ETH的未来展望

设想

目前有三个层面的设想, 金融, 存储, 和物联网

电子证据保全, 使用区块链的存储功能. 基于区块链交易所, 保证交易过程的完全可信

(三全分立! , 用户交易, 你的程序, 在节点执行)

由于现在的区块链的储存能力, 计算能力还不强.所以, 这两个方面还是有很长的路要走, 但是现在的功能已经和金融有了很好的适用, 金融的本身就是小数字和计算

金融:

使用去中心化的思想实现一个稳定的货币,
差价合约, A和B都在一个合约里面放1K个ETH, (假定当前币价是10) 一个月后拿出, A就得到10K等价的ETH(以现在的法币价), B得到剩下的那一部分, 所以这样A 得到了一个价格稳定的币价保证.这合约很好解决.
但是问题是, 我的智能合约在EVM中运行, 和外界的数据是没有联系的, 也就没办法得到当前的币价, 所以需要一个角色来输入ETH的当前的币价, 但是这样就无法保证这个角色的可信.

Vitalik 就提出了一个概念,

在博弈里面 (common knowledge)公有知识是很重要的,

两个人去纽约, 没有对方的信息,而要会面,怎么办?? 很大的可能,大家会在自由女神像会面,这个就是体现了(common knowledge)公有知识的力量

你是这样想,你相信想另一个人会这样想, 你相信另外一个人会相信你会这么想,无穷的递归

这个其实也是POW 的博弈原理, POW的挖矿

如何使用公有知识, 实现可信的链外输入.

博弈原理: 例子: 如果有 1000 个人, 每个人写下币价, 如果在25%-75% 范围以外的人, 会有惩罚, 人们互相是不知道别人的价格, 所以最后,会靠近最正确的,(这就是common knowledge), 也就是囚徒问题的变种.

物联网应用

区块链在物联网方向是有很美好前景的, 之前就有过 IBM和Sumsung 的合作, 曾经使用基于以太坊的demo, (Adept)
Adept项目地址

因为区块链上很自然的有价值和所有权的转移, 所有可以很好的保证物品之间的经济行为. 使用区块链登记物品所有权换转移, 比如出租.

有个项目, Slock是基于以太坊的行为, 把物联网,共享经济和区块链相结合起来, 就是把物联网抽象为一把锁(真实世界的锁), 锁的所有权可以在区块链上面进行转移. 这样就可以通过合约实现一个 临时的所有权转让,
Slock项目地址

现在已经有物联网的锁了, 但是这样通过中心化的第三方, 这样就不能确认是不作恶的. 所有如果放在区块链上就得到了很好的信任解决

很多人并不介意 中心化的架构, 区块链的引用不能破坏 当前的中心化体验

现在比如基于BC的物理 和 产品溯源

有趣的应用

庞氏骗局网站

这个就厉害了, 项目名就是庞氏骗局, 而且就是一个庞氏骗局…明文写着, 把后面人的钱分给前面加入的人, 很多人参入的!
其实我想通了一个事情, 传销的人知道这是传销, 但是总是幻想自己不是那个最底层的韭菜, 大家其实知道这是传销, 无所谓~

百万格子

传奇项目百万格子

这些人不得不服, 实话

区块链随机数

区块链上很难产生一个随机数, 如果我们使用POW的X ,
RANDAO

区块链定时问题

定时任务以太坊网络其实是一个, 是一个状态机, 给了event 然后做出反应, 所有区块链上需要一个合约, 或者DAO
Aalarm Clock 现在区块链相当于上世纪的互联网(九十年代)

着手

学习以太坊的智能合约的开发
把bug说成feature

结语

这次teahour的内容真是受益匪浅, 通过这篇学习记录越来越坚信, 坚信区块链有一个光芒的未来

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注