树莓派开发环境搭建(树莓派5)

在本系列文章的第一部分中,我们将在一台树莓派Pi3ModelB上安装并运行一个以太坊区块链客户端。毫无疑问,区块链绝对是当前的热点。之所以会这样,很大程度上是因为比特币以及其他加密货币让很多人一夜暴富。但是,区块链的应用并不仅限于加密货币领域,考虑到其去中心化以及防篡改等特性,区块链技术还可以用到IoT应用中。因此,除了加密货币和安全交易之外,以太坊平台还可以提供一种分布式的计算平台。在这篇…

大家好,又见面了,我是你们的朋友全栈君。

树莓派开发环境搭建(树莓派5)

在本系列文章的第一部分中,我们将在一台树莓派Pi 3 Model B上安装并运行一个以太坊区块链客户端。

毫无疑问,区块链绝对是当前的热点。之所以会这样,很大程度上是因为比特币以及其他加密货币让很多人一夜暴富。但是,区块链的应用并不仅限于加密货币领域,考虑到其去中心化以及防篡改等特性,区块链技术还可以用到IoT应用中。因此,除了加密货币和安全交易之外,以太坊平台还可以提供一种分布式的计算平台。

在这篇文章中,我们将会对以太坊架构进行分析,并了解其核心思想和功能组件,最后在树莓派上安装相应的客户端软件。需要声明的是,我并不打算用它来挖矿,因为挖矿需要强大的GPU支持,但树莓派只能创建一个简单的实验沙箱,而且我们也只是为了验证区块链技术可以应用到嵌入式平台上。

以太坊101

话不多说,下面给出的是一份以太坊智能合约样本的源代码(来自ethereum.org):

contract mortal {

/* Define variable owner of the typeaddress */

address owner;

/* This function is executed atinitialization and sets the owner of the contract */

function mortal() { owner = msg.sender; }

/* Function to recover the funds on thecontract */

function kill() { if (msg.sender == owner)selfdestruct(owner); }

}

contract greeter is mortal {

/* Define variable greeting of the typestring */

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;

}

}

区块链是一种分布式的记账系统,一般通过对等网络进行管理,并且随着记录和区块成功添加到区块链网络中,其大小也会不断增长。一个区块通常包含交易数据以及时间戳,并且会通过哈希算法进行安全加密,数据一旦成功提交到区块链中,将无法再被修改。

以太坊平台拥有自己的加密货币,我们称之为以太币。但是它还基于区块链技术创建了一种针对智能合约的去中心化平台,智能合约对象中包含的代码函数可以在区块链中“生存”,并于其他合约进行交互,制定决策,存储数据,或向其他人发送以太币。

智能合约是用一种名叫Solidity(基于JavaScript)的编程语言实现的,Solidity编译器可以将智能合约编译成字节码(跟JavaScript、Python、Java或Android类似),然后通过以太坊虚拟机(EVM)执行。需要注意的是,在智能合约中进行交易是有成本的,这部分内容我们之后会进行讨论。

目前市场上有好几款不同的以太坊客户端(基于Geth,采用Go语言开发),其中的某些能够挖以太币,有些则是单独的挖矿软件。除了主要的以太坊区块链网络和矿池之外,还有很多用于实验和测试的网络,当然了,你也可以创建自己的私有区块链网络。

安装Geth

树莓派开发环境搭建(树莓派5)

假设我们现在已经安装好了Raspbian,我们需要将已安装的数据包软件更新至最新版本:

$ sudo apt-get update

$ sudo apt-get dist-upgrade

当我第一次尝试编译以太坊客户端时,出现了内存不足的情况,为了将RAM腾出来给这种内存密集型任务,最好的方法就是减少分配给GPU的内存空间。如果你不需要图形桌面,你可以将系统以命令行界面启动。

$ sudo raspi-config

树莓派开发环境搭建(树莓派5)

接下来,安装相应的依赖组件:

$ sudo apt-get install git golang libgmp3-dev

接下来,从GitHub获取Geth的官方源码(采用Go语言实现的官方以太坊源码),对代码进行编译并将可执行程序拷贝到/usr/local/bin/。

$ mkdir src

$ cdsrc

$ gitclone -b release/1.7 https://github.com/ethereum/go-ethereum.git

$ cdgo-ethereum

$ make

$ sudo cp build/bin/geth /usr/local/bin/

创建账号并进行测试

树莓派开发环境搭建(树莓派5)

使用Geth创建一个新的账号:

$ geth account new

接下来程序会创建一套新的加密密钥,并使用了密码来保护私钥的安全。需要注意的是,如果你想用这个账号来挖矿并进行交易的话,你需要确保已经备份了你的密钥并防止你的私钥被他人访问。

现在,我们需要运行节点。

树莓派开发环境搭建(树莓派5)

$ geth –syncmode light –cache 64 –maxpeers 12

如果我们在不使用任何参数的情况下运行Geth,它将开启一个节点并尝试跟整个公共区块链主网进行数据同步,数据大小在50GB以上,并且还会继续增长,因此不适用于嵌入式计算机。所以说,我们准备以轻量级同步模式运行该节点,这种模式只会获取区块Header信息。

按下CTRL+C后就可以退出节点了,我们可以在设备启动时让它以服务的形式运行:

$ sudo vi /etc/systemd/system/geth@.service

然后添加下列代码:

[Unit]

Description=Ethereumdaemon

Requires=network.target

[Service]

Type=simple

User=%I

ExecStart=/usr/local/bin/geth–syncmode light –cache 64 –maxpeers 12

Restart=on-failure

[Install]

WantedBy=multi-user.target

保存文件,下列命令可以让以太坊节点以“pi“用户身份运行:

$ sudo systemctl enable geth@pi.service

$ sudo systemctl start geth@pi.service

树莓派开发环境搭建(树莓派5)

接下来,我们可以使用下列命令绑定节点:

$ geth attach

这样我们就能得到一个交互式JavaScript控制台,这里我们可以调用任何函数,比如说:

>eth.accounts

该命令可以输出当前账号列表:

树莓派开发环境搭建(树莓派5)

或者获取已连接节点的信息:

>admin.peers

需要注意的是,轻量级客户端协议仍处于开发阶段,因此某些实验性的功能可能还无法完美支持。

总结

现在,我们已经安装好客户端软件了,并成功创建了一个账号,然后开启了一个可通信节点。接下来在本系列文章的第二部分中,我们将组建一个私有区块链网络,并进行实际的交易活动。稍等片刻,我们马上就来!

* 参考来源:rs-online,FB小编Alpha_h4ck编译,转载自FreeBuf.COM

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/128673.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 创建Google网站地图Sitemap.xml建议收藏

    Sitemap.xml是google搞出来的,也就是网站地图,不过这个网站地图是用xml写的,而且要按google的标准来写,并且要将写出来的这个文件sitemap.xml上传到自己的服务器空间中去。

    2021年12月20日
  • 【SpringBoot】25、SpringBoot中使用Quartz管理定时任务

    【SpringBoot】25、SpringBoot中使用Quartz管理定时任务定时任务在系统中用到的地方很多,例如每晚凌晨的数据备份,每小时获取第三方平台的Token信息等等,之前我们都是在项目中规定这个定时任务什么时候启动,到时间了便会自己启动,那么我们想要停止这个定时任务的时候,就需要去改动代码,还得启停服务器,这是非常不友好的事情直至遇见Quartz,利用图形界面可视化管理定时任务,使得我们对定时任务的管理更加方便,快捷一、Quartz简介Quartz是一个开源的作业调度框架,它完全由Java写成,并设计用于J2SE和J2EE应用中。它提供了巨大的灵活性而不牺牲

    2022年10月22日
  • css修改滚动条样式可以兼容ie吗_css设置滚动条

    css修改滚动条样式可以兼容ie吗_css设置滚动条写过挺多项目都需要改变滚动条的默认样式并不想单独下载和引入插件因此纯css修改默认滚动条的样式这次算统一整理下方法,直接上代码。&::-webkit-scrollbar{//滚动条的背景width:16px;background:#191a37;height:14px;}&::-webkit-scrollbar-track,&::-webkit-scrollbar-thumb{border-radius:999px;

    2022年10月20日
  • NAVCAT15 激活码【中文破解版】

    (NAVCAT15 激活码)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.cn/100143.html2KLKA7BQFO-eyJsa…

  • java打印数组_Java中打印数组内容的方式有哪些?

    java打印数组_Java中打印数组内容的方式有哪些?下面是几种常见的打印方式。方法一:使用循环打印。publicclassDemo{publicstaticvoidmain(String[]args){String[]infos=newString[]{“Java”,”Android”,”C/C++”,”Kotlin”};StringBufferstrBuffer=newStringBuffer();for(…

  • batch内负采样

    batch内负采样一般在计算softmax交叉熵时,需要用tf.nn.log_uniform_candidate_sampler多itemid做随机负采样。但是在类似dssm这种双塔模型中,item侧特征除了itemid外,还有其他meta特征,此时负样本对itemid做负采样后,还需要取相应负样本的meta特征。可是在tf训练数据中并不方便建立itemid与各类meta特征的映射表。为了解决dssm类模型的负采样问题,可以取一个batch内其他用户的正样本做为本用户的负样本,以解决负采样meta特征问题。好了,废话少说,

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号