github.com/filecoin-project/specs-actors/v4@v4.0.2/actors/migration/nv10/market.go (about) 1 package nv10 2 3 import ( 4 "context" 5 6 cid "github.com/ipfs/go-cid" 7 cbor "github.com/ipfs/go-ipld-cbor" 8 9 market2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/market" 10 adt2 "github.com/filecoin-project/specs-actors/v2/actors/util/adt" 11 12 builtin3 "github.com/filecoin-project/specs-actors/v4/actors/builtin" 13 market3 "github.com/filecoin-project/specs-actors/v4/actors/builtin/market" 14 adt3 "github.com/filecoin-project/specs-actors/v4/actors/util/adt" 15 ) 16 17 type marketMigrator struct{} 18 19 func (m marketMigrator) migrateState(ctx context.Context, store cbor.IpldStore, in actorMigrationInput) (*actorMigrationResult, error) { 20 var inState market2.State 21 if err := store.Get(ctx, in.head, &inState); err != nil { 22 return nil, err 23 } 24 25 pendingProposalsCidOut, err := m.MapPendingProposals(ctx, store, inState.PendingProposals) 26 if err != nil { 27 return nil, err 28 } 29 proposalsCidOut, err := migrateAMTRaw(ctx, store, inState.Proposals, market3.ProposalsAmtBitwidth) 30 if err != nil { 31 return nil, err 32 } 33 statesCidOut, err := migrateAMTRaw(ctx, store, inState.States, market3.StatesAmtBitwidth) 34 if err != nil { 35 return nil, err 36 } 37 escrowTableCidOut, err := migrateHAMTRaw(ctx, store, inState.EscrowTable, adt3.BalanceTableBitwidth) 38 if err != nil { 39 return nil, err 40 } 41 lockedTableCidOut, err := migrateHAMTRaw(ctx, store, inState.LockedTable, adt3.BalanceTableBitwidth) 42 if err != nil { 43 return nil, err 44 } 45 dobeCidOut, err := migrateHAMTHAMTRaw(ctx, store, inState.DealOpsByEpoch, builtin3.DefaultHamtBitwidth, builtin3.DefaultHamtBitwidth) 46 if err != nil { 47 return nil, err 48 } 49 50 outState := market3.State{ 51 Proposals: proposalsCidOut, 52 States: statesCidOut, 53 PendingProposals: pendingProposalsCidOut, 54 EscrowTable: escrowTableCidOut, 55 LockedTable: lockedTableCidOut, 56 NextID: inState.NextID, 57 DealOpsByEpoch: dobeCidOut, 58 LastCron: inState.LastCron, 59 TotalClientLockedCollateral: inState.TotalClientLockedCollateral, 60 TotalProviderLockedCollateral: inState.TotalProviderLockedCollateral, 61 TotalClientStorageFee: inState.TotalClientStorageFee, 62 } 63 64 newHead, err := store.Put(ctx, &outState) 65 return &actorMigrationResult{ 66 newCodeCID: m.migratedCodeCID(), 67 newHead: newHead, 68 }, err 69 } 70 71 func (m marketMigrator) migratedCodeCID() cid.Cid { 72 return builtin3.StorageMarketActorCodeID 73 } 74 75 func (a marketMigrator) MapPendingProposals(ctx context.Context, store cbor.IpldStore, pendingProposalsRoot cid.Cid) (cid.Cid, error) { 76 oldPendingProposals, err := adt2.AsMap(adt2.WrapStore(ctx, store), pendingProposalsRoot) 77 if err != nil { 78 return cid.Undef, err 79 } 80 81 newPendingProposals, err := adt3.MakeEmptySet(adt3.WrapStore(ctx, store), builtin3.DefaultHamtBitwidth) 82 if err != nil { 83 return cid.Undef, err 84 } 85 86 err = oldPendingProposals.ForEach(nil, func(key string) error { 87 return newPendingProposals.Put(StringKey(key)) 88 }) 89 if err != nil { 90 return cid.Undef, err 91 } 92 93 newPendingProposalsCid, err := newPendingProposals.Root() 94 if err != nil { 95 return cid.Undef, err 96 } 97 98 return newPendingProposalsCid, nil 99 } 100 101 // An adt.Map key that just preserves the underlying string. 102 type StringKey string 103 104 func (k StringKey) Key() string { 105 return string(k) 106 }