使用booster-http提供文件
随着booster-http的最新发布,Filecoin存储提供者如今可以通过HTTP协议提供区块和文件。
这意味着存储提供者(SP)可以使用工具生态系统来管理HTTP流量,如负载均衡器和反向代理,用户可以直接从浏览器请求上传的文件。
这些新功能扩展了booster-http现有的为一个片段或一个片段范围服务的功能。请跟随如下分步教程进行尝试。
提供Vincent
想象一下,我们想从存储提供者处提供Vincent Van Gogh的维基百科页面。首先需要打开维基百科,把HTML文件和资源保存至桌面上名为vincent的文件夹中。
做交易
为了准备上传的文件,我们需要将文件夹转换为CAR文件。我们可以使用go-car库中的car可执行文件:
$ go install github.com/ipld/go-car/cmd/car@latest
$ car c --version=1 --file=vincent.car ~/Desktop/vincent
$ car inspect vincent.car
Version: 1
Roots: bafybeidqindpi4ucx7kmrtnw3woc6jtl7bqvyiokrkpbbuy6gs6trn57tm
Root blocks present in data: Yes
Block count: 110
...
我们需要得到这个文件的commp,这样就可以和boost做交易了。我们可以使用stream-commp工具:
$ go install github.com/filecoin-project/go-fil-commp-hashhash/cmd/stream-commp@latest
$ stream-commp < vincent.car
CommPCid: baga6ea4seaqjaxked6ovoj5f3bdisfeuwtjhrzh3s34mg5cyzevgoebe7tdckdi
Payload: 1101978 bytes
Unpadded piece: 2084101 bytes
Padded piece: 2097152 bytes
CARv1 detected in stream:
Blocks: 110
Roots: 1
1: bafybeidqindpi4ucx7kmrtnw3woc6jtl7bqvyiokrkpbbuy6gs6trn57tm
Boost需要从web服务器下载文件,需安装一个简单的nodejs网络服务器:
$ npm install -g serve
$ serve
┌─────────────────────────────────────────┐
│ │
│ Serving! │
│ │
│ - Local: http://localhost:3000 │
│ - Network: http://192.168.1.2:3000 │
│ │
│ Copied local address to clipboard! │
│ │
└─────────────────────────────────────────┘
现在用boost做个交易:
$ boost deal --verified=false \
--provider=f012345 \
--http-url=https://localhost:3000/vincent.car \
--commp=baga6ea4seaqjaxked6ovoj5f3bdisfeuwtjhrzh3s34mg5cyzevgoebe7tdckdi \
--car-size=1101978 \
--piece-size=2097152 \
--payload-cid=bafybeidqindpi4ucx7kmrtnw3woc6jtl7bqvyiokrkpbbuy6gs6trn57tm
sent deal proposal
deal uuid: 346157ae-c1f4-4462-9b40-9bcd27754135
storage provider: f012345
client wallet: t3r3hr3xl27unpefvipve2f4hlfvdnq3forgr253z6dqahufvanatdandxm74zikheccvx74ys7by5vzafq2va
payload cid: bafybeidqindpi4ucx7kmrtnw3woc6jtl7bqvyiokrkpbbuy6gs6trn57tm
url: http://localhost:3000/vincent.car
commp: baga6ea4seaqjaxked6ovoj5f3bdisfeuwtjhrzh3s34mg5cyzevgoebe7tdckdi
start epoch: 135479
end epoch: 653879
provider collateral: 0
注意:我们推荐使用data-prep-tools为大规模交易做数据准备。
发布交易
我们将交易发布在存储提供者上,并等待其被移交给密封子系统。
在交易详情页面上,注意交易数据根CID与CAR文件中的有效载荷CID匹配:
提供交易
首先构建booster-http:
$ make booster-http
建立与boostd、lotus daemon和lotus-miner的连接:
$ boostd auth api-info --perm=admin
$ lotus auth api-info --perm=admin
$ lotus-miner auth api-info --perm=admin
Run booster-http:
$ ./booster-http -vv run --api-boost=$BOOST_API_INFO --api-fullnode=$FULLNODE_API_INFO --api-storage=$MINER_API_INFO
2023-04-03T14:20:40.806+0200 INFO booster booster-http/run.go:324 Using boost API at ws://127.0.0.1:1288/rpc/v0
2023-04-03T14:20:40.807+0200 INFO booster lib/api.go:38 Using full node API at ws://127.0.0.1:1234/rpc/v1`
2023-04-03T14:20:40.808+0200 INFO booster lib/api.go:64 Using storage API at ws://127.0.0.1:2345/rpc/v0
2023-04-03T14:20:40.811+0200 INFO booster lib/api.go:106 Miner address: f01000
2023-04-03T14:20:40.868+0200 INFO booster booster-http/run.go:210 Starting booster-http node on port 7777 with base path ''
2023-04-03T14:20:40.869+0200 INFO booster booster-http/run.go:217 serving IPFS gateway at /ipfs/ (serving blocks, CARs)
2023-04-03T14:20:40.869+0200 INFO booster booster-http/run.go:219 serving raw pieces at /piece/
现在我们可以通过HTTP获取文件的原始数据:
$ curl --output /tmp/museum.jpg "http://localhost:7777/ipfs/bafybeidqindpi4ucx7kmrtnw3woc6jtl7bqvyiokrkpbbuy6gs6trn57tm/vincent/Vincent%20van%20Gogh_files/Caf%C3%A9tafel_met_absint_-_s0186V1962_-_Van_Gogh_Museum.jpg**?format=raw**"
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 11830 100 11830 0 0 140k 0 --:--:-- --:--:-- --:--:-- 175k
$ open /tmp/museum.jpg
向网络浏览器提供文件
在上方curl请求中,我们在URL中添加了查询参数format=raw来获取文件的原始区块数据。如果我们尝试在网络浏览器中直接打开该文件,没有额外的查询参数,则会得到一个错误消息:
默认情况下,booster-http不提供可以被网络浏览器读取的文件格式。这是为了保护存储提供者不提供可能被标记为非法的内容。
为了使文件能够被提供给网络浏览器,请在启动时将–serve-files=true传递给booster-http。如此便可以直接从网络浏览器打开文件:
我们还可以浏览CAR档案中的所有文件:
注意:booster-http(和booster-bitswap)会使用维护在https://badbits.dwebops.pub/denylist.json上的排除列表自动过滤已知的标记内容。
开始之前,请确保更新至Boost最新版本(v1.7.2)并尝试新booster-http功能。您可以参考这篇博文中的示例,或者Boost文档中的http检索。
请关注我们的GitHub来了解Boost的最新信息。为助力项目未来持续发展,请使用Boost讨论区提供反馈和需求,您的意见有益于项目的茁壮成长,期待您的回复!