morley-upgradeable-0.3: Upgradeability infrastructure based on Morley.
Safe HaskellNone
LanguageHaskell2010

Lorentz.Contracts.Upgradeable.Common.Contract

Description

Template for upgradeable contract.

It provides the following features: 1. Contract with upgradeable storage format and entrypoints set. 2. Two way to upgrade the contract - one shot and entrypoint-wise.

Synopsis

Documentation

data Parameter (ver :: VersionKind) Source #

Parameter of upgradeable contract. It contains, among others:

  1. Entrypoint for running one of upgradeable entrypoints.
  2. Entrypoint for running one of permanent entrypoints, suitable e.g. for implementing interfaces. 3a. Entrypoint for upgrade in a single call. 3b. Entrypoints for entrypoint-wise upgrade.

Instances

Instances details
(Show (VerParam ver), Show (VerPermanent ver)) => Show (Parameter ver) Source # 
Instance details

Defined in Lorentz.Contracts.Upgradeable.Common.Contract

Methods

showsPrec :: Int -> Parameter ver -> ShowS #

show :: Parameter ver -> String #

showList :: [Parameter ver] -> ShowS #

Generic (Parameter ver) Source # 
Instance details

Defined in Lorentz.Contracts.Upgradeable.Common.Contract

Associated Types

type Rep (Parameter ver) :: Type -> Type #

Methods

from :: Parameter ver -> Rep (Parameter ver) x #

to :: Rep (Parameter ver) x -> Parameter ver #

(interface ~ VerInterface ver, UnpackUParam Buildable interface, Buildable (VerPermanent ver)) => Buildable (Parameter ver) Source # 
Instance details

Defined in Lorentz.Contracts.Upgradeable.Common.Contract

Methods

build :: Parameter ver -> Builder #

PermConstraint ver => ParameterHasEntrypoints (Parameter ver) Source # 
Instance details

Defined in Lorentz.Contracts.Upgradeable.Common.Contract

Associated Types

type ParameterEntrypointsDerivation (Parameter ver) #

IsoValue (VerPermanent ver) => IsoValue (Parameter ver) Source # 
Instance details

Defined in Lorentz.Contracts.Upgradeable.Common.Contract

Associated Types

type ToT (Parameter ver) :: T #

Methods

toVal :: Parameter ver -> Value (ToT (Parameter ver)) #

fromVal :: Value (ToT (Parameter ver)) -> Parameter ver #

NiceVersion ver => TypeHasDoc (Parameter ver) Source # 
Instance details

Defined in Lorentz.Contracts.Upgradeable.Common.Contract

type Rep (Parameter ver) Source # 
Instance details

Defined in Lorentz.Contracts.Upgradeable.Common.Contract

type Rep (Parameter ver) = D1 ('MetaData "Parameter" "Lorentz.Contracts.Upgradeable.Common.Contract" "morley-upgradeable-0.3-inplace" 'False) (((C1 ('MetaCons "Run" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedStrict) (Rec0 (VerParam ver))) :+: C1 ('MetaCons "RunPerm" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedStrict) (Rec0 (VerPermanent ver)))) :+: (C1 ('MetaCons "Upgrade" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedStrict) (Rec0 (OneShotUpgradeParameters ver))) :+: (C1 ('MetaCons "GetVersion" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedStrict) (Rec0 (View () Version))) :+: C1 ('MetaCons "SetAdministrator" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedStrict) (Rec0 Address))))) :+: ((C1 ('MetaCons "EpwBeginUpgrade" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedStrict) (Rec0 ("current" :! Version, "new" :! Version))) :+: C1 ('MetaCons "EpwApplyMigration" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedStrict) (Rec0 (MigrationScriptFrom (VerUStoreTemplate ver))))) :+: (C1 ('MetaCons "EpwSetCode" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedStrict) (Rec0 SomeUContractRouter)) :+: (C1 ('MetaCons "EpwSetPermCode" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedStrict) (Rec0 (SomePermanentImpl (VerPermanent ver)))) :+: C1 ('MetaCons "EpwFinishUpgrade" 'PrefixI 'False) (U1 :: Type -> Type)))))
type ParameterEntrypointsDerivation (Parameter ver) Source # 
Instance details

Defined in Lorentz.Contracts.Upgradeable.Common.Contract

type ToT (Parameter ver) Source # 
Instance details

Defined in Lorentz.Contracts.Upgradeable.Common.Contract

type ToT (Parameter ver) = GValueType (Rep (Parameter ver))
type TypeDocFieldDescriptions (Parameter ver) Source # 
Instance details

Defined in Lorentz.Contracts.Upgradeable.Common.Contract

data Storage (ver :: VersionKind) Source #

Instances

Instances details
Generic (Storage ver) Source # 
Instance details

Defined in Lorentz.Contracts.Upgradeable.Common.Contract

Associated Types

type Rep (Storage ver) :: Type -> Type #

Methods

from :: Storage ver -> Rep (Storage ver) x #

to :: Rep (Storage ver) x -> Storage ver #

HasAnnotation (VerPermanent ver) => HasAnnotation (Storage ver) Source # 
Instance details

Defined in Lorentz.Contracts.Upgradeable.Common.Contract

WellTypedIsoValue (VerPermanent ver) => IsoValue (Storage ver) Source # 
Instance details

Defined in Lorentz.Contracts.Upgradeable.Common.Contract

Associated Types

type ToT (Storage ver) :: T #

Methods

toVal :: Storage ver -> Value (ToT (Storage ver)) #

fromVal :: Value (ToT (Storage ver)) -> Storage ver #

NiceVersion ver => TypeHasDoc (Storage ver) Source # 
Instance details

Defined in Lorentz.Contracts.Upgradeable.Common.Contract

Associated Types

type TypeDocFieldDescriptions (Storage ver) :: FieldDescriptions #

type Rep (Storage ver) Source # 
Instance details

Defined in Lorentz.Contracts.Upgradeable.Common.Contract

type Rep (Storage ver)
type ToT (Storage ver) Source # 
Instance details

Defined in Lorentz.Contracts.Upgradeable.Common.Contract

type ToT (Storage ver) = GValueType (Rep (Storage ver))
type TypeDocFieldDescriptions (Storage ver) Source # 
Instance details

Defined in Lorentz.Contracts.Upgradeable.Common.Contract

data PermanentImpl ver Source #

Implementation of permanent entrypoints.

This will be injected into contract storage as one of fields, so make sure that code within does not exceed several instructions; an actual entrypoint logic can be put into UStore and called from within PermanentImpl only when necessary.

Regarding documentation - this have to provide code pieces wrapped into DEntrypoint with PermanentEntrypointsKind, so always use entryCase as implementation of this type or inject documentation of code which does so unless you know what you are doing.

Instances

Instances details
Show (PermanentImpl ver) Source # 
Instance details

Defined in Lorentz.Contracts.Upgradeable.Common.Base

Generic (PermanentImpl ver) Source # 
Instance details

Defined in Lorentz.Contracts.Upgradeable.Common.Base

Associated Types

type Rep (PermanentImpl ver) :: Type -> Type #

Methods

from :: PermanentImpl ver -> Rep (PermanentImpl ver) x #

to :: Rep (PermanentImpl ver) x -> PermanentImpl ver #

Wrappable (PermanentImpl ver) Source # 
Instance details

Defined in Lorentz.Contracts.Upgradeable.Common.Base

Associated Types

type Unwrappable (PermanentImpl ver) #

MapLorentzInstr (PermanentImpl ver) Source # 
Instance details

Defined in Lorentz.Contracts.Upgradeable.Common.Base

Methods

mapLorentzInstr :: (forall (i :: [Type]) (o :: [Type]). (i :-> o) -> i :-> o) -> PermanentImpl ver -> PermanentImpl ver #

HasAnnotation (VerPermanent ver) => HasAnnotation (PermanentImpl ver) Source # 
Instance details

Defined in Lorentz.Contracts.Upgradeable.Common.Base

WellTypedIsoValue (VerPermanent ver) => IsoValue (PermanentImpl ver) Source # 
Instance details

Defined in Lorentz.Contracts.Upgradeable.Common.Base

Associated Types

type ToT (PermanentImpl ver) :: T #

(Typeable ver, Typeable (VerUStoreTemplate ver), TypeHasDoc (VerUStore ver), TypeHasDoc (VerPermanent ver), KnownValue (VerPermanent ver)) => TypeHasDoc (PermanentImpl ver) Source # 
Instance details

Defined in Lorentz.Contracts.Upgradeable.Common.Base

(CanCastTo (VerPermanent ver1) (VerPermanent ver2), CanCastTo (VerUStore ver1) (VerUStore ver2)) => CanCastTo (PermanentImpl ver1 :: Type) (PermanentImpl ver2 :: Type) Source # 
Instance details

Defined in Lorentz.Contracts.Upgradeable.Common.Base

Methods

castDummy :: Proxy (PermanentImpl ver1) -> Proxy (PermanentImpl ver2) -> () #

type Rep (PermanentImpl ver) Source # 
Instance details

Defined in Lorentz.Contracts.Upgradeable.Common.Base

type Rep (PermanentImpl ver) = D1 ('MetaData "PermanentImpl" "Lorentz.Contracts.Upgradeable.Common.Base" "morley-upgradeable-0.3-inplace" 'True) (C1 ('MetaCons "PermanentImpl" 'PrefixI 'True) (S1 ('MetaSel ('Just "unPermanentImpl") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Entrypoint (VerPermanent ver) (VerUStore ver)))))
type Unwrappable (PermanentImpl ver) Source # 
Instance details

Defined in Lorentz.Contracts.Upgradeable.Common.Base

type Unwrappable (PermanentImpl ver) = GUnwrappable (Rep (PermanentImpl ver))
type ToT (PermanentImpl ver) Source # 
Instance details

Defined in Lorentz.Contracts.Upgradeable.Common.Base

type TypeDocFieldDescriptions (PermanentImpl ver) Source # 
Instance details

Defined in Lorentz.Contracts.Upgradeable.Common.Base

type OneShotUpgradeParameters ver = ("currentVersion" :! Version, "newVersion" :! Version, "migrationScript" :! MigrationScriptFrom (VerUStoreTemplate ver), "newCode" :! Maybe SomeUContractRouter, "newPermCode" :! Maybe (SomePermanentImpl (VerPermanent ver))) Source #

Parameters of one-shot upgrade.

Do not construct this value manually, consider using makeOneShotUpgradeParameters.

pbsContainedInRun :: ParamBuildingStep Source #

Mentions that parameter should be wrapped into Run entry point.

pbsContainedInRunPerm :: ParamBuildingStep Source #

Mentions that parameter should be wrapped into Run entry point.

Orphan instances

CustomErrorHasDoc "upgContractIsNotPaused" Source # 
Instance details

CustomErrorHasDoc "upgContractIsPaused" Source # 
Instance details

CustomErrorHasDoc "upgVersionMismatch" Source # 
Instance details

Buildable (CustomError "upgContractIsNotPaused") Source # 
Instance details

Methods

build :: CustomError "upgContractIsNotPaused" -> Builder #

Buildable (CustomError "upgContractIsPaused") Source # 
Instance details

Methods

build :: CustomError "upgContractIsPaused" -> Builder #

Buildable (CustomError "upgVersionMismatch") Source # 
Instance details

Methods

build :: CustomError "upgVersionMismatch" -> Builder #