migrations

package
v0.36.9-crescendo-RC2-... Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 5, 2024 License: AGPL-3.0 Imports: 57 Imported by: 3

Documentation

Index

Constants

This section is empty.

Variables

Functions

func BurnerAddressForChain added in v0.33.30

func BurnerAddressForChain(chainID flow.ChainID) flow.Address

func ByteCountIEC added in v0.33.30

func ByteCountIEC(b int64) string

func MigrateAccountsConcurrently added in v0.33.30

func MigrateAccountsConcurrently(
	log zerolog.Logger,
	migrations []AccountBasedMigration,
	registersByAccount *registers.ByAccount,
	nWorker int,
) error

MigrateAccountsConcurrently migrate the registers in the given account groups. The registers in each account are processed sequentially by the given migrations in order.

func MigrateByAccount added in v0.29.0

func MigrateByAccount(
	log zerolog.Logger,
	nWorker int,
	registersByAccount *registers.ByAccount,
	migrations []AccountBasedMigration,
) error

MigrateByAccount takes migrations and all the registers, grouped by account, and returns the migrated registers.

func NewCadence1CompositeStaticTypeConverter added in v0.33.30

func NewCadence1CompositeStaticTypeConverter(chainID flow.ChainID) statictypes.CompositeTypeConverterFunc

func NewCadence1InterfaceStaticTypeConverter added in v0.33.30

func NewCadence1InterfaceStaticTypeConverter(chainID flow.ChainID) statictypes.InterfaceTypeConverterFunc

func NewStaticTypeMigration added in v0.33.30

func NewStaticTypeMigration[T interpreter.StaticType](
	rules StaticTypeMigrationRules,
) func(staticType T) interpreter.StaticType

func NewStorageVisitingErrorReporter added in v0.33.30

func NewStorageVisitingErrorReporter(log zerolog.Logger) *storageVisitingErrorReporter

func NewUserDefinedTypeChangeCheckerFunc added in v0.33.30

func NewUserDefinedTypeChangeCheckerFunc(
	chainID flow.ChainID,
) func(oldTypeID common.TypeID, newTypeID common.TypeID) (checked, valid bool)

func PruneEmptyMigration added in v0.33.30

func PruneEmptyMigration(payload []ledger.Payload) ([]ledger.Payload, error)

PruneEmptyMigration removes all the payloads with empty value this prunes the trie for values that has been deleted

Types

type AccountBasedMigration added in v0.33.1

type AccountBasedMigration interface {
	InitMigration(
		log zerolog.Logger,
		registersByAccount *registers.ByAccount,
		nWorkers int,
	) error
	MigrateAccount(
		ctx context.Context,
		address common.Address,
		accountRegisters *registers.AccountRegisters,
	) error
	io.Closer
}

AccountBasedMigration is an interface for migrations that migrate account by account concurrently getting all the payloads for each account at a time.

type AccountUsageMigration added in v0.33.30

type AccountUsageMigration struct {
	// contains filtered or unexported fields
}

AccountUsageMigration iterates through each payload, and calculate the storage usage and update the accounts status with the updated storage usage. It also upgrades the account status registers to the latest version.

func NewAccountUsageMigration added in v0.36.2

func NewAccountUsageMigration(rw reporters.ReportWriterFactory) *AccountUsageMigration

func (*AccountUsageMigration) Close added in v0.33.30

func (m *AccountUsageMigration) Close() error

func (*AccountUsageMigration) InitMigration added in v0.33.30

func (m *AccountUsageMigration) InitMigration(
	log zerolog.Logger,
	_ *registers.ByAccount,
	_ int,
) error

func (*AccountUsageMigration) MigrateAccount added in v0.33.30

func (m *AccountUsageMigration) MigrateAccount(
	_ context.Context,
	address common.Address,
	accountRegisters *registers.AccountRegisters,
) error

type AddKeyMigration

type AddKeyMigration struct {
	// contains filtered or unexported fields
}

AddKeyMigration adds a new key to the core contracts accounts

func NewAddKeyMigration

func NewAddKeyMigration(
	chainID flow.ChainID,
	key crypto.PublicKey,
	rwf reporters.ReportWriterFactory,
) *AddKeyMigration

func (*AddKeyMigration) Close

func (m *AddKeyMigration) Close() error

func (*AddKeyMigration) InitMigration

func (m *AddKeyMigration) InitMigration(
	log zerolog.Logger,
	_ *registers.ByAccount,
	_ int,
) error

func (*AddKeyMigration) MigrateAccount

func (m *AddKeyMigration) MigrateAccount(
	_ context.Context,
	address common.Address,
	accountRegisters *registers.AccountRegisters,
) error

type AddKeyMigrationAccountPublicKeyData

type AddKeyMigrationAccountPublicKeyData struct {
	PublicKey crypto.PublicKey
	HashAlgo  hash.HashingAlgorithm
}

type AddressContract added in v0.35.17

type AddressContract struct {
	// contains filtered or unexported fields
}

type BasicMigrationRuntime added in v0.33.30

type BasicMigrationRuntime struct {
	TransactionState state.NestedTransactionPreparer
	Storage          *runtime.Storage
	AccountsLedger   *util.AccountsAtreeLedger
	Accounts         environment.Accounts
}

func NewBasicMigrationRuntime added in v0.33.30

func NewBasicMigrationRuntime(regs registers.Registers) *BasicMigrationRuntime

NewBasicMigrationRuntime returns a basic runtime for migrations.

type BurnerContractChange added in v0.33.30

type BurnerContractChange uint8
const (
	BurnerContractChangeNone BurnerContractChange = iota
	BurnerContractChangeDeploy
	BurnerContractChangeUpdate
)

type CadenceBaseMigration added in v0.33.30

type CadenceBaseMigration struct {
	// contains filtered or unexported fields
}

func NewCadence1CapabilityValueMigration added in v0.33.30

func NewCadence1CapabilityValueMigration(
	rwf reporters.ReportWriterFactory,
	errorMessageHandler *errorMessageHandler,
	programs map[runtime.Location]*interpreter.Program,
	capabilityMapping *capcons.CapabilityMapping,
	opts Options,
) *CadenceBaseMigration

NewCadence1CapabilityValueMigration creates a new CadenceBaseMigration which migrates path capability values to ID capability values. It requires a map the IDs of the capability controllers, generated by the link value migration.

func NewCadence1LinkValueMigration added in v0.33.30

func NewCadence1LinkValueMigration(
	rwf reporters.ReportWriterFactory,
	errorMessageHandler *errorMessageHandler,
	programs map[runtime.Location]*interpreter.Program,
	capabilityMapping *capcons.CapabilityMapping,
	opts Options,
) *CadenceBaseMigration

NewCadence1LinkValueMigration creates a new CadenceBaseMigration which migrates links to capability controllers. It populates the given map with the IDs of the capability controller it issues.

func NewCadence1ValueMigration added in v0.33.30

func NewCadence1ValueMigration(
	rwf reporters.ReportWriterFactory,
	errorMessageHandler *errorMessageHandler,
	programs map[runtime.Location]*interpreter.Program,
	compositeTypeConverter statictypes.CompositeTypeConverterFunc,
	interfaceTypeConverter statictypes.InterfaceTypeConverterFunc,
	opts Options,
) *CadenceBaseMigration

NewCadence1ValueMigration creates a new CadenceBaseMigration which runs some of the Cadence value migrations (static types, entitlements, strings)

func (*CadenceBaseMigration) Close added in v0.33.30

func (m *CadenceBaseMigration) Close() error

func (*CadenceBaseMigration) InitMigration added in v0.33.30

func (m *CadenceBaseMigration) InitMigration(
	log zerolog.Logger,
	_ *registers.ByAccount,
	nWorkers int,
) error

func (*CadenceBaseMigration) MigrateAccount added in v0.33.30

func (m *CadenceBaseMigration) MigrateAccount(
	_ context.Context,
	address common.Address,
	accountRegisters *registers.AccountRegisters,
) error

type CadenceValueDiffReporter added in v0.33.30

type CadenceValueDiffReporter struct {
	// contains filtered or unexported fields
}

func NewCadenceValueDiffReporter added in v0.33.30

func NewCadenceValueDiffReporter(
	address common.Address,
	chainID flow.ChainID,
	rw reporters.ReportWriter,
	verboseLogging bool,
	nWorkers int,
) *CadenceValueDiffReporter

func (*CadenceValueDiffReporter) DiffStates added in v0.33.30

func (dr *CadenceValueDiffReporter) DiffStates(oldRegs, newRegs registers.Registers, domains []string)

type Contract added in v0.33.30

type Contract struct {
	Name string
	Code []byte
}

type ContractCleanupMigration added in v0.35.17

type ContractCleanupMigration struct {
	// contains filtered or unexported fields
}

ContractCleanupMigration normalized account's contract names and removes empty contracts.

func NewContractCleanupMigration added in v0.35.17

func NewContractCleanupMigration(rwf reporters.ReportWriterFactory) *ContractCleanupMigration

func (*ContractCleanupMigration) Close added in v0.35.17

func (d *ContractCleanupMigration) Close() error

func (*ContractCleanupMigration) InitMigration added in v0.35.17

func (d *ContractCleanupMigration) InitMigration(
	log zerolog.Logger,
	_ *registers.ByAccount,
	_ int,
) error

func (*ContractCleanupMigration) MigrateAccount added in v0.35.17

func (d *ContractCleanupMigration) MigrateAccount(
	_ context.Context,
	address common.Address,
	accountRegisters *registers.AccountRegisters,
) error

type EVMContractChange added in v0.33.30

type EVMContractChange uint8
const (
	EVMContractChangeNone EVMContractChange = iota
	// EVMContractChangeDeployFull deploys the full EVM contract
	EVMContractChangeDeployFull
	// EVMContractChangeUpdateFull updates the existing EVM contract to the latest, full EVM contract
	EVMContractChangeUpdateFull
	// EVMContractChangeDeployMinimalAndUpdateFull deploys the minimal EVM contract
	// and updates it to the latest, full EVM contract
	EVMContractChangeDeployMinimalAndUpdateFull
)

type FilterUnreferencedSlabsMigration added in v0.33.30

type FilterUnreferencedSlabsMigration struct {
	// contains filtered or unexported fields
}

func NewFilterUnreferencedSlabsMigration added in v0.33.30

func NewFilterUnreferencedSlabsMigration(
	outputDir string,
	rwf reporters.ReportWriterFactory,
) *FilterUnreferencedSlabsMigration

func (*FilterUnreferencedSlabsMigration) Close added in v0.33.30

func (*FilterUnreferencedSlabsMigration) InitMigration added in v0.33.30

func (m *FilterUnreferencedSlabsMigration) InitMigration(
	log zerolog.Logger,
	_ *registers.ByAccount,
	nWorkers int,
) error

func (*FilterUnreferencedSlabsMigration) MigrateAccount added in v0.33.30

func (m *FilterUnreferencedSlabsMigration) MigrateAccount(
	_ context.Context,
	address common.Address,
	accountRegisters *registers.AccountRegisters,
) error

type FixSlabsWithBrokenReferencesMigration added in v0.33.30

type FixSlabsWithBrokenReferencesMigration struct {
	// contains filtered or unexported fields
}

func NewFixBrokenReferencesInSlabsMigration added in v0.33.30

func NewFixBrokenReferencesInSlabsMigration(
	outputDir string,
	rwf reporters.ReportWriterFactory,
	accountsToFix map[common.Address]struct{},
) *FixSlabsWithBrokenReferencesMigration

func (*FixSlabsWithBrokenReferencesMigration) Close added in v0.33.30

func (*FixSlabsWithBrokenReferencesMigration) InitMigration added in v0.33.30

func (m *FixSlabsWithBrokenReferencesMigration) InitMigration(
	log zerolog.Logger,
	_ *registers.ByAccount,
	nWorkers int,
) error

func (*FixSlabsWithBrokenReferencesMigration) MigrateAccount added in v0.33.30

func (m *FixSlabsWithBrokenReferencesMigration) MigrateAccount(
	_ context.Context,
	address common.Address,
	accountRegisters *registers.AccountRegisters,
) error

type InterpreterMigrationRuntime added in v0.33.30

type InterpreterMigrationRuntime struct {
	*BasicMigrationRuntime
	Interpreter             *interpreter.Interpreter
	ContractAdditionHandler stdlib.AccountContractAdditionHandler
	ContractNamesProvider   stdlib.AccountContractNamesProvider
}

func NewInterpreterMigrationRuntime added in v0.33.30

func NewInterpreterMigrationRuntime(
	regs registers.Registers,
	chainID flow.ChainID,
	config InterpreterMigrationRuntimeConfig,
) (
	*InterpreterMigrationRuntime,
	error,
)

NewInterpreterMigrationRuntime returns a runtime for migrations that need an interpreter.

type InterpreterMigrationRuntimeConfig added in v0.33.30

type InterpreterMigrationRuntimeConfig struct {
	GetCode                  util.GetContractCodeFunc
	GetContractNames         util.GetContractNamesFunc
	GetOrLoadProgram         util.GetOrLoadProgramFunc
	GetOrLoadProgramListener util.GerOrLoadProgramListenerFunc
}

InterpreterMigrationRuntimeConfig is used to configure the InterpreterMigrationRuntime. The code, contract names, and program loading functions can be nil, in which case program loading will be configured to use the default behavior, loading contracts from the given payloads. The listener function is optional and can be used to listen for program loading events.

func (InterpreterMigrationRuntimeConfig) NewRuntimeInterface added in v0.33.30

func (c InterpreterMigrationRuntimeConfig) NewRuntimeInterface(
	chainID flow.ChainID,
	transactionState state.NestedTransactionPreparer,
	accounts environment.Accounts,
) (
	runtime.Interface,
	error,
)

type Metrics added in v0.33.30

type Metrics struct {
	// Total values in the storage
	TotalValues int `json:"totalValues"`

	// Total values with errors (un-migrated values)
	TotalErrors int `json:"TotalErrors"`

	// Values with errors (un-migrated) related to each contract
	ErrorsPerContract map[string]int `json:"errorsPerContract"`

	// Total values related to each contract
	ValuesPerContract map[string]int `json:"valuesPerContract"`
}

type MetricsCollectingMigration added in v0.33.30

type MetricsCollectingMigration struct {
	// contains filtered or unexported fields
}

func NewMetricsCollectingMigration added in v0.33.30

func NewMetricsCollectingMigration(
	log zerolog.Logger,
	chainID flow.ChainID,
	rwf reporters.ReportWriterFactory,
	programs map[common.Location]*interpreter.Program,
) *MetricsCollectingMigration

func (*MetricsCollectingMigration) CanSkip added in v0.33.30

func (*MetricsCollectingMigration) Close added in v0.33.30

func (m *MetricsCollectingMigration) Close() error

func (*MetricsCollectingMigration) Domains added in v0.33.30

func (m *MetricsCollectingMigration) Domains() map[string]struct{}

func (*MetricsCollectingMigration) InitMigration added in v0.33.30

func (m *MetricsCollectingMigration) InitMigration(
	_ zerolog.Logger,
	_ *registers.ByAccount,
	_ int,
) error

func (*MetricsCollectingMigration) Migrate added in v0.33.30

func (*MetricsCollectingMigration) MigrateAccount added in v0.33.30

func (m *MetricsCollectingMigration) MigrateAccount(
	_ context.Context,
	address common.Address,
	accountRegisters *registers.AccountRegisters,
) error

func (*MetricsCollectingMigration) Name added in v0.33.30

type MigrationMetricsCollector added in v0.33.30

type MigrationMetricsCollector struct {
	TotalValues       int
	TotalErrors       int
	ValuesPerContract map[common.Location]int
	ErrorsPerContract map[common.Location]int
	// contains filtered or unexported fields
}

func NewMigrationMetricsCollector added in v0.33.30

func NewMigrationMetricsCollector() *MigrationMetricsCollector

func (*MigrationMetricsCollector) RecordError added in v0.33.30

func (c *MigrationMetricsCollector) RecordError()

func (*MigrationMetricsCollector) RecordErrorForContract added in v0.33.30

func (c *MigrationMetricsCollector) RecordErrorForContract(location common.Location)

func (*MigrationMetricsCollector) RecordValue added in v0.33.30

func (c *MigrationMetricsCollector) RecordValue()

func (*MigrationMetricsCollector) RecordValueForContract added in v0.33.30

func (c *MigrationMetricsCollector) RecordValueForContract(location common.Location)

type NamedMigration added in v0.33.30

type NamedMigration struct {
	Name    string
	Migrate RegistersMigration
}

func NewCadence1ContractsMigrations added in v0.33.30

func NewCadence1ContractsMigrations(
	log zerolog.Logger,
	rwf reporters.ReportWriterFactory,
	opts Options,
) (
	migs []NamedMigration,
	importantLocations map[common.AddressLocation]struct{},
)

func NewCadence1Migrations added in v0.33.30

func NewCadence1Migrations(
	log zerolog.Logger,
	outputDir string,
	rwf reporters.ReportWriterFactory,
	opts Options,
) (migs []NamedMigration)

func NewCadence1ValueMigrations added in v0.33.30

func NewCadence1ValueMigrations(
	log zerolog.Logger,
	rwf reporters.ReportWriterFactory,
	importantLocations map[common.AddressLocation]struct{},
	opts Options,
) (migs []NamedMigration)

type Options added in v0.33.30

type Options struct {
	NWorker                           int
	DiffMigrations                    bool
	LogVerboseDiff                    bool
	CheckStorageHealthBeforeMigration bool
	VerboseErrorOutput                bool
	ChainID                           flow.ChainID
	EVMContractChange                 EVMContractChange
	BurnerContractChange              BurnerContractChange
	StagedContracts                   []StagedContract
	Prune                             bool
	MaxAccountSize                    uint64
	FixSlabsWithBrokenReferences      bool
	FilterUnreferencedSlabs           bool
	ReportMetrics                     bool
	CacheStaticTypeMigrationResults   bool
	CacheEntitlementsMigrationResults bool
}

type RegistersMigration added in v0.33.30

type RegistersMigration func(registersByAccount *registers.ByAccount) error

func NewAccountBasedMigration added in v0.33.30

func NewAccountBasedMigration(
	log zerolog.Logger,
	nWorker int,
	migrations []AccountBasedMigration,
) RegistersMigration

NewAccountBasedMigration creates a migration function that migrates the payloads account by account using the given migrations accounts are processed concurrently using the given number of workers but each account is processed sequentially by the given migrations in order. The migrations InitMigration function is called once before the migration starts And the Close function is called once after the migration finishes if the migration is a finisher.

func NewAccountSizeFilterMigration added in v0.33.30

func NewAccountSizeFilterMigration(
	maxAccountSize uint64,
	exceptions map[string]struct{},
	log zerolog.Logger,
) RegistersMigration

func NewAccountStorageMigration added in v0.33.30

func NewAccountStorageMigration(
	address common.Address,
	log zerolog.Logger,
	chainID flow.ChainID,
	migrate func(*runtime.Storage, *interpreter.Interpreter) error,
) RegistersMigration

func NewBurnerDeploymentMigration added in v0.33.30

func NewBurnerDeploymentMigration(
	chainID flow.ChainID,
	logger zerolog.Logger,
) RegistersMigration

func NewCadence1PruneMigration added in v0.33.30

func NewCadence1PruneMigration(
	chainID flow.ChainID,
	log zerolog.Logger,
	nWorkers int,
) RegistersMigration

NewCadence1PruneMigration prunes some values from the service account in the Testnet state

func NewContractCheckingMigration added in v0.33.30

func NewContractCheckingMigration(
	log zerolog.Logger,
	rwf reporters.ReportWriterFactory,
	chainID flow.ChainID,
	verboseErrorOutput bool,
	importantLocations map[common.AddressLocation]struct{},
	programs map[common.Location]*interpreter.Program,
) RegistersMigration

NewContractCheckingMigration returns a migration that checks all contracts. It parses and checks all contract code and stores the programs in the provided map. Important locations is a set of locations that should always succeed to check.

func NewDeploymentMigration added in v0.33.30

func NewDeploymentMigration(
	chainID flow.ChainID,
	contract Contract,
	authorizer flow.Address,
	expectedWriteAddresses map[flow.Address]struct{},
	logger zerolog.Logger,
) RegistersMigration

func NewEVMDeploymentMigration added in v0.33.30

func NewEVMDeploymentMigration(
	chainID flow.ChainID,
	logger zerolog.Logger,
	full bool,
) RegistersMigration

func NewEVMSetupMigration added in v0.36.4

func NewEVMSetupMigration(
	chainID flow.ChainID,
	logger zerolog.Logger,
) RegistersMigration

NewEVMSetupMigration returns a migration that sets up the EVM contract account. It performs the same operations as the EVM contract's initializer, calling the function EVM.setupHeartbeat, which in turn creates an EVM.Heartbeat resource, and writes it to the account's storage.

func NewTransactionBasedMigration added in v0.33.30

func NewTransactionBasedMigration(
	tx *flow.TransactionBody,
	chainID flow.ChainID,
	logger zerolog.Logger,
	expectedWriteAddresses map[flow.Address]struct{},
) RegistersMigration

type StagedContract added in v0.33.30

type StagedContract struct {
	Contract
	Address common.Address
}

func NewSystemContractChange added in v0.33.1

func NewSystemContractChange(
	systemContract systemcontracts.SystemContract,
	newContractCode []byte,
) StagedContract

func StagedContractsFromCSV added in v0.33.30

func StagedContractsFromCSV(path string) ([]StagedContract, error)

func SystemContractChanges added in v0.33.1

func SystemContractChanges(chainID flow.ChainID, options SystemContractsMigrationOptions) []StagedContract

func (StagedContract) AddressLocation added in v0.37.1

func (s StagedContract) AddressLocation() common.AddressLocation

type StagedContractsMigration added in v0.33.30

type StagedContractsMigration struct {
	// contains filtered or unexported fields
}

func NewStagedContractsMigration added in v0.33.30

func NewStagedContractsMigration(
	name string,
	reporterName string,
	log zerolog.Logger,
	rwf reporters.ReportWriterFactory,
	options StagedContractsMigrationOptions,
) *StagedContractsMigration

func NewSystemContractsMigration added in v0.33.30

func NewSystemContractsMigration(
	log zerolog.Logger,
	rwf reporters.ReportWriterFactory,
	options SystemContractsMigrationOptions,
) (
	migration *StagedContractsMigration,
	locations map[common.AddressLocation]struct{},
)

func (*StagedContractsMigration) Close added in v0.33.30

func (m *StagedContractsMigration) Close() error

func (*StagedContractsMigration) InitMigration added in v0.33.30

func (m *StagedContractsMigration) InitMigration(
	log zerolog.Logger,
	registersByAccount *registers.ByAccount,
	_ int,
) error

func (*StagedContractsMigration) MigrateAccount added in v0.33.30

func (m *StagedContractsMigration) MigrateAccount(
	_ context.Context,
	address common.Address,
	accountRegisters *registers.AccountRegisters,
) error

func (*StagedContractsMigration) WithContractUpdateValidation added in v0.33.30

func (m *StagedContractsMigration) WithContractUpdateValidation() *StagedContractsMigration

func (*StagedContractsMigration) WithStagedContractUpdates added in v0.33.30

func (m *StagedContractsMigration) WithStagedContractUpdates(stagedContracts []StagedContract) *StagedContractsMigration

WithStagedContractUpdates prepares the contract updates as a map for easy lookup.

type StagedContractsMigrationOptions added in v0.33.30

type StagedContractsMigrationOptions struct {
	ChainID            flow.ChainID
	VerboseErrorOutput bool
}

type StaticTypeMigrationRules added in v0.33.30

type StaticTypeMigrationRules map[common.TypeID]interpreter.StaticType

func NewCompositeTypeConversionRules added in v0.33.30

func NewCompositeTypeConversionRules(chainID flow.ChainID) StaticTypeMigrationRules

func NewInterfaceTypeConversionRules added in v0.33.30

func NewInterfaceTypeConversionRules(chainID flow.ChainID) StaticTypeMigrationRules

type SystemContractsMigrationOptions added in v0.33.30

type SystemContractsMigrationOptions struct {
	StagedContractsMigrationOptions
	EVM    EVMContractChange
	Burner BurnerContractChange
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL