Transaction gas payment missing

i want to send tx use address balance as gas, and i keep gas payment is empty, but i get the error Error checking transaction input objects: Transaction gas payment missing", details: b"\x08\x03\x12IErro, any help about this err, thanks

let tx = TransactionKind::ProgrammableTransaction(builder.finish());
    TransactionData::V1(TransactionDataV1 {
        kind: tx,
        sender,
        gas_data: GasData {
            payment: vec![], // Empty - use address balance for gas
            owner: sender,
            price: rgp,
            budget: 10_000_000,
        },
        expiration: TransactionExpiration::ValidDuring {
            min_epoch: Some(0),
            max_epoch: Some(0),
            min_timestamp: None,
            max_timestamp: None,
            chain: chain_id,
            nonce,
        },
    })

The Expiration of TranscationData is necessary

You need to fill in the min and max timestamps

Empty gas payment only works when the transaction is using the address-balance gas flow. For normal gas-object transactions, gas_data.payment must contain actual SUI gas coin object references.

In the snippet, the important part is not just:

payment: vec![]

The expiration also has to be valid for address-balance gas. In that thread, the relevant answer was that the transaction needs valid timestamp bounds. Setting both epoch bounds to 0 and leaving timestamps empty is not a valid “address balance gas” setup for execution.

So the likely fixes are:

  • If you want address-balance gas:

    • keep gas payment empty,
    • make sure the network/protocol supports address balances,
    • set a valid ValidDuring expiration,
    • include valid min/max timestamps,
    • ensure the sender has enough SUI in address balance.
  • If you want normal SUI coin gas:

    • do not leave gas_data.payment empty,
    • select one or more real SUI coin object refs,
    • include those object refs in the gas payment vector.

The error Transaction gas payment missing usually means the node is validating the transaction as one that still needs coin-object gas, or the address-balance transaction metadata/expiration is incomplete.