两个月前,我被要求建立一个以太坊网络应用作为工作测试以加入Zeppelin,但是我对区块链技术根本不了解。我几乎没有听说过比特币,所以除了学习我没有别的选择。
这将是一系列针对希望成为以太坊软件开发人员的帖子。但是请记住,我不认为自己是这个领域的专家,我只是希望能教大家我所学到的东西,从而节省跟我一样处于学习阶段的人的时间。到该系列博客的最后,你应该能构建一个完整的支持智能合约的Web应用(也被称为DApp)。
享受这个过程吧!同时如果你有问题,建议或者反馈,请毫不犹豫的告知我。
本文目录
1. 迈出第一步
1.1 引言
1.2 WEB3
1. 迈出第一步
1.1 引言
我假设你有一些计算机编程方面的基础知识,并知道区块链数据结构是怎样的。如果你不具备以上知识,请先了解这个链接的内容再回来看这篇博客。
以太坊
首先让我们定义一下以太坊,或者说是我在研究之后对其的理解。以太坊是一个开源的,分布式的,基于区块链技术的公共平台,无需审查及第三方干扰即可运行应用程序。
智能合约
智能合约仅仅是电脑程序。我们基于智能合约创建以太坊应用。请记住,虽然这个概念现在随着以太坊出现,但是它实际上是由Nick Szabo于1996年提出。
以太坊虚拟机
EVM 是以太坊智能合约的沙盒运行时以及完全独立的环境。这意味着每个在EVM中运行的智能合约无法连接网络、文件系统或者其他进程。
Gas
鉴于以太坊是一个分布式平台,所以必须有一种方式来限定给定智能合约的可用资源,否则可能会使得整个网络的算力瘫痪。Gas 通过为EVM中执行的每个指令确定它的执行成本来解决这个问题。一个重要的事情是,每笔发送到网络中的交易都有一个“Gas预算”。如果预算的Gas用完了,交易将以失败告终,但是这笔交易仍然会被开采到区块链中。
Ether(ETH)
这是以太坊的加密数字货币。Gas/Ether的动态兑换价格用来衡量一个操作将花费多少ETH。执行交易所需支付的费用通过Gas用量与Gas价格相乘得出(计算所得的费用将使用ETH支付)。你可以将交易的Gas价格设置为任何值。但是,如果你设置的Gas价格太低的话,没有人会执行你的代码。
账户
每个账户都是由一个地址标识的。同一地址空间由两种账户共享。一种是由公私钥对控制的外部账户,该账户通常由人拥有,用来存储ETH。另一种是由它存储的代码控制的合约账户。这两种账户之间存在一些差异,其中非常重要的一点,只有外部账户才能启动交易。
交易
交易是从一个账户发送到另一个账户的消息。你可以发送一笔交易给另一个账户以转移ETH。如果目的账户是合约账户,其代码也将被执行。请注意,涉及代码执行的每笔交易都将在网络中的所有节点上执行。此外,所有的代码运行以及交易执行都将被记录在以太坊区块链上。
Solidity
Solidity 是一种面向合约的高级语言,其语法与JavaScript相似。Solidity是静态类型的,支持继承,库以及复杂的用户定义类型。其编译后就是节点运行的EVM程序集。
WEB3
我决定先通过简单的将ETH从一个账户发送到另一个账户开始与以太坊区块链的互动。因为我可能会弄的一团糟,所以我不想用真正的ETH来做这个实验,因此我开始寻找一些测试/虚拟环境。阅读Manu令人震惊的帖子后,我发现了testrpc,这是一个用于测试和开发的node.js以太坊客户端。让我们安装这个客户端并开始使用它:
你会注意到已经产生了10个地址,这些地址都拥有虚拟的ETH可供人使用而无需担心。这是默认情况下的工作原理,你还可以按照文档进行自定义初始化。你必须记住的非常重要的一点就是的状态是不稳定的,每次关闭它后,你的节点和账户状态将被清除。
另一个你得知道的是Web3.js。这是一个实现了以太坊 JSON RPC的JavaScript库。也就是说,我们将使用这个协议来与以太坊节点(在这个例子中是)进行交互。安装只需运行:
顺便提一句,在这个例子中,安装Web3 0.20.x版本而不是公测1.0.0版本是十分重要的。首先,你需要将运行在上的本地测试节点连接Web3.为了做到这一点,我们要求Web3 使用本地主机供应商。让我们打开一个节点控制台并输入以下命令:
请注意,我们正在使用默认的端口(8545),如果你设置了另一个端口,记得更改供应商的URL。当你获得web3 实例后,首先运行以下命令以获得你的以太坊节点中的账户列表及其各自余额:
你可能注意到了,输出不全是数字列表,这是因为Web3使用大数对象来处理数字值,而JavaScript无法正确处理大数类型。你可以通过这个链接了解更多。
领取专属 10元无门槛券
私享最新 技术干货