Swarm区块链分布式存储使用

往期文章

寻找IOS相册中相似图片
NSNotification与类对象,实例对象
iCloud-Documents存储
CocoaPods私有源搭建

简介

Swarm 是一种去中心化的数据存储和分发技术,通过为去中心化的互联网提供可扩展的底层基础设施,通过点对点的存储和通信系统来延展区块链,从而让“世界计算机”成为现实,这台“世界计算机”将可以作为去中心化应用程序的操作系统和部署环境,Swarm 可以提供不间断的服务,更有效地抵御网络中断或有针对性的 DoS 攻击。

更详细资料请查看白皮书

基于测试网的Swarm节点搭建

搭建节点的系统是ubuntu-21.04。配置为1核,1G内存,25 SSD固态

安装bee-clef

安装外部签名者bee-clef。

wget https://github.com/ethersphere/bee-clef/releases/download/v0.4.13/bee-clef_0.4.13_amd64.deb

sudo dpkg -i bee-clef_0.4.13_amd64.deb
复制代码

查看bee-celf服务是否运行

systemctl status bee-clef
复制代码

看到如下输出,则证明服务成功运行

image.png

安装bee节点客户端

wget https://github.com/ethersphere/bee/releases/download/v1.0.0/bee_1.0.0_amd64.deb
sudo dpkg -i bee_1.0.0_amd64.deb
复制代码

安装完成之后使用命令查看服务是否运行

systemctl status bee-clef
复制代码

看到如下输出则证明节点成功运行

image.png

修改配置文件

在/etc/bee中找到bee的配置文件

将网络设置为测试网络

network-id: 10   //1为主网络,10为测试网络(goerli)
mainnet: false   //将mainnet设置为false
复制代码

设置本机广播地址

nat-addr: "xxx.xxx.x.xxx:1634"
复制代码

设置RPC交换端点,关于交换端点的选择,你可以选择 infura中的Ethereum交换端点,也可以自建一个本地RPC端点,不过本地的RPC端点需要同步大量的区块链信息。

进入仪表盘之后,选择Ethereum网络,然后新建一个项目。

image.png

点击进入项目页面,选择设置页面。在ENDPOINTS一栏选择gorli网络,然后复制下面的交换端点(https或者wss:/)

image.png

在配置文件中输入,刚刚得到的交换端点。

swap-endpoint: wss://goerli.infura.io/ws/v3/你的api
复制代码

修改完bee.yaml配置文件之后。

使用命令

systemctl restart bee 
复制代码

重启bee服务。

检查bee运行状态

尝试链接本地1633端口,查看bee是否已经进入Swarm网络

curl http://localhost:1633
复制代码

得到如下输出

Ethereum Swarm Bee
复制代码

则证明bee此时正在监听

查看bee日志输出

journalctl -u bee -f
复制代码

通过bee向swarm网络上传或者下载数据

swarm 包含我们所有节点提供的所有存储空间的总和,称为 DISC(Distributed Immutable Store of Chunks)。将数据写入这个分布式存储的权利由所附的邮票决定。

所有节点的存储空间被分为2 ^ 16 = 65536个bucket,上传时,每个文件都被分成 4kb 块,并根据其地址分配给特定的存储桶。

每个桶中允许的块数计算为 a 2^(batch depth – bucket depth) = 2^(batch depth – 16)

其中batch depth为我们指定的深度,比如我们制定桶的深度为20,那么带入公式可得每个桶存放的数据块为2^4个,每块数据大小为4K,那么得一个桶存储的数据为16KB。

申请邮票

购买1BZZ,并且深度为20的邮票

curl -s -XPOST http://localhost:1633/stamps/1/20
复制代码

返回数据为。

{"batchID":"f24bd01ce6d9b5196ae055d46d4f121ce58503309ac7ee2325feed6bfa2220c9"}
复制代码

batchID就是邮票ID

查看获取所有的邮票批次以及状态

{
  "stamps": [
    {
      "batchID": "6242b702f2c186354e7f98f55d3b11dfdbdc3f66dc67414729bf53ee33cb973f",
      "utilization": 1,
      "usable": true,
      "label": "",
      "depth": 20,
      "amount": "1",
      "bucketDepth": 16,
      "blockNumber": 5018024,
      "immutableFlag": false
    },
    {
      "batchID": "f24bd01ce6d9b5196ae055d46d4f121ce58503309ac7ee2325feed6bfa2220c9",
      "utilization": 0,
      "usable": true,
      "label": "",
      "depth": 20,
      "amount": "1",
      "bucketDepth": 16,
      "blockNumber": 5022967,
      "immutableFlag": false
    }
  ]
}
复制代码

batchID: 为邮票批次ID
utilization:邮票批次使用率,如果使用该邮票上传一次文件,则为1,依次类推
amount:为该邮票批次剩余金额
depth:为存储深度。

上传数据

上传一张图片

curl --data-binary @my.jpg  -H "Swarm-Postage-Batch-Id: 78a26be9b42317fe6f0cbea3e47cbd0cf34f533db4e9c91cf92be40eb2968264" -H "Content-Type: video/jpg" "http://localhost:1633/bzz?name=my.jpg"
复制代码

下载数据

上传成功之后返回引用ID

{"reference":"f1519bce397b3abbe5aee1141a6f93e725bb595e791b23354e4683841b0f5c02"}
复制代码

通过访问 localhost:1633/bzz/reference 即可向Swarm网络检索自己的资源

总结

以上就是Swarm网络节点的搭建与使用的简单教程。由于Swarm网络刚刚新起,很多接口都不完善,节点数量也不是很多。所以尽量不要将自己的重要数据保存在Swarm网络上。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享