refactor: use special type for paych wait sentinel
This commit is contained in:
parent
657b390193
commit
a881e58cd6
@ -396,7 +396,7 @@ type FullNode interface {
|
|||||||
// The Paych methods are for interacting with and managing payment channels
|
// The Paych methods are for interacting with and managing payment channels
|
||||||
|
|
||||||
PaychGet(ctx context.Context, from, to address.Address, amt types.BigInt) (*ChannelInfo, error)
|
PaychGet(ctx context.Context, from, to address.Address, amt types.BigInt) (*ChannelInfo, error)
|
||||||
PaychGetWaitReady(context.Context, cid.Cid) (address.Address, error)
|
PaychGetWaitReady(context.Context, PaychWaitSentinel) (address.Address, error)
|
||||||
PaychList(context.Context) ([]address.Address, error)
|
PaychList(context.Context) ([]address.Address, error)
|
||||||
PaychStatus(context.Context, address.Address) (*PaychStatus, error)
|
PaychStatus(context.Context, address.Address) (*PaychStatus, error)
|
||||||
PaychSettle(context.Context, address.Address) (cid.Cid, error)
|
PaychSettle(context.Context, address.Address) (cid.Cid, error)
|
||||||
@ -506,15 +506,17 @@ type PaychStatus struct {
|
|||||||
Direction PCHDir
|
Direction PCHDir
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type PaychWaitSentinel cid.Cid
|
||||||
|
|
||||||
type ChannelInfo struct {
|
type ChannelInfo struct {
|
||||||
Channel address.Address
|
Channel address.Address
|
||||||
ChannelMessage cid.Cid
|
WaitSentinel PaychWaitSentinel
|
||||||
}
|
}
|
||||||
|
|
||||||
type PaymentInfo struct {
|
type PaymentInfo struct {
|
||||||
Channel address.Address
|
Channel address.Address
|
||||||
ChannelMessage *cid.Cid
|
WaitSentinel PaychWaitSentinel
|
||||||
Vouchers []*paych.SignedVoucher
|
Vouchers []*paych.SignedVoucher
|
||||||
}
|
}
|
||||||
|
|
||||||
type VoucherSpec struct {
|
type VoucherSpec struct {
|
||||||
|
@ -191,7 +191,7 @@ type FullNodeStruct struct {
|
|||||||
MarketEnsureAvailable func(context.Context, address.Address, address.Address, types.BigInt) (cid.Cid, error) `perm:"sign"`
|
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"`
|
PaychGet func(ctx context.Context, from, to address.Address, amt types.BigInt) (*api.ChannelInfo, error) `perm:"sign"`
|
||||||
PaychGetWaitReady func(context.Context, cid.Cid) (address.Address, error) `perm:"sign"`
|
PaychGetWaitReady func(context.Context, api.PaychWaitSentinel) (address.Address, error) `perm:"sign"`
|
||||||
PaychList func(context.Context) ([]address.Address, error) `perm:"read"`
|
PaychList func(context.Context) ([]address.Address, error) `perm:"read"`
|
||||||
PaychStatus func(context.Context, address.Address) (*api.PaychStatus, 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"`
|
PaychSettle func(context.Context, address.Address) (cid.Cid, error) `perm:"sign"`
|
||||||
@ -836,8 +836,8 @@ func (c *FullNodeStruct) PaychGet(ctx context.Context, from, to address.Address,
|
|||||||
return c.Internal.PaychGet(ctx, from, to, amt)
|
return c.Internal.PaychGet(ctx, from, to, amt)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *FullNodeStruct) PaychGetWaitReady(ctx context.Context, mcid cid.Cid) (address.Address, error) {
|
func (c *FullNodeStruct) PaychGetWaitReady(ctx context.Context, sentinel api.PaychWaitSentinel) (address.Address, error) {
|
||||||
return c.Internal.PaychGetWaitReady(ctx, mcid)
|
return c.Internal.PaychGetWaitReady(ctx, sentinel)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *FullNodeStruct) PaychList(ctx context.Context) ([]address.Address, error) {
|
func (c *FullNodeStruct) PaychList(ctx context.Context) ([]address.Address, error) {
|
||||||
|
@ -14,6 +14,59 @@ import (
|
|||||||
|
|
||||||
var _ = xerrors.Errorf
|
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 {
|
func (t *PaymentInfo) MarshalCBOR(w io.Writer) error {
|
||||||
if t == nil {
|
if t == nil {
|
||||||
_, err := w.Write(cbg.CborNull)
|
_, err := w.Write(cbg.CborNull)
|
||||||
@ -41,26 +94,20 @@ func (t *PaymentInfo) MarshalCBOR(w io.Writer) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// t.ChannelMessage (cid.Cid) (struct)
|
// t.WaitSentinel (api.PaychWaitSentinel) (struct)
|
||||||
if len("ChannelMessage") > cbg.MaxLength {
|
if len("WaitSentinel") > cbg.MaxLength {
|
||||||
return xerrors.Errorf("Value in field \"ChannelMessage\" was too long")
|
return xerrors.Errorf("Value in field \"WaitSentinel\" was too long")
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajTextString, uint64(len("ChannelMessage"))); err != nil {
|
if err := cbg.WriteMajorTypeHeaderBuf(scratch, w, cbg.MajTextString, uint64(len("WaitSentinel"))); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if _, err := io.WriteString(w, string("ChannelMessage")); err != nil {
|
if _, err := io.WriteString(w, string("WaitSentinel")); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if t.ChannelMessage == nil {
|
if err := t.WaitSentinel.MarshalCBOR(w); err != nil {
|
||||||
if _, err := w.Write(cbg.CborNull); err != nil {
|
return err
|
||||||
return err
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if err := cbg.WriteCidBuf(scratch, w, *t.ChannelMessage); err != nil {
|
|
||||||
return xerrors.Errorf("failed to write cid field t.ChannelMessage: %w", err)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// t.Vouchers ([]*paych.SignedVoucher) (slice)
|
// t.Vouchers ([]*paych.SignedVoucher) (slice)
|
||||||
@ -133,28 +180,13 @@ func (t *PaymentInfo) UnmarshalCBOR(r io.Reader) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
// t.ChannelMessage (cid.Cid) (struct)
|
// t.WaitSentinel (api.PaychWaitSentinel) (struct)
|
||||||
case "ChannelMessage":
|
case "WaitSentinel":
|
||||||
|
|
||||||
{
|
{
|
||||||
|
|
||||||
pb, err := br.PeekByte()
|
if err := t.WaitSentinel.UnmarshalCBOR(br); err != nil {
|
||||||
if err != nil {
|
return xerrors.Errorf("unmarshaling t.WaitSentinel: %w", err)
|
||||||
return err
|
|
||||||
}
|
|
||||||
if pb == cbg.CborNull[0] {
|
|
||||||
var nbuf [1]byte
|
|
||||||
if _, err := br.Read(nbuf[:]); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
|
|
||||||
c, err := cbg.ReadCid(br)
|
|
||||||
if err != nil {
|
|
||||||
return xerrors.Errorf("failed to read cid field t.ChannelMessage: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
t.ChannelMessage = &c
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -74,7 +74,7 @@ func TestPaymentChannels(t *testing.T, b APIBuilder, blocktime time.Duration) {
|
|||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
channel, err := paymentCreator.PaychGetWaitReady(ctx, channelInfo.ChannelMessage)
|
channel, err := paymentCreator.PaychGetWaitReady(ctx, channelInfo.WaitSentinel)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
|
@ -66,7 +66,7 @@ var paychGetCmd = &cli.Command{
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Wait for the message to be confirmed
|
// Wait for the message to be confirmed
|
||||||
chAddr, err := api.PaychGetWaitReady(ctx, info.ChannelMessage)
|
chAddr, err := api.PaychGetWaitReady(ctx, info.WaitSentinel)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -43,6 +43,7 @@ func main() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
err = gen.WriteMapEncodersToFile("./api/cbor_gen.go", "api",
|
err = gen.WriteMapEncodersToFile("./api/cbor_gen.go", "api",
|
||||||
|
api.PaychWaitSentinel{},
|
||||||
api.PaymentInfo{},
|
api.PaymentInfo{},
|
||||||
api.SealedRef{},
|
api.SealedRef{},
|
||||||
api.SealedRefs{},
|
api.SealedRefs{},
|
||||||
|
@ -35,13 +35,13 @@ func (a *PaychAPI) PaychGet(ctx context.Context, from, to address.Address, amt t
|
|||||||
}
|
}
|
||||||
|
|
||||||
return &api.ChannelInfo{
|
return &api.ChannelInfo{
|
||||||
Channel: ch,
|
Channel: ch,
|
||||||
ChannelMessage: mcid,
|
WaitSentinel: api.PaychWaitSentinel(mcid),
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *PaychAPI) PaychGetWaitReady(ctx context.Context, mcid cid.Cid) (address.Address, error) {
|
func (a *PaychAPI) PaychGetWaitReady(ctx context.Context, sentinel api.PaychWaitSentinel) (address.Address, error) {
|
||||||
return a.PaychMgr.GetPaychWaitReady(ctx, mcid)
|
return a.PaychMgr.GetPaychWaitReady(ctx, cid.Cid(sentinel))
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *PaychAPI) PaychAllocateLane(ctx context.Context, ch address.Address) (uint64, error) {
|
func (a *PaychAPI) PaychAllocateLane(ctx context.Context, ch address.Address) (uint64, error) {
|
||||||
@ -84,15 +84,10 @@ func (a *PaychAPI) PaychNewPayment(ctx context.Context, from, to address.Address
|
|||||||
svs[i] = sv
|
svs[i] = sv
|
||||||
}
|
}
|
||||||
|
|
||||||
var pchCid *cid.Cid
|
|
||||||
if ch.ChannelMessage != cid.Undef {
|
|
||||||
pchCid = &ch.ChannelMessage
|
|
||||||
}
|
|
||||||
|
|
||||||
return &api.PaymentInfo{
|
return &api.PaymentInfo{
|
||||||
Channel: ch.Channel,
|
Channel: ch.Channel,
|
||||||
ChannelMessage: pchCid,
|
WaitSentinel: ch.WaitSentinel,
|
||||||
Vouchers: svs,
|
Vouchers: svs,
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user