Como atualizar um contrato inteligente?
3 respostas
- votos
-
- 2019-02-28
Como os valores dotipo
lambda
podem sermantidosem armazenamento oupassado comoparâmetros (comolambda
ou comobytes
para serDescompactar
Ed),épossível escrever contratos quepodem se atualizar ...issonem semprefará sentido,mas às vezespode ser útil.Porexemplo,um dos contratos de Mainnetmuito cedopareceter umaespécie demecanismo de atualização: https://tzscan.io/Kt1r3uoz6w1zxewzqtv75ro7dhvy6uacxuk2 .Oproprietário configuradopodefornecer um lambda a um dospontos deentrada,que será colocadoem armazenamentoe substituirá o comportamento do contratoem alguns casos.
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
.
Isenção de responsabilidade: Este é apenas umexemploparafinseducacionais,não o usenaprodução.
Aquiestá um design atualizadobastanteprimitivopara um contratointeligente de liquidez:
contratoproxy
- detém oestado/armazenamento
- apontapara um contrato lógicoe proxies seuspontos deentrada
- pode ser alterado/atualizado,pelo seu legítimoproprietário. Vocêpodeterem questões de descentralização/governança aqui -todas as alterações de contrato lógico subjacente ainda são rastreadasna cadeia,porisso é umtrade-off.
- expõe umponto deentrada
setData code>,consumidopelo contrato lógicopara aplicar alterações de armazenamento
contrato lógico
- é chamadoexclusivamentepelo contratoproxy
- Cada chamadaponto deentrada,resultaem um
SetData Code> Ponto deentradano contrato deproxy
Emteoria,você deve ser capaz deimplementarisso usando a liquidez "Sistema de contrato semelhante aomódulo" . Para o acima descritoparafuncionarbem,você deveimplementar cuidadosamente uma ACL decente (quempode ligar quaispontos deentrada).
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
Cryptononomic publicou um artigo em exatamenteestetópico recentemente.
Cryptonomic published an article on exactly this topic recently.
Estou construindo um contratointeligente que é umaespécie de um índice de documentos assinados (apontandopara IPFspara os documentos reais).
E seeu quiser adicionar algumafuncionalidade aomeu aplicativo
app
no caminhoe precisar atualizar o contrato?Euentendo queprecisofazer umnovo contrato,mas comotransferir oestado atual do contrato antigopara onovo?
Custaria que ummonte de XTZinicializasse umnovo contrato com umgrandeestado?Existe outra abordagempara conseguirisso?