Comment mettre à niveau un contrat intelligent?
3 réponses
- votes
-
- 2019-02-28
Parce que les valeurs detype
lambda
peuvent être conservéesen stockage outransmis commeparamètres (soit commelambda
ou sousoctets
pour êtreDéballez
ED),ilest possible écrire des contratspouvant semettre àniveau ... Celan'apastoujours de sens,maispourraitparfois être utile.Parexemple,l'un des contratsprincipauxtrèsprécoce du Mainnet semble avoir une sorte demécanisme demise àniveau: https://tzscan.io/Kt1r3uoz6w1zXewzqtv75ro7dhvy6uacxuk2 .Lepropriétaire configurépeutfournir une Lambda à l'un despoints d'entrée,qui serontplacés au stockageet remplaceront le comportement du contrat dans certains cas.
Because values of type
lambda
can be kept in storage or passed as parameters (either aslambda
or asbytes
to beUNPACK
ed), it is possible to write contracts which can upgrade themselves... This won't always make sense, but might sometimes be useful.For example, one of the very early mainnet contracts appears to have a kind of upgrade mechanism: https://tzscan.io/KT1R3uoZ6W1ZxEwzqtv75Ro7DhVY6UAcxuK2. The configured owner can supply a lambda to one of the entry points, which will be placed in storage and will override the contract's behavior in some cases.
-
- 2019-02-26
Disclaimer: Ceciestjuste unexemple à desfins éducatives,ne l'utilisezpasen production.
Voici un design évolutif assezprimitifpour un contrat Smart de liquidité:
contratproxy - tient l'état/le stockage
- pointe vers un contrat logiqueet proxie sespoints d'entrée
- peut êtremodifié/amélioré,par sonpropriétaire légitime. Vouspouvez rencontrerici desproblèmes de décentralisation/degouvernance -tous les changements sous-jacents à la logique sonttoujours suivis sur la chaîne. C'est donc un compromis.
- expose unpoint d'entrée
setdata code>,consommépar le contrat logiquepour appliquer desmodifications de stockage
Contrat logique
- est appeléexclusivementpar le contratproxy
- Chaque appel depoint d'entrée donne des résultats dans un
SetData Code> Point d'entrée Appel sur le contratproxy
Enthéorie,vous devriez être capable demettreen œuvre cela à l'aide de Système de contrat detypemodule '. Pour ce quiprécède,vous devezbien fonctionner,vous devezmettreen œuvre avec soin d'une ACL décente (quipeut appeler quelspoints d'entrée).
Disclaimer: This is just an example for educational purposes, don't use it in production.
Here is a fairly primitive upgradable design for a Liquidity smart contract:
Proxy Contract
- Holds the state / storage
- Points to a Logic Contract, and proxies its entry points
- Can be amended / upgraded, by its rightful owner. You can run into decentralization / governance issues here - all the underlying logic contract changes are still tracked on-chain, so it's a trade-off.
- Exposes an entry point
setData
, consumed by the Logic Contract to apply storage changes
Logic Contract
- Is called exclusively by the Proxy Contract
- Each entry point call, results into a
setData
entry point call on the Proxy Contract
In theory, you should be able to implement this using Liquidity's 'module-like contract system'. For the above described to work well, you must carefully implement a decent ACL (who can call which entry points).
-
- 2019-07-29
cryptonomic publié un article surexactement ce sujet récemment.
Cryptonomic published an article on exactly this topic recently.
Je construis un contratintelligenten quelque sorte unindice de documents signés (pointant vers des IPFSpour les documents réels).
Et sije veux ajouter desfonctionnalités àmon
app
sur la routeet devezmettre àniveau le contrat?Je comprends queje doisfaire unnouveau contrat,mais que diriez-vous detransférer l'état actuel de l'ancien contrat vers lenouveau?
Cela coûterait-ilbeaucoup de XTZ àinitialiser unnouveau contrat avec ungrand État?Y a-t-il une autre approchepour atteindre cela?