Skip to content

Use mortal eras for all transactions#2474

Open
gztensor wants to merge 2 commits intodevnet-readyfrom
feat/mortal-eras
Open

Use mortal eras for all transactions#2474
gztensor wants to merge 2 commits intodevnet-readyfrom
feat/mortal-eras

Conversation

@gztensor
Copy link
Contributor

@gztensor gztensor commented Feb 27, 2026

Description

Subtensor used to have immortal eras which can cause unwanted side effects. Making eras mortal. Currently the transaction life time will be 256 blocks (51.2 minutes) from the block of signing.

Type of Change

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • Documentation update
  • Other (please describe):

Checklist

  • I have performed a self-review of my own code
  • I have commented my code, particularly in hard-to-understand areas
  • I have run ./scripts/fix_rust.sh to ensure my code is formatted and linted correctly
  • I have made corresponding changes to the documentation
  • My changes generate no new warnings
  • I have added tests that prove my fix is effective or that my feature works
  • New and existing unit tests pass locally with my changes
  • Any dependent changes have been merged and published in downstream modules

@gztensor gztensor added the skip-cargo-audit This PR fails cargo audit but needs to be merged anyway label Feb 27, 2026
@open-junius
Copy link
Contributor

Just curious why it is 2048 blocks in UI, the value is 256 in code.

@l0r1s l0r1s self-requested a review March 2, 2026 20:02
Comment on lines 156 to 157
impl frame_system::offchain::CreateSignedTransaction<pallet_drand::Call<Runtime>> for Runtime {
fn create_signed_transaction<
Copy link
Collaborator

@l0r1s l0r1s Mar 2, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This code is never called and we can safely remove it.

Drand only send unsigned extrinsic (for the pulse) and sign the payload itself. We never send signed extrinsic directly from the Drand pallet and this code only provides the required bound to use the send_signed_transaction from the offchain worker which is never used because it uses send_unsigned_transaction.

The only way to override the Era would be to wrap the CheckEra (CheckMortality) to override the Era the same way we did for the TransactionPaymentWrapper.

Era is set from the client side and not from inside the runtime, the runtime only expose the transaction extension pipeline encoding and how the data should be organized in the extrinsic.

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

Labels

skip-cargo-audit This PR fails cargo audit but needs to be merged anyway

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants