以太坊开发7-swarm存储网络使用
说实话,swarm的资料比较难找,倒是IPFS的比较多一点。最后只在Medium找到了一些,本篇文章就是在实践其中的一些项目,并通过这样来学习swarm。
还有一些帮助理解的资料:
1. Ethereum Swarm是什么
Ethereum swarm是一个分布式文件存储系统,开发这个项目是因为区块链中的数据存储是昂贵的,它的不同之处在于它会激励一部分参与者提供他们的存储资源,以此来维持存储网络的稳定运行,当然,目前激励机制还没有上线。
撰写本文时,找到的最新版本是POC3(Proof-of-Concept Release 3),发布于June 21, 2018。关于该版本和该项目的详细信息见:
Announcing Swarm Proof-of-Concept Release 3
Swarm alpha public pilot and the basics of Swarm
2. 安装Swarm
详细的安装方式见这里,这里只介绍在Ubuntu上通过PPA安装,虽然这种方式安装的是stable版本,但版本号同样在0.3,所以就不使用更麻烦的自编译源码安装了。
|
|
安装完成后查看swarm版本
|
|
3. 配置Swarm网络
3.1 第一个swarm节点
运行swarm需要以太坊账户,我们通过geth命令来创建账户,需要已经进行过geth安装。
|
|
将返回的账户地址设置为环境变量BZZKEY1
,然后启动第一个节点。
|
|
- bzzaccount:设置节点账户地址
- datadir:设置swarm节点存储数据的文件目录
- keystore:账户密钥所在文件目录,设置该选项后就可以使用密码来解锁账户
- ens-api:将此项设置为空,swarm将不会连接到区块链,并在无区块链环境下运行
- bzzport:设置用来上传和下载的端口地址
运行单节点的话以上设置已经足够了,但是运行多节点的话还需要其它一些设置,并不能简单的重复第一个节点的配置过程。
3.2 更多swarm节点
启动多个节点的时候不能仅仅改动--bzzport
参数,还需要改动UDP端口号,这一点文档中没有提到,启动第二个节点的示例如下:
|
|
3.3 连接swarm节点
现在节点都已经启动,我们需要把它们连接起来以完成彼此通信。为了完成这一点,我们需要手动地将swarmNode2的引导节点连接到swarmNode1。
首先寻找swarmNode2的引导节点地址,运行如下命令。
|
|
- exec:执行JavaScript语句(只能结合console/attach使用)
- bzzd.ipc:运行swarmNode2生成的文件,结束运行该文件消失
复制结果并添加到如下命令,连接两个节点
|
|
your enode address
即我们上面得到的
|
|
使用的时候需要去掉?discport=0
4. 测试网络连接
现在我们来测试两个节点是否已连接。使用如下命令从swarmNode1上传文件fileToUpload.txt
,文件内容为test file
,上传成功将返回文件哈希
|
|
复制该哈希作为地址从swarmNode2查询
|
|
该条命令将返回哈希对应的文件内容test file
可查看swarm文档阅读更多细节