From e689c305d23d547289856fd7906c1a9440d93e22 Mon Sep 17 00:00:00 2001 From: Dirk McCormick Date: Wed, 12 Aug 2020 16:29:44 -0400 Subject: [PATCH] fix: revert to using cid for paych wait sentinel --- api/api_full.go | 8 ++--- api/apistruct/struct.go | 4 +-- api/cbor_gen.go | 68 ++++++---------------------------------- gen/main.go | 1 - node/impl/paych/paych.go | 6 ++-- 5 files changed, 17 insertions(+), 70 deletions(-) diff --git a/api/api_full.go b/api/api_full.go index f3c04bfe6..597993fed 100644 --- a/api/api_full.go +++ b/api/api_full.go @@ -400,7 +400,7 @@ type FullNode interface { // The Paych methods are for interacting with and managing payment channels PaychGet(ctx context.Context, from, to address.Address, amt types.BigInt) (*ChannelInfo, error) - PaychGetWaitReady(context.Context, PaychWaitSentinel) (address.Address, error) + PaychGetWaitReady(context.Context, cid.Cid) (address.Address, error) PaychList(context.Context) ([]address.Address, error) PaychStatus(context.Context, address.Address) (*PaychStatus, error) PaychSettle(context.Context, address.Address) (cid.Cid, error) @@ -511,16 +511,14 @@ type PaychStatus struct { Direction PCHDir } -type PaychWaitSentinel cid.Cid - type ChannelInfo struct { Channel address.Address - WaitSentinel PaychWaitSentinel + WaitSentinel cid.Cid } type PaymentInfo struct { Channel address.Address - WaitSentinel PaychWaitSentinel + WaitSentinel cid.Cid Vouchers []*paych.SignedVoucher } diff --git a/api/apistruct/struct.go b/api/apistruct/struct.go index 09a694184..6221d9032 100644 --- a/api/apistruct/struct.go +++ b/api/apistruct/struct.go @@ -195,7 +195,7 @@ type FullNodeStruct struct { MarketEnsureAvailable func(context.Context, address.Address, address.Address, types.BigInt) (cid.Cid, error) `perm:"sign"` PaychGet func(ctx context.Context, from, to address.Address, amt types.BigInt) (*api.ChannelInfo, error) `perm:"sign"` - PaychGetWaitReady func(context.Context, api.PaychWaitSentinel) (address.Address, error) `perm:"sign"` + PaychGetWaitReady func(context.Context, cid.Cid) (address.Address, error) `perm:"sign"` PaychList func(context.Context) ([]address.Address, error) `perm:"read"` PaychStatus func(context.Context, address.Address) (*api.PaychStatus, error) `perm:"read"` PaychSettle func(context.Context, address.Address) (cid.Cid, error) `perm:"sign"` @@ -844,7 +844,7 @@ func (c *FullNodeStruct) PaychGet(ctx context.Context, from, to address.Address, return c.Internal.PaychGet(ctx, from, to, amt) } -func (c *FullNodeStruct) PaychGetWaitReady(ctx context.Context, sentinel api.PaychWaitSentinel) (address.Address, error) { +func (c *FullNodeStruct) PaychGetWaitReady(ctx context.Context, sentinel cid.Cid) (address.Address, error) { return c.Internal.PaychGetWaitReady(ctx, sentinel) } diff --git a/api/cbor_gen.go b/api/cbor_gen.go index 2d83377a4..a90ea8b21 100644 --- a/api/cbor_gen.go +++ b/api/cbor_gen.go @@ -14,59 +14,6 @@ import ( var _ = xerrors.Errorf -func (t *PaychWaitSentinel) MarshalCBOR(w io.Writer) error { - if t == nil { - _, err := w.Write(cbg.CborNull) - return err - } - if _, err := w.Write([]byte{160}); err != nil { - return err - } - - return nil -} - -func (t *PaychWaitSentinel) UnmarshalCBOR(r io.Reader) error { - *t = PaychWaitSentinel{} - - br := cbg.GetPeeker(r) - scratch := make([]byte, 8) - - maj, extra, err := cbg.CborReadHeaderBuf(br, scratch) - if err != nil { - return err - } - if maj != cbg.MajMap { - return fmt.Errorf("cbor input should be of type map") - } - - if extra > cbg.MaxLength { - return fmt.Errorf("PaychWaitSentinel: map struct too large (%d)", extra) - } - - var name string - n := extra - - for i := uint64(0); i < n; i++ { - - { - sval, err := cbg.ReadStringBuf(br, scratch) - if err != nil { - return err - } - - name = string(sval) - } - - switch name { - - default: - return fmt.Errorf("unknown struct field %d: '%s'", i, name) - } - } - - return nil -} func (t *PaymentInfo) MarshalCBOR(w io.Writer) error { if t == nil { _, err := w.Write(cbg.CborNull) @@ -94,7 +41,7 @@ func (t *PaymentInfo) MarshalCBOR(w io.Writer) error { return err } - // t.WaitSentinel (api.PaychWaitSentinel) (struct) + // t.WaitSentinel (cid.Cid) (struct) if len("WaitSentinel") > cbg.MaxLength { return xerrors.Errorf("Value in field \"WaitSentinel\" was too long") } @@ -106,8 +53,8 @@ func (t *PaymentInfo) MarshalCBOR(w io.Writer) error { return err } - if err := t.WaitSentinel.MarshalCBOR(w); err != nil { - return err + if err := cbg.WriteCidBuf(scratch, w, t.WaitSentinel); err != nil { + return xerrors.Errorf("failed to write cid field t.WaitSentinel: %w", err) } // t.Vouchers ([]*paych.SignedVoucher) (slice) @@ -180,15 +127,18 @@ func (t *PaymentInfo) UnmarshalCBOR(r io.Reader) error { } } - // t.WaitSentinel (api.PaychWaitSentinel) (struct) + // t.WaitSentinel (cid.Cid) (struct) case "WaitSentinel": { - if err := t.WaitSentinel.UnmarshalCBOR(br); err != nil { - return xerrors.Errorf("unmarshaling t.WaitSentinel: %w", err) + c, err := cbg.ReadCid(br) + if err != nil { + return xerrors.Errorf("failed to read cid field t.WaitSentinel: %w", err) } + t.WaitSentinel = c + } // t.Vouchers ([]*paych.SignedVoucher) (slice) case "Vouchers": diff --git a/gen/main.go b/gen/main.go index a94f4daa1..e062f6a2e 100644 --- a/gen/main.go +++ b/gen/main.go @@ -43,7 +43,6 @@ func main() { } err = gen.WriteMapEncodersToFile("./api/cbor_gen.go", "api", - api.PaychWaitSentinel{}, api.PaymentInfo{}, api.SealedRef{}, api.SealedRefs{}, diff --git a/node/impl/paych/paych.go b/node/impl/paych/paych.go index 0f72e7c9e..d6e4605d4 100644 --- a/node/impl/paych/paych.go +++ b/node/impl/paych/paych.go @@ -36,12 +36,12 @@ func (a *PaychAPI) PaychGet(ctx context.Context, from, to address.Address, amt t return &api.ChannelInfo{ Channel: ch, - WaitSentinel: api.PaychWaitSentinel(mcid), + WaitSentinel: mcid, }, nil } -func (a *PaychAPI) PaychGetWaitReady(ctx context.Context, sentinel api.PaychWaitSentinel) (address.Address, error) { - return a.PaychMgr.GetPaychWaitReady(ctx, cid.Cid(sentinel)) +func (a *PaychAPI) PaychGetWaitReady(ctx context.Context, sentinel cid.Cid) (address.Address, error) { + return a.PaychMgr.GetPaychWaitReady(ctx, sentinel) } func (a *PaychAPI) PaychAllocateLane(ctx context.Context, ch address.Address) (uint64, error) {