Firma de Transacciones
Principales diferencias
Sección titulada «Principales diferencias»- Las redes con Hooks habilitados permiten obtener las definiciones de red de forma dinámica. Esto permite a los clientes adaptar los tipos de transacciones disponibles, los objetos del ledger, las propiedades y los tipos de valor. Cuando se implementa correctamente, las bibliotecas de firma y codificación no tienen que actualizarse cuando la red añade tipos/propiedades de transacciones/objetos. Las bibliotecas a continuación implementan esto y lo gestionarán por usted.
- Las redes con Hooks habilitados requieren un NetworkID con cada transacción para prevenir la repetición de transacciones en otra cadena. El NetworkID también será devuelto por un comando RPC
server_infoen el camponetwork_id(por ejemplo,21338para Hooks V3 testnet) - Las transacciones en una red con Hooks habilitados pueden necesitar tarifas más altas para entregar una transacción a otra cuenta, basándose en los Hooks que se ejecutarán al salir de la cuenta remitente y al recibir en la cuenta de destino. Una tarifa razonable para satisfacer la ejecución de Hooks puede obtenerse dinámicamente desde un nodo emitiendo el comando
feemientras se proporciona una transacción comotx_blob. Las bibliotecas a continuación implementan esto y lo gestionarán por usted.
JavaScript/Typescript
Sección titulada «JavaScript/Typescript»El paquete npm xrpl-accountlib puede firmar transacciones para redes con Hooks habilitados, ya que ofrece soporte completo de características de red dinámico, obteniendo las definiciones de red en tiempo de ejecución.
El paquete npm xrpl-client se integra perfectamente con xrpl-accountlib (y viene como dependencia) para obtener dinámicamente las definiciones de red mencionadas y los valores de cuenta, ayudando a enviar la transacción.
Ejemplo de Código
Sección titulada «Ejemplo de Código»import { derive, utils, signAndSubmit,} from "xrpl-accountlib"
const wss = 'wss://xahau-test.net'const account = derive.familySeed("s...")
const networkInfo = await utils.txNetworkAndAccountValues(wss, account)
const tx = { TransactionType: "SetHook", Hooks: [ { Hook: { CreateCode: "0061736D01000000011C0460057F7F7F7F7F017E60037F7F7E017E60027F7F017F60017F017E02230303656E76057472616365000003656E7606616363657074000103656E76025F670002030201030503010002062B077F0141B088040B7F004180080B7F0041A6080B7F004180080B7F0041B088040B7F0041000B7F0041010B07080104686F6F6B00030AC4800001C0800001017F230041106B220124002001200036020C41920841134180084112410010001A410022002000420010011A41012200200010021A200141106A240042000B0B2C01004180080B254163636570742E633A2043616C6C65642E00224163636570742E633A2043616C6C65642E22", Flags: 1, HookApiVersion: 0, HookNamespace: "F".repeat(64), HookOn: "F".repeat(58) + "BFFFFE", } }], ...networkInfo.txValues, // ^^ Esto añade valores obtenidos automáticamente: // Sequence, Account, LastLedgerSequence, // Fee (Hooks habilitados: autodetección (desde el ledger))}
/** * Nota: el código anterior y `signAndSubmit` resultan en obtener * y establecer automáticamente una tarifa para usted. Si desea comprobar la tarifa * para min/max/..., obtenga su propia tarifa (string en drops) usando: * utils.networkTxFee(wss, tx) * * por ejemplo: * const Fee = await utils.networkTxFee(wss, tx) * assert(Number(Fee) < 50_000, "Auto fee above 50k drops, abort") * Object.assign(tx, { Fee, }) */
const submitted = await signAndSubmit(tx, wss, account)
console.log(submitted)