Reference implementation of the Filecoin protocol, written in Go
Go to file
hannahhoward 61e2568b8d feat(datatransfer): implement and extract
feat(datatransfer): setup implementation path

Sets up a path to implementation, offering both the dagservice implementation and a future graphsync
implement, establishes message interfaces and network layer, and isolates the datatransfer module
from the app

WIP using CBOR encoding for dataxfermsg

* Bring cbor-gen stuff into datatransfer package
* make transferRequest private struct
* add transferResponse + funcs
* Rename VoucherID to VoucherType
* more tests passing

WIP trying out some stuff
* Embed request/response in message so all the interfaces work AND the CBOR unmarshaling works: this is more like the spec anyway
* get rid of pb stuff

all message tests passing, some others in datatransfer

Some cleanup for PR

Cleanup for PR, clarifying and additional comments

mod tidy

Respond to PR comments:
* Make DataTransferRequest/Response be returned in from Net
* Regenerate cbor_gen and fix the generator caller so it works better
* Please the linters

Fix tests

Initiate push and pull requests (#536)

* add issue link for data TransferID generation
* comment out failing but not relevant tests
* finish voucher rename from Identifier --> Type

tests passing

cleanup for PR

remove unused fmt import in graphsync_test

a better reflection

send data transfer response

other tests passing

feat(datatransfer): milestone 2 infrastructure

Setup test path for all tickets for milestone 2

responses alert subscribers when request is not accepted (#607)

Graphsync response is scheduled when a valid push request is received (#625)

fix(datatransfer): fix tests

fix an error with read buffers in tests

fix(deps): fix go.sum

Feat/dt graphsync pullreqs (#627)

* graphsync responses to pull requests

Feat/dt initiator cleanup (#645)

* ChannelID.To --> ChannelID.Initiator
* We now store our peer ID (from host.ID()) so it can be used when creating ChannelIDs.
* InProgressChannels returns all of impl.channels, currently just for testing
* Implements go-data-transfer issue
* Some assertions were changed based on the above.
* Renamed some variables and added some assertions based on the new understanding
* Updated SHA for graphsync module
* Updated fakeGraphSync test structs to use new interfaces from new SHA above

Techdebt/dt split graphsync impl receiver (#651)

* Split up graphsyncImpl and graphsyncReceiver
* rename graphsync to utils

DTM sends data over graphsync for validated push requests (#665)

* create channels when a request is received. register push request hook with graphsync. fix tests.
* better NewReaders
* use mutex lock around impl.channels access
* fix(datatransfer): fix test uncertainty
* fix a data race and also don't use random bytes in basic block which can fail
* privatize 3 funcs

with @hannahhoward

Feat/dt gs pullrequests (#693)

* Implements DTM Sends Data Over Graphsync For Validated Pull Requests
* rename a field in a test struct
* refactor a couple of private functions (one was refactored out of existence)

Feat/dt subscribe, file Xfer round trip (#720)

Implements the rest of Subscriber Is Notified When Request Completed #24:
* send a graphsync message within a go func and consume responses until error or transfer is complete.
* notify subscribers of results.
* Rename datatransfer.Event to EventCode.
* datatransfer.Event is now a struct that includes a message and a timestamp as well as the Event.Code int, formerly Event, update all uses
* Add extension data to graphsync request hook, gsReq
* rename sendRequest to sendDtRequest, to distinguish it from sendGsRequest, where Dt = datatransfer, Gs = graphsync
* use a mutex lock for last transfer ID
* obey the linter

Don't respond with error in gsReqRcdHook when we can't find the datatransfer extension. (#754)

* update to correct graphsync version, update tests & code to call the new graphsync hooks
* getExtensionData returns an empty struct + nil if we can't find our extension
* Don't respond with error when we can't find the extension.
* Test for same
* mod tidy

minor fix to go.sum

feat(datatransfer): switch to graphsync implementation

Move over to real graphsync implementation of data transfer, add constructors for graphsync
instances on client and miner side

fix(datatransfer): Fix validators

Validators were checking payload cid against commP -- which are not the same any more. Added a
payloadCid to client deal to maintain the record, fixed validator logic

Feat/dt extraction use go-fil-components/datatransfer (#770)

* Initial commit after changing to go-fil-components/datatransfer
* blow away the datatransfer dir
* use go-fil-components master after its PR #1 was merged
* go mod tidy

use a package

updates after rebase with master
2020-01-08 14:19:28 +01:00
.circleci manage Groth parameter cache keys by hand 2020-01-07 07:48:44 -08:00
.github/ISSUE_TEMPLATE Update issue templates 2019-12-15 18:55:01 -08:00
api Merge pull request #1030 from filecoin-project/feat/chain-list-messages 2020-01-08 13:50:55 +01:00
bin pull ipget from dists and use it 2019-09-13 15:29:38 -07:00
build Merge remote-tracking branch 'origin/master' into feat/testnet2 2020-01-08 13:53:01 +01:00
chain feat(datatransfer): implement and extract 2020-01-08 14:19:28 +01:00
cli implement list-messages command 2020-01-08 13:41:23 +01:00
cmd fix build 2020-01-07 21:10:43 -08:00
documentation adds fedora installation instructions 2019-12-27 21:58:00 +00:00
extern comment print 2019-12-24 13:42:30 +08:00
gen Merge remote-tracking branch 'origin/testnet-staging' into feat/cleanup-sectorstate-structs 2019-12-09 21:27:20 +01:00
genesis refactor(address): use extracted address library 2020-01-07 14:53:27 +01:00
lib handle rebase 2020-01-07 08:18:35 -08:00
lotuspond refactor(address): use extracted address library 2020-01-07 14:53:27 +01:00
miner introduce a limit on the number of messages a block can have 2020-01-07 12:41:26 -08:00
node feat(datatransfer): implement and extract 2020-01-08 14:19:28 +01:00
paych gofmt 2020-01-07 15:00:10 +01:00
peermgr Bump min peeers 2019-12-11 21:19:47 +01:00
retrieval gofmt 2020-01-07 15:00:10 +01:00
scripts init-network: wait for storage miner before killing daemons 2019-12-10 11:25:28 +01:00
storage handle rebase 2020-01-07 08:18:35 -08:00
tools/stats Merge pull request #986 from filecoin-project/feat/update-stats-to-golog 2020-01-07 21:38:56 -08:00
tracing Fix jaeger spam 2019-10-03 20:01:23 +02:00
.codecov.yml Disable codecov comments 2019-07-02 11:55:12 +02:00
.gitignore libp2p: enable ping 2019-12-18 20:33:13 +01:00
.gitmodules Use https in gitmodules 2019-11-27 12:35:16 +01:00
.golangci.yml Remove doc lint 2019-07-11 10:00:24 +02:00
CHANGELOG.md Add simple changelog 2019-12-11 16:00:55 +01:00
go.mod feat(datatransfer): implement and extract 2020-01-08 14:19:28 +01:00
go.sum feat(datatransfer): implement and extract 2020-01-08 14:19:28 +01:00
LICENSE-APACHE Add basic readme and licenses 2019-08-01 21:26:11 -07:00
LICENSE-MIT Add basic readme and licenses 2019-08-01 21:26:11 -07:00
Makefile Make version a valid semver 2019-12-12 16:18:33 +01:00
README.md documentation: updates readme 2019-12-01 00:28:50 -08:00

Lotus

Project Lotus - 莲

Lotus is an experimental implementation of the Filecoin Distributed Storage Network. For more details about Filecoin, check out the Filecoin Spec.

Development

All work is tracked via issues. An attempt at keeping an up-to-date view on remaining work is in the lotus testnet github project board.

Building & Documentation

For instructions on how to build lotus from source, please visit https://docs.lotu.sh or read the source here.

License

Dual-licensed under MIT + Apache 2.0