以太坊是一个图灵完备的系统。这意味着在内存有限的情况下,它可以执行任何图灵机可以执行的任何算法。
然而,正如图灵所证明的,通过在计算机上模拟一个程序,我们永远无法预测它是否会终止?
所以问题是我们如何保证以太坊交易会被终止?
答案是一个叫做“气体”的概念。
以太坊虚拟机(EVM)上的每个操作都与特定的价格(gas)相关。现在,如果用户想向 EVM 发送交易,她应该支付 gas 费。当 EVM 处理此交易时,它会从每次操作(读取、写入等)提供的 gas 费用中扣除必要的 gas。现在,可能会发生两件事:
如您所见,通过引入气体概念,以太坊现在具有可预测的行为。现在,我们可以通过在计算机(EVM)上模拟一个程序来保证它会终止与否?
此外,这是一种避免 DoS 攻击的安全措施。想象一下,EVM 调用不需要 gas。在这种情况下,黑客可以通过交易向网络发送垃圾邮件。结果,网络很容易拥塞,整个区块链可以在几秒钟内关闭。
ETH Gas Station网站是获取有关 Gas 最新信息的有用在线参考。
ERC是Ethereum I mprovement Proposal的首字母缩写词。每个 ERC 都是在以太坊区块链之上定义的一组规则和标准,并定义了几件事,例如:
目前,以太坊区块链中定义了多个 ERC。以下是完整列表,供参考²:
ERC-20 是与 Token 创建相关的标准。它是一个“接口”,允许开发人员在以太坊区块链之上构建代币。
在编程中,接口是对一组对象的一般描述,而不声明对象的行为。接口定义了参数和方法的抽象定义,而不定义它们的逻辑或实现。稍后,每个对象都可以实现接口并向其添加自己的逻辑版本。
ERC-20 是一个由以太坊区块链驱动的接口,使用它,开发人员可以构建他们定制的代币。换句话说,ERC-20 是一组代币属性和方法的抽象定义。稍后,在实施 ERC-20 代币时,开发人员可以实现此类属性和方法,并为他们的代币添加自己的逻辑集。
ERC-20 代币有 3 个可选参数/方法来设置:
如果您希望创建 ERC-20 代币,您可以定义它们或直接忽略它们。
ERC-20 代币有 6 个必须设置的参数/方法:
如果你想创建一个 ERC-20 代币,你必须定义它们。换句话说,你不能忽略定义这 6 件事。
将代币定义为 ERC-20 的主要优点如下:
将代币定义为 ERC-20 的主要缺点如下:
我还有另一个故事,我在其中更详细地解释了 ERC-20 代币。
媒体网
区块链中的账户通常是指用于保存数据(例如资金或合同)的占位符。账户也可用于发起交易(例如发送或接收资金)。
比特币区块链(和许多其他区块链)只有一种账户类型。用户可以在这些平台上创建一个帐户,然后他们将拥有与该帐户关联的私钥。稍后,他们可以使用他们的帐户进行交易。
不过,以太坊区块链上的账户类型有点不同。
以太坊有两种类型的账户:
外部拥有的账户 (EOA):
合约账户:
如您所见,这两种类型的帐户之间的主要区别在于两点:
简而言之,合约账户没有任何私钥。因此,他们无法发起交易。他们只能通过调用智能合约的逻辑来对它们做出反应。这个逻辑可以像将以太币从一个 EOS 转移到另一个一样简单。它也可能像调用其他几个外部合约账户一样复杂。
以太坊虚拟机(EVM)是以太坊区块链的核心组件,负责执行智能合约。
智能合约通常使用 Solidity 等高级编程语言开发。
这是用 Solidity 编写的此类合约的示例。
一旦开发和编译了智能合约,您就可以将它们部署到以太坊区块链。为此,代码将被转换为一种称为 EVM 字节码的低级编程语言。
这是编译上述智能合约的源代码并获得它的 EVM 字节码版本的结果。
EVM 字节码不是人类可读的。它们包含操作码和字节。部署合约后,其字节码将记录在区块链上,并为合约分配一个地址。在那之后,如果有人向这个合约地址发送交易,它会导致合约在 EVM 中运行字节码,并将交易作为其输入。
要运行以太坊节点(轻型或完整),您需要安装一个名为以太坊客户端的特定软件。
在您的机器上安装客户端软件后,您可以执行以下操作:
如果你使用客户端运行节点,你可以在没有中介的情况下与合约交互、部署合约、查询区块链状态(账户、合约等)。此外,客户端软件通过同步区块链数据、运行节点和验证交易,让您成为以太坊网络的贡献者。
以太坊协议在其“黄皮书”中定义了正式规范。不同的公司根据这个通用规范开发了各种版本的以太坊客户端。以下是一些最重要的:
通常,这些客户端遵循以太坊提出的相同协议并且是可互操作的。这意味着例如运行 Parity 的完整节点可以与另一个执行 Geth 的节点交换数据。
以太坊钱包只负责管理钱包所有者的密钥。它与保存以太币或任何其他代币无关。这些资产保存在区块链本身中。从这个意义上说,钱包是使用密钥和数字签名将用户与其资金连接起来的接口。
根据钱包生成的密钥类型,有两种类型的钱包:
非确定性钱包——也称为 JBOK(Just Bunch Of Keys)——使用不同的随机数生成独立的密钥。生成的密钥之间没有任何关系。例如,以太坊的“geth”客户端为每个私钥使用 JSON 编码的密钥库文件。该文件包含一个随机生成的私钥,由密码加密以提高安全性。不确定的钱包很难备份。
确定性钱包使用单个主密钥(也称为种子短语)来生成所有密钥。所有生成的密钥都是相互关联的,如果可以访问主密钥,则可以重新生成。因此,备份确定性钱包是一件容易的事。例如,分层确定性 (HD) 钱包由比特币的 BIP-32 标准定义。这些钱包包含以树形结构派生的密钥,这样父密钥可以派生一系列子密钥,每个子密钥都可以派生一系列孙密钥,依此类推。
以太坊钱包(浏览器、桌面、硬件等)在实现层基本遵循4个标准协议:
与任何其他区块链一样,以太坊使用加密模型来创建和保护用户帐户。密码学是任何区块链的核心模块,具有许多技术细节和规范。然而,您在这里必须了解的最重要的事情与帐户的创建方式以及交易将如何通过网络传递有关。
不同的区块链使用不同的模型和算法来生成和管理密钥、地址和签名。
以太坊为此使用了两种算法:
以下是此过程的摘要:
椭圆曲线和 Keccak-256 算法也用于生成数字签名。
让我们看一个例子:
假设我们有以下私钥(随机生成):
私钥 = kf8f8a2f43c8376ccb0871305060d7b27b0554d2cc72bccf41b2705608452f315
使用椭圆曲线乘法,我们得到与这个私钥相关联的公钥。
公钥 = 6e145ccef1033dea239875dd00dfb4fee6e3348b84985c92f103444683bae07b83b5c38e5e…
然后我们使用 Keccak-256 来计算这个公钥的哈希值。
Keccak256(公钥)= 2a5bc342ed616b5ba5732269001d3f1ef827552ae1114027bd3ecf1f086ba0f9
最后,我们保留此哈希的最后 20 个字节(最低有效字节)并在它们之前添加 0x 前缀。
以太坊地址 = 0x001d3f1ef827552ae1114027bd3ecf1f086ba0f9
首先,让我们给出以太坊交易的一般定义。
以太坊交易是由外部拥有账户 (EOA)发起的签名消息,可以触发区块链中的状态变化。
在此定义中,您必须记住三件重要的事情:
每笔交易的基本结构包含以下几条数据:
要在以太坊中签署交易,涉及以下步骤:
此外,钱包或客户端软件可能会附加元数据信息,例如块号(一旦交易被挖掘)和交易 ID(计算的哈希)。
根据以太坊组织:
Eth2 指的是一组相互关联的升级,这将使以太坊更具可扩展性、更安全和更可持续。这些升级由来自整个以太坊生态系统的多个团队构建。
区块链为我们提供了去中心化、安全和可扩展的解决方案的所有灵活性。或者更好地说,他们试图到达那里!
对于区块链,我们希望:
这些条件定义了区块链三难困境。因此,如果您可以开发一个同时解决所有这三个问题的区块链,您可以声称它是完美的。
以太坊是最去中心化的区块链之一。它在不同的地理位置拥有数千个节点和矿工。ETH 2.0 的引入将使 ETH 成为一种产生收益的资产。因此,我们可以预期网络中活动节点的数量呈指数增长。此外,以太坊 2.0 至少需要 16,384 个验证者,这使得它更加去中心化——因此也更加安全。
ETH 1.0 目前正在使用工作证明(POW)共识。ETH 2.0 将向以太坊引入股权证明(POS)。POS 将有助于保持以太坊更加安全。根据以太坊组织声明:
把它想象成一种公共物品,它将使以太坊更健康,并在此过程中为你赚取更多的 ETH。实际上,这将涉及您质押 ETH 以激活验证器软件。作为验证者,您将处理交易并在链中创建新块。质押和成为验证者比挖矿(网络当前的安全方式)更容易。从长远来看,这将有助于使以太坊更加安全。参与网络的人越多,它就会变得越去中心化和安全。
ETH 2.0 还将通过引入分片机制来解决交易费用和时间问题。通过此次升级,该平台将在更短的时间内处理数千笔交易。分片是此次升级的重要组成部分。它只是意味着将大链拆分/分区为较小的链(碎片)。然后,工作量将分布在几个验证者之间。这种分布大大提高了可扩展性。可以同时处理的交易数量将会增加。结果,将避免网络拥塞,并降低交易费用。