欧时课堂|用树莓派探索以太坊 - 第1部分:入门
在Pi 3B 型上安装并运行以太坊区块链客户端。
区块链现在是一个令人难以置信的热门话题,并且已经有一段时间了,这在很大程度上是因为加密货币 - 主要是比特币 - 似乎为他们的早期采用者在一夜之间产生的财富,以及它们开辟的新的经济可能性。
然而,区块链不仅仅可以用于加密货币,而且正如Greig在其最近发布的文章中指出的那样,其分布式性质和验证交易的防篡改记录能力可用于物联网应用。以太坊平台令人兴奋的是它不仅仅是简单的加密货币和安全交易,还提供分布式计算平台。
在这篇文章中,我们将简要介绍一下以太坊体系结构,并尝试介绍一些主要概念和组件,然后再继续在Raspberry Pi上安装客户端软件。需要说明的是,我们不会挖掘任何加密货币,因为您确实需要一个强大的GPU,但是可以使用Pi创建一个简单的沙箱进行实验 - 这也表明区块链技术确实是可以运行在嵌入式平台。
以太坊101
contract mortal { /* Define variable owner of the type address */ address owner; /* This function is executed at initialization and
sets the owner of the contract */ function mortal() { owner = msg.sender; } /* Function to recover the funds on the contract */ function kill() { if (msg.sender == owner)
selfdestruct(owner); }}
contract greeter is mortal { /* Define variable greeting of the type string */ string greeting; /* This runs when the contract is executed */ function greeter(string _greeting) public { greeting = _greeting; } /* Main function */ function greet() constant returns (string) { return greeting; }}
以太坊智能合约的示例。资料来源:ethereum.org
区块链是一个分布式记录本,通常通过点对点网络进行管理,并随着记录或区块越来越多,它的大小也会不断增长。区块通常包含有交易数据的时间戳,并通过散列算法加密保护,这样一旦数据被提交,它就不能被修改。
以太坊平台拥有自己的加密货币,称为以太币 ether,但它也进一步构造区块链技术,为智能合约创造分散平台 - 包含代码函数和区块链函数,并能够与其他合同进行交互,作出决定,存储数据,并将以太币发送给其他人。
智能合约通过基于 JavaScript 的 Solidity 语言实现。Solidity编译器用于将智能合约编译为字节码 - 就像使用JavaScript或Python,Java和Android等代码执行 - 然后通过以太坊虚拟机(Ethereum Virtual Machine)执行。在智能合约中执行交易产生一定的成本,这是我们将在未来的文章中介绍到。
以太坊提供了许多不同的客户端应用程序,原始参考实现geth以Go编写。其中一些可以挖掘以太币。另外还有独立的挖掘软件,好像另外还有GUI客户端和分布式应用程序的IDE。
除主要的公共以太坊区块链网络mainnet 之外,还有用于实验性质的测试网络,您也可以创建自己的专用网络。
安装GETH
设我们已经安装了Raspbian,我们便可以开始更新已安装的软件包到最新版本。
$ sudo apt-get update $ sudo apt-get dist-upgrade
我在第一次编译以太坊客户端时用完了内存。为内存密集型任务释放内存的一个好方法就是减少分配给GPU的数量。实际上,如果您不需要图形桌面,请将将系统简单地配置成引导到命令行。
$ sudo raspi-config
3 → Boot
B1 → Desktop / CLI
B1 → Console
7 → Advanced
A3 → Memory Split
16 (MB)
Reboot
接下来,如果我们安装相关的安装包。
$ sudo apt-get install git golang libgmp3-dev
之后,如果我们抓取geth的源代码,一个以太坊节点的官方语言实现,编译这些代码并将可执行文件复制到/usr/local/bin/。
$ mkdir src $ cd src $ git clone -b release/1.7 https://github.com/ethereum/
go-ethereum.git $ cd go-ethereum $ make $ sudo cp build/bin/geth /usr/local/bin/
创建帐户并进行测试
首先,如果我们使用GETH来创建一个新帐户。
$ geth account new
这将生成一组新的加密密钥并使用密码保护私钥。请注意,如果您使用此帐户来挖掘加密货币并进行有意义的交易,您则需要确保备份您的密钥并防止您的私钥被访问。
现在开始启动节点。
geth --syncmode light --cache 64 --maxpeers 12
如果我们在没有任何参数的情况下运行GETH,它会启动一个节点并尝试同步整个公共mainnet区块链。其大小超过50GB并且不断增长,这对嵌入式计算机可能不是一个好主意。所以,我们以轻型同步模式启动节点。这只会随着它们的出现以及区块链的其他部分按需提取区块标题。
要强制节点退出,只需按CTRL-C在启动时将其作为服务运行:
$ sudo vi /etc/systemd/system/geth@.service
(用你最喜欢的文本编辑器替换“vi”)
然后输入:
[Unit]Description=Ethereum daemon Requires=network.target[Service]Type=simple User=%I ExecStart=/usr/local/bin/geth --syncmode light --cache 64
--maxpeers
12Restart=on-failure[Install]WantedBy=multi-user.target
保存文件并将以太坊节点作为“PI”用户运行:
$ sudo systemctl enable geth@pi.service $ sudo systemctl start geth@pi.service
我们的以太坊节点作为服务运行时,我们现在可以使用以下方式连接到它:
$ geth attach
这给了我们提供了一个交互式的JavaScript控制台。从这里我们可以调用函数功能,例如:
> eth.accounts
列出当前帐户。
获取关于连接者的信息:
> admin.peers
请注意,轻量级客户端协议仍处于开发阶段,在某种程度上是试验性应用,并且依靠完整的对等点/节点来支持它。因此,撰写本文时可能未能完整地运行以太坊主网区块链。也就是说,事情正在快速地发展,而这种情况在不太遥远的将来也会很容易发生变化。
接下来
到目前为止,我们刚刚安装了客户端软件,创建了帐户,启动了节点并观察了对等连接。在以后的文章中,我们将看看实际执行的交易。