Saltar al contenido principal

Configuraciones de Soroban

Soroban tiene una gran colección de configuraciones almacenadas en el ledger que se pueden modificar a través de un voto de validator. Aquí puedes descubrir cómo proponer una nueva actualización de configuraciones así como cómo examinar una actualización propuesta. También puedes consultar la página de Comandos para más detalles sobre los comandos de stellar-core utilizados a continuación.

Proponer una Actualización de Configuraciones

Esta sección describirá cómo proponer una actualización de configuraciones, pero echa un vistazo a la página de Actualización de la Red para más información sobre cómo funciona internamente el mecanismo de actualización de configuraciones.

información

Si se te pide que votes por una actualización, por favor pasa a la sección Examinar una Actualización Propuesta para detalles sobre cómo lograr eso.

Script de Ayuda

Un script para ayudarte a crear las transacciones a continuación está disponible en el repositorio de GitHub de stellar-core, con detalles de uso también disponibles. Hemos guardado la información a continuación por ahora, porque es importante estar consciente de cómo funciona el proceso subyacente para generar las transacciones en caso de que el script tenga algunos problemas. Hemos guardado la información a continuación por ahora, porque es importante estar al tanto de cómo funciona el proceso subyacente para generar las transacciones en caso de que el script tenga algunas incidencias.

1. Crear un Conjunto de Actualización

La herramienta stellar CLI permite el uso de un archivo de entrada JSON para codificar una colección de configuraciones de Soroban en una cadena codificada en base64 que representa el tipo XDR ConfigUpgradeSet. Puedes usar los archivos pubnet_phase1.json y pubnet_phase2.json como punto de partida para formular tu propuesta de actualización. También puedes extraer directamente de un nodo core en ejecución usando http-command 'sorobaninfo?format=upgrade_xdr' | stellar-xdr decode --type ConfigUpgradeSet --output json-formatted. Esto te permitirá obtener las configuraciones exactas que se están ejecutando en ese nodo core en formato JSON, facilitando el cambio solo del valor que deseas. Una vez que tengas tu archivo JSON con valores actualizados, usa el siguiente comando para crear el conjunto de actualización XDR requerido:

stellar xdr encode --type ConfigUpgradeSet path/to/upgrade.json

La salida del archivo JSON de la fase 2, por ejemplo, se vería así:

AAAAAgAAAAEAAAAAHc1lAAAAAAAF9eEAAAAAAAAAABkCgAAAAAAAAgAAAMgAB6EgAAAAfQABEXAAAAAoAAIIAAAAABkAAQQAAAAAAAAAGGoAAAAAAAAnEAAAAAAAAAb6AAAAAukO3QD///////0NfwAAAAAAAOFfAAAD6A==
información

La stellar CLI se puede instalar usando brew o cargo:

brew install stellar-cli
# OR
cargo install --locked stellar-cli --features opt

También puedes descargar un binario precompilado de la última versión para tu sistema desde GitHub.

2. Generar Transacciones de Actualización de Configuraciones

Puedes usar el comando get-settings-upgrade-txs de stellar-core para crear una serie de transacciones que:

  1. Restore the Wasm entry from the next step (if it exists).
  2. Upload a simple smart contract's Wasm bytecode to the network that allows for Temporary ledger entries to be created, keyed using Bytes SCVals.
  3. Create's a contract instance from the previously uploaded Wasm bytecode.
  4. Invoke the newly created contract instance's write function with your (validated) base64-encoded upgrade set.

Se requieren cuatro argumentos para este comando:

  • PUBLIC_KEY: (posicional) la clave pública que será la fuente para estas transacciones. Ten en cuenta que estarás enviando transacciones, así que la cuenta para la clave pública especificada debe existir y tener fondos para pagar las tarifas de transacción.
  • SEQUENCE_NUMBER: (posicional) el número de secuencia actual para la clave pública especificada.
  • NETWORK_PASSPHRASE: (posicional) la frase de contraseña de la red a la que se enviarán estas transacciones.
  • --xdr AAAA...: el conjunto de actualización codificado en base64 generado en el paso 1.
  • --signtxs: (opcional) si se proporciona, este comando te pedirá una clave secreta y devolverá transacciones firmadas que pueden ser enviadas a la red de inmediato.

Por ejemplo, el comando para la actualización de la fase 2 podría haber sido así:

stellar-core get-settings-upgrade-txs \
GAUQW73V52I2WLIPKCKYXZBHIYFTECS7UPSG4OSVUHNDXEZJJWFXZG56 \
73014444032 \
"Public Global Stellar Network ; September 2015" \
--xdr AAAAAgAAAAE... \
--signtxs

La salida de este comando incluirá tres conjuntos de TransactionEnvelopes y sus correspondientes Hashes de transacción, seguidos de una cadena XDR base64 codificada ConfigUpgradeSetKey:

# restore Wasm `TransactionEnvelope` (truncated here)
AAAAAgAAAABSvbro8P/XAQP+eTvW1TnB4+r4vZx5fKj+DsWuWN3gjQX14QAAA...LgymJ36XIBrUVMU2wg=
# restore Wasm transaction `Hash`
3a2457d3fc081ab3a72dfe7ee2236f3a282c62f21d7e3dbdb5b13ac0d09c8647
# upload Wasm `TransactionEnvelope` (truncated here)
AAAAAgAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEc...wF9wL68IAAAAdkJxSgpyRStTvbSA9jgs=
# upload Wasm transaction `Hash`
19c49f18e5442db9d626f7485c34ecb0cd938034255515099b37acebdb6677a7
# create contract instance `TransactionEnvelope` (truncated here)
AAAAAgAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEc...AAd0OB3n3Yadews=
# create contract instance transaction `hash`
9e70cbff631247638fae96b9d996d8d22b6fa75208380d5f5d714a57c0a90947
# invoke contract `TransactionEnvelope` (truncated here)
AAAAAgAAAABi/B0L0JGythwN1lY0aypo19NHxvLCyO5tBEc...F9wX14QAAAAARAAAAAwAAAAAAAAAAAAAAAQAAAAAAAAAYAAAAAAAAAAGd/IhWQcE2UdzIof7ygqCuAmYD8ycsJbB
# invoke contract transaction `Hash`
4f6457d3fc081ab3a72dfe7ee2236f3a282c62f21d7e3dbdb5b13ac0d09c8647
# base64-encoded `ConfigUpgradeSetKey`
nfyIVkHBNlHcyKH+8oKgrgJmA/MnLCW3E4Fhg4XYTkqZa2MyqzRdB2+mN3DOKUFKtZIAXp6o3DHrkgR0mo7rUw==

3. Enviar Transacciones de Actualización de Configuraciones

Estas cuatro transacciones pueden ser enviadas a la red a través de tu nodo. Reemplaza los marcadores de posición a continuación con los TransactionEnvelopes en las líneas 1, 3, 5 y 7.

nota

Si no proporcionaste el parámetro --signtxs al comando get-settings-upgrade-txs, no olvides firmarlas antes de enviarlas a la red.

http-command 'tx?blob=<LINE_1_OUTPUT>'
http-command 'tx?blob=<LINE_3_OUTPUT>'
http-command 'tx?blob=<LINE_5_OUTPUT>'
http-command 'tx?blob=<LINE_7_OUTPUT>'

4. Verificar Actualizaciones Propuestas

Puedes verificar que las actualizaciones propuestas han sido configuradas usando el comando dumpproposedsettings de stellar-core, proporcionando la cadena XDR ConfigUpgradeSetKey de la línea 9 arriba:

http-command 'dumpproposedsettings?blob=<LINE_9_OUTPUT>'

5. Programar las Actualizaciones

Ahora puedes programar la actualización en todos los validators requeridos usando el comando upgrades de stellar-core, proporcionando la salida ConfigUpgradeSetKey de la línea 9 arriba y un tiempo acordado en el futuro:

http-command 'upgrades?mode=set&upgradetime=YYYY-MM-DDTHH:MM:SSZ&configupgradesetkey=<LINE_9_OUTPUT>'

6. Actualizar Stellar Expert

Uno de los métodos más utilizados para "seguir" una actualización de las configuraciones de Soroban de la red es la página del Historial de Protocolo en stellar.expert.

Para asegurarte de que esa página se actualice con las actualizaciones propuestas, por favor completa un PR contra este repositorio.

Depuración

Una vez que se ejecuten las cuatro transacciones, deberías ver la actualización propuesta al ejecutar el comando dumpproposedsettings (ver paso 4 arriba). Si no lo haces, entonces uno o más de los transacciones anteriores fallaron durante la aplicación, o la actualización es inválida. Si alguna de las transacciones anteriores falla durante el envío, deberías recibir un TransactionResult como respuesta junto con el motivo de la falla.

Si alguna de las transacciones anteriores falla durante la presentación, deberías recibir un TransactionResult como respuesta junto con el motivo de la falla. La falla será más probablemente debido a una de las siguientes razones:

  • Los recursos son demasiado bajos. Necesitarás aumentar los recursos codificados en SettingsUpgradeUtils.cpp.
  • La tarifa o la tarifa reembolsable son demasiado bajas. Necesitarás aumentarlas en SettingsUpgradeUtils.cpp.
  • Wasm ha caducado. Necesitarás restaurar el Wasm.

Deberías confirmar qué causó la falla viendo el TransactionResult de la transacción fallida usando el Stellar Lab o un explorador de bloques.

Si las transacciones tuvieron éxito pero el comando dumpproposedsettings todavía devuelve un error, entonces la actualización es inválida. La reportación de errores aquí necesita ser mejorada, pero las comprobaciones de validez ocurren aquí.

Examinar una Actualización Propuesta

Puedes usar el comando dumpproposedsettings de stellar-core junto con una cadena XDR ConfigUpgradeSetKey codificada en base64 para consultar una actualización propuesta:

http-command 'dumpproposedsettings?blob=A6MvjFLujnqaZa5hacafWyYwhpk4cgRpyu0z6ilZ0pm1S7fmjSNnsyjGwGodLGiD8ss8S1AHiOBBb6GQbOeMbw=='

Examinar Configuraciones Actuales

También puedes obtener las configuraciones actuales de Soroban para comparar usando sorobaninfo de stellar-core.

http-command 'sorobaninfo?format=detailed'