Total Pageviews

Showing posts with label ipfs. Show all posts
Showing posts with label ipfs. Show all posts

Sunday, 23 August 2026

IPFSBED - Decentralized IPFS File Hosting Service


 

English | 中文

Demo License IPFS

Overview

IPFSBED is a decentralized file hosting platform built on the InterPlanetary File System (IPFS). It allows users to upload and share files of various formats through the distributed IPFS network, making content accessible globally without relying on central servers.

IPFSBED Screenshot

Key Features

  • Decentralized Storage: Files are stored on the IPFS network rather than centralized servers
  • Multiple Upload Methods: Drag & drop, clipboard paste (all file types), or traditional file selection
  • Wide Format Support: Images, documents, videos, archives, and many other file types
  • Password Protection: Optional encryption for sensitive files with password protection
  • Batch Sharing: Share multiple files at once with a single link
  • Short URLs: Generate compact, easy-to-share URLs through integrated URL shortener
  • Folder Support: Upload entire folders while preserving directory structure
  • Multiple Gateways: Choose from various IPFS gateways for optimal access speed
  • Internationalization: UI available in 12 languages
  • No Registration: Use immediately without creating an account
  • Upload History: View, search, filter, export, and import your upload history

How to Use

Single File Upload

  1. Open IPFSBED
  2. (Optional) Enter a passphrase in the password field if you want to protect your file
  3. Upload a file by:
    • Clicking the upload area and selecting a file
    • Dragging and dropping a file
    • Pasting an image from clipboard (Ctrl+V)
  4. After uploading, you'll get a share link
    • With passphrase: share.html?share=encrypted_data (recipient needs the passphrase)
    • Without passphrase: share.html?d=compressed_data (publicly accessible)
    • Both formats automatically generate a short URL for easier sharing

Folder Upload

  1. Toggle "Folder Mode" using the switch at the top of the upload area
  2. Click the upload area and select a folder, or drag and drop a folder
  3. The entire folder structure will be preserved and uploaded to IPFS
  4. Share the generated link to allow recipients to browse and download the folder contents

Batch Sharing

  1. Upload multiple files or folders
  2. Select the items you want to share using the checkboxes
  3. Click "Batch Share"
  4. (Optional) Set a passphrase for this batch of files
  5. Click "Confirm & Copy Link"
  6. Share the generated link with recipients
    • With passphrase: batch-share.html?share=encrypted_data
    • Without passphrase: batch-share.html?d=compressed_data or batch-share.html?files=data (legacy format)

Accessing Shared Files

  1. Open the shared link
  2. If password-protected, enter the passphrase when prompted
  3. For batch shares:
    • You can select which files to download
    • Download individual files or all files as a ZIP archive
    • Copy links to individual files

Upload History Page

You can view your upload history by clicking the "上传历史" (Upload History) link in the top-right corner. The history page allows you to:

  • View all files and folders you have uploaded (stored in your browser)
  • Search, filter by type/time/encryption, and sort your uploads
  • Export your upload history as a JSON file, or import history from another browser
  • Delete individual records, batch delete, or clear all history
  • Copy share links or CIDs directly from the history page

Note: Upload history is stored locally in your browser and is not synced between devices.

Advanced Features

Short URL Generation

IPFSBED includes integration with a URL shortening service to make shared links more compact and easier to share. This feature:

  • Automatically generates short URLs for all shared content
  • Works for both single files/folders and batch shares
  • Can be toggled on/off with the "Short URL" option
  • Falls back to regular full-length URLs if the shortening service is unavailable

Multiple Gateway Support

IPFSBED offers various IPFS gateways for accessing your files. Different gateways may provide better performance depending on your location and network conditions.

Deployment with Cloudflare Pages

You can easily deploy your own instance of IPFSBED using Cloudflare Pages:

  1. Fork this repository on GitHub
  2. Log in to your Cloudflare dashboard and navigate to Pages
  3. Click "Create a project" and select "Connect to Git"
  4. Select your forked repository and configure the build settings:
    • Build command: npm run build (or leave empty if no build step)
    • Build output directory: / (root directory)
  5. In the Environment Variables section, add the following if you want URL shortening:
    • YOURLS_SIGNATURE: Your YOURLS API signature token (obtain it from https://yourdomain.com/admin/tools.php)
    • YOURLS_API_ENDPOINT: Your YOURLS API endpoint URL (e.g., https://yourdomain.com/yourls-api.php)

After deployment, your IPFSBED instance will be available at your-project-name.pages.dev. You can also configure a custom domain in the Cloudflare Pages settings.


Deployment with Tencent EdgeOne Pages

You can also deploy IPFSBED easily using Tencent EdgeOne Pages:

Use EdgeOne Pages to deploy

Click the button above to deploy this project to EdgeOne Pages.
You can adjust build settings and environment variables as needed in the deployment console.

Using Your Own IPFS Gateway

For better performance and control, you have to deploy your own IPFS gateway:

  1. Set up your own IPFS node with a public gateway (e.g. using Kubo)
  2. Configure CORS settings on your IPFS gateway to allow requests from your frontend domain:
    ipfs config --json API.HTTPHeaders.Access-Control-Allow-Origin '["https://your-frontend-domain.com", "https://your-project-name.pages.dev"]'
    ipfs config --json API.HTTPHeaders.Access-Control-Allow-Methods '["PUT", "POST", "GET"]'
  3. If using a separate gateway domain, also configure CORS headers in your web server (Nginx example):
    location /api/ {
        proxy_pass http://localhost:5001/;
        proxy_set_header Host $host;
        
        # CORS headers
        add_header Access-Control-Allow-Origin "https://your-frontend-domain.com" always;
        add_header Access-Control-Allow-Methods "GET, POST, PUT, OPTIONS" always;
        add_header Access-Control-Allow-Headers "DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,Authorization" always;
        
        # Handle preflight requests
        if ($request_method = 'OPTIONS') {
            add_header Access-Control-Allow-Origin "https://your-frontend-domain.com" always;
            add_header Access-Control-Allow-Methods "GET, POST, PUT, OPTIONS" always;
            add_header Access-Control-Allow-Headers "DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,Authorization" always;
            add_header Access-Control-Max-Age 1728000;
            add_header Content-Type 'text/plain charset=UTF-8';
            add_header Content-Length 0;
            return 204;
        }
    }

References

from  https://github.com/bestZwei/ipfsbed

------

示例:

 https://bafybeihamdzo7rthg7267zvokvfqdadnsaz4zkawrf3k4n7ohaeiy5fr6m.ipfs.inbrowser.link/

 https://bafybeig2vn3scrdqy6bp6wgfq7efqg5tvmxzkwth3mcevmo2kuwvlkmezu.ipfs.inbrowser.link/

Sunday, 4 February 2024

利用ipfs(星际文件系统)永久存储文件

 访问https://github.com/ipfs/ipfs-desktop/releases/download/v0.32.0/IPFS-Desktop-Setup-0.32.0.exe,下载程序并安装。

安装完成,点击启动进入状态页。然后点击左列中的”文件“,点击右上角的”导入“,选择要上传的文件,点击上传好的文件,点击右上角的”更多“,点击”分享链接“,复制链接,比如:

https://ipfs.io/ipfs/Qme4g16zxz5q9LGya14y1dLfGGTznuxa1EV4yyAuqgqdLj?filename=korean-kemusan.mp4 

https://ipfs.io/ipfs/QmcieHvzWb166xodNkWv8e2Zpe7N13RwezkoVj3JA7BjDS?filename=%E6%95%96%E5%8C%85%E7%9B%B8%E4%BC%9A.mp4

https://bafybeiexehyyprrinshvvmdbydq74ybhw55fndgndiddlxf75lmtow5bea.ipfs.dweb.link/

https://bafybeigo54gzg4pkqfkirubscz2tzwb3yxqkpfyjo763ifdtgthkpjncca.ipfs.dweb.link/

 即可得到所上传文件的直链地址。访问此地址,即可下载文件。如果是音频/视频文件,还可用iframe代码嵌入到网页,比如:

<iframe width="640" height="360" src="https://bafybeigvuxwgsptbkp4lwl3jd6adipj3ndy3323xaaymcau7am6mx37cre.ipfs.dweb.link" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe> 

不过,有时,"复制链接"所得到的链接无法访问,解决办法:

 点击左列中的”文件“,点击右上角的”导入“,选择要上传的文件,点击上传好的文件,点击右上角的”更多“,点击“复制CID",然后访问https://bestipfs.net/,在页面的输入框里,粘贴CID的值,回车,在出现的列表中,找到dweb.link ,点击那行右边的下载图标,浏览器会新开一个tab页面,复制这个tab页面的地址栏里的链接,比如:

https://bafybeigo54gzg4pkqfkirubscz2tzwb3yxqkpfyjo763ifdtgthkpjncca.ipfs.dweb.link/ ,这个链接就是文件的直链地址,是可以成功访问和下载的。

https://bafybeih5uskr6iwvbhgx6kt7fmeaqmjksdpecr7fjrlh4jcjg3x22kusfm.ipfs.dweb.link/

https://bafybeiaerevi2duiasestcghdkpcr7dbzpai24foozl4eskot7egtmmzzy.ipfs.dweb.link/ 

https://bafybeih6cnmunhjsptybfyd5pxmrfxtp3xqtjxeikfdd7pi6dus7xlvs6m.ipfs.dweb.link/

https://bafybeiabt2fkoudvzzmohcwdjmklvbgkeyf7evxoecnphbmwj3mrd7sbd4.ipfs.dweb.link/

https://ipfs.io/ipfs/QmX8jKjqmCiABbnBtxTdCChGAmJfgQR6Pea3xZu5e6Z97q?filename=china-economy.txt

 

-------------

相关帖子:

https://briteming.blogspot.com/2023/04/ipfs.html 

https://briteming.blogspot.com/2020/04/ipfs.html

在www.pinata.cloud上传文件,能轻易获得文件的直链地址:

https://coral-illegal-dove-430.mypinata.cloud/ipfs/QmQW9Cf8FBcqoF68uDE6DkRkqYECJ1BShWynqW1e7fnfT9

https://coral-illegal-dove-430.mypinata.cloud/ipfs/QmaC4fcYn4PLuWBri6B3tp2X3cjNnRUse852vUxwsFkQjJ

https://coral-illegal-dove-430.mypinata.cloud/ipfs/QmbV9gh6Lp7xSr4KGUM6uE4kuMuMuXYJd4rHRLBckJPNQT 

https://coral-illegal-dove-430.mypinata.cloud/ipfs/QmUoKTqD61XsL1dzfFE1cBrAe3nSL66nFTiMHiFarhCHbK

https://coral-illegal-dove-430.mypinata.cloud/ipfs/QmRmVLUE9XSR33cCMn8Md89US55nksAuwkLQU7XJtBSCo5


Wednesday, 5 April 2023

ipfs的公共网关

 

获取最新的可用网关

public-gateway-checker

ipfs 是什么,有什么用

你可以理解 ipfs 是一种可以复活的分享链接,当别人分享的文件成功的在 ipfs 网络中留存,只需要找到新的网关进行替换就可以复活无法打开的链接。

当我们发现网址无法打开的时候。仅需要更换他人部署的可访问的 ipfs 网关地址(域名部分)即可重新复活这个文件。 比如将特征地址前面的网址进行替换

这个文件的特征是:QmP8jG5xo9LuZ9uwCJqzJSNh18UssHFEkTTUHKmzn7hVGZ

将 /ipfs/ 前面的网址进行替换,如将 crustwebsites.net 替换为hardbin.com 就可以正常访问了。这里只是演示,如替换后仍无法打开,更换其他可访问的域名部分即可。

 https://crustwebsites.net/ipfs/QmP8jG5xo9LuZ9uwCJqzJSNh18UssHFEkTTUHKmzn7hVGZ

替换为

https://hardbin.com/ipfs/QmP8jG5xo9LuZ9uwCJqzJSNh18UssHFEkTTUHKmzn7hVGZ

------------------------------

Congratulations! Your content has been published to the IPFS gateway. It is now reachable by any node on the IPFS network. Share the following URL to share the content:

https://hardbin.com/ipfs/QmQWYw2xFCQ3zn2dYFxRoAPxooSqwEt4f1mMoydKfn6vUL/#6ieS5tsUKZtsKvvxq4M1R9QPmnjtfvPzPkAsTwduUU6E

The IPFS hash is QmQWYw2xFCQ3zn2dYFxRoAPxooSqwEt4f1mMoydKfn6vUL and the decryption key is 6ieS5tsUKZtsKvvxq4M1R9QPmnjtfvPzPkAsTwduUU6E.

Content on IPFS is not persistent and will eventually disappear from the IPFS network if it is not pinned anywhere (equivalent to "seeding" in bittorrent). To make the content persistent, you can either pin it on an IPFS node you control:

$ ipfs pin add QmQWYw2xFCQ3zn2dYFxRoAPxooSqwEt4f1mMoydKfn6vUL

Or use a service like Pinata to pin it for you:

https://pinata.cloud/

 

Saturday, 5 March 2022

brig - 一个基于ipfs的文件同步工具

brig is a distributed & secure file synchronization tool with version control. It is based on ipfs, written in Go. It supports Simplified git version control, Sync algorithm that can handle moved files and empty directories and files, Encryption of data in rest and transport + compression on the fly and lot more.

https://brig.readthedocs.io/
https://github.com/sahib/brig

Friday, 16 July 2021

Fuck 学习强国

 学习强国 懒人刷分工具

一款帮助成年人(或许未来包括小朋友)自动学刁的软件

下载

Windows  |  镜像1  |  镜像2

Mac  |  镜像1  |  镜像2

Linux x86_64  |  镜像1  |  镜像2

树莓派 (Linux armv7l)  |  镜像1  |  镜像2

app.asar 更新包  |  镜像1  |  镜像2
(记得校验sha256)

在 IPFS 上的镜像

ipns://QmXBUF7nWwQeQfdiewCFUtQvb5YDPdMZ81J1EyfXpbeLVw

IPFS镜像1  |  IPFS镜像2  |  IPFS镜像3  |  IPFS镜像4  |  IPFS镜像5

使用方法

  • 请解压后点击 Fuck学习强国.exe 来启动程序。
  • 对于Linux用户,请在使用前为程序添加可执行权限: chmod +x Fuck学习强国
  • 如果你没有登录账号,请在打开的页面中扫描二维码登录。
  • 等待打开的窗口中的程序自动完成“学刁”,你可以用这台电脑做其他事情,但不要 最小化 或 关闭 那个窗口(已经解决此问题)。

直接在命令行界面运行

以 Ubuntu 系统 (Linux x86_64) 为例

# 安装依赖
sudo apt update
sudo apt upgrade
sudo apt-get install -y \
    wget \
    unzip \
    libgtk-3-0 \
    xvfb \
    libxss1 \
    libnss3 \
    libasound2

Xvfb -ac -screen scrn 1280x2000x24 :9.0 &
export DISPLAY=:9.0

# 下载并解压程序
wget -O fuck-xuexiqiangguo.zip https://github.com/fuck-xuexiqiangguo/Fuck-XueXiQiangGuo/raw/master/Fuck学习强国-linux.zip
unzip -q -d ./fuck-xuexiqiangguo/ fuck-xuexiqiangguo.zip

cd fuck-xuexiqiangguo
chmod +x ./Fuck学习强国

# 运行程序
./Fuck学习强国 --headless

# 等待片刻,使用学习强国APP扫描屏幕上的二维码登录

命令行选项

使用 ./Fuck学习强国 --help 查看命令行选项帮助

更新方法

使用最新的app.asar替换resources/app.asar

对于Mac用户,请替换Contents/Resources/app.asar

version.json文件中有app.asar的sha256校验值,可自行核对。

from https://github.com/fuck-xuexiqiangguo/Fuck-XueXiQiangGuo

-----

学习强国 自动化 百分百正确、瞬间答题.

学习强国自动化脚本,解放你的时间!

使用Selenium、requests、mitmpoxy、百度智能云文字识别开发而成

使用说明

注:Chrome版本

image-20201207091125954

驱动会自动下载

首次使用会生成数据库文件db.db,用于提高文章、视频任务效率。

依赖安装

pip install -r requirements.txt

没有梯子的同学可使用国内阿里源:

pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple

使用方法

一定要找个网络好的地方,不然可能会出现错误

1、控制台运行:python main.py

2、选择选项(如非必要,尽量选择不显示自动化过程,以免误操)

等待片刻,连接学习强国服务器需要时间,等待时间与网速关系很大。

3、扫描二维码登录

4、选择任务(暂时只支持文章、视频、每日答题、每周答题、专项答题,后续功能正在开发,不过暂时也差不多够用了,45分呢),可多选,不过每个选项要用空格隔开,选择文章或视频时,等待时间稍久一点。

5、任务完成后需手动结束程序

使用示例

image-20210127134017543

image-20210207000645085

image-20210207000823436

image-20210207001005808

image-20210207001047255

image-20210207001122282

image-20210207001149837

image-20210207001303406

image-20210207001404717

百度智能云操作流程

1、登录控制台

点击→百度智能云

image-20210206231654368

2、创建应用

image-20210206235118045

3、选择选项

image-20210206235421370

image-20210206235616741

4、获取API Key、Secret Key

image-20210207000519698

版本说明

  •  v0.1:文章、视频,分数:25
  •  v0.2:优化文章、优化视频、每日答题(百分百正确),分数30
  •  v0.3:新增每周答题、专项答题(也是百分百正确),分数45
  •  v0.31:优化记录存储、优化目录结构、优化配置文件结构,增加进度条、增加自动下载驱动、增加系统兼容(Linux、Windows、MacOS)
  •  v1.0: 重构整个项目,增加持久化、驱动自动检测与谷歌浏览器匹配、驱动自主下载、更快的登录、文章和视频自适应、更快更精准的答题、加强的防检测、每个文件都有说明注释(便于各位大佬修改)
  •  v1.1: 由于专项答题视频答案匹配问题,现加入百度智能云的文字识别功能,可将视频中的答案提取出来,不过答案还需手动填写,因为提取的答案暂时没有好的办法过滤。至少不用看视频了是不2333.

附语

在持久化登录方面思考了很久,要不要做批量持久化?,后来想了想,本项目的目的是为了帮助没有时间做学习强国任务的个人节省时间,如果做了批量的话,恐怕会沦为某些人的牟利工具。所以最后决定只做单用户持久模式.

from https://github.com/lisztomania-P/learning-power 

 

Thursday, 1 July 2021

Matters文章现在可以一键在线转为墙内链接了

写了一个在线的网页,实现了只需要输入Matters的文章地址,即可自动列出墙内对应的可访问的IPFS链接,在线转换地址是: <https://matters2ipfs.js.org>, 代码也全部开源在Github上了。

由于本文主要面向大陆读者,所以本文使用简体字。

主要有两个功能:

  1. 最常用的就是把Matters的文章地址转换成IPFS的公共节点的地址,操作很简单。只需要进入https://matters2ipfs.js.org(建议收藏下这个地址,下次备用),在输入框里粘贴Matters的文章地址,然后点击Convert 按钮即可自动获取到该文章对应的IPFS公共节点地址列表,并自动检测你当前网络环境对列表里的每一个地址的可连接性,然后你就可以随便选择一个显示为 online 的链接地址,点击右边的复制按钮即可复制对应的IPFS地址。 (注意:这里的可连接性是基于你当前网络的,所以如果你正在使用翻墙软件,最好断开翻墙软件或者在别的未翻墙设备上打开https://matters2ipfs.js.org进行转换IPFS地址的操作。这样才能准确测试大陆网络是否能访问某个IPFS地址。还有小部分情况是:大陆网络可以访问通,但是这个地址被微信封了,这种情况的话,就只能换个其他能用的链接再试试了)
  2. 还有一个功能就是Matters2IPFS在转换IPFS地址的时候,会自动生成一个地址,进入这个地址之后会自动开始扫描该文章对应的IPFS可用地址,你可以选择把这个地址贴在文章的评论区,这样别人就可以随时点击链接进去查看这篇文章对应的哪个节点地址是可用的。你可以在Matters2IPFS的最底部看到这个地址和复制按钮。

最后说两句,分享Matters的IPFS地址文章有个问题,就是IPFS地址的内容只有文章原文,没有评论内容,甚至连原文链接都没有(这里我想建议Matters在生成IPFS内容的时候,专门加一个原文地址链接在里面,这样即使别人看到的是IPFS内容,也可以链接回Matters参与讨论)。Matters的评论区质量这么高,但是分享出去IPFS地址的文章,别人却找不到原文入口,也就不利于促成更多的讨论了。

欢迎在评论区提建议,投食MAT,Like或在Github上提pull request 

from https://matters.news/@deserve/matters%E6%96%87%E7%AB%A0%E7%8E%B0%E5%9C%A8%E5%8F%AF%E4%BB%A5%E4%B8%80%E9%94%AE%E5%9C%A8%E7%BA%BF%E8%BD%AC%E4%B8%BA%E5%A2%99%E5%86%85%E9%93%BE%E6%8E%A5%E4%BA%86-zdpuB1bvMnsAr4APk12FmdRxcqMaEsRo46vKE7p6Arvsg4YiF

-----------

把被封的网页地址转换为IPFS gateway地址的转换器csobot


之前听到网友有个需求:给出一个网页,把它传到IPFS,并吐出 IPFS gateway 地址,方便传播。

现在这个功能来了!

csobot,将帮助您完成这项工作 :joy:

这个机器人在Matrix平台提供服务(可能大家比较陌生,但为了实践去中心化精神,我开始减少使用中心化应用了)。

如果你下载 Riot.im 客户端(iOS,Google Play,F-Droid 和桌面版),注册登录之后,点击下方的 + 按钮进入房间:#csobot:matrix.org

在聊天框里输入:

ipfs-add  <url>

稍等片刻,即可得到5个该网页的 IPFS gateway 网址啦~

Riot.im 也提供web端(Riot.im 只是 Matrix 平台的一种客户端):https://riot.im/app

该房间免登录即可进入,若互动则需登录一下)

目前为初期功能,欢迎提需求和建议~(目前只会下载该网页本身,不会延伸下载第三方资源,所以有的图片若来源于别处则不会显示)

顺便强调一下 Matrix,如官网所述:

是一种开源的、安全的(端对端加密)、去中心化实时通讯网络架构。它能让你

像发邮件一样联络到对方,却不必要求使用统一的(客户端)应用;

可以自主选择你信任的服务器来提供通讯服务(也叫「邦联式」);

端对端加密级的保密性;

基于web的 HTTP API,保持开放性。

(更多内容将另文介绍)

Happy hacking

from https://matters.news/@uglybull/%E4%B8%80%E4%B8%AA-ipfs-%E8%BD%AC%E6%8D%A2%E5%99%A8-csobot-zdpuAyaW4TNhgGVwJpbbvuNgiS3Cs4WPL5XznNhJzKbqMrY2Y

-----------

如何使用自己的IPFS节点


在Matters推出自己的桌面版本之前,用户也可以下载IPFS生态中的工具,通过自己的节点浏览IPFS上的内容。尽管使用起来还很麻烦,还是推荐给有兴趣的朋友玩玩看。

下载本地节点

  1. 在这里下载自己操作系统对应版本的ipfs-desktop,一个封装了IPFS节点的简单桌面UI。另一个选择是Siderus Orion,和ipfs-desktop类似、都可用于文件分享,少了工具栏菜单,但是多了些文件管理的界面。
  2. 安装并启动程序。可以看到自己与多少临近节点相连,也可以用于传输文件。启动后,IPFS节点将会在本地8080端口打开一个http gateway。

安装浏览器插件

节点UI只是用于控制文件传输,但是无法浏览html文档,所以我们还需要一个浏览器插件,让浏览器渲染IPFS传输的html数据,从这里下载,支持chrome与firefox。

安装浏览器插件后,在IPFS节点运行状态下,插件会将所有包含 /ipfs/ 的链接跳转到本地8080端口,通过本地IPFS节点获取数据。这样打开Matters的公共节点文章url都会转到本地节点,也可以通过 http://127.0.0.1:8080/ipfs/QmXoypizjW3WknFiJnKLwHCnL72vedxjQkDDP1mXWo6uco/ 访问英文版维基百科。

from https://matters.news/@guo/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%E8%87%AA%E5%B7%B1%E7%9A%84ipfs%E8%8A%82%E7%82%B9-zdpuAsoEg4nrL4j5XvZVvj2YpFkJtWpAZ9fbAXR2E9YdDwgia

------------------------

IPFS開發者大會記錄

Matters正在建立一個分佈式的作品發佈网络,與其他分佈式应用一樣,核心問題是數據的存儲與傳輸。

IPFS生態中提供了一系列通用的工具和協議,用於建立各種不同類型的分佈式應用,使得IPFS成為了許多分佈式項目關注的重點。

這次與會的項目種類繁多,比如工廠中的物聯網、docker image分佈式分發、分佈式的npm與Guix、以太坊+IPFS域名管理、分佈式身份認證等等。我們也通過世界各地一百多位開發者,一窺分佈式技術與生態的進展。

介紹IPFS的基本結構與用法,讓與會者有基本的共識。

IPFS拆分下來,大體可以看做兩個子項目,IPLD與libp2p。

一般通過加密算法驗證的系統,數據都會存儲在通過哈希算法(hash)構造的樹狀結構中,被稱作哈希樹(hash tree,或默克爾樹 Merkle tree)。IPLD定義了數據之間相連的通用方式,負責建構、驗證及調取哈希樹,通用於以太坊、比特幣、git等數據結構。

libp2p則是IPFS之外應用最廣的一個子項目,從邊緣運算到新型的區塊鏈項目,都可以看到它的影子。libp2p主要負責處理客戶端之間通過不同端口和協議相互連接。這一部分原本非常繁瑣,而libp2p在不同的協議和算法之上建立了良好的抽象層,極大簡化了開發過程,也降低了不同協議之間轉換的成本。

除了workshop形式的課程外,三天的大會中有許多lightning talk,簡短地介紹不同的分佈式項目。此外,還有許多不同形式的分組討論,以頭腦風暴和hackathon的方式,理解或者解決某個具體問題,是與世界各地高手一起協作的好機會。

有一次我參加了DHT(distributed hash table,分佈式哈希表)的小組,同組的正好有OpenBazaar的開發者,向其他人很詳細地介紹了DHT的運作方式和局限。DHT是個分佈式key-value數據庫,也是“分佈式”的核心。目前IPFS採用的是Kademlia算法,簡單直接、容易實現,但是也有一些問題,比如單個文件訪問評率過高會讓部分節點過載。Coral DSHT算法的一些設計可以解決這個問題,也會很快引入到IPFS中。

另一次參加了關於動態數據的討論,同組的是radicle(一個非常酷的項目!)的開發者和IIT Bombay的CS教授,一起討論目前IPFS處理動態數據上的局限及可能的改良措施。目前IPFS中的動態數據,主要是通過IPNS提供指針,指向不同的IPFS哈希值,并由IPNS發佈者私鑰簽署驗證。但目前IPNS的更新速度非常緩慢。解決IPNS效率問題的一個方案是整合進PubSub機制,目前已經開發完成,還在測試之中。

從很多更有IPFS開發經驗的團隊那裡,我們也了解到了IPFS當前的其他局限,之後的計劃與設計中也會更加留心。

一個是網絡地址轉換(NAT)。當節點在一個內網中時,節點的IP由內網的路由分配,與外部其他節點的聯通需要轉換IP地址。但是目前IPFS的NAT功能尚不夠完善,特別是在需要穿透多層路由時,有時無法連接上其他節點。

另一個問題是內置的匿名機制。節點最後相連仍然需要通過IP地址,所以目前DHT中也是可以看到其他節點的IP的。一種解決思路是通過Tor或者I2P進行傳輸,與其他暗網一樣掩蓋用戶IP。但是這樣的就會犧牲掉傳輸性能,特別是對於Tor。這一部分的功能開發剛剛開始,但應該比較容易修補和整合。

不過關於匿名機制,葡萄牙的一位開發者開發了p3lib,提供了另一個思路。p3lib不是去掩蓋IP,而是去混淆不同節點想要獲取的數據包。這樣監聽者雖然能夠看到節點的IP,但是無法知道哪個節點獲取了什麼數據。這個方案目前已經可用了,並且似乎效率不錯。


IPFS camp的與會項目中,像Matters這樣直接面向普通用戶、解決日常問題的項目占極少數。大部分項目仍然很“技術”,要麼面向開發者、解決開發過程的問題,要麼是從已有的技術出發、暢想能夠實現什麼。這些項目雖然能夠推動分佈式技術本身的發展,但是本身很難在市場上立足。

雖然對於每個思考過網絡結構的人,都知道分佈式網絡會帶來更好的未來,但是如果分佈式網絡無法提供中心化網絡沒有的功能,市場仍然沒有動力去完成這個轉變。所以在一個unconf環節,我們幾個人在一起頭腦風暴了一下哪些場景中分佈式網絡必不可少。

大家都想到最顯著的場景是突破信息封鎖,及保證信息的保存。比特幣的流行和黑市交易以及跨境轉賬是分不開的,也算需要突破金融機構的封鎖。隨著各國政治獨裁與民族主義的興起,能夠更好保障信息自由和安全的技術會更加重要。Matters也是因為這個原因決定打造分佈式應用。

另一個巨大的應用場景是物聯網。這次看到的項目中,數據規模最大的當屬Actyx,用IPFS解決工廠中物聯網的問題。因為在工廠中有大量機器相互協作,並且有強烈的電磁場干擾,用中心化的路由和服務器既浪費帶寬,又容易被屏蔽。於是這些機器之間直接相連,通過IPFS進行高效快速的互動。

類似的場景還有很多,自動駕駛是快速湧現的一個。自動駕駛的場景中,每一條車流都是一個天然的計算機集群,相互之間需要交流與互動,天然適合形成無線網狀網絡。這一方面可以降低信號延遲、加快反應速度,另一方面可以節省整個地區所需要的信號帶寬、降低開支。雖然中心化架構仍然是大部分工程師最熟悉的方案,但有一些自動駕駛公司已經開始試驗分佈式網絡了。

另一個場景是局域網。分佈式網絡在沒有互聯網運營商提供服務時,仍然可以運作。在大規模集會或者突發災害中,會成為最可靠的信息通道。現在berty等分佈式即時通訊項目在通過libp2p搭建這樣的網絡。Nodle這樣的項目則更進一步,將區塊鏈加入到流量分享之中,等於讓物聯網中的每個設備都成為了一個微型的互聯網提供商。

另一個大家討論到的問題是,分佈式項目如何生存。畢竟,中心化的平台持有了所有的數據與權力,不管是從數據間接獲取利潤,還是從用戶直接獲取利潤,都相對容易。分佈式項目則會難很多,團隊如何生存就成了很大的問題。

這次到場的qri項目,為分佈式項目的生存提供了一個範例:讓軟件開源,并保證分佈式情況下可用;同時提供付費的中心化服務,用以增加效率,或者提供其他分佈式應用本身無法滿足的功能。

短短幾天下來,我對於IPFS團隊的能力和動機有了很多信任。Protocol Lab集結了一批分佈式領域有信仰、有能力的開發者,相信未來的網絡該是、也會是分佈式的,並聯手一步步把這個未來變成現實。

因為Filecoin的成功,IPFS社區已經開始有投機者出現,但總體還是維持了友善和純粹的技術氛圍。Protocol Lab的團隊本身也還沒有多少變現的想法,包括Filecoin獲得的資金也都依協議鎖死在Filecoin本身的開發上。

過去大半年我們在Matters網站上進行的牛刀小試,並未發現太大問題。但是下一步客戶端的開發,則一定會觸到IPFS的瓶頸,需要更多依賴和參與IPFS社區。Matters曾與IPFS團隊有過初步聯繫,這次也和IPFS瀏覽器部分的負責人專門討論了客戶端的計劃。他表示,因為IPFS團隊對中國的網絡環境了解有限,很需要我們來提issue,他也願意來推動Matters所需要的優化。

這三天初識社區,比較全面地了解了IPFS的進展,也建立了一些聯繫。客戶端的設計、後續與社區的協作,相信也都會因此更加順利。

from https://matters.news/@guo/ipfs%E9%96%8B%E7%99%BC%E8%80%85%E5%A4%A7%E6%9C%83%E8%A8%98%E9%8C%84-zdpuAmxB7trH3G78pgfLr4bDBhgA2mWJHWPP5XHog6CywrrLC

----------

從網站平台到分布式網絡

Matters平台雖然經歷了重新設計與開發,但是產品邏輯並未改變。平台仍是一個傳統的網頁,用戶仍需經由域名服務器查找到Matters服務器IP,再與服務器之間通過HTTP建立連接。盡管每一篇文章都已經發布至IPFS,囿於網頁形式,用戶仍然受制於中心化服務,用戶信息和金流體系也都還存儲在中心數據庫中。

但在重構的過程中,我們開始了分布式網絡的准備與鋪墊。Matters網站會持續作為內容發現的中心化窗口, 探索不同的內容發現與分潤的方式;與此同時,這個窗口會通向更大的網絡,任何人都可以加入,建立自己的窗口與社區、擁有自己的數據與回報。

接入一個分布式的網絡,意味著用戶需要下載一個客戶端,不管是以桌面程序還是手機App的形式。對於互聯網,這是網頁瀏覽器;BitTorrent或者eDonkey網絡,這是迅雷、電騾、快播等客戶端;對於比特幣或者以太坊,這是電子錢包。

對於Matters,這個客戶端需要讓用戶能夠不經中心節點交易、瀏覽多媒體網頁,讓創作者自主創作、打包、定價、分發與分潤。通過分布式賬本技術,我們能夠將創作者與讀者直接相連,既能像BitTorrent一樣高效地分發數據,又能像Amazon等中心化的服務一樣維持一個良性的版權生態。長遠來看,這個客戶端也需要和諸多快速興起的分布式內容庫聯通,讓用戶能夠隨時調取屬於全人類的共同知識庫,不管是維基百科、科研數據還是研究論文。

在Matters網站繼續進行迭代的同時,Matters工程團隊將會著手試驗這樣一個客戶端,從桌面版開始。盡管具體的產品邏輯和形態還在討論之中,技術層面已經有了不少線索。分布式存儲功能會由目前已經投入試驗的IPFS提供,而分布式賬本功能則會是目前相對成熟的區塊鏈形式(與合作伙伴Likecoin聯手)。同時,我們在原型階段會采用Electron.js平台,以便復用網站平台中成熟的UI與業務邏輯代碼。

新版上線之前,我們已經將Matters所有文章重新發布至IPFS,一方面調整了版式,另一方面對圖片也進行了分布式存儲。同時,我們也重新設計了文章鏈接:文章鏈接末尾長度為49的字符串,是文章元數據在IPFS中的哈希值,包含文章的作者、發布平台、文章指紋等信息。例如,用戶可以復制文章的元數據哈希值,替換到以下鏈接(或者任何IPFS節點)中並打開 ”https://ipfs.io/api/v0/dag/get?arg=${哈希值}/author”,就可以看到作者的相關信息。這意味著,我們設想的桌面版本可以不經服務器,直接打開Matters文章的鏈接,調取作者與內容數據。

Matters設想中的分布式客戶端架構。綠色部分是分布式的核心功能,黃色部分是中心化的附加功能。客客戶端通過IPFS與以太坊實現核心功能,而搜索、推薦等本質上中心化的功能則作為附屬,依舊由Matters服務器提供。GraphQL負責整合遠程與本地模式,讓應用在能夠在連接服務器與斷開服務器之間切換。

不過,這裡的構想僅僅是大致脈絡,產品邏輯也還在探討之中。一個能夠支持版權的分布式網絡是一種嶄新的交互形態,技術與設計層面都有許多未知需要摸索。我們希望與用戶一起來定義這種全新的交互,為中文網絡世界提供更可靠的傳播工具和更合理的游戲規則。

盡管分布式網絡有潛力帶來一個更加穩定、開放與公平的賽博空間,對於能夠選擇中心化服務的單個用戶,分布式應用並不一定帶來體驗的提升,這是分布式應用項目的難題。但在特定的應用場景中,分布式網絡是不可替代的工具,正如跨境轉賬之於比特幣、文件共享之於BitTorrent、物聯網之於無線網狀網絡。

Matters設想的內容與作者的分布式網絡,甚至在全球互聯網割裂為國家局域網時,仍能正常運作;但在網絡信息相對自由的今天,我們的產品不僅要解決技術問題,更要有新穎的商業模式和多樣的應用場景,才能與傳統互聯網產品競爭。

這些問題需要更大範圍的論證與不同領域的思路,問題的答案也該由社區共同決定。所以,Matters的產品與工程團隊會在開發之余,以這樣日志的方式向大家同步最新想法,希望以此激起討論和暢想,更希望獲得社區中各路高手的協助。既關乎技術路線,也關乎產品形態。

在你的想像中,這樣一個分布式網絡需要什麼樣的工具,又有什麼樣合適的應用場景?

from https://matters.news/@guo/%E5%B7%A5%E7%A8%8B%E6%97%A5%E8%AA%8C-3-19-%E5%A6%82%E4%BD%95%E5%BB%BA%E7%AB%8B%E5%88%86%E5%B8%83%E5%BC%8F%E7%9A%84%E7%89%88%E6%AC%8A%E7%94%9F%E6%85%8B-zdpuB3c76Te7qwTzvmoNSNHCiDSrcQq4QB4rcKSN5hewExKto