Saltearse al contenido

prepare

Transacciones Emitidas

(Requiere la enmienda HooksUpdate2.)

  • Lee una transacción serializada parcial de read_ptr/read_len. La entrada debe contener como mínimo el TransactionType y todos los campos requeridos por ese tipo de transacción, pero los campos específicos de emisión incluidos serán sobreescritos.
  • Inyecta automáticamente todos los campos requeridos para la emisión: Account (la cuenta Hook), Sequence (0), SigningPubKey (todo ceros), Fee (calculada), FirstLedgerSequence (ledger actual + 1), LastLedgerSequence (ledger actual + 5) y EmitDetails.
  • Escribe el blob de transacción completo y listo para emisión en write_ptr.
  • La salida puede pasarse directamente a emit().
  • Se debe llamar a etxn_reserve() antes de prepare().
int64_t prepare (
uint32_t write_ptr,
uint32_t write_len,
uint32_t read_ptr,
uint32_t read_len
);
etxn_reserve(1);
// Construir una transacción de pago mínima (TransactionType + campos requeridos únicamente)
uint8_t tx[256];
// ... rellenar tx con TransactionType, Destination, Amount ...
int64_t tx_len = /* tamaño de tx */;
// prepare() rellena Account, Sequence, Fee, EmitDetails, etc.
uint8_t prepared[512];
int64_t prepared_len = prepare(prepared, sizeof(prepared), tx, tx_len);
if (prepared_len < 0)
rollback("Prepare failed", 14, prepared_len);
// emit() envía la transacción completamente formada
uint8_t txid[32];
if (emit(txid, 32, prepared, prepared_len) != 32)
rollback("Emit failed", 11, EMISSION_FAILURE);
NombreTipoDescripción
write_ptruint32_tPuntero a un buffer para recibir el blob de transacción preparado completo.
write_lenuint32_tLongitud del buffer de escritura. Debe ser suficientemente grande para contener la transacción preparada (tamaño de entrada + campos inyectados).
read_ptruint32_tPuntero a una transacción serializada parcial. Debe incluir TransactionType y todos los campos requeridos específicos del tipo.
read_lenuint32_tLongitud de la transacción de entrada.
TipoDescripción
int64_tEn caso de éxito, el número de bytes escritos en write_ptr (el tamaño del blob de transacción preparado). El valor devuelto es la longitud de la transacción preparada. Pasa el buffer original como read_ptr y la longitud devuelta como read_len al llamar a emit().

Si es negativo, un error:
OUT_OF_BOUNDS — los punteros/longitudes quedan fuera de la memoria del hook.
PREREQUISITE_NOT_MET — se debe llamar a etxn_reserve() antes de prepare().
INVALID_ARGUMENT — el blob de entrada no es una transacción serializada válida, o la transacción no puede prepararse (p. ej. falló el cálculo de la comisión).
INTERNAL_ERROR — fallo al generar EmitDetails o al re-serializar la transacción.