cbor-gen fixes

This commit is contained in:
Łukasz Magiera 2020-02-13 01:10:07 +01:00
parent 4684446315
commit 91b2d2c2fe
8 changed files with 257 additions and 618 deletions

View File

@ -8,7 +8,6 @@ import (
"math" "math"
"github.com/filecoin-project/specs-actors/actors/abi" "github.com/filecoin-project/specs-actors/actors/abi"
"github.com/filecoin-project/specs-actors/actors/builtin/paych"
"github.com/filecoin-project/specs-actors/actors/crypto" "github.com/filecoin-project/specs-actors/actors/crypto"
"github.com/ipfs/go-cid" "github.com/ipfs/go-cid"
cbg "github.com/whyrusleeping/cbor-gen" cbg "github.com/whyrusleeping/cbor-gen"
@ -869,503 +868,6 @@ func (t *MsgMeta) UnmarshalCBOR(r io.Reader) error {
return nil return nil
} }
func (t *SignedVoucher) MarshalCBOR(w io.Writer) error {
if t == nil {
_, err := w.Write(cbg.CborNull)
return err
}
if _, err := w.Write([]byte{137}); err != nil {
return err
}
// t.TimeLock (abi.ChainEpoch) (int64)
if t.TimeLock >= 0 {
if _, err := w.Write(cbg.CborEncodeMajorType(cbg.MajUnsignedInt, uint64(t.TimeLock))); err != nil {
return err
}
} else {
if _, err := w.Write(cbg.CborEncodeMajorType(cbg.MajNegativeInt, uint64(-t.TimeLock)-1)); err != nil {
return err
}
}
// t.SecretPreimage ([]uint8) (slice)
if len(t.SecretPreimage) > cbg.ByteArrayMaxLen {
return xerrors.Errorf("Byte array in field t.SecretPreimage was too long")
}
if _, err := w.Write(cbg.CborEncodeMajorType(cbg.MajByteString, uint64(len(t.SecretPreimage)))); err != nil {
return err
}
if _, err := w.Write(t.SecretPreimage); err != nil {
return err
}
// t.Extra (paych.ModVerifyParams) (struct)
if err := t.Extra.MarshalCBOR(w); err != nil {
return err
}
// t.Lane (int64) (int64)
if t.Lane >= 0 {
if _, err := w.Write(cbg.CborEncodeMajorType(cbg.MajUnsignedInt, uint64(t.Lane))); err != nil {
return err
}
} else {
if _, err := w.Write(cbg.CborEncodeMajorType(cbg.MajNegativeInt, uint64(-t.Lane)-1)); err != nil {
return err
}
}
// t.Nonce (int64) (int64)
if t.Nonce >= 0 {
if _, err := w.Write(cbg.CborEncodeMajorType(cbg.MajUnsignedInt, uint64(t.Nonce))); err != nil {
return err
}
} else {
if _, err := w.Write(cbg.CborEncodeMajorType(cbg.MajNegativeInt, uint64(-t.Nonce)-1)); err != nil {
return err
}
}
// t.Amount (big.Int) (struct)
if err := t.Amount.MarshalCBOR(w); err != nil {
return err
}
// t.MinSettleHeight (abi.ChainEpoch) (int64)
if t.MinSettleHeight >= 0 {
if _, err := w.Write(cbg.CborEncodeMajorType(cbg.MajUnsignedInt, uint64(t.MinSettleHeight))); err != nil {
return err
}
} else {
if _, err := w.Write(cbg.CborEncodeMajorType(cbg.MajNegativeInt, uint64(-t.MinSettleHeight)-1)); err != nil {
return err
}
}
// t.Merges ([]paych.Merge) (slice)
if len(t.Merges) > cbg.MaxLength {
return xerrors.Errorf("Slice value in field t.Merges was too long")
}
if _, err := w.Write(cbg.CborEncodeMajorType(cbg.MajArray, uint64(len(t.Merges)))); err != nil {
return err
}
for _, v := range t.Merges {
if err := v.MarshalCBOR(w); err != nil {
return err
}
}
// t.Signature (crypto.Signature) (struct)
if err := t.Signature.MarshalCBOR(w); err != nil {
return err
}
return nil
}
func (t *SignedVoucher) UnmarshalCBOR(r io.Reader) error {
br := cbg.GetPeeker(r)
maj, extra, err := cbg.CborReadHeader(br)
if err != nil {
return err
}
if maj != cbg.MajArray {
return fmt.Errorf("cbor input should be of type array")
}
if extra != 9 {
return fmt.Errorf("cbor input had wrong number of fields")
}
// t.TimeLock (abi.ChainEpoch) (int64)
{
maj, extra, err := cbg.CborReadHeader(br)
var extraI int64
if err != nil {
return err
}
switch maj {
case cbg.MajUnsignedInt:
extraI = int64(extra)
if extraI < 0 {
return fmt.Errorf("int64 positive overflow")
}
case cbg.MajNegativeInt:
extraI = int64(extra)
if extraI < 0 {
return fmt.Errorf("int64 negative oveflow")
}
extraI = -1 - extraI
default:
return fmt.Errorf("wrong type for int64 field: %d", maj)
}
t.TimeLock = abi.ChainEpoch(extraI)
}
// t.SecretPreimage ([]uint8) (slice)
maj, extra, err = cbg.CborReadHeader(br)
if err != nil {
return err
}
if extra > cbg.ByteArrayMaxLen {
return fmt.Errorf("t.SecretPreimage: byte array too large (%d)", extra)
}
if maj != cbg.MajByteString {
return fmt.Errorf("expected byte array")
}
t.SecretPreimage = make([]byte, extra)
if _, err := io.ReadFull(br, t.SecretPreimage); err != nil {
return err
}
// t.Extra (paych.ModVerifyParams) (struct)
{
pb, err := br.PeekByte()
if err != nil {
return err
}
if pb == cbg.CborNull[0] {
var nbuf [1]byte
if _, err := br.Read(nbuf[:]); err != nil {
return err
}
} else {
t.Extra = new(paych.ModVerifyParams)
if err := t.Extra.UnmarshalCBOR(br); err != nil {
return err
}
}
}
// t.Lane (int64) (int64)
{
maj, extra, err := cbg.CborReadHeader(br)
var extraI int64
if err != nil {
return err
}
switch maj {
case cbg.MajUnsignedInt:
extraI = int64(extra)
if extraI < 0 {
return fmt.Errorf("int64 positive overflow")
}
case cbg.MajNegativeInt:
extraI = int64(extra)
if extraI < 0 {
return fmt.Errorf("int64 negative oveflow")
}
extraI = -1 - extraI
default:
return fmt.Errorf("wrong type for int64 field: %d", maj)
}
t.Lane = int64(extraI)
}
// t.Nonce (int64) (int64)
{
maj, extra, err := cbg.CborReadHeader(br)
var extraI int64
if err != nil {
return err
}
switch maj {
case cbg.MajUnsignedInt:
extraI = int64(extra)
if extraI < 0 {
return fmt.Errorf("int64 positive overflow")
}
case cbg.MajNegativeInt:
extraI = int64(extra)
if extraI < 0 {
return fmt.Errorf("int64 negative oveflow")
}
extraI = -1 - extraI
default:
return fmt.Errorf("wrong type for int64 field: %d", maj)
}
t.Nonce = int64(extraI)
}
// t.Amount (big.Int) (struct)
{
if err := t.Amount.UnmarshalCBOR(br); err != nil {
return err
}
}
// t.MinSettleHeight (abi.ChainEpoch) (int64)
{
maj, extra, err := cbg.CborReadHeader(br)
var extraI int64
if err != nil {
return err
}
switch maj {
case cbg.MajUnsignedInt:
extraI = int64(extra)
if extraI < 0 {
return fmt.Errorf("int64 positive overflow")
}
case cbg.MajNegativeInt:
extraI = int64(extra)
if extraI < 0 {
return fmt.Errorf("int64 negative oveflow")
}
extraI = -1 - extraI
default:
return fmt.Errorf("wrong type for int64 field: %d", maj)
}
t.MinSettleHeight = abi.ChainEpoch(extraI)
}
// t.Merges ([]paych.Merge) (slice)
maj, extra, err = cbg.CborReadHeader(br)
if err != nil {
return err
}
if extra > cbg.MaxLength {
return fmt.Errorf("t.Merges: array too large (%d)", extra)
}
if maj != cbg.MajArray {
return fmt.Errorf("expected cbor array")
}
if extra > 0 {
t.Merges = make([]paych.Merge, extra)
}
for i := 0; i < int(extra); i++ {
var v paych.Merge
if err := v.UnmarshalCBOR(br); err != nil {
return err
}
t.Merges[i] = v
}
// t.Signature (crypto.Signature) (struct)
{
pb, err := br.PeekByte()
if err != nil {
return err
}
if pb == cbg.CborNull[0] {
var nbuf [1]byte
if _, err := br.Read(nbuf[:]); err != nil {
return err
}
} else {
t.Signature = new(crypto.Signature)
if err := t.Signature.UnmarshalCBOR(br); err != nil {
return err
}
}
}
return nil
}
func (t *ModVerifyParams) MarshalCBOR(w io.Writer) error {
if t == nil {
_, err := w.Write(cbg.CborNull)
return err
}
if _, err := w.Write([]byte{131}); err != nil {
return err
}
// t.Actor (address.Address) (struct)
if err := t.Actor.MarshalCBOR(w); err != nil {
return err
}
// t.Method (abi.MethodNum) (uint64)
if _, err := w.Write(cbg.CborEncodeMajorType(cbg.MajUnsignedInt, uint64(t.Method))); err != nil {
return err
}
// t.Data ([]uint8) (slice)
if len(t.Data) > cbg.ByteArrayMaxLen {
return xerrors.Errorf("Byte array in field t.Data was too long")
}
if _, err := w.Write(cbg.CborEncodeMajorType(cbg.MajByteString, uint64(len(t.Data)))); err != nil {
return err
}
if _, err := w.Write(t.Data); err != nil {
return err
}
return nil
}
func (t *ModVerifyParams) UnmarshalCBOR(r io.Reader) error {
br := cbg.GetPeeker(r)
maj, extra, err := cbg.CborReadHeader(br)
if err != nil {
return err
}
if maj != cbg.MajArray {
return fmt.Errorf("cbor input should be of type array")
}
if extra != 3 {
return fmt.Errorf("cbor input had wrong number of fields")
}
// t.Actor (address.Address) (struct)
{
if err := t.Actor.UnmarshalCBOR(br); err != nil {
return err
}
}
// t.Method (abi.MethodNum) (uint64)
maj, extra, err = cbg.CborReadHeader(br)
if err != nil {
return err
}
if maj != cbg.MajUnsignedInt {
return fmt.Errorf("wrong type for uint64 field")
}
t.Method = abi.MethodNum(extra)
// t.Data ([]uint8) (slice)
maj, extra, err = cbg.CborReadHeader(br)
if err != nil {
return err
}
if extra > cbg.ByteArrayMaxLen {
return fmt.Errorf("t.Data: byte array too large (%d)", extra)
}
if maj != cbg.MajByteString {
return fmt.Errorf("expected byte array")
}
t.Data = make([]byte, extra)
if _, err := io.ReadFull(br, t.Data); err != nil {
return err
}
return nil
}
func (t *Merge) MarshalCBOR(w io.Writer) error {
if t == nil {
_, err := w.Write(cbg.CborNull)
return err
}
if _, err := w.Write([]byte{130}); err != nil {
return err
}
// t.Lane (int64) (int64)
if t.Lane >= 0 {
if _, err := w.Write(cbg.CborEncodeMajorType(cbg.MajUnsignedInt, uint64(t.Lane))); err != nil {
return err
}
} else {
if _, err := w.Write(cbg.CborEncodeMajorType(cbg.MajNegativeInt, uint64(-t.Lane)-1)); err != nil {
return err
}
}
// t.Nonce (int64) (int64)
if t.Nonce >= 0 {
if _, err := w.Write(cbg.CborEncodeMajorType(cbg.MajUnsignedInt, uint64(t.Nonce))); err != nil {
return err
}
} else {
if _, err := w.Write(cbg.CborEncodeMajorType(cbg.MajNegativeInt, uint64(-t.Nonce)-1)); err != nil {
return err
}
}
return nil
}
func (t *Merge) UnmarshalCBOR(r io.Reader) error {
br := cbg.GetPeeker(r)
maj, extra, err := cbg.CborReadHeader(br)
if err != nil {
return err
}
if maj != cbg.MajArray {
return fmt.Errorf("cbor input should be of type array")
}
if extra != 2 {
return fmt.Errorf("cbor input had wrong number of fields")
}
// t.Lane (int64) (int64)
{
maj, extra, err := cbg.CborReadHeader(br)
var extraI int64
if err != nil {
return err
}
switch maj {
case cbg.MajUnsignedInt:
extraI = int64(extra)
if extraI < 0 {
return fmt.Errorf("int64 positive overflow")
}
case cbg.MajNegativeInt:
extraI = int64(extra)
if extraI < 0 {
return fmt.Errorf("int64 negative oveflow")
}
extraI = -1 - extraI
default:
return fmt.Errorf("wrong type for int64 field: %d", maj)
}
t.Lane = int64(extraI)
}
// t.Nonce (int64) (int64)
{
maj, extra, err := cbg.CborReadHeader(br)
var extraI int64
if err != nil {
return err
}
switch maj {
case cbg.MajUnsignedInt:
extraI = int64(extra)
if extraI < 0 {
return fmt.Errorf("int64 positive overflow")
}
case cbg.MajNegativeInt:
extraI = int64(extra)
if extraI < 0 {
return fmt.Errorf("int64 negative oveflow")
}
extraI = -1 - extraI
default:
return fmt.Errorf("wrong type for int64 field: %d", maj)
}
t.Nonce = int64(extraI)
}
return nil
}
func (t *Actor) MarshalCBOR(w io.Writer) error { func (t *Actor) MarshalCBOR(w io.Writer) error {
if t == nil { if t == nil {
_, err := w.Write(cbg.CborNull) _, err := w.Write(cbg.CborNull)

View File

@ -23,9 +23,6 @@ func main() {
types.Message{}, types.Message{},
types.SignedMessage{}, types.SignedMessage{},
types.MsgMeta{}, types.MsgMeta{},
types.SignedVoucher{},
types.ModVerifyParams{},
types.Merge{},
types.Actor{}, types.Actor{},
types.MessageReceipt{}, types.MessageReceipt{},
types.BlockMsg{}, types.BlockMsg{},
@ -38,7 +35,7 @@ func main() {
os.Exit(1) os.Exit(1)
} }
err = gen.WriteTupleEncodersToFile("./paych/cbor_gen.go", "paych", err = gen.WriteMapEncodersToFile("./paych/cbor_gen.go", "paych",
paych.VoucherInfo{}, paych.VoucherInfo{},
paych.ChannelInfo{}, paych.ChannelInfo{},
) )

2
go.mod
View File

@ -23,7 +23,7 @@ require (
github.com/filecoin-project/go-paramfetch v0.0.1 github.com/filecoin-project/go-paramfetch v0.0.1
github.com/filecoin-project/go-sectorbuilder v0.0.2-0.20200210220012-eb75ec747d6b github.com/filecoin-project/go-sectorbuilder v0.0.2-0.20200210220012-eb75ec747d6b
github.com/filecoin-project/go-statestore v0.1.0 github.com/filecoin-project/go-statestore v0.1.0
github.com/filecoin-project/specs-actors v0.0.0-20200211202147-e5d0a86dd8fb github.com/filecoin-project/specs-actors v0.0.0-20200212234534-e2abd13ec4b1
github.com/gbrlsnchs/jwt/v3 v3.0.0-beta.1 github.com/gbrlsnchs/jwt/v3 v3.0.0-beta.1
github.com/go-ole/go-ole v1.2.4 // indirect github.com/go-ole/go-ole v1.2.4 // indirect
github.com/gorilla/mux v1.7.3 github.com/gorilla/mux v1.7.3

2
go.sum
View File

@ -126,6 +126,8 @@ github.com/filecoin-project/specs-actors v0.0.0-20200210130641-2d1fbd8672cf h1:f
github.com/filecoin-project/specs-actors v0.0.0-20200210130641-2d1fbd8672cf/go.mod h1:xtDZUB6pe4Pksa/bAJbJ693OilaC5Wbot9jMhLm3cZA= github.com/filecoin-project/specs-actors v0.0.0-20200210130641-2d1fbd8672cf/go.mod h1:xtDZUB6pe4Pksa/bAJbJ693OilaC5Wbot9jMhLm3cZA=
github.com/filecoin-project/specs-actors v0.0.0-20200211202147-e5d0a86dd8fb h1:6kQpqlJmRuMLCaK7XkCTyyAuFWaaBwowG6UCYc2M2bo= github.com/filecoin-project/specs-actors v0.0.0-20200211202147-e5d0a86dd8fb h1:6kQpqlJmRuMLCaK7XkCTyyAuFWaaBwowG6UCYc2M2bo=
github.com/filecoin-project/specs-actors v0.0.0-20200211202147-e5d0a86dd8fb/go.mod h1:xtDZUB6pe4Pksa/bAJbJ693OilaC5Wbot9jMhLm3cZA= github.com/filecoin-project/specs-actors v0.0.0-20200211202147-e5d0a86dd8fb/go.mod h1:xtDZUB6pe4Pksa/bAJbJ693OilaC5Wbot9jMhLm3cZA=
github.com/filecoin-project/specs-actors v0.0.0-20200212234534-e2abd13ec4b1 h1:jU0PeLjpsrvDBhVyzVgupcwicSioVvXWreN0NMhuMN0=
github.com/filecoin-project/specs-actors v0.0.0-20200212234534-e2abd13ec4b1/go.mod h1:xtDZUB6pe4Pksa/bAJbJ693OilaC5Wbot9jMhLm3cZA=
github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/gbrlsnchs/jwt/v3 v3.0.0-beta.1 h1:EzDjxMg43q1tA2c0MV3tNbaontnHLplHyFF6M5KiVP0= github.com/gbrlsnchs/jwt/v3 v3.0.0-beta.1 h1:EzDjxMg43q1tA2c0MV3tNbaontnHLplHyFF6M5KiVP0=

View File

@ -17,16 +17,38 @@ func (t *VoucherInfo) MarshalCBOR(w io.Writer) error {
_, err := w.Write(cbg.CborNull) _, err := w.Write(cbg.CborNull)
return err return err
} }
if _, err := w.Write([]byte{130}); err != nil { if _, err := w.Write([]byte{162}); err != nil {
return err return err
} }
// t.Voucher (paych.SignedVoucher) (struct) // t.Voucher (paych.SignedVoucher) (struct)
if len("Voucher") > cbg.MaxLength {
return xerrors.Errorf("Value in field \"Voucher\" was too long")
}
if _, err := w.Write(cbg.CborEncodeMajorType(cbg.MajTextString, uint64(len("Voucher")))); err != nil {
return err
}
if _, err := w.Write([]byte("Voucher")); err != nil {
return err
}
if err := t.Voucher.MarshalCBOR(w); err != nil { if err := t.Voucher.MarshalCBOR(w); err != nil {
return err return err
} }
// t.Proof ([]uint8) (slice) // t.Proof ([]uint8) (slice)
if len("Proof") > cbg.MaxLength {
return xerrors.Errorf("Value in field \"Proof\" was too long")
}
if _, err := w.Write(cbg.CborEncodeMajorType(cbg.MajTextString, uint64(len("Proof")))); err != nil {
return err
}
if _, err := w.Write([]byte("Proof")); err != nil {
return err
}
if len(t.Proof) > cbg.ByteArrayMaxLen { if len(t.Proof) > cbg.ByteArrayMaxLen {
return xerrors.Errorf("Byte array in field t.Proof was too long") return xerrors.Errorf("Byte array in field t.Proof was too long")
} }
@ -47,15 +69,31 @@ func (t *VoucherInfo) UnmarshalCBOR(r io.Reader) error {
if err != nil { if err != nil {
return err return err
} }
if maj != cbg.MajArray { if maj != cbg.MajMap {
return fmt.Errorf("cbor input should be of type array") return fmt.Errorf("cbor input should be of type map")
} }
if extra != 2 { if extra > cbg.MaxLength {
return fmt.Errorf("cbor input had wrong number of fields") return fmt.Errorf("VoucherInfo: map struct too large (%d)", extra)
} }
var name string
n := extra
for i := uint64(0); i < n; i++ {
{
sval, err := cbg.ReadString(br)
if err != nil {
return err
}
name = string(sval)
}
switch name {
// t.Voucher (paych.SignedVoucher) (struct) // t.Voucher (paych.SignedVoucher) (struct)
case "Voucher":
{ {
@ -77,6 +115,7 @@ func (t *VoucherInfo) UnmarshalCBOR(r io.Reader) error {
} }
// t.Proof ([]uint8) (slice) // t.Proof ([]uint8) (slice)
case "Proof":
maj, extra, err = cbg.CborReadHeader(br) maj, extra, err = cbg.CborReadHeader(br)
if err != nil { if err != nil {
@ -93,39 +132,99 @@ func (t *VoucherInfo) UnmarshalCBOR(r io.Reader) error {
if _, err := io.ReadFull(br, t.Proof); err != nil { if _, err := io.ReadFull(br, t.Proof); err != nil {
return err return err
} }
return nil
default:
return fmt.Errorf("unknown struct field %d: '%s'", i, name)
}
} }
return nil
}
func (t *ChannelInfo) MarshalCBOR(w io.Writer) error { func (t *ChannelInfo) MarshalCBOR(w io.Writer) error {
if t == nil { if t == nil {
_, err := w.Write(cbg.CborNull) _, err := w.Write(cbg.CborNull)
return err return err
} }
if _, err := w.Write([]byte{134}); err != nil { if _, err := w.Write([]byte{166}); err != nil {
return err return err
} }
// t.Channel (address.Address) (struct) // t.Channel (address.Address) (struct)
if len("Channel") > cbg.MaxLength {
return xerrors.Errorf("Value in field \"Channel\" was too long")
}
if _, err := w.Write(cbg.CborEncodeMajorType(cbg.MajTextString, uint64(len("Channel")))); err != nil {
return err
}
if _, err := w.Write([]byte("Channel")); err != nil {
return err
}
if err := t.Channel.MarshalCBOR(w); err != nil { if err := t.Channel.MarshalCBOR(w); err != nil {
return err return err
} }
// t.Control (address.Address) (struct) // t.Control (address.Address) (struct)
if len("Control") > cbg.MaxLength {
return xerrors.Errorf("Value in field \"Control\" was too long")
}
if _, err := w.Write(cbg.CborEncodeMajorType(cbg.MajTextString, uint64(len("Control")))); err != nil {
return err
}
if _, err := w.Write([]byte("Control")); err != nil {
return err
}
if err := t.Control.MarshalCBOR(w); err != nil { if err := t.Control.MarshalCBOR(w); err != nil {
return err return err
} }
// t.Target (address.Address) (struct) // t.Target (address.Address) (struct)
if len("Target") > cbg.MaxLength {
return xerrors.Errorf("Value in field \"Target\" was too long")
}
if _, err := w.Write(cbg.CborEncodeMajorType(cbg.MajTextString, uint64(len("Target")))); err != nil {
return err
}
if _, err := w.Write([]byte("Target")); err != nil {
return err
}
if err := t.Target.MarshalCBOR(w); err != nil { if err := t.Target.MarshalCBOR(w); err != nil {
return err return err
} }
// t.Direction (uint64) (uint64) // t.Direction (uint64) (uint64)
if len("Direction") > cbg.MaxLength {
return xerrors.Errorf("Value in field \"Direction\" was too long")
}
if _, err := w.Write(cbg.CborEncodeMajorType(cbg.MajTextString, uint64(len("Direction")))); err != nil {
return err
}
if _, err := w.Write([]byte("Direction")); err != nil {
return err
}
if _, err := w.Write(cbg.CborEncodeMajorType(cbg.MajUnsignedInt, uint64(t.Direction))); err != nil { if _, err := w.Write(cbg.CborEncodeMajorType(cbg.MajUnsignedInt, uint64(t.Direction))); err != nil {
return err return err
} }
// t.Vouchers ([]*paych.VoucherInfo) (slice) // t.Vouchers ([]*paych.VoucherInfo) (slice)
if len("Vouchers") > cbg.MaxLength {
return xerrors.Errorf("Value in field \"Vouchers\" was too long")
}
if _, err := w.Write(cbg.CborEncodeMajorType(cbg.MajTextString, uint64(len("Vouchers")))); err != nil {
return err
}
if _, err := w.Write([]byte("Vouchers")); err != nil {
return err
}
if len(t.Vouchers) > cbg.MaxLength { if len(t.Vouchers) > cbg.MaxLength {
return xerrors.Errorf("Slice value in field t.Vouchers was too long") return xerrors.Errorf("Slice value in field t.Vouchers was too long")
} }
@ -140,6 +239,17 @@ func (t *ChannelInfo) MarshalCBOR(w io.Writer) error {
} }
// t.NextLane (uint64) (uint64) // t.NextLane (uint64) (uint64)
if len("NextLane") > cbg.MaxLength {
return xerrors.Errorf("Value in field \"NextLane\" was too long")
}
if _, err := w.Write(cbg.CborEncodeMajorType(cbg.MajTextString, uint64(len("NextLane")))); err != nil {
return err
}
if _, err := w.Write([]byte("NextLane")); err != nil {
return err
}
if _, err := w.Write(cbg.CborEncodeMajorType(cbg.MajUnsignedInt, uint64(t.NextLane))); err != nil { if _, err := w.Write(cbg.CborEncodeMajorType(cbg.MajUnsignedInt, uint64(t.NextLane))); err != nil {
return err return err
} }
@ -153,15 +263,31 @@ func (t *ChannelInfo) UnmarshalCBOR(r io.Reader) error {
if err != nil { if err != nil {
return err return err
} }
if maj != cbg.MajArray { if maj != cbg.MajMap {
return fmt.Errorf("cbor input should be of type array") return fmt.Errorf("cbor input should be of type map")
} }
if extra != 6 { if extra > cbg.MaxLength {
return fmt.Errorf("cbor input had wrong number of fields") return fmt.Errorf("ChannelInfo: map struct too large (%d)", extra)
} }
var name string
n := extra
for i := uint64(0); i < n; i++ {
{
sval, err := cbg.ReadString(br)
if err != nil {
return err
}
name = string(sval)
}
switch name {
// t.Channel (address.Address) (struct) // t.Channel (address.Address) (struct)
case "Channel":
{ {
@ -171,6 +297,7 @@ func (t *ChannelInfo) UnmarshalCBOR(r io.Reader) error {
} }
// t.Control (address.Address) (struct) // t.Control (address.Address) (struct)
case "Control":
{ {
@ -180,6 +307,7 @@ func (t *ChannelInfo) UnmarshalCBOR(r io.Reader) error {
} }
// t.Target (address.Address) (struct) // t.Target (address.Address) (struct)
case "Target":
{ {
@ -189,6 +317,7 @@ func (t *ChannelInfo) UnmarshalCBOR(r io.Reader) error {
} }
// t.Direction (uint64) (uint64) // t.Direction (uint64) (uint64)
case "Direction":
maj, extra, err = cbg.CborReadHeader(br) maj, extra, err = cbg.CborReadHeader(br)
if err != nil { if err != nil {
@ -199,6 +328,7 @@ func (t *ChannelInfo) UnmarshalCBOR(r io.Reader) error {
} }
t.Direction = uint64(extra) t.Direction = uint64(extra)
// t.Vouchers ([]*paych.VoucherInfo) (slice) // t.Vouchers ([]*paych.VoucherInfo) (slice)
case "Vouchers":
maj, extra, err = cbg.CborReadHeader(br) maj, extra, err = cbg.CborReadHeader(br)
if err != nil { if err != nil {
@ -226,6 +356,7 @@ func (t *ChannelInfo) UnmarshalCBOR(r io.Reader) error {
} }
// t.NextLane (uint64) (uint64) // t.NextLane (uint64) (uint64)
case "NextLane":
maj, extra, err = cbg.CborReadHeader(br) maj, extra, err = cbg.CborReadHeader(br)
if err != nil { if err != nil {
@ -235,5 +366,11 @@ func (t *ChannelInfo) UnmarshalCBOR(r io.Reader) error {
return fmt.Errorf("wrong type for uint64 field") return fmt.Errorf("wrong type for uint64 field")
} }
t.NextLane = uint64(extra) t.NextLane = uint64(extra)
default:
return fmt.Errorf("unknown struct field %d: '%s'", i, name)
}
}
return nil return nil
} }

View File

@ -45,7 +45,7 @@ func (pm *Manager) laneState(ctx context.Context, ch address.Address, lane uint6
ls := findLane(state.LaneStates, lane) ls := findLane(state.LaneStates, lane)
if ls == nil { if ls == nil {
ls = &paych.LaneState{ ls = &paych.LaneState{
ID: int64(lane), ID: lane,
Redeemed: types.NewInt(0), Redeemed: types.NewInt(0),
Nonce: 0, Nonce: 0,
} }
@ -64,16 +64,16 @@ func (pm *Manager) laneState(ctx context.Context, ch address.Address, lane uint6
return paych.LaneState{}, xerrors.Errorf("paych merges not handled yet") return paych.LaneState{}, xerrors.Errorf("paych merges not handled yet")
} }
if uint64(v.Voucher.Lane) != lane { if v.Voucher.Lane != lane {
continue continue
} }
if uint64(v.Voucher.Nonce) < uint64(ls.Nonce) { if v.Voucher.Nonce < ls.Nonce {
log.Warnf("Found outdated voucher: ch=%s, lane=%d, v.nonce=%d lane.nonce=%d", ch, lane, v.Voucher.Nonce, ls.Nonce) log.Warnf("Found outdated voucher: ch=%s, lane=%d, v.nonce=%d lane.nonce=%d", ch, lane, v.Voucher.Nonce, ls.Nonce)
continue continue
} }
ls.Nonce = int64(v.Voucher.Nonce) ls.Nonce = v.Voucher.Nonce
ls.Redeemed = v.Voucher.Amount ls.Redeemed = v.Voucher.Amount
} }

View File

@ -7,6 +7,7 @@ import (
"strings" "strings"
"sync" "sync"
"github.com/filecoin-project/specs-actors/actors/builtin/paych"
"github.com/ipfs/go-datastore" "github.com/ipfs/go-datastore"
"github.com/ipfs/go-datastore/namespace" "github.com/ipfs/go-datastore/namespace"
dsq "github.com/ipfs/go-datastore/query" dsq "github.com/ipfs/go-datastore/query"
@ -14,7 +15,7 @@ import (
"github.com/filecoin-project/go-address" "github.com/filecoin-project/go-address"
cborrpc "github.com/filecoin-project/go-cbor-util" cborrpc "github.com/filecoin-project/go-cbor-util"
"github.com/filecoin-project/lotus/chain/types"
"github.com/filecoin-project/lotus/node/modules/dtypes" "github.com/filecoin-project/lotus/node/modules/dtypes"
) )
@ -39,7 +40,7 @@ const (
) )
type VoucherInfo struct { type VoucherInfo struct {
Voucher *types.SignedVoucher Voucher *paych.SignedVoucher
Proof []byte Proof []byte
} }

View File

@ -53,7 +53,7 @@ func (m *Sealing) checkPreCommitted(ctx statemachine.Context, sector SectorInfo)
var pci miner.SectorPreCommitOnChainInfo var pci miner.SectorPreCommitOnChainInfo
precommits := adt.AsMap(store.ActorStore(ctx.Context(), apibstore.NewAPIBlockstore(m.api)), state.PreCommittedSectors) precommits := adt.AsMap(store.ActorStore(ctx.Context(), apibstore.NewAPIBlockstore(m.api)), state.PreCommittedSectors)
if _, err := precommits.Get(adt.IntKey(sector.SectorID), &pci); err != nil { if _, err := precommits.Get(adt.UIntKey(uint64(sector.SectorID)), &pci); err != nil {
log.Error(err) log.Error(err)
return nil, true return nil, true
} }