Saltearse al contenido

AIP-88 - Transacciones de Epílogo de Bloque

AIP-88 cubre transacciones de epílogo de bloque, que son un nuevo tipo de transacción que dan información sobre el bloque después de que ha sido ejecutado. Estas transacciones solo pueden ser creadas por el consenso y no son iniciadas por usuarios. Contienen información sobre el uso de gas en el bloque y contendrán más información en el futuro.

Reemplaza el tipo de transacción anterior StateCheckpoint, que se usaba para “a veces” señalar el final de un bloque. La nueva transacción BlockEpilogue es ahora a veces creada al final de un bloque en su lugar, y está garantizado que sea la última transacción en el bloque. El único caso en que esto no se aplica es el último bloque de una época, que no tendrá transacción BlockEpilogue.

¿Qué hay en la Transacción de Epílogo de Bloque?

Sección titulada «¿Qué hay en la Transacción de Epílogo de Bloque?»

La transacción de epílogo de bloque contiene un enum BlockEndInfo. Está diseñado deliberadamente como un enum para que pueda ser extendido en el futuro sin romper código existente. La versión actual es V0 y contiene los siguientes campos:

module 0x1::epilogue {
enum BlockEndInfo {
V0 {
/// Whether block gas limit was reached
block_gas_limit_reached: bool,
/// Whether block output limit was reached
block_output_limit_reached: bool,
/// Total gas_units block consumed
block_effective_block_gas_units: u64,
/// Total output size block produced
block_approx_output_size: u64,
},
}
}

Estos principalmente contienen información sobre el uso de gas en el bloque para propósitos de depuración.

La salida JSON se verá así:

{
"version":"1912",
"hash":"0x54a8efc93fc94f5b545dadb63da3d4dc192125c717b336dc446d55a5b553913f",
"state_change_hash":"0xafb6e14fe47d850fd0a7395bcfb997ffacf4715e0f895cc162c218e4a7564bc6",
"event_root_hash":"0x414343554d554c41544f525f504c414345484f4c4445525f4841534800000000",
"state_checkpoint_hash":"0x841a43956ca09a02b1c1cdadc65f24c390170aa666015a2e8f7ec5c9d6a3875f",
"gas_used":"0",
"success":true,
"vm_status":"Executed successfully",
"accumulator_root_hash":"0x6561976b4560ff25239dffc6cada70e7008dd42fc4d3df2eca6a86b6d2ec384d",
"changes":[],
"timestamp":"1719263322836578",
"block_end_info": {
"block_gas_limit_reached":false,
"block_output_limit_reached":false,
"block_effective_block_gas_units":0,
"block_approx_output_size":1163
},
"type":"block_epilogue_transaction"
}

Si procesas transacciones en tu dApp, y esperas que la última transacción en un bloque sea una StateCheckpoint, necesitarás actualizar tu código para manejar la transacción BlockEpilogue en su lugar.

Ten en cuenta que, la transacción BlockEpilogue está garantizada que sea la última transacción de un bloque excepto para el último bloque de una época, que no tendrá una transacción BlockEpilogue.

¿Qué aplicaciones probablemente se vean afectadas?

Sección titulada «¿Qué aplicaciones probablemente se vean afectadas?»

Las aplicaciones que indexan todas las transacciones como exploradores de bloques y procesadores de indexación de exchanges centralizados pueden verse afectadas. Sin embargo, la mayoría de estas son informativas y no afectan la funcionalidad core de la dApp.

¿Qué puedo hacer para procesar el nuevo tipo de transacción?

Sección titulada «¿Qué puedo hacer para procesar el nuevo tipo de transacción?»

Si estás usando el SDK de Go de Aptos o el SDK de TypeScript de Aptos, puedes actualizar a la última versión, que automáticamente manejará el nuevo tipo de transacción.