submit_finality_proof_ex: TxDescriptor<{
    current_set_id: bigint;
    finality_target: {
        digest: DigestItem[];
        extrinsics_root: FixedSizeBinary<32>;
        number: number;
        parent_hash: FixedSizeBinary<32>;
        state_root: FixedSizeBinary<32>;
    };
    is_free_execution_expected: boolean;
    justification: {
        commit: {
            precommits: {
                id: FixedSizeBinary<32>;
                precommit: {
                    target_hash: FixedSizeBinary<32>;
                    target_number: number;
                };
                signature: FixedSizeBinary<64>;
            }[];
            target_hash: FixedSizeBinary<32>;
            target_number: number;
        };
        round: bigint;
        votes_ancestries: {
            digest: DigestItem[];
            extrinsics_root: FixedSizeBinary<32>;
            number: number;
            parent_hash: FixedSizeBinary<32>;
            state_root: FixedSizeBinary<32>;
        }[];
    };
}>

Verify a target header is finalized according to the given finality proof. The proof is assumed to be signed by GRANDPA authorities set with current_set_id id.

It will use the underlying storage pallet to fetch information about the current authorities and best finalized header in order to verify that the header is finalized.

If successful in verification, it will write the target header to the underlying storage pallet.

The call fails if:

  • the pallet is halted;

  • the pallet knows better header than the finality_target;

  • the id of best GRANDPA authority set, known to the pallet is not equal to the current_set_id;

  • verification is not optimized or invalid;

  • header contains forced authorities set change or change with non-zero delay.

The is_free_execution_expected parameter is not really used inside the call. It is used by the transaction extension, which should be registered at the runtime level. If this parameter is true, the transaction will be treated as invalid, if the call won't be executed for free. If transaction extension is not used by the runtime, this parameter is not used at all.