Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
This section covers the current experimental features available in Boost
Step by step guide to various Boost tasks
[Dealmaking]
RemoteCommp = trueThis section describes how to upgrade your lotus-miner markets service to boostd, as well as how to roll-back if you are not happy with boostd



boostd backup <backup directory>boostd backup --offline <backup directory>boostd restore <backup directory># grab filter program
go get -u -v github.com/Murmuration-Labs/bitscreen
# add it to both filters
Filter = "/path/to/go/bin/bitscreen"
RetrievalFilter = "/path/to/go/bin/bitscreen"
This section describes how to roll back to Lotus markets service process if you are not happy with boostd
How to get help for Boost
This page explains how to initialise LID and start using it to provide retrievals to clients
marketsmigrate-lid



git clone https://github.com/filecoin-project/boost.git
cd boost
git checkout <Release>
make build[ContractDeals]
Enabled = true
AllowlistContracts = []
From = "0x0000000000000000000000000000000000000000"export FULLNODE_API_INFO=<filecoin API endpoint>boost -vv initboost -vv deal --provider=<f00001> \
--http-url=<https://myserver/my.car> \
--commp=<commp> \
--car-size=<car-size> \
--piece-size=<piece-size> \
--payload-cid=<payload-cid>
sent deal proposal
deal uuid: 9e68fb16-ff9a-488e-ad0a-1289b512d176
storage provider: f0127896
client wallet: f1sw5zjcyo4mff5cbvgsgmm8uoko6gcr4tptvtkhy
payload cid: bafyaa6qshafcmalqudsbeidrunclaep6mdbipm2gjfvuosjfd6cbqd6th7bshy5hi5npxe727yjaagelucbyabasgafcmalqudsaeieapsxspo2i36no36n7yitswsxdazvziwvgj4vbp2scuxasrc6n4ejaage3r7m3saykcqeaegeavdllsbzaqcaibaaeecakrvvzam
url: https://webserver/file.car
commp: baga6ea4seaqh5prrl6ykov4t64k6m5giijsc44dcxtdnzsp4izjakqhs7twauiq
start epoch: 1700711
end epoch: 2219111
provider collateral: 358.687 μFILboost deal-status --provider=<provider> --deal-uuid=<deal-uuid>got deal status response
deal uuid: 9e68fb16-ff8a-488e-ad0a-1289b512d176
deal status: Transfer Queued
deal label: bafyaa6qsgafcmalqudsaeidrunclaep6mdbipm2gjfvuosjfd6cbqd6th7bshy5hi5npxe727yjaagelucbyabasgafcmalqudsaeieapsxspo2i36no36n7yitswsxdazvziwvgj4vbp2scuxasrc6n4ejaage3r7m3saykcqeaegeavdllsbzaqcaibaaeecakrvvzam
publish cid: <nil>
chain deal id: 0Frequently asked questions about Boost
This tutorial goes through all the steps required to make a storage deal with Boost on Filecoin.
export FULLNODE_API_INFO=https://api.node.glif.io
boost initboost init
boost/init_cmd.go:53 default wallet set {"wallet": "f3wfbcudimjcqtfztfhoskgls5gmkfx3kb2ubpycgo7a2ru77temduoj2ottwzlxbrbzm4jycrtu45deawbluq"}
boost/init_cmd.go:60 wallet balance {"value": "0"}
boost/init_cmd.go:65 market actor is not initialised, you must add funds to it in order to send online dealsThis section describes how to upgrade your lotus-miner markets service to boostd
boostx market-add 1ssh -L 8080:localhost:8080 myserver


car create -f my-data.car --version 1 <my-data>
car root my-data.car
bafykbzacedzjq6jvlqnclrseq8pp5lypa6ozuqgug3wjie3orh67berkwv7e4lotus-minerboostx commp ./my-data.car
CommP CID: baga6ea4seaqjaxked6ovoj5f3bdisfeuwtjhrzh3s34mg5cyzevgoebe7tdckdi
Piece size: 2097152
Car file size: 1101978 export FULLNODE_API_INFO=https://api.node.glif.io
boost deal --verified=false \
--provider=f0026876 \
--http-url=https://public-http-server.com/my-data.car \
--commp=baga6ea4seaqjaxked6ovoj5f3bdisfeuwtjhrzh3s34mg5cyzevgoebe7tdckdi \
--car-size=1101978 \
--piece-size=2097152 \
--payload-cid=bafykbzacedzjq6jvlqnclrseq8pp5lypa6ozuqgug3wjie3orh67berkwv7e42 cores
2GB RAM16+ cores
32GB+ RAM
Add more CPU (compared to adding more RAM) to improve performance.SSDs (solid state disks) are required.➜ ~ goose
Usage: goose [OPTIONS] DRIVER DBSTRING COMMAND
...
Commands:
up Migrate the DB to the most recent version available
up-by-one Migrate the DB up by 1
up-to VERSION Migrate the DB to a specific VERSION
down Roll back the version by 1
down-to VERSION Roll back to a specific VERSION
redo Re-run the latest migration
reset Roll back all migrations
status Dump the migration status for the current DB
version Print the current version of the database
create NAME [sql|go] Creates new migration file with the current timestamp
fix Apply sequential ordering to migrationsssh -L 8080:localhost:8080 myserverlotus-shed market export-datastore --repo <repo> --backup-dir <backup-dir>PUBLISH_STORAGE_DEALS_WALLET=`lotus wallet new bls`
COLLAT_WALLET=`lotus wallet new bls`
lotus send --from mywallet $PUBLISH_STORAGE_DEALS_WALLET 10
lotus send --from mywallet $COLLAT_WALLET 10export $(lotus auth api-info --perm=admin)
export $(lotus-miner auth api-info --perm=admin)export APISEALER=`echo $MINER_API_INFO`
export APISECTORINDEX=`echo $MINER_API_INFO`export OLD_CONTROL_ADDRESS=`lotus-miner actor control list --verbose | grep -v owner | grep -v worker | grep -v beneficiary | awk '{print $3}' | grep -v key | tr -s '\n' ' '`
lotus-miner actor control set --really-do-it $PUBLISH_STORAGE_DEALS_WALLET $OLD_CONTROL_ADDRESSboostd --vv migrate-markets \
--import-markets-repo=~/.my-markets-repo \
--wallet-publish-storage-deals=$PUBLISH_STORAGE_DEALS_WALLET \
--wallet-deal-collateral=$COLLAT_WALLET \
--max-staging-deals-bytes=50000000000boostd --vv runexport BOOST_API_INFO=<TOKEN>:<API Address>
boostd auth api-info -perm auth
# The maximum number of concurrent storage deal HTTP downloads.
# Note that this is a soft maximum; if some downloads stall,
# more downloads are allowed to start.
#
# type: uint64
# env var: LOTUS_DEALMAKING_HTTPTRANSFERMAXCONCURRENTDOWNLOADS
#HttpTransferMaxConcurrentDownloads = 20
# The period between checking if downloads have stalled.
#
# type: Duration
# env var: LOTUS_DEALMAKING_HTTPTRANSFERSTALLCHECKPERIOD
#HttpTransferStallCheckPeriod = "30s"
# The time that can elapse before a download is considered stalled (and
# another concurrent download is allowed to start).
#
# type: Duration
# env var: LOTUS_DEALMAKING_HTTPTRANSFERSTALLTIMEOUT
#HttpTransferStallTimeout = "5m0s" # The maximum allowed disk usage size in bytes of downloaded deal data
# that has not yet been passed to the sealing node by boost.
# When the client makes a new deal proposal to download data from a host,
# boost checks this config value against the sum of:
# - the amount of data downloaded in the staging area
# - the amount of data that is queued for download
# - the amount of data in the proposed deal
# If the total amount would exceed the limit, boost rejects the deal.
# Set this value to 0 to indicate there is no limit.
#
# type: int64
# env var: LOTUS_DEALMAKING_MAXSTAGINGDEALSBYTES
MaxStagingDealsBytes = 50000000000
# The percentage of MaxStagingDealsBytes that is allocated to each host.
# When the client makes a new deal proposal to download data from a host,
# boost checks this config value against the sum of:
# - the amount of data downloaded from the host in the staging area
# - the amount of data that is queued for download from the host
# - the amount of data in the proposed deal
# If the total amount would exceed the limit, boost rejects the deal.
# Set this value to 0 to indicate there is no limit per host.
#
# type: uint64
# env var: LOTUS_DEALMAKING_MAXSTAGINGDEALSPERCENTPERHOST
#MaxStagingDealsPercentPerHost = 0curl -X POST \
-H "Content-Type: application/json" \
-d '{"query":"query { deals(limit: 10, query: \"failed to get size of imported\") { deals { ID CreatedAt Message } } }"}' \
http://localhost:8080/graphql/query | jqcurl -X POST \
-H "Content-Type: application/json" \
-d '{"query":"mutation { dealCancel(id: \"ab12345c-5678-90de-12f3-45a6b78cd9ef\") }"}' \
http://localhost:8080/graphql/query | jq
export PUBLISH_STORAGE_DEALS_WALLET=`lotus wallet new bls`
export COLLAT_WALLET=`lotus wallet new bls`
lotus send --from mywallet $PUBLISH_STORAGE_DEALS_WALLET 10
lotus send --from mywallet $COLLAT_WALLET 10lotus-miner actor control set --really-do-it $PUBLISH_STORAGE_DEALS_WALLETexport $(lotus auth api-info --perm=admin)
export $(lotus-miner auth api-info --perm=admin)export APISEALER=`echo $MINER_API_INFO`
export APISECTORINDEX=`echo $MINER_API_INFO`boostd --vv init \
--api-sealer=$APISEALER \
--api-sector-index=$APISECTORINDEX \
--wallet-publish-storage-deals=$PUBLISH_STORAGE_DEALS_WALLET \
--wallet-deal-collateral=$COLLAT_WALLET \
--max-staging-deals-bytes=50000000000lotus-miner actor set-addrs <MULTIADDR>
lotus-miner actor set-peer-id <PEER_ID>boostd --vv runcd react
# Download and install npm packages needed by the React frontend
npm install --legacy-peer-deps
# Build the optimized JavaScript and CSS in boost/react/build
npm run buildssh -L 8080:localhost:8080 myserverboostd auth api-info --perm=admin
export BOOST_API_INFO=<TOKEN>:<API Address>export $(boostd auth api-info --perm=admin)curl http://{SP's http retrieval URL}/piece/bagaSomePieceCID -o bagaSomePieceCID.piececurl -H "Accept:application/vnd.ipld.car;" http://{SP's http retrieval URL}/ipfs/bafySomePayloadCID -o bafySomePayloadCID.carcurl http://{SP's http retrieval URL}/ipfs/{content ID}/{optional path to resource} -o myimage.pngcurl -H "Accept:application/vnd.ipld.raw;" http://{SP's http retrieval URL}/ipfs/bafySomeBlockCID -o bafySomeBlockCIDgit clone https://github.com/filecoin-project/boost.git
cd boost
git checkout <release>make booster-httpexport ENV_BOOST_API_INFO=`boostd auth api-info --perm=admin`
export BOOST_API_INFO=`echo $ENV_BOOST_API_INFO | awk '{split($0,a,"="); print a[2]}'`export ENV_FULLNODE_API_INFO=`lotus auth api-info --perm=admin`
export FULLNODE_API_INFO=`echo $ENV_FULLNODE_API_INFO | awk '{split($0,a,"="); print a[2]}'`export ENV_MINER_API_INFO=`lotus-miner auth api-info --perm=admin`
export MINER_API_INFO=`echo $ENV_MINER_API_INFO | awk '{split($0,a,"="); print a[2]}'`booster-http run --api-boost=$BOOST_API_INFO --api-fullnode=$FULLNODE_API_INFO --api-storage=$MINER_API_INFO[DealMaking]
HTTPRetrievalMultiaddr = "/dns/foo.com/tcp/443/https"boost provider retrieval-transports <miner id>// Supported queries
curl https://foo.com/index
// Version
curl https://foo.com/info# Download a piece by its CID
curl https://foo.com/piece/bagaSomePieceCID -o download.piece[IndexProvider]
# Enable set whether to enable indexing announcement to the network and expose endpoints that
# allow indexer nodes to process announcements. Enabled by default.
#
# type: bool
# env var: LOTUS_INDEXPROVIDER_ENABLE
#Enable = true
# EntriesCacheCapacity sets the maximum capacity to use for caching the indexing advertisement
# entries. Defaults to 1024 if not specified. The cache is evicted using LRU policy. The
# maximum storage used by the cache is a factor of EntriesCacheCapacity, EntriesChunkSize and
# the length of multihashes being advertised. For example, advertising 128-bit long multihashes
# with the default EntriesCacheCapacity, and EntriesChunkSize means the cache size can grow to
# 256MiB when full.
#
# type: int
# env var: LOTUS_INDEXPROVIDER_ENTRIESCACHECAPACITY
#EntriesCacheCapacity = 1024
# EntriesChunkSize sets the maximum number of multihashes to include in a single entries chunk.
# Defaults to 16384 if not specified. Note that chunks are chained together for indexing
# advertisements that include more multihashes than the configured EntriesChunkSize.
#
# type: int
# env var: LOTUS_INDEXPROVIDER_ENTRIESCHUNKSIZE
#EntriesChunkSize = 16384
# TopicName sets the topic name on which the changes to the advertised content are announced.
# If not explicitly specified, the topic name is automatically inferred from the network name
# in following format: '/indexer/ingest/<network-name>'
# Defaults to empty, which implies the topic name is inferred from network name.
#
# type: string
# env var: LOTUS_INDEXPROVIDER_TOPICNAME
#TopicName = ""
# PurgeCacheOnStart sets whether to clear any cached entries chunks when the provider engine
# starts. By default, the cache is rehydrated from previously cached entries stored in
# datastore if any is present.
#
# type: bool
# env var: LOTUS_INDEXPROVIDER_PURGECACHEONSTART
#PurgeCacheOnStart = true
[IndexProvider.Announce]
# Make a direct announcement to a list of indexing nodes over http.
# Note that announcements are already made over pubsub regardless
# of this setting.
#
# type: bool
# env var: LOTUS_INDEXPROVIDER_ANNOUNCE_ANNOUNCEOVERHTTP
#AnnounceOverHttp = true
# The list of URLs of indexing nodes to announce to.
#
# type: []string
# env var: LOTUS_INDEXPROVIDER_ANNOUNCE_DIRECTANNOUNCEURLS
#DirectAnnounceURLs = ["https://cid.contact/ingest/announce"]
[IndexProvider.HttpPublisher]
# If not enabled, requests are served over graphsync instead.
#
# type: bool
# env var: LOTUS_INDEXPROVIDER_HTTPPUBLISHER_ENABLED
#Enabled = true
# Set the public hostname / IP for the index provider listener.
# eg "82.129.73.111"
# This is usually the same as the for the boost node.
#
# type: string
# env var: LOTUS_INDEXPROVIDER_HTTPPUBLISHER_PUBLICHOSTNAME
#PublicHostname = "82.129.73.111"
# Set the port on which to listen for index provider requests over HTTP.
# Note that this port must be open on the firewall.
#
# type: int
# env var: LOTUS_INDEXPROVIDER_HTTPPUBLISHER_PORT
#Port = 3401export RUSTFLAGS="-C target-cpu=native -g"
export FFI_BUILD_FROM_SOURCE=1BOOST_CLIENT_REPO - repo directory for Boost client
BOOSTER_BITSWAP_REP - repo directory for Booster bitswap
BOOST_PATH - boost repo path
FULLNODE_API_INFO - Lotus daemon node API connection stringcurl -sL https://deb.nodesource.com/setup_16.x | sudo -E bash -
sudo apt-get install -y nodejs
sudo apt install mesa-opencl-icd ocl-icd-opencl-dev gcc git bzr jq pkg-config curl clang build-essential hwloc libhwloc-dev wget -ybrew install node@16
brew install bzr jq pkg-config hwloc coreutilsgit clone https://github.com/filecoin-project/boost
cd boost
git checkout <Stable tag or branch>
make clean build
sudo make installexport LIBRARY_PATH=$LIBRARY_PATH:/opt/homebrew/lib
git clone https://github.com/filecoin-project/boost
cd boost
git checkout <Stable tag or branch>
make clean build
sudo make installgit clone https://github.com/filecoin-project/boost
cd boost
git checkout <Stable tag or branch>
make clean calibnetcd boost
git checkout main
git pull
git checkout <New release>
make clean build
sudo make installexport LIBRARY_PATH=$LIBRARY_PATH:/opt/homebrew/lib
cd boost
git checkout main
git pull
git checkout <New release>
make clean build
sudo make installfailed to connect to peer <peer id>: failed to dial <peer id>:
* <multi-address> failed to negotiate security protocol:
peer id mismatch: expected <peer id>,
but remote key matches <different peer id>lotus-miner actor set-peer-id 123abcd
lotus-miner actor set-addrs ip4/123.456.12.345/tcp/1234lotus-miner actor set-peer-id <new peer id>lotus-miner actor set-addrs /ip4/<YOUR_PUBLIC_IP_ADDRESS_OF_BOOST_NODE>/tcp/<Boostd Port>ERROR: fatal error calling 'Filecoin.MarketListIncompleteDeals': panic in rpc method 'Filecoin.MarketListIncompleteDeals': runtime error: invalid memory address or nil pointer dereferenceexport MARKETS_API_INFO=<Boost token:api>ERROR: offer error: retrieval query offer errored: failed to fetch piece to retrieve from: getting pieces for cid Qmf1ykhUo63qB5dJ8KRyeths9MZfyxpVdT5xwnmoLKefz7: getting pieces containing block Qmf1ykhUo63qB5dJ8KRyeths92mfyxpVdT5xi1moLKefz7: failed to lookup index for mh 1220f7ce2d20772b959c1071868e9495712f12785b1710ee88752af120dd49338190, err: datastore: key not found2022-02-21T20:06:03.950+1100 INFO markets loggers/loggers.go:20 storage provider event {"name": "ProviderEventFailed", "proposal CID": "bafyreihr743zllr2eckgfiweouiap7pgcjqa3mg3t75jjt7sfcpu", "state": "StorageDealError", "message": "error awaiting deal pre-commit: failed to set up called handler: called check error (h: 1570875): failed to look up deal on chain: deal 3964985 not found - deal may not have completed sealing before deal proposal start epoch, or deal may have been slashed"}boostd dagstore register-shard <piece CID>lotus-miner sectors list | awk '{print $1 " " $2}' | grep -v ID > aclist.txtcomm -13 <(for i in $(boostd pieces list-pieces); do sector_list=`boostd pieces piece-info $i | awk '{print $2}'| sed -ne '/SectorID/,$p' | grep -v SectorID`; for j in $sector_list; do grep -w $j aclist.txt > /dev/null; if [ $? -eq 0 ]; then break; else echo "$i"; fi; done; done) <(comm -13 <(boostd dagstore list-shards | awk '{print $1}' | sed 1d | sort) <(boostd pieces list-pieces | sort))for i in `cat <OUTPUT OF STEP 2 IN A FILE>` ; do boostd dagstore register-shard $i; done--include-sealed flag.# grab filter program
go get -u -v github.com/Murmuration-Labs/bitscreen
# add it to both filters
Filter = "/path/to/go/bin/bitscreen"
RetrievalFilter = "/path/to/go/bin/bitscreen"{
"DealParams": {
"DealUUID": "48c31c8c-dcc8-4372-a0ac-b5468eea555b",
"IsOffline": false,
"ClientDealProposal": {
"Proposal": {
"PieceCID": {
"/": "baga6ea4seaqh5prrl6ykov4t64k6m6giijsc44dcxtdnzsp4izjakqhs7twauiq"
},
"PieceSize": 2147483648,
"VerifiedDeal": false,
"Client": "f1sw5zjcyo4mff5cbvgsgmm7uoko6gcr4tptvtkhy",
"Provider": "f0127896",
"Label": "bafyaa7qsgafcmalqudsaeidrunclaep6mdbipm2gjfvuosjfd6cbqd6th7bshy5hi5npxe727yjaagelucbyabasgafcmalqudsaeieapsxspo2i36no36n7yitswsxdazvziwvgj4vbp2scuxasrc6n4ejaage3r7m3saykcqeaegeavdllsbzaqcaibaaeecakrvvzam",
"StartEpoch": 1717840,
"EndEpoch": 2236240,
"StoragePricePerEpoch": "1",
"ProviderCollateral": "363196619502649",
"ClientCollateral": "0"
},
"ClientSignature": {
"Type": 1,
"Data": "SmgcBnQE+0ZIb4zAXw7TpxLliSaliShEvX9P4+uwvxBhRDlJD+F6N3NFoNrA2y5bTeWF5aWWuL93w+SSmXFkoAA="
}
},
"DealDataRoot": {
"/": "bafyaa7qsgafcmalqudsaeidrunclaep6mdbipm2gjfvuosjfd6cbqd6th7bshy5hi5npxe727yjaagelucbyabasgafcmalqudsaeieapsxspo2i36no36n7yitswsxdazvziwvgj4vbp2scuxasrc6n4ejaage3r7m3saykcqeaegeavdllsbzaqcaibaaeecakrvvzam"
},
"Transfer": {
"Type": "http",
"ClientID": "",
"Params": "eyJVUkwiOiJodHRwczovL2FudG8uLXB1YmxpYy1idWNrZXQtYm9vc3QuczMuZXUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20vcmFuZGZpbGVfMkdCXzAuY2FyIiwiSGVhZGVycyI6bnVsbH0=",
"Size": 2000177948
}
},
"SealingPipelineState": {
"SectorStates": {
"Available": 684,
"Proving": 307,
"Removed": 82,
"TerminateFailed": 1,
"TerminateWait": 5
},
"Workers": null
}
} dagstore
|___ index # (1)
|___ transients # (2)
|___ datastore # (3)
|___ .shard-registration-complete # (4)
|___ .boost-shard-registration-complete # (5)2021-08-09T22:06:35.701+0300 INFO dagstore.migrator dagstore/wrapper.go:286 registering shards for all active deals in sealing subsystem {"count": 453}
2021-08-09T22:06:35.701+0300 WARN dagstore.migrator dagstore/wrapper.go:335 deal has nil piece CID; skipping {"deal_id": 0}
2021-08-09T22:06:35.701+0300 INFO dagstore.migrator dagstore/wrapper.go:348 registering deal in dagstore with lazy init {"deal_id": 2208881, "piece_cid": "baga6ea4seaqhnvxy55e
nveknyqhkkh7mltcrrcx35yvuxdmcbfouaafkvp6niay"}
2021-08-09T22:06:35.702+0300 INFO dagstore.migrator dagstore/wrapper.go:318 async shard registration completed successfully {"shard_key": "baga6ea4seaqhnvxy55enveknyqhkkh7mltcrrcx
35yvuxdmcbfouaafkvp6niay"}
[...]
2021-08-09T22:06:35.709+0300 INFO dagstore.migrator dagstore/wrapper.go:361 finished registering all shards {"total": 44}
[...]
2021-08-09T22:06:35.826+0300 INFO dagstore.migrator dagstore/wrapper.go:365 confirmed registration of all shards
2021-08-09T22:06:35.826+0300 INFO dagstore.migrator dagstore/wrapper.go:372 successfully marked migration as complete
2021-08-09T22:06:35.826+0300 INFO dagstore.migrator dagstore/wrapper.go:375 dagstore migration complete[DAGStore]
# Path to the dagstore root directory. This directory contains three
# subdirectories, which can be symlinked to alternative locations if
# need be:
# - ./transients: caches unsealed deals that have been fetched from the
# storage subsystem for serving retrievals.
# - ./indices: stores shard indices.
# - ./datastore: holds the KV store tracking the state of every shard
# known to the DAG store.
# Default value: <BOOST_PATH>/dagstore
# RootDir = ""
# The maximum amount of indexing jobs that can run simultaneously.
# 0 means unlimited.
# Default value: 5.
#
# type: int
# MaxConcurrentIndex = 5
# The maximum amount of unsealed deals that can be fetched simultaneously
# from the storage subsystem. 0 means unlimited.
# Default value: 0 (unlimited).
#
# type: int
# MaxConcurrentReadyFetches = 0
# The maximum number of simultaneous inflight API calls to the storage
# subsystem.
# Default value: 100.
#
# type: int
# MaxConcurrencyStorageCalls = 100
# The time between calls to periodic dagstore GC, in time.Duration string
# representation, e.g. 1m, 5m, 1h.
# Default value: 1 minute.
#
# type: Duration
# GCInterval = "1m"ssh -L 8080:localhost:8080 myserverexport PUBLISH_STORAGE_DEALS_WALLET=`lotus wallet new bls`
export COLLAT_WALLET=`lotus wallet new bls`
lotus send --from mywallet $PUBLISH_STORAGE_DEALS_WALLET 10
lotus send --from mywallet $COLLAT_WALLET 10export OLD_CONTROL_ADDRESS=`lotus-miner actor control list --verbose | grep -v owner | grep -v worker | grep -v beneficiary | awk '{print $3}' | grep -v key | tr -s '\n' ' '`
lotus-miner actor control set --really-do-it $PUBLISH_STORAGE_DEALS_WALLET $OLD_CONTROL_ADDRESSexport $(lotus auth api-info --perm=admin)
export $(lotus-miner auth api-info --perm=admin)export APISEALER=`echo $MINER_API_INFO`
export APISECTORINDEX=`echo $MINER_API_INFO`lotus-shed market export-datastore --repo <repo> --backup-dir <backup-dir>lotus auth api-info -perm adminboostd --vv migrate-monolith \
--import-miner-repo=<lotus-miner repo path> \
--api-sealer=$APISEALER \
--api-sector-index=$APISECTORINDEX \
--wallet-publish-storage-deals=$PUBLISH_STORAGE_DEALS_WALLET \
--wallet-deal-collateral=$COLLAT_WALLET \
--max-staging-deals-bytes=50000000000 cp <miner repo>/config.toml <miner repo>/config.toml.backupboostd --vv runexport BOOST_API_INFO=<TOKEN>:<API Address>
boostd auth api-info -perm authboostd --vv run[LotusDealmaking]
# When enabled, the miner can accept online deals
#
# type: bool
# env var: LOTUS_LOTUSDEALMAKING_CONSIDERONLINESTORAGEDEALS
#ConsiderOnlineStorageDeals = true
# When enabled, the miner can accept offline deals
#
# type: bool
# env var: LOTUS_LOTUSDEALMAKING_CONSIDEROFFLINESTORAGEDEALS
#ConsiderOfflineStorageDeals = true
# When enabled, the miner can accept retrieval deals
#
# type: bool
# env var: LOTUS_LOTUSDEALMAKING_CONSIDERONLINERETRIEVALDEALS
#ConsiderOnlineRetrievalDeals = true
# When enabled, the miner can accept offline retrieval deals
#
# type: bool
# env var: LOTUS_LOTUSDEALMAKING_CONSIDEROFFLINERETRIEVALDEALS
#ConsiderOfflineRetrievalDeals = true
# When enabled, the miner can accept verified deals
#
# type: bool
# env var: LOTUS_LOTUSDEALMAKING_CONSIDERVERIFIEDSTORAGEDEALS
#ConsiderVerifiedStorageDeals = true
# When enabled, the miner can accept unverified deals
#
# type: bool
# env var: LOTUS_LOTUSDEALMAKING_CONSIDERUNVERIFIEDSTORAGEDEALS
#ConsiderUnverifiedStorageDeals = true
# A list of Data CIDs to reject when making deals
#
# type: []cid.Cid
# env var: LOTUS_LOTUSDEALMAKING_PIECECIDBLOCKLIST
#PieceCidBlocklist = []
# Maximum expected amount of time getting the deal into a sealed sector will take
# This includes the time the deal will need to get transferred and published
# before being assigned to a sector
#
# type: Duration
# env var: LOTUS_LOTUSDEALMAKING_EXPECTEDSEALDURATION
#ExpectedSealDuration = "24h0m0s"
# Maximum amount of time proposed deal StartEpoch can be in future
#
# type: Duration
# env var: LOTUS_LOTUSDEALMAKING_MAXDEALSTARTDELAY
#MaxDealStartDelay = "336h0m0s"
# When a deal is ready to publish, the amount of time to wait for more
# deals to be ready to publish before publishing them all as a batch
#
# type: Duration
# env var: LOTUS_LOTUSDEALMAKING_PUBLISHMSGPERIOD
# PublishMsgPeriod = "40m0s"
# The maximum number of deals to include in a single PublishStorageDeals
# message
#
# type: uint64
# env var: LOTUS_LOTUSDEALMAKING_MAXDEALSPERPUBLISHMSG
#MaxDealsPerPublishMsg = 8
# The maximum collateral that the provider will put up against a deal,
# as a multiplier of the minimum collateral bound
#
# type: uint64
# env var: LOTUS_LOTUSDEALMAKING_MAXPROVIDERCOLLATERALMULTIPLIER
#MaxProviderCollateralMultiplier = 2
# The maximum allowed disk usage size in bytes of staging deals not yet
# passed to the sealing node by the markets service. 0 is unlimited.
#
# type: int64
# env var: LOTUS_LOTUSDEALMAKING_MAXSTAGINGDEALSBYTES
# MaxStagingDealsBytes = 100000000000
# The maximum number of parallel online data transfers for storage deals
#
# type: uint64
# env var: LOTUS_LOTUSDEALMAKING_SIMULTANEOUSTRANSFERSFORSTORAGE
#SimultaneousTransfersForStorage = 20
# The maximum number of simultaneous data transfers from any single client
# for storage deals.
# Unset by default (0), and values higher than SimultaneousTransfersForStorage
# will have no effect; i.e. the total number of simultaneous data transfers
# across all storage clients is bound by SimultaneousTransfersForStorage
# regardless of this number.
#
# type: uint64
# env var: LOTUS_LOTUSDEALMAKING_SIMULTANEOUSTRANSFERSFORSTORAGEPERCLIENT
#SimultaneousTransfersForStoragePerClient = 0
# The maximum number of parallel online data transfers for retrieval deals
#
# type: uint64
# env var: LOTUS_LOTUSDEALMAKING_SIMULTANEOUSTRANSFERSFORRETRIEVAL
#SimultaneousTransfersForRetrieval = 20
# Minimum start epoch buffer to give time for sealing of sector with deal.
#
# type: uint64
# env var: LOTUS_LOTUSDEALMAKING_STARTEPOCHSEALINGBUFFER
#StartEpochSealingBuffer = 480
# A command used for fine-grained evaluation of storage deals
# see https://lotus.filecoin.io/storage-providers/advanced-configurations/market/#using-filters-for-fine-grained-storage-and-retrieval-deal-acceptance for more details
#
# type: string
# env var: LOTUS_LOTUSDEALMAKING_FILTER
#Filter = ""
# A command used for fine-grained evaluation of retrieval deals
# see https://lotus.filecoin.io/storage-providers/advanced-configurations/market/#using-filters-for-fine-grained-storage-and-retrieval-deal-acceptance for more details
#
# type: string
# env var: LOTUS_LOTUSDEALMAKING_RETRIEVALFILTER
#RetrievalFilter = ""
[LotusDealmaking.RetrievalPricing]
# env var: LOTUS_LOTUSDEALMAKING_RETRIEVALPRICING_STRATEGY
#Strategy = "default"
[LotusDealmaking.RetrievalPricing.Default]
# env var: LOTUS_LOTUSDEALMAKING_RETRIEVALPRICING_DEFAULT_VERIFIEDDEALSFREETRANSFER
#VerifiedDealsFreeTransfer = true
[LotusDealmaking.RetrievalPricing.External]
# env var: LOTUS_LOTUSDEALMAKING_RETRIEVALPRICING_EXTERNAL_PATH
#Path = ""# grab filter program
go get -u -v github.com/Murmuration-Labs/bitscreen
# add it to both filters
Filter = "/path/to/go/bin/bitscreen"
RetrievalFilter = "/path/to/go/bin/bitscreen"How to configure and use bitswap retrievals in Boost
Booster-bitswap modesbooster-bitswap To Serve RetrievalsBooster-bitswap configurationpublic mode the public internet firewall must be configured to forward traffic directly to the booster-bitswap instance. boostd is configured to announce the public address of booster-bitswap to the network indexer (the network indexer is the service that clients can query to discover where to retrieve content). This mode offers greater flexibility and performance. You can even setup booster-bitswap to run over a separate internet connection from boostd. However, it might require additional configuration and changes to your overall network infrastructure.git clone https://github.com/filecoin-project/boost.git
cd boost
git checkout <release>make booster-bitswapbooster-bitswap initexport ENV_BOOST_API_INFO=`boostd auth api-info --perm=admin`
export BOOST_API_INFO=`echo $ENV_BOOST_API_INFO | awk '{split($0,a,"="); print a[2]}'`booster-bitswap run --api-boost=$BOOST_API_INFObooster-bitswap fetch /ip4/127.0.0.1/tcp/8888/p2p/{peerID} {rootCID} outfile.cargit clone https://github.com/filecoin-project/boost.git
cd boost
git checkout <release>make booster-bitswapbooster-bitswap init[DealMaking]
BitswapPeerID ="{peer id for booster bitswap you recorded earlier}"export ENV_BOOST_API_INFO=`boostd auth api-info --perm=admin`
export BOOST_API_INFO=`echo $ENV_BOOST_API_INFO | awk '{split($0,a,"="); print a[2]}'`booster-bitswap run --api-boost=$BOOST_API_INFO --proxy={boostd multiaddress}git clone https://github.com/filecoin-project/boost.git
cd boost
git checkout <release>make booster-bitswapbooster-bitswap init[DealMaking]
BitswapPeerID ="{peer id for bosoter bitswap you recorded earlier}"
BitswapPublicAddresses = ["/ip4/{booster-bitswap public IP}/tcp/{booster-bitswap public port}"]
BitswapPrivKeyFile = "{path to libp2p private key file for booster bitswap}"export ENV_BOOST_API_INFO=`boostd auth api-info --perm=admin`
export BOOST_API_INFO=`echo $ENV_BOOST_API_INFO | awk '{split($0,a,"="); print a[2]}'`booster-bitswap run --api-boost=$BOOST_API_INFObooster-bitswap run --api-boost=$BOOST_API_INFO \
--engine-blockstore-worker-count=600 \
--engine-task-worker-count=600 \
--max-outstanding-bytes-per-peer=33554432 \
--target-message-size=1048576 \
--task-worker-count=600booster-bitswap run --api-boost=$BOOST_API_INFO --badbits-denylists <URL>booster-bitswap run --api-boost=$BOOST_API_INFO --badbits-denylists https://badbits.dwebops.pub/denylist.json <URL1> <URL2>{
"AllowDenyList": { // list of peers to either deny or allow (denying all others)
"Type": "allowlist", // "allowlist" or "denylist"
"PeerIDs": [
"Qma9T5YraSnpRDZqRR4krcSJabThc8nwZuJV3LercPHufi",
"QmYyQSo1c1Ym7orWxLYvCrM2EmxFTANf8wXmmE7DWjhx5N"
]
},
"UnderMaintenance": false, // when set to true, denies all requests
"StorageProviderLimits": {
"Bitswap": {
"SimultaneousRequests": 100, // bitswap block requests served at the same time across peers
"SimultaneousRequestsPerPeer": 10, // bitswap block requests served at the same time for a single peer
"MaxBandwidth": "100mb" // human readable size metric, per second
}
}
}booster-bitswap run --api-boost=$BOOST_API_INFO --api-filter-endpoint <URL> --api-filter-auth <OPTIONAL SCURITY HEADERS>sudo tc qdisc add dev <network interface> root handle 1: htb
sudo tc class add dev <network interface> parent 1: classid 1:20 htb rate 100mibit
sudo tc qdisc add dev <network interface> parent 1:20 handle 20: sfq perturb 10
sudo tc filter add dev <network interface> parent 1: protocol ip prio 1 basic match 'cmp(u16 at 0 layer transport eq 8888)' flowid 1:20[booster-bitswap]
Priority = <value>
Time-Smoothing = <value>
Length-Smoothing = <value>wondershaper enp5s0 4096 1024 --serve-pieces enables serving raw pieces (default: true)
--serve-blocks serve blocks with the ipfs gateway API (default: true)
--serve-cars serve CAR files with the ipfs gateway API (default: true)
--serve-files serve original files (eg jpg, mov) with the ipfs gateway API (default: false)
--api-filter-endpoint value the endpoint to use for fetching a remote retrieval configuration for bitswap requests
--api-filter-auth value value to pass in the authorization header when sending a request to the API filter endpoint (e.g. 'Basic ~base64 encoded user/pass~'
--badbits-denylists value [ --badbits-denylists value ] the endpoints for fetching one or more custom BadBits list instead of the default one at https://badbits.dwebops.pub/denylist.json (default: "https://badbits.dwebops.pub/denylist.json")
--help, -h show help$ 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# ipfs gateway config
server {
listen 7575 default_server;
listen [::]:7575 default_server;
location /ipfs/ {
proxy_pass http://127.0.0.1:7777;
}
}$ mkdir /etc/nginx/ipfs-gateway.conf.d
$ htpasswd -c /etc/nginx/ipfs-gateway.conf.d/.htpasswd alice
New password:
Re-type new password:
Adding password for user alice # ipfs gateway config
server {
listen 7575 default_server;
listen [::]:7575 default_server;
location /ipfs/ {
# htaccess authentication
auth_basic "Restricted Server";
auth_basic_user_file /etc/nginx/ipfs-gateway.conf.d/.htpasswd;
proxy_pass http://127.0.0.1:7777;
}
}limit_req_zone $binary_remote_addr zone=client_ip_10rs:1m rate=1r/s;include /etc/nginx/ipfs-gateway.conf.d/ipfs-gateway.conf;
server {
listen 7575 default_server;
listen [::]:7575 default_server;
location /ipfs/ {
# htaccess authentication
auth_basic "Restricted Server";
auth_basic_user_file /etc/nginx/ipfs-gateway.conf.d/.htpasswd;
limit_req zone=client_ip_10rs;
limit_req_status 429;
proxy_pass http://127.0.0.1:7878;
}
}
$ htpasswd /etc/nginx/ipfs-gateway.conf.d/.htpasswd bobmap $remote_user $bandwidth_limit {
default 1k;
"alice" 10k;
"bob" 512k;
}include /etc/nginx/ipfs-gateway.conf.d/ipfs-gateway.conf;
server {
listen 7575 default_server;
listen [::]:7575 default_server;
location /ipfs/ {
# htaccess authentication
auth_basic "Restricted Server";
auth_basic_user_file /etc/nginx/ipfs-gateway.conf.d/.htpasswd;
limit_rate $bandwidth_limit;
limit_req zone=client_ip_10rs;
limit_req_status 429;
proxy_pass http://127.0.0.1:7878;
}
}


Boost configuration options with examples and description.
# The version of the config file (used for migrations)
#
# type: int
# env var: LOTUS__CONFIGVERSION
ConfigVersion = 4
# The connect string for the sealing RPC API (lotus miner)
#
# type: string
# env var: LOTUS__SEALERAPIINFO
SealerApiInfo = ""
# The connect string for the sector index RPC API (lotus miner)
#
# type: string
# env var: LOTUS__SECTORINDEXAPIINFO
SectorIndexApiInfo = ""
[API]
# Binding address for the Lotus API
#
# type: string
# env var: LOTUS_API_LISTENADDRESS
#ListenAddress = "/ip4/127.0.0.1/tcp/2345/http"
# type: string
# env var: LOTUS_API_REMOTELISTENADDRESS
#RemoteListenAddress = ""
# type: Duration
# env var: LOTUS_API_TIMEOUT
#Timeout = "30s"
[Backup]
# Note that in case of metadata corruption it might be much harder to recover
# your node if metadata log is disabled
#
# type: bool
# env var: LOTUS_BACKUP_DISABLEMETADATALOG
#DisableMetadataLog = false
[Libp2p]
# Binding address for the libp2p host - 0 means random port.
# Format: multiaddress; see https://multiformats.io/multiaddr/
#
# type: []string
# env var: LOTUS_LIBP2P_LISTENADDRESSES
# ListenAddresses = ["/ip4/0.0.0.0/tcp/24001", "/ip6/::/tcp/24001"]
# Addresses to explicitally announce to other peers. If not specified,
# all interface addresses are announced
# Format: multiaddress
#
# type: []string
# env var: LOTUS_LIBP2P_ANNOUNCEADDRESSES
# AnnounceAddresses = []
# Addresses to not announce
# Format: multiaddress
#
# type: []string
# env var: LOTUS_LIBP2P_NOANNOUNCEADDRESSES
# NoAnnounceAddresses = []
# When not disabled (default), lotus asks NAT devices (e.g., routers), to
# open up an external port and forward it to the port lotus is running on.
# When this works (i.e., when your router supports NAT port forwarding),
# it makes the local lotus node accessible from the public internet
#
# type: bool
# env var: LOTUS_LIBP2P_DISABLENATPORTMAP
# DisableNatPortMap = false
# ConnMgrLow is the number of connections that the basic connection manager
# will trim down to.
#
# type: uint
# env var: LOTUS_LIBP2P_CONNMGRLOW
# ConnMgrLow = 350
# ConnMgrHigh is the number of connections that, when exceeded, will trigger
# a connection GC operation. Note: protected/recently formed connections don't
# count towards this limit.
#
# type: uint
# env var: LOTUS_LIBP2P_CONNMGRHIGH
# ConnMgrHigh = 400
# ConnMgrGrace is a time duration that new connections are immune from being
# closed by the connection manager.
#
# type: Duration
# env var: LOTUS_LIBP2P_CONNMGRGRACE
# ConnMgrGrace = "20s"
[Pubsub]
# Run the node in bootstrap-node mode
#
# type: bool
# env var: LOTUS_PUBSUB_BOOTSTRAPPER
#Bootstrapper = false
# type: string
# env var: LOTUS_PUBSUB_REMOTETRACER
#RemoteTracer = ""
[Storage]
# The maximum number of concurrent fetch operations to the storage subsystem
#
# type: int
# env var: LOTUS_STORAGE_PARALLELFETCHLIMIT
# ParallelFetchLimit = 10
[Dealmaking]
# When enabled, the miner can accept online deals
#
# type: bool
# env var: LOTUS_DEALMAKING_CONSIDERONLINESTORAGEDEALS
#ConsiderOnlineStorageDeals = true
# When enabled, the miner can accept offline deals
#
# type: bool
# env var: LOTUS_DEALMAKING_CONSIDEROFFLINESTORAGEDEALS
#ConsiderOfflineStorageDeals = true
# When enabled, the miner can accept retrieval deals
#
# type: bool
# env var: LOTUS_DEALMAKING_CONSIDERONLINERETRIEVALDEALS
#ConsiderOnlineRetrievalDeals = true
# When enabled, the miner can accept offline retrieval deals
#
# type: bool
# env var: LOTUS_DEALMAKING_CONSIDEROFFLINERETRIEVALDEALS
#ConsiderOfflineRetrievalDeals = true
# When enabled, the miner can accept verified deals
#
# type: bool
# env var: LOTUS_DEALMAKING_CONSIDERVERIFIEDSTORAGEDEALS
#ConsiderVerifiedStorageDeals = true
# When enabled, the miner can accept unverified deals
#
# type: bool
# env var: LOTUS_DEALMAKING_CONSIDERUNVERIFIEDSTORAGEDEALS
#ConsiderUnverifiedStorageDeals = true
# A list of Data CIDs to reject when making deals
#
# type: []cid.Cid
# env var: LOTUS_DEALMAKING_PIECECIDBLOCKLIST
#PieceCidBlocklist = []
# Maximum expected amount of time getting the deal into a sealed sector will take
# This includes the time the deal will need to get transferred and published
# before being assigned to a sector
#
# type: Duration
# env var: LOTUS_DEALMAKING_EXPECTEDSEALDURATION
#ExpectedSealDuration = "24h0m0s"
# Maximum amount of time proposed deal StartEpoch can be in future
#
# type: Duration
# env var: LOTUS_DEALMAKING_MAXDEALSTARTDELAY
#MaxDealStartDelay = "336h0m0s"
# The maximum collateral that the provider will put up against a deal,
# as a multiplier of the minimum collateral bound
#
# type: uint64
# env var: LOTUS_DEALMAKING_MAXPROVIDERCOLLATERALMULTIPLIER
#MaxProviderCollateralMultiplier = 2
# The maximum allowed disk usage size in bytes of downloaded deal data
# that has not yet been passed to the sealing node by boost.
# When the client makes a new deal proposal to download data from a host,
# boost checks this config value against the sum of:
# - the amount of data downloaded in the staging area
# - the amount of data that is queued for download
# - the amount of data in the proposed deal
# If the total amount would exceed the limit, boost rejects the deal.
# Set this value to 0 to indicate there is no limit.
#
# type: int64
# env var: LOTUS_DEALMAKING_MAXSTAGINGDEALSBYTES
# MaxStagingDealsBytes = 500000000
# The percentage of MaxStagingDealsBytes that is allocated to each host.
# When the client makes a new deal proposal to download data from a host,
# boost checks this config value against the sum of:
# - the amount of data downloaded from the host in the staging area
# - the amount of data that is queued for download from the host
# - the amount of data in the proposed deal
# If the total amount would exceed the limit, boost rejects the deal.
# Set this value to 0 to indicate there is no limit per host.
#
# type: uint64
# env var: LOTUS_DEALMAKING_MAXSTAGINGDEALSPERCENTPERHOST
# MaxStagingDealsPercentPerHost = 50
# Minimum start epoch buffer to give time for sealing of sector with deal.
#
# type: uint64
# env var: LOTUS_DEALMAKING_STARTEPOCHSEALINGBUFFER
#StartEpochSealingBuffer = 480
# The amount of time to keep deal proposal logs for before cleaning them up.
#
# type: Duration
# env var: LOTUS_DEALMAKING_DEALPROPOSALLOGDURATION
#DealProposalLogDuration = "24h0m0s"
# The amount of time to keep retrieval deal logs for before cleaning them up.
#
# type: Duration
# env var: LOTUS_DEALMAKING_RETRIEVALLOGDURATION
#RetrievalLogDuration = "24h0m0s"
# A command used for fine-grained evaluation of storage deals
# see https://boost.filecoin.io/configuration/deal-filters for more details
#
# type: string
# env var: LOTUS_DEALMAKING_FILTER
#Filter = ""
# A command used for fine-grained evaluation of retrieval deals
# see https://boost.filecoin.io/configuration/deal-filters for more details
#
# type: string
# env var: LOTUS_DEALMAKING_RETRIEVALFILTER
#RetrievalFilter = ""
# The maximum amount of time a transfer can take before it fails
#
# type: Duration
# env var: LOTUS_DEALMAKING_MAXTRANSFERDURATION
#MaxTransferDuration = "24h0m0s"
# Whether to do commp on the Boost node (local) or on the Sealer (remote)
#
# type: bool
# env var: LOTUS_DEALMAKING_REMOTECOMMP
#RemoteCommp = false
# The maximum number of commp processes to run in parallel on the local
# boost process
#
# type: uint64
# env var: LOTUS_DEALMAKING_MAXCONCURRENTLOCALCOMMP
#MaxConcurrentLocalCommp = 1
# The public multi-address for retrieving deals with booster-http.
# Note: Must be in multiaddr format, eg /dns/foo.com/tcp/443/https
#
# type: string
# env var: LOTUS_DEALMAKING_HTTPRETRIEVALMULTIADDR
#HTTPRetrievalMultiaddr = ""
# The maximum number of concurrent storage deal HTTP downloads.
# Note that this is a soft maximum; if some downloads stall,
# more downloads are allowed to start.
#
# type: uint64
# env var: LOTUS_DEALMAKING_HTTPTRANSFERMAXCONCURRENTDOWNLOADS
HttpTransferMaxConcurrentDownloads = 5
# The period between checking if downloads have stalled.
#
# type: Duration
# env var: LOTUS_DEALMAKING_HTTPTRANSFERSTALLCHECKPERIOD
#HttpTransferStallCheckPeriod = "30s"
# The time that can elapse before a download is considered stalled (and
# another concurrent download is allowed to start).
#
# type: Duration
# env var: LOTUS_DEALMAKING_HTTPTRANSFERSTALLTIMEOUT
#HttpTransferStallTimeout = "5m0s"
# The peed id used by booster-bitswap. To set, copy the value
# printed by running 'booster-bitswap init'. If this value is set,
# Boost will:
# - listen on bitswap protocols on its own peer id and forward them
# to booster bitswap
# - advertise bitswap records to the content indexer
# - list bitswap in available transports on the retrieval transport protocol
#
# type: string
# env var: LOTUS_DEALMAKING_BITSWAPPEERID
# BitswapPeerID = ""
# The deal logs older than DealLogDurationDays are deleted from the logsDB
# to keep the size of logsDB in check. Set the value as "0" to disable log cleanup
#
# type: int
# env var: LOTUS_DEALMAKING_DEALLOGDURATIONDAYS
#DealLogDurationDays = 30
[Dealmaking.RetrievalPricing]
# env var: LOTUS_DEALMAKING_RETRIEVALPRICING_STRATEGY
#Strategy = "default"
[Dealmaking.RetrievalPricing.Default]
# env var: LOTUS_DEALMAKING_RETRIEVALPRICING_DEFAULT_VERIFIEDDEALSFREETRANSFER
#VerifiedDealsFreeTransfer = true
[Dealmaking.RetrievalPricing.External]
# env var: LOTUS_DEALMAKING_RETRIEVALPRICING_EXTERNAL_PATH
#Path = ""
[Wallets]
# The "owner" address of the miner
#
# type: string
# env var: LOTUS_WALLETS_MINER
Miner = ""
# The wallet used to send PublishStorageDeals messages.
# Must be a control or worker address of the miner.
#
# type: string
# env var: LOTUS_WALLETS_PUBLISHSTORAGEDEALS
PublishStorageDeals = ""
# The wallet used as the source for storage deal collateral
#
# type: string
# env var: LOTUS_WALLETS_DEALCOLLATERAL
#DealCollateral = ""
# Deprecated: Renamed to DealCollateral
#
# type: string
# env var: LOTUS_WALLETS_PLEDGECOLLATERAL
PledgeCollateral = ""
[Graphql]
# The port that the graphql server listens on
#
# type: uint64
# env var: LOTUS_GRAPHQL_PORT
#Port = 8080
[LotusDealmaking]
# When enabled, the miner can accept online deals
#
# type: bool
# env var: LOTUS_LOTUSDEALMAKING_CONSIDERONLINESTORAGEDEALS
#ConsiderOnlineStorageDeals = true
# When enabled, the miner can accept offline deals
#
# type: bool
# env var: LOTUS_LOTUSDEALMAKING_CONSIDEROFFLINESTORAGEDEALS
#ConsiderOfflineStorageDeals = true
# When enabled, the miner can accept retrieval deals
#
# type: bool
# env var: LOTUS_LOTUSDEALMAKING_CONSIDERONLINERETRIEVALDEALS
#ConsiderOnlineRetrievalDeals = true
# When enabled, the miner can accept offline retrieval deals
#
# type: bool
# env var: LOTUS_LOTUSDEALMAKING_CONSIDEROFFLINERETRIEVALDEALS
#ConsiderOfflineRetrievalDeals = true
# When enabled, the miner can accept verified deals
#
# type: bool
# env var: LOTUS_LOTUSDEALMAKING_CONSIDERVERIFIEDSTORAGEDEALS
#ConsiderVerifiedStorageDeals = true
# When enabled, the miner can accept unverified deals
#
# type: bool
# env var: LOTUS_LOTUSDEALMAKING_CONSIDERUNVERIFIEDSTORAGEDEALS
#ConsiderUnverifiedStorageDeals = true
# A list of Data CIDs to reject when making deals
#
# type: []cid.Cid
# env var: LOTUS_LOTUSDEALMAKING_PIECECIDBLOCKLIST
#PieceCidBlocklist = []
# Maximum expected amount of time getting the deal into a sealed sector will take
# This includes the time the deal will need to get transferred and published
# before being assigned to a sector
#
# type: Duration
# env var: LOTUS_LOTUSDEALMAKING_EXPECTEDSEALDURATION
#ExpectedSealDuration = "24h0m0s"
# Maximum amount of time proposed deal StartEpoch can be in future
#
# type: Duration
# env var: LOTUS_LOTUSDEALMAKING_MAXDEALSTARTDELAY
#MaxDealStartDelay = "336h0m0s"
# When a deal is ready to publish, the amount of time to wait for more
# deals to be ready to publish before publishing them all as a batch
#
# type: Duration
# env var: LOTUS_LOTUSDEALMAKING_PUBLISHMSGPERIOD
#PublishMsgPeriod = "40m0s"
# The maximum number of deals to include in a single PublishStorageDeals
# message
#
# type: uint64
# env var: LOTUS_LOTUSDEALMAKING_MAXDEALSPERPUBLISHMSG
#MaxDealsPerPublishMsg = 8
# The maximum collateral that the provider will put up against a deal,
# as a multiplier of the minimum collateral bound
#
# type: uint64
# env var: LOTUS_LOTUSDEALMAKING_MAXPROVIDERCOLLATERALMULTIPLIER
#MaxProviderCollateralMultiplier = 2
# The maximum allowed disk usage size in bytes of staging deals not yet
# passed to the sealing node by the markets service. 0 is unlimited.
#
# type: int64
# env var: LOTUS_LOTUSDEALMAKING_MAXSTAGINGDEALSBYTES
MaxStagingDealsBytes = 100000000000
# The maximum number of parallel online data transfers for storage deals
#
# type: uint64
# env var: LOTUS_LOTUSDEALMAKING_SIMULTANEOUSTRANSFERSFORSTORAGE
#SimultaneousTransfersForStorage = 20
# The maximum number of simultaneous data transfers from any single client
# for storage deals.
# Unset by default (0), and values higher than SimultaneousTransfersForStorage
# will have no effect; i.e. the total number of simultaneous data transfers
# across all storage clients is bound by SimultaneousTransfersForStorage
# regardless of this number.
#
# type: uint64
# env var: LOTUS_LOTUSDEALMAKING_SIMULTANEOUSTRANSFERSFORSTORAGEPERCLIENT
#SimultaneousTransfersForStoragePerClient = 0
# The maximum number of parallel online data transfers for retrieval deals
#
# type: uint64
# env var: LOTUS_LOTUSDEALMAKING_SIMULTANEOUSTRANSFERSFORRETRIEVAL
#SimultaneousTransfersForRetrieval = 20
# Minimum start epoch buffer to give time for sealing of sector with deal.
#
# type: uint64
# env var: LOTUS_LOTUSDEALMAKING_STARTEPOCHSEALINGBUFFER
#StartEpochSealingBuffer = 480
# A command used for fine-grained evaluation of storage deals
# see https://lotus.filecoin.io/storage-providers/advanced-configurations/market/#using-filters-for-fine-grained-storage-and-retrieval-deal-acceptance for more details
#
# type: string
# env var: LOTUS_LOTUSDEALMAKING_FILTER
Filter = ""
# A command used for fine-grained evaluation of retrieval deals
# see https://lotus.filecoin.io/storage-providers/advanced-configurations/market/#using-filters-for-fine-grained-storage-and-retrieval-deal-acceptance for more details
#
# type: string
# env var: LOTUS_LOTUSDEALMAKING_RETRIEVALFILTER
#RetrievalFilter = ""
[LotusDealmaking.RetrievalPricing]
# env var: LOTUS_LOTUSDEALMAKING_RETRIEVALPRICING_STRATEGY
#Strategy = "default"
[LotusDealmaking.RetrievalPricing.Default]
# env var: LOTUS_LOTUSDEALMAKING_RETRIEVALPRICING_DEFAULT_VERIFIEDDEALSFREETRANSFER
#VerifiedDealsFreeTransfer = true
[LotusDealmaking.RetrievalPricing.External]
# env var: LOTUS_LOTUSDEALMAKING_RETRIEVALPRICING_EXTERNAL_PATH
#Path = ""
[LotusFees]
# The maximum fee to pay when sending the PublishStorageDeals message
#
# type: types.FIL
# env var: LOTUS_LOTUSFEES_MAXPUBLISHDEALSFEE
MaxPublishDealsFee = "0.5 FIL"
# The maximum fee to pay when sending the AddBalance message (used by legacy markets)
#
# type: types.FIL
# env var: LOTUS_LOTUSFEES_MAXMARKETBALANCEADDFEE
#MaxMarketBalanceAddFee = "0.007 FIL"
[DAGStore]
# Path to the dagstore root directory. This directory contains three
# subdirectories, which can be symlinked to alternative locations if
# need be:
# - ./transients: caches unsealed deals that have been fetched from the
# storage subsystem for serving retrievals.
# - ./indices: stores shard indices.
# - ./datastore: holds the KV store tracking the state of every shard
# known to the DAG store.
# Default value: <LOTUS_MARKETS_PATH>/dagstore (split deployment) or
# <LOTUS_MINER_PATH>/dagstore (monolith deployment)
#
# type: string
# env var: LOTUS_DAGSTORE_ROOTDIR
#RootDir = ""
# The maximum amount of indexing jobs that can run simultaneously.
# 0 means unlimited.
# Default value: 5.
#
# type: int
# env var: LOTUS_DAGSTORE_MAXCONCURRENTINDEX
#MaxConcurrentIndex = 5
# The maximum amount of unsealed deals that can be fetched simultaneously
# from the storage subsystem. 0 means unlimited.
# Default value: 0 (unlimited).
#
# type: int
# env var: LOTUS_DAGSTORE_MAXCONCURRENTREADYFETCHES
#MaxConcurrentReadyFetches = 0
# The maximum amount of unseals that can be processed simultaneously
# from the storage subsystem. 0 means unlimited.
# Default value: 0 (unlimited).
#
# type: int
# env var: LOTUS_DAGSTORE_MAXCONCURRENTUNSEALS
#MaxConcurrentUnseals = 0
# The maximum number of simultaneous inflight API calls to the storage
# subsystem.
# Default value: 100.
#
# type: int
# env var: LOTUS_DAGSTORE_MAXCONCURRENCYSTORAGECALLS
#MaxConcurrencyStorageCalls = 100
# The time between calls to periodic dagstore GC, in time.Duration string
# representation, e.g. 1m, 5m, 1h.
# Default value: 1 minute.
#
# type: Duration
# env var: LOTUS_DAGSTORE_GCINTERVAL
#GCInterval = "1m0s"
[IndexProvider]
# Enable set whether to enable indexing announcement to the network and expose endpoints that
# allow indexer nodes to process announcements. Enabled by default.
#
# type: bool
# env var: LOTUS_INDEXPROVIDER_ENABLE
#Enable = true
# EntriesCacheCapacity sets the maximum capacity to use for caching the indexing advertisement
# entries. Defaults to 1024 if not specified. The cache is evicted using LRU policy. The
# maximum storage used by the cache is a factor of EntriesCacheCapacity, EntriesChunkSize and
# the length of multihashes being advertised. For example, advertising 128-bit long multihashes
# with the default EntriesCacheCapacity, and EntriesChunkSize means the cache size can grow to
# 256MiB when full.
#
# type: int
# env var: LOTUS_INDEXPROVIDER_ENTRIESCACHECAPACITY
#EntriesCacheCapacity = 1024
# EntriesChunkSize sets the maximum number of multihashes to include in a single entries chunk.
# Defaults to 16384 if not specified. Note that chunks are chained together for indexing
# advertisements that include more multihashes than the configured EntriesChunkSize.
#
# type: int
# env var: LOTUS_INDEXPROVIDER_ENTRIESCHUNKSIZE
#EntriesChunkSize = 16384
# TopicName sets the topic name on which the changes to the advertised content are announced.
# If not explicitly specified, the topic name is automatically inferred from the network name
# in following format: '/indexer/ingest/<network-name>'
# Defaults to empty, which implies the topic name is inferred from network name.
#
# type: string
# env var: LOTUS_INDEXPROVIDER_TOPICNAME
#TopicName = ""
# PurgeCacheOnStart sets whether to clear any cached entries chunks when the provider engine
# starts. By default, the cache is rehydrated from previously cached entries stored in
# datastore if any is present.
#
# type: bool
# env var: LOTUS_INDEXPROVIDER_PURGECACHEONSTART
#PurgeCacheOnStart = false
[ContractDeals]
Enabled = trueThis guide covers all the configuration in use by boostd process. Some of the configuration parameters found in the config.toml file are not used in boost and thus are not covered here. These configuration parameters can be ignoredThis page contains all Boost API definitions. Interfaces defined here are exposed as JSON-RPC 2.0 endpoints by the boostd daemon.
go get github.com/filecoin-project/go-jsonrpcpackage main
import (
"context"
"fmt"
"log"
"net/http"
jsonrpc "github.com/filecoin-project/go-jsonrpc"
boostapi "github.com/filecoin-project/boost/api"
)
func main() {
authToken := "<value found in ~/.boost/token>"
headers := http.Header{"Authorization": []string{"Bearer " + authToken}}
addr := "127.0.0.1:1288"
var api boostapi.BoostStruct
closer, err := jsonrpc.NewMergeClient(context.Background(), "ws://"+addr+"/rpc/v0", "Filecoin", []interface{}{&api.Internal, &api.CommonStruct.Internal}, headers)
if err != nil {
log.Fatalf("connecting with boost failed: %s", err)
}
defer closer()
// Now you can call any API you're interested in.
netAddrs, err := api.NetAddrsListen(context.Background())
if err != nil {
log.Fatalf("calling netAddrsListen: %s", err)
}
fmt.Printf("Boost is listening on: %s", netAddrs.Addrs[0])
}import requests
import json
def main():
url = "http://localhost:3051/rpc/v0"
headers = {'content-type': 'application/json', "Authorization": "Bearer <token>"}
payload = {
"method": "Filecoin.BoostOfflineDealWithData",
"params": [
"<deal-uuid>",
"<file-path>",
True
],
"jsonrpc": "2.0",
"id": 1,
}
response = requests.post(url, data=json.dumps(payload), headers=headers)
print(response.text)
if __name__ == "__main__":
main()[
"f01234"
][
[
"write"
]
][
"string value"
][
"write"
][
{
"/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4"
}
][
{
"/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4"
}
][
{
"/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4"
}
][
"string value"
][
{
"Key": "baga6ea4seaqecmtz7iak33dsfshi627abz4i4665dfuzr3qfs4bmad6dx3iigdq",
"Success": false,
"Error": "\u003cerror\u003e"
}
][
{
"MaxConcurrency": 123,
"IncludeSealed": true
}
]{
"Key": "string value",
"Event": "string value",
"Success": true,
"Error": "string value",
"Total": 123,
"Current": 123
}[
"string value"
][
{
"Key": "baga6ea4seaqecmtz7iak33dsfshi627abz4i4665dfuzr3qfs4bmad6dx3iigdq",
"State": "ShardStateAvailable",
"Error": "\u003cerror\u003e"
}
][
"Bw=="
][
{
"/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4"
}
][
"string value"
][
"string value"
][
"07070707-0707-0707-0707-070707070707"
]{
"DealUuid": "07070707-0707-0707-0707-070707070707",
"CreatedAt": "0001-01-01T00:00:00Z",
"ClientDealProposal": {
"Proposal": {
"PieceCID": {
"/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4"
},
"PieceSize": 1032,
"VerifiedDeal": true,
"Client": "f01234",
"Provider": "f01234",
"Label": "",
"StartEpoch": 10101,
"EndEpoch": 10101,
"StoragePricePerEpoch": "0",
"ProviderCollateral": "0",
"ClientCollateral": "0"
},
"ClientSignature": {
"Type": 2,
"Data": "Ynl0ZSBhcnJheQ=="
}
},
"IsOffline": true,
"CleanupData": true,
"ClientPeerID": "12D3KooWGzxzKZYveHXtpG6AsrUJBcWxHBFS2HsEoGTxrMLvKXtf",
"DealDataRoot": {
"/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4"
},
"InboundFilePath": "string value",
"Transfer": {
"Type": "string value",
"ClientID": "string value",
"Params": "Ynl0ZSBhcnJheQ==",
"Size": 42
},
"ChainDealID": 5432,
"PublishCID": null,
"SectorID": 9,
"Offset": 1032,
"Length": 1032,
"Checkpoint": 1,
"CheckpointAt": "0001-01-01T00:00:00Z",
"Err": "string value",
"Retry": "auto",
"NBytesReceived": 9,
"FastRetrieval": true,
"AnnounceToIPNI": true
}[
{
"/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4"
}
]{
"DealUuid": "07070707-0707-0707-0707-070707070707",
"CreatedAt": "0001-01-01T00:00:00Z",
"ClientDealProposal": {
"Proposal": {
"PieceCID": {
"/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4"
},
"PieceSize": 1032,
"VerifiedDeal": true,
"Client": "f01234",
"Provider": "f01234",
"Label": "",
"StartEpoch": 10101,
"EndEpoch": 10101,
"StoragePricePerEpoch": "0",
"ProviderCollateral": "0",
"ClientCollateral": "0"
},
"ClientSignature": {
"Type": 2,
"Data": "Ynl0ZSBhcnJheQ=="
}
},
"IsOffline": true,
"CleanupData": true,
"ClientPeerID": "12D3KooWGzxzKZYveHXtpG6AsrUJBcWxHBFS2HsEoGTxrMLvKXtf",
"DealDataRoot": {
"/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4"
},
"InboundFilePath": "string value",
"Transfer": {
"Type": "string value",
"ClientID": "string value",
"Params": "Ynl0ZSBhcnJheQ==",
"Size": 42
},
"ChainDealID": 5432,
"PublishCID": null,
"SectorID": 9,
"Offset": 1032,
"Length": 1032,
"Checkpoint": 1,
"CheckpointAt": "0001-01-01T00:00:00Z",
"Err": "string value",
"Retry": "auto",
"NBytesReceived": 9,
"FastRetrieval": true,
"AnnounceToIPNI": true
}[
{
"DealUUID": "07070707-0707-0707-0707-070707070707",
"IsOffline": true,
"ClientDealProposal": {
"Proposal": {
"PieceCID": {
"/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4"
},
"PieceSize": 1032,
"VerifiedDeal": true,
"Client": "f01234",
"Provider": "f01234",
"Label": "",
"StartEpoch": 10101,
"EndEpoch": 10101,
"StoragePricePerEpoch": "0",
"ProviderCollateral": "0",
"ClientCollateral": "0"
},
"ClientSignature": {
"Type": 2,
"Data": "Ynl0ZSBhcnJheQ=="
}
},
"DealDataRoot": {
"/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4"
},
"Transfer": {
"Type": "string value",
"ClientID": "string value",
"Params": "Ynl0ZSBhcnJheQ==",
"Size": 42
},
"RemoveUnsealedCopy": true,
"SkipIPNIAnnounce": true
}
]{
"Accepted": true,
"Reason": "string value"
}[
{
"DealUUID": "07070707-0707-0707-0707-070707070707",
"IsOffline": true,
"ClientDealProposal": {
"Proposal": {
"PieceCID": {
"/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4"
},
"PieceSize": 1032,
"VerifiedDeal": true,
"Client": "f01234",
"Provider": "f01234",
"Label": "",
"StartEpoch": 10101,
"EndEpoch": 10101,
"StoragePricePerEpoch": "0",
"ProviderCollateral": "0",
"ClientCollateral": "0"
},
"ClientSignature": {
"Type": 2,
"Data": "Ynl0ZSBhcnJheQ=="
}
},
"DealDataRoot": {
"/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4"
},
"Transfer": {
"Type": "string value",
"ClientID": "string value",
"Params": "Ynl0ZSBhcnJheQ==",
"Size": 42
},
"RemoveUnsealedCopy": true,
"SkipIPNIAnnounce": true
}
]{
"Accepted": true,
"Reason": "string value"
}[
"07070707-0707-0707-0707-070707070707",
"string value",
true
]{
"Accepted": true,
"Reason": "string value"
}[
{
"/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4"
}
][
true
][
true
][
true
][
true
][
true
][
true
][
[
{
"/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4"
}
]
][
"string value"
][
"string value",
"string value"
][
3,
"12D3KooWGzxzKZYveHXtpG6AsrUJBcWxHBFS2HsEoGTxrMLvKXtf",
true
]{
"TransferID": 3,
"Status": 1,
"BaseCID": {
"/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4"
},
"IsInitiator": true,
"IsSender": true,
"Voucher": "string value",
"Message": "string value",
"OtherPeer": "12D3KooWGzxzKZYveHXtpG6AsrUJBcWxHBFS2HsEoGTxrMLvKXtf",
"Transferred": 42,
"Stages": {
"Stages": [
{
"Name": "string value",
"Description": "string value",
"CreatedTime": "0001-01-01T00:00:00Z",
"UpdatedTime": "0001-01-01T00:00:00Z",
"Logs": [
{
"Log": "string value",
"UpdatedTime": "0001-01-01T00:00:00Z"
}
]
}
]
}
}{
"Ask": {
"Price": "0",
"VerifiedPrice": "0",
"MinPieceSize": 1032,
"MaxPieceSize": 1032,
"Miner": "f01234",
"Timestamp": 10101,
"Expiry": 10101,
"SeqNo": 42
},
"Signature": {
"Type": 2,
"Data": "Ynl0ZSBhcnJheQ=="
}
}{
"PricePerByte": "0",
"UnsealPrice": "0",
"PaymentInterval": 42,
"PaymentIntervalIncrease": 42
}[
{
"/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4"
},
"string value"
][
{
"TransferID": 3,
"Status": 1,
"BaseCID": {
"/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4"
},
"IsInitiator": true,
"IsSender": true,
"Voucher": "string value",
"Message": "string value",
"OtherPeer": "12D3KooWGzxzKZYveHXtpG6AsrUJBcWxHBFS2HsEoGTxrMLvKXtf",
"Transferred": 42,
"Stages": {
"Stages": [
{
"Name": "string value",
"Description": "string value",
"CreatedTime": "0001-01-01T00:00:00Z",
"UpdatedTime": "0001-01-01T00:00:00Z",
"Logs": [
{
"Log": "string value",
"UpdatedTime": "0001-01-01T00:00:00Z"
}
]
}
]
}
}
][
{
"Proposal": {
"PieceCID": {
"/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4"
},
"PieceSize": 1032,
"VerifiedDeal": true,
"Client": "f01234",
"Provider": "f01234",
"Label": "",
"StartEpoch": 10101,
"EndEpoch": 10101,
"StoragePricePerEpoch": "0",
"ProviderCollateral": "0",
"ClientCollateral": "0"
},
"ClientSignature": {
"Type": 2,
"Data": "Ynl0ZSBhcnJheQ=="
},
"ProposalCid": {
"/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4"
},
"AddFundsCid": null,
"PublishCid": null,
"Miner": "12D3KooWGzxzKZYveHXtpG6AsrUJBcWxHBFS2HsEoGTxrMLvKXtf",
"Client": "12D3KooWGzxzKZYveHXtpG6AsrUJBcWxHBFS2HsEoGTxrMLvKXtf",
"State": 42,
"PiecePath": ".lotusminer/fstmp123",
"MetadataPath": ".lotusminer/fstmp123",
"SlashEpoch": 10101,
"FastRetrieval": true,
"Message": "string value",
"FundsReserved": "0",
"Ref": {
"TransferType": "string value",
"Root": {
"/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4"
},
"PieceCid": null,
"PieceSize": 1024,
"RawBlockSize": 42
},
"AvailableForRetrieval": true,
"DealID": 5432,
"CreationTime": "0001-01-01T00:00:00Z",
"TransferChannelId": {
"Initiator": "12D3KooWGzxzKZYveHXtpG6AsrUJBcWxHBFS2HsEoGTxrMLvKXtf",
"Responder": "12D3KooWGzxzKZYveHXtpG6AsrUJBcWxHBFS2HsEoGTxrMLvKXtf",
"ID": 3
},
"SectorNumber": 9,
"InboundCAR": "string value"
}
][
{
"PayloadCID": {
"/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4"
},
"ID": 5,
"Selector": {
"Raw": "Ynl0ZSBhcnJheQ=="
},
"PieceCID": null,
"PricePerByte": "0",
"PaymentInterval": 42,
"PaymentIntervalIncrease": 42,
"UnsealPrice": "0",
"StoreID": 42,
"ChannelID": {
"Initiator": "12D3KooWGzxzKZYveHXtpG6AsrUJBcWxHBFS2HsEoGTxrMLvKXtf",
"Responder": "12D3KooWGzxzKZYveHXtpG6AsrUJBcWxHBFS2HsEoGTxrMLvKXtf",
"ID": 3
},
"PieceInfo": {
"PieceCID": {
"/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4"
},
"Deals": [
{
"DealID": 5432,
"SectorID": 9,
"Offset": 1032,
"Length": 1032
}
]
},
"Status": 0,
"Receiver": "12D3KooWGzxzKZYveHXtpG6AsrUJBcWxHBFS2HsEoGTxrMLvKXtf",
"TotalSent": 42,
"FundsReceived": "0",
"Message": "string value",
"CurrentInterval": 42,
"LegacyProtocol": true
}
]{
"Deals": [
{
"Proposal": {
"PieceCID": {
"/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4"
},
"PieceSize": 1032,
"VerifiedDeal": true,
"Client": "f01234",
"Provider": "f01234",
"Label": "",
"StartEpoch": 10101,
"EndEpoch": 10101,
"StoragePricePerEpoch": "0",
"ProviderCollateral": "0",
"ClientCollateral": "0"
},
"ClientSignature": {
"Type": 2,
"Data": "Ynl0ZSBhcnJheQ=="
}
}
],
"PublishPeriodStart": "0001-01-01T00:00:00Z",
"PublishPeriod": 60000000000
}[
3,
"12D3KooWGzxzKZYveHXtpG6AsrUJBcWxHBFS2HsEoGTxrMLvKXtf",
true
][
"0",
"0",
10101,
1032,
1032
][
{
"PricePerByte": "0",
"UnsealPrice": "0",
"PaymentInterval": 42,
"PaymentIntervalIncrease": 42
}
]{
"ID": "12D3KooWGzxzKZYveHXtpG6AsrUJBcWxHBFS2HsEoGTxrMLvKXtf",
"Addrs": [
"/ip4/52.36.61.156/tcp/1347/p2p/12D3KooWFETiESTf1v4PGUvtnxMAcEFMzLZbJGg4tjWfGEimYior"
]
}[
"12D3KooWGzxzKZYveHXtpG6AsrUJBcWxHBFS2HsEoGTxrMLvKXtf"
]{
"Reachability": 1,
"PublicAddr": "string value"
}{
"TotalIn": 9,
"TotalOut": 9,
"RateIn": 12.3,
"RateOut": 12.3
}{
"12D3KooWSXmXLJmBR1M7i9RW9GQPNUhZSzXKzxDHWtAgNuJAbyEJ": {
"TotalIn": 174000,
"TotalOut": 12500,
"RateIn": 100,
"RateOut": 50
}
}{
"/fil/hello/1.0.0": {
"TotalIn": 174000,
"TotalOut": 12500,
"RateIn": 100,
"RateOut": 50
}
}[
{
"Peers": [
"12D3KooWGzxzKZYveHXtpG6AsrUJBcWxHBFS2HsEoGTxrMLvKXtf"
],
"IPAddrs": [
"string value"
],
"IPSubnets": [
"string value"
]
}
]{
"Peers": [
"12D3KooWGzxzKZYveHXtpG6AsrUJBcWxHBFS2HsEoGTxrMLvKXtf"
],
"IPAddrs": [
"string value"
],
"IPSubnets": [
"string value"
]
}[
{
"Peers": [
"12D3KooWGzxzKZYveHXtpG6AsrUJBcWxHBFS2HsEoGTxrMLvKXtf"
],
"IPAddrs": [
"string value"
],
"IPSubnets": [
"string value"
]
}
][
{
"ID": "12D3KooWGzxzKZYveHXtpG6AsrUJBcWxHBFS2HsEoGTxrMLvKXtf",
"Addrs": [
"/ip4/52.36.61.156/tcp/1347/p2p/12D3KooWFETiESTf1v4PGUvtnxMAcEFMzLZbJGg4tjWfGEimYior"
]
}
][
"12D3KooWGzxzKZYveHXtpG6AsrUJBcWxHBFS2HsEoGTxrMLvKXtf"
][
"12D3KooWGzxzKZYveHXtpG6AsrUJBcWxHBFS2HsEoGTxrMLvKXtf"
][
"12D3KooWGzxzKZYveHXtpG6AsrUJBcWxHBFS2HsEoGTxrMLvKXtf"
]{
"ID": "12D3KooWGzxzKZYveHXtpG6AsrUJBcWxHBFS2HsEoGTxrMLvKXtf",
"Addrs": [
"/ip4/52.36.61.156/tcp/1347/p2p/12D3KooWFETiESTf1v4PGUvtnxMAcEFMzLZbJGg4tjWfGEimYior"
]
}[
"string value"
]{
"Memory": 9,
"Streams": 123,
"StreamsInbound": 123,
"StreamsOutbound": 123,
"Conns": 123,
"ConnsInbound": 123,
"ConnsOutbound": 123,
"FD": 123
}[
"12D3KooWGzxzKZYveHXtpG6AsrUJBcWxHBFS2HsEoGTxrMLvKXtf"
]{
"ID": "12D3KooWGzxzKZYveHXtpG6AsrUJBcWxHBFS2HsEoGTxrMLvKXtf",
"Agent": "string value",
"Addrs": [
"string value"
],
"Protocols": [
"string value"
],
"ConnMgrMeta": {
"FirstSeen": "0001-01-01T00:00:00Z",
"Value": 123,
"Tags": {
"name": 42
},
"Conns": {
"name": "2021-03-08T22:52:18Z"
}
}
}[
{
"ID": "12D3KooWGzxzKZYveHXtpG6AsrUJBcWxHBFS2HsEoGTxrMLvKXtf",
"Addrs": [
"/ip4/52.36.61.156/tcp/1347/p2p/12D3KooWFETiESTf1v4PGUvtnxMAcEFMzLZbJGg4tjWfGEimYior"
]
}
][
"12D3KooWGzxzKZYveHXtpG6AsrUJBcWxHBFS2HsEoGTxrMLvKXtf"
][
[
"12D3KooWGzxzKZYveHXtpG6AsrUJBcWxHBFS2HsEoGTxrMLvKXtf"
]
][
"12D3KooWGzxzKZYveHXtpG6AsrUJBcWxHBFS2HsEoGTxrMLvKXtf"
][
[
"12D3KooWGzxzKZYveHXtpG6AsrUJBcWxHBFS2HsEoGTxrMLvKXtf"
]
][
{
"ID": "12D3KooWGzxzKZYveHXtpG6AsrUJBcWxHBFS2HsEoGTxrMLvKXtf",
"Score": {
"Score": 12.3,
"Topics": {
"/blocks": {
"TimeInMesh": 60000000000,
"FirstMessageDeliveries": 122,
"MeshMessageDeliveries": 1234,
"InvalidMessageDeliveries": 3
}
},
"AppSpecificScore": 12.3,
"IPColocationFactor": 12.3,
"BehaviourPenalty": 12.3
}
}
][
"string value",
{
"Memory": 9,
"Streams": 123,
"StreamsInbound": 123,
"StreamsOutbound": 123,
"Conns": 123,
"ConnsInbound": 123,
"ConnsOutbound": 123,
"FD": 123
}
][
"string value"
]{
"System": {
"NumStreamsInbound": 123,
"NumStreamsOutbound": 123,
"NumConnsInbound": 123,
"NumConnsOutbound": 123,
"NumFD": 123,
"Memory": 9
},
"Transient": {
"NumStreamsInbound": 123,
"NumStreamsOutbound": 123,
"NumConnsInbound": 123,
"NumConnsOutbound": 123,
"NumFD": 123,
"Memory": 9
},
"Services": {
"abc": {
"NumStreamsInbound": 1,
"NumStreamsOutbound": 2,
"NumConnsInbound": 3,
"NumConnsOutbound": 4,
"NumFD": 5,
"Memory": 123
}
},
"Protocols": {
"abc": {
"NumStreamsInbound": 1,
"NumStreamsOutbound": 2,
"NumConnsInbound": 3,
"NumConnsOutbound": 4,
"NumFD": 5,
"Memory": 123
}
},
"Peers": {
"abc": {
"NumStreamsInbound": 1,
"NumStreamsOutbound": 2,
"NumConnsInbound": 3,
"NumConnsOutbound": 4,
"NumFD": 5,
"Memory": 123
}
}
}[
"string value"
][
{
"/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4"
}
]{
"CID": {
"/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4"
},
"PieceBlockLocations": [
{
"RelOffset": 42,
"BlockSize": 42,
"PieceCID": {
"/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4"
}
}
]
}[
{
"/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4"
}
][
{
"/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4"
}
]{
"PieceCID": {
"/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4"
},
"Deals": [
{
"DealID": 5432,
"SectorID": 9,
"Offset": 1032,
"Length": 1032
}
]
}[
{
"/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4"
}
][
{
"/": "bafy2bzacea3wsdh6y3a36tb3skempjoxqpuyompjbmfeyf34fi3uy6uue42v4"
}
][
"Markets"
]{
"98000": [
{
"SectorID": 100,
"Offset": 10485760,
"Size": 1048576
}
]
}