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:/<hash>

列出目前 pin 的内容

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

移除 pin 的内容

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

配合 ENS 使用

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

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

加密

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

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

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

密码访问控制

交互式的设置密码

$ ./swarm access new pass <encrypted-reference>

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

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

读取内容

如上面的例子,自己搭建节点来获取内容。默认地址为: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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,884评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,347评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,435评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,509评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,611评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,837评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,987评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,730评论 0 267
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,194评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,525评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,664评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,334评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,944评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,764评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,997评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,389评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,554评论 2 349

推荐阅读更多精彩内容