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  }