mirror of
https://github.com/XRPLF/rippled.git
synced 2026-09-27 07:26:51 +00:00
Add the transaction handling for `EscrowCreate.Bytecode`/`Data` and `EscrowFinish.Gas`, gated on `featureSmartEscrow`. The field and result-code plumbing landed in #8157. EscrowCreate: * `Bytecode` joins `FinishAfter` and `Condition` as a way to say how an escrow completes, but always needs a `CancelAfter`: nothing else can free the funds if the contract never accepts. * `Data` requires `Bytecode` and is capped at `kMaxWasmDataLength`. * Bytecode is capped at the voted `BytecodeSizeLimit`, and refused outright when fee voting has zeroed `GasLimit` or `BytecodeSizeLimit`. * The fee is ten base fees plus five drops per byte. * The owner reserve is one increment per 500 bytes beyond the first 500, on top of the increment every escrow costs. EscrowCancel and EscrowFinish refund what was taken. EscrowFinish: * `Gas` is bounded by the voted `GasLimit` and costs `GasPrice` micro-drops each. * `Gas` and the escrow's `Bytecode` must both be present or both absent (tefBYTECODE_NOT_INCLUDED / tefNO_BYTECODE). * The destination and deposit-preauth checks move ahead of the condition check, so a contract never runs against a destination that cannot receive. The WASM engine is not in this build, so nothing runs the bytecode: creating, funding and cancelling a Smart Escrow works, and finishing one reports tecFAILED_PROCESSING at the TODO where the contract would run. The gas and return-code metadata, tecBYTECODE_REJECTED, and the `Data` a rejected contract leaves behind all arrive with the engine. Reachable only under `featureSmartEscrow`, which is `Supported::No`.