Swarm 学习记录

Swarm

Swarm 也是一个去中心化存储的项目。以太坊生态中比较重要的一个项目。借着这次在DevCon 5上Swarm的worshop机会,刚好记录一下对Swarm的学习。

是这个Swarm

初识 Swarm

从公开资料可以看到,Swarm 和 IPFS 是比较类似的一个项目,也是去中心化存储,在之前学习记录中也提到过 (用IPFS来保存和共享文件)。

相同点是:

  • 均为 P2P 网络下的去中心化存储项目
  • 可以用哈希来作为文件寻址方式
  • 都还没有完成激励层 -_-

Swarm 不太一样的地方在于:

  • 和以太坊生态绑定比较强,可以将 ETH 生态作为其激励层
  • IPFS 强调要取代 HTTP 和 CDN;Swarm 对标 BitTorrent
  • 正因为对标了 BT,有些说法是Swarm对小文件共享有比较低的延迟

网络信息

网络ID 网络名 网络类型 维护者 网关地址
Network ID #4 EF-TestNetwork 公共测试网 Swarm Core-Team / EF Dev OPS https://swarm-gateways.net

基本搭建步骤

下载:

官网下载地址:
https://ethersphere.github.io/swarm-home/downloads/

启动

以下操作步骤来自于DevCon上的workshop

$ ./swarm \
  --datadir $PWD/data \
  --ens-api test:e7410170f87102df0055eb195163a03b7f2bff4a@https://rinkeby.infura.io/v3/b41676eda6c749768d51c615fc57bc6c \
  --ws --wsorigins='*' --wsapi=admin,net,debug,bzz,stream,accounting,swap \
  --debug \
  --verbosity 3 \
  --sync-mode push \
  --bootnodes enode://30d8e3ab25ab1fc4bc020f79048d5d138f1362269158a3f2b8e69a242c59155376d8868747869f10a6994d882cf34d45536d90aa9a51041e1f76796e3cb97b1a@192.168.55.103:30300 \
  --enable-pinning \
  --bzznetworkid 61


## One liner (if you're having problems copying the previous command)
$ ./swarm --datadir $PWD/data --ens-api test:e7410170f87102df0055eb195163a03b7f2bff4a@https://rinkeby.infura.io/v3/b41676eda6c749768d51c615fc57bc6c --ws --wsorigins='*' --wsapi=admin,net,debug,bzz,stream,accounting,swap --debug --verbosity 3 --sync-mode push --bootnodes enode://30d8e3ab25ab1fc4bc020f79048d5d138f1362269158a3f2b8e69a242c59155376d8868747869f10a6994d882cf34d45536d90aa9a51041e1f76796e3cb97b1a@192.168.55.103:30300 --enable-pinning --bzznetworkid 61

检查

检查 Swarm 节点是否已在 Kademlia 列表中

$ echo '{"jsonrpc":"2.0","method":"bzz_hive","id":1}' | websocat ws://127.0.0.1:8546/ -n --one-message --origin localhost | jq .result | xargs printf

=========================================================================
commit hash: c1c233d179470661262ff22378dbe4f524c8c5f3
Wed Oct  2 11:40:29 UTC 2019 K???MLI? hive: queen's address: c661b1e8f6333565bff54ac54d7116b4b663a104f6bf878b2aad3d949ed437a7
population: 9 (9), NeighbourhoodSize: 2, MinBinSize: 2, MaxBinSize: 4
000  5 1da7 13c9 1348 5242          |  5 1da7 (0) 13c9 (0) 1348 (0) 5242 (0)
001  2 87f6 8b97                    |  2 87f6 (0) 8b97 (0)
============ DEPTH: 2 ==========================================
002  0                              |  0
003  0                              |  0
004  1 c9a7                         |  1 c9a7 (0)
005  1 c1d6                         |  1 c1d6 (0)
006  0                              |  0
007  0                              |  0
008  0                              |  0
009  0                              |  0
010  0                              |  0
011  0                              |  0
012  0                              |  0
013  0                              |  0
014  0                              |  0
015  0                              |  0
=========================================================================

需要安装 jqwebsocat

上传文件

swarm up 命令上传文件

$ ./swarm up --progress ~/Downloads/Big_Buck_Bunny_720_10s_30MB.mp4

Swarm Hash: 8264ca38c2d6c84955dd8dd3fa68d8411b2b34a447901bb59ee7b959110544d5
Tag UID: 2451023057
Upload status:
Syncing 7894 chunks       0s [============================================================>-] 98 %
Done! took 8.367633s
Your Swarm hash should now be retrievable from other nodes!

下载

有了文件哈希之后就可以下载了。这是从本地节点下载的示例:

wget http://localhost:8500/bzz:/8264ca38c2d6c84955dd8dd3fa68d8411b2b34a447901bb59ee7b959110544d5/

pin

pin 是一个目前比较有用的命令。因为 Swarm 目前还没有激励层但用户可以随意上传文件,所以目前默认模型是 FIFO 的方式。根据整体网络的存储容量,上传的文件可能会在几天后就被删除掉。

而如果想要文件能够长久的访问,就可以使用 pin

上传时 pin

可以在上传文件时增加 pin 这一个参数

$ ./swarm up --pin your_file.mp4

上传后 pin

也可以在上传后去 pin 任意一个文件,只要你的节点上有这一文件就行。

$ curl -X POST http://localhost:8500/bzz-pin:/

列出目前 pin 的内容

$ curl -X GET http://localhost:8500/bzz-pin:/

移除 pin 的内容

$ curl -X DELETE http://localhost:8500/bzz-pin:/

配合 ENS 使用

首先要通过 ENS (https://manager.ens.domains)增加一条内容记录,例如:bzz://<哈希值>/

然后就可以用通过域名来访问在 Swarm 上的文件了,例如:http://localhost:8500/bzz:/basicworkshop.test/

加密

除了普通均可访问的文件以外,还可以将文件加密

$ ./swarm up --encrypt ~/Desktop/secret-file

加密后的哈希比一般的要长,因为解密密钥也会成为哈希的一部分

密码访问控制

交互式的设置密码

$ ./swarm access new pass 

或者也可以使用文件来设置

$ echo "supersecretpassword" > password.txt
$ ./swarm access new pass --password password.txt 

读取内容

如上面的例子,自己搭建节点来获取内容。默认地址为:http://localhost:8500/

也可以直接用网关来访问:https://swarm-gateways.net/

参考资料

[1] What is the difference between Swarm and IPFS?
[2] What is Decentralized Storage? (IPFS, FileCoin, Sia, Storj & Swarm)
[3] DevCon 5 的 Swarm Workshop
[4] Swarm Guide

你可能感兴趣的:(Swarm 学习记录)