以太坊基础
控制和责任
像以太坊这样的开放区块链是安全的,因为它们是_去中心化的_。这意味着以太坊的每个用户都应该控制自己的密钥,这些密钥可以控制对资金和合约的访问。一些用户选择通过使用第三方保管人(比如交易所钱包)放弃对密钥的控制权。在本书中,我们将教你如何控制和管理你自己的密钥。
这种控制带来了很大的责任。如果你丢失了你的钥匙,你将无法获得资金和合约。没有人可以帮助你重新获得访问权 - 你的资金将永远锁定。以下是一些帮助你管理这一责任的提示:
提示你选择密码时:强化它,备份并不共享。如果你没有密码管理器,请将其写下并存放在锁定的抽屉或保险柜中。只要你拥有帐户的“keystore”文件,就可以使用此密码。
当系统提示你备份密钥或助记词时,请使用笔和纸进行物理备份。不要把这个任务放在“以后”,你会忘记。这些在你丢失了系统中保存的所有数据时使用。
不要在数字文档,数字照片,屏幕截图,在线驱动器,加密的PDF等中存储密钥材料(加密或不加密),不要临时凑合的安全性。使用密码管理器或笔和纸。
在传输任何大量数据之前,先做一个小的测试交易(例如,1美元)。一旦你收到测试交易,请尝试从该钱包中发送。如果你忘记密码或因任何其他原因无法发送资金,最好是一个小小的损失。
请勿将金钱汇入本书所示的任何地址。私人密钥被列在书中,有人会立即拿走这笔钱。
以太网货币单位
以太坊的货币单位称为 以太 ether,也被称为ETH或符号 Ξ (来自看起来像程式化的大写字母E的希腊字母“Xi”)或(不太常见的)
| Tip | Ξ 使用Unicode字符926, |
以太被细分为更小的单位,直到可能的最小单位,这被命名为_wei_。一个 ether 是 1×1018或1,000,000,000,000,000,000 个 wei。你可能会听到人们也提到货币“以太坊”,但这是一个常见的初学者的错误。以太坊是制度,以太是货币。
以太的值总是在以太坊内部表示为_wei_,无符号整数值。当你处理1个以太网时,交易将编码10000000000000000000 wei作为值。
以太的各种单位既有使用国际单位系统(SI)的科学名称,也有口语化的名字,向计算机和密码学的许多伟大思想致敬。
表 Ether Denominations and Unit Names 显示了各种单位,它们的俗名(通用)名称和他们的SI名称。为了与价值的内部表示保持一致,该表格显示了所有面值的wei(第一行),在第七行中 ether 显示为1018 wei:
| Value (in wei) | Exponent | Common Name | SI Name |
|---|---|---|---|
1 | 1 | wei | wei |
1,000 | 103 | babbage | kilowei or femtoether |
1,000,000 | 106 | lovelace | megawei or picoether |
1,000,000,000 | 109 | shannon | gigawei or nanoether |
1,000,000,000,000 | 1012 | szabo | microether or micro |
1,000,000,000,000,000 | 1015 | finney | milliether or milli |
1,000,000,000,000,000,000 | 1018 | ether | ether |
1,000,000,000,000,000,000,000 | 1021 | grand | kiloether |
1,000,000,000,000,000,000,000,000 | 1024 | megaether |
选择一个以太坊钱包
以太坊钱包是你通往以太坊系统的门户。它拥有你的密钥,并且可以代表你创建和广播交易。选择一个以太坊钱包可能很困难,因为有很多不同功能和设计选择。有些更适合初学者,有些更适合专家。即使你现在选择一个你喜欢的,你可能会决定稍后切换到另一个钱包。以太坊本身在不断变化,“最好”的钱包往往是适应它们的。
别担心!如果你选择一个钱包而不喜欢它的工作方式,那么你可以很容易地更换钱包。你只需进行一项交易,即将资金从旧钱包发送到新钱包,或者通过导出和导入私钥来移动密钥。
首先,我们将选择三种不同类型的钱包作为整本书的示例:移动钱包,桌面钱包和基于网络的钱包。我们选择了这三款钱包,因为它们代表了广泛的复杂性和功能。然而,选择这些钱包并不是对其质量或安全性的认可。他们只是示范和测试。
起始钱包:
- MetaMask
MetaMask是一款浏览器扩展钱包,可在你的浏览器(Chrome,Firefox,Opera或Brave Browser)中运行。它易于使用且便于测试,因为它可以连接到各种以太坊节点和测试区块链(请参阅“testnets”)。
- Jaxx
Jaxx是一款多平台和多币种钱包,可在各种操作系统上运行,包括Android,iOS,Windows,Mac和Linux。对于新用户来说,它通常是一个不错的选择,因为它的设计简单易用。
- MyEtherWallet (MEW)
MyEtherWallet是一款基于网络的钱包,可在任何浏览器中运行。它具有多个复杂的功能,我们将在许多示例中探讨这些功能。
- Emerald Wallet
Emerald钱包设计用于以太坊经典区块链,但与其他以太坊区块链兼容。它是一款开源桌面应用程序,适用于Windows,Mac和Linux。Emerald钱包可以运行一个完整的节点或连接到一个公共的远程节点,工作在“轻量”模式下。它还有一个配套工具来在命令行中执行所有操作。
我们将首先在桌面上安装MetaMask
安装 MetaMask
打开Google Chrome浏览器并导航至:
https://chrome.google.com/webstore/category/extensions
搜索“MetaMask”并点击狐狸的标志。你应该看到这样的扩展的详细信息页面:
Figure 1. The detail page of the MetaMask Chrome Extension验证你是否下载真正的MetaMask扩展非常重要,因为有时候人们可以将恶意扩展通过Google的过滤器。
在地址栏中显示ID nkbihfbeogaeaoehlefnkodbefgpgknn
有超过800个评论
拥有超过1,000,000名用户
确认你正在查看正确的扩展程序后,请点击“添加到Chrome”进行安装。
第一次使用MetaMask
一旦安装了MetaMask,你应该在浏览器的工具栏中看到一个新图标(狐狸头)。点击它开始。它将要求你接受条款和条件,然后通过输入密码来创建新的以太坊钱包:
Figure 2. The password page of the MetaMask Chrome Extension| Tip | 密码控制对MetaMask的访问,任何有权访问你的浏览器的人无法使用它。 |
一旦你设置了密码,MetaMask将为你生成一个钱包并向你显示一个_助记词备份_,由12个英文单词组成。如果MetaMask或你的计算机出现问题,可以在任何兼容的钱包中使用这些词来恢复对资金的访问。你不需要通过密码进行恢复。这12个字就足够了。
Figure 3. The mnemonic backup of your wallet, created by MetaMask| Tip | 在纸上备份助记符(12个字),两次。将两份纸张备份存放在两个单独的安全位置,例如防火安全柜,锁定的抽屉或保险箱。将纸质备份视为你在Ethereum钱包中存储的相同价值的现金。任何能够访问这些文字的人都可以访问并窃取你的资金。 |
一旦确认你已安全存储助记符,MetaMask将显示你的以太坊帐户详细信息:
Figure 4. Your Ethereum account in MetaMask你的帐户页面会显示你帐户的名称(默认情况下为“Account 1”),以太坊地址(示例中为0x9E713 …)以及彩色图标,以帮助你将此帐户与其他帐户区分开来。在帐户页面的顶部,你可以看到你当前正在使用哪个以太坊网络(示例中的“主网络”)。
恭喜!你已经建立了你的第一个以太坊钱包!
切换网络
正如你在MetaMask帐户页面上所看到的,你可以在多个以太坊网络中进行选择。默认情况下,MetaMask将尝试连接到“主网络”。其他选择是公共测试网,你选择的任何以太坊节点或在你自己的计算机上运行私有区块链的节点(本地主机):
- Main Ethereum Network
主要的,公开的以太坊区块链。真正的ETH,真正的价值,真正的后果。
- Ropsten Test Network
以太坊公开测试区块链和网络,使用工作证明共识(挖矿)。在这个网络上的ETH没有价值。Ropsten的问题在于攻击者铸造了数以万计的区块,产生巨大的重组并将燃气极限推到9B。当时需要一个新的公共测试网,但之后(2017年3月25日)Ropsten也复活了!
- Kovan Test Network
以太坊公开测试区块链和网络,使用“Aura”协议进行权威证明(Proof-of-Authority)共识(联合签名)。在这个网络上的ETH没有价值。该测试网络仅由“Parity”支持。其他以太坊客户使用稍后提出的"Clique"协议作为权威证明。
- Rinkeby Test Network
以太坊公开测试区块链和网络,使用“Clique”协议进行权威证明共识(联合签名)。在这个网络上的ETH没有价值。
- Localhost 8545
连接到与浏览器在同一台计算机上运行的节点。该节点可以是任何公共区块链(主要或测试网络)或私人测试网络的一部分(参见[ganache])。
- Custom RPC
允许你将MetaMask连接到任何具有geth兼容的远程过程调用(RPC)接口的节点。该节点可以是任何公共或私有区块链的一部分。
有关各种以太坊测试网以及如何在它们之间进行选择的更多信息,请参见 [testnets]。
| Tip | 你的MetaMask钱包在连接的所有网络上使用相同的私钥和以太坊地址。但是,每个以太坊网络上的以太坊地址余额将有所不同。例如,你的密钥可以控制Ropsten上的以太和合约,但不能控制主网上的。 |
获得一些测试以太
我们的首要任务是给我们的钱包充值。我们不会在主网上这样做,因为真正的以太网需要花费金钱,处理它需要更多的经验。现在,我们将使用一些testnet ether加载我们的钱包。
将MetaMask切换到_Ropsten测试网络_。然后点击“Buy”,然后点击“Ropsten Test Faucet”。MetaMask将打开一个新的网页:
Figure 5. MetaMask Ropsten Test Faucet你可能会注意到该网页已经包含你的MetaMask钱包的以太坊地址。MetaMask集成了支持以太坊的网页( 参见 [dapps])与你的MetaMask钱包整合在一起。MetaMask可以在网页上“查看”以太坊地址,例如,你可以向显示以太坊地址的网上商店发送付款。如果网页请求,MetaMask也可以使用自己的钱包地址填入网页,作为收件人地址。在此页面中,faucet应用程序要求MetaMask提供一个钱包地址以发送测试以太网。
按绿色"request 1 ether from faucet"按钮。你会看到一个交易ID出现在页面的下方。faucet应用程序创建了一个交易 - 付款给你。交易ID如下所示:
0x7c7ad5aaea6474adccf6f5c5d6abed11b70a350fbc6f9590109e099568090c57
几秒钟后,新交易将由Ropsten矿工开采,你的MetaMask钱包将显示1 ETH的余额。点击交易ID,你的浏览器会将你带到一个_block explorer_,该网站允许你查看和浏览区块,地址和交易。MetaMask使用 etherscan.io 区块浏览器,这是受欢迎的以太坊区块浏览器之一。包含Ropsten Test Faucet支付的交易显示在 Etherscan Ropsten Block Explorer 中。
Figure 6. Etherscan Ropsten Block Explorer交易记录在Ropsten区块链中,任何人都可以随时查看,只需搜索交易ID或访问链接即可:
https://ropsten.etherscan.io/tx/0x7c7ad5aaea6474adccf6f5c5d6abed11b70a350fbc6f9590109e099568090c57
尝试访问该链接,或将交易哈希值输入到 ropsten.etherscan.io 网站中,亲自查看。
使用MetaMask发送ether
一旦我们从Ropsten Test Faucet接收到我们的第一个测试ether,我们将试着发送一些ether回到faucet。正如你在Ropsten Test Faucet页面上看到的那样,你可以选择“donate”1个ETH。这个选项是可用的,所以一旦你完成了测试,你可以返回剩余的测试ether,以便其他人可以使用它。尽管测试ether没有价值,但有些人囤积测试ether,使其他人难以使用测试网络。囤积测试ether令人不悦!
幸运的是,我们不是测试ether的囤积者,我们希望练习发送ether。
点击橙色的“1 ether”按钮来告诉MetaMask创建支付Faucet 1 ether的交易。MetaMask将准备一个交易并弹出一个窗口,并显示确认信息:
Figure 7. Sending 1 ether to the faucet哎!你可能注意到你无法完成交易。MetaMask表示“交易余额不足”。乍一看这可能会让人困惑:我们有1个ETH,我们想要发送1个ETH,为什么MetaMask说我们没有足够的资金?
答案是因为_gas_的成本。以太坊交易需要支付矿工收取的费用,以验证交易。以太坊的费用以_gas_虚拟货币收取。作为交易的一部分,你使用ether支付gas。
| Tip | 测试网络也需要费用。如果没有费用,测试网络的行为将与主网络不同,从而使其成为不适当的测试平台。费用还可以保护测试网络免受拒绝服务攻击和构造不良的合约(如无限循环),就像保护主网络一样。 |
当你发送交易时,Metamask以3 GWEI(即3 gigawei)计算最近成功交易的平均gas价格。Wei是以太货币的最小的细分,正如我们在 以太网货币单位 中所讨论的那样。发送基本交易的gas成本为21000个gas单位。因此,你花费的ETH的最大数量为3 * 21000 GWEI = 63000 GWEI = 0.000063 ETH。请注意,平均gas价格可能波动,因为它们主要由矿工决定。我们将在后面的章节中看到如何增加/减少gas限制,以确保你的交易在需要时优先处理。
这表明:1 ETH交易的成本是1.000063 ETH。MetaMask在显示总数时会将此近似到1 ETH,但你需要的实际金额为1.000063 ETH,并且你只有1个ETH。点击“Reject”取消此交易。
让我们再来测试一下吧!再次点击绿色的“request 1 ether from the faucet”按钮,等待几秒钟。别担心,faucet应该有足够的ether,如果你要的话,会给你更多的东西。
一旦你有2 ETH的余额,你可以再试一次。这次,当你点击橙色的“1 ether”捐赠按钮时,你有足够的余额来完成交易。MetaMask弹出付款窗口时点击“Submit”。所有这一切之后,你应该看到0.999937 ETH的余额,因为你使用0.000063 ETH的gas发送了1个ETH到faucet。
探索地址的交易历史
到目前为止,你已经成为使用MetaMask发送和接收测试ether的专家。你的钱包已收到至少两次付款并至少发送了一次。让我们看看所有这些交易,使用 ropsten.etherscan.io 区块浏览器。你可以复制你的钱包地址并将其粘贴到浏览器的搜索框中,或者你可以让MetaMask为你打开该页面。在MetaMask中你的帐户图标旁边,你会看到一个显示三个点的按钮。点击它显示与帐户相关的选项菜单:

















