Skip to content

Commit a1ea5be

Browse files
committed
feat: add command to print signer deal detail
1 parent e015693 commit a1ea5be

File tree

5 files changed

+218
-8
lines changed

5 files changed

+218
-8
lines changed

api/impl/venus_market.go

+21
Original file line numberDiff line numberDiff line change
@@ -242,6 +242,18 @@ func (m *MarketNodeImpl) MarketListDeals(ctx context.Context, addrs []address.Ad
242242
return m.listDeals(ctx, addrs)
243243
}
244244

245+
func (m *MarketNodeImpl) MarketGetDeal(ctx context.Context, dealPropCid cid.Cid) (*types.MinerDeal, error) {
246+
deal, err := m.Repo.StorageDealRepo().GetDeal(ctx, dealPropCid)
247+
if err != nil {
248+
return nil, err
249+
}
250+
if err := jwtclient.CheckPermissionByMiner(ctx, m.AuthClient, deal.Proposal.Provider); err != nil {
251+
return nil, err
252+
}
253+
254+
return deal, nil
255+
}
256+
245257
// MarketListRetrievalDeals todo add user isolate when is available to get miner from retrieve deal
246258
// 检索订单没法按 `miner address` 过滤
247259
func (m *MarketNodeImpl) MarketListRetrievalDeals(ctx context.Context) ([]types.ProviderDealState, error) {
@@ -262,6 +274,15 @@ func (m *MarketNodeImpl) MarketListRetrievalDeals(ctx context.Context) ([]types.
262274
return out, nil
263275
}
264276

277+
func (m *MarketNodeImpl) MarketGetRetrievalDeal(ctx context.Context, receiver peer.ID, dealID uint64) (*types.ProviderDealState, error) {
278+
deal, err := m.Repo.RetrievalDealRepo().GetDeal(ctx, receiver, retrievalmarket.DealID(dealID))
279+
if err != nil {
280+
return nil, err
281+
}
282+
283+
return deal, nil
284+
}
285+
265286
func (m *MarketNodeImpl) MarketGetDealUpdates(ctx context.Context) (<-chan types.MinerDeal, error) {
266287
results := make(chan types.MinerDeal)
267288
unsub := m.StorageProvider.SubscribeToEvents(func(evt storagemarket.ProviderEvent, deal *types.MinerDeal) {

cli/retrieval-deals.go

+83
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,13 @@ package cli
33
import (
44
"fmt"
55
"os"
6+
"strconv"
67
"text/tabwriter"
8+
"time"
79

810
"github.com/filecoin-project/go-fil-markets/retrievalmarket"
11+
"github.com/filecoin-project/venus/venus-shared/types/market"
12+
"github.com/libp2p/go-libp2p/core/peer"
913
"github.com/urfave/cli/v2"
1014
)
1115

@@ -24,6 +28,7 @@ var retrievalDealsCmds = &cli.Command{
2428
Usage: "Manage retrieval deals and related configuration",
2529
Subcommands: []*cli.Command{
2630
retrievalDealsListCmd,
31+
getRetrievalDealCmd,
2732
},
2833
}
2934

@@ -65,3 +70,81 @@ var retrievalDealsListCmd = &cli.Command{
6570
return w.Flush()
6671
},
6772
}
73+
74+
var getRetrievalDealCmd = &cli.Command{
75+
Name: "get",
76+
Usage: "Print a retrieval deal",
77+
ArgsUsage: "<receiver> <dealID>",
78+
Action: func(cliCtx *cli.Context) error {
79+
api, closer, err := NewMarketNode(cliCtx)
80+
if err != nil {
81+
return err
82+
}
83+
defer closer()
84+
85+
if cliCtx.NArg() != 2 {
86+
return fmt.Errorf("expected 2 arguments")
87+
}
88+
89+
receiver, err := peer.Decode(cliCtx.Args().First())
90+
if err != nil {
91+
return err
92+
}
93+
dealID, err := strconv.ParseUint(cliCtx.Args().Get(1), 10, 64)
94+
if err != nil {
95+
return err
96+
}
97+
98+
ctx := ReqContext(cliCtx)
99+
deal, err := api.MarketGetRetrievalDeal(ctx, receiver, dealID)
100+
if err != nil {
101+
return err
102+
}
103+
104+
return outputRetrievalDeal(deal)
105+
},
106+
}
107+
108+
func outputRetrievalDeal(deal *market.ProviderDealState) error {
109+
var channelID, pieceCID string
110+
var raw []byte
111+
if deal.ChannelID != nil {
112+
channelID = deal.ChannelID.String()
113+
}
114+
if deal.PieceCID != nil {
115+
pieceCID = deal.PieceCID.String()
116+
}
117+
if deal.Selector != nil {
118+
raw = deal.Selector.Raw
119+
}
120+
data := []kv{
121+
{"Receiver", deal.Receiver},
122+
{"DealID", deal.ID},
123+
{"PayloadCID", deal.PayloadCID},
124+
{"Status", retrievalmarket.DealStatuses[deal.Status]},
125+
{"PricePerByte", deal.PricePerByte.String()},
126+
{"BytesSent", deal.TotalSent},
127+
{"Paid", deal.FundsReceived},
128+
{"Interval", deal.CurrentInterval},
129+
{"Message", deal.Message},
130+
{"ChannelID", channelID},
131+
{"StoreID", deal.StoreID},
132+
{"SelStorageProposalCid", deal.SelStorageProposalCid},
133+
{"PieceCID", pieceCID},
134+
{"PaymentIntervalIncrease", deal.PaymentIntervalIncrease},
135+
{"UnsealPrice", deal.UnsealPrice},
136+
{"Selector", raw},
137+
{"CreatedAt", time.Unix(int64(deal.CreatedAt), 0).Format(time.RFC3339)},
138+
{"UpdatedAt", time.Unix(int64(deal.UpdatedAt), 0).Format(time.RFC3339)},
139+
}
140+
141+
maxLen := len("PaymentIntervalIncrease")
142+
for _, d := range data {
143+
for i := len(d.k); i < maxLen; i++ {
144+
d.k += " "
145+
}
146+
fmt.Println(d.k, d.v)
147+
}
148+
149+
return nil
150+
}

cli/storage-deals.go

+105
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ var storageDealsCmds = &cli.Command{
4545
dealsListCmd,
4646
updateStorageDealStateCmd,
4747
dealsPendingPublish,
48+
getDealCmd,
4849
},
4950
}
5051

@@ -362,6 +363,37 @@ var dealsPendingPublish = &cli.Command{
362363
},
363364
}
364365

366+
var getDealCmd = &cli.Command{
367+
Name: "get",
368+
Usage: "Print a storage deal",
369+
ArgsUsage: "<proposal cid>",
370+
Action: func(cliCtx *cli.Context) error {
371+
if cliCtx.NArg() != 1 {
372+
return fmt.Errorf("expected 1 arguments")
373+
}
374+
375+
api, closer, err := NewMarketNode(cliCtx)
376+
if err != nil {
377+
return err
378+
}
379+
defer closer()
380+
381+
proposalCid, err := cid.Decode(cliCtx.Args().First())
382+
if err != nil {
383+
return err
384+
}
385+
386+
ctx := ReqContext(cliCtx)
387+
388+
deal, err := api.MarketGetDeal(ctx, proposalCid)
389+
if err != nil {
390+
return err
391+
}
392+
393+
return outputStorageDeal(deal)
394+
},
395+
}
396+
365397
func outputStorageDeals(out io.Writer, deals []market.MinerDeal, verbose bool) error {
366398
sort.Slice(deals, func(i, j int) bool {
367399
return deals[i].CreationTime.Time().Before(deals[j].CreationTime.Time())
@@ -416,3 +448,76 @@ func outputStorageDeals(out io.Writer, deals []market.MinerDeal, verbose bool) e
416448

417449
return w.Flush()
418450
}
451+
452+
type kv struct {
453+
k string
454+
v interface{}
455+
}
456+
457+
func outputStorageDeal(deal *market.MinerDeal) error {
458+
var err error
459+
var transferChannelID, label, addFundsCid, publishCid string
460+
461+
if deal.TransferChannelID != nil {
462+
transferChannelID = deal.TransferChannelID.String()
463+
}
464+
label, err = deal.Proposal.Label.ToString()
465+
if err != nil {
466+
return err
467+
}
468+
if deal.AddFundsCid != nil {
469+
addFundsCid = deal.AddFundsCid.String()
470+
}
471+
if deal.PublishCid != nil {
472+
publishCid = deal.PublishCid.String()
473+
}
474+
fil := types.FIL(types.BigMul(deal.Proposal.StoragePricePerEpoch, types.NewInt(uint64(deal.Proposal.Duration()))))
475+
476+
data := []kv{
477+
{"Creation", deal.CreationTime.Time().Format(time.RFC3339)},
478+
{"State", storagemarket.DealStates[deal.State]},
479+
{"VerifiedDeal", deal.Proposal.VerifiedDeal},
480+
{"DealID", deal.DealID},
481+
{"PieceCID", deal.Proposal.PieceCID},
482+
{"PieceStatus", deal.PieceStatus},
483+
{"Provider", deal.Proposal.Provider},
484+
{"PieceSize", units.BytesSize(float64(deal.Proposal.PieceSize))},
485+
{"Price", fil},
486+
{"Duration", deal.Proposal.Duration()},
487+
{"Offset", deal.Offset},
488+
{"Client", deal.Proposal.Client},
489+
{"TransferID", transferChannelID},
490+
{"AddFundsCid", addFundsCid},
491+
{"PublishCid", publishCid},
492+
{"Message", deal.Message},
493+
{"TransferType", deal.Ref.TransferType},
494+
{"PayloadCID", deal.Ref.Root},
495+
{"PayloadSize", deal.PayloadSize},
496+
{"StartEpoch", deal.Proposal.StartEpoch},
497+
{"EndEpoch", deal.Proposal.EndEpoch},
498+
{"SlashEpoch", deal.SlashEpoch},
499+
{"StoragePricePerEpoch", deal.Proposal.StoragePricePerEpoch},
500+
{"ProviderCollateral", deal.Proposal.ProviderCollateral},
501+
{"ClientCollateral", deal.Proposal.ClientCollateral},
502+
{"Label", label},
503+
{"MinerPeerID", deal.Miner.Pretty()},
504+
{"ClientPeerID", deal.Client.Pretty()},
505+
{"FundsReserved", deal.FundsReserved},
506+
{"AvailableForRetrieval", deal.AvailableForRetrieval},
507+
{"SectorNumber", deal.SectorNumber},
508+
{"PiecePath", deal.PiecePath},
509+
{"MetadataPath", deal.MetadataPath},
510+
{"FastRetrieval", deal.FastRetrieval},
511+
{"InboundCAR", deal.InboundCAR},
512+
{"UpdatedAt", time.Unix(int64(deal.UpdatedAt), 0).Format(time.RFC3339)},
513+
}
514+
maxLen := len("AvailableForRetrieval")
515+
for _, d := range data {
516+
for i := len(d.k); i < maxLen; i++ {
517+
d.k += " "
518+
}
519+
fmt.Println(d.k, d.v)
520+
}
521+
522+
return nil
523+
}

go.mod

+3-3
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ require (
3030
github.com/filecoin-project/go-statestore v0.2.0
3131
github.com/filecoin-project/specs-actors/v2 v2.3.6
3232
github.com/filecoin-project/specs-actors/v7 v7.0.1
33-
github.com/filecoin-project/venus v1.10.2-0.20230309014040-73746cec80e4
33+
github.com/filecoin-project/venus v1.10.2-0.20230316084941-2180049a244b
3434
github.com/filecoin-project/venus-auth v1.10.2-0.20230308100319-913815325d5e
3535
github.com/filecoin-project/venus-messager v1.10.2-0.20230309071456-7cd8d49c6e9a
3636
github.com/golang/mock v1.6.0
@@ -82,7 +82,7 @@ require (
8282
github.com/whyrusleeping/multiaddr-filter v0.0.0-20160516205228-e903e4adabd7
8383
go.mongodb.org/mongo-driver v1.8.4
8484
go.opencensus.io v0.23.0
85-
go.uber.org/fx v1.15.0
85+
go.uber.org/fx v1.17.1
8686
go.uber.org/multierr v1.8.0
8787
golang.org/x/sync v0.0.0-20220907140024-f12130a52804
8888
golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2
@@ -289,7 +289,7 @@ require (
289289
go.opentelemetry.io/otel v1.10.0 // indirect
290290
go.opentelemetry.io/otel/trace v1.10.0 // indirect
291291
go.uber.org/atomic v1.10.0 // indirect
292-
go.uber.org/dig v1.12.0 // indirect
292+
go.uber.org/dig v1.14.1 // indirect
293293
go.uber.org/zap v1.23.0 // indirect
294294
go4.org v0.0.0-20200411211856-f5505b9728dd // indirect
295295
golang.org/x/arch v0.0.0-20210923205945-b76863e36670 // indirect

go.sum

+6-5
Original file line numberDiff line numberDiff line change
@@ -463,8 +463,8 @@ github.com/filecoin-project/storetheindex v0.4.30-0.20221114113647-683091f8e893
463463
github.com/filecoin-project/storetheindex v0.4.30-0.20221114113647-683091f8e893/go.mod h1:S7590oDimBvXMUtzWsBXoshu9HtYKwtXl47zAK9rcP8=
464464
github.com/filecoin-project/test-vectors/schema v0.0.5/go.mod h1:iQ9QXLpYWL3m7warwvK1JC/pTri8mnfEmKygNDqqY6E=
465465
github.com/filecoin-project/venus v1.2.4/go.mod h1:hJULXHGAnWuq5S5KRtPkwbT8DqgM9II7NwyNU7t59D0=
466-
github.com/filecoin-project/venus v1.10.2-0.20230309014040-73746cec80e4 h1:yLcesIYnlrkLc9dVgIfMtNu11+sF5jeQP1ykTOhjCDg=
467-
github.com/filecoin-project/venus v1.10.2-0.20230309014040-73746cec80e4/go.mod h1:d6XlyUBZd+SHydYimTTkUr3O5rjYOHQTsydI4Nxy6U8=
466+
github.com/filecoin-project/venus v1.10.2-0.20230316084941-2180049a244b h1:T0TIlKIFsOvOKDIADN4P7xBC+coJ7YlbUqift11TCIE=
467+
github.com/filecoin-project/venus v1.10.2-0.20230316084941-2180049a244b/go.mod h1:d6XlyUBZd+SHydYimTTkUr3O5rjYOHQTsydI4Nxy6U8=
468468
github.com/filecoin-project/venus-auth v1.3.2/go.mod h1:m5Jog2GYxztwP7w3m/iJdv/V1/bTcAVU9rm/CbhxRQU=
469469
github.com/filecoin-project/venus-auth v1.10.2-0.20230308100319-913815325d5e h1:Bxpt1AzPeNxmUnFT2Y8rpabr9x0wIC0Q87DeRmjL2co=
470470
github.com/filecoin-project/venus-auth v1.10.2-0.20230308100319-913815325d5e/go.mod h1:aBfIfNxQkdcY8Rk5wrQn9qRtJpH4RTDdc10Ac+ferzs=
@@ -2275,10 +2275,12 @@ go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
22752275
go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
22762276
go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ=
22772277
go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0=
2278-
go.uber.org/dig v1.12.0 h1:l1GQeZpEbss0/M4l/ZotuBndCrkMdjnygzgcuOjAdaY=
22792278
go.uber.org/dig v1.12.0/go.mod h1:X34SnWGr8Fyla9zQNO2GSO2D+TIuqB14OS8JhYocIyw=
2280-
go.uber.org/fx v1.15.0 h1:kcfBpAm98n0ksanyyZLFE/Q3T7yPi13Ge2liu3TxR+A=
2279+
go.uber.org/dig v1.14.1 h1:fyakRgZDdi2F8FgwJJoRGangMSPTIxPSLGzR3Oh0/54=
2280+
go.uber.org/dig v1.14.1/go.mod h1:52EKx/Vjdpz9EzeNcweC4YMsTrDdFn9mS/+Uw5ZnVTI=
22812281
go.uber.org/fx v1.15.0/go.mod h1:jI3RazQUhGv5KkpZIRv+kuP4CcgX3fnc0qX8bLnzbx8=
2282+
go.uber.org/fx v1.17.1 h1:S42dZ6Pok8hQ3jxKwo6ZMYcCgHQA/wAS/gnpRa1Pksg=
2283+
go.uber.org/fx v1.17.1/go.mod h1:yO7KN5rhlARljyo4LR047AjaV6J+KFzd/Z7rnTbEn0A=
22822284
go.uber.org/goleak v1.0.0/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A=
22832285
go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A=
22842286
go.uber.org/goleak v1.1.11-0.20210813005559-691160354723/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ=
@@ -2403,7 +2405,6 @@ golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRu
24032405
golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
24042406
golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
24052407
golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
2406-
golang.org/x/lint v0.0.0-20210508222113-6edffad5e616 h1:VLliZ0d+/avPrXXH+OakdXhpJuEoBZuwh1m2j7U6Iug=
24072408
golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
24082409
golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE=
24092410
golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o=

0 commit comments

Comments
 (0)