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.
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==
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:
- Restore the Wasm entry from the next step (if it exists).
- Upload a simple smart contract's Wasm bytecode to the network that allows for
Temporary
ledger entries to be created, keyed usingBytes
SCVal
s. - Create's a contract instance from the previously uploaded Wasm bytecode.
- 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 TransactionEnvelope
s y sus correspondientes Hash
es 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 TransactionEnvelope
s en las líneas 1, 3, 5 y 7.
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'