往期文章
寻找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
复制代码
看到如下输出,则证明服务成功运行
安装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
复制代码
看到如下输出则证明节点成功运行
修改配置文件
在/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网络,然后新建一个项目。
点击进入项目页面,选择设置页面。在ENDPOINTS一栏选择gorli网络,然后复制下面的交换端点(https或者wss:/)
在配置文件中输入,刚刚得到的交换端点。
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网络上。