把700元的单片机改造成以太坊节点, 9步get起新技能!
作者 | medium
编译 | 火火酱
责编 | Carol
出品 | 区块链大本营(blockchain_camp)
众所周知,以太坊,是一个可以运行智能合约的去中心化平台。
智能合约,是指完全按照编程方式运行的应用程序,它排除了任何停机、审查、欺诈或第三方干扰的可能性。
以太坊以区块链技术为核心。简而言之,以太坊是一个全球网络,旨在依靠多台计算机或节点的处理能力和存储资源,以去中心化的方式来处理指令。
通过运行节点,我们能够保持网络的去中心化以及对等节点之间的信任。这是一种能够直接参与以太坊网络并且掌握一些尖端技术的方法。真的超级有趣!
我们为什么要在Raspberry Pi上
运行以太坊节点?
Raspberry Pi非常适合运行以太坊节点,因为在我们决定人为停止它之前,它都可以自行运行。
当然,我们也可以在计算机上运行以太坊节点,但是这样会产生相应的计算和存储成本。所以我宁愿让节点在专用的硬件上运行,然后用笔记本电脑来看电影。而且,如果你一不小心就烧掉一个Raspberry Pi的话,它的成本可要远远低于烧掉一个笔记本电脑。
我们还可以通过云服务在虚拟机实例上运行以太坊节点,但是这将会增加巨大的成本。谁都不想为这把自己的口袋掏空吧?
此外,Raspberry Pi还可用于创建实验用的简单沙盘,这也证明了利用嵌入式平台部署区块链技术和进一步集成物联网的可能性。
如何在Raspberry Pi上运行以太坊节点?
现在,为了把环境搭建起来,我们需要一些工具。因此,让我们先了解一下需要准备些什么吧:
具有优质的外壳和散热器(冷却风扇)的Raspberry Pi 3B +,可防止过热导致的关机现象; 32G + MicroSD卡; HDMI线和显示器; 键盘和鼠标(这还用说吗!);
我们假设Raspberry Pi已经安装了Raspbian OS。如果没有,也不要担心,你可以按照以下链接完成操作:
https://www.raspberrypi.org/downloads/raspbian/
一旦完成了OS操作系统的基本设置,我们就可以开始了!让我们继续执行以下步骤:
步骤1:首先将软件包更新为最新版本
命令如下:
$ sudo apt-get update
$ sudo apt-get dist-upgrade
$ sudo raspi-config
1. 引导至命令行:
3 → Boot B1 → Desktop / CLI B1 → Console
7 → Advanced A3 → Memory Split 32 (MB)
3.最后,重新启动。
接下来,我们将安装软件包依赖项。
步骤3:我们需要先安装Golang,然后再安装Geth。这一步可以通过以下命令来完成
$ sudo apt-get install git golang libgmp3-dev
安装的Golang版本会过时,因此我们需要使用Golang版本管理器“ g”将其版本升级到1.10以上。
参考链接: https://github.com/stefanmaric/g
命令:
$ curl -sSL https://git.io/g-install | bash
$ g install <version> (above 1.10 ex. 1.11.2)
步骤4:安装Geth
我们会选择从源代码构建Geth,而不是使用二进制文件,因为从源代码构建能够有大量的自定义选项。
例如,我们可以添加一些二进制文件中没有提供的功能,为硬件(Raspberry Pi)提供安装所需的特定信息,然后将其安装在需要的位置。
另外,我们可以安装最新版本并及时更新,无论是安全补丁更新还是新功能更新。
命令如下:
$ mkdir src$ cd src$ git clone -b release/1.8 https://github.com/Ethereum/go-Ethereum.git
(为了工作更为高效,release number发布码应该要是最新版本.)
$ cd go-Ethereum
$ make
$ sudo cp build/bin/geth /usr/local/bin/
步骤5:创建帐户
$ geth account new
这将生成一组新的加密密钥,并使用密码保护私钥。
需要注意的是,如果我们使用这个帐户来挖掘加密货币并进行有意义的交易的话,那么我们要确保备份成功密钥,以防止私钥泄露。
步骤6:以light模式同步以太坊主网
$ geth — syncmode light — cache 64 — maxpeers 12
如果在没有任何参数的情况下运行Geth,它将启动一个节点并尝试同步整个公共Mainnet主网区块链,这在大小超过50GB并不断增长的情况下,在嵌入式计算机上来说或许不是一个好主意。
因此,我们改为以light同步模式启动节点。light同步模式仅获取当前状态,因此验证元素时需要向full节点发起相应的请求。
light地址:
https://github.com/ethereum/wiki/wiki/Light-client-protocol
如果想要停止执行,请按Ctrl + C
如果想要在后台运行,只需使用nohup即可。
$ nohup geth — syncmode light — cache 64 — maxpeers 12 &
同步过程将会在后台运行。要查看日志的话,使用任何代码编辑器(例如Vim或Nano)打开文件nohup.out即可。
日志显示为:
步骤7:JavaScript控制台
可通过 Geth-attach命令使用Geth Javascript控制台。
检查已同步的最新区块:
>>> eth.getBlockNumber ( console.log )
输出:
列出当前账户:
>>> eth.accounts
列出对等点:
>>> admin.peers
输出:
步骤8:设置RPC
打开JavaScript控制台,然后运行以下命令。
>>> admin.startRPC ( ‘0.0.0.0’, 8545 )
输出:
句法:admin.startRPC ( ‘ IP address ’, PORT number )
RPC将会开始在该IP和PORT上运行
如此一来,我们可以使用Postman进行简单的API调用,也可以使用任何编程语言进行任何REST API调用,并通过Ethereum Management API提取数据。
步骤9:在以太坊区块链上发送交易
好了,这一步才是真正有趣的。但是,这要花费一些以太币(Ether)。(要获得最好的东西总要付出点代价!)
交易与 eth_sendTransaction的计算可靠性是相同的,并且包含from 地址。passphrase 是tx.from的私钥,主要用于解密 。
只要passphrase解密了私钥,那么只有在那时交易才会被验证,才能登录用户并将交易发送到网络上。该帐户未在节点中进行全局解锁,因此无法在其他RPC调用中使用。
控制台:
personal.sendTransaction(tx, passphrase)
RPC: {“method”: “personal_sendTransaction”, “params”: [tx, string]}
在JavaScript控制台上:
>>> var tx = {from: “0x391694e7e0b0cce554cb130d723a9d27458f9298”, to: “0xafa3f8684e54059998bc3a7b0d2b0da075154d66”, value: web3.toWei(1.23, “ether”)}
undefined
>>> personal.sendTransaction(tx, “passphrase”)
要想了解更多Raspberry Pi在以太坊区块链上的玩法,可以参考:go-Ethereum Management APTs.
https://github.com/ethereum/go-ethereum/wiki/Management-APIs
以上就是本节的全部内容,让我们一起继续发明新东西吧!
程序员去阿里面试被怼:30岁还靠简历找工作,都是垃圾 大白话讲解比特币白皮书,十年后它依然是学习区块链的最佳资料,你真的读懂了吗? 2020年编程语言趋势解读:编程世界之未来握于谁手? 贾扬清:为什么说数据智能和云原生之间是“天作之合”? 【经典必看】14个实用的数据库设计技巧 自学编程、玩 vlog,90 后程序员们的冠军之路 警惕!程序员万字揭露被空姐骗到香港做传销的来龙去脉!