prepare
Conceptos
Sección titulada «Conceptos»Comportamiento
Sección titulada «Comportamiento»(Requiere la enmienda HooksUpdate2.)
- Lee una transacción serializada parcial de
read_ptr/read_len. La entrada debe contener como mínimo elTransactionTypey 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) yEmitDetails. - 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 deprepare().
- Esta función toma un objeto JSON de transacción y lo prepara para su emisión.
- La transacción debe estar completa excepto por los campos Account, Sequence, SigningPubKey, Fee, FirstLedgerSequence, LastLedgerSequence y EmitDetails.
Definición
Sección titulada «Definición»int64_t prepare ( uint32_t write_ptr, uint32_t write_len, uint32_t read_ptr, uint32_t read_len);function prepare( txJson: Record<string, any> | Transaction ): ErrorCode | Record<string, any> | TransactionEjemplo
Sección titulada «Ejemplo»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 formadauint8_t txid[32];if (emit(txid, 32, prepared, prepared_len) != 32) rollback("Emit failed", 11, EMISSION_FAILURE);const prepared_txn = prepare({ TransactionType: "Payment", Destination: util_raddr(p1address_ns), Amount: parseFloat(drops_sent)*2 })Parámetros
Sección titulada «Parámetros»| Nombre | Tipo | Descripción |
|---|---|---|
write_ptr | uint32_t | Puntero a un buffer para recibir el blob de transacción preparado completo. |
write_len | uint32_t | Longitud del buffer de escritura. Debe ser suficientemente grande para contener la transacción preparada (tamaño de entrada + campos inyectados). |
read_ptr | uint32_t | Puntero a una transacción serializada parcial. Debe incluir TransactionType y todos los campos requeridos específicos del tipo. |
read_len | uint32_t | Longitud de la transacción de entrada. |
| Nombre | Tipo | Descripción |
|---|---|---|
| txJson | Record<string, any> | Transaction | El JSON de la transacción; debe ser una transacción completa excepto por Account (siempre la cuenta Hook). |
Código de retorno
Sección titulada «Código de retorno»| Tipo | Descripción |
|---|---|
| int64_t | En 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. |
| Tipo | Descripción |
|---|---|
| ErrorCode | Record<string, any> | Transaction | Devuelve un ErrorCode si hay un error, o el JSON de la transacción preparada o el objeto Transaction. |