Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feat: api: Api call to get actor cids works for versions < 16 #8941

Merged
merged 4 commits into from
Jun 29, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
geoff-vball marked this conversation as resolved.
Show resolved Hide resolved
if av >= Version8 {
if cids, ok := GetActorCodeIDsFromManifest(av); ok {
c, ok := cids[name]
return c, ok
}
geoff-vball marked this conversation as resolved.
Show resolved Hide resolved
}

// 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