一文读懂以太坊:智能合约平台的技术基石
一文读懂以太坊:智能合约平台的技术基石
以太坊是一个开源的、基于区块链技术的分布式计算平台,支持智能合约的开发和执行。自2015年推出以来,以太坊已经成为全球最大的去中心化应用(DApp)平台之一。本文将深入探讨以太坊的工作原理,包括其核心概念、技术细节和生态系统。
1. 以太坊概览
以太坊使用Solidity编程语言编写智能合约。智能合约完全按照程序运行,而且防停机、防审查、防欺诈、防第三方干扰。部署智能合约或者调用其方法需要用到以太币。
以太坊使用区块链数据结构和权益证明共识协议。网络中的节点分为普通节点和验证者。普通节点只备份区块链上的数据,而验证者通过验证新区块来维护区块链的安全。
2. 以太坊账户
要创建以太坊账户,只需要一个非对称加密密钥对——由不同的算法(例如RSA、ECC等)生成。以太坊使用椭圆曲线加密算法(ECC),ECC有多个参数用来调节速度和安全性,以太坊使用secp256k1参数。
每个账户用一个地址表示。有了密钥之后,就需要生成地址。
从公钥生成地址的过程如下:
- 生成公钥的keccak-256哈希。它将给出一个256位的数字。
- 丢弃前面的96位,即12字节。现在得到160位二进制数据,即20字节。
- 把地址编译成十六进制的字符串。最后将得到一个40字符的字节串,就是账户地址。
3. 交易
交易是一个签名数据包,用于从一个账户向另一个账户或者向一个合约转以太币、调用合约方法或者部署一个新合约。
交易使用椭圆曲线数字签名算法(ECDSA)签名,ECDSA是一种基于ECC的数字签名算法。
交易包含:
- 信息接收者
- 识别发起人及其意愿的签名
- 要转账的以太币数量
- 交易执行允许进行的计算资源最大值(叫作gas上限)
- 交易发起人愿意为单位计算资源支付的费用(叫作gas价格)
如果交易目的是调用合约方法,则还包含输入数据。如果其目的是部署合约,则可以包含初始化代码。用交易所消耗的gas乘以gas价格计算得到交易费。
4. 共识
用户需要确保节点不能够篡改区块链,还需要一个机制检查区块是否合法。
以太坊使用权益证明共识协议防止区块链被篡改。验证者通过质押一定数量的以太币来参与区块验证过程。验证者根据其质押的以太币数量获得相应的投票权。当一个新的区块被创建时,验证者会检查其合法性,并通过投票来确认该区块。获得多数投票的区块将被添加到区块链中。
5. 时间戳
当一个验证者广播一个新验证的区块时,其他节点对其时间戳的验证取决于其时间戳是否大于前一个区块的时间戳。
6. 随机数
随机数是一个64位未签名证书。验证者不断地尝试随机数,直到发现目标值。
7. 区块时间
区块难度值公式使用了一个长达10s的阈值,以确保挖出父区块和子区块的时间差在10s和20s之间。
8. 分叉
- 普通分叉:普通分叉是由于两个或者多个验证者几乎同时发现了一个区块引起的暂时冲突。如果一个难度值高于另一个,冲突就解决了。
- 软分叉:要求有50%以上算力的验证者升级以解决冲突。如更新源代码使旧区块/交易的一部分失效,则有50%以上算力的验证者升级后可以解决。
- 硬分叉:要求所有验证者升级以解决冲突。如更新源代码是为了更改对验证者的回报,则全部验证者需要升级以解决冲突。
9. 创世区块
创世区块(genesis block)是区块链中的第一个区块,其区块序号是0。它是区块链中唯一一个不指向前一个区块的区块,因为没有前一个区块。它也不包含交易,因为还没产生任何以太币。
10. 以太坊虚拟机(EVM)
EVM是以太坊智能合约字节码(byte-code)的执行环境,网络中的每个节点都运行EVM。所有节点执行使用EVM指向智能合约的全部交易,因此它们进行同样的计算,并存储同样的数值。
11. gas
gas(燃料)是计算资源的计量单位。每一个交易都需要包含gas上限。如果交易使用的gas少于或等于gas上限,交易继续进行。如果gas总数超过gas上限,则撤销所有修改,除了仍然合法且验证者仍然能够收到费用的交易。
12. 发现对等节点
节点不需要连接到网络中的每一个节点;相反,它只连接到几个其他节点,这些节点再连接到另外几个节点。按照这个方式,整个网络彼此连接。
13. Whisper和Swarm
Whisper是一个去中心化的通信协议,Swarm则是一个去中心化的文件系统。
14. geth (go-ethereum)
geth是以太坊、Whisper和Swarm节点的一个实现。合并它们的目的是让它们看起来像单一的DApp,通过一个节点客户端就可以访问三个DApp。geth是一种CLI应用,它用Go语言编写。
15. 以太坊钱包
以太坊钱包允许用户进行创建账户、发送以太币、部署合约、调用合约方法等操作。以太坊钱包与geth捆绑在一起。运行以太坊时,它会尝试发现一个本地geth实例并与之连接。如果它不能发现geth正在运行,它就启动自己的geth节点。
16. 浏览器钱包(Mist)
浏览器钱包(Mist)是以太坊、Whisper和Swarm的一个客户端,它允许用户发送交易、发送Whisper信息、检查区块链等。目前,浏览器中运行的前端JavaScript可以使用web3.js库(该库为其他应用提供以太坊操作台的JavaScript API与geth通信)访问geth节点的web3 API。Mist的基本思想是创建第三代Web(Web 3.0),即使用以太坊、Whisper和Swarm替代中心化服务器端,这样就不需要服务器端了。
17. 以太坊的缺点
- Sybil攻击:攻击者可能试图用他控制的普通节点占满整个网络,那么用户很有可能只连接到攻击者节点。一旦连接到攻击者节点,攻击者可以拒绝从所有节点转播区块和交易,从而将用户从网络中断开。攻击者只能转播他创建的区块,从而会将用户放到分开的网络上。
- 51%攻击:如果攻击者掌握了网络中一半以上的算力,他就可以比网络中其他人更快地生成区块。拥有50%以上的算力,矿工就可以重写交易,阻止全部/一些交易被挖出,并阻止其他矿工挖出的区块被添加到区块链中。
本文原文来自腾讯云开发者社区