Come aggiornare uno smart contract?
3 risposta
- voti
-
- 2019-02-28
Poichéi valori ditipo
lambda
possonoessere conservatiin memoria opassati comeparametri (sia comelambda
o comebytes
daUNPACK
ed),è possibile scrivere contratti chepossono aggiornarsi da soli ... Questonon ha sempre senso,ma a voltepotrebbeessere utile.Adesempio,uno deiprimi contrattimainnet sembra avere una sorta dimeccanismo di aggiornamento: https://tzscan.io/KT1R3uoZ6W1ZxEwzqtv75Ro7DhVY6UAcxuK2 .Ilproprietario configuratopuòfornire un lambda a uno deipunti diingresso,che verrà archiviatoe in alcuni casi sovrascriveràil comportamento del contratto.
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
Dichiarazione dinon responsabilità: questo è solo unesempio a scopo didattico,non utilizzarlonellaproduzione.
Ecco unprogetto aggiornabile abbastanzaprimitivoper un contrattointelligente di liquidità:
Contratto di delega
- Contiene lo stato/archiviazione
- Punta a un contratto logicoe ne delegai punti diingresso
- Puòesseremodificato/aggiornato dal legittimoproprietario. Puoiincorrerein problemi di decentralizzazione/governance qui:tutte lemodifiche del contratto logico sottostante sono ancoramonitoratein catena,quindi è un compromesso.
- Espone unpunto diingresso
setData
,utilizzato dal contratto logicoper applicare lemodifiche di archiviazione
Contratto logico
- Viene chiamatoesclusivamente dal contratto di delega
- Ogni chiamata delpunto diingresso risultain una chiamata delpunto diingresso
setData
sul contrattoproxy
Inteoria,dovrestiesserein grado diimplementarlo utilizzando "sistema di contrattitipomodulo" . Affinché quanto sopra descrittofunzioni correttamente,ènecessarioimplementare con attenzione un ACL decente (chepuò chiamare qualipunti diingresso).
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 hapubblicato un articolo su questo argomento di recente.
Cryptonomic published an article on exactly this topic recently.
Sto creando uno smart contract che è una sorta diindice di documentifirmati (chepunta aipfsperi documentieffettivi).
E se volessi aggiungere alcunefunzionalità allamia
app
in futuroe dovessi aggiornareil contratto?Capisco che devo stipulare unnuovo contratto,ma chene dici ditrasferire lo stato corrente del vecchio contratto alnuovo?
Costerebbemolto XTZinizializzare unnuovo contratto con ungrande stato?C'è un altro approccioper raggiungere questo obiettivo?