Skip to content

hegota-testnet docs: three points that don't match the deployed chain / code #7262

Description

@ayushsingh82

Found while building a TypeScript frame-transaction library against the hegota-testnet chain. All three verified against branch hegota-testnet and the live https://rpc1.privacy.ethrex.xyz (web3_clientVersion = ethrex/v23.0.0-hegota-testnet-31b5322665.../rustc-v1.93.1). Not blocking — but each would mislead someone implementing from the docs.

1. docs/eip-8141.md — the "Wire encoding" section is the pre-composition layout

It shows:

0x06 || rlp([chain_id, nonce, sender, frames, signatures,
             max_priority_fee_per_gas, max_fee_per_gas,
             max_fee_per_blob_gas, blob_versioned_hashes])

and a frame as [mode, flags, target, gas_limit, value, data], and the sig_hash section repeats the same flat form.

The deployed chain (ethrex's own scripts/hegota-testnet/frametx.py) accepts:

0x06 || rlp([chain_id, nonce_keys, nonce_seq, sender, frames, signatures,
             fees, blob_hashes, recent_root_references])
fees  = rlp([max_priority_fee, max_fee, max_blob_fee])
frame = [mode, flags, target_or_empty, limits, value, data]   # limits = [execution, state]

i.e. EIP-8250 splits nonce → nonce_keys, nonce_seq, EIP-8037 turns gas_limit → limits, the three fee fields nest into a fees list, and EIP-8272 appends recent_root_references. A builder following §"Wire encoding" produces bytes the node rejects at RLP decode. hegota-testnet-spec.md describes the EIP-8272 change, but the eip-8141.md Wire encoding section neither reflects the composition nor points to where it is documented.

2. docs/eip-8141.md — FRAME_TX_INTRINSIC_COST documented as 15000

§"Gas Accounting" → "Total gas limit":

mandatory_gas = FRAME_TX_INTRINSIC_COST   # 15000

crates/common/types/transaction.rs:2195 is pub const FRAME_TX_INTRINSIC_COST: u64 = 12000; — with the compile-time assert!(FRAME_TX_INTRINSIC_COST == 12_000) at :2221 and the comment at :2190 ("down from the earlier 15000"). The same block's standard_gas_limit = mandatory_gas + data_cost + Σ(frame.gas_limit) also omits the Σ frame.limits.state and recent_root_reference_intrinsic_gas terms that FrameTransaction::standard_gas_limit() adds.

3. docs/hegota-testnet-spec.md:74 lists debug as served, but the endpoint refuses it

$ curl -s https://rpc1.privacy.ethrex.xyz -H 'content-type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"debug_getRawTransaction","params":["0x0000000000000000000000000000000000000000000000000000000000000000"]}'
{"jsonrpc": "2.0", "id": 1, "error": {"code": -32601, "message": "debug_getRawTransaction is not available on this endpoint"}}

The JSON-RPC row lists eth, net, web3, txpool, debug and ethrex. debug_* is refused with -32601, and eth_getRawTransactionByHash is -32601 Method not found too — so there is no way to get a transaction's canonical bytes from this endpoint; they have to be reconstructed from the decoded JSON. Either the proxy config or the doc row is off. (Exposing eth_getRawTransactionByHash, which most clients serve, would also be a clean fix.)


Happy to send a docs PR for 1 and 2 if that's useful.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions