github.com/filecoin-project/specs-actors/v4@v4.0.2/actors/migration/nv10/power.go (about) 1 package nv10 2 3 import ( 4 "context" 5 6 adt2 "github.com/filecoin-project/specs-actors/actors/util/adt" 7 power2 "github.com/filecoin-project/specs-actors/v2/actors/builtin/power" 8 cid "github.com/ipfs/go-cid" 9 cbor "github.com/ipfs/go-ipld-cbor" 10 11 builtin3 "github.com/filecoin-project/specs-actors/v4/actors/builtin" 12 power3 "github.com/filecoin-project/specs-actors/v4/actors/builtin/power" 13 adt3 "github.com/filecoin-project/specs-actors/v4/actors/util/adt" 14 smoothing3 "github.com/filecoin-project/specs-actors/v4/actors/util/smoothing" 15 ) 16 17 type powerMigrator struct{} 18 19 func (m powerMigrator) migrateState(ctx context.Context, store cbor.IpldStore, in actorMigrationInput) (*actorMigrationResult, error) { 20 var inState power2.State 21 if err := store.Get(ctx, in.head, &inState); err != nil { 22 return nil, err 23 } 24 25 var proofValidationBatchOut *cid.Cid 26 if inState.ProofValidationBatch != nil { 27 proofValidationBatchOutCID, err := migrateHAMTAMTRaw(ctx, store, *inState.ProofValidationBatch, builtin3.DefaultHamtBitwidth, power3.ProofValidationBatchAmtBitwidth) 28 if err != nil { 29 return nil, err 30 } 31 proofValidationBatchOut = &proofValidationBatchOutCID 32 } 33 34 claimsOut, err := m.migrateClaims(ctx, store, inState.Claims) 35 if err != nil { 36 return nil, err 37 } 38 39 cronEventQueueOut, err := migrateHAMTAMTRaw(ctx, store, inState.CronEventQueue, power3.CronQueueHamtBitwidth, power3.CronQueueAmtBitwidth) 40 if err != nil { 41 return nil, err 42 } 43 44 outState := power3.State{ 45 TotalRawBytePower: inState.TotalRawBytePower, 46 TotalBytesCommitted: inState.TotalBytesCommitted, 47 TotalQualityAdjPower: inState.TotalQualityAdjPower, 48 TotalQABytesCommitted: inState.TotalQABytesCommitted, 49 TotalPledgeCollateral: inState.TotalPledgeCollateral, 50 ThisEpochRawBytePower: inState.ThisEpochRawBytePower, 51 ThisEpochQualityAdjPower: inState.ThisEpochQualityAdjPower, 52 ThisEpochPledgeCollateral: inState.ThisEpochPledgeCollateral, 53 ThisEpochQAPowerSmoothed: smoothing3.FilterEstimate(inState.ThisEpochQAPowerSmoothed), 54 MinerCount: inState.MinerCount, 55 MinerAboveMinPowerCount: inState.MinerAboveMinPowerCount, 56 CronEventQueue: cronEventQueueOut, 57 FirstCronEpoch: inState.FirstCronEpoch, 58 Claims: claimsOut, 59 ProofValidationBatch: proofValidationBatchOut, 60 } 61 newHead, err := store.Put(ctx, &outState) 62 return &actorMigrationResult{ 63 newCodeCID: m.migratedCodeCID(), 64 newHead: newHead, 65 }, err 66 } 67 68 func (m powerMigrator) migratedCodeCID() cid.Cid { 69 return builtin3.StoragePowerActorCodeID 70 } 71 72 func (m powerMigrator) migrateClaims(ctx context.Context, store cbor.IpldStore, root cid.Cid) (cid.Cid, error) { 73 astore := adt3.WrapStore(ctx, store) 74 inClaims, err := adt2.AsMap(astore, root) 75 if err != nil { 76 return cid.Undef, err 77 } 78 outClaims, err := adt3.MakeEmptyMap(astore, builtin3.DefaultHamtBitwidth) 79 if err != nil { 80 return cid.Undef, err 81 } 82 83 var inClaim power2.Claim 84 if err = inClaims.ForEach(&inClaim, func(key string) error { 85 postProof, err := inClaim.SealProofType.RegisteredWindowPoStProof() 86 if err != nil { 87 return err 88 } 89 outClaim := power3.Claim{ 90 WindowPoStProofType: postProof, 91 RawBytePower: inClaim.RawBytePower, 92 QualityAdjPower: inClaim.QualityAdjPower, 93 } 94 return outClaims.Put(StringKey(key), &outClaim) 95 }); err != nil { 96 return cid.Undef, err 97 } 98 return outClaims.Root() 99 }