From 7d3e4c5d011c36d2ed8954b511ed24e499e8f4a6 Mon Sep 17 00:00:00 2001 From: zgfzgf <1901989065@qq.com> Date: Wed, 2 Dec 2020 12:36:05 +0800 Subject: [PATCH 01/38] feat election error miner-power to network-power --- cmd/lotus-shed/election.go | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/cmd/lotus-shed/election.go b/cmd/lotus-shed/election.go index ffe30d163..000df0c62 100644 --- a/cmd/lotus-shed/election.go +++ b/cmd/lotus-shed/election.go @@ -13,7 +13,7 @@ import ( var electionCmd = &cli.Command{ Name: "election", - Usage: "commands related to leader election", + Usage: "Commands related to leader election", Subcommands: []*cli.Command{ electionRunDummy, }, @@ -21,16 +21,19 @@ var electionCmd = &cli.Command{ var electionRunDummy = &cli.Command{ Name: "run-dummy", - Usage: "runs dummy elections with given power", + Usage: "Runs dummy elections with given power", Flags: []cli.Flag{ &cli.StringFlag{ - Name: "network-power", + Name: "network-power", + Usage: "network storage power", }, &cli.StringFlag{ - Name: "miner-power", + Name: "miner-power", + Usage: "miner storage power", }, &cli.Uint64Flag{ Name: "seed", + Usage: "rand number", Value: 0, }, }, @@ -42,7 +45,7 @@ var electionRunDummy = &cli.Command{ } networkPow, err := types.BigFromString(cctx.String("network-power")) if err != nil { - return xerrors.Errorf("decoding miner-power: %w", err) + return xerrors.Errorf("decoding network-power: %w", err) } ep := &types.ElectionProof{} From 7c8ab6977a38a25cef67e7eca8b9e3e2137eee96 Mon Sep 17 00:00:00 2001 From: zgfzgf <1901989065@qq.com> Date: Wed, 2 Dec 2020 12:57:57 +0800 Subject: [PATCH 02/38] add estimate command --- cmd/lotus-shed/election.go | 53 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/cmd/lotus-shed/election.go b/cmd/lotus-shed/election.go index 000df0c62..c844203d6 100644 --- a/cmd/lotus-shed/election.go +++ b/cmd/lotus-shed/election.go @@ -7,6 +7,7 @@ import ( "github.com/filecoin-project/lotus/chain/types" lcli "github.com/filecoin-project/lotus/cli" + builtin2 "github.com/filecoin-project/specs-actors/v2/actors/builtin" "github.com/urfave/cli/v2" "golang.org/x/xerrors" ) @@ -16,6 +17,7 @@ var electionCmd = &cli.Command{ Usage: "Commands related to leader election", Subcommands: []*cli.Command{ electionRunDummy, + electionEstimate, }, } @@ -71,3 +73,54 @@ var electionRunDummy = &cli.Command{ } }, } + +var electionEstimate = &cli.Command{ + Name: "estimate", + Usage: "Estimate elections with given power", + Flags: []cli.Flag{ + &cli.StringFlag{ + Name: "network-power", + Usage: "network storage power", + }, + &cli.StringFlag{ + Name: "miner-power", + Usage: "miner storage power", + }, + &cli.Uint64Flag{ + Name: "seed", + Usage: "rand number", + Value: 0, + }, + }, + Action: func(cctx *cli.Context) error { + minerPow, err := types.BigFromString(cctx.String("miner-power")) + if err != nil { + return xerrors.Errorf("decoding miner-power: %w", err) + } + networkPow, err := types.BigFromString(cctx.String("network-power")) + if err != nil { + return xerrors.Errorf("decoding network-power: %w", err) + } + + ep := &types.ElectionProof{} + ep.VRFProof = make([]byte, 32) + seed := cctx.Uint64("seed") + if seed == 0 { + seed = rand.Uint64() + } + binary.BigEndian.PutUint64(ep.VRFProof, seed) + + winYear := int64(0) + for i := 0; i < builtin2.EpochsInYear; i++ { + binary.BigEndian.PutUint64(ep.VRFProof[8:], uint64(i)) + j := ep.ComputeWinCount(minerPow, networkPow) + winYear += j + } + winHour := winYear * builtin2.EpochsInHour / builtin2.EpochsInYear + winDay := winYear * builtin2.EpochsInDay / builtin2.EpochsInYear + winMonth := winYear * builtin2.EpochsInDay * 30 / builtin2.EpochsInYear + fmt.Println("winInHour, winInDay, winInMonth, winInYear") + fmt.Printf("%d, %d, %d, %d\n", winHour, winDay, winMonth, winYear) + return nil + }, +} From 5b235db3663a78c9c936631d2e2cd4738e042a1e Mon Sep 17 00:00:00 2001 From: 15ho Date: Tue, 29 Dec 2020 10:07:28 +0800 Subject: [PATCH 03/38] fix: stores.FetchHandler: defer close file and increase buffer size --- extern/sector-storage/stores/http_handler.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/extern/sector-storage/stores/http_handler.go b/extern/sector-storage/stores/http_handler.go index a4c0480d4..9e927cb06 100644 --- a/extern/sector-storage/stores/http_handler.go +++ b/extern/sector-storage/stores/http_handler.go @@ -116,9 +116,12 @@ func (handler *FetchHandler) remoteGetSector(w http.ResponseWriter, r *http.Requ w.WriteHeader(500) return } + if !stat.IsDir() { + defer rd.(*os.File).Close() + } w.WriteHeader(200) - if _, err := io.Copy(w, rd); err != nil { // TODO: default 32k buf may be too small + if _, err := io.CopyBuffer(w, rd, make([]byte, CopyBuf)); err != nil { log.Errorf("%+v", err) return } From 84803f82ab90862e3e3c0a23e657d4227017d3b1 Mon Sep 17 00:00:00 2001 From: Dirk McCormick Date: Thu, 4 Mar 2021 16:56:49 +0100 Subject: [PATCH 04/38] feat: show deals CLI command --- api/api_full.go | 1 + cli/client.go | 19 +++ cli/deal/showdeals.go | 271 ++++++++++++++++++++++++++++++++++++++++++ go.mod | 6 +- go.sum | 30 ++--- 5 files changed, 305 insertions(+), 22 deletions(-) create mode 100644 cli/deal/showdeals.go diff --git a/api/api_full.go b/api/api_full.go index ca3a02c74..b56a42aa2 100644 --- a/api/api_full.go +++ b/api/api_full.go @@ -605,6 +605,7 @@ type DealInfo struct { ProposalCid cid.Cid State storagemarket.StorageDealStatus Message string // more information about deal state, particularly errors + DealStages storagemarket.DealStages Provider address.Address DataRef *storagemarket.DataRef diff --git a/cli/client.go b/cli/client.go index 98f4b0229..ecb5d4947 100644 --- a/cli/client.go +++ b/cli/client.go @@ -44,6 +44,7 @@ import ( "github.com/filecoin-project/lotus/chain/actors/builtin" "github.com/filecoin-project/lotus/chain/actors/builtin/market" "github.com/filecoin-project/lotus/chain/types" + dealcli "github.com/filecoin-project/lotus/cli/deal" "github.com/filecoin-project/lotus/lib/tablewriter" ) @@ -83,6 +84,7 @@ var clientCmd = &cli.Command{ WithCategory("storage", clientGetDealCmd), WithCategory("storage", clientListAsksCmd), WithCategory("storage", clientDealStatsCmd), + WithCategory("storage", clientShowDealsCmd), WithCategory("data", clientImportCmd), WithCategory("data", clientDropCmd), WithCategory("data", clientLocalCmd), @@ -1114,6 +1116,23 @@ var clientRetrieveCmd = &cli.Command{ }, } +var clientShowDealsCmd = &cli.Command{ + Name: "show-deals", + Usage: "Show storage deals", + Action: func(cctx *cli.Context) error { + //api, closer, err := GetFullNodeAPI(cctx) + //if err != nil { + // return err + //} + //defer closer() + var api api.FullNode + + ctx := ReqContext(cctx) + //afmt := NewAppFmt(cctx.App) + return dealcli.ShowDealsCmd(ctx, api) + }, +} + var clientDealStatsCmd = &cli.Command{ Name: "deal-stats", Usage: "Print statistics about local storage deals", diff --git a/cli/deal/showdeals.go b/cli/deal/showdeals.go new file mode 100644 index 000000000..bea986286 --- /dev/null +++ b/cli/deal/showdeals.go @@ -0,0 +1,271 @@ +package deal + +import ( + "context" + "fmt" + "io" + "time" + + tm "github.com/buger/goterm" + "github.com/fatih/color" + "github.com/filecoin-project/go-address" + "github.com/filecoin-project/go-fil-markets/storagemarket" + "github.com/filecoin-project/go-state-types/abi" + lapi "github.com/filecoin-project/lotus/api" + "github.com/filecoin-project/lotus/lib/tablewriter" + "github.com/ipfs/go-cid" + term "github.com/nsf/termbox-go" +) + +var mockDealInfos []lapi.DealInfo + +func init() { + dummyCid, err := cid.Parse("bafkqaaa") + if err != nil { + panic(err) + } + + mockDealStages := storagemarket.DealStages{ + At: time.Now(), + Stages: []storagemarket.DealStage{{ + Name: "Reserving Funds", + ExpectedDuration: "5 epochs", + StartedAt: time.Now().Add(-5 * time.Minute), + Logs: []string{ + "Sending AddBalance message for 0.3FIL", + "Waiting 5 epochs (2:30) for confirmation", + "Funds for deal reserved successfully", + }, + }, { + Name: "Sending Deal Proposal to Provider", + ExpectedDuration: "5 epochs", + StartedAt: time.Now().Add(-2 * time.Minute), + Logs: []string{ + "Proposal: 512MB for 300 days @ 0.1FIL / GB / epoch", + "Deal proposal accepted by provider", + "Funds for deal reserved successfully", + }, + }, { + Name: "Sending deal data to Provider", + ExpectedDuration: "13 minutes", + StartedAt: time.Now().Add(-53 * time.Second), + Logs: []string{ + "Progress: 4:02 254MB / 1024MB (1MB / sec)", + "Connection to Provider f01234 disconnected, retrying in 8s", + }, + }, { + Name: "Waiting for deal to be published by Provider", + ExpectedDuration: "several hours", + }, { + Name: "Waiting for pre-commit message from Provider", + ExpectedDuration: "several hours", + }, { + Name: "Waiting for prove-commit message from Provider", + ExpectedDuration: "several hours", + }}, + } + + mockDealInfos = []lapi.DealInfo{{ + State: 3, + Message: "Reserving Client Funds", + DealStages: mockDealStages, + Provider: address.TestAddress, + DataRef: nil, + PieceCID: dummyCid, + Size: 512 * 1024 * 1024, + PricePerEpoch: abi.NewTokenAmount(10), + Duration: 300, + DealID: 10, + CreationTime: time.Now().Add(-5 * time.Second), + Verified: false, + TransferChannelID: nil, + DataTransfer: nil, + }, { + State: 5, + Message: "Publishing Deal", + DealStages: mockDealStages, + Provider: address.TestAddress, + DataRef: nil, + PieceCID: dummyCid, + Size: 482 * 1024 * 1024, + PricePerEpoch: abi.NewTokenAmount(12), + Duration: 323, + DealID: 14, + CreationTime: time.Now().Add(-23 * time.Minute), + Verified: false, + TransferChannelID: nil, + DataTransfer: nil, + }, { + State: 7, + Message: "Waiting for Pre-Commit", + DealStages: mockDealStages, + Provider: address.TestAddress, + DataRef: nil, + PieceCID: dummyCid, + Size: 2 * 1024 * 1024 * 1024, + PricePerEpoch: abi.NewTokenAmount(8), + Duration: 298, + DealID: 8, + CreationTime: time.Now().Add(-3 * time.Hour), + Verified: false, + TransferChannelID: nil, + DataTransfer: nil, + }, { + State: 2, + Message: "Transferring Data", + DealStages: mockDealStages, + Provider: address.TestAddress, + DataRef: nil, + PieceCID: dummyCid, + Size: 23 * 1024 * 1024, + PricePerEpoch: abi.NewTokenAmount(11), + Duration: 328, + DealID: 3, + CreationTime: time.Now().Add(-49 * time.Hour), + Verified: false, + TransferChannelID: nil, + DataTransfer: nil, + }} +} + +func ShowDealsCmd(ctx context.Context, api lapi.FullNode) error { + ctx, cancel := context.WithCancel(ctx) + defer cancel() + + //localDeals, err := api.ClientListDeals(ctx) + //if err != nil { + // return err + //} + localDeals := mockDealInfos + + return showDealsUX(ctx, localDeals) +} + +func showDealsUX(ctx context.Context, deals []lapi.DealInfo) error { + err := term.Init() + if err != nil { + return err + } + defer term.Close() + + renderer := dealRenderer{out: tm.Screen} + + dealIdx := -1 + state := "main" + highlighted := -1 + for { + if err := ctx.Err(); err != nil { + return err + } + + switch state { + case "main": + renderMain := func(hlite int) error { + tm.Clear() + tm.MoveCursor(1, 1) + err := renderer.renderDeals(deals, hlite) + if err != nil { + return err + } + tm.Flush() + return nil + } + err := renderMain(highlighted) + if err != nil { + return err + } + + switch ev := term.PollEvent(); ev.Type { + case term.EventKey: + switch { + case ev.Ch == 'q', ev.Key == term.KeyEsc: + return nil + case ev.Key == term.KeyArrowUp: + term.Sync() + if highlighted > 0 { + highlighted-- + } + case ev.Key == term.KeyArrowDown: + term.Sync() + highlighted++ + case ev.Key == term.KeyEnter: + term.Sync() + dealIdx = highlighted + state = "deal" + } + case term.EventError: + return ev.Err + } + case "deal": + tm.Clear() + tm.MoveCursor(1, 1) + renderer.renderDeal(deals[dealIdx]) + tm.Flush() + + switch ev := term.PollEvent(); ev.Type { + case term.EventKey: + if ev.Ch == 'q' || ev.Key == term.KeyEsc || ev.Key == term.KeyEnter || ev.Key == term.KeyArrowLeft { + term.Sync() + state = "main" + } + case term.EventError: + return ev.Err + } + } + } +} + +type dealRenderer struct { + out io.Writer +} + +func (r *dealRenderer) renderDeals(deals []lapi.DealInfo, highlighted int) error { + tw := tablewriter.New( + tablewriter.Col(""), + tablewriter.Col("Created"), + tablewriter.Col("Provider"), + tablewriter.Col("Size"), + tablewriter.Col("State"), + ) + for i, di := range deals { + lineNum := fmt.Sprintf("%d", i+1) + cols := map[string]interface{}{ + "": lineNum, + "Created": time.Since(di.CreationTime).Round(time.Second), + "Provider": di.Provider, + "Size": di.Size, + "State": di.Message, + } + if i == highlighted { + for k, v := range cols { + cols[k] = color.YellowString(fmt.Sprint(v)) + } + } + tw.Write(cols) + } + return tw.Flush(r.out) +} + +func (r *dealRenderer) renderDeal(di lapi.DealInfo) error { + _, err := fmt.Fprintf(r.out, "Deal %d\n", di.DealID) + if err != nil { + return err + } + for _, stg := range di.DealStages.Stages { + msg := fmt.Sprintf("%s (%s)", stg.Name, stg.ExpectedDuration) + if stg.StartedAt.IsZero() { + msg = color.YellowString(msg) + } + _, err := fmt.Fprintf(r.out, "%s\n", msg) + if err != nil { + return err + } + for _, l := range stg.Logs { + _, err = fmt.Fprintf(r.out, " %s\n", l) + if err != nil { + return err + } + } + } + return nil +} diff --git a/go.mod b/go.mod index 54d6b42ed..5f3bce21a 100644 --- a/go.mod +++ b/go.mod @@ -72,7 +72,7 @@ require ( github.com/ipfs/go-ds-pebble v0.0.2-0.20200921225637-ce220f8ac459 github.com/ipfs/go-filestore v1.0.0 github.com/ipfs/go-fs-lock v0.0.6 - github.com/ipfs/go-graphsync v0.5.2 + github.com/ipfs/go-graphsync v0.6.0 github.com/ipfs/go-ipfs-blockstore v1.0.3 github.com/ipfs/go-ipfs-chunker v0.0.5 github.com/ipfs/go-ipfs-ds-help v1.0.0 @@ -115,6 +115,7 @@ require ( github.com/libp2p/go-libp2p-yamux v0.4.1 github.com/libp2p/go-maddr-filter v0.1.0 github.com/mattn/go-colorable v0.1.6 // indirect + github.com/mattn/go-runewidth v0.0.10 // indirect github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 github.com/mitchellh/go-homedir v1.1.0 github.com/multiformats/go-base32 v0.0.3 @@ -123,6 +124,7 @@ require ( github.com/multiformats/go-multibase v0.0.3 github.com/multiformats/go-multihash v0.0.14 github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e // indirect + github.com/nsf/termbox-go v0.0.0-20210114135735-d04385b850e8 github.com/opentracing/opentracing-go v1.2.0 github.com/polydawn/refmt v0.0.0-20190809202753-05966cbd336a github.com/prometheus/client_golang v1.6.0 @@ -159,3 +161,5 @@ replace github.com/golangci/golangci-lint => github.com/golangci/golangci-lint v replace github.com/filecoin-project/filecoin-ffi => ./extern/filecoin-ffi replace github.com/filecoin-project/test-vectors => ./extern/test-vectors + +replace github.com/filecoin-project/go-fil-markets => ../go-fil-markets diff --git a/go.sum b/go.sum index c1e5494ee..0cfaa5141 100644 --- a/go.sum +++ b/go.sum @@ -250,7 +250,6 @@ github.com/filecoin-project/go-commp-utils v0.0.0-20201119054358-b88f7a96a434 h1 github.com/filecoin-project/go-commp-utils v0.0.0-20201119054358-b88f7a96a434/go.mod h1:6s95K91mCyHY51RPWECZieD3SGWTqIFLf1mPOes9l5U= github.com/filecoin-project/go-crypto v0.0.0-20191218222705-effae4ea9f03 h1:2pMXdBnCiXjfCYx/hLqFxccPoqsSveQFxVLvNxy9bus= github.com/filecoin-project/go-crypto v0.0.0-20191218222705-effae4ea9f03/go.mod h1:+viYnvGtUTgJRdy6oaeF4MTFKAfatX071MPDPBL11EQ= -github.com/filecoin-project/go-data-transfer v1.0.1/go.mod h1:UxvfUAY9v3ub0a21BSK9u3pB2aq30Y0KMsG+w9/ysyo= github.com/filecoin-project/go-data-transfer v1.2.7 h1:WE5Cpp9eMt5BDoWOVR64QegSn6bwHQaDzyyjVU377Y0= github.com/filecoin-project/go-data-transfer v1.2.7/go.mod h1:mvjZ+C3NkBX10JP4JMu27DCjUouHFjHwUGh+Xc4yvDA= github.com/filecoin-project/go-ds-versioning v0.1.0 h1:y/X6UksYTsK8TLCI7rttCKEvl8btmWxyFMEeeWGUxIQ= @@ -258,9 +257,6 @@ github.com/filecoin-project/go-ds-versioning v0.1.0/go.mod h1:mp16rb4i2QPmxBnman github.com/filecoin-project/go-fil-commcid v0.0.0-20200716160307-8f644712406f/go.mod h1:Eaox7Hvus1JgPrL5+M3+h7aSPHc0cVqpSxA+TxIEpZQ= github.com/filecoin-project/go-fil-commcid v0.0.0-20201016201715-d41df56b4f6a h1:hyJ+pUm/4U4RdEZBlg6k8Ma4rDiuvqyGpoICXAxwsTg= github.com/filecoin-project/go-fil-commcid v0.0.0-20201016201715-d41df56b4f6a/go.mod h1:Eaox7Hvus1JgPrL5+M3+h7aSPHc0cVqpSxA+TxIEpZQ= -github.com/filecoin-project/go-fil-markets v1.0.5-0.20201113164554-c5eba40d5335/go.mod h1:AJySOJC00JRWEZzRG2KsfUnqEf5ITXxeX09BE9N4f9c= -github.com/filecoin-project/go-fil-markets v1.1.9 h1:sA0NIEOpy7brZaeXeNgdXg5pvHaBtD5OTRlraOUbI0w= -github.com/filecoin-project/go-fil-markets v1.1.9/go.mod h1:0yQu5gvrjFoAIyzPSSJ+xUdCG83vjInAFbTswIB5/hk= github.com/filecoin-project/go-hamt-ipld v0.1.5 h1:uoXrKbCQZ49OHpsTCkrThPNelC4W3LPEk0OrS/ytIBM= github.com/filecoin-project/go-hamt-ipld v0.1.5/go.mod h1:6Is+ONR5Cd5R6XZoCse1CWaXZc0Hdb/JeX+EQCQzX24= github.com/filecoin-project/go-hamt-ipld/v2 v2.0.0 h1:b3UDemBYN2HNfk3KOXNuxgTTxlWi3xVvbQP0IT38fvM= @@ -288,10 +284,8 @@ github.com/filecoin-project/go-statestore v0.1.0/go.mod h1:LFc9hD+fRxPqiHiaqUEZO github.com/filecoin-project/go-storedcounter v0.0.0-20200421200003-1c99c62e8a5b h1:fkRZSPrYpk42PV3/lIXiL0LHetxde7vyYYvSsttQtfg= github.com/filecoin-project/go-storedcounter v0.0.0-20200421200003-1c99c62e8a5b/go.mod h1:Q0GQOBtKf1oE10eSXSlhN45kDBdGvEcVOqMiffqX+N8= github.com/filecoin-project/specs-actors v0.9.4/go.mod h1:BStZQzx5x7TmCkLv0Bpa07U6cPKol6fd3w9KjMPZ6Z4= -github.com/filecoin-project/specs-actors v0.9.12/go.mod h1:TS1AW/7LbG+615j4NsjMK1qlpAwaFsG9w0V2tg2gSao= github.com/filecoin-project/specs-actors v0.9.13 h1:rUEOQouefi9fuVY/2HOroROJlZbOzWYXXeIh41KF2M4= github.com/filecoin-project/specs-actors v0.9.13/go.mod h1:TS1AW/7LbG+615j4NsjMK1qlpAwaFsG9w0V2tg2gSao= -github.com/filecoin-project/specs-actors/v2 v2.0.1/go.mod h1:v2NZVYinNIKA9acEMBm5wWXxqv5+frFEbekBFemYghY= github.com/filecoin-project/specs-actors/v2 v2.3.2/go.mod h1:UuJQLoTx/HPvvWeqlIFmC/ywlOLHNe8SNQ3OunFbu2Y= github.com/filecoin-project/specs-actors/v2 v2.3.4 h1:NZK2oMCcA71wNsUzDBmLQyRMzcCnX9tDGvwZ53G67j8= github.com/filecoin-project/specs-actors/v2 v2.3.4/go.mod h1:UuJQLoTx/HPvvWeqlIFmC/ywlOLHNe8SNQ3OunFbu2Y= @@ -558,10 +552,10 @@ github.com/ipfs/go-filestore v1.0.0/go.mod h1:/XOCuNtIe2f1YPbiXdYvD0BKLA0JR1MgPi github.com/ipfs/go-fs-lock v0.0.6 h1:sn3TWwNVQqSeNjlWy6zQ1uUGAZrV3hPOyEA6y1/N2a0= github.com/ipfs/go-fs-lock v0.0.6/go.mod h1:OTR+Rj9sHiRubJh3dRhD15Juhd/+w6VPOY28L7zESmM= github.com/ipfs/go-graphsync v0.1.0/go.mod h1:jMXfqIEDFukLPZHqDPp8tJMbHO9Rmeb9CEGevngQbmE= -github.com/ipfs/go-graphsync v0.4.2/go.mod h1:/VmbZTUdUMTbNkgzAiCEucIIAU3BkLE2cZrDCVUhyi0= -github.com/ipfs/go-graphsync v0.4.3/go.mod h1:mPOwDYv128gf8gxPFgXnz4fNrSYPsWyqisJ7ych+XDY= github.com/ipfs/go-graphsync v0.5.2 h1:USD+daaSC+7pLHCxROThSaF6SF7WYXF03sjrta0rCfA= github.com/ipfs/go-graphsync v0.5.2/go.mod h1:e2ZxnClqBBYAtd901g9vXMJzS47labjAtOzsWtOzKNk= +github.com/ipfs/go-graphsync v0.6.0 h1:x6UvDUGA7wjaKNqx5Vbo7FGT8aJ5ryYA0dMQ5jN3dF0= +github.com/ipfs/go-graphsync v0.6.0/go.mod h1:e2ZxnClqBBYAtd901g9vXMJzS47labjAtOzsWtOzKNk= github.com/ipfs/go-hamt-ipld v0.1.1/go.mod h1:1EZCr2v0jlCnhpa+aZ0JZYp8Tt2w16+JJOAVz17YcDk= github.com/ipfs/go-ipfs-blockstore v0.0.1/go.mod h1:d3WClOmRQKFnJ0Jz/jj/zmksX0ma1gROTlovZKBmN08= github.com/ipfs/go-ipfs-blockstore v0.1.0/go.mod h1:5aD0AvHPi7mZc6Ci1WCAhiBQu2IsfTduLl+422H6Rqw= @@ -613,7 +607,6 @@ github.com/ipfs/go-ipld-cbor v0.0.1/go.mod h1:RXHr8s4k0NE0TKhnrxqZC9M888QfsBN9rh github.com/ipfs/go-ipld-cbor v0.0.2/go.mod h1:wTBtrQZA3SoFKMVkp6cn6HMRteIB1VsmHA0AQFOn7Nc= github.com/ipfs/go-ipld-cbor v0.0.3/go.mod h1:wTBtrQZA3SoFKMVkp6cn6HMRteIB1VsmHA0AQFOn7Nc= github.com/ipfs/go-ipld-cbor v0.0.4/go.mod h1:BkCduEx3XBCO6t2Sfo5BaHzuok7hbhdMm9Oh8B2Ftq4= -github.com/ipfs/go-ipld-cbor v0.0.5-0.20200204214505-252690b78669/go.mod h1:BkCduEx3XBCO6t2Sfo5BaHzuok7hbhdMm9Oh8B2Ftq4= github.com/ipfs/go-ipld-cbor v0.0.5 h1:ovz4CHKogtG2KB/h1zUp5U0c/IzZrL435rCh5+K/5G8= github.com/ipfs/go-ipld-cbor v0.0.5/go.mod h1:BkCduEx3XBCO6t2Sfo5BaHzuok7hbhdMm9Oh8B2Ftq4= github.com/ipfs/go-ipld-format v0.0.1/go.mod h1:kyJtbkDALmFHv3QR6et67i35QzO3S0dCDnkOJhcZkms= @@ -668,7 +661,6 @@ github.com/ipfs/iptb v1.4.0 h1:YFYTrCkLMRwk/35IMyC6+yjoQSHTEcNcefBStLJzgvo= github.com/ipfs/iptb v1.4.0/go.mod h1:1rzHpCYtNp87/+hTxG5TfCVn/yMY3dKnLn8tBiMfdmg= github.com/ipfs/iptb-plugins v0.2.1 h1:au4HWn9/pRPbkxA08pDx2oRAs4cnbgQWgV0teYXuuGA= github.com/ipfs/iptb-plugins v0.2.1/go.mod h1:QXMbtIWZ+jRsW8a4h13qAKU7jcM7qaittO8wOsTP0Rs= -github.com/ipld/go-car v0.1.1-0.20200923150018-8cdef32e2da4/go.mod h1:xrMEcuSq+D1vEwl+YAXsg/JfA98XGpXDwnkIL4Aimqw= github.com/ipld/go-car v0.1.1-0.20201119040415-11b6074b6d4d h1:iphSzTuPqyDgH7WUVZsdqUnQNzYgIblsVr1zhVNA33U= github.com/ipld/go-car v0.1.1-0.20201119040415-11b6074b6d4d/go.mod h1:2Gys8L8MJ6zkh1gktTSXreY63t4UbyvNp5JaudTyxHQ= github.com/ipld/go-ipld-prime v0.0.2-0.20200428162820-8b59dc292b8e/go.mod h1:uVIwe/u0H4VdKv3kaN1ck7uCb6yD9cFLS9/ELyXbsw8= @@ -789,7 +781,6 @@ github.com/libp2p/go-libp2p v0.7.4/go.mod h1:oXsBlTLF1q7pxr+9w6lqzS1ILpyHsaBPniV github.com/libp2p/go-libp2p v0.8.1/go.mod h1:QRNH9pwdbEBpx5DTJYg+qxcVaDMAz3Ee/qDKwXujH5o= github.com/libp2p/go-libp2p v0.8.3/go.mod h1:EsH1A+8yoWK+L4iKcbPYu6MPluZ+CHWI9El8cTaefiM= github.com/libp2p/go-libp2p v0.9.2/go.mod h1:cunHNLDVus66Ct9iXXcjKRLdmHdFdHVe1TAnbubJQqQ= -github.com/libp2p/go-libp2p v0.10.0/go.mod h1:yBJNpb+mGJdgrwbKAKrhPU0u3ogyNFTfjJ6bdM+Q/G8= github.com/libp2p/go-libp2p v0.12.0 h1:+xai9RQnQ9l5elFOKvp5wRyjyWisSwEx+6nU2+onpUA= github.com/libp2p/go-libp2p v0.12.0/go.mod h1:FpHZrfC1q7nA8jitvdjKBDF31hguaC676g/nT9PgQM0= github.com/libp2p/go-libp2p-asn-util v0.0.0-20200825225859-85005c6cf052 h1:BM7aaOF7RpmNn9+9g6uTjGJ0cTzWr5j9i9IKeun2M8U= @@ -820,7 +811,6 @@ github.com/libp2p/go-libp2p-circuit v0.1.3/go.mod h1:Xqh2TjSy8DD5iV2cCOMzdynd6h8 github.com/libp2p/go-libp2p-circuit v0.1.4/go.mod h1:CY67BrEjKNDhdTk8UgBX1Y/H5c3xkAcs3gnksxY7osU= github.com/libp2p/go-libp2p-circuit v0.2.1/go.mod h1:BXPwYDN5A8z4OEY9sOfr2DUQMLQvKt/6oku45YUmjIo= github.com/libp2p/go-libp2p-circuit v0.2.2/go.mod h1:nkG3iE01tR3FoQ2nMm06IUrCpCyJp1Eo4A1xYdpjfs4= -github.com/libp2p/go-libp2p-circuit v0.2.3/go.mod h1:nkG3iE01tR3FoQ2nMm06IUrCpCyJp1Eo4A1xYdpjfs4= github.com/libp2p/go-libp2p-circuit v0.4.0 h1:eqQ3sEYkGTtybWgr6JLqJY6QLtPWRErvFjFDfAOO1wc= github.com/libp2p/go-libp2p-circuit v0.4.0/go.mod h1:t/ktoFIUzM6uLQ+o1G6NuBl2ANhBKN9Bc8jRIk31MoA= github.com/libp2p/go-libp2p-connmgr v0.1.1/go.mod h1:wZxh8veAmU5qdrfJ0ZBLcU8oJe9L82ciVP/fl1VHjXk= @@ -926,7 +916,6 @@ github.com/libp2p/go-libp2p-pubsub v0.3.2-0.20200527132641-c0712c6e92cf/go.mod h github.com/libp2p/go-libp2p-pubsub v0.4.1 h1:j4umIg5nyus+sqNfU+FWvb9aeYFQH/A+nDFhWj+8yy8= github.com/libp2p/go-libp2p-pubsub v0.4.1/go.mod h1:izkeMLvz6Ht8yAISXjx60XUQZMq9ZMe5h2ih4dLIBIQ= github.com/libp2p/go-libp2p-quic-transport v0.1.1/go.mod h1:wqG/jzhF3Pu2NrhJEvE+IE0NTHNXslOPn9JQzyCAxzU= -github.com/libp2p/go-libp2p-quic-transport v0.5.0/go.mod h1:IEcuC5MLxvZ5KuHKjRu+dr3LjCT1Be3rcD/4d8JrX8M= github.com/libp2p/go-libp2p-quic-transport v0.9.0 h1:WPuq5nV/chmIZIzvrkC2ulSdAQ0P0BDvgvAhZFOZ59E= github.com/libp2p/go-libp2p-quic-transport v0.9.0/go.mod h1:xyY+IgxL0qsW7Kiutab0+NlxM0/p9yRtrGTYsuMWf70= github.com/libp2p/go-libp2p-record v0.0.1/go.mod h1:grzqg263Rug/sRex85QrDOLntdFAymLDLm7lxMgU79Q= @@ -952,7 +941,6 @@ github.com/libp2p/go-libp2p-swarm v0.2.1/go.mod h1:x07b4zkMFo2EvgPV2bMTlNmdQc8i+ github.com/libp2p/go-libp2p-swarm v0.2.2/go.mod h1:fvmtQ0T1nErXym1/aa1uJEyN7JzaTNyBcHImCxRpPKU= github.com/libp2p/go-libp2p-swarm v0.2.3/go.mod h1:P2VO/EpxRyDxtChXz/VPVXyTnszHvokHKRhfkEgFKNM= github.com/libp2p/go-libp2p-swarm v0.2.4/go.mod h1:/xIpHFPPh3wmSthtxdGbkHZ0OET1h/GGZes8Wku/M5Y= -github.com/libp2p/go-libp2p-swarm v0.2.7/go.mod h1:ZSJ0Q+oq/B1JgfPHJAT2HTall+xYRNYp1xs4S2FBWKA= github.com/libp2p/go-libp2p-swarm v0.2.8/go.mod h1:JQKMGSth4SMqonruY0a8yjlPVIkb0mdNSwckW7OYziM= github.com/libp2p/go-libp2p-swarm v0.3.0/go.mod h1:hdv95GWCTmzkgeJpP+GK/9D9puJegb7H57B5hWQR5Kk= github.com/libp2p/go-libp2p-swarm v0.3.1 h1:UTobu+oQHGdXTOGpZ4RefuVqYoJXcT0EBtSR74m2LkI= @@ -1068,7 +1056,6 @@ github.com/libp2p/go-yamux v1.4.1/go.mod h1:fr7aVgmdNGJK+N1g+b6DW6VxzbRCjCOejR/h github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= github.com/lucas-clemente/quic-go v0.11.2/go.mod h1:PpMmPfPKO9nKJ/psF49ESTAGQSdfXxlg1otPbEB2nOw= -github.com/lucas-clemente/quic-go v0.16.0/go.mod h1:I0+fcNTdb9eS1ZcjQZbDVPGchJ86chcIxPALn9lEJqE= github.com/lucas-clemente/quic-go v0.18.1 h1:DMR7guC0NtVS8zNZR3IO7NARZvZygkSC56GGtC6cyys= github.com/lucas-clemente/quic-go v0.18.1/go.mod h1:yXttHsSNxQi8AWijC/vLP+OJczXqzHSOcJrM5ITUlCg= github.com/lufia/iostat v1.1.0/go.mod h1:rEPNA0xXgjHQjuI5Cy05sLlS2oRcSlWHRLrvh/AQ+Pg= @@ -1077,10 +1064,8 @@ github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0Q github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/marten-seemann/qpack v0.1.0/go.mod h1:LFt1NU/Ptjip0C2CPkhimBz5CGE3WGDAUWqna+CNTrI= github.com/marten-seemann/qpack v0.2.0/go.mod h1:F7Gl5L1jIgN1D11ucXefiuJS9UMVP2opoCp2jDKb7wc= github.com/marten-seemann/qtls v0.2.3/go.mod h1:xzjG7avBwGGbdZ8dTGxlBnLArsVKLvwmjgmPuiQEcYk= -github.com/marten-seemann/qtls v0.9.1/go.mod h1:T1MmAdDPyISzxlK6kjRr0pcZFBVd1OZbBb/j3cvzHhk= github.com/marten-seemann/qtls v0.10.0 h1:ECsuYUKalRL240rRD4Ri33ISb7kAQ3qGDlrrl55b2pc= github.com/marten-seemann/qtls v0.10.0/go.mod h1:UvMd1oaYDACI99/oZUYLzMCkBXQVT0aGm99sJhbT8hs= github.com/marten-seemann/qtls-go1-15 v0.1.0 h1:i/YPXVxz8q9umso/5y474CNcHmTpA+5DH+mFPjx6PZg= @@ -1101,6 +1086,9 @@ github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Ky github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.7 h1:Ei8KR0497xHyKJPAv59M1dkC+rOZCMBJ+t3fZ+twI54= github.com/mattn/go-runewidth v0.0.7/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= +github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= +github.com/mattn/go-runewidth v0.0.10 h1:CoZ3S2P7pvtP45xOtBw+/mDL2z0RKI576gSkzRRpdGg= +github.com/mattn/go-runewidth v0.0.10/go.mod h1:RAqKPSqVFrSLVXbA8x7dzmKdmGzieGRCM46jaSJTDAk= github.com/mattn/go-xmlrpc v0.0.3/go.mod h1:mqc2dz7tP5x5BKlCahN/n+hs7OSZKJkS9JsHNBRlrxA= github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= @@ -1217,6 +1205,8 @@ github.com/nikkolasg/hexjson v0.0.0-20181101101858-78e39397e00c h1:5bFTChQxSKNwy github.com/nikkolasg/hexjson v0.0.0-20181101101858-78e39397e00c/go.mod h1:7qN3Y0BvzRUf4LofcoJplQL10lsFDb4PYlePTVwrP28= github.com/nkovacs/streamquote v0.0.0-20170412213628-49af9bddb229 h1:E2B8qYyeSgv5MXpmzZXRNp8IAQ4vjxIjhpAf5hv/tAg= github.com/nkovacs/streamquote v0.0.0-20170412213628-49af9bddb229/go.mod h1:0aYXnNPJ8l7uZxf45rWW1a/uME32OF0rhiYGNQ2oF2E= +github.com/nsf/termbox-go v0.0.0-20210114135735-d04385b850e8 h1:3vzIuru1svOK2sXlg4XcrO3KkGRneIejmfQfR+ptSW8= +github.com/nsf/termbox-go v0.0.0-20210114135735-d04385b850e8/go.mod h1:T0cTdVuOwf7pHQNtfhnEbzHbcNyCEcVU4YPpouCbVxo= github.com/nxadm/tail v1.4.4 h1:DQuhQpB1tVlglWS2hLQ5OV6B5r8aGxSrPc5Qo6uTN78= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= @@ -1225,7 +1215,6 @@ github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:v github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.8.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.12.0/go.mod h1:oUhWkIvk5aDxtKvDDuw8gItl8pKl42LzjC9KZE0HfGg= github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= github.com/onsi/ginkgo v1.14.0 h1:2mOpI4JVVPBN+WQRa0WKH2eXR+Ey+uK4n7Zj0aYpIQA= @@ -1233,7 +1222,6 @@ github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9k github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= -github.com/onsi/gomega v1.8.1/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoTdcA= github.com/onsi/gomega v1.9.0/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoTdcA= github.com/onsi/gomega v1.10.1 h1:o0+MgICZLuZ7xjH7Vx6zS/zcu93/BEp1VwkIW1mEXCE= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= @@ -1322,6 +1310,8 @@ github.com/raulk/go-watchdog v1.0.1/go.mod h1:lzSbAl5sh4rtI8tYHU01BWIDzgzqaQLj6R github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0 h1:OdAsTTz6OkFY5QxjkYwrChwuRruF69c169dPK26NUlk= github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= +github.com/rivo/uniseg v0.1.0 h1:+2KBaVoUmb9XzDsrx/Ct0W/EYOSFf/nWTauy++DprtY= +github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= @@ -1411,7 +1401,6 @@ github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXf github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= -github.com/stretchr/testify v1.6.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= @@ -1642,7 +1631,6 @@ golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73r golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190227160552-c95aed5357e7/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190228165749-92fc7df08ae7/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190313220215-9f648a60d977/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= From fe473e111cdeea3fd193006fe1caac3299ce0301 Mon Sep 17 00:00:00 2001 From: Aayush Rajasekaran Date: Fri, 12 Mar 2021 16:58:43 -0500 Subject: [PATCH 05/38] Fix creation of remainder account when it's not a multisig --- chain/gen/genesis/f01_init.go | 19 ++++++++++++++++--- chain/gen/genesis/genesis.go | 14 ++++---------- 2 files changed, 20 insertions(+), 13 deletions(-) diff --git a/chain/gen/genesis/f01_init.go b/chain/gen/genesis/f01_init.go index 9fc6cfb9e..718eb4480 100644 --- a/chain/gen/genesis/f01_init.go +++ b/chain/gen/genesis/f01_init.go @@ -133,9 +133,22 @@ func SetupInitActor(bs bstore.Blockstore, netname string, initialActors []genesi } } - err := setupMsig(remainder.Meta) - if err != nil { - return 0, nil, nil, xerrors.Errorf("setting up remainder msig: %w", err) + if remainder.Type == genesis.TAccount { + var ainfo genesis.AccountMeta + if err := json.Unmarshal(remainder.Meta, &ainfo); err != nil { + return 0, nil, nil, xerrors.Errorf("unmarshaling account meta: %w", err) + } + + // TODO: Use builtin.ReserveAddress... + value := cbg.CborInt(90) + if err := amap.Put(abi.AddrKey(ainfo.Owner), &value); err != nil { + return 0, nil, nil, err + } + } else if remainder.Type == genesis.TMultisig { + err := setupMsig(remainder.Meta) + if err != nil { + return 0, nil, nil, xerrors.Errorf("setting up remainder msig: %w", err) + } } amapaddr, err := amap.Root() diff --git a/chain/gen/genesis/genesis.go b/chain/gen/genesis/genesis.go index d382e4d0d..4b86db550 100644 --- a/chain/gen/genesis/genesis.go +++ b/chain/gen/genesis/genesis.go @@ -330,24 +330,18 @@ func MakeInitialStateTree(ctx context.Context, bs bstore.Blockstore, template ge if err := json.Unmarshal(template.RemainderAccount.Meta, &ainfo); err != nil { return nil, nil, xerrors.Errorf("unmarshaling account meta: %w", err) } - st, err := cst.Put(ctx, &account0.State{Address: ainfo.Owner}) - if err != nil { - return nil, nil, err - } _, ok := keyIDs[ainfo.Owner] if ok { return nil, nil, fmt.Errorf("remainder account has already been declared, cannot be assigned 90: %s", ainfo.Owner) } - err = state.SetActor(builtin.ReserveAddress, &types.Actor{ - Code: builtin0.AccountActorCodeID, - Balance: template.RemainderAccount.Balance, - Head: st, - }) + keyIDs[ainfo.Owner] = builtin.ReserveAddress + err = createAccountActor(ctx, cst, state, template.RemainderAccount, keyIDs) if err != nil { - return nil, nil, xerrors.Errorf("setting remainder account: %w", err) + return nil, nil, xerrors.Errorf("creating remainder acct: %w", err) } + case genesis.TMultisig: if err = createMultisigAccount(ctx, bs, cst, state, builtin.ReserveAddress, template.RemainderAccount, keyIDs); err != nil { return nil, nil, xerrors.Errorf("failed to set up remainder: %w", err) From 9d6c77d93f818fbcae90135084f9d4636e39983e Mon Sep 17 00:00:00 2001 From: Anton Evangelatov Date: Wed, 10 Mar 2021 13:25:52 +0100 Subject: [PATCH 06/38] remove interactive UX; add `inspect-deal` cmd --- api/api_full.go | 2 +- api/types.go | 2 + build/params_2k.go | 3 + cli/client.go | 30 ++-- cli/deal/showdeals.go | 299 +++++++------------------------------ go.mod | 3 + node/impl/client/client.go | 4 + 7 files changed, 88 insertions(+), 255 deletions(-) diff --git a/api/api_full.go b/api/api_full.go index b56a42aa2..084b04493 100644 --- a/api/api_full.go +++ b/api/api_full.go @@ -605,7 +605,7 @@ type DealInfo struct { ProposalCid cid.Cid State storagemarket.StorageDealStatus Message string // more information about deal state, particularly errors - DealStages storagemarket.DealStages + DealStages *storagemarket.DealStages Provider address.Address DataRef *storagemarket.DataRef diff --git a/api/types.go b/api/types.go index 28141b83a..0c3bcb32b 100644 --- a/api/types.go +++ b/api/types.go @@ -60,6 +60,7 @@ type DataTransferChannel struct { Message string OtherPeer peer.ID Transferred uint64 + Stages *datatransfer.ChannelStages } // NewDataTransferChannel constructs an API DataTransferChannel type from full channel state snapshot and a host id @@ -70,6 +71,7 @@ func NewDataTransferChannel(hostID peer.ID, channelState datatransfer.ChannelSta BaseCID: channelState.BaseCID(), IsSender: channelState.Sender() == hostID, Message: channelState.Message(), + Stages: channelState.Stages(), } stringer, ok := channelState.Voucher().(fmt.Stringer) if ok { diff --git a/build/params_2k.go b/build/params_2k.go index 63f7e70b4..35443a4b5 100644 --- a/build/params_2k.go +++ b/build/params_2k.go @@ -38,6 +38,9 @@ func init() { policy.SetConsensusMinerMinPower(abi.NewStoragePower(2048)) policy.SetMinVerifiedDealSize(abi.NewStoragePower(256)) + //policy.SetWPoStChallengeWindow(abi.ChainEpoch(5)) + policy.SetPreCommitChallengeDelay(abi.ChainEpoch(10)) + BuildType |= Build2k } diff --git a/cli/client.go b/cli/client.go index ecb5d4947..b640f85f7 100644 --- a/cli/client.go +++ b/cli/client.go @@ -84,7 +84,7 @@ var clientCmd = &cli.Command{ WithCategory("storage", clientGetDealCmd), WithCategory("storage", clientListAsksCmd), WithCategory("storage", clientDealStatsCmd), - WithCategory("storage", clientShowDealsCmd), + WithCategory("storage", clientInspectDealCmd), WithCategory("data", clientImportCmd), WithCategory("data", clientDropCmd), WithCategory("data", clientLocalCmd), @@ -1116,20 +1116,26 @@ var clientRetrieveCmd = &cli.Command{ }, } -var clientShowDealsCmd = &cli.Command{ - Name: "show-deals", - Usage: "Show storage deals", +var clientInspectDealCmd = &cli.Command{ + Name: "inspect-deal", + Usage: "Inspect storage deal", + Flags: []cli.Flag{ + &cli.IntFlag{ + Name: "deal-id", + }, + &cli.StringFlag{ + Name: "proposal-cid", + }, + }, Action: func(cctx *cli.Context) error { - //api, closer, err := GetFullNodeAPI(cctx) - //if err != nil { - // return err - //} - //defer closer() - var api api.FullNode + api, closer, err := GetFullNodeAPI(cctx) + if err != nil { + return err + } + defer closer() ctx := ReqContext(cctx) - //afmt := NewAppFmt(cctx.App) - return dealcli.ShowDealsCmd(ctx, api) + return dealcli.InspectDealCmd(ctx, api, cctx.String("proposal-cid"), cctx.Int("deal-id")) }, } diff --git a/cli/deal/showdeals.go b/cli/deal/showdeals.go index bea986286..de27d897d 100644 --- a/cli/deal/showdeals.go +++ b/cli/deal/showdeals.go @@ -2,270 +2,85 @@ package deal import ( "context" + "errors" "fmt" - "io" + "strings" "time" - tm "github.com/buger/goterm" "github.com/fatih/color" - "github.com/filecoin-project/go-address" - "github.com/filecoin-project/go-fil-markets/storagemarket" - "github.com/filecoin-project/go-state-types/abi" lapi "github.com/filecoin-project/lotus/api" - "github.com/filecoin-project/lotus/lib/tablewriter" - "github.com/ipfs/go-cid" - term "github.com/nsf/termbox-go" ) var mockDealInfos []lapi.DealInfo -func init() { - dummyCid, err := cid.Parse("bafkqaaa") - if err != nil { - panic(err) - } - - mockDealStages := storagemarket.DealStages{ - At: time.Now(), - Stages: []storagemarket.DealStage{{ - Name: "Reserving Funds", - ExpectedDuration: "5 epochs", - StartedAt: time.Now().Add(-5 * time.Minute), - Logs: []string{ - "Sending AddBalance message for 0.3FIL", - "Waiting 5 epochs (2:30) for confirmation", - "Funds for deal reserved successfully", - }, - }, { - Name: "Sending Deal Proposal to Provider", - ExpectedDuration: "5 epochs", - StartedAt: time.Now().Add(-2 * time.Minute), - Logs: []string{ - "Proposal: 512MB for 300 days @ 0.1FIL / GB / epoch", - "Deal proposal accepted by provider", - "Funds for deal reserved successfully", - }, - }, { - Name: "Sending deal data to Provider", - ExpectedDuration: "13 minutes", - StartedAt: time.Now().Add(-53 * time.Second), - Logs: []string{ - "Progress: 4:02 254MB / 1024MB (1MB / sec)", - "Connection to Provider f01234 disconnected, retrying in 8s", - }, - }, { - Name: "Waiting for deal to be published by Provider", - ExpectedDuration: "several hours", - }, { - Name: "Waiting for pre-commit message from Provider", - ExpectedDuration: "several hours", - }, { - Name: "Waiting for prove-commit message from Provider", - ExpectedDuration: "several hours", - }}, - } - - mockDealInfos = []lapi.DealInfo{{ - State: 3, - Message: "Reserving Client Funds", - DealStages: mockDealStages, - Provider: address.TestAddress, - DataRef: nil, - PieceCID: dummyCid, - Size: 512 * 1024 * 1024, - PricePerEpoch: abi.NewTokenAmount(10), - Duration: 300, - DealID: 10, - CreationTime: time.Now().Add(-5 * time.Second), - Verified: false, - TransferChannelID: nil, - DataTransfer: nil, - }, { - State: 5, - Message: "Publishing Deal", - DealStages: mockDealStages, - Provider: address.TestAddress, - DataRef: nil, - PieceCID: dummyCid, - Size: 482 * 1024 * 1024, - PricePerEpoch: abi.NewTokenAmount(12), - Duration: 323, - DealID: 14, - CreationTime: time.Now().Add(-23 * time.Minute), - Verified: false, - TransferChannelID: nil, - DataTransfer: nil, - }, { - State: 7, - Message: "Waiting for Pre-Commit", - DealStages: mockDealStages, - Provider: address.TestAddress, - DataRef: nil, - PieceCID: dummyCid, - Size: 2 * 1024 * 1024 * 1024, - PricePerEpoch: abi.NewTokenAmount(8), - Duration: 298, - DealID: 8, - CreationTime: time.Now().Add(-3 * time.Hour), - Verified: false, - TransferChannelID: nil, - DataTransfer: nil, - }, { - State: 2, - Message: "Transferring Data", - DealStages: mockDealStages, - Provider: address.TestAddress, - DataRef: nil, - PieceCID: dummyCid, - Size: 23 * 1024 * 1024, - PricePerEpoch: abi.NewTokenAmount(11), - Duration: 328, - DealID: 3, - CreationTime: time.Now().Add(-49 * time.Hour), - Verified: false, - TransferChannelID: nil, - DataTransfer: nil, - }} -} - -func ShowDealsCmd(ctx context.Context, api lapi.FullNode) error { +func InspectDealCmd(ctx context.Context, api lapi.FullNode, proposalCid string, dealId int) error { ctx, cancel := context.WithCancel(ctx) defer cancel() - //localDeals, err := api.ClientListDeals(ctx) - //if err != nil { - // return err - //} - localDeals := mockDealInfos - - return showDealsUX(ctx, localDeals) -} - -func showDealsUX(ctx context.Context, deals []lapi.DealInfo) error { - err := term.Init() + deals, err := api.ClientListDeals(ctx) if err != nil { return err } - defer term.Close() - renderer := dealRenderer{out: tm.Screen} - - dealIdx := -1 - state := "main" - highlighted := -1 - for { - if err := ctx.Err(); err != nil { - return err + var di lapi.DealInfo + found := false + for _, cdi := range deals { + if proposalCid != "" && cdi.ProposalCid.String() == proposalCid { + di = cdi + found = true + break } - switch state { - case "main": - renderMain := func(hlite int) error { - tm.Clear() - tm.MoveCursor(1, 1) - err := renderer.renderDeals(deals, hlite) - if err != nil { - return err - } - tm.Flush() - return nil - } - err := renderMain(highlighted) - if err != nil { - return err - } - - switch ev := term.PollEvent(); ev.Type { - case term.EventKey: - switch { - case ev.Ch == 'q', ev.Key == term.KeyEsc: - return nil - case ev.Key == term.KeyArrowUp: - term.Sync() - if highlighted > 0 { - highlighted-- - } - case ev.Key == term.KeyArrowDown: - term.Sync() - highlighted++ - case ev.Key == term.KeyEnter: - term.Sync() - dealIdx = highlighted - state = "deal" - } - case term.EventError: - return ev.Err - } - case "deal": - tm.Clear() - tm.MoveCursor(1, 1) - renderer.renderDeal(deals[dealIdx]) - tm.Flush() - - switch ev := term.PollEvent(); ev.Type { - case term.EventKey: - if ev.Ch == 'q' || ev.Key == term.KeyEsc || ev.Key == term.KeyEnter || ev.Key == term.KeyArrowLeft { - term.Sync() - state = "main" - } - case term.EventError: - return ev.Err - } + if dealId != 0 && int(cdi.DealID) == dealId { + di = cdi + found = true + break } } -} -type dealRenderer struct { - out io.Writer -} + if !found { + if proposalCid != "" { + return fmt.Errorf("cannot find deal with proposal cid: %s", proposalCid) + } + if dealId != 0 { + return fmt.Errorf("cannot find deal with deal id: %v", dealId) + } + return errors.New("you must specify proposal cid or deal id in order to inspect a deal") + } -func (r *dealRenderer) renderDeals(deals []lapi.DealInfo, highlighted int) error { - tw := tablewriter.New( - tablewriter.Col(""), - tablewriter.Col("Created"), - tablewriter.Col("Provider"), - tablewriter.Col("Size"), - tablewriter.Col("State"), - ) - for i, di := range deals { - lineNum := fmt.Sprintf("%d", i+1) - cols := map[string]interface{}{ - "": lineNum, - "Created": time.Since(di.CreationTime).Round(time.Second), - "Provider": di.Provider, - "Size": di.Size, - "State": di.Message, - } - if i == highlighted { - for k, v := range cols { - cols[k] = color.YellowString(fmt.Sprint(v)) - } - } - tw.Write(cols) - } - return tw.Flush(r.out) -} + renderDeal(di) -func (r *dealRenderer) renderDeal(di lapi.DealInfo) error { - _, err := fmt.Fprintf(r.out, "Deal %d\n", di.DealID) - if err != nil { - return err - } - for _, stg := range di.DealStages.Stages { - msg := fmt.Sprintf("%s (%s)", stg.Name, stg.ExpectedDuration) - if stg.StartedAt.IsZero() { - msg = color.YellowString(msg) - } - _, err := fmt.Fprintf(r.out, "%s\n", msg) - if err != nil { - return err - } - for _, l := range stg.Logs { - _, err = fmt.Fprintf(r.out, " %s\n", l) - if err != nil { - return err - } - } - } return nil } + +func renderDeal(di lapi.DealInfo) { + color.Blue("Deal ID: %d\n", int(di.DealID)) + color.Blue("Proposal CID: %s\n\n", di.ProposalCid.String()) + + for _, stg := range di.DealStages.Stages { + msg := fmt.Sprintf("%s %s: %s (%s)", color.BlueString("Stage:"), color.BlueString(strings.TrimPrefix(stg.Name, "StorageDeal")), stg.Description, color.GreenString(stg.ExpectedDuration)) + if stg.UpdatedTime.Time().IsZero() { + msg = color.YellowString(msg) + } + fmt.Println(msg) + + for _, l := range stg.Logs { + fmt.Printf(" %s %s\n", color.YellowString(l.UpdatedTime.Time().UTC().Round(time.Second).Format(time.Stamp)), l.Log) + } + + if stg.Name == "StorageDealStartDataTransfer" { + for _, dt_stg := range di.DataTransfer.Stages.Stages { + + msg := fmt.Sprintf("Data transfer stage: %s", dt_stg.Name) + msg = color.BlueString(msg) + if stg.UpdatedTime.Time().IsZero() { + msg = color.YellowString(msg) + } + fmt.Printf(" %s\n", msg) + for _, l := range dt_stg.Logs { + fmt.Printf(" %s %s\n", color.YellowString(l.UpdatedTime.Time().UTC().Round(time.Second).Format(time.Stamp)), l.Log) + } + } + } + } +} diff --git a/go.mod b/go.mod index 5f3bce21a..f19895413 100644 --- a/go.mod +++ b/go.mod @@ -15,6 +15,7 @@ require ( github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e github.com/cockroachdb/pebble v0.0.0-20201001221639-879f3bfeef07 github.com/coreos/go-systemd/v22 v22.1.0 + github.com/davecgh/go-spew v1.1.1 github.com/detailyang/go-fallocate v0.0.0-20180908115635-432fa640bd2e github.com/dgraph-io/badger/v2 v2.2007.2 github.com/docker/go-units v0.4.0 @@ -163,3 +164,5 @@ replace github.com/filecoin-project/filecoin-ffi => ./extern/filecoin-ffi replace github.com/filecoin-project/test-vectors => ./extern/test-vectors replace github.com/filecoin-project/go-fil-markets => ../go-fil-markets + +replace github.com/filecoin-project/go-data-transfer => ../go-data-transfer diff --git a/node/impl/client/client.go b/node/impl/client/client.go index ac526ac60..4a0dd4907 100644 --- a/node/impl/client/client.go +++ b/node/impl/client/client.go @@ -7,6 +7,7 @@ import ( "io" "os" + "github.com/davecgh/go-spew/spew" "github.com/filecoin-project/lotus/chain/actors/builtin/miner" "golang.org/x/xerrors" @@ -215,6 +216,8 @@ func (a *API) ClientListDeals(ctx context.Context) ([]api.DealInfo, error) { out[k] = a.newDealInfoWithTransfer(transferCh, v) } + spew.Dump(out) + return out, nil } @@ -289,6 +292,7 @@ func (a *API) newDealInfoWithTransfer(transferCh *api.DataTransferChannel, v sto Verified: v.Proposal.VerifiedDeal, TransferChannelID: v.TransferChannelID, DataTransfer: transferCh, + DealStages: v.DealStages, } } From af8104830c05cff6370f337961b67fa794039ace Mon Sep 17 00:00:00 2001 From: Anton Evangelatov Date: Thu, 18 Mar 2021 16:03:24 +0200 Subject: [PATCH 07/38] fixup --- cli/deal/{showdeals.go => inspect.go} | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) rename cli/deal/{showdeals.go => inspect.go} (89%) diff --git a/cli/deal/showdeals.go b/cli/deal/inspect.go similarity index 89% rename from cli/deal/showdeals.go rename to cli/deal/inspect.go index de27d897d..ff7670b01 100644 --- a/cli/deal/showdeals.go +++ b/cli/deal/inspect.go @@ -71,12 +71,7 @@ func renderDeal(di lapi.DealInfo) { if stg.Name == "StorageDealStartDataTransfer" { for _, dt_stg := range di.DataTransfer.Stages.Stages { - msg := fmt.Sprintf("Data transfer stage: %s", dt_stg.Name) - msg = color.BlueString(msg) - if stg.UpdatedTime.Time().IsZero() { - msg = color.YellowString(msg) - } - fmt.Printf(" %s\n", msg) + fmt.Printf(" %s %s %s\n", color.YellowString(dt_stg.CreatedTime.Time().UTC().Round(time.Second).Format(time.Stamp)), color.BlueString("Data transfer stage:"), color.BlueString(dt_stg.Name)) for _, l := range dt_stg.Logs { fmt.Printf(" %s %s\n", color.YellowString(l.UpdatedTime.Time().UTC().Round(time.Second).Format(time.Stamp)), l.Log) } From 86772a09c73064e1fcdf6ba381068c624b313656 Mon Sep 17 00:00:00 2001 From: Anton Evangelatov Date: Fri, 19 Mar 2021 13:53:03 +0200 Subject: [PATCH 08/38] use new channelmonitor.Config --- go.mod | 7 ++----- go.sum | 26 +++++++++++++++++++++----- node/impl/client/client.go | 3 --- node/modules/client.go | 14 ++++++++++++-- 4 files changed, 35 insertions(+), 15 deletions(-) diff --git a/go.mod b/go.mod index f19895413..9498b182b 100644 --- a/go.mod +++ b/go.mod @@ -34,7 +34,7 @@ require ( github.com/filecoin-project/go-crypto v0.0.0-20191218222705-effae4ea9f03 github.com/filecoin-project/go-data-transfer v1.2.7 github.com/filecoin-project/go-fil-commcid v0.0.0-20201016201715-d41df56b4f6a - github.com/filecoin-project/go-fil-markets v1.1.9 + github.com/filecoin-project/go-fil-markets v1.0.8-0.20210319113544-a848de845da8 github.com/filecoin-project/go-jsonrpc v0.1.4-0.20210217175800-45ea43ac2bec github.com/filecoin-project/go-multistore v0.0.3 github.com/filecoin-project/go-padreader v0.0.0-20200903213702-ed5fae088b20 @@ -125,7 +125,6 @@ require ( github.com/multiformats/go-multibase v0.0.3 github.com/multiformats/go-multihash v0.0.14 github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e // indirect - github.com/nsf/termbox-go v0.0.0-20210114135735-d04385b850e8 github.com/opentracing/opentracing-go v1.2.0 github.com/polydawn/refmt v0.0.0-20190809202753-05966cbd336a github.com/prometheus/client_golang v1.6.0 @@ -163,6 +162,4 @@ replace github.com/filecoin-project/filecoin-ffi => ./extern/filecoin-ffi replace github.com/filecoin-project/test-vectors => ./extern/test-vectors -replace github.com/filecoin-project/go-fil-markets => ../go-fil-markets - -replace github.com/filecoin-project/go-data-transfer => ../go-data-transfer +replace github.com/filecoin-project/go-data-transfer => github.com/nonsense/go-data-transfer v0.0.1 diff --git a/go.sum b/go.sum index 0cfaa5141..6756286fe 100644 --- a/go.sum +++ b/go.sum @@ -250,13 +250,14 @@ github.com/filecoin-project/go-commp-utils v0.0.0-20201119054358-b88f7a96a434 h1 github.com/filecoin-project/go-commp-utils v0.0.0-20201119054358-b88f7a96a434/go.mod h1:6s95K91mCyHY51RPWECZieD3SGWTqIFLf1mPOes9l5U= github.com/filecoin-project/go-crypto v0.0.0-20191218222705-effae4ea9f03 h1:2pMXdBnCiXjfCYx/hLqFxccPoqsSveQFxVLvNxy9bus= github.com/filecoin-project/go-crypto v0.0.0-20191218222705-effae4ea9f03/go.mod h1:+viYnvGtUTgJRdy6oaeF4MTFKAfatX071MPDPBL11EQ= -github.com/filecoin-project/go-data-transfer v1.2.7 h1:WE5Cpp9eMt5BDoWOVR64QegSn6bwHQaDzyyjVU377Y0= -github.com/filecoin-project/go-data-transfer v1.2.7/go.mod h1:mvjZ+C3NkBX10JP4JMu27DCjUouHFjHwUGh+Xc4yvDA= github.com/filecoin-project/go-ds-versioning v0.1.0 h1:y/X6UksYTsK8TLCI7rttCKEvl8btmWxyFMEeeWGUxIQ= github.com/filecoin-project/go-ds-versioning v0.1.0/go.mod h1:mp16rb4i2QPmxBnmanUx8i/XANp+PFCCJWiAb+VW4/s= github.com/filecoin-project/go-fil-commcid v0.0.0-20200716160307-8f644712406f/go.mod h1:Eaox7Hvus1JgPrL5+M3+h7aSPHc0cVqpSxA+TxIEpZQ= github.com/filecoin-project/go-fil-commcid v0.0.0-20201016201715-d41df56b4f6a h1:hyJ+pUm/4U4RdEZBlg6k8Ma4rDiuvqyGpoICXAxwsTg= github.com/filecoin-project/go-fil-commcid v0.0.0-20201016201715-d41df56b4f6a/go.mod h1:Eaox7Hvus1JgPrL5+M3+h7aSPHc0cVqpSxA+TxIEpZQ= +github.com/filecoin-project/go-fil-markets v1.0.5-0.20201113164554-c5eba40d5335/go.mod h1:AJySOJC00JRWEZzRG2KsfUnqEf5ITXxeX09BE9N4f9c= +github.com/filecoin-project/go-fil-markets v1.0.8-0.20210319113544-a848de845da8 h1:fZgoq675uEr7q3fdYNnKmd7Wk87od7Vx4RBqLvOD5gY= +github.com/filecoin-project/go-fil-markets v1.0.8-0.20210319113544-a848de845da8/go.mod h1:0yQu5gvrjFoAIyzPSSJ+xUdCG83vjInAFbTswIB5/hk= github.com/filecoin-project/go-hamt-ipld v0.1.5 h1:uoXrKbCQZ49OHpsTCkrThPNelC4W3LPEk0OrS/ytIBM= github.com/filecoin-project/go-hamt-ipld v0.1.5/go.mod h1:6Is+ONR5Cd5R6XZoCse1CWaXZc0Hdb/JeX+EQCQzX24= github.com/filecoin-project/go-hamt-ipld/v2 v2.0.0 h1:b3UDemBYN2HNfk3KOXNuxgTTxlWi3xVvbQP0IT38fvM= @@ -284,8 +285,10 @@ github.com/filecoin-project/go-statestore v0.1.0/go.mod h1:LFc9hD+fRxPqiHiaqUEZO github.com/filecoin-project/go-storedcounter v0.0.0-20200421200003-1c99c62e8a5b h1:fkRZSPrYpk42PV3/lIXiL0LHetxde7vyYYvSsttQtfg= github.com/filecoin-project/go-storedcounter v0.0.0-20200421200003-1c99c62e8a5b/go.mod h1:Q0GQOBtKf1oE10eSXSlhN45kDBdGvEcVOqMiffqX+N8= github.com/filecoin-project/specs-actors v0.9.4/go.mod h1:BStZQzx5x7TmCkLv0Bpa07U6cPKol6fd3w9KjMPZ6Z4= +github.com/filecoin-project/specs-actors v0.9.12/go.mod h1:TS1AW/7LbG+615j4NsjMK1qlpAwaFsG9w0V2tg2gSao= github.com/filecoin-project/specs-actors v0.9.13 h1:rUEOQouefi9fuVY/2HOroROJlZbOzWYXXeIh41KF2M4= github.com/filecoin-project/specs-actors v0.9.13/go.mod h1:TS1AW/7LbG+615j4NsjMK1qlpAwaFsG9w0V2tg2gSao= +github.com/filecoin-project/specs-actors/v2 v2.0.1/go.mod h1:v2NZVYinNIKA9acEMBm5wWXxqv5+frFEbekBFemYghY= github.com/filecoin-project/specs-actors/v2 v2.3.2/go.mod h1:UuJQLoTx/HPvvWeqlIFmC/ywlOLHNe8SNQ3OunFbu2Y= github.com/filecoin-project/specs-actors/v2 v2.3.4 h1:NZK2oMCcA71wNsUzDBmLQyRMzcCnX9tDGvwZ53G67j8= github.com/filecoin-project/specs-actors/v2 v2.3.4/go.mod h1:UuJQLoTx/HPvvWeqlIFmC/ywlOLHNe8SNQ3OunFbu2Y= @@ -552,6 +555,7 @@ github.com/ipfs/go-filestore v1.0.0/go.mod h1:/XOCuNtIe2f1YPbiXdYvD0BKLA0JR1MgPi github.com/ipfs/go-fs-lock v0.0.6 h1:sn3TWwNVQqSeNjlWy6zQ1uUGAZrV3hPOyEA6y1/N2a0= github.com/ipfs/go-fs-lock v0.0.6/go.mod h1:OTR+Rj9sHiRubJh3dRhD15Juhd/+w6VPOY28L7zESmM= github.com/ipfs/go-graphsync v0.1.0/go.mod h1:jMXfqIEDFukLPZHqDPp8tJMbHO9Rmeb9CEGevngQbmE= +github.com/ipfs/go-graphsync v0.4.3/go.mod h1:mPOwDYv128gf8gxPFgXnz4fNrSYPsWyqisJ7ych+XDY= github.com/ipfs/go-graphsync v0.5.2 h1:USD+daaSC+7pLHCxROThSaF6SF7WYXF03sjrta0rCfA= github.com/ipfs/go-graphsync v0.5.2/go.mod h1:e2ZxnClqBBYAtd901g9vXMJzS47labjAtOzsWtOzKNk= github.com/ipfs/go-graphsync v0.6.0 h1:x6UvDUGA7wjaKNqx5Vbo7FGT8aJ5ryYA0dMQ5jN3dF0= @@ -607,6 +611,7 @@ github.com/ipfs/go-ipld-cbor v0.0.1/go.mod h1:RXHr8s4k0NE0TKhnrxqZC9M888QfsBN9rh github.com/ipfs/go-ipld-cbor v0.0.2/go.mod h1:wTBtrQZA3SoFKMVkp6cn6HMRteIB1VsmHA0AQFOn7Nc= github.com/ipfs/go-ipld-cbor v0.0.3/go.mod h1:wTBtrQZA3SoFKMVkp6cn6HMRteIB1VsmHA0AQFOn7Nc= github.com/ipfs/go-ipld-cbor v0.0.4/go.mod h1:BkCduEx3XBCO6t2Sfo5BaHzuok7hbhdMm9Oh8B2Ftq4= +github.com/ipfs/go-ipld-cbor v0.0.5-0.20200204214505-252690b78669/go.mod h1:BkCduEx3XBCO6t2Sfo5BaHzuok7hbhdMm9Oh8B2Ftq4= github.com/ipfs/go-ipld-cbor v0.0.5 h1:ovz4CHKogtG2KB/h1zUp5U0c/IzZrL435rCh5+K/5G8= github.com/ipfs/go-ipld-cbor v0.0.5/go.mod h1:BkCduEx3XBCO6t2Sfo5BaHzuok7hbhdMm9Oh8B2Ftq4= github.com/ipfs/go-ipld-format v0.0.1/go.mod h1:kyJtbkDALmFHv3QR6et67i35QzO3S0dCDnkOJhcZkms= @@ -661,6 +666,7 @@ github.com/ipfs/iptb v1.4.0 h1:YFYTrCkLMRwk/35IMyC6+yjoQSHTEcNcefBStLJzgvo= github.com/ipfs/iptb v1.4.0/go.mod h1:1rzHpCYtNp87/+hTxG5TfCVn/yMY3dKnLn8tBiMfdmg= github.com/ipfs/iptb-plugins v0.2.1 h1:au4HWn9/pRPbkxA08pDx2oRAs4cnbgQWgV0teYXuuGA= github.com/ipfs/iptb-plugins v0.2.1/go.mod h1:QXMbtIWZ+jRsW8a4h13qAKU7jcM7qaittO8wOsTP0Rs= +github.com/ipld/go-car v0.1.1-0.20200923150018-8cdef32e2da4/go.mod h1:xrMEcuSq+D1vEwl+YAXsg/JfA98XGpXDwnkIL4Aimqw= github.com/ipld/go-car v0.1.1-0.20201119040415-11b6074b6d4d h1:iphSzTuPqyDgH7WUVZsdqUnQNzYgIblsVr1zhVNA33U= github.com/ipld/go-car v0.1.1-0.20201119040415-11b6074b6d4d/go.mod h1:2Gys8L8MJ6zkh1gktTSXreY63t4UbyvNp5JaudTyxHQ= github.com/ipld/go-ipld-prime v0.0.2-0.20200428162820-8b59dc292b8e/go.mod h1:uVIwe/u0H4VdKv3kaN1ck7uCb6yD9cFLS9/ELyXbsw8= @@ -781,6 +787,7 @@ github.com/libp2p/go-libp2p v0.7.4/go.mod h1:oXsBlTLF1q7pxr+9w6lqzS1ILpyHsaBPniV github.com/libp2p/go-libp2p v0.8.1/go.mod h1:QRNH9pwdbEBpx5DTJYg+qxcVaDMAz3Ee/qDKwXujH5o= github.com/libp2p/go-libp2p v0.8.3/go.mod h1:EsH1A+8yoWK+L4iKcbPYu6MPluZ+CHWI9El8cTaefiM= github.com/libp2p/go-libp2p v0.9.2/go.mod h1:cunHNLDVus66Ct9iXXcjKRLdmHdFdHVe1TAnbubJQqQ= +github.com/libp2p/go-libp2p v0.10.0/go.mod h1:yBJNpb+mGJdgrwbKAKrhPU0u3ogyNFTfjJ6bdM+Q/G8= github.com/libp2p/go-libp2p v0.12.0 h1:+xai9RQnQ9l5elFOKvp5wRyjyWisSwEx+6nU2+onpUA= github.com/libp2p/go-libp2p v0.12.0/go.mod h1:FpHZrfC1q7nA8jitvdjKBDF31hguaC676g/nT9PgQM0= github.com/libp2p/go-libp2p-asn-util v0.0.0-20200825225859-85005c6cf052 h1:BM7aaOF7RpmNn9+9g6uTjGJ0cTzWr5j9i9IKeun2M8U= @@ -811,6 +818,7 @@ github.com/libp2p/go-libp2p-circuit v0.1.3/go.mod h1:Xqh2TjSy8DD5iV2cCOMzdynd6h8 github.com/libp2p/go-libp2p-circuit v0.1.4/go.mod h1:CY67BrEjKNDhdTk8UgBX1Y/H5c3xkAcs3gnksxY7osU= github.com/libp2p/go-libp2p-circuit v0.2.1/go.mod h1:BXPwYDN5A8z4OEY9sOfr2DUQMLQvKt/6oku45YUmjIo= github.com/libp2p/go-libp2p-circuit v0.2.2/go.mod h1:nkG3iE01tR3FoQ2nMm06IUrCpCyJp1Eo4A1xYdpjfs4= +github.com/libp2p/go-libp2p-circuit v0.2.3/go.mod h1:nkG3iE01tR3FoQ2nMm06IUrCpCyJp1Eo4A1xYdpjfs4= github.com/libp2p/go-libp2p-circuit v0.4.0 h1:eqQ3sEYkGTtybWgr6JLqJY6QLtPWRErvFjFDfAOO1wc= github.com/libp2p/go-libp2p-circuit v0.4.0/go.mod h1:t/ktoFIUzM6uLQ+o1G6NuBl2ANhBKN9Bc8jRIk31MoA= github.com/libp2p/go-libp2p-connmgr v0.1.1/go.mod h1:wZxh8veAmU5qdrfJ0ZBLcU8oJe9L82ciVP/fl1VHjXk= @@ -916,6 +924,7 @@ github.com/libp2p/go-libp2p-pubsub v0.3.2-0.20200527132641-c0712c6e92cf/go.mod h github.com/libp2p/go-libp2p-pubsub v0.4.1 h1:j4umIg5nyus+sqNfU+FWvb9aeYFQH/A+nDFhWj+8yy8= github.com/libp2p/go-libp2p-pubsub v0.4.1/go.mod h1:izkeMLvz6Ht8yAISXjx60XUQZMq9ZMe5h2ih4dLIBIQ= github.com/libp2p/go-libp2p-quic-transport v0.1.1/go.mod h1:wqG/jzhF3Pu2NrhJEvE+IE0NTHNXslOPn9JQzyCAxzU= +github.com/libp2p/go-libp2p-quic-transport v0.5.0/go.mod h1:IEcuC5MLxvZ5KuHKjRu+dr3LjCT1Be3rcD/4d8JrX8M= github.com/libp2p/go-libp2p-quic-transport v0.9.0 h1:WPuq5nV/chmIZIzvrkC2ulSdAQ0P0BDvgvAhZFOZ59E= github.com/libp2p/go-libp2p-quic-transport v0.9.0/go.mod h1:xyY+IgxL0qsW7Kiutab0+NlxM0/p9yRtrGTYsuMWf70= github.com/libp2p/go-libp2p-record v0.0.1/go.mod h1:grzqg263Rug/sRex85QrDOLntdFAymLDLm7lxMgU79Q= @@ -941,6 +950,7 @@ github.com/libp2p/go-libp2p-swarm v0.2.1/go.mod h1:x07b4zkMFo2EvgPV2bMTlNmdQc8i+ github.com/libp2p/go-libp2p-swarm v0.2.2/go.mod h1:fvmtQ0T1nErXym1/aa1uJEyN7JzaTNyBcHImCxRpPKU= github.com/libp2p/go-libp2p-swarm v0.2.3/go.mod h1:P2VO/EpxRyDxtChXz/VPVXyTnszHvokHKRhfkEgFKNM= github.com/libp2p/go-libp2p-swarm v0.2.4/go.mod h1:/xIpHFPPh3wmSthtxdGbkHZ0OET1h/GGZes8Wku/M5Y= +github.com/libp2p/go-libp2p-swarm v0.2.7/go.mod h1:ZSJ0Q+oq/B1JgfPHJAT2HTall+xYRNYp1xs4S2FBWKA= github.com/libp2p/go-libp2p-swarm v0.2.8/go.mod h1:JQKMGSth4SMqonruY0a8yjlPVIkb0mdNSwckW7OYziM= github.com/libp2p/go-libp2p-swarm v0.3.0/go.mod h1:hdv95GWCTmzkgeJpP+GK/9D9puJegb7H57B5hWQR5Kk= github.com/libp2p/go-libp2p-swarm v0.3.1 h1:UTobu+oQHGdXTOGpZ4RefuVqYoJXcT0EBtSR74m2LkI= @@ -1056,6 +1066,7 @@ github.com/libp2p/go-yamux v1.4.1/go.mod h1:fr7aVgmdNGJK+N1g+b6DW6VxzbRCjCOejR/h github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= github.com/lucas-clemente/quic-go v0.11.2/go.mod h1:PpMmPfPKO9nKJ/psF49ESTAGQSdfXxlg1otPbEB2nOw= +github.com/lucas-clemente/quic-go v0.16.0/go.mod h1:I0+fcNTdb9eS1ZcjQZbDVPGchJ86chcIxPALn9lEJqE= github.com/lucas-clemente/quic-go v0.18.1 h1:DMR7guC0NtVS8zNZR3IO7NARZvZygkSC56GGtC6cyys= github.com/lucas-clemente/quic-go v0.18.1/go.mod h1:yXttHsSNxQi8AWijC/vLP+OJczXqzHSOcJrM5ITUlCg= github.com/lufia/iostat v1.1.0/go.mod h1:rEPNA0xXgjHQjuI5Cy05sLlS2oRcSlWHRLrvh/AQ+Pg= @@ -1064,8 +1075,10 @@ github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0Q github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/marten-seemann/qpack v0.1.0/go.mod h1:LFt1NU/Ptjip0C2CPkhimBz5CGE3WGDAUWqna+CNTrI= github.com/marten-seemann/qpack v0.2.0/go.mod h1:F7Gl5L1jIgN1D11ucXefiuJS9UMVP2opoCp2jDKb7wc= github.com/marten-seemann/qtls v0.2.3/go.mod h1:xzjG7avBwGGbdZ8dTGxlBnLArsVKLvwmjgmPuiQEcYk= +github.com/marten-seemann/qtls v0.9.1/go.mod h1:T1MmAdDPyISzxlK6kjRr0pcZFBVd1OZbBb/j3cvzHhk= github.com/marten-seemann/qtls v0.10.0 h1:ECsuYUKalRL240rRD4Ri33ISb7kAQ3qGDlrrl55b2pc= github.com/marten-seemann/qtls v0.10.0/go.mod h1:UvMd1oaYDACI99/oZUYLzMCkBXQVT0aGm99sJhbT8hs= github.com/marten-seemann/qtls-go1-15 v0.1.0 h1:i/YPXVxz8q9umso/5y474CNcHmTpA+5DH+mFPjx6PZg= @@ -1086,7 +1099,6 @@ github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Ky github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.7 h1:Ei8KR0497xHyKJPAv59M1dkC+rOZCMBJ+t3fZ+twI54= github.com/mattn/go-runewidth v0.0.7/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= -github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mattn/go-runewidth v0.0.10 h1:CoZ3S2P7pvtP45xOtBw+/mDL2z0RKI576gSkzRRpdGg= github.com/mattn/go-runewidth v0.0.10/go.mod h1:RAqKPSqVFrSLVXbA8x7dzmKdmGzieGRCM46jaSJTDAk= github.com/mattn/go-xmlrpc v0.0.3/go.mod h1:mqc2dz7tP5x5BKlCahN/n+hs7OSZKJkS9JsHNBRlrxA= @@ -1205,8 +1217,8 @@ github.com/nikkolasg/hexjson v0.0.0-20181101101858-78e39397e00c h1:5bFTChQxSKNwy github.com/nikkolasg/hexjson v0.0.0-20181101101858-78e39397e00c/go.mod h1:7qN3Y0BvzRUf4LofcoJplQL10lsFDb4PYlePTVwrP28= github.com/nkovacs/streamquote v0.0.0-20170412213628-49af9bddb229 h1:E2B8qYyeSgv5MXpmzZXRNp8IAQ4vjxIjhpAf5hv/tAg= github.com/nkovacs/streamquote v0.0.0-20170412213628-49af9bddb229/go.mod h1:0aYXnNPJ8l7uZxf45rWW1a/uME32OF0rhiYGNQ2oF2E= -github.com/nsf/termbox-go v0.0.0-20210114135735-d04385b850e8 h1:3vzIuru1svOK2sXlg4XcrO3KkGRneIejmfQfR+ptSW8= -github.com/nsf/termbox-go v0.0.0-20210114135735-d04385b850e8/go.mod h1:T0cTdVuOwf7pHQNtfhnEbzHbcNyCEcVU4YPpouCbVxo= +github.com/nonsense/go-data-transfer v0.0.1 h1:BI9hMOWdCcB4k1RxQscIJgQZ1LnLF2+/ujXHtNqLuVE= +github.com/nonsense/go-data-transfer v0.0.1/go.mod h1:ps/AU2Ok4pf2oFevi5RmMr3JRAWcnSTA/Zag6VMygIc= github.com/nxadm/tail v1.4.4 h1:DQuhQpB1tVlglWS2hLQ5OV6B5r8aGxSrPc5Qo6uTN78= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= @@ -1215,6 +1227,7 @@ github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:v github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.8.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.12.0/go.mod h1:oUhWkIvk5aDxtKvDDuw8gItl8pKl42LzjC9KZE0HfGg= github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= github.com/onsi/ginkgo v1.14.0 h1:2mOpI4JVVPBN+WQRa0WKH2eXR+Ey+uK4n7Zj0aYpIQA= @@ -1222,6 +1235,7 @@ github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9k github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= +github.com/onsi/gomega v1.8.1/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoTdcA= github.com/onsi/gomega v1.9.0/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoTdcA= github.com/onsi/gomega v1.10.1 h1:o0+MgICZLuZ7xjH7Vx6zS/zcu93/BEp1VwkIW1mEXCE= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= @@ -1401,6 +1415,7 @@ github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXf github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= +github.com/stretchr/testify v1.6.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= @@ -1631,6 +1646,7 @@ golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73r golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190227160552-c95aed5357e7/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190228165749-92fc7df08ae7/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190313220215-9f648a60d977/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= diff --git a/node/impl/client/client.go b/node/impl/client/client.go index 4a0dd4907..de6e813c7 100644 --- a/node/impl/client/client.go +++ b/node/impl/client/client.go @@ -7,7 +7,6 @@ import ( "io" "os" - "github.com/davecgh/go-spew/spew" "github.com/filecoin-project/lotus/chain/actors/builtin/miner" "golang.org/x/xerrors" @@ -216,8 +215,6 @@ func (a *API) ClientListDeals(ctx context.Context) ([]api.DealInfo, error) { out[k] = a.newDealInfoWithTransfer(transferCh, v) } - spew.Dump(out) - return out, nil } diff --git a/node/modules/client.go b/node/modules/client.go index da6a4cd83..bedbf6841 100644 --- a/node/modules/client.go +++ b/node/modules/client.go @@ -13,6 +13,7 @@ import ( "go.uber.org/fx" + "github.com/filecoin-project/go-data-transfer/channelmonitor" dtimpl "github.com/filecoin-project/go-data-transfer/impl" dtnet "github.com/filecoin-project/go-data-transfer/network" dtgstransport "github.com/filecoin-project/go-data-transfer/transport/graphsync" @@ -136,8 +137,17 @@ func NewClientGraphsyncDataTransfer(lc fx.Lifecycle, h host.Host, gs dtypes.Grap } // data-transfer push channel restart configuration - dtRestartConfig := dtimpl.PushChannelRestartConfig(time.Minute, 10, 1024, 10*time.Minute, 3) - dt, err := dtimpl.NewDataTransfer(dtDs, filepath.Join(r.Path(), "data-transfer"), net, transport, sc, dtRestartConfig) + dtRestartConf := dtimpl.ChannelRestartConfig(channelmonitor.Config{ + AcceptTimeout: 100 * time.Millisecond, + Interval: 100 * time.Millisecond, + MinBytesTransferred: 1, + ChecksPerInterval: 10, + RestartBackoff: 500 * time.Millisecond, + MaxConsecutiveRestarts: 5, + CompleteTimeout: 100 * time.Millisecond, + }) + //dtRestartConfig := dtimpl.PushChannelRestartConfig(time.Minute, 10, 1024, 10*time.Minute, 3) + dt, err := dtimpl.NewDataTransfer(dtDs, filepath.Join(r.Path(), "data-transfer"), net, transport, sc, dtRestartConf) if err != nil { return nil, err } From ac576c75d49d4416a87bdf0ff01995a268384b96 Mon Sep 17 00:00:00 2001 From: Anton Evangelatov Date: Fri, 19 Mar 2021 14:08:50 +0200 Subject: [PATCH 09/38] amend restart config --- node/modules/client.go | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/node/modules/client.go b/node/modules/client.go index bedbf6841..ad3b10bb4 100644 --- a/node/modules/client.go +++ b/node/modules/client.go @@ -138,15 +138,14 @@ func NewClientGraphsyncDataTransfer(lc fx.Lifecycle, h host.Host, gs dtypes.Grap // data-transfer push channel restart configuration dtRestartConf := dtimpl.ChannelRestartConfig(channelmonitor.Config{ - AcceptTimeout: 100 * time.Millisecond, - Interval: 100 * time.Millisecond, - MinBytesTransferred: 1, + AcceptTimeout: 30 * time.Second, + Interval: 1 * time.Minute, + MinBytesTransferred: 1024, ChecksPerInterval: 10, - RestartBackoff: 500 * time.Millisecond, - MaxConsecutiveRestarts: 5, - CompleteTimeout: 100 * time.Millisecond, + RestartBackoff: 10 * time.Minute, + MaxConsecutiveRestarts: 3, + CompleteTimeout: 30 * time.Second, }) - //dtRestartConfig := dtimpl.PushChannelRestartConfig(time.Minute, 10, 1024, 10*time.Minute, 3) dt, err := dtimpl.NewDataTransfer(dtDs, filepath.Join(r.Path(), "data-transfer"), net, transport, sc, dtRestartConf) if err != nil { return nil, err From 9fb1dd43a9b58ca99d91ac3c578a4251a2bf7282 Mon Sep 17 00:00:00 2001 From: Dirk McCormick Date: Mon, 22 Mar 2021 12:08:05 +0100 Subject: [PATCH 10/38] feat: update to markets v1.2.0 --- go.mod | 4 ++-- go.sum | 9 ++++----- node/modules/client.go | 27 +++++++++++++++++++++------ 3 files changed, 27 insertions(+), 13 deletions(-) diff --git a/go.mod b/go.mod index 621bea702..24e605b4c 100644 --- a/go.mod +++ b/go.mod @@ -32,9 +32,9 @@ require ( github.com/filecoin-project/go-cbor-util v0.0.0-20191219014500-08c40a1e63a2 github.com/filecoin-project/go-commp-utils v0.0.0-20201119054358-b88f7a96a434 github.com/filecoin-project/go-crypto v0.0.0-20191218222705-effae4ea9f03 - github.com/filecoin-project/go-data-transfer v1.2.7 + github.com/filecoin-project/go-data-transfer v1.2.9 github.com/filecoin-project/go-fil-commcid v0.0.0-20201016201715-d41df56b4f6a - github.com/filecoin-project/go-fil-markets v1.1.9 + github.com/filecoin-project/go-fil-markets v1.2.0 github.com/filecoin-project/go-jsonrpc v0.1.4-0.20210217175800-45ea43ac2bec github.com/filecoin-project/go-multistore v0.0.3 github.com/filecoin-project/go-padreader v0.0.0-20200903213702-ed5fae088b20 diff --git a/go.sum b/go.sum index e4b3d7d0e..e1d354fcd 100644 --- a/go.sum +++ b/go.sum @@ -265,16 +265,16 @@ github.com/filecoin-project/go-commp-utils v0.0.0-20201119054358-b88f7a96a434/go github.com/filecoin-project/go-crypto v0.0.0-20191218222705-effae4ea9f03 h1:2pMXdBnCiXjfCYx/hLqFxccPoqsSveQFxVLvNxy9bus= github.com/filecoin-project/go-crypto v0.0.0-20191218222705-effae4ea9f03/go.mod h1:+viYnvGtUTgJRdy6oaeF4MTFKAfatX071MPDPBL11EQ= github.com/filecoin-project/go-data-transfer v1.0.1/go.mod h1:UxvfUAY9v3ub0a21BSK9u3pB2aq30Y0KMsG+w9/ysyo= -github.com/filecoin-project/go-data-transfer v1.2.7 h1:WE5Cpp9eMt5BDoWOVR64QegSn6bwHQaDzyyjVU377Y0= -github.com/filecoin-project/go-data-transfer v1.2.7/go.mod h1:mvjZ+C3NkBX10JP4JMu27DCjUouHFjHwUGh+Xc4yvDA= +github.com/filecoin-project/go-data-transfer v1.2.9 h1:k6oXrI/6AfNdEfUVFAx6LbVMGNmdWWq97BiaDnhS3JE= +github.com/filecoin-project/go-data-transfer v1.2.9/go.mod h1:ps/AU2Ok4pf2oFevi5RmMr3JRAWcnSTA/Zag6VMygIc= github.com/filecoin-project/go-ds-versioning v0.1.0 h1:y/X6UksYTsK8TLCI7rttCKEvl8btmWxyFMEeeWGUxIQ= github.com/filecoin-project/go-ds-versioning v0.1.0/go.mod h1:mp16rb4i2QPmxBnmanUx8i/XANp+PFCCJWiAb+VW4/s= github.com/filecoin-project/go-fil-commcid v0.0.0-20200716160307-8f644712406f/go.mod h1:Eaox7Hvus1JgPrL5+M3+h7aSPHc0cVqpSxA+TxIEpZQ= github.com/filecoin-project/go-fil-commcid v0.0.0-20201016201715-d41df56b4f6a h1:hyJ+pUm/4U4RdEZBlg6k8Ma4rDiuvqyGpoICXAxwsTg= github.com/filecoin-project/go-fil-commcid v0.0.0-20201016201715-d41df56b4f6a/go.mod h1:Eaox7Hvus1JgPrL5+M3+h7aSPHc0cVqpSxA+TxIEpZQ= github.com/filecoin-project/go-fil-markets v1.0.5-0.20201113164554-c5eba40d5335/go.mod h1:AJySOJC00JRWEZzRG2KsfUnqEf5ITXxeX09BE9N4f9c= -github.com/filecoin-project/go-fil-markets v1.1.9 h1:sA0NIEOpy7brZaeXeNgdXg5pvHaBtD5OTRlraOUbI0w= -github.com/filecoin-project/go-fil-markets v1.1.9/go.mod h1:0yQu5gvrjFoAIyzPSSJ+xUdCG83vjInAFbTswIB5/hk= +github.com/filecoin-project/go-fil-markets v1.2.0 h1:zFQOeuEK7a9ajYfwLiTwvsKAqa9tcLbf3I5waHubI+I= +github.com/filecoin-project/go-fil-markets v1.2.0/go.mod h1:xWoSrWwnLg7N6OUFdlijGHfTj2alzgLZW2Z+a4p18vg= github.com/filecoin-project/go-hamt-ipld v0.1.5 h1:uoXrKbCQZ49OHpsTCkrThPNelC4W3LPEk0OrS/ytIBM= github.com/filecoin-project/go-hamt-ipld v0.1.5/go.mod h1:6Is+ONR5Cd5R6XZoCse1CWaXZc0Hdb/JeX+EQCQzX24= github.com/filecoin-project/go-hamt-ipld/v2 v2.0.0 h1:b3UDemBYN2HNfk3KOXNuxgTTxlWi3xVvbQP0IT38fvM= @@ -595,7 +595,6 @@ github.com/ipfs/go-fs-lock v0.0.6/go.mod h1:OTR+Rj9sHiRubJh3dRhD15Juhd/+w6VPOY28 github.com/ipfs/go-graphsync v0.1.0/go.mod h1:jMXfqIEDFukLPZHqDPp8tJMbHO9Rmeb9CEGevngQbmE= github.com/ipfs/go-graphsync v0.4.2/go.mod h1:/VmbZTUdUMTbNkgzAiCEucIIAU3BkLE2cZrDCVUhyi0= github.com/ipfs/go-graphsync v0.4.3/go.mod h1:mPOwDYv128gf8gxPFgXnz4fNrSYPsWyqisJ7ych+XDY= -github.com/ipfs/go-graphsync v0.5.2/go.mod h1:e2ZxnClqBBYAtd901g9vXMJzS47labjAtOzsWtOzKNk= github.com/ipfs/go-graphsync v0.6.0 h1:x6UvDUGA7wjaKNqx5Vbo7FGT8aJ5ryYA0dMQ5jN3dF0= github.com/ipfs/go-graphsync v0.6.0/go.mod h1:e2ZxnClqBBYAtd901g9vXMJzS47labjAtOzsWtOzKNk= github.com/ipfs/go-hamt-ipld v0.1.1/go.mod h1:1EZCr2v0jlCnhpa+aZ0JZYp8Tt2w16+JJOAVz17YcDk= diff --git a/node/modules/client.go b/node/modules/client.go index da6a4cd83..8e0a281ed 100644 --- a/node/modules/client.go +++ b/node/modules/client.go @@ -7,12 +7,10 @@ import ( "path/filepath" "time" - "github.com/filecoin-project/go-multistore" - "github.com/filecoin-project/go-state-types/abi" + "go.uber.org/fx" "golang.org/x/xerrors" - "go.uber.org/fx" - + "github.com/filecoin-project/go-data-transfer/channelmonitor" dtimpl "github.com/filecoin-project/go-data-transfer/impl" dtnet "github.com/filecoin-project/go-data-transfer/network" dtgstransport "github.com/filecoin-project/go-data-transfer/transport/graphsync" @@ -25,6 +23,8 @@ import ( storageimpl "github.com/filecoin-project/go-fil-markets/storagemarket/impl" "github.com/filecoin-project/go-fil-markets/storagemarket/impl/requestvalidation" smnet "github.com/filecoin-project/go-fil-markets/storagemarket/network" + "github.com/filecoin-project/go-multistore" + "github.com/filecoin-project/go-state-types/abi" "github.com/filecoin-project/go-storedcounter" "github.com/ipfs/go-datastore" "github.com/ipfs/go-datastore/namespace" @@ -135,8 +135,23 @@ func NewClientGraphsyncDataTransfer(lc fx.Lifecycle, h host.Host, gs dtypes.Grap return nil, err } - // data-transfer push channel restart configuration - dtRestartConfig := dtimpl.PushChannelRestartConfig(time.Minute, 10, 1024, 10*time.Minute, 3) + // data-transfer push / pull channel restart configuration: + dtRestartConfig := dtimpl.ChannelRestartConfig(channelmonitor.Config{ + // Wait up to 30s for the other side to respond to an Open channel message + AcceptTimeout: 30 * time.Second, + // Send a restart message if the data rate falls below 1024 bytes / minute + Interval: time.Minute, + MinBytesTransferred: 1024, + // Perform check 10 times / minute + ChecksPerInterval: 10, + // After sending a restart, wait for at least 1 minute before sending another + RestartBackoff: time.Minute, + // After trying to restart 3 times, give up and fail the transfer + MaxConsecutiveRestarts: 3, + // Wait up to 30s for the other side to send a Complete message once all + // data has been sent / received + CompleteTimeout: 30 * time.Second, + }) dt, err := dtimpl.NewDataTransfer(dtDs, filepath.Join(r.Path(), "data-transfer"), net, transport, sc, dtRestartConfig) if err != nil { return nil, err From bbd0cdd2124318226d25f8d1719b849c92ba2380 Mon Sep 17 00:00:00 2001 From: Anton Evangelatov Date: Tue, 23 Mar 2021 13:59:41 +0200 Subject: [PATCH 11/38] fix linter and merge master --- cli/deal/inspect.go | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/cli/deal/inspect.go b/cli/deal/inspect.go index ff7670b01..839d16d0b 100644 --- a/cli/deal/inspect.go +++ b/cli/deal/inspect.go @@ -11,8 +11,6 @@ import ( lapi "github.com/filecoin-project/lotus/api" ) -var mockDealInfos []lapi.DealInfo - func InspectDealCmd(ctx context.Context, api lapi.FullNode, proposalCid string, dealId int) error { ctx, cancel := context.WithCancel(ctx) defer cancel() @@ -69,10 +67,9 @@ func renderDeal(di lapi.DealInfo) { } if stg.Name == "StorageDealStartDataTransfer" { - for _, dt_stg := range di.DataTransfer.Stages.Stages { - - fmt.Printf(" %s %s %s\n", color.YellowString(dt_stg.CreatedTime.Time().UTC().Round(time.Second).Format(time.Stamp)), color.BlueString("Data transfer stage:"), color.BlueString(dt_stg.Name)) - for _, l := range dt_stg.Logs { + for _, dtStg := range di.DataTransfer.Stages.Stages { + fmt.Printf(" %s %s %s\n", color.YellowString(dtStg.CreatedTime.Time().UTC().Round(time.Second).Format(time.Stamp)), color.BlueString("Data transfer stage:"), color.BlueString(dtStg.Name)) + for _, l := range dtStg.Logs { fmt.Printf(" %s %s\n", color.YellowString(l.UpdatedTime.Time().UTC().Round(time.Second).Format(time.Stamp)), l.Log) } } From aee9890ee7651eef65b87428bbd6fe4214c3029c Mon Sep 17 00:00:00 2001 From: Dirk McCormick Date: Tue, 23 Mar 2021 13:28:30 +0100 Subject: [PATCH 12/38] feat: update go-data-transfer and go-fil-markets --- go.mod | 4 ++-- go.sum | 8 ++++---- node/modules/client.go | 4 +--- node/modules/storageminer.go | 3 +-- 4 files changed, 8 insertions(+), 11 deletions(-) diff --git a/go.mod b/go.mod index 24e605b4c..e5f8900ae 100644 --- a/go.mod +++ b/go.mod @@ -32,9 +32,9 @@ require ( github.com/filecoin-project/go-cbor-util v0.0.0-20191219014500-08c40a1e63a2 github.com/filecoin-project/go-commp-utils v0.0.0-20201119054358-b88f7a96a434 github.com/filecoin-project/go-crypto v0.0.0-20191218222705-effae4ea9f03 - github.com/filecoin-project/go-data-transfer v1.2.9 + github.com/filecoin-project/go-data-transfer v1.3.0 github.com/filecoin-project/go-fil-commcid v0.0.0-20201016201715-d41df56b4f6a - github.com/filecoin-project/go-fil-markets v1.2.0 + github.com/filecoin-project/go-fil-markets v1.2.1 github.com/filecoin-project/go-jsonrpc v0.1.4-0.20210217175800-45ea43ac2bec github.com/filecoin-project/go-multistore v0.0.3 github.com/filecoin-project/go-padreader v0.0.0-20200903213702-ed5fae088b20 diff --git a/go.sum b/go.sum index e1d354fcd..ae66a5883 100644 --- a/go.sum +++ b/go.sum @@ -265,16 +265,16 @@ github.com/filecoin-project/go-commp-utils v0.0.0-20201119054358-b88f7a96a434/go github.com/filecoin-project/go-crypto v0.0.0-20191218222705-effae4ea9f03 h1:2pMXdBnCiXjfCYx/hLqFxccPoqsSveQFxVLvNxy9bus= github.com/filecoin-project/go-crypto v0.0.0-20191218222705-effae4ea9f03/go.mod h1:+viYnvGtUTgJRdy6oaeF4MTFKAfatX071MPDPBL11EQ= github.com/filecoin-project/go-data-transfer v1.0.1/go.mod h1:UxvfUAY9v3ub0a21BSK9u3pB2aq30Y0KMsG+w9/ysyo= -github.com/filecoin-project/go-data-transfer v1.2.9 h1:k6oXrI/6AfNdEfUVFAx6LbVMGNmdWWq97BiaDnhS3JE= -github.com/filecoin-project/go-data-transfer v1.2.9/go.mod h1:ps/AU2Ok4pf2oFevi5RmMr3JRAWcnSTA/Zag6VMygIc= +github.com/filecoin-project/go-data-transfer v1.3.0 h1:QZvpUVU0fVKH+wBH/QDPi5AB7fUI3NwwBLHK+d1Jed4= +github.com/filecoin-project/go-data-transfer v1.3.0/go.mod h1:n8kbDQXWrY1c4UgfMa9KERxNCWbOTDwdNhf2MpN9dpo= github.com/filecoin-project/go-ds-versioning v0.1.0 h1:y/X6UksYTsK8TLCI7rttCKEvl8btmWxyFMEeeWGUxIQ= github.com/filecoin-project/go-ds-versioning v0.1.0/go.mod h1:mp16rb4i2QPmxBnmanUx8i/XANp+PFCCJWiAb+VW4/s= github.com/filecoin-project/go-fil-commcid v0.0.0-20200716160307-8f644712406f/go.mod h1:Eaox7Hvus1JgPrL5+M3+h7aSPHc0cVqpSxA+TxIEpZQ= github.com/filecoin-project/go-fil-commcid v0.0.0-20201016201715-d41df56b4f6a h1:hyJ+pUm/4U4RdEZBlg6k8Ma4rDiuvqyGpoICXAxwsTg= github.com/filecoin-project/go-fil-commcid v0.0.0-20201016201715-d41df56b4f6a/go.mod h1:Eaox7Hvus1JgPrL5+M3+h7aSPHc0cVqpSxA+TxIEpZQ= github.com/filecoin-project/go-fil-markets v1.0.5-0.20201113164554-c5eba40d5335/go.mod h1:AJySOJC00JRWEZzRG2KsfUnqEf5ITXxeX09BE9N4f9c= -github.com/filecoin-project/go-fil-markets v1.2.0 h1:zFQOeuEK7a9ajYfwLiTwvsKAqa9tcLbf3I5waHubI+I= -github.com/filecoin-project/go-fil-markets v1.2.0/go.mod h1:xWoSrWwnLg7N6OUFdlijGHfTj2alzgLZW2Z+a4p18vg= +github.com/filecoin-project/go-fil-markets v1.2.1 h1:vsTf6x6ZvwbIuPxCXIAIKBLOnRewMPPiXhwkZwVxWEo= +github.com/filecoin-project/go-fil-markets v1.2.1/go.mod h1:G4d/D/RwxpwSmMS1VyJ72wq8IIDdIbIefM1vKKPesfw= github.com/filecoin-project/go-hamt-ipld v0.1.5 h1:uoXrKbCQZ49OHpsTCkrThPNelC4W3LPEk0OrS/ytIBM= github.com/filecoin-project/go-hamt-ipld v0.1.5/go.mod h1:6Is+ONR5Cd5R6XZoCse1CWaXZc0Hdb/JeX+EQCQzX24= github.com/filecoin-project/go-hamt-ipld/v2 v2.0.0 h1:b3UDemBYN2HNfk3KOXNuxgTTxlWi3xVvbQP0IT38fvM= diff --git a/node/modules/client.go b/node/modules/client.go index 8e0a281ed..d68e96406 100644 --- a/node/modules/client.go +++ b/node/modules/client.go @@ -121,8 +121,6 @@ func RegisterClientValidator(crv dtypes.ClientRequestValidator, dtm dtypes.Clien // NewClientGraphsyncDataTransfer returns a data transfer manager that just // uses the clients's Client DAG service for transfers func NewClientGraphsyncDataTransfer(lc fx.Lifecycle, h host.Host, gs dtypes.Graphsync, ds dtypes.MetadataDS, r repo.LockedRepo) (dtypes.ClientDataTransfer, error) { - sc := storedcounter.New(ds, datastore.NewKey("/datatransfer/client/counter")) - // go-data-transfer protocol retries: // 1s, 5s, 25s, 2m5s, 5m x 11 ~= 1 hour dtRetryParams := dtnet.RetryParameters(time.Second, 5*time.Minute, 15, 5) @@ -152,7 +150,7 @@ func NewClientGraphsyncDataTransfer(lc fx.Lifecycle, h host.Host, gs dtypes.Grap // data has been sent / received CompleteTimeout: 30 * time.Second, }) - dt, err := dtimpl.NewDataTransfer(dtDs, filepath.Join(r.Path(), "data-transfer"), net, transport, sc, dtRestartConfig) + dt, err := dtimpl.NewDataTransfer(dtDs, filepath.Join(r.Path(), "data-transfer"), net, transport, dtRestartConfig) if err != nil { return nil, err } diff --git a/node/modules/storageminer.go b/node/modules/storageminer.go index d89474eee..1781d0493 100644 --- a/node/modules/storageminer.go +++ b/node/modules/storageminer.go @@ -330,7 +330,6 @@ func HandleMigrateProviderFunds(lc fx.Lifecycle, ds dtypes.MetadataDS, node api. // NewProviderDAGServiceDataTransfer returns a data transfer manager that just // uses the provider's Staging DAG service for transfers func NewProviderDAGServiceDataTransfer(lc fx.Lifecycle, h host.Host, gs dtypes.StagingGraphsync, ds dtypes.MetadataDS, r repo.LockedRepo) (dtypes.ProviderDataTransfer, error) { - sc := storedcounter.New(ds, datastore.NewKey("/datatransfer/provider/counter")) net := dtnet.NewFromLibp2pHost(h) dtDs := namespace.Wrap(ds, datastore.NewKey("/datatransfer/provider/transfers")) @@ -340,7 +339,7 @@ func NewProviderDAGServiceDataTransfer(lc fx.Lifecycle, h host.Host, gs dtypes.S return nil, err } - dt, err := dtimpl.NewDataTransfer(dtDs, filepath.Join(r.Path(), "data-transfer"), net, transport, sc) + dt, err := dtimpl.NewDataTransfer(dtDs, filepath.Join(r.Path(), "data-transfer"), net, transport) if err != nil { return nil, err } From b4d4766615b6e0488f6773dfa007542e24f9a4c7 Mon Sep 17 00:00:00 2001 From: Anton Evangelatov Date: Tue, 23 Mar 2021 14:30:26 +0200 Subject: [PATCH 13/38] use go-data-transfer from personal fork --- go.mod | 7 +++-- go.sum | 9 +++---- testplans/lotus-soup/go.mod | 10 +++++--- testplans/lotus-soup/go.sum | 51 ++++++++++++++++++++++++------------- 4 files changed, 47 insertions(+), 30 deletions(-) diff --git a/go.mod b/go.mod index 6f94b536d..ed3ebaf64 100644 --- a/go.mod +++ b/go.mod @@ -15,7 +15,6 @@ require ( github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e github.com/cockroachdb/pebble v0.0.0-20201001221639-879f3bfeef07 github.com/coreos/go-systemd/v22 v22.1.0 - github.com/davecgh/go-spew v1.1.1 github.com/detailyang/go-fallocate v0.0.0-20180908115635-432fa640bd2e github.com/dgraph-io/badger/v2 v2.2007.2 github.com/docker/go-units v0.4.0 @@ -33,9 +32,9 @@ require ( github.com/filecoin-project/go-cbor-util v0.0.0-20191219014500-08c40a1e63a2 github.com/filecoin-project/go-commp-utils v0.0.0-20201119054358-b88f7a96a434 github.com/filecoin-project/go-crypto v0.0.0-20191218222705-effae4ea9f03 - github.com/filecoin-project/go-data-transfer v1.2.7 + github.com/filecoin-project/go-data-transfer v1.2.9 github.com/filecoin-project/go-fil-commcid v0.0.0-20201016201715-d41df56b4f6a - github.com/filecoin-project/go-fil-markets v1.0.8-0.20210319113544-a848de845da8 + github.com/filecoin-project/go-fil-markets v1.0.8-0.20210323120140-dfc792490922 github.com/filecoin-project/go-jsonrpc v0.1.4-0.20210217175800-45ea43ac2bec github.com/filecoin-project/go-multistore v0.0.3 github.com/filecoin-project/go-padreader v0.0.0-20200903213702-ed5fae088b20 @@ -167,4 +166,4 @@ replace github.com/filecoin-project/filecoin-ffi => ./extern/filecoin-ffi replace github.com/filecoin-project/test-vectors => ./extern/test-vectors -replace github.com/filecoin-project/go-data-transfer => github.com/nonsense/go-data-transfer v0.0.1 +replace github.com/filecoin-project/go-data-transfer => github.com/nonsense/go-data-transfer v0.0.2 diff --git a/go.sum b/go.sum index 39d0c7fc7..9266cfb9a 100644 --- a/go.sum +++ b/go.sum @@ -270,8 +270,8 @@ github.com/filecoin-project/go-fil-commcid v0.0.0-20200716160307-8f644712406f/go github.com/filecoin-project/go-fil-commcid v0.0.0-20201016201715-d41df56b4f6a h1:hyJ+pUm/4U4RdEZBlg6k8Ma4rDiuvqyGpoICXAxwsTg= github.com/filecoin-project/go-fil-commcid v0.0.0-20201016201715-d41df56b4f6a/go.mod h1:Eaox7Hvus1JgPrL5+M3+h7aSPHc0cVqpSxA+TxIEpZQ= github.com/filecoin-project/go-fil-markets v1.0.5-0.20201113164554-c5eba40d5335/go.mod h1:AJySOJC00JRWEZzRG2KsfUnqEf5ITXxeX09BE9N4f9c= -github.com/filecoin-project/go-fil-markets v1.0.8-0.20210319113544-a848de845da8 h1:fZgoq675uEr7q3fdYNnKmd7Wk87od7Vx4RBqLvOD5gY= -github.com/filecoin-project/go-fil-markets v1.0.8-0.20210319113544-a848de845da8/go.mod h1:0yQu5gvrjFoAIyzPSSJ+xUdCG83vjInAFbTswIB5/hk= +github.com/filecoin-project/go-fil-markets v1.0.8-0.20210323120140-dfc792490922 h1:vk4TGhO58hE3hs/2Rw5RXbh1Z2/Jy6v1GvkQpfUmYpM= +github.com/filecoin-project/go-fil-markets v1.0.8-0.20210323120140-dfc792490922/go.mod h1:xWoSrWwnLg7N6OUFdlijGHfTj2alzgLZW2Z+a4p18vg= github.com/filecoin-project/go-hamt-ipld v0.1.5 h1:uoXrKbCQZ49OHpsTCkrThPNelC4W3LPEk0OrS/ytIBM= github.com/filecoin-project/go-hamt-ipld v0.1.5/go.mod h1:6Is+ONR5Cd5R6XZoCse1CWaXZc0Hdb/JeX+EQCQzX24= github.com/filecoin-project/go-hamt-ipld/v2 v2.0.0 h1:b3UDemBYN2HNfk3KOXNuxgTTxlWi3xVvbQP0IT38fvM= @@ -591,7 +591,6 @@ github.com/ipfs/go-fs-lock v0.0.6 h1:sn3TWwNVQqSeNjlWy6zQ1uUGAZrV3hPOyEA6y1/N2a0 github.com/ipfs/go-fs-lock v0.0.6/go.mod h1:OTR+Rj9sHiRubJh3dRhD15Juhd/+w6VPOY28L7zESmM= github.com/ipfs/go-graphsync v0.1.0/go.mod h1:jMXfqIEDFukLPZHqDPp8tJMbHO9Rmeb9CEGevngQbmE= github.com/ipfs/go-graphsync v0.4.3/go.mod h1:mPOwDYv128gf8gxPFgXnz4fNrSYPsWyqisJ7ych+XDY= -github.com/ipfs/go-graphsync v0.5.2/go.mod h1:e2ZxnClqBBYAtd901g9vXMJzS47labjAtOzsWtOzKNk= github.com/ipfs/go-graphsync v0.6.0 h1:x6UvDUGA7wjaKNqx5Vbo7FGT8aJ5ryYA0dMQ5jN3dF0= github.com/ipfs/go-graphsync v0.6.0/go.mod h1:e2ZxnClqBBYAtd901g9vXMJzS47labjAtOzsWtOzKNk= github.com/ipfs/go-hamt-ipld v0.1.1/go.mod h1:1EZCr2v0jlCnhpa+aZ0JZYp8Tt2w16+JJOAVz17YcDk= @@ -1259,8 +1258,8 @@ github.com/nikkolasg/hexjson v0.0.0-20181101101858-78e39397e00c h1:5bFTChQxSKNwy github.com/nikkolasg/hexjson v0.0.0-20181101101858-78e39397e00c/go.mod h1:7qN3Y0BvzRUf4LofcoJplQL10lsFDb4PYlePTVwrP28= github.com/nkovacs/streamquote v0.0.0-20170412213628-49af9bddb229 h1:E2B8qYyeSgv5MXpmzZXRNp8IAQ4vjxIjhpAf5hv/tAg= github.com/nkovacs/streamquote v0.0.0-20170412213628-49af9bddb229/go.mod h1:0aYXnNPJ8l7uZxf45rWW1a/uME32OF0rhiYGNQ2oF2E= -github.com/nonsense/go-data-transfer v0.0.1 h1:BI9hMOWdCcB4k1RxQscIJgQZ1LnLF2+/ujXHtNqLuVE= -github.com/nonsense/go-data-transfer v0.0.1/go.mod h1:ps/AU2Ok4pf2oFevi5RmMr3JRAWcnSTA/Zag6VMygIc= +github.com/nonsense/go-data-transfer v0.0.2 h1:WmkpzXYsGFeNTCpuEtJXJauT0qehWJsKITWWqTOFDzE= +github.com/nonsense/go-data-transfer v0.0.2/go.mod h1:n8kbDQXWrY1c4UgfMa9KERxNCWbOTDwdNhf2MpN9dpo= github.com/nxadm/tail v1.4.4 h1:DQuhQpB1tVlglWS2hLQ5OV6B5r8aGxSrPc5Qo6uTN78= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= diff --git a/testplans/lotus-soup/go.mod b/testplans/lotus-soup/go.mod index 9974fe81c..80d0b5f69 100644 --- a/testplans/lotus-soup/go.mod +++ b/testplans/lotus-soup/go.mod @@ -8,11 +8,11 @@ require ( github.com/davecgh/go-spew v1.1.1 github.com/drand/drand v1.2.1 github.com/filecoin-project/go-address v0.0.5 - github.com/filecoin-project/go-fil-markets v1.1.7 - github.com/filecoin-project/go-jsonrpc v0.1.2 - github.com/filecoin-project/go-state-types v0.0.0-20210119062722-4adba5aaea71 + github.com/filecoin-project/go-fil-markets v1.1.9 + github.com/filecoin-project/go-jsonrpc v0.1.4-0.20210217175800-45ea43ac2bec + github.com/filecoin-project/go-state-types v0.1.0 github.com/filecoin-project/go-storedcounter v0.0.0-20200421200003-1c99c62e8a5b - github.com/filecoin-project/lotus v1.5.0-pre3.0.20210209162308-5a3b9839540b + github.com/filecoin-project/lotus v1.5.2 github.com/filecoin-project/specs-actors v0.9.13 github.com/google/uuid v1.1.2 github.com/gorilla/mux v1.7.4 @@ -41,3 +41,5 @@ require ( // On docker:go and exec:go, it maps to /extra/filecoin-ffi, as it's picked up // as an "extra source" in the manifest. replace github.com/filecoin-project/filecoin-ffi => ../../extern/filecoin-ffi + +replace github.com/filecoin-project/go-data-transfer => github.com/nonsense/go-data-transfer v0.0.2 diff --git a/testplans/lotus-soup/go.sum b/testplans/lotus-soup/go.sum index 083fbafa4..67eb30cba 100644 --- a/testplans/lotus-soup/go.sum +++ b/testplans/lotus-soup/go.sum @@ -38,12 +38,12 @@ github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym github.com/DATA-DOG/go-sqlmock v1.3.3/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= github.com/DataDog/zstd v1.4.1 h1:3oxKN3wbHibqx897utPC2LTQU4J+IHWWJO+glkAkpFM= github.com/DataDog/zstd v1.4.1/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo= +github.com/GeertJohan/go.incremental v1.0.0 h1:7AH+pY1XUgQE4Y1HcXYaMqAI0m9yrFqo/jt0CW30vsg= github.com/GeertJohan/go.incremental v1.0.0/go.mod h1:6fAjUhbVuX1KcMD3c8TEgVUqmo4seqhv0i0kdATSkM0= github.com/GeertJohan/go.rice v1.0.0 h1:KkI6O9uMaQU3VEKaj01ulavtF7o1fWT7+pk/4voiMLQ= github.com/GeertJohan/go.rice v1.0.0/go.mod h1:eH6gbSOAUv07dQuZVnBmoDP8mgsM1rtixis4Tib9if0= github.com/Gurpartap/async v0.0.0-20180927173644-4f7f499dd9ee h1:8doiS7ib3zi6/K172oDhSKU0dJ/miJramo9NITOMyZQ= github.com/Gurpartap/async v0.0.0-20180927173644-4f7f499dd9ee/go.mod h1:W0GbEAA4uFNYOGG2cJpmFJ04E6SD1NLELPYZB57/7AY= -github.com/Jeffail/gabs v1.4.0/go.mod h1:6xMvQMK4k33lb7GUUpaAPh6nKMmemQeg5d4gn7/bOXc= github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= github.com/Kubuxu/go-os-helper v0.0.1/go.mod h1:N8B+I7vPCT80IcP58r50u4+gEEcsZETFUpAzWW2ep1Y= github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= @@ -61,6 +61,7 @@ github.com/acarl005/stripansi v0.0.0-20180116102854-5a71ef0e047d/go.mod h1:asat6 github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= +github.com/akavel/rsrc v0.8.0 h1:zjWn7ukO9Kc5Q62DOJCcxGpXC18RawVtYAGdz2aLlfw= github.com/akavel/rsrc v0.8.0/go.mod h1:uLoCtb9J+EyAqh+26kdrTgmzRBFPGOolLWKpdxkKq+c= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= @@ -253,31 +254,30 @@ github.com/filecoin-project/go-amt-ipld/v3 v3.0.0/go.mod h1:Qa95YNAbtoVCTSVtX38a github.com/filecoin-project/go-bitfield v0.2.0/go.mod h1:CNl9WG8hgR5mttCnUErjcQjGvuiZjRqK9rHVBsQF4oM= github.com/filecoin-project/go-bitfield v0.2.3 h1:pedK/7maYF06Z+BYJf2OeFFqIDEh6SP6mIOlLFpYXGs= github.com/filecoin-project/go-bitfield v0.2.3/go.mod h1:CNl9WG8hgR5mttCnUErjcQjGvuiZjRqK9rHVBsQF4oM= +github.com/filecoin-project/go-bitfield v0.2.4 h1:uZ7MeE+XfM5lqrHJZ93OnhQKc/rveW8p9au0C68JPgk= +github.com/filecoin-project/go-bitfield v0.2.4/go.mod h1:CNl9WG8hgR5mttCnUErjcQjGvuiZjRqK9rHVBsQF4oM= github.com/filecoin-project/go-cbor-util v0.0.0-20191219014500-08c40a1e63a2 h1:av5fw6wmm58FYMgJeoB/lK9XXrgdugYiTqkdxjTy9k8= github.com/filecoin-project/go-cbor-util v0.0.0-20191219014500-08c40a1e63a2/go.mod h1:pqTiPHobNkOVM5thSRsHYjyQfq7O5QSCMhvuu9JoDlg= github.com/filecoin-project/go-commp-utils v0.0.0-20201119054358-b88f7a96a434 h1:0kHszkYP3hgApcjl5x4rpwONhN9+j7XDobf6at5XfHs= github.com/filecoin-project/go-commp-utils v0.0.0-20201119054358-b88f7a96a434/go.mod h1:6s95K91mCyHY51RPWECZieD3SGWTqIFLf1mPOes9l5U= github.com/filecoin-project/go-crypto v0.0.0-20191218222705-effae4ea9f03 h1:2pMXdBnCiXjfCYx/hLqFxccPoqsSveQFxVLvNxy9bus= github.com/filecoin-project/go-crypto v0.0.0-20191218222705-effae4ea9f03/go.mod h1:+viYnvGtUTgJRdy6oaeF4MTFKAfatX071MPDPBL11EQ= -github.com/filecoin-project/go-data-transfer v1.0.1/go.mod h1:UxvfUAY9v3ub0a21BSK9u3pB2aq30Y0KMsG+w9/ysyo= -github.com/filecoin-project/go-data-transfer v1.2.7 h1:WE5Cpp9eMt5BDoWOVR64QegSn6bwHQaDzyyjVU377Y0= -github.com/filecoin-project/go-data-transfer v1.2.7/go.mod h1:mvjZ+C3NkBX10JP4JMu27DCjUouHFjHwUGh+Xc4yvDA= github.com/filecoin-project/go-ds-versioning v0.1.0 h1:y/X6UksYTsK8TLCI7rttCKEvl8btmWxyFMEeeWGUxIQ= github.com/filecoin-project/go-ds-versioning v0.1.0/go.mod h1:mp16rb4i2QPmxBnmanUx8i/XANp+PFCCJWiAb+VW4/s= github.com/filecoin-project/go-fil-commcid v0.0.0-20200716160307-8f644712406f/go.mod h1:Eaox7Hvus1JgPrL5+M3+h7aSPHc0cVqpSxA+TxIEpZQ= github.com/filecoin-project/go-fil-commcid v0.0.0-20201016201715-d41df56b4f6a h1:hyJ+pUm/4U4RdEZBlg6k8Ma4rDiuvqyGpoICXAxwsTg= github.com/filecoin-project/go-fil-commcid v0.0.0-20201016201715-d41df56b4f6a/go.mod h1:Eaox7Hvus1JgPrL5+M3+h7aSPHc0cVqpSxA+TxIEpZQ= github.com/filecoin-project/go-fil-markets v1.0.5-0.20201113164554-c5eba40d5335/go.mod h1:AJySOJC00JRWEZzRG2KsfUnqEf5ITXxeX09BE9N4f9c= -github.com/filecoin-project/go-fil-markets v1.1.7 h1:7yy7alIDWzUxljxZhGmG3+wvaU4Ty5QDMbPmdZeaIJ8= -github.com/filecoin-project/go-fil-markets v1.1.7/go.mod h1:6oTRaAsHnCqhi3mpZqdvnWIzH6QzHQc4dbhJrI9/BfQ= +github.com/filecoin-project/go-fil-markets v1.1.9 h1:sA0NIEOpy7brZaeXeNgdXg5pvHaBtD5OTRlraOUbI0w= +github.com/filecoin-project/go-fil-markets v1.1.9/go.mod h1:0yQu5gvrjFoAIyzPSSJ+xUdCG83vjInAFbTswIB5/hk= github.com/filecoin-project/go-hamt-ipld v0.1.5 h1:uoXrKbCQZ49OHpsTCkrThPNelC4W3LPEk0OrS/ytIBM= github.com/filecoin-project/go-hamt-ipld v0.1.5/go.mod h1:6Is+ONR5Cd5R6XZoCse1CWaXZc0Hdb/JeX+EQCQzX24= github.com/filecoin-project/go-hamt-ipld/v2 v2.0.0 h1:b3UDemBYN2HNfk3KOXNuxgTTxlWi3xVvbQP0IT38fvM= github.com/filecoin-project/go-hamt-ipld/v2 v2.0.0/go.mod h1:7aWZdaQ1b16BVoQUYR+eEvrDCGJoPLxFpDynFjYfBjI= github.com/filecoin-project/go-hamt-ipld/v3 v3.0.1 h1:zbzs46G7bOctkZ+JUX3xirrj0RaEsi+27dtlsgrTNBg= github.com/filecoin-project/go-hamt-ipld/v3 v3.0.1/go.mod h1:gXpNmr3oQx8l3o7qkGyDjJjYSRX7hp/FGOStdqrWyDI= -github.com/filecoin-project/go-jsonrpc v0.1.2 h1:MTebUawBHLxxY9gDi1WXuGc89TWIDmsgoDqeZSk9KRw= -github.com/filecoin-project/go-jsonrpc v0.1.2/go.mod h1:XBBpuKIMaXIIzeqzO1iucq4GvbF8CxmXRFoezRh+Cx4= +github.com/filecoin-project/go-jsonrpc v0.1.4-0.20210217175800-45ea43ac2bec h1:rGI5I7fdU4viManxmDdbk5deZO7afe6L1Wc04dAmlOM= +github.com/filecoin-project/go-jsonrpc v0.1.4-0.20210217175800-45ea43ac2bec/go.mod h1:XBBpuKIMaXIIzeqzO1iucq4GvbF8CxmXRFoezRh+Cx4= github.com/filecoin-project/go-multistore v0.0.3 h1:vaRBY4YiA2UZFPK57RNuewypB8u0DzzQwqsL0XarpnI= github.com/filecoin-project/go-multistore v0.0.3/go.mod h1:kaNqCC4IhU4B1uyr7YWFHd23TL4KM32aChS0jNkyUvQ= github.com/filecoin-project/go-padreader v0.0.0-20200903213702-ed5fae088b20 h1:+/4aUeUoKr6AKfPE3mBhXA5spIV6UcKdTYDPNU2Tdmg= @@ -288,16 +288,16 @@ github.com/filecoin-project/go-state-types v0.0.0-20200903145444-247639ffa6ad/go github.com/filecoin-project/go-state-types v0.0.0-20200904021452-1883f36ca2f4/go.mod h1:IQ0MBPnonv35CJHtWSN3YY1Hz2gkPru1Q9qoaYLxx9I= github.com/filecoin-project/go-state-types v0.0.0-20200928172055-2df22083d8ab/go.mod h1:ezYnPf0bNkTsDibL/psSz5dy4B5awOJ/E7P2Saeep8g= github.com/filecoin-project/go-state-types v0.0.0-20201102161440-c8033295a1fc/go.mod h1:ezYnPf0bNkTsDibL/psSz5dy4B5awOJ/E7P2Saeep8g= -github.com/filecoin-project/go-state-types v0.0.0-20210119062722-4adba5aaea71 h1:Cas/CUB4ybYpdxvW7LouaydE16cpwdq3vvS3qgZuU+Q= -github.com/filecoin-project/go-state-types v0.0.0-20210119062722-4adba5aaea71/go.mod h1:ezYnPf0bNkTsDibL/psSz5dy4B5awOJ/E7P2Saeep8g= +github.com/filecoin-project/go-state-types v0.1.0 h1:9r2HCSMMCmyMfGyMKxQtv0GKp6VT/m5GgVk8EhYbLJU= +github.com/filecoin-project/go-state-types v0.1.0/go.mod h1:ezYnPf0bNkTsDibL/psSz5dy4B5awOJ/E7P2Saeep8g= github.com/filecoin-project/go-statemachine v0.0.0-20200925024713-05bd7c71fbfe h1:dF8u+LEWeIcTcfUcCf3WFVlc81Fr2JKg8zPzIbBDKDw= github.com/filecoin-project/go-statemachine v0.0.0-20200925024713-05bd7c71fbfe/go.mod h1:FGwQgZAt2Gh5mjlwJUlVB62JeYdo+if0xWxSEfBD9ig= github.com/filecoin-project/go-statestore v0.1.0 h1:t56reH59843TwXHkMcwyuayStBIiWBRilQjQ+5IiwdQ= github.com/filecoin-project/go-statestore v0.1.0/go.mod h1:LFc9hD+fRxPqiHiaqUEZOinUJB4WARkRfNl10O7kTnI= github.com/filecoin-project/go-storedcounter v0.0.0-20200421200003-1c99c62e8a5b h1:fkRZSPrYpk42PV3/lIXiL0LHetxde7vyYYvSsttQtfg= github.com/filecoin-project/go-storedcounter v0.0.0-20200421200003-1c99c62e8a5b/go.mod h1:Q0GQOBtKf1oE10eSXSlhN45kDBdGvEcVOqMiffqX+N8= -github.com/filecoin-project/lotus v1.5.0-pre3.0.20210209162308-5a3b9839540b h1:6L8LdxQDksFInGRmYbCrujBc7fEHip13T6UQX6iTk+I= -github.com/filecoin-project/lotus v1.5.0-pre3.0.20210209162308-5a3b9839540b/go.mod h1:frbnLE7QVAsmwe5XwTI6P0ZjjpGvA5/h1cM6yg2zhYM= +github.com/filecoin-project/lotus v1.5.2 h1:JXMTx9HYJ1G/sRPceNs4ZmGtYra5qpD22f3qDr2i0Zc= +github.com/filecoin-project/lotus v1.5.2/go.mod h1:ogeUSGizrAVxRbETP7Xe2muIXvxSyf+OfIb0kS4q3DQ= github.com/filecoin-project/specs-actors v0.9.4/go.mod h1:BStZQzx5x7TmCkLv0Bpa07U6cPKol6fd3w9KjMPZ6Z4= github.com/filecoin-project/specs-actors v0.9.12/go.mod h1:TS1AW/7LbG+615j4NsjMK1qlpAwaFsG9w0V2tg2gSao= github.com/filecoin-project/specs-actors v0.9.13 h1:rUEOQouefi9fuVY/2HOroROJlZbOzWYXXeIh41KF2M4= @@ -306,8 +306,8 @@ github.com/filecoin-project/specs-actors/v2 v2.0.1/go.mod h1:v2NZVYinNIKA9acEMBm github.com/filecoin-project/specs-actors/v2 v2.3.2/go.mod h1:UuJQLoTx/HPvvWeqlIFmC/ywlOLHNe8SNQ3OunFbu2Y= github.com/filecoin-project/specs-actors/v2 v2.3.4 h1:NZK2oMCcA71wNsUzDBmLQyRMzcCnX9tDGvwZ53G67j8= github.com/filecoin-project/specs-actors/v2 v2.3.4/go.mod h1:UuJQLoTx/HPvvWeqlIFmC/ywlOLHNe8SNQ3OunFbu2Y= -github.com/filecoin-project/specs-actors/v3 v3.0.1-0.20210128235937-57195d8909b1 h1:I6mvbwANIoToUZ37cYmuLyDKbPlAUxWnp0fJOZnlTz4= -github.com/filecoin-project/specs-actors/v3 v3.0.1-0.20210128235937-57195d8909b1/go.mod h1:NL24TPjJGyU7fh1ztpUyYcoZi3TmRKNEI0huPYmhObA= +github.com/filecoin-project/specs-actors/v3 v3.0.3 h1:bq9B1Jnq+Z0A+Yj3KnYhN3kcTpUyP6Umo3MZgai0BRE= +github.com/filecoin-project/specs-actors/v3 v3.0.3/go.mod h1:oMcmEed6B7H/wHabM3RQphTIhq0ibAKsbpYs+bQ/uxQ= github.com/filecoin-project/specs-storage v0.1.1-0.20201105051918-5188d9774506 h1:Ur/l2+6qN+lQiqjozWWc5p9UDaAMDZKTlDS98oRnlIw= github.com/filecoin-project/specs-storage v0.1.1-0.20201105051918-5188d9774506/go.mod h1:nJRRM7Aa9XVvygr3W9k6xGF46RWzr2zxF/iGoAIfA/g= github.com/filecoin-project/test-vectors/schema v0.0.5/go.mod h1:iQ9QXLpYWL3m7warwvK1JC/pTri8mnfEmKygNDqqY6E= @@ -531,6 +531,8 @@ github.com/ipfs/go-bitswap v0.3.2/go.mod h1:AyWWfN3moBzQX0banEtfKOfbXb3ZeoOeXnZG github.com/ipfs/go-block-format v0.0.1/go.mod h1:DK/YYcsSUIVAFNwo/KZCdIIbpN0ROH/baNLgayt4pFc= github.com/ipfs/go-block-format v0.0.2 h1:qPDvcP19izTjU8rgo6p7gTXZlkMkF5bz5G3fqIsSCPE= github.com/ipfs/go-block-format v0.0.2/go.mod h1:AWR46JfpcObNfg3ok2JHDUfdiHRgWhJgCQF+KIgOPJY= +github.com/ipfs/go-block-format v0.0.3 h1:r8t66QstRp/pd/or4dpnbVfXT5Gt7lOqRvC+/dDTpMc= +github.com/ipfs/go-block-format v0.0.3/go.mod h1:4LmD4ZUw0mhO+JSKdpWwrzATiEfM7WWgQ8H5l6P8MVk= github.com/ipfs/go-blockservice v0.0.3/go.mod h1:/NNihwTi6V2Yr6g8wBI+BSwPuURpBRMtYNGrlxZ8KuI= github.com/ipfs/go-blockservice v0.0.7/go.mod h1:EOfb9k/Y878ZTRY/CH0x5+ATtaipfbRhbvNSdgc/7So= github.com/ipfs/go-blockservice v0.1.0/go.mod h1:hzmMScl1kXHg3M2BjTymbVPjv627N7sYcvYaKbop39M= @@ -586,10 +588,11 @@ github.com/ipfs/go-filestore v1.0.0/go.mod h1:/XOCuNtIe2f1YPbiXdYvD0BKLA0JR1MgPi github.com/ipfs/go-fs-lock v0.0.6 h1:sn3TWwNVQqSeNjlWy6zQ1uUGAZrV3hPOyEA6y1/N2a0= github.com/ipfs/go-fs-lock v0.0.6/go.mod h1:OTR+Rj9sHiRubJh3dRhD15Juhd/+w6VPOY28L7zESmM= github.com/ipfs/go-graphsync v0.1.0/go.mod h1:jMXfqIEDFukLPZHqDPp8tJMbHO9Rmeb9CEGevngQbmE= -github.com/ipfs/go-graphsync v0.4.2/go.mod h1:/VmbZTUdUMTbNkgzAiCEucIIAU3BkLE2cZrDCVUhyi0= github.com/ipfs/go-graphsync v0.4.3/go.mod h1:mPOwDYv128gf8gxPFgXnz4fNrSYPsWyqisJ7ych+XDY= github.com/ipfs/go-graphsync v0.5.2 h1:USD+daaSC+7pLHCxROThSaF6SF7WYXF03sjrta0rCfA= github.com/ipfs/go-graphsync v0.5.2/go.mod h1:e2ZxnClqBBYAtd901g9vXMJzS47labjAtOzsWtOzKNk= +github.com/ipfs/go-graphsync v0.6.0 h1:x6UvDUGA7wjaKNqx5Vbo7FGT8aJ5ryYA0dMQ5jN3dF0= +github.com/ipfs/go-graphsync v0.6.0/go.mod h1:e2ZxnClqBBYAtd901g9vXMJzS47labjAtOzsWtOzKNk= github.com/ipfs/go-hamt-ipld v0.1.1/go.mod h1:1EZCr2v0jlCnhpa+aZ0JZYp8Tt2w16+JJOAVz17YcDk= github.com/ipfs/go-ipfs-blockstore v0.0.1/go.mod h1:d3WClOmRQKFnJ0Jz/jj/zmksX0ma1gROTlovZKBmN08= github.com/ipfs/go-ipfs-blockstore v0.1.0/go.mod h1:5aD0AvHPi7mZc6Ci1WCAhiBQu2IsfTduLl+422H6Rqw= @@ -727,6 +730,7 @@ github.com/jbenet/goprocess v0.1.4 h1:DRGOFReOMqqDNXwW70QkacFW0YN9QnwLV0Vqk+3oU0 github.com/jbenet/goprocess v0.1.4/go.mod h1:5yspPrukOVuOLORacaBi858NqyClJPQxYZlqdZVfqY4= github.com/jellevandenhooff/dkim v0.0.0-20150330215556-f50fe3d243e1/go.mod h1:E0B/fFc00Y+Rasa88328GlI/XbtyysCtTHZS8h7IrBU= github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= +github.com/jessevdk/go-flags v1.4.0 h1:4IU2WS7AumrZ/40jfhf4QVDMsQwqA7VEHozFRrGARJA= github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmespath/go-jmespath v0.3.0/go.mod h1:9QtRXoHjLGCJ5IBSaohpXITPlowMeeYCZ7fLUTSywik= @@ -960,8 +964,8 @@ github.com/libp2p/go-libp2p-protocol v0.1.0/go.mod h1:KQPHpAabB57XQxGrXCNvbL6UEX github.com/libp2p/go-libp2p-pubsub v0.1.1/go.mod h1:ZwlKzRSe1eGvSIdU5bD7+8RZN/Uzw0t1Bp9R1znpR/Q= github.com/libp2p/go-libp2p-pubsub v0.3.2-0.20200527132641-c0712c6e92cf/go.mod h1:TxPOBuo1FPdsTjFnv+FGZbNbWYsp74Culx+4ViQpato= github.com/libp2p/go-libp2p-pubsub v0.3.2/go.mod h1:Uss7/Cfz872KggNb+doCVPHeCDmXB7z500m/R8DaAUk= -github.com/libp2p/go-libp2p-pubsub v0.4.1 h1:j4umIg5nyus+sqNfU+FWvb9aeYFQH/A+nDFhWj+8yy8= -github.com/libp2p/go-libp2p-pubsub v0.4.1/go.mod h1:izkeMLvz6Ht8yAISXjx60XUQZMq9ZMe5h2ih4dLIBIQ= +github.com/libp2p/go-libp2p-pubsub v0.4.2-0.20210212194758-6c1addf493eb h1:HExLcdXn8fgtXPciUw97O5NNhBn31dt6d9fVUD4cngo= +github.com/libp2p/go-libp2p-pubsub v0.4.2-0.20210212194758-6c1addf493eb/go.mod h1:izkeMLvz6Ht8yAISXjx60XUQZMq9ZMe5h2ih4dLIBIQ= github.com/libp2p/go-libp2p-pubsub-tracer v0.0.0-20200626141350-e730b32bf1e6 h1:2lH7rMlvDPSvXeOR+g7FE6aqiEwxtpxWKQL8uigk5fQ= github.com/libp2p/go-libp2p-pubsub-tracer v0.0.0-20200626141350-e730b32bf1e6/go.mod h1:8ZodgKS4qRLayfw9FDKDd9DX4C16/GMofDxSldG8QPI= github.com/libp2p/go-libp2p-quic-transport v0.1.1/go.mod h1:wqG/jzhF3Pu2NrhJEvE+IE0NTHNXslOPn9JQzyCAxzU= @@ -1254,9 +1258,14 @@ github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxzi github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= github.com/neelance/astrewrite v0.0.0-20160511093645-99348263ae86/go.mod h1:kHJEU3ofeGjhHklVoIGuVj85JJwZ6kWPaJwCIxgnFmo= github.com/neelance/sourcemap v0.0.0-20151028013722-8c68805598ab/go.mod h1:Qr6/a/Q4r9LP1IltGz7tA7iOK1WonHEYhu1HRBA7ZiM= +github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= +github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/nikkolasg/hexjson v0.0.0-20181101101858-78e39397e00c h1:5bFTChQxSKNwy8ALwOebjekYExl9HTT9urdawqC95tA= github.com/nikkolasg/hexjson v0.0.0-20181101101858-78e39397e00c/go.mod h1:7qN3Y0BvzRUf4LofcoJplQL10lsFDb4PYlePTVwrP28= +github.com/nkovacs/streamquote v0.0.0-20170412213628-49af9bddb229 h1:E2B8qYyeSgv5MXpmzZXRNp8IAQ4vjxIjhpAf5hv/tAg= github.com/nkovacs/streamquote v0.0.0-20170412213628-49af9bddb229/go.mod h1:0aYXnNPJ8l7uZxf45rWW1a/uME32OF0rhiYGNQ2oF2E= +github.com/nonsense/go-data-transfer v0.0.2 h1:WmkpzXYsGFeNTCpuEtJXJauT0qehWJsKITWWqTOFDzE= +github.com/nonsense/go-data-transfer v0.0.2/go.mod h1:n8kbDQXWrY1c4UgfMa9KERxNCWbOTDwdNhf2MpN9dpo= github.com/nxadm/tail v1.4.4 h1:DQuhQpB1tVlglWS2hLQ5OV6B5r8aGxSrPc5Qo6uTN78= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= @@ -1494,7 +1503,9 @@ github.com/urfave/cli v1.22.2/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtX github.com/urfave/cli/v2 v2.0.0/go.mod h1:SE9GqnLQmjVa0iPEY0f1w3ygNIYcIJ0OKPMoW2caLfQ= github.com/urfave/cli/v2 v2.2.0 h1:JTTnM6wKzdA0Jqodd966MVj4vWbbquZykeX1sKbe2C4= github.com/urfave/cli/v2 v2.2.0/go.mod h1:SE9GqnLQmjVa0iPEY0f1w3ygNIYcIJ0OKPMoW2caLfQ= +github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= +github.com/valyala/fasttemplate v1.0.1 h1:tY9CJiPnMXf1ERmG2EyK7gNUd+c6RKGD0IfU8WdUSz8= github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8= github.com/viant/assertly v0.4.8/go.mod h1:aGifi++jvCrUaklKEKT0BU95igDNaqkvz+49uaYMPRU= github.com/viant/toolbox v0.24.0/go.mod h1:OxMCG57V0PXuIP2HNQrtJf2CjqdmbrOx5EkMILuUhzM= @@ -1523,6 +1534,8 @@ github.com/whyrusleeping/cbor-gen v0.0.0-20200812213548-958ddffe352c/go.mod h1:f github.com/whyrusleeping/cbor-gen v0.0.0-20200826160007-0b9f6c5fb163/go.mod h1:fgkXqYy7bV2cFeIEOkVTZS/WjXARfBqSH6Q2qHL33hQ= github.com/whyrusleeping/cbor-gen v0.0.0-20210118024343-169e9d70c0c2 h1:7HzUKl5d/dELS9lLeT4W6YvliZx+s9k/eOOIdHKrA/w= github.com/whyrusleeping/cbor-gen v0.0.0-20210118024343-169e9d70c0c2/go.mod h1:fgkXqYy7bV2cFeIEOkVTZS/WjXARfBqSH6Q2qHL33hQ= +github.com/whyrusleeping/cbor-gen v0.0.0-20210219115102-f37d292932f2 h1:bsUlNhdmbtlfdLVXAVfuvKQ01RnWAM09TVrJkI7NZs4= +github.com/whyrusleeping/cbor-gen v0.0.0-20210219115102-f37d292932f2/go.mod h1:fgkXqYy7bV2cFeIEOkVTZS/WjXARfBqSH6Q2qHL33hQ= github.com/whyrusleeping/chunker v0.0.0-20181014151217-fe64bd25879f h1:jQa4QT2UP9WYv2nzyawpKMOCl+Z/jW7djv2/J50lj9E= github.com/whyrusleeping/chunker v0.0.0-20181014151217-fe64bd25879f/go.mod h1:p9UJB6dDgdPgMJZs7UjUOdulKyRr9fqkS+6JKAInPy8= github.com/whyrusleeping/go-ctrlnet v0.0.0-20180313164037-f564fbbdaa95/go.mod h1:SJqKCCPXRfBFCwXjfNT/skfsceF7+MBFLI2OrvuRA7g= @@ -1821,6 +1834,8 @@ golang.org/x/sys v0.0.0-20200812155832-6a926be9bd1d/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200926100807-9d91bd62050c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f h1:+Nyd8tzPX9R7BWHguqsrbFdRx3WQ/1ib8I44HXV5yTA= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68 h1:nxC68pudNYkKU6jWhgrqdreuFiOQWj1Fs7T3VrH4Pjw= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1967,6 +1982,8 @@ gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8 gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU= +gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= gopkg.in/cheggaaa/pb.v1 v1.0.28 h1:n1tBJnnK2r7g9OW2btFH91V92STTUevLXYFb8gy9EMk= gopkg.in/cheggaaa/pb.v1 v1.0.28/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= From 1359fb6cc4e0072a7b07f6a9c1f4965d362ef610 Mon Sep 17 00:00:00 2001 From: Dirk McCormick Date: Wed, 24 Mar 2021 13:56:59 +0100 Subject: [PATCH 14/38] fix: disable pull channel monitoring for now --- go.mod | 4 ++-- go.sum | 8 ++++---- node/modules/client.go | 6 ++++++ 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/go.mod b/go.mod index e5f8900ae..7602b3845 100644 --- a/go.mod +++ b/go.mod @@ -32,9 +32,9 @@ require ( github.com/filecoin-project/go-cbor-util v0.0.0-20191219014500-08c40a1e63a2 github.com/filecoin-project/go-commp-utils v0.0.0-20201119054358-b88f7a96a434 github.com/filecoin-project/go-crypto v0.0.0-20191218222705-effae4ea9f03 - github.com/filecoin-project/go-data-transfer v1.3.0 + github.com/filecoin-project/go-data-transfer v1.4.0 github.com/filecoin-project/go-fil-commcid v0.0.0-20201016201715-d41df56b4f6a - github.com/filecoin-project/go-fil-markets v1.2.1 + github.com/filecoin-project/go-fil-markets v1.2.2 github.com/filecoin-project/go-jsonrpc v0.1.4-0.20210217175800-45ea43ac2bec github.com/filecoin-project/go-multistore v0.0.3 github.com/filecoin-project/go-padreader v0.0.0-20200903213702-ed5fae088b20 diff --git a/go.sum b/go.sum index ae66a5883..ca91c1763 100644 --- a/go.sum +++ b/go.sum @@ -265,16 +265,16 @@ github.com/filecoin-project/go-commp-utils v0.0.0-20201119054358-b88f7a96a434/go github.com/filecoin-project/go-crypto v0.0.0-20191218222705-effae4ea9f03 h1:2pMXdBnCiXjfCYx/hLqFxccPoqsSveQFxVLvNxy9bus= github.com/filecoin-project/go-crypto v0.0.0-20191218222705-effae4ea9f03/go.mod h1:+viYnvGtUTgJRdy6oaeF4MTFKAfatX071MPDPBL11EQ= github.com/filecoin-project/go-data-transfer v1.0.1/go.mod h1:UxvfUAY9v3ub0a21BSK9u3pB2aq30Y0KMsG+w9/ysyo= -github.com/filecoin-project/go-data-transfer v1.3.0 h1:QZvpUVU0fVKH+wBH/QDPi5AB7fUI3NwwBLHK+d1Jed4= -github.com/filecoin-project/go-data-transfer v1.3.0/go.mod h1:n8kbDQXWrY1c4UgfMa9KERxNCWbOTDwdNhf2MpN9dpo= +github.com/filecoin-project/go-data-transfer v1.4.0 h1:SRpFUp7WQdJe6iSmt7HfhMGDk7tniTVIlfmvQVBZhN8= +github.com/filecoin-project/go-data-transfer v1.4.0/go.mod h1:n8kbDQXWrY1c4UgfMa9KERxNCWbOTDwdNhf2MpN9dpo= github.com/filecoin-project/go-ds-versioning v0.1.0 h1:y/X6UksYTsK8TLCI7rttCKEvl8btmWxyFMEeeWGUxIQ= github.com/filecoin-project/go-ds-versioning v0.1.0/go.mod h1:mp16rb4i2QPmxBnmanUx8i/XANp+PFCCJWiAb+VW4/s= github.com/filecoin-project/go-fil-commcid v0.0.0-20200716160307-8f644712406f/go.mod h1:Eaox7Hvus1JgPrL5+M3+h7aSPHc0cVqpSxA+TxIEpZQ= github.com/filecoin-project/go-fil-commcid v0.0.0-20201016201715-d41df56b4f6a h1:hyJ+pUm/4U4RdEZBlg6k8Ma4rDiuvqyGpoICXAxwsTg= github.com/filecoin-project/go-fil-commcid v0.0.0-20201016201715-d41df56b4f6a/go.mod h1:Eaox7Hvus1JgPrL5+M3+h7aSPHc0cVqpSxA+TxIEpZQ= github.com/filecoin-project/go-fil-markets v1.0.5-0.20201113164554-c5eba40d5335/go.mod h1:AJySOJC00JRWEZzRG2KsfUnqEf5ITXxeX09BE9N4f9c= -github.com/filecoin-project/go-fil-markets v1.2.1 h1:vsTf6x6ZvwbIuPxCXIAIKBLOnRewMPPiXhwkZwVxWEo= -github.com/filecoin-project/go-fil-markets v1.2.1/go.mod h1:G4d/D/RwxpwSmMS1VyJ72wq8IIDdIbIefM1vKKPesfw= +github.com/filecoin-project/go-fil-markets v1.2.2 h1:BC9Ixdyy5J8VfirytWmX69Ntrk94rzm4WyExhwg/Kwc= +github.com/filecoin-project/go-fil-markets v1.2.2/go.mod h1:p5BIKl6sEoeOCKFa3/nfy66Q95rifEkJyGQgaNjPsno= github.com/filecoin-project/go-hamt-ipld v0.1.5 h1:uoXrKbCQZ49OHpsTCkrThPNelC4W3LPEk0OrS/ytIBM= github.com/filecoin-project/go-hamt-ipld v0.1.5/go.mod h1:6Is+ONR5Cd5R6XZoCse1CWaXZc0Hdb/JeX+EQCQzX24= github.com/filecoin-project/go-hamt-ipld/v2 v2.0.0 h1:b3UDemBYN2HNfk3KOXNuxgTTxlWi3xVvbQP0IT38fvM= diff --git a/node/modules/client.go b/node/modules/client.go index d68e96406..d54347835 100644 --- a/node/modules/client.go +++ b/node/modules/client.go @@ -135,6 +135,12 @@ func NewClientGraphsyncDataTransfer(lc fx.Lifecycle, h host.Host, gs dtypes.Grap // data-transfer push / pull channel restart configuration: dtRestartConfig := dtimpl.ChannelRestartConfig(channelmonitor.Config{ + // For now only monitor push channels (for storage deals) + MonitorPushChannels: true, + // TODO: Enable pull channel monitoring (for retrievals) when the + // following issue has been fixed: + // https://github.com/filecoin-project/go-data-transfer/issues/172 + MonitorPullChannels: false, // Wait up to 30s for the other side to respond to an Open channel message AcceptTimeout: 30 * time.Second, // Send a restart message if the data rate falls below 1024 bytes / minute From a202f9d19e1d841b88441b3b6e6252487a7692cd Mon Sep 17 00:00:00 2001 From: Anton Evangelatov Date: Wed, 24 Mar 2021 14:36:21 +0200 Subject: [PATCH 15/38] add cancel-retrieval-deal cmd --- api/api_full.go | 3 +++ api/apistruct/struct.go | 6 ++++++ api/mocks/mock_full.go | 15 +++++++++++++++ cli/client.go | 27 +++++++++++++++++++++++++++ documentation/en/api-methods.md | 16 ++++++++++++++++ node/impl/client/client.go | 23 +++++++++++++++++++++++ 6 files changed, 90 insertions(+) diff --git a/api/api_full.go b/api/api_full.go index b66b0e402..00dc86797 100644 --- a/api/api_full.go +++ b/api/api_full.go @@ -340,6 +340,9 @@ type FullNode interface { // which are stuck due to insufficient funds ClientRetrieveTryRestartInsufficientFunds(ctx context.Context, paymentChannel address.Address) error //perm:write + // ClientCancelRetrievalDeal cancels an ongoing retrieval deal based on DealID + ClientCancelRetrievalDeal(ctx context.Context, dealid retrievalmarket.DealID) error //perm:write + // ClientUnimport removes references to the specified file from filestore //ClientUnimport(path string) diff --git a/api/apistruct/struct.go b/api/apistruct/struct.go index 34cf52fce..afd177f86 100644 --- a/api/apistruct/struct.go +++ b/api/apistruct/struct.go @@ -154,6 +154,8 @@ type FullNodeStruct struct { ClientCancelDataTransfer func(p0 context.Context, p1 datatransfer.TransferID, p2 peer.ID, p3 bool) error `perm:"write"` + ClientCancelRetrievalDeal func(p0 context.Context, p1 retrievalmarket.DealID) error `perm:"write"` + ClientDataTransferUpdates func(p0 context.Context) (<-chan api.DataTransferChannel, error) `perm:"write"` ClientDealPieceCID func(p0 context.Context, p1 cid.Cid) (api.DataCIDSize, error) `perm:"read"` @@ -978,6 +980,10 @@ func (s *FullNodeStruct) ClientCancelDataTransfer(p0 context.Context, p1 datatra return s.Internal.ClientCancelDataTransfer(p0, p1, p2, p3) } +func (s *FullNodeStruct) ClientCancelRetrievalDeal(p0 context.Context, p1 retrievalmarket.DealID) error { + return s.Internal.ClientCancelRetrievalDeal(p0, p1) +} + func (s *FullNodeStruct) ClientDataTransferUpdates(p0 context.Context) (<-chan api.DataTransferChannel, error) { return s.Internal.ClientDataTransferUpdates(p0) } diff --git a/api/mocks/mock_full.go b/api/mocks/mock_full.go index 8fd646d9a..8de04cf4c 100644 --- a/api/mocks/mock_full.go +++ b/api/mocks/mock_full.go @@ -9,6 +9,7 @@ import ( address "github.com/filecoin-project/go-address" bitfield "github.com/filecoin-project/go-bitfield" datatransfer "github.com/filecoin-project/go-data-transfer" + retrievalmarket "github.com/filecoin-project/go-fil-markets/retrievalmarket" storagemarket "github.com/filecoin-project/go-fil-markets/storagemarket" auth "github.com/filecoin-project/go-jsonrpc/auth" multistore "github.com/filecoin-project/go-multistore" @@ -445,6 +446,20 @@ func (mr *MockFullNodeMockRecorder) ClientCancelDataTransfer(arg0, arg1, arg2, a return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ClientCancelDataTransfer", reflect.TypeOf((*MockFullNode)(nil).ClientCancelDataTransfer), arg0, arg1, arg2, arg3) } +// ClientCancelRetrievalDeal mocks base method +func (m *MockFullNode) ClientCancelRetrievalDeal(arg0 context.Context, arg1 retrievalmarket.DealID) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ClientCancelRetrievalDeal", arg0, arg1) + ret0, _ := ret[0].(error) + return ret0 +} + +// ClientCancelRetrievalDeal indicates an expected call of ClientCancelRetrievalDeal +func (mr *MockFullNodeMockRecorder) ClientCancelRetrievalDeal(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ClientCancelRetrievalDeal", reflect.TypeOf((*MockFullNode)(nil).ClientCancelRetrievalDeal), arg0, arg1) +} + // ClientDataTransferUpdates mocks base method func (m *MockFullNode) ClientDataTransferUpdates(arg0 context.Context) (<-chan api.DataTransferChannel, error) { m.ctrl.T.Helper() diff --git a/cli/client.go b/cli/client.go index 98f4b0229..ecc31e1e5 100644 --- a/cli/client.go +++ b/cli/client.go @@ -95,6 +95,7 @@ var clientCmd = &cli.Command{ WithCategory("util", clientListTransfers), WithCategory("util", clientRestartTransfer), WithCategory("util", clientCancelTransfer), + WithCategory("util", clientCancelRetrievalDeal), }, } @@ -1975,6 +1976,32 @@ var clientCancelTransfer = &cli.Command{ }, } +var clientCancelRetrievalDeal = &cli.Command{ + Name: "cancel-retrieval-deal", + Usage: "Cancel a retrieval deal by DealID", + Flags: []cli.Flag{ + &cli.Int64Flag{ + Name: "dealid", + Usage: "specify retrieval deal by DealID", + Required: true, + }, + }, + Action: func(cctx *cli.Context) error { + api, closer, err := GetFullNodeAPI(cctx) + if err != nil { + return err + } + defer closer() + ctx := ReqContext(cctx) + + if cctx.Int64("dealid") == 0 { + return errors.New("deal id cannot be 0") + } + + return api.ClientCancelRetrievalDeal(ctx, retrievalmarket.DealID(cctx.Int64("dealid"))) + }, +} + var clientListTransfers = &cli.Command{ Name: "list-transfers", Usage: "List ongoing data transfers for deals", diff --git a/documentation/en/api-methods.md b/documentation/en/api-methods.md index b8764d5b1..82e7f3e05 100644 --- a/documentation/en/api-methods.md +++ b/documentation/en/api-methods.md @@ -35,6 +35,7 @@ * [Client](#Client) * [ClientCalcCommP](#ClientCalcCommP) * [ClientCancelDataTransfer](#ClientCancelDataTransfer) + * [ClientCancelRetrievalDeal](#ClientCancelRetrievalDeal) * [ClientDataTransferUpdates](#ClientDataTransferUpdates) * [ClientDealPieceCID](#ClientDealPieceCID) * [ClientDealSize](#ClientDealSize) @@ -921,6 +922,21 @@ Inputs: Response: `{}` +### ClientCancelRetrievalDeal +ClientCancelRetrievalDeal cancels an ongoing retrieval deal based on DealID + + +Perms: write + +Inputs: +```json +[ + 5 +] +``` + +Response: `{}` + ### ClientDataTransferUpdates diff --git a/node/impl/client/client.go b/node/impl/client/client.go index ac526ac60..1f5203754 100644 --- a/node/impl/client/client.go +++ b/node/impl/client/client.go @@ -475,6 +475,29 @@ func (a *API) ClientListImports(ctx context.Context) ([]api.Import, error) { return out, nil } +func (a *API) ClientCancelRetrievalDeal(ctx context.Context, dealid retrievalmarket.DealID) error { + cerr := make(chan error) + go func() { + err := a.Retrieval.CancelDeal(dealid) + + select { + case cerr <- err: + case <-ctx.Done(): + } + }() + + select { + case err := <-cerr: + if err != nil { + return xerrors.Errorf("canceling retrieval deal erred: %w", err) + } + + return nil + case <-ctx.Done(): + return xerrors.Errorf("canceling retrieval deal context timeout: %w", ctx.Err()) + } +} + func (a *API) ClientRetrieve(ctx context.Context, order api.RetrievalOrder, ref *api.FileRef) error { events := make(chan marketevents.RetrievalEvent) go a.clientRetrieve(ctx, order, ref, events) From 01340993151225ee4f1c8c5adefb773cf305875a Mon Sep 17 00:00:00 2001 From: Dirk McCormick Date: Thu, 25 Mar 2021 15:07:42 +0100 Subject: [PATCH 16/38] feat: markets v1.2.3 --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 7602b3845..f1bcab061 100644 --- a/go.mod +++ b/go.mod @@ -34,7 +34,7 @@ require ( github.com/filecoin-project/go-crypto v0.0.0-20191218222705-effae4ea9f03 github.com/filecoin-project/go-data-transfer v1.4.0 github.com/filecoin-project/go-fil-commcid v0.0.0-20201016201715-d41df56b4f6a - github.com/filecoin-project/go-fil-markets v1.2.2 + github.com/filecoin-project/go-fil-markets v1.2.3 github.com/filecoin-project/go-jsonrpc v0.1.4-0.20210217175800-45ea43ac2bec github.com/filecoin-project/go-multistore v0.0.3 github.com/filecoin-project/go-padreader v0.0.0-20200903213702-ed5fae088b20 diff --git a/go.sum b/go.sum index ca91c1763..93c6bb2d9 100644 --- a/go.sum +++ b/go.sum @@ -273,8 +273,8 @@ github.com/filecoin-project/go-fil-commcid v0.0.0-20200716160307-8f644712406f/go github.com/filecoin-project/go-fil-commcid v0.0.0-20201016201715-d41df56b4f6a h1:hyJ+pUm/4U4RdEZBlg6k8Ma4rDiuvqyGpoICXAxwsTg= github.com/filecoin-project/go-fil-commcid v0.0.0-20201016201715-d41df56b4f6a/go.mod h1:Eaox7Hvus1JgPrL5+M3+h7aSPHc0cVqpSxA+TxIEpZQ= github.com/filecoin-project/go-fil-markets v1.0.5-0.20201113164554-c5eba40d5335/go.mod h1:AJySOJC00JRWEZzRG2KsfUnqEf5ITXxeX09BE9N4f9c= -github.com/filecoin-project/go-fil-markets v1.2.2 h1:BC9Ixdyy5J8VfirytWmX69Ntrk94rzm4WyExhwg/Kwc= -github.com/filecoin-project/go-fil-markets v1.2.2/go.mod h1:p5BIKl6sEoeOCKFa3/nfy66Q95rifEkJyGQgaNjPsno= +github.com/filecoin-project/go-fil-markets v1.2.3 h1:JDbGKQf60tB00TFKG/nofSyHyIEbqowZqoLOfda7yTs= +github.com/filecoin-project/go-fil-markets v1.2.3/go.mod h1:p5BIKl6sEoeOCKFa3/nfy66Q95rifEkJyGQgaNjPsno= github.com/filecoin-project/go-hamt-ipld v0.1.5 h1:uoXrKbCQZ49OHpsTCkrThPNelC4W3LPEk0OrS/ytIBM= github.com/filecoin-project/go-hamt-ipld v0.1.5/go.mod h1:6Is+ONR5Cd5R6XZoCse1CWaXZc0Hdb/JeX+EQCQzX24= github.com/filecoin-project/go-hamt-ipld/v2 v2.0.0 h1:b3UDemBYN2HNfk3KOXNuxgTTxlWi3xVvbQP0IT38fvM= From 36c3086376ee760d1caefc9ebae119d75e7be7a0 Mon Sep 17 00:00:00 2001 From: aarshkshah1992 Date: Fri, 26 Mar 2021 09:48:50 +0530 Subject: [PATCH 17/38] changes as per review --- cli/client.go | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/cli/client.go b/cli/client.go index ecc31e1e5..787510821 100644 --- a/cli/client.go +++ b/cli/client.go @@ -95,7 +95,6 @@ var clientCmd = &cli.Command{ WithCategory("util", clientListTransfers), WithCategory("util", clientRestartTransfer), WithCategory("util", clientCancelTransfer), - WithCategory("util", clientCancelRetrievalDeal), }, } @@ -952,6 +951,9 @@ var clientRetrieveCmd = &cli.Command{ Name: "retrieve", Usage: "Retrieve data from network", ArgsUsage: "[dataCid outputPath]", + Subcommands: []*cli.Command{ + clientCancelRetrievalDeal, + }, Flags: []cli.Flag{ &cli.StringFlag{ Name: "from", @@ -1977,7 +1979,7 @@ var clientCancelTransfer = &cli.Command{ } var clientCancelRetrievalDeal = &cli.Command{ - Name: "cancel-retrieval-deal", + Name: "cancel", Usage: "Cancel a retrieval deal by DealID", Flags: []cli.Flag{ &cli.Int64Flag{ @@ -1994,8 +1996,8 @@ var clientCancelRetrievalDeal = &cli.Command{ defer closer() ctx := ReqContext(cctx) - if cctx.Int64("dealid") == 0 { - return errors.New("deal id cannot be 0") + if cctx.Int64("dealid") <= 0 { + return errors.New("deal id cannot be negative") } return api.ClientCancelRetrievalDeal(ctx, retrievalmarket.DealID(cctx.Int64("dealid"))) From b13f6a32090e51fcdd7098ba9cd2940a66531a93 Mon Sep 17 00:00:00 2001 From: Dirk McCormick Date: Fri, 26 Mar 2021 09:50:52 +0100 Subject: [PATCH 18/38] fix: cancel retrieval deal - disallow negative deal ID --- cli/client.go | 2 +- node/impl/client/client.go | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/cli/client.go b/cli/client.go index 787510821..24f1281c9 100644 --- a/cli/client.go +++ b/cli/client.go @@ -1996,7 +1996,7 @@ var clientCancelRetrievalDeal = &cli.Command{ defer closer() ctx := ReqContext(cctx) - if cctx.Int64("dealid") <= 0 { + if cctx.Int64("dealid") < 0 { return errors.New("deal id cannot be negative") } diff --git a/node/impl/client/client.go b/node/impl/client/client.go index 1f5203754..62198e0a2 100644 --- a/node/impl/client/client.go +++ b/node/impl/client/client.go @@ -489,12 +489,12 @@ func (a *API) ClientCancelRetrievalDeal(ctx context.Context, dealid retrievalmar select { case err := <-cerr: if err != nil { - return xerrors.Errorf("canceling retrieval deal erred: %w", err) + return xerrors.Errorf("failed to cancel retrieval deal: %w", err) } return nil case <-ctx.Done(): - return xerrors.Errorf("canceling retrieval deal context timeout: %w", ctx.Err()) + return xerrors.Errorf("context timeout while canceling retrieval deal: %w", ctx.Err()) } } From 85eab9e00eea6520a82a34b17390ac10df4e6f8e Mon Sep 17 00:00:00 2001 From: Dirk McCormick Date: Fri, 26 Mar 2021 09:53:01 +0100 Subject: [PATCH 19/38] fix: make docsgen --- build/openrpc/full.json.gz | Bin 22582 -> 22664 bytes build/openrpc/miner.json.gz | Bin 7643 -> 7639 bytes build/openrpc/worker.json.gz | Bin 2578 -> 2578 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/build/openrpc/full.json.gz b/build/openrpc/full.json.gz index 42d7e5b954d1b5f955c274b897f12b195c68386a..3901c839f738bc39b49283b34909cdc1edcaa556 100644 GIT binary patch delta 21687 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 aS)A5hzW)1wg@*R<@H?X-i_#qv?SBAdLo-VN delta 21583 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 MdO6Ksp!hid0rbL)S^xk5 diff --git a/build/openrpc/miner.json.gz b/build/openrpc/miner.json.gz index faab78eb76c65d98e3190189bcda59a2faa51f16..38f5f83500091bab5645a4b708932336e082dd92 100644 GIT binary patch literal 7639 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 F0RTDG0jvN3 literal 7643 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 JfEo*V0RT7s00{s9 diff --git a/build/openrpc/worker.json.gz b/build/openrpc/worker.json.gz index 7bf6216a75f64bf7adaa10fbee6e214287f259b6..be362b3e99aca73dba202e7f06afea8a94c60296 100644 GIT binary patch delta 1830 zcmV+>2if?N6p|FM(gFfrpOe%AHGdE}c$+T=e}b}S6{R4gspd7VjHM~p{cEQnbQ@O> zM?}q{;(ns|ogL2pNA5rk=W)qyInS|i5nrH-SR|gi^PjfhJY{{rtRj_?IxK;>ludDh zDXBzQvK@~uqsHa<^7uW}W~y=O8mI0+ow_%@0x+kHxb!DPucRWXr--X2g@2aimxN7g zf%JOsOSEoKdM`9-A5eNt%IYO>DopL?$wY!GH@9K7rRK!cOb0ap*8tq10^I9-fV*H5 zUJ=$bNq)X!eT_iZ+yqlmYdc9^X9PO*OMTiPV38;&E8d}v3xBtgxX{a!W`})-8SMA z^boR!q@lOa6c`BoHh-du?i@YLfJODLnQ!_-QW2r5?KsO*zj&OPIZQq&v6NB@26wX4 zX)~}Ll1iL(3Uc$8Kx*yMjOmI36v|s)1yvy8z+^pKNv^Ojw}}07uHb?>@FQGm&)qy$ zBbG@r`&*aW<4O2!d&V}p>`j2Rp8?iW%jOyF*x?4sey8_lH-CF5pU+m%CSYs=#={I4 zPdWul7?r6^B{+UT>If!Nx?z$BL?RklD;tLffu#kiu- z<{7+Cftx*;5q}jXB9SvOy$th~45WS#rZW8C6 zwBR~ahIe{4XPsW$S*Kp%?iN+=e%Tdak^42~+}*JME7iyod%)sq$RpxTA~l1hSQClB zJZmq-yM;b+h187bA5MhwW*(U%MeYC*G=T>s!RE}7NO7c1Dwz@m`hz0!4rzIH z0)KalJI;R3<+jb1u7uDREqfWa?49F;=ZLFHeww;C`Vf>&Hz`1-tzs?MS_Ba$I?CNP zn!J2yo40$uREg{tB)uTO_5x(^?Vs!)LKbr zyuek|)=!UpV&8!i_o6~qoG=Fw^nX#;nh`l`r3Gg@M+%y64rx}Vnw6=vOIVP+j8wX! zI~Y;rM>)i&t=LjL?UJq9*~uN22~M&|l6tlq7(6?D{kB^h2lrc`&I)pmUkO$J2`H$F zA{Eo+3e}SdoFr+!9K|)z*yZ+}L;+LOMQR2D5D|cwS*MXm1dN5NJHIG;FBdhVa`qZ8 U7B`Fk1pom5|90#~$^m--0M!nQ#{d8T delta 1830 zcmV+>2if?N6p|FM(gFg`-jmb(p2*rSH{wm>;AP<5W0=4 zha;k9QE@*}{LT(%|08#xhV!^&x18tLxQH*%MJy7}-T6;jaGtV0U{;YzNgb9zT*{_6 z!IV@YEZL4nmr>(#e0lsHYBSY1b&XSZpibTE*9Bls8FA@Ph+auWR8J9CO@9h4%P$F= z)&lAE-j`_Ip!8m7(mtT{nv~T`;8d8}&y$G+Rc>y>Y)j3FshJLH0ImVJ0|mG@C;0$( z!6v*StZ9<`e8u`2fv&j;rlQt%lDx>{=L!8yRVt&y|K?J~U1>)e-4i#^X7myy4}={_ zE_kEaTvD63c+l@!y5Q=8_uM$*IO8Z9LLL#h!w7v=LD=SrK(YntY$sgnzgoTM;7Ys+$00 z+1yT?(maL=0`p9z-A3m_!mc3lzl;bj7wi^R_)xQy|J3Mj#>@M_ZQ_Q!=RN%jbUG`Q z4cKCgzvo)W%$QqJ{-a=DgAb<4Rh$^~s^e_V!)w^cC=?_UogsQgVEKmL7ac1T)`J}{BN+}rJ z$xf%uz;;+FQIMOz1X634W=vNUpitiWDyRYx2PW&`N^*sLxkc=sa|IX7fgj;gd+z43 z8nH~0+26X{9#6t=+cUP&Wp4tk{S2_4S~kyU#|}48_B*{dyMNh3`Fys5HUVQ3Fdk;W zc+x3Y!ngz%h=eap0;#?MbB+3UuhM6`Z}OFUrA+&fuWXj-8;ol(?nPi+!Ghc+ggZB@ zLYpQkLNx8unm2rLeq>Op7^I?xG+{n2MR`ipMxWIT#MTZ5Cb=xBvIUA-P4{*y#ubG& z&)|Iu-0Z=OsDCgKiNrC4>mG=P6f7HD0da@i^Qg)S(bH;@pseQo8QCQ6Wtg{QAZ2`J zH&h*BD|!!^8vW?RZx~3LEi(S;S{Fm=$Qs^cdMNApBHd5pRqh3R?SogD72g9qz+0$@ z&w8xc4Aq)R*?EW%_B4!^{h~<;Ehbaw!U3k}geE07Gk3bdXlcV+(rU#C zhruImYlBH9^X~X3v4Qj+q%%94_ek$djeGJAJpViY@wXq$x#xc$dlQ&Xdi@FQ1@p5Y zfPVMBZyfGzwpYg>swDP!s(%(cc01wkHLP|0}mHi{fQ{+ivykn7TCb zCO-%2mw(*RZj;#DHyzps7c?tn&(AGu@TkF~L&c+loj2O9j|9|Dx2%Y_l5trJerh6B zim7DoqyenGP_lghtb@;)GKmwkc~IXi*j$qW#yZjGinv|?x{y`;@pcG}(Yvz$TQsfR0K@)gD5^T;Ki4;fLq>?F7pg$-g?~s;P zCx39axZ~{iTyEQJ=~@YWuV~rJxMlAgCp<@7Rr1r+#nFeLY`RGSGHn%W!PX*(Fws%& zw$bF}L)*OF^TkSJLE`%_BJa+P`Kl<53CcoA1mbF&Cc|#b-8WB4WxCDXOJs(>@^|63 z?>lWf46WMTMnbnBq5XnA%EPee8x>S;`yS)vmjnuzM85Ryu@_*F`GyH zZ`t>MV_14zY>MQPt>??=vIaW74mzD4Aai%gFGpw_7|+bo=K5ulH%pP%0<@I+!DF~# z&?iby$|#k)X#KG<+3_;c5dDJi%C!nAz zid0OOD^yP=aFV3?aunAdBH00ZEYFaQ7m From 47f7208f38a33776b5663487d813865760db0755 Mon Sep 17 00:00:00 2001 From: Dirk McCormick Date: Fri, 26 Mar 2021 10:19:19 +0100 Subject: [PATCH 20/38] fix: rename command to retrieve-cancel --- cli/client.go | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/cli/client.go b/cli/client.go index 24f1281c9..5d9257f01 100644 --- a/cli/client.go +++ b/cli/client.go @@ -89,6 +89,7 @@ var clientCmd = &cli.Command{ WithCategory("data", clientStat), WithCategory("retrieval", clientFindCmd), WithCategory("retrieval", clientRetrieveCmd), + WithCategory("retrieval", clientCancelRetrievalDeal), WithCategory("util", clientCommPCmd), WithCategory("util", clientCarGenCmd), WithCategory("util", clientBalancesCmd), @@ -951,9 +952,6 @@ var clientRetrieveCmd = &cli.Command{ Name: "retrieve", Usage: "Retrieve data from network", ArgsUsage: "[dataCid outputPath]", - Subcommands: []*cli.Command{ - clientCancelRetrievalDeal, - }, Flags: []cli.Flag{ &cli.StringFlag{ Name: "from", @@ -1979,7 +1977,7 @@ var clientCancelTransfer = &cli.Command{ } var clientCancelRetrievalDeal = &cli.Command{ - Name: "cancel", + Name: "retrieve-cancel", Usage: "Cancel a retrieval deal by DealID", Flags: []cli.Flag{ &cli.Int64Flag{ From fd91c095c48a9104eac0c770ae91c525d27539af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BAl=20Kripalani?= Date: Fri, 26 Mar 2021 16:37:46 +0000 Subject: [PATCH 21/38] rename command to cancel-retrieval; rename args to follow Lotus style. --- cli/client.go | 17 +++++++++-------- node/impl/client/client.go | 4 ++-- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/cli/client.go b/cli/client.go index 5d9257f01..67fc7faff 100644 --- a/cli/client.go +++ b/cli/client.go @@ -89,7 +89,7 @@ var clientCmd = &cli.Command{ WithCategory("data", clientStat), WithCategory("retrieval", clientFindCmd), WithCategory("retrieval", clientRetrieveCmd), - WithCategory("retrieval", clientCancelRetrievalDeal), + WithCategory("retrieval", clientCancelRetrievalDealCmd), WithCategory("util", clientCommPCmd), WithCategory("util", clientCarGenCmd), WithCategory("util", clientBalancesCmd), @@ -1976,13 +1976,13 @@ var clientCancelTransfer = &cli.Command{ }, } -var clientCancelRetrievalDeal = &cli.Command{ - Name: "retrieve-cancel", - Usage: "Cancel a retrieval deal by DealID", +var clientCancelRetrievalDealCmd = &cli.Command{ + Name: "cancel-retrieval", + Usage: "Cancel a retrieval deal by deal ID; this also cancels the associated transfer", Flags: []cli.Flag{ &cli.Int64Flag{ - Name: "dealid", - Usage: "specify retrieval deal by DealID", + Name: "deal-id", + Usage: "specify retrieval deal by deal ID", Required: true, }, }, @@ -1994,11 +1994,12 @@ var clientCancelRetrievalDeal = &cli.Command{ defer closer() ctx := ReqContext(cctx) - if cctx.Int64("dealid") < 0 { + id := cctx.Int64("deal-id") + if id < 0 { return errors.New("deal id cannot be negative") } - return api.ClientCancelRetrievalDeal(ctx, retrievalmarket.DealID(cctx.Int64("dealid"))) + return api.ClientCancelRetrievalDeal(ctx, retrievalmarket.DealID(id)) }, } diff --git a/node/impl/client/client.go b/node/impl/client/client.go index 62198e0a2..54fef4264 100644 --- a/node/impl/client/client.go +++ b/node/impl/client/client.go @@ -475,10 +475,10 @@ func (a *API) ClientListImports(ctx context.Context) ([]api.Import, error) { return out, nil } -func (a *API) ClientCancelRetrievalDeal(ctx context.Context, dealid retrievalmarket.DealID) error { +func (a *API) ClientCancelRetrievalDeal(ctx context.Context, dealID retrievalmarket.DealID) error { cerr := make(chan error) go func() { - err := a.Retrieval.CancelDeal(dealid) + err := a.Retrieval.CancelDeal(dealID) select { case cerr <- err: From 14e6ce843efeb9fee53f0d1ae602c179604a8e04 Mon Sep 17 00:00:00 2001 From: Anton Evangelatov Date: Mon, 29 Mar 2021 18:28:35 +0300 Subject: [PATCH 22/38] use latest go-fil-markets and go-data-transfer --- go.mod | 9 ++++----- go.sum | 15 +++++++-------- 2 files changed, 11 insertions(+), 13 deletions(-) diff --git a/go.mod b/go.mod index ed3ebaf64..fdfc28c03 100644 --- a/go.mod +++ b/go.mod @@ -32,9 +32,9 @@ require ( github.com/filecoin-project/go-cbor-util v0.0.0-20191219014500-08c40a1e63a2 github.com/filecoin-project/go-commp-utils v0.0.0-20201119054358-b88f7a96a434 github.com/filecoin-project/go-crypto v0.0.0-20191218222705-effae4ea9f03 - github.com/filecoin-project/go-data-transfer v1.2.9 + github.com/filecoin-project/go-data-transfer v1.4.0 github.com/filecoin-project/go-fil-commcid v0.0.0-20201016201715-d41df56b4f6a - github.com/filecoin-project/go-fil-markets v1.0.8-0.20210323120140-dfc792490922 + github.com/filecoin-project/go-fil-markets v1.0.8-0.20210325184546-c7ea9187ef63 github.com/filecoin-project/go-jsonrpc v0.1.4-0.20210217175800-45ea43ac2bec github.com/filecoin-project/go-multistore v0.0.3 github.com/filecoin-project/go-padreader v0.0.0-20200903213702-ed5fae088b20 @@ -116,7 +116,6 @@ require ( github.com/libp2p/go-libp2p-yamux v0.4.1 github.com/libp2p/go-maddr-filter v0.1.0 github.com/mattn/go-colorable v0.1.6 // indirect - github.com/mattn/go-runewidth v0.0.10 // indirect github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 github.com/mitchellh/go-homedir v1.1.0 github.com/multiformats/go-base32 v0.0.3 @@ -164,6 +163,6 @@ replace github.com/golangci/golangci-lint => github.com/golangci/golangci-lint v replace github.com/filecoin-project/filecoin-ffi => ./extern/filecoin-ffi -replace github.com/filecoin-project/test-vectors => ./extern/test-vectors +replace github.com/filecoin-project/go-data-transfer => github.com/nonsense/go-data-transfer v0.0.3 -replace github.com/filecoin-project/go-data-transfer => github.com/nonsense/go-data-transfer v0.0.2 +replace github.com/filecoin-project/test-vectors => ./extern/test-vectors diff --git a/go.sum b/go.sum index 9266cfb9a..c71a72929 100644 --- a/go.sum +++ b/go.sum @@ -270,8 +270,10 @@ github.com/filecoin-project/go-fil-commcid v0.0.0-20200716160307-8f644712406f/go github.com/filecoin-project/go-fil-commcid v0.0.0-20201016201715-d41df56b4f6a h1:hyJ+pUm/4U4RdEZBlg6k8Ma4rDiuvqyGpoICXAxwsTg= github.com/filecoin-project/go-fil-commcid v0.0.0-20201016201715-d41df56b4f6a/go.mod h1:Eaox7Hvus1JgPrL5+M3+h7aSPHc0cVqpSxA+TxIEpZQ= github.com/filecoin-project/go-fil-markets v1.0.5-0.20201113164554-c5eba40d5335/go.mod h1:AJySOJC00JRWEZzRG2KsfUnqEf5ITXxeX09BE9N4f9c= -github.com/filecoin-project/go-fil-markets v1.0.8-0.20210323120140-dfc792490922 h1:vk4TGhO58hE3hs/2Rw5RXbh1Z2/Jy6v1GvkQpfUmYpM= -github.com/filecoin-project/go-fil-markets v1.0.8-0.20210323120140-dfc792490922/go.mod h1:xWoSrWwnLg7N6OUFdlijGHfTj2alzgLZW2Z+a4p18vg= +github.com/filecoin-project/go-fil-markets v1.0.8-0.20210325184546-c7ea9187ef63 h1:f5jpJQo+6Eb/slc613BKD9OhG9VUZHAigyCyzyJkIL4= +github.com/filecoin-project/go-fil-markets v1.0.8-0.20210325184546-c7ea9187ef63/go.mod h1:p5BIKl6sEoeOCKFa3/nfy66Q95rifEkJyGQgaNjPsno= +github.com/filecoin-project/go-fil-markets v1.1.9 h1:sA0NIEOpy7brZaeXeNgdXg5pvHaBtD5OTRlraOUbI0w= +github.com/filecoin-project/go-fil-markets v1.1.9/go.mod h1:0yQu5gvrjFoAIyzPSSJ+xUdCG83vjInAFbTswIB5/hk= github.com/filecoin-project/go-hamt-ipld v0.1.5 h1:uoXrKbCQZ49OHpsTCkrThPNelC4W3LPEk0OrS/ytIBM= github.com/filecoin-project/go-hamt-ipld v0.1.5/go.mod h1:6Is+ONR5Cd5R6XZoCse1CWaXZc0Hdb/JeX+EQCQzX24= github.com/filecoin-project/go-hamt-ipld/v2 v2.0.0 h1:b3UDemBYN2HNfk3KOXNuxgTTxlWi3xVvbQP0IT38fvM= @@ -591,6 +593,7 @@ github.com/ipfs/go-fs-lock v0.0.6 h1:sn3TWwNVQqSeNjlWy6zQ1uUGAZrV3hPOyEA6y1/N2a0 github.com/ipfs/go-fs-lock v0.0.6/go.mod h1:OTR+Rj9sHiRubJh3dRhD15Juhd/+w6VPOY28L7zESmM= github.com/ipfs/go-graphsync v0.1.0/go.mod h1:jMXfqIEDFukLPZHqDPp8tJMbHO9Rmeb9CEGevngQbmE= github.com/ipfs/go-graphsync v0.4.3/go.mod h1:mPOwDYv128gf8gxPFgXnz4fNrSYPsWyqisJ7ych+XDY= +github.com/ipfs/go-graphsync v0.5.2/go.mod h1:e2ZxnClqBBYAtd901g9vXMJzS47labjAtOzsWtOzKNk= github.com/ipfs/go-graphsync v0.6.0 h1:x6UvDUGA7wjaKNqx5Vbo7FGT8aJ5ryYA0dMQ5jN3dF0= github.com/ipfs/go-graphsync v0.6.0/go.mod h1:e2ZxnClqBBYAtd901g9vXMJzS47labjAtOzsWtOzKNk= github.com/ipfs/go-hamt-ipld v0.1.1/go.mod h1:1EZCr2v0jlCnhpa+aZ0JZYp8Tt2w16+JJOAVz17YcDk= @@ -1139,8 +1142,6 @@ github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Ky github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.7 h1:Ei8KR0497xHyKJPAv59M1dkC+rOZCMBJ+t3fZ+twI54= github.com/mattn/go-runewidth v0.0.7/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= -github.com/mattn/go-runewidth v0.0.10 h1:CoZ3S2P7pvtP45xOtBw+/mDL2z0RKI576gSkzRRpdGg= -github.com/mattn/go-runewidth v0.0.10/go.mod h1:RAqKPSqVFrSLVXbA8x7dzmKdmGzieGRCM46jaSJTDAk= github.com/mattn/go-xmlrpc v0.0.3/go.mod h1:mqc2dz7tP5x5BKlCahN/n+hs7OSZKJkS9JsHNBRlrxA= github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= @@ -1258,8 +1259,8 @@ github.com/nikkolasg/hexjson v0.0.0-20181101101858-78e39397e00c h1:5bFTChQxSKNwy github.com/nikkolasg/hexjson v0.0.0-20181101101858-78e39397e00c/go.mod h1:7qN3Y0BvzRUf4LofcoJplQL10lsFDb4PYlePTVwrP28= github.com/nkovacs/streamquote v0.0.0-20170412213628-49af9bddb229 h1:E2B8qYyeSgv5MXpmzZXRNp8IAQ4vjxIjhpAf5hv/tAg= github.com/nkovacs/streamquote v0.0.0-20170412213628-49af9bddb229/go.mod h1:0aYXnNPJ8l7uZxf45rWW1a/uME32OF0rhiYGNQ2oF2E= -github.com/nonsense/go-data-transfer v0.0.2 h1:WmkpzXYsGFeNTCpuEtJXJauT0qehWJsKITWWqTOFDzE= -github.com/nonsense/go-data-transfer v0.0.2/go.mod h1:n8kbDQXWrY1c4UgfMa9KERxNCWbOTDwdNhf2MpN9dpo= +github.com/nonsense/go-data-transfer v0.0.3 h1:4ZcQA8807qIlgjGk4Fk3mqKjfrQM6DiZ8TYJxvE/mQU= +github.com/nonsense/go-data-transfer v0.0.3/go.mod h1:n8kbDQXWrY1c4UgfMa9KERxNCWbOTDwdNhf2MpN9dpo= github.com/nxadm/tail v1.4.4 h1:DQuhQpB1tVlglWS2hLQ5OV6B5r8aGxSrPc5Qo6uTN78= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= @@ -1367,8 +1368,6 @@ github.com/raulk/go-watchdog v1.0.1/go.mod h1:lzSbAl5sh4rtI8tYHU01BWIDzgzqaQLj6R github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0 h1:OdAsTTz6OkFY5QxjkYwrChwuRruF69c169dPK26NUlk= github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= -github.com/rivo/uniseg v0.1.0 h1:+2KBaVoUmb9XzDsrx/Ct0W/EYOSFf/nWTauy++DprtY= -github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= From fd6d8b302a36c95e68dfbdf42756c6b14584ff0f Mon Sep 17 00:00:00 2001 From: Anton Evangelatov Date: Mon, 29 Mar 2021 18:32:09 +0300 Subject: [PATCH 23/38] commit full.json.gz and miner.json.gz docs --- build/openrpc/full.json.gz | Bin 22582 -> 22705 bytes build/openrpc/miner.json.gz | Bin 7643 -> 7693 bytes documentation/en/api-methods-miner.md | 5 ++++- documentation/en/api-methods.md | 21 ++++++++++++++++++--- 4 files changed, 22 insertions(+), 4 deletions(-) diff --git a/build/openrpc/full.json.gz b/build/openrpc/full.json.gz index 42d7e5b954d1b5f955c274b897f12b195c68386a..4120afb7e0018f18ce9658ef290165ebb69eb3dd 100644 GIT binary patch literal 22705 zcmb4~V~i+W@aD(1ZQHhO+qP}nwrzXvc<$JqxntYhdHu<53sADgQJ)83u_wu?T=R-r@c_PwzBSb<{SO$;= zKw6#oeUm@<#}`pzqK&55`8rnAh&b)U^Pi@_OGUiI9(Qi=%*@L5O1E5l@I-uAO-lP#9$*>yE8$zvFz%gM2%)ppT613g_!{vGAVA63-Bx z69t*JI0RQp4zZt<2g8jEH=U7OfN$N#+d(|PSc`lZq2mBGm>(ZB?+vl5Vmx@^kbbbu zllnKC1I547JbT<~|L%cZK!GTH%37v@W}Q`KZV4p4|Qg$NED0&xp`9tP*s-2@5lg_mJC3k)33mVe@NVK9IEU)Y28 zy$nqr7Z>?bVtzvIrt{R;KL8L5AxElqO-*AXAsYbV)&aFyyB}1Rq713TOh3GCHS$>U9imgyeC@kHTI_lbaow5s|gfF zL0a{Uf&%9`OuL)Q>nr!JT!L}>o+J%%go-+gy{zYsy7D~TA%V-B%h`H}_|YEcx%F!oZv01hNVH-kUO3LKLKVMp zsugCdS13j>@l!BPh>x7wI?wG}C~cmuOWZgyKrF#Hk?M9Q{*^)H#&_glj+|Gh@yV~H zA>zeza~6aV$VU=BRM`qk?jV?4LXz|vLZ})4QDZ=hr(W1wXOR5p%@1*KXBNYF&iCV6 zepa6^05HIuzq69I!6yt~pbJX|bCCb6IB!E>+OU1DVQB402m{GX7hTHI64Ci&nxjCQ zHDB{^04>yeLoV5{eIT_h76(>6$~JvO(@=QiOO|X_?o&tv(c|4o{=#WS&1T|c(J)zx z&oIN%Tq~jRW;v^Rist9)#!aVu_WUgG#bGE9mR?6GQiHjRogUQ6INrVy~pk4P-`J`6EJp1}Nc@%93+ z^nUT~rf4Kte(#`MTakY8@``+3sO$Oe=p=a&d3ow;#P#N}O`eY##eNHh-&D6CBj}R~ zA2cWsARG+PDT&fivBl~Bp(evncmxI%OBIDV1(gwz8OM_bFz=jdS2)f;-QOcd_se}z z+o&tp4d$JuAo+Ow8mEalB(89`>YOysKzPp&ZrwG2jKhX;oVqfG_2Q(MATta@H2G1T~N3((H})Wz3ZXJNyOuRsbD zrJohh0`hiYf9F-5L}yDcVw}w}dnGe5r}z|a*(>|}eN@U^cgJOxY?>Yo`?QHbU@p~z z=sUNaUeW|?44wQAw?`glKB@1IGZsO0(#}@5kr}s|V!>f6BxDrk&vzXVPNb67zuv=k zFutM!F-#@YoPw4Y%og*1j5=}5M0#MtnHb*5lKaIZj4ttEZJb*o*RWQGanxF z;`SH!mv4RHCT?sl|Nd+l_c3IzF>~OTZ@8VC<{5t2n-;Vqt(5Lcu&kSQ^b99RyY;Nv zD05XFRa$qF=X$tJ z)SVBTP;zByQIJw?LM(I*cnQwut-)DwE?}`53u!g0bLlo?Cd#^+OPLf?F($$mfeT}i zptOf9QHgi)RD!k}r?eE>67WoQTni{Lf>8+CbNC8FDv<#sS;;p&@)21tK*ujam7%Vx zA451HjIFhj_yy>eybkgrNQRx7}KE*y~h1y5)MVb$MRtO&8oKL3fgF_IiRx2TY>tFJJ#L1InJk)qF0yz2iZPgB#{khxzutY&C(Oue&Z-R3!0N~!6~4G zdZnLx>E%SoR@1^^6hLrFq^`JxaHMp&Mi$ILhGvwYz%MR<7S?>dt&ku1>Gga#K4G{2mRDc;xzEPlzE{Wcs{4ky9b;$x zRR27^bwwYK_ZWeXSMta2`~DuAr0};pi-8!6IyG%4fO~pb%K$g=zqwwW*OLG`{QkPQ z&AW{M_UUdvxt{;x{YGDZa&Pqa=Z7ns@rdI3@$tt9RbsO2c3Vh0FwvA!7#)Hl#Y^)Z ziF*FL`Um}(1!brYH>O!I+!HuliX4Q&4Sg!|M%Q{QU>eK%PeP92g>##$5II5;9#V-y z%mG^b_ir5)dAS7k!}s~(PjPy|>P5OszLfb?8x0`hBlkwxoxf>n5(B}8%iPhDx%+eB zL>QR7v?14;kWY6v}-eKBa1b=w?emGm9oX@;3fdJp(QN+W`6&Ri)jsL?&*rIVJC zBIkPO0^PN4h6u&nm5FN=;LIRxpRBCuWvFRsH6LzHLZlyRaiK=lkzRk+C^OAWGu2A7 z)GSl|)AEdFF+yGAD%+V-WjCI-fyFtNOQSYdQH05CP8(khp@afIb01rdaH5fYH&z4; zt@Fjv60*cM z(NT(woa%Y{A2pMvsEp&~>A>{PbZx)0OA~ z8)SQ>M^c@QaRFzlGqYE2;TY(<1lp=z;nKSFPDfk~r<3oJ?5g{;8NN+hgTMEi+dS5xDugX2n2$q4A7FgnWEfZ)*F!*KxNj8R-U zL+zfo_8#-%@d{i@;8IP-E#-9+J#+KGhr28LU%c=h){m7`^alG<@iunDFQ94N+xC>t=83U!^$R89JXv?4Z9LAT@F3DCyy zpOr>VI!46yp|9<*nf0!`$l1vA%Th2!4|Q@lMURsUB&{+R=;J8!r$dN%x(LjNN!Mlo zr7~&YaJf$foXO00+|pI)>mpkrJ58ESESk(6NK|CZewGdhJ9oVToip83or$4{TjNvC zF&CyzJHLVEr|F{7@gjDxpgExf)^ILuG>$oEA$cb)$E0Q9QfxW7){KQz+_R_17Nlu= z&z#gH?dFh_Y8n3$jH{XFYd>ML9lGt&zsDE-YMDuA%|bYbxdL$Zz!GZ>AZXcn-#)^s zCIg{3PP%5)R6dSG_O*OMgK3}M@V~)?2ANRREtgHdiX81@x;HKkloMSTWKk3O)4NbL zI!iA{B9*RJd=ITACQDUzJ}4vbj5qu#OkahmxV6r^{*k*-f8xLU^Y!8X!z_ybo&Irh z1E+cW<{y_+|AHSkJyjU=T?+L{Lb1R{8Y zMGTJnw{|H^tTbDr1_;?kX)g328hKD~%0a3wnzS&AfI10`@smBOr4w^I1J%*CiGZ~A zODdFd{e?{68f%6ZN*6S8$DP}$Ud+SBUY(yJR(Zot3X7;`>NVz%OWEiq1GM)289get zni*TXrRLcRb9q})7iX!hn3?Nlw1kZci>x6q2=CtH54xhdv;=!@!iv)Ta^jpgp$C1A z&GKa941=R7Se%;)b(LL_$rmR+!{aU?)Ny{8a4^sH+YB0oHuFfb^2}jqvMA(P8HB)I zL4Y*8_GO{ns1y|@9&kN{;J_;T%Bq@r7vf|6Gv4`@>viEU{DQYwY^`Xrv{~G`$HxJiCXDMm=~jC)6S~Y_ADZ2m@Vm5l~ZYQS$w;Q zJ-Y=3p;U#_)XdnO-6~eQ-ANEG z{!Rt%3PS5e7UM{yN#Ff&bRASn1uIhh!Krnjtxw^?`Q+B#yNAT!5Gdxt${3H`AOpFF z%GTw1qOE@-3aKjBfgQ;aC5{16K~4;2@f9EOt}wdbtR5ZPzLTP*l|tv@gMF-otAOuh zLHoim9WPub8%c~a@L^{l3d%hNpzUM&6#h19ah8$#-a3hMMn@zxn#*l5@|l_aq6oj8 zXX^?w)MC`SVx1G_+v2rfyECx)LM9zk-lzGK(wE&NlQPhtHA=-P2o?T@WCf5!C6W_( zjtkt*_05$V_ZXnkU}?ja;O6EgxBcOdU3)wH;m`MGqGTGNEC+&7}n~Y3e-LRHqT)k(uRJ*b{ z7c2Ah9@%G$;8_`}R!LpD7iOp8t1X#l$E4#<(p_gs@mg>3-90Ws zMnaW^gfcfK>4iixj{D6XjikJabJ-U?4QdTtjX|o|ZM9J-DrPZh;b%tsiv^+aPE}2T zR;+Swbkth~BkO2QSM)@XRRja~_+>3sg##*_y;bm?9AG(OTVP8s6GBA4XowMZKD=Ac8M@Gk(UXz}nb6<3h?Ja0#wW%J2vCCim0Z@M>}XKC;kt;-xcP}cg!h0vT3~Rr-ugep>)1wsoaJdBblA9EI@PLFO{b)}OMg6<6)*nf z@aH!N9%O+nRKN+fJnh$+)_?$1c0{`Gi-F6C(7IQsU#n!~mNhHG-#|ZtL<-aP4s4CM zSAfyBDCVhQn;Z(lfTtzmu_$|k&@)Pm*4VE}6$wi4)528udn-XW66o?!6=j^0HT&9U z8pPj^fSd3J9NFYTA$6xbVqcOuvpq1bIkmDnFy_(oiGdX;_HHH9PV&KP>P}-|snQGO zPtI8A_M~~o>Uqy}#2P@%8rXxotId0N9lxHMGp}+^uE12hLs>EL5J`Yeic{?xs>w|U z$*msBnk6D~Ms%se6`^azs@_l#Em2cmm{R65+)ON>{E~5K_3>Dx_R#l9Gv90X2*L)iJ!jz%t)km)Q#*Mu&Q{yULNWXoJ5l1P1k zJu>UbK%d>dS^e1LnaLRC*7jm88*T>@3;7Dw=XmQ3r`N4(?l(qzx;LLKz37iuo z(Az#CV8euv4Rfd{sb0Hq3w8%kY`MAisQARCj;{;ml@EjtO10xW3OXLaHu9CB17Exk zKuy~s2ZkgRJlnHH5;w*pAP4K2Taq(nH`Q;Oq7onl-?N&&%?A8x{o z)sw2P^>);BFYViqMK`Y;!D~H~+wbx-f*y@yWs6UQ=Z!tZ`rJ=Ig9Fz{%uEw9Y-=56 zGS^fXD?)6exVvq%KKMsX>P9$5cvjdhNEV}jB<}s3x(Ncuw04zT>Mt}f2nKvE_g}|5_!lk7(@ z)52gn5o9S5+vp)75xH2E6z_-ki&rN*KiphA-(L?;zx!qGcmKuECOkkQB^*VfgfA2@ z3^*PTjAP&wW-bAyUPU!72Eh&Td^QYcN{kbm7zoGQgGhYl&9F?IKr|V6LS+~A5C_}a zgfiX~)Y&JeNqNix;Lo{rk2zonKDB@qVH&-@DiP`|-h* z&3Qy~{rmW{Ug@TlsmPf8ECZC<@W&Iarwc_wJNQQAjFUP+G9orC0LY^Vgn(g;9}~`7 z^nUb}$iwl3%Is2rWaO6!m^*VBch8fd;ldESVfGAlBzX5w3Vy{wpHRAJv;YkNBfxPk zV1&O@)0v(iD|z4{+V*+h)}em%e~*c}nsC%tYnRA7DIUI)f`U%3zRyL#G8s!pz>2Vu zpX;s50S0VfIz<5e0&qdrGQ#qp!6XWU2w?#(lOz5)LybB_4PeBN4h*@E4;f483WNh7 zk3oZq0%Zj7j|*5)4iE7I+*dN2RRe=tXNMkmc4jQ^EU%<;kQ&n=sr*g4{JMAaR1787 zh&n#Up5nBzdsp3%3g#|rS(=0Qis<0Q=R`%i^szM#OTpA2=5$kHcE?W5La96jAvBB_ zYnP=w9Ua#$Bu(!%+psR{HLH7IZH|e+%v+@P@DE!`wC*S@&Wg9QvNJuF&b&LU>?D0o zThlh`*BkchMf|cyRWnp)N|-FXz!QXzO0|bNet>0xwA3Wikn3sw(1J|ZpFfZ2FR z9rnm@sszZPs!gN;Di}ID?^#&YG`Qay;kI@jqCYrLUFo3T!gz@!4zA<;SJ!~0GJJt^ zhdr#oAUdLJD%Pn?i{ZV&nslG;s%-nLO#v$wL7nc$QAqeN0FD@mH%zB%jMET-;7>0n zM3Iytgc0xKH0ib)$h*Qx-JfAG+d1q*!f^%e)m0;8Spj7 zu{%ucsRQ~%`5CrN^yL8y16a9K)(-i&+YhK%FUQq3zCV)4@}4&nu|to?$#rPB7pE!G zUmY&(zJ=sox#HIKyw4lW|5o!}P_ZmTJNu0I+<-Z(CEJV70VZAxwKAluw*)BXMr9Xcj^oYH~+I#8a#M$?=E5vnmGOSH?GCO zGHl8eX5xx;rPe71WT`+7v4=&KI%1E|^Ga``I=LZumO#3wh^Hn%4y)rtE3nmI?!h`CJTF`7%05`m^kkvM(|Ly% zD+Y*hrFRv1b?eG|I71Ny?6gr z?}zNI5{qn|2~%-%AO6*kIHPL)5|)G zJokbI@VpU`a`sk8yBK(>ZrtT$$@v(?DvG!*G|H=@K&totD%}hsXtwH(058=%6u#0O z#KW0aE|Y^}0ea?YmVBN5On}ZtN*r)mMADUDcOe)wdkN{k*GyL)d!{JGm<9p>GbP z`8vYBz|(9nrRj*PhEsmK(#dwxp`a>&aayC=&Xh1*7o|v+X`AVLDF&E)NONyOLydYi zS@=Ff=dJOz@u()PSuLc=QW{R*gQD4~O$V@zmaIL+SePPwrYB9LbeFL5ytK}k23WBU`A`R5vEg0;>Zn`0%|H|2U$8u8?1myt>MTZsv2NA4 z`k-kXZwNH?xd`CDRjM-X0+sC)7%E+fpfM_Fz;UlXFs~62$XJZiE-8SDZl*X&KEd;b zh}guf?nKjdun9{Z)oPfAk*>VrpBYJnbX+SKwyPap6KS%fW(nQ0Y0N^QXKL2Z_Bu3j zPcKkF;qT4@;q^x=%Z$LwXlMu6`-;W6I_TxxZxxdo+nGdUNl6y~ivSOAg%@OK6uh78 zNgZdvc(L5z+}+-l=IJhF_}c`#!Ejtz`GhXOoMroOD|+qDxFI08%IBRfVqD-iZ3jO{ z63>=VK)K^WenA!M3Tn#BOYuz6i&N%V8}KwLlP7&kAPcEeS`z`z(gr5=37UoJSV>;y z?K5i zQ@vbA`>jI3S2Lw`I<7R)qbt%BFv)#rIZC<=VNj4es(Zf&NHw?0%K565W{t;m)M|~# z6(-{d7p=56@Cw)FG8C^AGHq1mL{*ELuMGF{N(+~;qrL!CHI5(yB+H!(W(y5-%hVi` zFt*cjn2s-2M3a8Gr`87E+5pPh7DC5YZC@p*gBDkri21L=3%~^ETw)=Puu~_(TSMKh z9}~g?a-IwWmL>65xbcPZ?wA1O#OSx09OgMo53xKQo&f-h_#8$K)X#sMP*NI-n8Pw6o)jM!$Wq%p#b|dl^?Qty zrRu4WOnO7+b~vwc7Z(hqgRgQQICV_VX_D0pX6#HR`iS1Ffq|cEuHLaUYPHKOGs{e~ z(k!*gEJ0h<6uOyQl+EAPg!9%CYYk$ntS$6NkD7(!g}&|lIhCtBw1GWqsIalM1@{ce zlDp8iVJrX`9D5XOR0ASgGE&4+{$oZ~ur2~?8?8uXy>>BVS7xqP^t6>Ft&z+IQ$f{d zadm9VB-b{%xX*T+u9bVSUMgeiSRF~2?tY}%y9Lk?(LrGx(_TL;%_#>g2P>mO`)&+F zQL^8aGb!+D7gJobye!HoFYvR798}rrVdCL*U*=wbxoi#Pk}CUbke-ea=fc-ZNlrS|5+wrC-D#`&bz_+u%;k<8~xutm5dqZ)3(mv8f>qTy-olnDq%4kq*^We#n z*!OWPf_{`N6H(Z~6=WuDhHIKNHy$37=rV2yCMb-@kWGgE?2?9h~?FSGH(^;N5 z_G-0NAp3ZF>XH`IeMHqc;q?2c5&N)<1>)BDSA#mk2FiO=r7{~8k1xDmK!n9I%v1FY zES#ryONOV3*;OgZRz>D;$bS)Fy(F}X@VTD+2ZX{q-Z{6HVu&^bT^9hLAk0%uMpgn4b`Jolx zHavR@_q2=;{GX)4w zU^s{PKtxwuy%*!?-`Qqb7~xGdnp62B#JTR=@yH7tXSN<`N=|J^?uunDs&9WY0lr4I zrBoQX%#bd{Si_{n`KK8APw7Ud#_4Lw_U=IYO)#hZzJbcKplX-peCDYsA@-sy>yg>E zi$!okWHEbzPtJkRyG4XD;_f<#yr9ljlL-l^tM(=GGV){FfGrgq74CVUAf*EuJCkO# zasb3{JABNd;)wYO{s`F>4)=20)c)uoBFQ&;DEAEt+|sHArjx(~jJ)j`fOC0(GBMeg zCq$ouXK*hacIV61b;`E%cwu>j^4sziReOCSI~}Aa6P`<4*q|?~HxK*)iU#kZs(-ME zZn|ONXTUyxMy9w}^_27XO)I}_N16p0Jew|S+vD6od((`tBYdYKc(+$o9L2z+HN=_U zVlo0GnH{`wlAh~`)z==p(JGFFa8nn)#`+s+Rq}PKR0JMcq&kX;7O6$@u5;WGA+n0N z$?M)cf6`zd9kFD@9etHY-&Wn|%L|8ac$MN=Wrf-n&A3MQ`rNzp$MpXqWX8@8>2ym7 ztD?Ym*XPAmK;qxX_UeGcW^)e+>>>7zkiTi9=vDVVQtYOBd10LeI6ERb~U|L-U0oLHq2$O7K`E@zh zY2;K!W}JALNzt5R0)A;{1Osfj0nklClQ)hqlaK&TI0}!%0A#r@(QTBKV7FiNjLKUH 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 NS0z^KGriG}{sRwXie~@- literal 22582 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 bMCQV|(2CBVZC)h7&(E={=}o^ts7U_>zxAJ= diff --git a/build/openrpc/miner.json.gz b/build/openrpc/miner.json.gz index faab78eb76c65d98e3190189bcda59a2faa51f16..6e7698d4ec3c8cc3fffad1ccf7a892d47876fdaa 100644 GIT binary patch delta 7271 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 delta 7243 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 ZR~ARw^YiWV{|5j7|NqI|fEo*V0RUVoB~$ Date: Mon, 29 Mar 2021 18:39:07 +0300 Subject: [PATCH 24/38] remove storedCounters --- node/modules/client.go | 4 +--- node/modules/storageminer.go | 3 +-- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/node/modules/client.go b/node/modules/client.go index ad3b10bb4..053b466f6 100644 --- a/node/modules/client.go +++ b/node/modules/client.go @@ -122,8 +122,6 @@ func RegisterClientValidator(crv dtypes.ClientRequestValidator, dtm dtypes.Clien // NewClientGraphsyncDataTransfer returns a data transfer manager that just // uses the clients's Client DAG service for transfers func NewClientGraphsyncDataTransfer(lc fx.Lifecycle, h host.Host, gs dtypes.Graphsync, ds dtypes.MetadataDS, r repo.LockedRepo) (dtypes.ClientDataTransfer, error) { - sc := storedcounter.New(ds, datastore.NewKey("/datatransfer/client/counter")) - // go-data-transfer protocol retries: // 1s, 5s, 25s, 2m5s, 5m x 11 ~= 1 hour dtRetryParams := dtnet.RetryParameters(time.Second, 5*time.Minute, 15, 5) @@ -146,7 +144,7 @@ func NewClientGraphsyncDataTransfer(lc fx.Lifecycle, h host.Host, gs dtypes.Grap MaxConsecutiveRestarts: 3, CompleteTimeout: 30 * time.Second, }) - dt, err := dtimpl.NewDataTransfer(dtDs, filepath.Join(r.Path(), "data-transfer"), net, transport, sc, dtRestartConf) + dt, err := dtimpl.NewDataTransfer(dtDs, filepath.Join(r.Path(), "data-transfer"), net, transport, dtRestartConf) if err != nil { return nil, err } diff --git a/node/modules/storageminer.go b/node/modules/storageminer.go index d89474eee..1781d0493 100644 --- a/node/modules/storageminer.go +++ b/node/modules/storageminer.go @@ -330,7 +330,6 @@ func HandleMigrateProviderFunds(lc fx.Lifecycle, ds dtypes.MetadataDS, node api. // NewProviderDAGServiceDataTransfer returns a data transfer manager that just // uses the provider's Staging DAG service for transfers func NewProviderDAGServiceDataTransfer(lc fx.Lifecycle, h host.Host, gs dtypes.StagingGraphsync, ds dtypes.MetadataDS, r repo.LockedRepo) (dtypes.ProviderDataTransfer, error) { - sc := storedcounter.New(ds, datastore.NewKey("/datatransfer/provider/counter")) net := dtnet.NewFromLibp2pHost(h) dtDs := namespace.Wrap(ds, datastore.NewKey("/datatransfer/provider/transfers")) @@ -340,7 +339,7 @@ func NewProviderDAGServiceDataTransfer(lc fx.Lifecycle, h host.Host, gs dtypes.S return nil, err } - dt, err := dtimpl.NewDataTransfer(dtDs, filepath.Join(r.Path(), "data-transfer"), net, transport, sc) + dt, err := dtimpl.NewDataTransfer(dtDs, filepath.Join(r.Path(), "data-transfer"), net, transport) if err != nil { return nil, err } From f7eff6c728522798b77ef036120a09d8f7e8b455 Mon Sep 17 00:00:00 2001 From: Anton Evangelatov Date: Mon, 29 Mar 2021 18:45:54 +0300 Subject: [PATCH 25/38] go mod tidy --- go.sum | 3 --- 1 file changed, 3 deletions(-) diff --git a/go.sum b/go.sum index c71a72929..53fd18f29 100644 --- a/go.sum +++ b/go.sum @@ -272,8 +272,6 @@ github.com/filecoin-project/go-fil-commcid v0.0.0-20201016201715-d41df56b4f6a/go github.com/filecoin-project/go-fil-markets v1.0.5-0.20201113164554-c5eba40d5335/go.mod h1:AJySOJC00JRWEZzRG2KsfUnqEf5ITXxeX09BE9N4f9c= github.com/filecoin-project/go-fil-markets v1.0.8-0.20210325184546-c7ea9187ef63 h1:f5jpJQo+6Eb/slc613BKD9OhG9VUZHAigyCyzyJkIL4= github.com/filecoin-project/go-fil-markets v1.0.8-0.20210325184546-c7ea9187ef63/go.mod h1:p5BIKl6sEoeOCKFa3/nfy66Q95rifEkJyGQgaNjPsno= -github.com/filecoin-project/go-fil-markets v1.1.9 h1:sA0NIEOpy7brZaeXeNgdXg5pvHaBtD5OTRlraOUbI0w= -github.com/filecoin-project/go-fil-markets v1.1.9/go.mod h1:0yQu5gvrjFoAIyzPSSJ+xUdCG83vjInAFbTswIB5/hk= github.com/filecoin-project/go-hamt-ipld v0.1.5 h1:uoXrKbCQZ49OHpsTCkrThPNelC4W3LPEk0OrS/ytIBM= github.com/filecoin-project/go-hamt-ipld v0.1.5/go.mod h1:6Is+ONR5Cd5R6XZoCse1CWaXZc0Hdb/JeX+EQCQzX24= github.com/filecoin-project/go-hamt-ipld/v2 v2.0.0 h1:b3UDemBYN2HNfk3KOXNuxgTTxlWi3xVvbQP0IT38fvM= @@ -593,7 +591,6 @@ github.com/ipfs/go-fs-lock v0.0.6 h1:sn3TWwNVQqSeNjlWy6zQ1uUGAZrV3hPOyEA6y1/N2a0 github.com/ipfs/go-fs-lock v0.0.6/go.mod h1:OTR+Rj9sHiRubJh3dRhD15Juhd/+w6VPOY28L7zESmM= github.com/ipfs/go-graphsync v0.1.0/go.mod h1:jMXfqIEDFukLPZHqDPp8tJMbHO9Rmeb9CEGevngQbmE= github.com/ipfs/go-graphsync v0.4.3/go.mod h1:mPOwDYv128gf8gxPFgXnz4fNrSYPsWyqisJ7ych+XDY= -github.com/ipfs/go-graphsync v0.5.2/go.mod h1:e2ZxnClqBBYAtd901g9vXMJzS47labjAtOzsWtOzKNk= github.com/ipfs/go-graphsync v0.6.0 h1:x6UvDUGA7wjaKNqx5Vbo7FGT8aJ5ryYA0dMQ5jN3dF0= github.com/ipfs/go-graphsync v0.6.0/go.mod h1:e2ZxnClqBBYAtd901g9vXMJzS47labjAtOzsWtOzKNk= github.com/ipfs/go-hamt-ipld v0.1.1/go.mod h1:1EZCr2v0jlCnhpa+aZ0JZYp8Tt2w16+JJOAVz17YcDk= From 82fb81a33d60e1664462b10e7d1c23e1e677613c Mon Sep 17 00:00:00 2001 From: Anton Evangelatov Date: Mon, 29 Mar 2021 19:09:38 +0300 Subject: [PATCH 26/38] short circuit deals with no stages --- cli/deal/inspect.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/cli/deal/inspect.go b/cli/deal/inspect.go index 839d16d0b..bc792b68f 100644 --- a/cli/deal/inspect.go +++ b/cli/deal/inspect.go @@ -55,6 +55,11 @@ func renderDeal(di lapi.DealInfo) { color.Blue("Deal ID: %d\n", int(di.DealID)) color.Blue("Proposal CID: %s\n\n", di.ProposalCid.String()) + if di.DealStages == nil { + color.Yellow("Deal was made with an older version of Lotus and Lotus did not collect detailed information about its stages") + return + } + for _, stg := range di.DealStages.Stages { msg := fmt.Sprintf("%s %s: %s (%s)", color.BlueString("Stage:"), color.BlueString(strings.TrimPrefix(stg.Name, "StorageDeal")), stg.Description, color.GreenString(stg.ExpectedDuration)) if stg.UpdatedTime.Time().IsZero() { From a43f4b33d94f103aea60cb42309f4a23b3989f09 Mon Sep 17 00:00:00 2001 From: Anton Evangelatov Date: Mon, 29 Mar 2021 19:25:35 +0300 Subject: [PATCH 27/38] upgrade go-data-transfer --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index fdfc28c03..2391cf400 100644 --- a/go.mod +++ b/go.mod @@ -163,6 +163,6 @@ replace github.com/golangci/golangci-lint => github.com/golangci/golangci-lint v replace github.com/filecoin-project/filecoin-ffi => ./extern/filecoin-ffi -replace github.com/filecoin-project/go-data-transfer => github.com/nonsense/go-data-transfer v0.0.3 +replace github.com/filecoin-project/go-data-transfer => github.com/nonsense/go-data-transfer v0.0.4 replace github.com/filecoin-project/test-vectors => ./extern/test-vectors diff --git a/go.sum b/go.sum index 53fd18f29..063f950f2 100644 --- a/go.sum +++ b/go.sum @@ -1256,8 +1256,8 @@ github.com/nikkolasg/hexjson v0.0.0-20181101101858-78e39397e00c h1:5bFTChQxSKNwy github.com/nikkolasg/hexjson v0.0.0-20181101101858-78e39397e00c/go.mod h1:7qN3Y0BvzRUf4LofcoJplQL10lsFDb4PYlePTVwrP28= github.com/nkovacs/streamquote v0.0.0-20170412213628-49af9bddb229 h1:E2B8qYyeSgv5MXpmzZXRNp8IAQ4vjxIjhpAf5hv/tAg= github.com/nkovacs/streamquote v0.0.0-20170412213628-49af9bddb229/go.mod h1:0aYXnNPJ8l7uZxf45rWW1a/uME32OF0rhiYGNQ2oF2E= -github.com/nonsense/go-data-transfer v0.0.3 h1:4ZcQA8807qIlgjGk4Fk3mqKjfrQM6DiZ8TYJxvE/mQU= -github.com/nonsense/go-data-transfer v0.0.3/go.mod h1:n8kbDQXWrY1c4UgfMa9KERxNCWbOTDwdNhf2MpN9dpo= +github.com/nonsense/go-data-transfer v0.0.4 h1:Jbpsk4dfBwCTJC25U4Ixif8lws1elhpltX2OtIwI4UI= +github.com/nonsense/go-data-transfer v0.0.4/go.mod h1:n8kbDQXWrY1c4UgfMa9KERxNCWbOTDwdNhf2MpN9dpo= github.com/nxadm/tail v1.4.4 h1:DQuhQpB1tVlglWS2hLQ5OV6B5r8aGxSrPc5Qo6uTN78= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= From e79927a77b19eeb78225bb62ea464d7a13d1420d Mon Sep 17 00:00:00 2001 From: Anton Evangelatov Date: Tue, 30 Mar 2021 15:32:44 +0300 Subject: [PATCH 28/38] use go-fil-markets v1.2.4 --- go.mod | 6 ++---- go.sum | 10 ++++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/go.mod b/go.mod index 2391cf400..441b1e938 100644 --- a/go.mod +++ b/go.mod @@ -32,9 +32,9 @@ require ( github.com/filecoin-project/go-cbor-util v0.0.0-20191219014500-08c40a1e63a2 github.com/filecoin-project/go-commp-utils v0.0.0-20201119054358-b88f7a96a434 github.com/filecoin-project/go-crypto v0.0.0-20191218222705-effae4ea9f03 - github.com/filecoin-project/go-data-transfer v1.4.0 + github.com/filecoin-project/go-data-transfer v1.4.1 github.com/filecoin-project/go-fil-commcid v0.0.0-20201016201715-d41df56b4f6a - github.com/filecoin-project/go-fil-markets v1.0.8-0.20210325184546-c7ea9187ef63 + github.com/filecoin-project/go-fil-markets v1.2.4 github.com/filecoin-project/go-jsonrpc v0.1.4-0.20210217175800-45ea43ac2bec github.com/filecoin-project/go-multistore v0.0.3 github.com/filecoin-project/go-padreader v0.0.0-20200903213702-ed5fae088b20 @@ -163,6 +163,4 @@ replace github.com/golangci/golangci-lint => github.com/golangci/golangci-lint v replace github.com/filecoin-project/filecoin-ffi => ./extern/filecoin-ffi -replace github.com/filecoin-project/go-data-transfer => github.com/nonsense/go-data-transfer v0.0.4 - replace github.com/filecoin-project/test-vectors => ./extern/test-vectors diff --git a/go.sum b/go.sum index 063f950f2..cb8b7ec9a 100644 --- a/go.sum +++ b/go.sum @@ -264,14 +264,17 @@ github.com/filecoin-project/go-commp-utils v0.0.0-20201119054358-b88f7a96a434 h1 github.com/filecoin-project/go-commp-utils v0.0.0-20201119054358-b88f7a96a434/go.mod h1:6s95K91mCyHY51RPWECZieD3SGWTqIFLf1mPOes9l5U= github.com/filecoin-project/go-crypto v0.0.0-20191218222705-effae4ea9f03 h1:2pMXdBnCiXjfCYx/hLqFxccPoqsSveQFxVLvNxy9bus= github.com/filecoin-project/go-crypto v0.0.0-20191218222705-effae4ea9f03/go.mod h1:+viYnvGtUTgJRdy6oaeF4MTFKAfatX071MPDPBL11EQ= +github.com/filecoin-project/go-data-transfer v1.0.1/go.mod h1:UxvfUAY9v3ub0a21BSK9u3pB2aq30Y0KMsG+w9/ysyo= +github.com/filecoin-project/go-data-transfer v1.4.1 h1:4GoMGEdMeDLqbKR74Q5ceZTN35nv+66JZERqQ+SjxWU= +github.com/filecoin-project/go-data-transfer v1.4.1/go.mod h1:n8kbDQXWrY1c4UgfMa9KERxNCWbOTDwdNhf2MpN9dpo= github.com/filecoin-project/go-ds-versioning v0.1.0 h1:y/X6UksYTsK8TLCI7rttCKEvl8btmWxyFMEeeWGUxIQ= github.com/filecoin-project/go-ds-versioning v0.1.0/go.mod h1:mp16rb4i2QPmxBnmanUx8i/XANp+PFCCJWiAb+VW4/s= github.com/filecoin-project/go-fil-commcid v0.0.0-20200716160307-8f644712406f/go.mod h1:Eaox7Hvus1JgPrL5+M3+h7aSPHc0cVqpSxA+TxIEpZQ= github.com/filecoin-project/go-fil-commcid v0.0.0-20201016201715-d41df56b4f6a h1:hyJ+pUm/4U4RdEZBlg6k8Ma4rDiuvqyGpoICXAxwsTg= github.com/filecoin-project/go-fil-commcid v0.0.0-20201016201715-d41df56b4f6a/go.mod h1:Eaox7Hvus1JgPrL5+M3+h7aSPHc0cVqpSxA+TxIEpZQ= github.com/filecoin-project/go-fil-markets v1.0.5-0.20201113164554-c5eba40d5335/go.mod h1:AJySOJC00JRWEZzRG2KsfUnqEf5ITXxeX09BE9N4f9c= -github.com/filecoin-project/go-fil-markets v1.0.8-0.20210325184546-c7ea9187ef63 h1:f5jpJQo+6Eb/slc613BKD9OhG9VUZHAigyCyzyJkIL4= -github.com/filecoin-project/go-fil-markets v1.0.8-0.20210325184546-c7ea9187ef63/go.mod h1:p5BIKl6sEoeOCKFa3/nfy66Q95rifEkJyGQgaNjPsno= +github.com/filecoin-project/go-fil-markets v1.2.4 h1:AcNMy/XGvSdv4GjuVoeqe67Q7OvppkSx1zWEGqVHixg= +github.com/filecoin-project/go-fil-markets v1.2.4/go.mod h1:8WEpiMkwdvtHb5dXmRIWX4vz4XjkVlhxRdHJdouV1b0= github.com/filecoin-project/go-hamt-ipld v0.1.5 h1:uoXrKbCQZ49OHpsTCkrThPNelC4W3LPEk0OrS/ytIBM= github.com/filecoin-project/go-hamt-ipld v0.1.5/go.mod h1:6Is+ONR5Cd5R6XZoCse1CWaXZc0Hdb/JeX+EQCQzX24= github.com/filecoin-project/go-hamt-ipld/v2 v2.0.0 h1:b3UDemBYN2HNfk3KOXNuxgTTxlWi3xVvbQP0IT38fvM= @@ -590,6 +593,7 @@ github.com/ipfs/go-filestore v1.0.0/go.mod h1:/XOCuNtIe2f1YPbiXdYvD0BKLA0JR1MgPi github.com/ipfs/go-fs-lock v0.0.6 h1:sn3TWwNVQqSeNjlWy6zQ1uUGAZrV3hPOyEA6y1/N2a0= github.com/ipfs/go-fs-lock v0.0.6/go.mod h1:OTR+Rj9sHiRubJh3dRhD15Juhd/+w6VPOY28L7zESmM= github.com/ipfs/go-graphsync v0.1.0/go.mod h1:jMXfqIEDFukLPZHqDPp8tJMbHO9Rmeb9CEGevngQbmE= +github.com/ipfs/go-graphsync v0.4.2/go.mod h1:/VmbZTUdUMTbNkgzAiCEucIIAU3BkLE2cZrDCVUhyi0= github.com/ipfs/go-graphsync v0.4.3/go.mod h1:mPOwDYv128gf8gxPFgXnz4fNrSYPsWyqisJ7ych+XDY= github.com/ipfs/go-graphsync v0.6.0 h1:x6UvDUGA7wjaKNqx5Vbo7FGT8aJ5ryYA0dMQ5jN3dF0= github.com/ipfs/go-graphsync v0.6.0/go.mod h1:e2ZxnClqBBYAtd901g9vXMJzS47labjAtOzsWtOzKNk= @@ -1256,8 +1260,6 @@ github.com/nikkolasg/hexjson v0.0.0-20181101101858-78e39397e00c h1:5bFTChQxSKNwy github.com/nikkolasg/hexjson v0.0.0-20181101101858-78e39397e00c/go.mod h1:7qN3Y0BvzRUf4LofcoJplQL10lsFDb4PYlePTVwrP28= github.com/nkovacs/streamquote v0.0.0-20170412213628-49af9bddb229 h1:E2B8qYyeSgv5MXpmzZXRNp8IAQ4vjxIjhpAf5hv/tAg= github.com/nkovacs/streamquote v0.0.0-20170412213628-49af9bddb229/go.mod h1:0aYXnNPJ8l7uZxf45rWW1a/uME32OF0rhiYGNQ2oF2E= -github.com/nonsense/go-data-transfer v0.0.4 h1:Jbpsk4dfBwCTJC25U4Ixif8lws1elhpltX2OtIwI4UI= -github.com/nonsense/go-data-transfer v0.0.4/go.mod h1:n8kbDQXWrY1c4UgfMa9KERxNCWbOTDwdNhf2MpN9dpo= github.com/nxadm/tail v1.4.4 h1:DQuhQpB1tVlglWS2hLQ5OV6B5r8aGxSrPc5Qo6uTN78= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= From 5014b1712e3a1215a5260a6233d40759280e8e75 Mon Sep 17 00:00:00 2001 From: Anton Evangelatov Date: Tue, 30 Mar 2021 16:16:17 +0300 Subject: [PATCH 29/38] rebuild docs with make docsgen --- build/openrpc/full.json.gz | Bin 22595 -> 22717 bytes build/openrpc/miner.json.gz | Bin 7778 -> 7832 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/build/openrpc/full.json.gz b/build/openrpc/full.json.gz index 1e145564473343db9948a23339e79cd6467c4c4a..4a73fb761d9424fd3f3c6783142dd24386fb59e7 100644 GIT binary patch delta 22230 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 delta 22155 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%0DPfX74}>_Axu2hP=Q(GUG^~7af0t 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 CC#}=~ diff --git a/build/openrpc/miner.json.gz b/build/openrpc/miner.json.gz index 7baad0ae31c0e6ec373d51071cca925f593427f9..8d449bed7755e459570920a0fb27d118a6ab9c76 100644 GIT binary patch literal 7832 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 literal 7778 zcmV-o9-ZMIiwFP!00000|Lk3BbK5r7{wo;1A2#X8if-{mGyUM$N$S>aw3glMHt}pB z60)!+0WJwSc0K;@?*QOcBt(#+6h-E?+e9RA01)Rq=Yj*^$)GMGo@*LIqucJa_l=f; z$&?zyCxc;TBV%ZsQ#SX(<>&+)kIsyiagRJ7QzB{{v^#qix;LI%hJ)CQTD~#-@?;R` z@R}d6jZBJ3``BdEJGLwj`M%LIEaaOWcA2E|*I$3#(ywGXCnk91gP+EXdhixqV1m3c z^X4Xd4Uz<2xgB6q!q5Y2pU6L7gI7?#YzKu}0C^tuUW2Evn$vLJvB!7jut~Y4W(|QXh-H2e0{T4ezH?)`n)sgF?_^q zHlF|wIg}w_V{&J-jJanULu1C6>kr?&xfMm)CUxFS1BTdhJ<9v_#^${BW@6LH8wdIf zd2gVL`Tu?K$=}F7+PC!o&b#|Z`^NKgYdLqFP%_20EAyBnqu?|bw^PN+@LEK8Jsh{# zwJgu&lqlx9Cu8KH6Y4ma@$cYK+Zd9$ZMTfvhgZmRFo6s$JU_)goY?5oH-fwm(6%Sg zybHN8c=wrlcZ)BdiN@Ai3tVfIeGv+4?gnW`MrM%%S|Y?5hRI{ zi(|WPlzfpB;iD~2jOAEMNu%Hn**i3LcuBU}G zsb)CYm7ym3CT@58l~^t=roLi!42!Q7LkKM*GIu7(%aHk9JO#YzH{qM#I?32tAaTg7F^ za^p*~!AxHw{=5%37QY6s9O!n_EnxFv6)13&Be61*+H>kA(;24QQbgGAGyg0H>By5Jo z#mo=}&MZV2p5kQHPzrd}SQ@_{re)PmmSw7a^eQ?vqeLqXFb^?vxPA%CX&4PPaa`Pz z7RQOA?;e?~>>vw^&P*_Y-s5{>Qj7D~(3n6U?GF+@>N5PT%17G`$=#j;l05_&dI!zB zxmyjA69iO{EI;>aiK|LjO%qc4q{)K76hC}GsD;2pKBL4!9$+&Bd>5GCFkjqr+GdjNd1t4;dJxUx7cK6W3+|CC+Vt`TLQwISTvRMm2Vu`lC65bepmgwZS86v=h zw#{2i4HNsK2bhRHa()(dzml5tO9=}oC=2ePJx4}DS^^r?QR(-&ZRcR4c$n}{B3!iX z9g$5%$odpP+drYi#}@KFO{X>{=n^pxqkCwJmz5;8m~4JXn;YsywviU?wM4Z8_v3r` zBwNm2Jw?beZ>|D zdrlvFlfR*fVE>zM&GsMru)ohHeg6(Q?tkgS|J?Z_b=?0>oGE&o_6JkkpFi%;=V;Ko z9~jS7V>?Sj>P@8Sdm_j(kL?`$tU7k^+WFe%%MEmK`vQ7*i1DIYnkOK)77er5p`4|U zOo278dwA5PKD0|F9Gut~5mr7^Pu4r3whbBbG@8v&cu%bNE;VO*>on(Zg6y2-@0Kyb z$V8Qv3`I?miKV+#bk8lB@I*m&pIcz;>wE6EVGt~M4Bu9K1T$v2$5 zdz`#11e4*2`tew2d2=-`ZqRt=d3c#?nc#=IS5gZ}*T~Dt1{!|eIetFS^!Vysw=E!C zBQGn+H=MkCoLu1U)fo57qo&@I6~xjs88?sc+PSp}_^m78*GOnAp@#}jR<1UlKw={M z6f$__LE=wym`6uIRm4>CX+Z{AP^KLgK06g@9xg&&Tl~GRqkEP#UA*UART-G#5ocrG zRS@xOCq_`)P8r3gTHkpPYuQg9OsZZQMz?p`|BcemAOC*% z`?o*;eUErj^q*wsepAi-jvi zxI#+mN5qc(yA>cx63AaM{3$r{!4W0fV|+^@6ZY7@D_TcfXkaa?hXq~Ce3;_$IwuhD zk|JpYo4gYpBVOuHKD)pqktEUW^m{Gi0zPD)$zvp z?^N(}jQ;mKHHL%UbIagkfbz>d8S+euUds@9h(qJw#P0k#em678uQT+|pMN%sNFoPH{{9ORc=@7{xV(65$(f99VN%rIos%gZk3 z1;&U3IrrJO7s&VFEy~>%@QKZkH$thZiPORuWOHBB%ZVd&rOFF&)$)tz+??fh^u?r_ zAF9s#OGsPgrP2i&^=vW95^XjbH5-kZjYiEzqh_N~Y4leeEf|CB88InGFSbI;jFOs4 zBcwy^f>t@zkZos8NIVxNx8z}!n35~(RETZy$EXu{0LTc33PSCsqQ%(R^ZKe^#mPC7PDx{xE-T?Ywgdzlj{Z5;Z7g z<+~NSX zad`yzXkX`-t*k$h3i55iRZMlzySLIBA-i7O}i>{sBLUpWq#Yb z`zmv41IQS1T;>BtfhXTLn=G46mdz&1O~RMzS`sO?<5f3Vj#Zm11xWGF>9^nE+cUxh zGA%sli;HtlW)Kr$QMG_Okay`q%R*LUQMQ2lHt)F>uti-=Vi|9VQ(bGye{!^XlG-tf zT(fG%*D@&C#$INTBh4slLu;`MwFbl< z?2ZvDjOr(et!E#0vO8HsSa_=g1t-{w0{9}MDf;yb!nZSK42vW3yBKp*-54ZH3;!cx zCugU*izzx>w@9R54>9LMS5#rtL+zka5jW;EvUZ)+>?8h;`-pP^Bg;2g*vKuT1s-xK zrj9`eOEdz4&Z#MK#{(!TX;@TWA6jg@+M;5~ywK`vT9?SyPb(>2tJ%@T6V-J<5j@6u zMk_&iM5Y{=N7c09JlRkK=r0-2)tsv;rR5wZ0I42iPh^Q~GP|S6<=gp{an+So5-iWL z&rYz#dB56{c$UnHcf92iZ0>j4k>j4XU04*c)|e^f-&PbA`M25xB_h{|Nh2nk5EIpv zTO%7;w@51VY9f*#pvWYi;C5&+6iP^%TE28#A;$&K#hg6=Lq5agwp6l8Zc1^Ym${2@ ziI+MCXRt%M+v#*#M!0YBsHCMBZ?i76$@I5I?x@wIx{B*kFxjys*H0_)c$$RD73Pi! zo-Hui?yKKLnJ?!AyEFnIzcVZy63IiC>FO&bZ1xp!EX4 z>PM$8%W_GvzAl3#PBO3CWiPvwTRDWO8z!yct7o%z^58``@J%gb3_FR9n(4zg%Z984 zIjvLGl^a8wMdlh5qas!;Rl*0vL~>VEttjf3Qi+unVA#|~4i9cLT%+NNG+cwV4c4Zy zR(1De0AQFv8~?qEyPZd9L+HEMW&^_w3^y>`!0R~27R{>eN~s@N*KFDaOF^ZM57e)PAIik3&AJbEsnuAAl!iPhCp~TyS$sg zbE5~!=z*mxvX{t4&_{9y8p@`sl+gw$N}I99vyC93yC- zP{+Y6i#PfxoS;$)frDF6+Ckk6)rPC;#ZB#mf%Nu>u=$qZvH%nK3$KtRf zRFAV06RN0nP@OJMsyB@SY822GDj?K2K8+%J8H(trvvd(Wh1je5J~5$6ibw*|3AX$i zwNT>*HCkvZwNT9Mnp_esP}X*G%(zy1B^fVnyxgX?N(|ZjUF_%O32k1H4HBx|mx4tqUaA ze%NG#s12evaFK$Gu3}L*5Y4eUL)IyVx2r%#L_`G}@|w0+nBxK$&!^|2!>Mv8tI=bz zFtFy1>jNAR1HOC@_&i&48+pKIkfGX6==py4ekHzWrdR2A8aSv%F4?7O*3FiShhhy& z!s187-aoj=WXR$?b~^W9z!z0yWeLUn)7%(#P&+JAEHTUJt3+o>EpUsNFYYfy!CSz) zB+i0^z!y~kqe8w`J`^rB*z7f43vbtRDO2JW>B<*OZ8yKGZak0pK+Hd~;p1vd9+9b& zvy(&%*f}a1^RQrDHiL{$KKf=q?wKCq(-d&>SMm*FCJw>`4)qYQ5VUB4!vK6vn7FAIXWV_%%qPCiqCkDB#H-C$JC=vw5kfu7_cbv$v+ri z$a64(OdvKTd*%#c(gO1QViS_DWP*T236hsH%XY59N^KyTmwPMKr6x&LLsVjy#oq>(r4gnb6DHLKr~w0V zP6-03s|ZtqOszKK0^ve=N)+d2ADAFuLfb|b5DG||aF~Gij>{ea^}uI{nYb-V28aEx zgi*jee0z($D1wZjXFoQE-OH4prICclg;+s&A{w(;zoNcp`ag zem9ewWKsC4!l6LAh5B|0G$FicoPOHVoCJ5E}S4CZ``)zij$xR7HGsk zDp!`o^k>MqcdqmmTA9sXTaycv$Trx?%i@kycPh&H6Bih+AXlP(u`tPr(G#eUWWE&f zmjK!}ccN~iIE7y;&;OoptK}9c=KU|-Ucc4t4Q{q)_v3bRtm=Bh1bdv3vGAc+<=l{t z${+f216>>k2pC$GuM-WbT_wTei4cMdJ%-J>4ZSFIP?H~%8DGV%yo;tuMaFCdbGrp| zX@J7NMAMZ7lGo2yB@T4INZz^$ITqT;xPf%SdIzHU19T1!r32U`&#h$y-Up*2hwh*D}YRH zn_gBXIym9NzfE>2_23dQPXOtl*D|hXm?0Q^=X2<@_nx=7rLJY1(};pRqd^Sruw@*Z z4ByN3QrVG~@&3WZUiuLq@n?i@XUrHH9iwIZfjm6L$jZDpBbZ@m%S*h2XP?Lwc2G~g!3lD*Z@2*LE0-RK@LLX~R4WRW%!$gXYp5sY(+i7Au{0(%4d# zI|I0QGQ`>d|H}ju=smtCCKVCZp)r9z+8-pk8P|>=OV8qq&}j_@Vt~RWm>|Gt9qIwL zuU8K97$ZVfNE#30|6p z`WO&CcSXXLp|yeYKRg+3&|t}wT(y4xHokGUPqEj&b0$Tjz z>y>QIE~-JJsFu;Bz`sL2JGO0VuA)>TBE?6ZNu=k!xO#MvbT=YfevJP{;!Nkb{0Oqy zl}I3c_2ni{Jry|P*$#e(Q=Zd67@VD|P|Z4ai-T zIJivUN@N%6N}BP;f(*WKA)6TmQl#3rv}2sQJP>_O&ASyD^{$=>&1$jepdTBHLN}q8 z7ZQ5;afZ>vsAJSq-pVA=;u5*kW4|D1vy~F4lXUc!;DTSWima{&a0^Xs>^|jfaoG#8 zX5p*qp0dColOAwA3BD~O=M;mI7_Zt99`?1#AYL(pxVaCtPN-cT{|u7sD?===uM_`F zW%X)ZOdy^2(=Jk zly^bCq2QY+>VwPCNsar5n|<)#kCPQ4Y{?V9(n+ z9%-4-@|o4pAfdoG*zX*6C$O`(-SwAhca#u0W{|C-bwqs~ zwX=xLqN1MK3ES9!-pTD{f!J0(BiMg-=J#@yS>B1!BMAsczDnW4X9M&b5!M3rvIt3V*@}@$;iQm*Jj3JWj-KW7v5v z&^%>w{{os?$K!^b&&vdiI-8p&7|cXnnlLqgWkxGzMQ5xZgOd6gi77VHiV!BbNV9_E o#=7)flHW8t5V7kf7hJYoSqzNl=bPvM4*&rF|E2zL$)0`z01%P`0ssI2 From b661f51976db47adb5199dc7b4e3efb7e90d97b6 Mon Sep 17 00:00:00 2001 From: Anton Evangelatov Date: Tue, 30 Mar 2021 17:08:47 +0300 Subject: [PATCH 30/38] better description for `inspect-deal` --- cli/client.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cli/client.go b/cli/client.go index 53baebaf7..dd0c1fbc4 100644 --- a/cli/client.go +++ b/cli/client.go @@ -1172,7 +1172,7 @@ var clientRetrieveCmd = &cli.Command{ var clientInspectDealCmd = &cli.Command{ Name: "inspect-deal", - Usage: "Inspect storage deal", + Usage: "Inspect detailed information about deal's lifecycle and the various stages it goes through", Flags: []cli.Flag{ &cli.IntFlag{ Name: "deal-id", From adaf3a2753dc0cb09011a29e415ee4bda94446a4 Mon Sep 17 00:00:00 2001 From: Anton Evangelatov Date: Tue, 30 Mar 2021 17:12:49 +0300 Subject: [PATCH 31/38] remove `found` boolean and use a pointer --- cli/deal/inspect.go | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/cli/deal/inspect.go b/cli/deal/inspect.go index bc792b68f..7869397b5 100644 --- a/cli/deal/inspect.go +++ b/cli/deal/inspect.go @@ -20,23 +20,20 @@ func InspectDealCmd(ctx context.Context, api lapi.FullNode, proposalCid string, return err } - var di lapi.DealInfo - found := false - for _, cdi := range deals { + var di *lapi.DealInfo + for i, cdi := range deals { if proposalCid != "" && cdi.ProposalCid.String() == proposalCid { - di = cdi - found = true + di = &deals[i] break } if dealId != 0 && int(cdi.DealID) == dealId { - di = cdi - found = true + di = &deals[i] break } } - if !found { + if di == nil { if proposalCid != "" { return fmt.Errorf("cannot find deal with proposal cid: %s", proposalCid) } @@ -51,7 +48,7 @@ func InspectDealCmd(ctx context.Context, api lapi.FullNode, proposalCid string, return nil } -func renderDeal(di lapi.DealInfo) { +func renderDeal(di *lapi.DealInfo) { color.Blue("Deal ID: %d\n", int(di.DealID)) color.Blue("Proposal CID: %s\n\n", di.ProposalCid.String()) From 3895b2ccca396183b0d40380aeb0b6bdd5f9fefa Mon Sep 17 00:00:00 2001 From: yaohcn Date: Wed, 31 Mar 2021 14:30:24 +0800 Subject: [PATCH 32/38] fix reservations --- extern/sector-storage/stores/local.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/extern/sector-storage/stores/local.go b/extern/sector-storage/stores/local.go index a7df5ae21..5837b711c 100644 --- a/extern/sector-storage/stores/local.go +++ b/extern/sector-storage/stores/local.go @@ -392,8 +392,10 @@ func (st *Local) Reserve(ctx context.Context, sid storage.SectorRef, ft storifac } p.reserved += overhead + p.reservations[sid.ID] |= fileType prevDone := done + saveFileType := fileType done = func() { prevDone() @@ -401,6 +403,10 @@ func (st *Local) Reserve(ctx context.Context, sid storage.SectorRef, ft storifac defer st.localLk.Unlock() p.reserved -= overhead + p.reservations[sid.ID] ^= saveFileType + if p.reservations[sid.ID] == storiface.FTNone { + delete(p.reservations, sid.ID) + } } } From 03f4334d4085c22f2e38b16d231fc667c44f5373 Mon Sep 17 00:00:00 2001 From: Anton Evangelatov Date: Wed, 31 Mar 2021 23:15:38 +0300 Subject: [PATCH 33/38] remove commented out code --- build/params_2k.go | 2 -- 1 file changed, 2 deletions(-) diff --git a/build/params_2k.go b/build/params_2k.go index 35443a4b5..308db3bd8 100644 --- a/build/params_2k.go +++ b/build/params_2k.go @@ -37,8 +37,6 @@ func init() { policy.SetSupportedProofTypes(abi.RegisteredSealProof_StackedDrg2KiBV1) policy.SetConsensusMinerMinPower(abi.NewStoragePower(2048)) policy.SetMinVerifiedDealSize(abi.NewStoragePower(256)) - - //policy.SetWPoStChallengeWindow(abi.ChainEpoch(5)) policy.SetPreCommitChallengeDelay(abi.ChainEpoch(10)) BuildType |= Build2k From 1626dffd4cb73df9ee7291e185453bf73cd6f7f9 Mon Sep 17 00:00:00 2001 From: Anton Evangelatov Date: Wed, 31 Mar 2021 23:17:16 +0300 Subject: [PATCH 34/38] remove overwrite for go-data-transfer in testplans --- testplans/lotus-soup/go.mod | 2 -- 1 file changed, 2 deletions(-) diff --git a/testplans/lotus-soup/go.mod b/testplans/lotus-soup/go.mod index 80d0b5f69..918b1f508 100644 --- a/testplans/lotus-soup/go.mod +++ b/testplans/lotus-soup/go.mod @@ -41,5 +41,3 @@ require ( // On docker:go and exec:go, it maps to /extra/filecoin-ffi, as it's picked up // as an "extra source" in the manifest. replace github.com/filecoin-project/filecoin-ffi => ../../extern/filecoin-ffi - -replace github.com/filecoin-project/go-data-transfer => github.com/nonsense/go-data-transfer v0.0.2 From d441c5c0a6e5b5be99ec1f9a771bbfb1c7ce2d9a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=80=E9=A1=B5=E7=B4=A0=E4=B9=A6?= <2931107265@qq.com> Date: Thu, 1 Apr 2021 17:14:57 +0800 Subject: [PATCH 35/38] fix ci build-macos --- .circleci/config.yml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.circleci/config.yml b/.circleci/config.yml index 83fde80ad..29a6db372 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -358,6 +358,15 @@ jobs: command: | curl --location https://github.com/stedolan/jq/releases/download/jq-1.6/jq-osx-amd64 --output /usr/local/bin/jq chmod +x /usr/local/bin/jq + - run: + name: Install hwloc + command: | + mkdir ~/hwloc + curl --location https://download.open-mpi.org/release/hwloc/v2.4/hwloc-2.4.1.tar.gz --output ~/hwloc/hwloc-2.4.1.tar.gz + cd ~/hwloc + tar -xvzpf hwloc-2.4.1.tar.gz + cd hwloc-2.4.1 + ./configure && make && sudo make install - restore_cache: name: restore cargo cache key: v3-go-deps-{{ arch }}-{{ checksum "~/go/src/github.com/filecoin-project/lotus/go.sum" }} From 686c719bb1654150b51fd018909dac56d92eaa93 Mon Sep 17 00:00:00 2001 From: Anton Evangelatov Date: Thu, 1 Apr 2021 15:07:25 +0300 Subject: [PATCH 36/38] move inspectDeal to cli package --- cli/client.go | 71 ++++++++++++++++++++++++++++++++++++++-- cli/deal/inspect.go | 80 --------------------------------------------- 2 files changed, 69 insertions(+), 82 deletions(-) delete mode 100644 cli/deal/inspect.go diff --git a/cli/client.go b/cli/client.go index b44c7f8b6..6f87eadce 100644 --- a/cli/client.go +++ b/cli/client.go @@ -44,7 +44,6 @@ import ( "github.com/filecoin-project/lotus/chain/actors/builtin" "github.com/filecoin-project/lotus/chain/actors/builtin/market" "github.com/filecoin-project/lotus/chain/types" - dealcli "github.com/filecoin-project/lotus/cli/deal" "github.com/filecoin-project/lotus/lib/tablewriter" ) @@ -1190,7 +1189,7 @@ var clientInspectDealCmd = &cli.Command{ defer closer() ctx := ReqContext(cctx) - return dealcli.InspectDealCmd(ctx, api, cctx.String("proposal-cid"), cctx.Int("deal-id")) + return inspectDealCmd(ctx, api, cctx.String("proposal-cid"), cctx.Int("deal-id")) }, } @@ -2270,3 +2269,71 @@ func ellipsis(s string, length int) string { } return s } + +func inspectDealCmd(ctx context.Context, api lapi.FullNode, proposalCid string, dealId int) error { + ctx, cancel := context.WithCancel(ctx) + defer cancel() + + deals, err := api.ClientListDeals(ctx) + if err != nil { + return err + } + + var di *lapi.DealInfo + for i, cdi := range deals { + if proposalCid != "" && cdi.ProposalCid.String() == proposalCid { + di = &deals[i] + break + } + + if dealId != 0 && int(cdi.DealID) == dealId { + di = &deals[i] + break + } + } + + if di == nil { + if proposalCid != "" { + return fmt.Errorf("cannot find deal with proposal cid: %s", proposalCid) + } + if dealId != 0 { + return fmt.Errorf("cannot find deal with deal id: %v", dealId) + } + return errors.New("you must specify proposal cid or deal id in order to inspect a deal") + } + + renderDeal(di) + + return nil +} + +func renderDeal(di *lapi.DealInfo) { + color.Blue("Deal ID: %d\n", int(di.DealID)) + color.Blue("Proposal CID: %s\n\n", di.ProposalCid.String()) + + if di.DealStages == nil { + color.Yellow("Deal was made with an older version of Lotus and Lotus did not collect detailed information about its stages") + return + } + + for _, stg := range di.DealStages.Stages { + msg := fmt.Sprintf("%s %s: %s (%s)", color.BlueString("Stage:"), color.BlueString(strings.TrimPrefix(stg.Name, "StorageDeal")), stg.Description, color.GreenString(stg.ExpectedDuration)) + if stg.UpdatedTime.Time().IsZero() { + msg = color.YellowString(msg) + } + fmt.Println(msg) + + for _, l := range stg.Logs { + fmt.Printf(" %s %s\n", color.YellowString(l.UpdatedTime.Time().UTC().Round(time.Second).Format(time.Stamp)), l.Log) + } + + if stg.Name == "StorageDealStartDataTransfer" { + for _, dtStg := range di.DataTransfer.Stages.Stages { + fmt.Printf(" %s %s %s\n", color.YellowString(dtStg.CreatedTime.Time().UTC().Round(time.Second).Format(time.Stamp)), color.BlueString("Data transfer stage:"), color.BlueString(dtStg.Name)) + for _, l := range dtStg.Logs { + fmt.Printf(" %s %s\n", color.YellowString(l.UpdatedTime.Time().UTC().Round(time.Second).Format(time.Stamp)), l.Log) + } + } + } + } +} diff --git a/cli/deal/inspect.go b/cli/deal/inspect.go deleted file mode 100644 index 7869397b5..000000000 --- a/cli/deal/inspect.go +++ /dev/null @@ -1,80 +0,0 @@ -package deal - -import ( - "context" - "errors" - "fmt" - "strings" - "time" - - "github.com/fatih/color" - lapi "github.com/filecoin-project/lotus/api" -) - -func InspectDealCmd(ctx context.Context, api lapi.FullNode, proposalCid string, dealId int) error { - ctx, cancel := context.WithCancel(ctx) - defer cancel() - - deals, err := api.ClientListDeals(ctx) - if err != nil { - return err - } - - var di *lapi.DealInfo - for i, cdi := range deals { - if proposalCid != "" && cdi.ProposalCid.String() == proposalCid { - di = &deals[i] - break - } - - if dealId != 0 && int(cdi.DealID) == dealId { - di = &deals[i] - break - } - } - - if di == nil { - if proposalCid != "" { - return fmt.Errorf("cannot find deal with proposal cid: %s", proposalCid) - } - if dealId != 0 { - return fmt.Errorf("cannot find deal with deal id: %v", dealId) - } - return errors.New("you must specify proposal cid or deal id in order to inspect a deal") - } - - renderDeal(di) - - return nil -} - -func renderDeal(di *lapi.DealInfo) { - color.Blue("Deal ID: %d\n", int(di.DealID)) - color.Blue("Proposal CID: %s\n\n", di.ProposalCid.String()) - - if di.DealStages == nil { - color.Yellow("Deal was made with an older version of Lotus and Lotus did not collect detailed information about its stages") - return - } - - for _, stg := range di.DealStages.Stages { - msg := fmt.Sprintf("%s %s: %s (%s)", color.BlueString("Stage:"), color.BlueString(strings.TrimPrefix(stg.Name, "StorageDeal")), stg.Description, color.GreenString(stg.ExpectedDuration)) - if stg.UpdatedTime.Time().IsZero() { - msg = color.YellowString(msg) - } - fmt.Println(msg) - - for _, l := range stg.Logs { - fmt.Printf(" %s %s\n", color.YellowString(l.UpdatedTime.Time().UTC().Round(time.Second).Format(time.Stamp)), l.Log) - } - - if stg.Name == "StorageDealStartDataTransfer" { - for _, dtStg := range di.DataTransfer.Stages.Stages { - fmt.Printf(" %s %s %s\n", color.YellowString(dtStg.CreatedTime.Time().UTC().Round(time.Second).Format(time.Stamp)), color.BlueString("Data transfer stage:"), color.BlueString(dtStg.Name)) - for _, l := range dtStg.Logs { - fmt.Printf(" %s %s\n", color.YellowString(l.UpdatedTime.Time().UTC().Round(time.Second).Format(time.Stamp)), l.Log) - } - } - } - } -} From df003d44d257c2088536a9ad5ecffcc2d1ea1a43 Mon Sep 17 00:00:00 2001 From: Anton Evangelatov Date: Thu, 1 Apr 2021 16:57:39 +0300 Subject: [PATCH 37/38] include Stages and DealStages only on ClientDealInfo, not on ClientListDeals --- api/types.go | 1 - cli/client.go | 6 ++++++ node/impl/client/client.go | 7 +++++-- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/api/types.go b/api/types.go index 34560bcf2..6417ce756 100644 --- a/api/types.go +++ b/api/types.go @@ -72,7 +72,6 @@ func NewDataTransferChannel(hostID peer.ID, channelState datatransfer.ChannelSta BaseCID: channelState.BaseCID(), IsSender: channelState.Sender() == hostID, Message: channelState.Message(), - Stages: channelState.Stages(), } stringer, ok := channelState.Voucher().(fmt.Stringer) if ok { diff --git a/cli/client.go b/cli/client.go index 6f87eadce..14f4fb552 100644 --- a/cli/client.go +++ b/cli/client.go @@ -2302,6 +2302,12 @@ func inspectDealCmd(ctx context.Context, api lapi.FullNode, proposalCid string, return errors.New("you must specify proposal cid or deal id in order to inspect a deal") } + // populate DealInfo.DealStages and DataTransfer.Stages + di, err = api.ClientGetDealInfo(ctx, di.ProposalCid) + if err != nil { + return fmt.Errorf("cannot get deal info for proposal cid: %v", di.ProposalCid) + } + renderDeal(di) return nil diff --git a/node/impl/client/client.go b/node/impl/client/client.go index 6a8308ff4..387057e46 100644 --- a/node/impl/client/client.go +++ b/node/impl/client/client.go @@ -267,10 +267,14 @@ func (a *API) newDealInfo(ctx context.Context, v storagemarket.ClientDeal) api.D // be not found if it's no longer active if err == nil { ch := api.NewDataTransferChannel(a.Host.ID(), state) + ch.Stages = state.Stages() transferCh = &ch } } - return a.newDealInfoWithTransfer(transferCh, v) + + di := a.newDealInfoWithTransfer(transferCh, v) + di.DealStages = v.DealStages + return di } func (a *API) newDealInfoWithTransfer(transferCh *api.DataTransferChannel, v storagemarket.ClientDeal) api.DealInfo { @@ -289,7 +293,6 @@ func (a *API) newDealInfoWithTransfer(transferCh *api.DataTransferChannel, v sto Verified: v.Proposal.VerifiedDeal, TransferChannelID: v.TransferChannelID, DataTransfer: transferCh, - DealStages: v.DealStages, } } From f372964a60b9ee119af6f5cef57c0658971d46f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Magiera?= Date: Thu, 1 Apr 2021 16:40:11 +0200 Subject: [PATCH 38/38] fix lint --- extern/sector-storage/stores/http_handler.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/extern/sector-storage/stores/http_handler.go b/extern/sector-storage/stores/http_handler.go index 9e927cb06..3e3468470 100644 --- a/extern/sector-storage/stores/http_handler.go +++ b/extern/sector-storage/stores/http_handler.go @@ -117,7 +117,11 @@ func (handler *FetchHandler) remoteGetSector(w http.ResponseWriter, r *http.Requ return } if !stat.IsDir() { - defer rd.(*os.File).Close() + defer func() { + if err := rd.(*os.File).Close(); err != nil { + log.Errorf("closing source file: %+v", err) + } + }() } w.WriteHeader(200)