# Hyperspace File Upload
## 1. Start lite node
```
FULLNODE_API_INFO=wss://wss.hyperspace.node.glif.io/apigw/lotus lotus daemon --lite
```
## 2. Generate CAR
### 2.1 Create sample file
For hyperspace we can use some sample image since deals are not as strict.
```
dd if=/dev/urandom of=520mb-filecoin-payload.bin bs=1M count=520
```
### 2.2 Create CAR file
```
$ lotus client import mario.jpeg
Import ..., Root bafykbzacebj47nl7u37knizcpzr6cgawifnvv3xb4ezlxiruqvz7skjhxzvw6
```
## 3. Store Data (with erros atm..)
Currently we are able to initiate a deal and upload the file to the miner. The deal end in an error state but we are still able to download it.
### 3.1 Create deal
```
$ lotus client deal
Data CID (from lotus client import): bafykbzacebj47nl7u37knizcpzr6cgawifnvv3xb4ezlxiruqvz7skjhxzvw6
.. calculating data size
Deal duration (days): 180
Miner Addresses (f0.. f0..), none to find: t01130
.. querying miner asks
-----
Proposing from t14tg3p2tjxr6wzu6f4p7xzrndk23wdkygfcnnepi
Balance: 5 FIL
Piece size: 4MiB (Payload size: 3.565MiB)
Duration: 4320h0m0s
Total price: ~0 FIL (0 FIL per epoch)
Verified: false
Accept (yes/no): yes
.. executing
Deal (t01130) CID: bafyreihoslfpcgk6moeugyx5uuexwfg6oionbquc4fqeu4uphymuyanimu
```
### 3.2 Deal eventually fails
File gets uploaded but deal eventually gets to `StorageDealError` because
```
$ lotus client list-deals --show-failed
DealCid DealId Provider State On Chain? Slashed? PieceCID Size Price Duration Verified
...muyanimu 828 t01130 StorageDealError Y (epoch 25562) N ...5ffijqiy 3.969 MiB 0 FIL 521709 false
Message: error waiting for deal pre-commit message to appear on chain: handling applied event: failed to get dealinfo: looking for publish deal message
bafy2bzaceccukv5j37crxxx6lhf4jireiu6v3o3cmhakq4lhmk2j3etvzf5m4: not found
```
Some output from the lite node:
```
2023-01-24T22:36:55.346Z INFO markets loggers/loggers.go:16 storage client event {"name": "ClientEventWaitForDealState", "proposal CID": "bafyreihoslfpcgk6moeugyx5uuexwfg6oionbquc4fqeu4uphymuyanimu", "state": "StorageDealCheckForAcceptance", "message": "Provider state: StorageDealPublishing"}
2023-01-24T22:36:57.521Z INFO markets loggers/loggers.go:16 storage client event {"name": "ClientEventWaitForDealState", "proposal CID": "bafyreihoslfpcgk6moeugyx5uuexwfg6oionbquc4fqeu4uphymuyanimu", "state": "StorageDealCheckForAcceptance", "message": "Provider state: StorageDealPublishing"}
2023-01-24T22:36:59.761Z INFO markets loggers/loggers.go:16 storage client event {"name": "ClientEventWaitForDealState", "proposal CID": "bafyreihoslfpcgk6moeugyx5uuexwfg6oionbquc4fqeu4uphymuyanimu", "state": "StorageDealCheckForAcceptance", "message": "Provider state: StorageDealPublishing"}
2023-01-24T22:37:01.452Z INFO markets loggers/loggers.go:16 storage client event {"name": "ClientEventDealAccepted", "proposal CID": "bafyreihoslfpcgk6moeugyx5uuexwfg6oionbquc4fqeu4uphymuyanimu", "state": "StorageDealProposalAccepted", "message": ""}
2023-01-24T22:37:01.463Z INFO storageadapter storageadapter/client.go:148 DEAL ACCEPTED!
2023-01-24T22:37:02.799Z INFO markets loggers/loggers.go:16 storage client event {"name": "ClientEventDealPublished", "proposal CID": "bafyreihoslfpcgk6moeugyx5uuexwfg6oionbquc4fqeu4uphymuyanimu", "state": "StorageDealAwaitingPreCommit", "message": ""}
found dealIdx 0
2023-01-24T22:37:38.503Z INFO net/identify identify/id.go:369 failed negotiate identify protocol with peer {"peer": "12D3KooWHZhBjW2P5kXx23fe34cvFSPz3e9vkdP88VjZK2f5Hsio", "error": "stream reset"}
2023-01-24T22:37:38.503Z WARN net/identify identify/id.go:334 failed to identify 12D3KooWHZhBjW2P5kXx23fe34cvFSPz3e9vkdP88VjZK2f5Hsio: stream reset
2023-01-24T22:38:55.489Z WARN watchdog go-watchdog@v1.3.0/watchdog.go:350 system-driven watchdog triggering GC; 16325562368/16320875724 bytes (used/threshold)
2023-01-24T22:38:55.489Z INFO watchdog go-watchdog@v1.3.0/watchdog.go:369 watchdog is forcing GC
2023-01-24T22:38:55.513Z INFO watchdog go-watchdog@v1.3.0/watchdog.go:383 watchdog-triggered GC finished; notifications took: 709ns, took: 24.213041ms; current heap allocated: 318145488 bytes
2023-01-24T22:43:30.652Z WARN watchdog go-watchdog@v1.3.0/watchdog.go:350 system-driven watchdog triggering GC; 16329265152/16320875724 bytes (used/threshold)
2023-01-24T22:43:30.652Z INFO watchdog go-watchdog@v1.3.0/watchdog.go:369 watchdog is forcing GC
2023-01-24T22:43:30.685Z INFO watchdog go-watchdog@v1.3.0/watchdog.go:383 watchdog-triggered GC finished; notifications took: 1.208µs, took: 32.571667ms; current heap allocated: 318153368 bytes
2023-01-24T22:46:02.334Z INFO markets loggers/loggers.go:16 storage client event {"name": "", "proposal CID": "bafyreibvhv7xpxan2lqkh7vdpsmzr5tn7hagqc5vx66dxpp3vf3hzpxipu", "state": "StorageDealError", "message": "error waiting for deal pre-commit message to appear on chain: handling applied event: failed to get dealinfo: looking for publish deal message bafy2bzaceb254rdeyhdhnyekmegu4w6liy7m7k6xqx6ggqz6hyvv76bgkedqq: not found"}
2023-01-24T22:46:02.332Z ERROR events events/events_called.go:230 chain trigger (@H 25046, triggered @ 25052) failed: failed to get dealinfo: looking for publish deal message bafy2bzaceb254rdeyhdhnyekmegu4w6liy7m7k6xqx6ggqz6hyvv76bgkedqq: not found
2023-01-24T22:46:02.874Z ERROR events events/events_called.go:230 chain trigger (@H 25046, triggered @ 25052) failed: failed to get dealinfo: looking for publish deal message bafy2bzaceccukv5j37crxxx6lhf4jireiu6v3o3cmhakq4lhmk2j3etvzf5m4: not found
2023-01-24T22:46:02.879Z INFO markets loggers/loggers.go:16 storage client event {"name": "", "proposal CID": "bafyreihoslfpcgk6moeugyx5uuexwfg6oionbquc4fqeu4uphymuyanimu", "state": "StorageDealError", "message": "error waiting for deal pre-commit message to appear on chain: handling applied event: failed to get dealinfo: looking for publish deal message bafy2bzaceccukv5j37crxxx6lhf4jireiu6v3o3cmhakq4lhmk2j3etvzf5m4: not found"}
2023-01-24T22:46:03.413Z ERROR events events/events_called.go:230 chain trigger (@H 25046, triggered @ 25052) failed: failed to get dealinfo: looking for publish deal message bafy2bzaceb254rdeyhdhnyekmegu4w6liy7m7k6xqx6ggqz6hyvv76bgkedqq: not found
2023-01-24T22:46:04.028Z ERROR events events/events_called.go:230 chain trigger (@H 25046, triggered @ 25052) failed: failed to get dealinfo: looking for publish deal message bafy2bzaceccukv5j37crxxx6lhf4jireiu6v3o3cmhakq4lhmk2j3etvzf5m4: not found
2023-01-24T22:46:04.565Z ERROR events events/events_called.go:230 chain trigger (@H 25046, triggered @ 25052) failed: failed to get dealinfo: looking for publish deal message bafy2bzaceb254rdeyhdhnyekmegu4w6liy7m7k6xqx6ggqz6hyvv76bgkedqq: not found
2023-01-24T22:46:05.110Z ERROR events events/events_called.go:230 chain trigger (@H 25046, triggered @ 25052) failed: failed to get dealinfo: looking for publish deal message bafy2bzaceccukv5j37crxxx6lhf4jireiu6v3o3cmhakq4lhmk2j3etvzf5m4: not found
```
### 3.3 Deal details
```
$ lotus client get-deal bafyreihoslfpcgk6moeugyx5uuexwfg6oionbquc4fqeu4uphymuyanimu
```
```json
{
"DealInfo: ": {
"ProposalCid": {
"/": "bafyreihoslfpcgk6moeugyx5uuexwfg6oionbquc4fqeu4uphymuyanimu"
},
"State": 26,
"Message": "error waiting for deal pre-commit message to appear on chain: handling applied event: failed to get dealinfo: looking for publish deal message bafy2bzaceccukv5j37crxxx6lhf4jireiu6v3o3cmhakq4lhmk2j3etvzf5m4: not found",
"DealStages": {
"Stages": [
{
"Name": "StorageDealReserveClientFunds",
"Description": "Reserving client funds",
"ExpectedDuration": "a few minutes",
"CreatedTime": "2023-01-24T22:29:51.05206Z",
"UpdatedTime": "2023-01-24T22:29:51.05206Z",
"Logs": [
{
"Log": "funds reserved, amount \u003c0\u003e",
"UpdatedTime": "2023-01-24T22:29:51.05206Z"
}
]
},
{
"Name": "StorageDealFundsReserved",
"Description": "FundsReserved",
"ExpectedDuration": "a few minutes",
"CreatedTime": "2023-01-24T22:29:51.708583Z",
"UpdatedTime": "2023-01-24T22:29:51.708583Z",
"Logs": [
{
"Log": "opening data transfer to storage provider",
"UpdatedTime": "2023-01-24T22:29:51.708583Z"
}
]
},
{
"Name": "StorageDealStartDataTransfer",
"Description": "Starting data transfer",
"ExpectedDuration": "a few minutes",
"CreatedTime": "2023-01-24T22:29:51.774885Z",
"UpdatedTime": "2023-01-24T22:29:51.774885Z",
"Logs": [
{
"Log": "provider data transfer request added to client's queue: channel id \u003c12D3KooWNRnuEsg41c8MMUzmhBB7Nt1X3iySgczA37Uw2DNovEF7-12D3KooWHh1mUwb827kFC27zvmvKc13XtKRFRDQgAkHBecn6anx9-1674597766896679004\u003e",
"UpdatedTime": "2023-01-24T22:29:51.774885Z"
}
]
},
{
"Name": "StorageDealTransferQueued",
"Description": "",
"ExpectedDuration": "",
"CreatedTime": "2023-01-24T22:29:51.782049Z",
"UpdatedTime": "2023-01-24T22:29:51.782049Z",
"Logs": [
{
"Log": "data transfer initiated on channel id \u003c12D3KooWNRnuEsg41c8MMUzmhBB7Nt1X3iySgczA37Uw2DNovEF7-12D3KooWHh1mUwb827kFC27zvmvKc13XtKRFRDQgAkHBecn6anx9-1674597766896679004\u003e",
"UpdatedTime": "2023-01-24T22:29:51.782049Z"
}
]
},
{
"Name": "StorageDealCheckForAcceptance",
"Description": "Checking for deal acceptance",
"ExpectedDuration": "a few minutes",
"CreatedTime": "2023-01-24T22:29:54.214532Z",
"UpdatedTime": "2023-01-24T22:37:01.452535Z",
"Logs": [
{
"Log": "waiting for provider to publish the deal on-chain",
"UpdatedTime": "2023-01-24T22:29:54.214532Z"
},
{
"Log": "provider has submitted the deal on-chain and is waiting for confirmation",
"UpdatedTime": "2023-01-24T22:30:55.137891Z"
},
{
"Log": "deal has been accepted by storage provider",
"UpdatedTime": "2023-01-24T22:37:01.452535Z"
}
]
},
{
"Name": "StorageDealProposalAccepted",
"Description": "Proposal accepted",
"ExpectedDuration": "a few minutes",
"CreatedTime": "2023-01-24T22:37:02.799643Z",
"UpdatedTime": "2023-01-24T22:37:02.799643Z",
"Logs": null
},
{
"Name": "StorageDealAwaitingPreCommit",
"Description": "Awaiting a PreCommit message on chain",
"ExpectedDuration": "a few minutes",
"CreatedTime": "2023-01-24T22:46:02.875122Z",
"UpdatedTime": "2023-01-24T22:46:02.875122Z",
"Logs": [
{
"Log": "error waiting for deal pre-commit message to appear on chain: handling applied event: failed to get dealinfo: looking for publish deal message bafy2bzaceccukv5j37crxxx6lhf4jireiu6v3o3cmhakq4lhmk2j3etvzf5m4: not found",
"UpdatedTime": "2023-01-24T22:46:02.875122Z"
}
]
}
]
},
"Provider": "t01130",
"DataRef": {
"TransferType": "graphsync",
"Root": {
"/": "bafykbzacebj47nl7u37knizcpzr6cgawifnvv3xb4ezlxiruqvz7skjhxzvw6"
},
"PieceCid": {
"/": "baga6ea4seaql3zzi4ctxekhmudaaca2qbz4yqzylq3dtarid424l7n25ffijqiy"
},
"PieceSize": 4161536,
"RawBlockSize": 0
},
"PieceCID": {
"/": "baga6ea4seaql3zzi4ctxekhmudaaca2qbz4yqzylq3dtarid424l7n25ffijqiy"
},
"Size": 4161536,
"PricePerEpoch": "0",
"Duration": 521709,
"DealID": 828,
"CreationTime": "2023-01-24T22:29:51.030872Z",
"Verified": false,
"TransferChannelID": {
"Initiator": "12D3KooWNRnuEsg41c8MMUzmhBB7Nt1X3iySgczA37Uw2DNovEF7",
"Responder": "12D3KooWHh1mUwb827kFC27zvmvKc13XtKRFRDQgAkHBecn6anx9",
"ID": 1674597766896679004
},
"DataTransfer": {
"TransferID": 1674597766896679004,
"Status": 6,
"BaseCID": {
"/": "bafykbzacebj47nl7u37knizcpzr6cgawifnvv3xb4ezlxiruqvz7skjhxzvw6"
},
"IsInitiator": true,
"IsSender": true,
"Voucher": "{\"Proposal\":{\"/\":\"bafyreihoslfpcgk6moeugyx5uuexwfg6oionbquc4fqeu4uphymuyanimu\"}}",
"Message": "",
"OtherPeer": "12D3KooWHh1mUwb827kFC27zvmvKc13XtKRFRDQgAkHBecn6anx9",
"Transferred": 3737905,
"Stages": {
"Stages": [
{
"Name": "Requested",
"Description": "",
"CreatedTime": "2023-01-24T22:29:51.720982Z",
"UpdatedTime": "2023-01-24T22:29:51.779068Z",
"Logs": null
},
{
"Name": "Ongoing",
"Description": "",
"CreatedTime": "2023-01-24T22:29:51.78497Z",
"UpdatedTime": "2023-01-24T22:29:51.874904Z",
"Logs": [
{
"Log": "sending data",
"UpdatedTime": "2023-01-24T22:29:51.800887Z"
}
]
},
{
"Name": "TransferFinished",
"Description": "",
"CreatedTime": "2023-01-24T22:29:52.034548Z",
"UpdatedTime": "2023-01-24T22:29:52.034548Z",
"Logs": null
},
{
"Name": "Completing",
"Description": "",
"CreatedTime": "2023-01-24T22:29:52.041887Z",
"UpdatedTime": "2023-01-24T22:29:52.041887Z",
"Logs": null
}
]
}
}
},
"OnChain": {
"Proposal": {
"PieceCID": {
"/": "baga6ea4seaql3zzi4ctxekhmudaaca2qbz4yqzylq3dtarid424l7n25ffijqiy"
},
"PieceSize": 4194304,
"VerifiedDeal": false,
"Client": "t02779",
"Provider": "t01130",
"Label": "mAXCg5AIgU8+1f6b+pqMifmPhGBZBW1ru4eEyu6I0hXP5KSe+a28",
"StartEpoch": 48059,
"EndEpoch": 569768,
"StoragePricePerEpoch": "0",
"ProviderCollateral": "0",
"ClientCollateral": "0"
},
"State": {
"SectorStartEpoch": 25562,
"LastUpdatedEpoch": -1,
"SlashEpoch": -1,
"VerifiedClaim": 0
}
}
}
```
### 3.4 Retrieving the file works
https://hyperspace.filecoin.tools/828
```
$ lotus client retrieve --provider t01130 mAXCg5AIgU8+1f6b+pqMifmPhGBZBW1ru4eEyu6I0hXP5KSe+a28 mario.jpeg
Recv 0 B, Paid 0 FIL, Open (New), 0s [1674909107209474001|0]
Recv 0 B, Paid 0 FIL, DealProposed (WaitForAcceptance), 17ms [1674909107209474001|0]
Recv 0 B, Paid 0 FIL, DealAccepted (Accepted), 103ms [1674909107209474001|0]
Recv 0 B, Paid 0 FIL, PaymentChannelSkip (Ongoing), 103ms [1674909107209474001|0]
Recv 217 B, Paid 0 FIL, BlocksReceived (Ongoing), 151ms [1674909107209474001|217]
Recv 1 MiB, Paid 0 FIL, BlocksReceived (Ongoing), 728ms [1674909107209474001|1048793]
Recv 2 MiB, Paid 0 FIL, BlocksReceived (Ongoing), 858ms [1674909107209474001|2097369]
Recv 3 MiB, Paid 0 FIL, BlocksReceived (Ongoing), 957ms [1674909107209474001|3145945]
Recv 3 MiB, Paid 0 FIL, Complete (CheckComplete), 989ms [1674909107209474001|3145945]
Recv 3.565 MiB, Paid 0 FIL, BlocksReceived (CheckComplete), 994ms [1674909107209474001|3737905]
Recv 3.565 MiB, Paid 0 FIL, WaitForLastBlocks (WaitingForLastBlocks), 1.003s [1674909107209474001|3737905]
Recv 3.565 MiB, Paid 0 FIL, AllBlocksReceived (FinalizingBlockstore), 1.003s [1674909107209474001|3737905]
Recv 3.565 MiB, Paid 0 FIL, BlockstoreFinalized (Completed), 1.003s [1674909107209474001|3737905]
Success
```
## 4. Upload from IPFS
### 4.1 Install IPFS node
`$ brew install ipfs # or alternative to your OS`
### 4.2 Configure IPFS node
```
$ ipfs init
$ ipfs daemon
# stop lotus lite node
```
### 4.2 Configure Lotus lite node to use IPFS
Restart the node after editing the config. Make sure the IPFS node is running.
```
# edit config file (maybe ~/.lotus/config.toml)
[Client]
UseIpfs = true
```
### 4.3 Upload file to IPFS
```
$ ipfs add -r testfile.jpeg
added QmfDJ2aYoKEP4cTNMoyXxNbdRbBRC49pxvSbqzUJBT73VU C6675BE8-76DB-4821-A820-8E44FE642F37_1_105_c.jpeg
219.95 KiB / 219.95 KiB [====================================================================] 100.00%
```
### 4.4 Create deal
```
$ lotus client deal
Data CID (from lotus client import): QmfDJ2aYoKEP4cTNMoyXxNbdRbBRC49pxvSbqzUJBT73VU
.. calculating data size
Deal duration (days): 180
Miner Addresses (f0.. f0..), none to find: t01129
.. querying miner asks
-----
Proposing from t14tg3p2tjxr6wzu6f4p7xzrndk23wdkygfcnnepi
Balance: 7 FIL
Piece size: 256KiB (Payload size: 220.1KiB)
Duration: 4320h0m0s
Total price: ~0 FIL (0 FIL per epoch)
Verified: false
Accept (yes/no): yes
.. executing
Deal (t01129) CID: bafyreidviebrk3d65rey6hg5nr3mvhqotvgrias5nsqpcfbicch4622u5q
```
## 5. Useful commands
### 5.1 Check current deals
```
$ lotus client list-deals
DealCid DealId Provider State On Chain? Slashed? PieceCID Size Price Duration Verified
...3hzpxipu 827 t01130 StorageDealAwaitingPreCommit N N ...bfd7h4da 1016 MiB 0 FIL 521750 false
...muyanimu 0 t01130 StorageDealCheckForAcceptance N N ...5ffijqiy 3.969 MiB 0 FIL 521709 false
Message: Provider state: StorageDealPublishing
```
### 5.2 Check transfers
This can be used to check downloads/uploads from/to miners
```
lotus client list-transfers
```