以太坊

以太坊不同于比特币,是一个图灵完备的系统

为了解决什么问题?

当时,人们已经意识到了比特币背后这套体系的能力,并尝试在数字货币技术的基础上推广到更广泛的应用领域。但是开发者面临着一个难题:他们要么在比特币的大厦上添砖加瓦,要么就需要从头开始实现一个新的区块链。在比特币基础上构建意味着必须接受比特币网络的种种限制,并尝试找到解决办法。比特币对数据存储的类型和规模有特殊的要求,这些要求限制了在比特币之上作为第二层解决方案可以运行的应用的类型。 程序员所构建的应用只能建立在这些有限的变量、交易类型和数据之上,无法发挥公共区块链的众多优势。对于需要更多自由度和更复杂的应用,从头开始实现一个新的区块链是唯一的选择。但是从头开始实现一个新的区块链也意味着需要在基础架构、测试等领域白手起家。

历史

  • 2013 年 10 月,Vitalik Buterin 向 Mastercoin 团队提出了一个更具通用性的想法——可以用于替代 Mastercoin 专用合约语言的更灵活和脚本化(但还不是图灵完备)的合约机制。
  • 2013 年 12 月,Vitalik 分享了一份白皮书,这份白皮书勾勒了以太坊背后的思想:一个图灵完备的通用目的的区块链。一些人阅读了白皮书并给 Vitalik 发回了反馈,帮助他逐步地完善这个想法。
  • 2015 年 7 月 30 日,第一个以太坊区块被挖矿成功。“世界计算机”开始为全世界提供服务。
  • 以太坊开启了通用目的区块链用于构建多种应用的道路。很快,以太坊的愿景扩展为用于去中心化应用(DApp)的编程平台。DApp 代表了更为广泛的“智能合约”。

Vitalik Buterin 在 2017 年 9 月撰写了一篇名为《以太坊史前回忆》的文章,以第一人称描述了以太坊早期发展的精彩历程。你可以在这里阅读这篇文章:《以太坊史前回忆》

以太坊的组件

前文“区块链的组件”中所描述的内容,在以太坊中所对应的组件如下:

  • 点对点(P2P):网络以太坊运行在 Ethereum Main Network 上,这是一个通过 TCP 30303 端口寻址的网络,网络层运行的协议名为-D ΞVp2p。
  • 共识规则 : 以太坊的共识规则,由以太坊黄皮书(见后文中的“扩展阅读”)中的参考标准进行精确定义。
  • 交易:以太坊交易是一个网络消息,主要包含交易的发送方、接收方、价值和数据载荷。
  • 状态机:以太坊的状态转换由以太坊虚拟机(EVM)处理,这是一个基于栈的虚拟机,执行 bytecode(字节码指令)。被称为“智能合约”的 EVM 程序采用高级语言(例如 Solidity)编写,并编译为通过 EVM 执行的字节码。
  • 数据结构:以太坊的区块链以数据库(通常采用 Google 的 LevelDB)的方式保存在每一个节点之上,区块链内包含了交易和系统的状态,经过哈希处理的数据保存在 Merkle Patricia Tree 数据结构之内。
  • 共识算法:以太坊使用比特币的共识模型 Nakamoto Consensus,它使用顺序单一签名块,由 PoW 加权重要性来确定最长链,从而确定当前状态。但是,有计划在不久的将来转向代号为 Casper 的 PoS 加权投票系统。
  • 经济安全性:以太坊当前使用名为 Ethash 的工作量证明算法,这个算法迟早将被放弃,并切换到 PoS。
  • 客户端 :以太坊有多个可以互相交互的客户端软件实现,其中最广泛使用的是 Go-Ethereum(Geth)和 Parity。

遇到的问题

图灵完备中遇到 DDos 攻击

但是根据图灵的理论,在真正运行合约之前,以太坊实际上无法预先判断一个合约是否会运行终止,或者它需要运行多久,也许这个合约会陷入死循环一直运行。。如果无法提前预估,那么以太坊如何防止智能合约过度使用资源呢?

Gas

为了应对这个挑战,以太坊引入了名为 gas 的计量机制。EVM 在执行智能合约时,它会仔细地计算每一个执行指令(计算量、数据访问,等等)。每一个指令都有一个预先定义好的开销,以 gas 为单位。当以太坊交易触发了智能合约的执行时,交易中必须包含这个智能合约执行过程中所需要的计算资源开销的上限。如果执行过程中的资源开销量超过了交易中指定的 gas 上限,那么 EVM 就会主动终止这个合约的执行。以太坊通过 gas 机制,在保证图灵完备计算的同时,限制了程序可以使用的资源量。

如何在以太坊世界计算机上获得 gas 以支付计算开销?

你不会在任何交易所找到 gas。它只能作为交易的一部分购买,并且只能通过以太币购买。以太币需要与交易一起发送,并且需要明确标记 gas,以及可接受的 gas 价格。

钱包

MetaMaskJaxxMyEtherWalletEmerald Wallet
私钥管理

如何加密保证不会泄密

这里密码学可以分为对称加密和非对称加密
对称加密就是两边都具有相同的秘钥对同一信息加密,这样的加密方式对秘钥的保存
非对称加密举个例子来说就是,你可以很容易的通过两个质数得到一个和,但你很难从一个大数中得出是哪两个质数。以太坊用的加密算法就是根据椭圆圆锥曲线得到的两个值,进行模乘运算,但进行反向运算是几乎不可能的。
公钥和私钥一起表示一个以太坊账户,公钥用于可访问账户管理(也就是地址),而私钥用于控制账户内持有的以太币,并控制使用智能合约时所需的认证程序。

哈希算法

公钥

每个以太坊公钥都是椭圆曲线上的一个点,也就是说,每个公钥都是一组 x、y 坐标,这个坐标正好满足椭圆曲线方程。
简单地说,以太坊的公钥由两个数字组合在一起。这两个数字由私钥经过单向计算得来。这意味着通过私钥计算获得公钥是非常容易的,但是你不能反过来通过公钥算出它所对应的私钥。这个神奇的数学算法造就了不可篡改和安全的数字签名,用来证明以太币的所有权,以及对合约进行控制。

以太坊地址

以太坊地址是唯一标识符,从公钥或者合约通过单向哈希函数 Keccak-256 计算而来。

学习资料

# 以太坊智能合约 —— 最佳安全开发指南
精通以太坊:开发智能合约和去中心化应用

密码学

现代密码学与其数学函数的内容,可以进行以下扩展阅读: