The code seems correct to me and don't add technical debt
Palmer Sébastien (578a1bdc) at 20 Mar 13:28
TezosX/Tezt: switch CRAC runner tests from delayed inbox to tezlink
... and 126 more commits
Palmer Sébastien (b8647b3e) at 20 Mar 13:27
TezosX/Tezt: switch CRAC runner tests from delayed inbox to tezlink
... and 1 more commit
Given that this test checks a simple case that wasn’t covered before, I think it might be a good idea to include it.
The tests modified in !21273 are actually quite separate from the original issue; it was just a blocker.
Tezos operation injection was broken in tezt scenarios as demonstrated by !21296.
This fail is caused by 2 things:
Instant confirmations are enabled by default for tezt scenarios when:
~preconfirmation_stream_enabled: (Option.value ~default:(not enable_multichain) instant_confirmations)
And tick() function of the tx queue (used to push received transaction to the block producer), is not called for tezos operation injection.
Call already present tick() function in etherlink/bin_node/lib_dev/rpc_server.ml after add_operation.
Test writter in !21296 by @spalmer25 passes after being rebased on this MR.
Palmer Sébastien (7bf17492) at 20 Mar 10:44
fix: Remove unused variable in ConsensusOpsTable.tsx
Notice that waiting before producing the block solve the issue, but that's not a satisfying solution.
let* _tx_hash = wait_for_tx_in_tx_queue in
let* () = Lwt_unix.sleep 10. in
let*@ nb_txs = Rpc.produce_block sequencer inWhen a Michelson operation is injected via the /tezlink endpoint on a TezosX sequencer (--with-runtimes Tezos), a produce_block called right after injection can produce an empty block: the transaction is not included despite the injection succeeding.
This does not happen in pure --tezlink mode, only in TezosX (dual EVM+Michelson runtime) mode.
This issue has been discovered in MR !21273. A few unsuccessful attempts were made there.
A successfully injected Michelson operation should be available for the next block production. An operation that silently disappears between injection and block production means the sequencer cannot reliably process Michelson transactions in TezosX mode.
The test test_tez_transfer performs a minimal reproduction:
--with-runtimes Tezos
bootstrap1 to bootstrap2 via the /tezlink endpointtx_queue_add_transaction eventproduce_block
Step 4 produces an empty block (0 transactions) and step 5 fails.
dune exec etherlink/tezt/tests/main.exe -- "Transfer for Michelson runtime"
docs/protocols/alpha.rst for the protocol and the environment, CHANGES.rst at the root of the repository for everything else).Reviewers field below.Assignee the next person who should take action on that MR
Palmer Sébastien (7c84d0f0) at 20 Mar 09:13
TezosX: add tez transfer test on Michelson runtime
Palmer Sébastien (a99262c1) at 20 Mar 09:03
Etherlink: add tez transfer test on Michelson runtime
Using wait_for_tx_queue_transaction_confirmed gives the same log but with an additional error:
[error] Timeout waiting for tx_queue_transaction_confirmed.v0 of sequencer_evm_node1
Palmer Sébastien (060f4942) at 19 Mar 15:33
Try fix with wait_for_tx_queue_transaction_confirmed
I've pushed the suggestion, but it doesn't work:
[client1] ./octez-client --endpoint http://127.0.0.1:52023/tezlink --base-dir /tmp/tezt-1871508/1/client1 --wait none originate contract crac_mini_scenarios_multi_run_caller transferring 0 from bootstrap5 running michelson_test_scripts/mini_scenarios/multi_run_caller.tz --init 'Pair 0 (Pair False {})' --burn-cap 1 --force
[node1] Mar 19 15:54:34.772 NOTICE │ operation ooTTyeznVPbH8T3sv3SsupnfJRNYJJcdqY9FwDvUKNkVP7kmPkj injected
[sc-rollup-node1] Mar 19 15:54:34.774 NOTICE │ [bootstrap1] Injected operations in
[sc-rollup-node1] Mar 19 15:54:34.774 NOTICE │ ooTTyeznVPbH8T3sv3SsupnfJRNYJJcdqY9FwDvUKNkVP7kmPkj:
[sc-rollup-node1] Mar 19 15:54:34.774 NOTICE │ 1. publishing 1 messages to smart rollups' inbox
[client1] Node is bootstrapped.
[client1] Estimated gas: 1039000 units (will add 100 for safety)
[client1] Estimated storage: 257 bytes added (will add 20 for safety)
[client1] Operation successfully injected in the node.
[client1] Operation hash is 'ooHtx92CHwdYuBJg1jPkuxj2qE6wDT9th8mRgNdok6YebUNDfT1'
[client1] NOT waiting for the operation to be included.
[client1] Use command
[client1] octez-client wait for ooHtx92CHwdYuBJg1jPkuxj2qE6wDT9th8mRgNdok6YebUNDfT1 to be included --confirmations 1 --branch BLBR33qkvqGwHerq6VMXwtZSPUgjxS1yjMCdmAMdtCbKuLSgWGd
[client1] and/or an external block explorer to make sure that it has been included.
[client1] This sequence of operations was run:
[client1] Manager signed operations:
[client1] From: tz1ddb9NMYHZi5UzPdzTZMYQQZoMub195zgv
[client1] Fee to the baker: ꜩ0.10401
[client1] Expected counter: 1
[client1] Gas limit: 1039100
[client1] Storage limit: 277 bytes
[client1] Origination:
[client1] From: tz1ddb9NMYHZi5UzPdzTZMYQQZoMub195zgv
[client1] Credit: ꜩ0
...
[client1] Initial storage: (Pair 0 (Pair False {}))
[client1] No delegate for this contract
[client1] This origination was successfully applied
[client1] Originated contracts:
[client1] KT1NhQDcAtBRHjXozE3GgpCw4yCQ9T7GiYf4
[client1] Consumed gas: 1039000
[client1] New contract KT1NhQDcAtBRHjXozE3GgpCw4yCQ9T7GiYf4 originated.
[client1] Contract memorized as crac_mini_scenarios_multi_run_caller.
client1 exited with code 0.
[curl#sequencer_evm_node1] curl -X POST -H 'Content-Type: application/json' -s http://127.0.0.1:53971/private -d '{
[curl#sequencer_evm_node1] "jsonrpc": "2.0",
[curl#sequencer_evm_node1] "method": "produceBlock",
[curl#sequencer_evm_node1] "id": "0",
[curl#sequencer_evm_node1] "params": {}
[curl#sequencer_evm_node1] }'
[sequencer_evm_node1] [2026-03-19T14:54:36Z INFO octez_evm_node_wasm_runtime::write_debug] Storing block 1 at 2026-03-19T14:54:06Z containing 0 transaction(s) for 0 gas used.
[sequencer_evm_node1] [2026-03-19T14:54:36Z INFO octez_evm_node_wasm_runtime::write_debug] Storing block 1 at 2026-03-19T14:54:06Z containing 0 transaction(s) for 0 gas used.
[sequencer_evm_node1] Mar 19 15:54:36.184 NOTICE │ head is now 1, applied in 17.294ms
Storing block 1 at 2026-03-19T14:54:06Z containing 0 transaction
Palmer Sébastien (17ee10c0) at 19 Mar 14:53
Try fix with wait_for_tx_queue_add_transaction
... and 1 more commit
Some tests are failing.
The issue is part of the Michelson operation inclusion in block.
Operations produced by Client.transfer or Client.originate_contract are not included in the block produced afterward.
A quick fix would be the following:
let* () = Lwt_unix.sleep 10. in
let*@ _ = Rpc.produce_block sequencer inBut that is not good fix
The change meets the expectation of ADR L2-1004. LGTM