Skip to content

Commit

Permalink
Merge pull request #8941 from filecoin-project/gstuart/actors-cids-ol…
Browse files Browse the repository at this point in the history
…der-versions

Feat: api: Api call to get actor cids works for versions < 16
  • Loading branch information
geoff-vball authored Jun 29, 2022
2 parents 68fc567 + 4bebce0 commit 3bb7e9d
Show file tree
Hide file tree
Showing 17 changed files with 386 additions and 635 deletions.
328 changes: 328 additions & 0 deletions chain/actors/actor_cids.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,328 @@
package actors

import (
"github.com/ipfs/go-cid"
"golang.org/x/xerrors"

builtin0 "github.com/filecoin-project/specs-actors/actors/builtin"
builtin2 "github.com/filecoin-project/specs-actors/v2/actors/builtin"
builtin3 "github.com/filecoin-project/specs-actors/v3/actors/builtin"
builtin4 "github.com/filecoin-project/specs-actors/v4/actors/builtin"
builtin5 "github.com/filecoin-project/specs-actors/v5/actors/builtin"
builtin6 "github.com/filecoin-project/specs-actors/v6/actors/builtin"
builtin7 "github.com/filecoin-project/specs-actors/v7/actors/builtin"
)

// GetActorCodeID looks up a builtin actor's code CID by actor version and canonical actor name.
func GetActorCodeID(av Version, name string) (cid.Cid, bool) {

// Actors V8 and above
if av >= Version8 {
if cids, ok := GetActorCodeIDsFromManifest(av); ok {
c, ok := cids[name]
return c, ok
}
}

// Actors V7 and lower
switch name {

case AccountKey:
switch av {

case Version0:
return builtin0.AccountActorCodeID, true

case Version2:
return builtin2.AccountActorCodeID, true

case Version3:
return builtin3.AccountActorCodeID, true

case Version4:
return builtin4.AccountActorCodeID, true

case Version5:
return builtin5.AccountActorCodeID, true

case Version6:
return builtin6.AccountActorCodeID, true

case Version7:
return builtin7.AccountActorCodeID, true
}

case CronKey:
switch av {

case Version0:
return builtin0.CronActorCodeID, true

case Version2:
return builtin2.CronActorCodeID, true

case Version3:
return builtin3.CronActorCodeID, true

case Version4:
return builtin4.CronActorCodeID, true

case Version5:
return builtin5.CronActorCodeID, true

case Version6:
return builtin6.CronActorCodeID, true

case Version7:
return builtin7.CronActorCodeID, true
}

case InitKey:
switch av {

case Version0:
return builtin0.InitActorCodeID, true

case Version2:
return builtin2.InitActorCodeID, true

case Version3:
return builtin3.InitActorCodeID, true

case Version4:
return builtin4.InitActorCodeID, true

case Version5:
return builtin5.InitActorCodeID, true

case Version6:
return builtin6.InitActorCodeID, true

case Version7:
return builtin7.InitActorCodeID, true
}

case MarketKey:
switch av {

case Version0:
return builtin0.StorageMarketActorCodeID, true

case Version2:
return builtin2.StorageMarketActorCodeID, true

case Version3:
return builtin3.StorageMarketActorCodeID, true

case Version4:
return builtin4.StorageMarketActorCodeID, true

case Version5:
return builtin5.StorageMarketActorCodeID, true

case Version6:
return builtin6.StorageMarketActorCodeID, true

case Version7:
return builtin7.StorageMarketActorCodeID, true
}

case MinerKey:
switch av {

case Version0:
return builtin0.StorageMinerActorCodeID, true

case Version2:
return builtin2.StorageMinerActorCodeID, true

case Version3:
return builtin3.StorageMinerActorCodeID, true

case Version4:
return builtin4.StorageMinerActorCodeID, true

case Version5:
return builtin5.StorageMinerActorCodeID, true

case Version6:
return builtin6.StorageMinerActorCodeID, true

case Version7:
return builtin7.StorageMinerActorCodeID, true
}

case MultisigKey:
switch av {

case Version0:
return builtin0.MultisigActorCodeID, true

case Version2:
return builtin2.MultisigActorCodeID, true

case Version3:
return builtin3.MultisigActorCodeID, true

case Version4:
return builtin4.MultisigActorCodeID, true

case Version5:
return builtin5.MultisigActorCodeID, true

case Version6:
return builtin6.MultisigActorCodeID, true

case Version7:
return builtin7.MultisigActorCodeID, true
}

case PaychKey:
switch av {

case Version0:
return builtin0.PaymentChannelActorCodeID, true

case Version2:
return builtin2.PaymentChannelActorCodeID, true

case Version3:
return builtin3.PaymentChannelActorCodeID, true

case Version4:
return builtin4.PaymentChannelActorCodeID, true

case Version5:
return builtin5.PaymentChannelActorCodeID, true

case Version6:
return builtin6.PaymentChannelActorCodeID, true

case Version7:
return builtin7.PaymentChannelActorCodeID, true
}

case PowerKey:
switch av {

case Version0:
return builtin0.StoragePowerActorCodeID, true

case Version2:
return builtin2.StoragePowerActorCodeID, true

case Version3:
return builtin3.StoragePowerActorCodeID, true

case Version4:
return builtin4.StoragePowerActorCodeID, true

case Version5:
return builtin5.StoragePowerActorCodeID, true

case Version6:
return builtin6.StoragePowerActorCodeID, true

case Version7:
return builtin7.StoragePowerActorCodeID, true
}

case RewardKey:
switch av {

case Version0:
return builtin0.RewardActorCodeID, true

case Version2:
return builtin2.RewardActorCodeID, true

case Version3:
return builtin3.RewardActorCodeID, true

case Version4:
return builtin4.RewardActorCodeID, true

case Version5:
return builtin5.RewardActorCodeID, true

case Version6:
return builtin6.RewardActorCodeID, true

case Version7:
return builtin7.RewardActorCodeID, true
}

case SystemKey:
switch av {

case Version0:
return builtin0.SystemActorCodeID, true

case Version2:
return builtin2.SystemActorCodeID, true

case Version3:
return builtin3.SystemActorCodeID, true

case Version4:
return builtin4.SystemActorCodeID, true

case Version5:
return builtin5.SystemActorCodeID, true

case Version6:
return builtin6.SystemActorCodeID, true

case Version7:
return builtin7.SystemActorCodeID, true
}

case VerifregKey:
switch av {

case Version0:
return builtin0.VerifiedRegistryActorCodeID, true

case Version2:
return builtin2.VerifiedRegistryActorCodeID, true

case Version3:
return builtin3.VerifiedRegistryActorCodeID, true

case Version4:
return builtin4.VerifiedRegistryActorCodeID, true

case Version5:
return builtin5.VerifiedRegistryActorCodeID, true

case Version6:
return builtin6.VerifiedRegistryActorCodeID, true

case Version7:
return builtin7.VerifiedRegistryActorCodeID, true
}
}

return cid.Undef, false
}

// GetActorCodeIDs looks up all builtin actor's code CIDs by actor version.
func GetActorCodeIDs(av Version) (map[string]cid.Cid, error) {
cids, ok := GetActorCodeIDsFromManifest(av)
if ok {
return cids, nil
}

actorsKeys := GetBuiltinActorsKeys()
synthCids := make(map[string]cid.Cid)

for _, key := range actorsKeys {
c, ok := GetActorCodeID(av, key)
if !ok {
return nil, xerrors.Errorf("could not find builtin actor cids for Actors version %d", av)
}
synthCids[key] = c
}

return synthCids, nil
}
Loading

0 comments on commit 3bb7e9d

Please sign in to comment.