Safe Haskell | None |
---|---|
Language | Haskell2010 |
UpgradeableUnsafeLedger demonstrates a real-world use case of an upgradeable contract. Its V1 contains a bug that makes it return an incorrect totalSupply. Fortunately, we can upgrade the contract and fix the bug. This contract does not use entrypoint-wise upgrades. Instead, it upgrades atomically in one transaction. For non-atomic upgrades please see the UpgradeableCounter example.
Synopsis
- data Parameter (ver :: VersionKind)
- = Run (VerParam ver)
- | RunPerm (VerPermanent ver)
- | Upgrade (OneShotUpgradeParameters ver)
- | GetVersion (View () Version)
- | SetAdministrator Address
- | EpwBeginUpgrade ("current" :! Version, "new" :! Version)
- | EpwApplyMigration (MigrationScriptFrom (VerUStoreTemplate ver))
- | EpwSetCode SomeUContractRouter
- | EpwSetPermCode (SomePermanentImpl (VerPermanent ver))
- | EpwFinishUpgrade
- data Storage (ver :: VersionKind)
- upgradeableUnsafeLedgerContract :: InitUpgradeableContract Permanent
- mkEmptyStorage :: (VerInterface ver ~ '[], VerUStoreTemplate ver ~ ()) => Address -> Storage ver
Documentation
data Parameter (ver :: VersionKind) Source #
Parameter of upgradeable contract. It contains, among others:
- Entrypoint for running one of upgradeable entrypoints.
- 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.
Run (VerParam ver) | |
RunPerm (VerPermanent ver) | |
Upgrade (OneShotUpgradeParameters ver) | |
GetVersion (View () Version) | |
SetAdministrator Address | |
EpwBeginUpgrade ("current" :! Version, "new" :! Version) | |
EpwApplyMigration (MigrationScriptFrom (VerUStoreTemplate ver)) | |
EpwSetCode SomeUContractRouter | |
EpwSetPermCode (SomePermanentImpl (VerPermanent ver)) | |
EpwFinishUpgrade |
Instances
data Storage (ver :: VersionKind) Source #
Instances
Generic (Storage ver) Source # | |
HasAnnotation (VerPermanent ver) => HasAnnotation (Storage ver) Source # | |
Defined in Lorentz.Contracts.Upgradeable.Common.Contract getAnnotation :: FollowEntrypointFlag -> Notes (ToT (Storage ver)) # | |
WellTypedIsoValue (VerPermanent ver) => IsoValue (Storage ver) Source # | |
NiceVersion ver => TypeHasDoc (Storage ver) Source # | |
Defined in Lorentz.Contracts.Upgradeable.Common.Contract type TypeDocFieldDescriptions (Storage ver) :: FieldDescriptions # typeDocName :: Proxy (Storage ver) -> Text # typeDocMdDescription :: Markdown # typeDocMdReference :: Proxy (Storage ver) -> WithinParens -> Markdown # typeDocDependencies :: Proxy (Storage ver) -> [SomeDocDefinitionItem] # typeDocHaskellRep :: TypeDocHaskellRep (Storage ver) # typeDocMichelsonRep :: TypeDocMichelsonRep (Storage ver) # | |
type Rep (Storage ver) Source # | |
type ToT (Storage ver) Source # | |
type TypeDocFieldDescriptions (Storage ver) Source # | |
upgradeableUnsafeLedgerContract :: InitUpgradeableContract Permanent Source #
mkEmptyStorage :: (VerInterface ver ~ '[], VerUStoreTemplate ver ~ ()) => Address -> Storage ver Source #