¿Cómo actualizar un contrato inteligente?
3 respuestas
- votos
-
- 2019-02-28
Debido a que los valores detipo
lambda
sepueden almacenar opasar comoparámetros (ya sea comolambda
o comobytes
para serUNPACK
ed),es posible escribir contratos quepueden actualizarsepor símismos ... Estono siempretendrá sentido,pero a vecespuede ser útil.Porejemplo,uno de losprimeros contratos demainnetparecetener unaespecie demecanismo de actualización: https://tzscan.io/KT1R3uoZ6W1ZxEwzqtv75Ro7DhVY6UAcxuK2 .Elpropietario configuradopuede suministrar una lambda a uno de lospuntos deentrada,que se almacenará y anularáel comportamiento del contratoen algunos 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
Descargo de responsabilidad:estees solo unejemplo confineseducativos,no lo useen producción.
Aquí hay un diseño actualizablebastanteprimitivopara un contratointeligente de liquidez:
Contrato de representación
- Mantieneelestado/almacenamiento
- Apunta a un contrato lógico y representa suspuntos deentrada
- Puede sermodificado/actualizadopor su legítimopropietario. Puedeencontrarse conproblemas de descentralización/gobernanza aquí:todos los cambios de contratos lógicos subyacentestodavía se controlanen la cadena,por lo quees una compensación.
- expone unpunto deentrada
setData
,consumidoporel contrato lógicopara aplicar cambios de almacenamiento
Contrato lógico
- Es llamadoexclusivamenteporel contrato de apoderado
- Cada llamada depunto deentrada da como resultado una llamada depunto deentrada
setData
en el contrato deproxy
Enteoría,deberíapoderimplementaresto usandoel 'sistema de contratotipomódulo' . Para que lo descrito anteriormentefuncionebien,debeimplementar cuidadosamente una ACL decente (quiénpuede llamar a quépuntos 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
Cryptonomic publicó un artículo sobreexactamenteestetema recientemente.
Cryptonomic published an article on exactly this topic recently.
Estoy creando un contratointeligente quees unaespecie de índice de documentosfirmados (apuntando aipfspara los documentos reales).
¿Qué sucede si deseo agregar algunafuncionalidad ami
app
en elfuturo ynecesito actualizarel contrato?Entiendo quenecesito hacer unnuevo contrato,pero ¿quétal sitransfieroelestado actual del contrato anterior alnuevo?
¿Le costaríamucho a XTZinicializar unnuevo contrato con ungranestado?¿Existe otroenfoquepara lograresto?