From ba3b32cfe762e207d903c71644ce8fdaaff094e4 Mon Sep 17 00:00:00 2001 From: Aayush Rajasekaran Date: Fri, 15 Jan 2021 23:12:31 -0500 Subject: [PATCH] Pull in actors v3 --- chain/actors/adt/adt.go | 17 +++++++++++++---- chain/actors/builtin/verifreg/util.go | 7 +++++-- chain/actors/version.go | 3 +++ chain/state/statetree.go | 7 ++++++- chain/stmgr/stmgr.go | 3 ++- go.mod | 5 +++-- go.sum | 12 ++++++++++-- 7 files changed, 42 insertions(+), 12 deletions(-) diff --git a/chain/actors/adt/adt.go b/chain/actors/adt/adt.go index 6a454ac26..7a3007fa8 100644 --- a/chain/actors/adt/adt.go +++ b/chain/actors/adt/adt.go @@ -12,6 +12,7 @@ import ( adt0 "github.com/filecoin-project/specs-actors/actors/util/adt" adt2 "github.com/filecoin-project/specs-actors/v2/actors/util/adt" + adt3 "github.com/filecoin-project/specs-actors/v3/actors/util/adt" ) type Map interface { @@ -24,22 +25,26 @@ type Map interface { ForEach(v cbor.Unmarshaler, fn func(key string) error) error } -func AsMap(store Store, root cid.Cid, version actors.Version) (Map, error) { +func AsMap(store Store, root cid.Cid, version actors.Version, v3bitwidth int) (Map, error) { switch version { case actors.Version0: return adt0.AsMap(store, root) case actors.Version2: return adt2.AsMap(store, root) + case actors.Version3: + return adt3.AsMap(store, root, v3bitwidth) } return nil, xerrors.Errorf("unknown network version: %d", version) } -func NewMap(store Store, version actors.Version) (Map, error) { +func NewMap(store Store, version actors.Version, bitwidth int) (Map, error) { switch version { case actors.Version0: return adt0.MakeEmptyMap(store), nil case actors.Version2: return adt2.MakeEmptyMap(store), nil + case actors.Version3: + return adt3.MakeEmptyMap(store, bitwidth), nil } return nil, xerrors.Errorf("unknown network version: %d", version) } @@ -55,22 +60,26 @@ type Array interface { ForEach(v cbor.Unmarshaler, fn func(idx int64) error) error } -func AsArray(store Store, root cid.Cid, version network.Version) (Array, error) { +func AsArray(store Store, root cid.Cid, version network.Version, bitwidth int) (Array, error) { switch actors.VersionForNetwork(version) { case actors.Version0: return adt0.AsArray(store, root) case actors.Version2: return adt2.AsArray(store, root) + case actors.Version3: + return adt3.AsArray(store, root, bitwidth) } return nil, xerrors.Errorf("unknown network version: %d", version) } -func NewArray(store Store, version actors.Version) (Array, error) { +func NewArray(store Store, version actors.Version, bitwidth int) (Array, error) { switch version { case actors.Version0: return adt0.MakeEmptyArray(store), nil case actors.Version2: return adt2.MakeEmptyArray(store), nil + case actors.Version3: + return adt3.MakeEmptyArray(store, bitwidth) } return nil, xerrors.Errorf("unknown network version: %d", version) } diff --git a/chain/actors/builtin/verifreg/util.go b/chain/actors/builtin/verifreg/util.go index 4136c0c30..b7768439c 100644 --- a/chain/actors/builtin/verifreg/util.go +++ b/chain/actors/builtin/verifreg/util.go @@ -6,16 +6,18 @@ import ( "github.com/filecoin-project/go-state-types/big" "github.com/filecoin-project/lotus/chain/actors" "github.com/filecoin-project/lotus/chain/actors/adt" + builtin3 "github.com/filecoin-project/specs-actors/v3/actors/builtin" "github.com/ipfs/go-cid" "golang.org/x/xerrors" ) +// Assumes that the bitwidth for v3 HAMTs is the DefaultHamtBitwidth func getDataCap(store adt.Store, ver actors.Version, root cid.Cid, addr address.Address) (bool, abi.StoragePower, error) { if addr.Protocol() != address.ID { return false, big.Zero(), xerrors.Errorf("can only look up ID addresses") } - vh, err := adt.AsMap(store, root, ver) + vh, err := adt.AsMap(store, root, ver, builtin3.DefaultHamtBitwidth) if err != nil { return false, big.Zero(), xerrors.Errorf("loading verifreg: %w", err) } @@ -30,8 +32,9 @@ func getDataCap(store adt.Store, ver actors.Version, root cid.Cid, addr address. return true, dcap, nil } +// Assumes that the bitwidth for v3 HAMTs is the DefaultHamtBitwidth func forEachCap(store adt.Store, ver actors.Version, root cid.Cid, cb func(addr address.Address, dcap abi.StoragePower) error) error { - vh, err := adt.AsMap(store, root, ver) + vh, err := adt.AsMap(store, root, ver, builtin3.DefaultHamtBitwidth) if err != nil { return xerrors.Errorf("loading verified clients: %w", err) } diff --git a/chain/actors/version.go b/chain/actors/version.go index 1d9f1f8a2..763c5a42c 100644 --- a/chain/actors/version.go +++ b/chain/actors/version.go @@ -11,6 +11,7 @@ type Version int const ( Version0 Version = 0 Version2 Version = 2 + Version3 Version = 3 ) // Converts a network version into an actors adt version. @@ -20,6 +21,8 @@ func VersionForNetwork(version network.Version) Version { return Version0 case network.Version4, network.Version5, network.Version6, network.Version7, network.Version8, network.Version9: return Version2 + case network.Version10: + return Version3 default: panic(fmt.Sprintf("unsupported network version %d", version)) } diff --git a/chain/state/statetree.go b/chain/state/statetree.go index 7fa55b31c..d8cdca73a 100644 --- a/chain/state/statetree.go +++ b/chain/state/statetree.go @@ -5,6 +5,8 @@ import ( "context" "fmt" + builtin3 "github.com/filecoin-project/specs-actors/v3/actors/builtin" + "github.com/ipfs/go-cid" cbor "github.com/ipfs/go-ipld-cbor" logging "github.com/ipfs/go-log/v2" @@ -169,7 +171,8 @@ func NewStateTree(cst cbor.IpldStore, ver types.StateTreeVersion) (*StateTree, e default: return nil, xerrors.Errorf("unsupported state tree version: %d", ver) } - root, err := adt.NewMap(adt.WrapStore(context.TODO(), cst), adtForSTVersion(ver)) + // TODO: Confirm this is correct + root, err := adt.NewMap(adt.WrapStore(context.TODO(), cst), adtForSTVersion(ver), builtin3.DefaultHamtBitwidth) if err != nil { return nil, err } @@ -200,6 +203,8 @@ func LoadStateTree(cst cbor.IpldStore, c cid.Cid) (*StateTree, error) { nd, err := adt.AsMap( adt.WrapStore(context.TODO(), cst), root.Actors, adtForSTVersion(root.Version), + // TODO: Confirm this is correct + builtin3.DefaultHamtBitwidth, ) if err != nil { log.Errorf("loading hamt node %s failed: %s", c, err) diff --git a/chain/stmgr/stmgr.go b/chain/stmgr/stmgr.go index 5d9f35975..8a6315deb 100644 --- a/chain/stmgr/stmgr.go +++ b/chain/stmgr/stmgr.go @@ -42,6 +42,7 @@ import ( ) const LookbackNoLimit = abi.ChainEpoch(-1) +const ReceiptAmtBitwidth = 3 var log = logging.Logger("statemgr") @@ -385,7 +386,7 @@ func (sm *StateManager) ApplyBlocks(ctx context.Context, parentEpoch abi.ChainEp } // XXX: Is the height correct? Or should it be epoch-1? - rectarr, err := adt.NewArray(sm.cs.Store(ctx), actors.VersionForNetwork(sm.GetNtwkVersion(ctx, epoch))) + rectarr, err := adt.NewArray(sm.cs.Store(ctx), actors.VersionForNetwork(sm.GetNtwkVersion(ctx, epoch)), ReceiptAmtBitwidth) if err != nil { return cid.Undef, cid.Undef, xerrors.Errorf("failed to create receipts amt: %w", err) } diff --git a/go.mod b/go.mod index 0810d7e7e..62199668d 100644 --- a/go.mod +++ b/go.mod @@ -38,12 +38,13 @@ require ( github.com/filecoin-project/go-multistore v0.0.3 github.com/filecoin-project/go-padreader v0.0.0-20200903213702-ed5fae088b20 github.com/filecoin-project/go-paramfetch v0.0.2-0.20200701152213-3e0f0afdc261 - github.com/filecoin-project/go-state-types v0.0.0-20201102161440-c8033295a1fc + github.com/filecoin-project/go-state-types v0.0.0-20201203022337-7cab7f0d4bfb github.com/filecoin-project/go-statemachine v0.0.0-20200925024713-05bd7c71fbfe github.com/filecoin-project/go-statestore v0.1.0 github.com/filecoin-project/go-storedcounter v0.0.0-20200421200003-1c99c62e8a5b github.com/filecoin-project/specs-actors v0.9.13 - github.com/filecoin-project/specs-actors/v2 v2.3.3 + github.com/filecoin-project/specs-actors/v2 v2.3.4 + github.com/filecoin-project/specs-actors/v3 v3.0.0-20210115014158-be9804e44879 github.com/filecoin-project/specs-storage v0.1.1-0.20201105051918-5188d9774506 github.com/filecoin-project/test-vectors/schema v0.0.5 github.com/gbrlsnchs/jwt/v3 v3.0.0-beta.1 diff --git a/go.sum b/go.sum index 7f60cef4a..f53d98300 100644 --- a/go.sum +++ b/go.sum @@ -246,6 +246,8 @@ github.com/filecoin-project/go-amt-ipld/v2 v2.1.0 h1:t6qDiuGYYngDqaLc2ZUvdtAg4UN github.com/filecoin-project/go-amt-ipld/v2 v2.1.0/go.mod h1:nfFPoGyX0CU9SkXX8EoCcSuHN1XcbN0c6KBh7yvP5fs= github.com/filecoin-project/go-amt-ipld/v2 v2.1.1-0.20201006184820-924ee87a1349 h1:pIuR0dnMD0i+as8wNnjjHyQrnhP5O5bmba/lmgQeRgU= github.com/filecoin-project/go-amt-ipld/v2 v2.1.1-0.20201006184820-924ee87a1349/go.mod h1:vgmwKBkx+ca5OIeEvstiQgzAZnb7R6QaqE1oEDSqa6g= +github.com/filecoin-project/go-amt-ipld/v3 v3.0.0-20201124192204-2b387ce1bab7 h1:HHKfkAfweGbpnJV60OuG6M0ZAXKrELklLvyjcKI/nKI= +github.com/filecoin-project/go-amt-ipld/v3 v3.0.0-20201124192204-2b387ce1bab7/go.mod h1:Qa95YNAbtoVCTSVtX38aAC1ptBnJfPma1R/zZsKmx4o= github.com/filecoin-project/go-bitfield v0.2.0 h1:gCtLcjskIPtdg4NfN7gQZSQF9yrBQ7mkT0qCJxzGI2Q= github.com/filecoin-project/go-bitfield v0.2.0/go.mod h1:CNl9WG8hgR5mttCnUErjcQjGvuiZjRqK9rHVBsQF4oM= github.com/filecoin-project/go-bitfield v0.2.3-0.20201110211213-fe2c1862e816 h1:RMdzMqe3mu2Z/3N3b9UEfkbGZxukstmZgNC024ybWhA= @@ -273,6 +275,8 @@ github.com/filecoin-project/go-hamt-ipld v0.1.5 h1:uoXrKbCQZ49OHpsTCkrThPNelC4W3 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.0-20201203140949-5cdbb5191437 h1:nu2XYXvzy6BNASKVpfCkmUFr6YDf43LMjkMMab+3Z1E= +github.com/filecoin-project/go-hamt-ipld/v3 v3.0.0-20201203140949-5cdbb5191437/go.mod h1:HBuSIxbIKqWjV0/bcJ/e14iIMr1FckG6cyzAsdfttyU= 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-multistore v0.0.3 h1:vaRBY4YiA2UZFPK57RNuewypB8u0DzzQwqsL0XarpnI= @@ -286,6 +290,8 @@ github.com/filecoin-project/go-state-types v0.0.0-20200904021452-1883f36ca2f4/go 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 h1:+hbMY4Pcx2oizrfH08VWXwrj5mU8aJT6g0UNxGHFCGU= 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-20201203022337-7cab7f0d4bfb h1:f7Y9QeUfT+hX+OOjtZ3j1e2KlGWg7ozI7W444Qa+ZJ0= +github.com/filecoin-project/go-state-types v0.0.0-20201203022337-7cab7f0d4bfb/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= @@ -299,8 +305,10 @@ github.com/filecoin-project/specs-actors v0.9.13/go.mod h1:TS1AW/7LbG+615j4NsjMK 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 h1:2Vcf4CGa29kRh4JJ02m+FbvD/p3YNnLGsaHfw7Uj49g= 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.3 h1:5Pd6pjU7VjUye+Hz4gYBCPAFdBxtEbHsgGYvWmfc83w= -github.com/filecoin-project/specs-actors/v2 v2.3.3/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.0-20210115014158-be9804e44879 h1:rX+rISGIh3/VQf/rXPAQ0waJ2JDXCO/o68pmIP+zQHk= +github.com/filecoin-project/specs-actors/v3 v3.0.0-20210115014158-be9804e44879/go.mod h1:kJ/Jk5TYkSC7eJR4RPl2VYgYJOsLPeERAmGkeFMXiLM= 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 h1:w3zHQhzM4pYxJDl21avXjOKBLF8egrvwUwjpT8TquDg=