The contract can be right and my DuskVM call can still die over two characters.
DuskVM inputs are not sent as readable JSON. They are rkyv-encoded bytes, and Forge uses the contract’s off-chain data driver to turn something human like 42 into the bytes the contract actually expects.
The awkward part is the handoff. Forge gives me that encoded value as hex with a 0x prefix. An SDK may want that prefix kept. Rusk Wallet’s --fn-args expects me to strip it.
So I can test the contract logic, verify the WASM, encode the argument correctly, then break the live call by passing the exact same bytes in the wrong transport shape.
That is the integration bug I would guard hardest. Not because it is dramatic, but because everything upstream looks healthy. The function exists. The schema is right. The value is right. The failure lives in the boundary between the data driver and the sender.
If I were building a DuskVM app, I would normalize call arguments once and test that boundary against every submission path I support.
Two characters should never be the reason a valid contract action becomes a failed user transaction.
#dusk $DUSK @Dusk
DuskVM inputs are not sent as readable JSON. They are rkyv-encoded bytes, and Forge uses the contract’s off-chain data driver to turn something human like 42 into the bytes the contract actually expects.
The awkward part is the handoff. Forge gives me that encoded value as hex with a 0x prefix. An SDK may want that prefix kept. Rusk Wallet’s --fn-args expects me to strip it.
So I can test the contract logic, verify the WASM, encode the argument correctly, then break the live call by passing the exact same bytes in the wrong transport shape.
That is the integration bug I would guard hardest. Not because it is dramatic, but because everything upstream looks healthy. The function exists. The schema is right. The value is right. The failure lives in the boundary between the data driver and the sender.
If I were building a DuskVM app, I would normalize call arguments once and test that boundary against every submission path I support.
Two characters should never be the reason a valid contract action becomes a failed user transaction.
#dusk $DUSK @Dusk