Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
90 commits
Select commit Hold shift + click to select a range
782c3dd
chore(eof): simplify magic checks (#1633)
DaniPopes Jul 17, 2024
bac2f4a
perf(eof): avoid some allocations (#1632)
DaniPopes Jul 17, 2024
1a13e2a
chore: fix some typos & remove useless Arc::clone (#1621)
jackwener Jul 17, 2024
c1110d4
refactor: use `is_zero` for `U256` and `B256` (#1638)
tcoratger Jul 18, 2024
1adc908
feat(interpreter): derive traits on FunctionStack (#1640)
DaniPopes Jul 18, 2024
d980839
chore: Renamed some city name (#1645)
ioterw Jul 19, 2024
b995fad
perf: avoid cloning original_bytes (#1646)
DaniPopes Jul 19, 2024
a605d05
fix(eof): deny static context in EOFCREATE (#1644)
DaniPopes Jul 19, 2024
8eaff99
feat: use batch bn256 pair operation (#1643)
Rjected Jul 19, 2024
013de92
feat(EOF): implement std::error::Error trait for EofValidationError a…
peyha Jul 22, 2024
31ddbe9
chore(deps): bump thiserror from 1.0.62 to 1.0.63 (#1651)
dependabot[bot] Jul 22, 2024
afb8083
chore(deps): bump tokio from 1.38.0 to 1.38.1 (#1650)
dependabot[bot] Jul 22, 2024
d71acb5
fix(EOF): Overflow on num_sections (#1656)
rakita Jul 24, 2024
e123600
feat(EOF): EOF Validation add code type and sub container tracker (#1…
rakita Jul 24, 2024
28b7021
fix(statetest): Add back Merge spec (#1658)
rakita Jul 25, 2024
9eabd4b
fix(EOF): Validate code access in stack (#1659)
rakita Jul 25, 2024
1163e29
feat(EOF): Add EOF validation in revme bytecode cmd (#1660)
rakita Jul 25, 2024
83df9c4
chore(clippy): 1.80 rust clippy list paragraph ident (#1661)
rakita Jul 25, 2024
dc2b334
feat(EOF): Add non-returning CALLF/JUMPF checks (#1663)
rakita Jul 26, 2024
42bbc74
fix(EOF): returning to non-returning jumpf, enable valition error (#1…
rakita Jul 26, 2024
371e8c2
fix: add DATACOPY to OpCode::modifies_memory (#1639)
klkvr Jul 26, 2024
7a35122
chore(eof): Add opcodes that expand memory (#1665)
rakita Jul 26, 2024
49d68c8
fix(statetest): make bytecode analyzed (#1666)
rakita Jul 28, 2024
574b310
chore(deps): bump serde_json from 1.0.120 to 1.0.121 (#1667)
dependabot[bot] Jul 29, 2024
cf74f81
chore(deps): bump tokio from 1.38.1 to 1.39.2 (#1668)
dependabot[bot] Jul 29, 2024
b30dff4
chore(deps): bump blst from 0.3.12 to 0.3.13 (#1669)
dependabot[bot] Jul 29, 2024
991ef8c
chore(deps): bump serde_json from 1.0.121 to 1.0.122 (#1678)
dependabot[bot] Aug 5, 2024
721f087
chore(deps): bump alloy-eips from 0.2.0 to 0.2.1 (#1679)
dependabot[bot] Aug 5, 2024
7933742
chore(deps): bump regex from 1.10.5 to 1.10.6 (#1682)
dependabot[bot] Aug 5, 2024
535eb8e
chore(deps): bump rstest from 0.21.0 to 0.22.0 (#1681)
dependabot[bot] Aug 5, 2024
4d0feec
Add EOF Layout Fuzz Loop to `revme bytecode` (#1677)
shemnon Aug 5, 2024
05b34f4
docs: improve `InstructionResult` documentation (#1673)
leovct Aug 6, 2024
ab42581
Add OP-Granite hardfork, limiting bn256Pairing input size (#1685)
BrianBland Aug 6, 2024
40b9e10
feat: check for typos in CI (#1686)
adria0 Aug 8, 2024
32aeae4
feat(EOF): add evmone test suite (#1689)
rakita Aug 8, 2024
8267ad5
feat(EOF): Run EOF tests from eth/tests (#1690)
rakita Aug 8, 2024
70bd050
chore: release (#1683)
github-actions[bot] Aug 8, 2024
f3cab1c
bump: tag v41 revm v13.0.0 (#1692)
rakita Aug 8, 2024
428626e
fix(CI): types check (#1693)
rakita Aug 8, 2024
0a5be93
chore(deps): bump alloy-provider from 0.2.0 to 0.2.1 (#1680)
dependabot[bot] Aug 9, 2024
1ad8604
Revert "chore(deps): bump alloy-provider from 0.2.0 to 0.2.1 (#1680)"…
rakita Aug 9, 2024
7ea71af
chore(deps): bump alloy-transport from 0.2.0 to 0.2.1 (#1698)
dependabot[bot] Aug 26, 2024
7abf5c0
chore(deps): bump enumn from 0.1.13 to 0.1.14 (#1701)
dependabot[bot] Aug 26, 2024
ab07fac
doc: update some docs related to state (#1711)
prestwich Aug 26, 2024
d8d75fd
chore: clean up some journalstate docs (#1712)
onbjerg Aug 26, 2024
0f7e5a6
chore(deps): bump bytes from 1.6.1 to 1.7.1 (#1700)
dependabot[bot] Aug 26, 2024
e155d07
chore: switch gas check order in blake2 precompile (#1718)
pcy190 Aug 26, 2024
792b6b2
chore(deps): bump serde from 1.0.204 to 1.0.209 (#1717)
dependabot[bot] Aug 26, 2024
d29e132
docs: fix spelling issues (#1715)
nnsW3 Aug 26, 2024
a46a88b
feat: c-kzg bump, cleanup on kzgsetting (#1719)
rakita Aug 26, 2024
c75e095
chore: bump `kzg-rs` version (#1726)
0xWOLAND Aug 28, 2024
0ae01d5
chore: cast block number to u64 and not usize (#1727)
rakita Aug 28, 2024
8094c45
feat(eip7702): Impl newest version of EIP (#1695)
rakita Aug 29, 2024
c77f2a5
chore(deps): bump alloy and primitives (#1725)
klkvr Aug 29, 2024
85fc688
chore: release (#1722)
github-actions[bot] Aug 29, 2024
3085f04
bump: main changelog (#1730)
rakita Aug 29, 2024
347e499
bump to newest eof eest tests pr-756 (#1733)
rakita Aug 30, 2024
a29c9b6
chore: bump kzg-rs version (#1734)
0xWOLAND Aug 30, 2024
e552290
chore: Bump new logo (#1735)
rakita Aug 30, 2024
f93929f
chore: release (#1729)
github-actions[bot] Aug 30, 2024
68b3ea6
bump: main changelog
rakita Aug 30, 2024
86385a1
funding.json
rakita Sep 2, 2024
72fd736
chore(deps): bump serde_json from 1.0.122 to 1.0.127 (#1737)
dependabot[bot] Sep 2, 2024
cbf0a5b
chore(deps): bump tokio from 1.39.2 to 1.40.0 (#1739)
dependabot[bot] Sep 2, 2024
94bbe71
chore(deps): bump reqwest from 0.12.5 to 0.12.7 (#1740)
dependabot[bot] Sep 2, 2024
73366e7
chore(deps): bump alloy-rlp from 0.3.7 to 0.3.8 (#1738)
dependabot[bot] Sep 2, 2024
fa5650e
Add test for `revm::optimism::L1BlockInfo::calculate_tx_l1_cost_fjord…
emhane Sep 3, 2024
32f357f
fix(inspector): always call selfdestruct if entry is made (#1746)
jsvisa Sep 4, 2024
bc0017a
chore: add gitattributes linguist-vendored for tests (#1750)
rakita Sep 4, 2024
1026e27
chore: add `.gitattributes` (#1751)
rkrasiuk Sep 4, 2024
89b65e1
Test l1 gas used fjord (#1749)
emhane Sep 4, 2024
d38ff45
feat(statetest): enable EOF in Prague tests (#1753)
rakita Sep 4, 2024
16adf43
chore: make clippy happy (#1755)
jsvisa Sep 9, 2024
e34bcba
chore(deps): bump secp256k1 from 0.29.0 to 0.29.1 (#1758)
dependabot[bot] Sep 9, 2024
3237611
chore(deps): bump alloy-primitives from 0.8.0 to 0.8.2 (#1761)
dependabot[bot] Sep 9, 2024
0d840bf
chore(deps): bump anyhow from 1.0.86 to 1.0.87 (#1760)
dependabot[bot] Sep 9, 2024
dcb92c6
chore(deps): bump alloy-sol-types from 0.8.0 to 0.8.2 (#1762)
dependabot[bot] Sep 9, 2024
f68d3dc
chore(deps): bump alloy-provider from 0.3.0 to 0.3.1 (#1759)
dependabot[bot] Sep 9, 2024
895dc1b
chore: release-plz update
rakita Sep 18, 2024
95e53af
chore: release v44 bump main CHANGELOG
rakita Sep 18, 2024
fc1556f
feat: Add holocene to OP spec (#1794)
cody-wang-cb Sep 26, 2024
892da81
feat(primitives): implement map module #743 for v45 (#1806)
rakita Sep 26, 2024
4f09399
bump: release-plz update (#1807)
rakita Sep 26, 2024
f551baf
feat(EIP-7702): devnet-4 changes (#1821)
rakita Oct 14, 2024
ee50bab
feat: Rename PRAGUE_EOF to OSAKA (#1822)
rakita Oct 14, 2024
9708cbc
chore: bump newest primitives (#1823)
rakita Oct 15, 2024
1887802
feat: EIP-7702 Add u8 validity (#1824)
rakita Oct 17, 2024
4359a5f
chore: remove test u8 check (#1825)
rakita Oct 17, 2024
e3c2c42
chore: Bump v46 versions (#1826)
rakita Oct 17, 2024
4c375d4
Merge branch 'v46-upstream' into scroll-evm-executor/update/v46
lightsing Oct 29, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
feat(EIP-7702): devnet-4 changes (bluealloy#1821)
* feat(EIP-7702): devnet-4 changes

* add new test suite

* fix test

* check parity in revme, remove invalid auth tx tests

* fix clippy
  • Loading branch information
rakita authored Oct 14, 2024
commit f551baf00ac2f5827fa8ebefcd0db4975e508b7b
9 changes: 8 additions & 1 deletion bins/revme/src/cmd/statetest/models/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,9 @@ use deserializer::*;
pub use eip7702::TxEip7702;
pub use spec::SpecName;

use revm::primitives::{AccessList, Address, AuthorizationList, Bytes, HashMap, B256, U256};
use revm::primitives::{
alloy_primitives::Parity, AccessList, Address, AuthorizationList, Bytes, HashMap, B256, U256,
};
use serde::{Deserialize, Serialize};
use std::collections::BTreeMap;

Expand Down Expand Up @@ -60,6 +62,11 @@ impl Test {
if txbytes.first() == Some(&0x04) {
let mut txbytes = &txbytes[1..];
let tx = TxEip7702::decode(&mut txbytes)?;
if let Parity::Eip155(parity) = tx.signature.v() {
if parity < u8::MAX as u64 {
return Err(alloy_rlp::Error::Custom("Invalid parity value"));
}
}
return Ok(Some(
AuthorizationList::Signed(tx.authorization_list).into_recovered(),
));
Expand Down
4 changes: 2 additions & 2 deletions crates/primitives/src/eip7702.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ pub use bytecode::{
};

// Base cost of updating authorized account.
pub const PER_AUTH_BASE_COST: u64 = 2500;
pub const PER_AUTH_BASE_COST: u64 = 12500;

/// Cost of creating authorized account that was previously empty.
pub const PER_EMPTY_ACCOUNT_COST: u64 = 25000;
Expand All @@ -20,7 +20,7 @@ pub const PER_EMPTY_ACCOUNT_COST: u64 = 25000;
/// to EIP-2 should have an S value less than or equal to this.
///
/// `57896044618658097711785492504343953926418782139537452191302581570759080747168`
const SECP256K1N_HALF: U256 = U256::from_be_bytes([
pub const SECP256K1N_HALF: U256 = U256::from_be_bytes([
0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0x5D, 0x57, 0x6E, 0x73, 0x57, 0xA4, 0x50, 0x1D, 0xDF, 0xE9, 0x2F, 0x46, 0x68, 0x1B, 0x20, 0xA0,
]);
50 changes: 14 additions & 36 deletions crates/primitives/src/eip7702/authorization_list.rs
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
pub use alloy_eip7702::{Authorization, SignedAuthorization};
pub use alloy_primitives::{Parity, Signature};

use super::SECP256K1N_HALF;
use crate::Address;
use core::{fmt, ops::Deref};
use std::{boxed::Box, vec::Vec};

use super::SECP256K1N_HALF;

/// Authorization list for EIP-7702 transaction type.
#[derive(Clone, Debug, Eq, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
Expand Down Expand Up @@ -35,40 +36,6 @@ impl AuthorizationList {
}
}

/// Returns true if the authorization list is valid.
pub fn is_valid(&self, _chain_id: u64) -> Result<(), InvalidAuthorization> {
let validate = |auth: &SignedAuthorization| -> Result<(), InvalidAuthorization> {
// TODO Eip7702. Check chain_id
// Pending: https://github.com/ethereum/EIPs/pull/8833/files
// let auth_chain_id: u64 = auth.chain_id().try_into().unwrap_or(u64::MAX);
// if auth_chain_id != 0 && auth_chain_id != chain_id {
// return Err(InvalidAuthorization::InvalidChainId);
// }

// Check y_parity, Parity::Parity means that it was 0 or 1.
if !matches!(auth.signature().v(), Parity::Parity(_)) {
return Err(InvalidAuthorization::InvalidYParity);
}

// Check s-value
if auth.signature().s() > SECP256K1N_HALF {
return Err(InvalidAuthorization::Eip2InvalidSValue);
}

Ok(())
};

match self {
Self::Signed(signed) => signed.iter().try_for_each(validate)?,
Self::Recovered(recovered) => recovered
.iter()
.map(|recovered| &recovered.inner)
.try_for_each(validate)?,
};

Ok(())
}

/// Return empty authorization list.
pub fn empty() -> Self {
Self::Recovered(Vec::new())
Expand Down Expand Up @@ -114,7 +81,18 @@ impl RecoveredAuthorization {
/// Get the `authority` for the authorization.
///
/// If this is `None`, then the authority could not be recovered.
pub const fn authority(&self) -> Option<Address> {
pub fn authority(&self) -> Option<Address> {
let signature = self.inner.signature();

// Check s-value
if signature.s() > SECP256K1N_HALF {
return None;
}

// Check y_parity, Parity::Parity means that it was 0 or 1.
if !matches!(signature.v(), Parity::Parity(_)) {
return None;
}
self.authority
}

Expand Down
3 changes: 0 additions & 3 deletions crates/primitives/src/env.rs
Original file line number Diff line number Diff line change
Expand Up @@ -202,9 +202,6 @@ impl Env {
return Err(InvalidTransaction::EmptyAuthorizationList);
}

// Check validity of authorization_list
auth_list.is_valid(self.cfg.chain_id)?;

// Check if other fields are unset.
if self.tx.max_fee_per_blob_gas.is_some() || !self.tx.blob_hashes.is_empty() {
return Err(InvalidTransaction::AuthorizationListInvalidFields);
Expand Down
4 changes: 2 additions & 2 deletions crates/revm/benches/bench.rs
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ fn transfer(c: &mut Criterion) {
}

fn bench_transact<EXT>(g: &mut BenchmarkGroup<'_, WallTime>, evm: &mut Evm<'_, EXT, BenchmarkDB>) {
let state = match evm.context.evm.db.0 {
let state = match evm.context.evm.db.bytecode {
Bytecode::LegacyRaw(_) => "raw",
Bytecode::LegacyAnalyzed(_) => "analysed",
Bytecode::Eof(_) => "eof",
Expand All @@ -96,7 +96,7 @@ fn bench_eval(g: &mut BenchmarkGroup<'_, WallTime>, evm: &mut Evm<'static, (), B
g.bench_function("eval", |b| {
let contract = Contract {
input: evm.context.evm.env.tx.data.clone(),
bytecode: to_analysed(evm.context.evm.db.0.clone()),
bytecode: to_analysed(evm.context.evm.db.bytecode.clone()),
..Default::default()
};
let mut shared_memory = SharedMemory::new();
Expand Down
33 changes: 27 additions & 6 deletions crates/revm/src/db/in_memory_db.rs
Original file line number Diff line number Diff line change
Expand Up @@ -360,28 +360,49 @@ impl AccountState {
///
/// Any other address will return an empty account.
#[derive(Debug, Default, Clone)]
pub struct BenchmarkDB(pub Bytecode, B256);
pub struct BenchmarkDB {
pub bytecode: Bytecode,
pub hash: B256,
pub target: Address,
pub caller: Address,
}

impl BenchmarkDB {
/// Create a new benchmark database with the given bytecode.
pub fn new_bytecode(bytecode: Bytecode) -> Self {
let hash = bytecode.hash_slow();
Self(bytecode, hash)
Self {
bytecode,
hash,
target: Address::ZERO,
caller: Address::with_last_byte(1),
}
}

/// Change the caller address for the benchmark.
pub fn with_caller(self, caller: Address) -> Self {
Self { caller, ..self }
}

/// Change the target address for the benchmark.
pub fn with_target(self, target: Address) -> Self {
Self { target, ..self }
}
}

impl Database for BenchmarkDB {
type Error = Infallible;
/// Get basic account information.
fn basic(&mut self, address: Address) -> Result<Option<AccountInfo>, Self::Error> {
if address == Address::ZERO {
if address == self.target {
return Ok(Some(AccountInfo {
nonce: 1,
balance: U256::from(10000000),
code: Some(self.0.clone()),
code_hash: self.1,
code: Some(self.bytecode.clone()),
code_hash: self.hash,
}));
}
if address == Address::with_last_byte(1) {
if address == self.caller {
return Ok(Some(AccountInfo {
nonce: 0,
balance: U256::from(10000000),
Expand Down
4 changes: 2 additions & 2 deletions crates/revm/src/evm.rs
Original file line number Diff line number Diff line change
Expand Up @@ -402,15 +402,15 @@ mod tests {

#[test]
fn sanity_eip7702_tx() {
let delegate = address!("0000000000000000000000000000000000000000");
let caller = address!("0000000000000000000000000000000000000001");
let delegate = address!("0000000000000000000000000000000000000002");
let auth = address!("0000000000000000000000000000000000000100");

let bytecode = Bytecode::new_legacy([PUSH1, 0x01, PUSH1, 0x01, SSTORE].into());

let mut evm = Evm::builder()
.with_spec_id(SpecId::PRAGUE)
.with_db(BenchmarkDB::new_bytecode(bytecode))
.with_db(BenchmarkDB::new_bytecode(bytecode).with_target(delegate))
.modify_tx_env(|tx| {
tx.authorization_list = Some(
vec![RecoveredAuthorization::new_unchecked(
Expand Down
44 changes: 28 additions & 16 deletions crates/revm/src/handler/mainnet/pre_execution.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ use crate::{
db::Database,
eip7702, Account, Bytecode, EVMError, Env, Spec,
SpecId::{CANCUN, PRAGUE, SHANGHAI},
TxKind, BLOCKHASH_STORAGE_ADDRESS, U256,
TxKind, BLOCKHASH_STORAGE_ADDRESS, KECCAK_EMPTY, U256,
},
Context, ContextPrecompiles,
};
Expand Down Expand Up @@ -114,51 +114,63 @@ pub fn apply_eip7702_auth_list<SPEC: Spec, EXT, DB: Database>(

let mut refunded_accounts = 0;
for authorization in authorization_list.recovered_iter() {
// 1. recover authority and authorized addresses.
// authority = ecrecover(keccak(MAGIC || rlp([chain_id, address, nonce])), y_parity, r, s]
let Some(authority) = authorization.authority() else {
continue;
};

// 2. Verify the chain id is either 0 or the chain's current ID.
// 1. Verify the chain id is either 0 or the chain's current ID.
if !authorization.chain_id().is_zero()
&& authorization.chain_id() != U256::from(context.evm.inner.env.cfg.chain_id)
{
continue;
}

// 2. Verify the `nonce` is less than `2**64 - 1`.
if authorization.nonce() == u64::MAX {
continue;
}

// recover authority and authorized addresses.
// 3. `authority = ecrecover(keccak(MAGIC || rlp([chain_id, address, nonce])), y_parity, r, s]`
let Some(authority) = authorization.authority() else {
continue;
};

// warm authority account and check nonce.
// 3. Add authority to accessed_addresses (as defined in EIP-2929.)
// 4. Add `authority` to `accessed_addresses` (as defined in [EIP-2929](./eip-2929.md).)
let mut authority_acc = context
.evm
.inner
.journaled_state
.load_code(authority, &mut context.evm.inner.db)?;

// 4. Verify the code of authority is either empty or already delegated.
// 5. Verify the code of `authority` is either empty or already delegated.
if let Some(bytecode) = &authority_acc.info.code {
// if it is not empty and it is not eip7702
if !bytecode.is_empty() && !bytecode.is_eip7702() {
continue;
}
}

// 5. Verify the nonce of authority is equal to nonce.
// 6. Verify the nonce of `authority` is equal to `nonce`. In case `authority` does not exist in the trie, verify that `nonce` is equal to `0`.
if authorization.nonce() != authority_acc.info.nonce {
continue;
}

// 6. Refund the sender PER_EMPTY_ACCOUNT_COST - PER_AUTH_BASE_COST gas if authority exists in the trie.
// 7. Add `PER_EMPTY_ACCOUNT_COST - PER_AUTH_BASE_COST` gas to the global refund counter if `authority` exists in the trie.
if !authority_acc.is_empty() {
refunded_accounts += 1;
}

// 7. Set the code of authority to be 0xef0100 || address. This is a delegation designation.
let bytecode = Bytecode::new_eip7702(authorization.address);
authority_acc.info.code_hash = bytecode.hash_slow();
// 8. Set the code of `authority` to be `0xef0100 || address`. This is a delegation designation.
// * As a special case, if `address` is `0x0000000000000000000000000000000000000000` do not write the designation. Clear the accounts code and reset the account's code hash to the empty hash `0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470`.
let (bytecode, hash) = if authorization.address.is_zero() {
(Bytecode::default(), KECCAK_EMPTY)
} else {
let bytecode = Bytecode::new_eip7702(authorization.address);
let hash = bytecode.hash_slow();
(bytecode, hash)
};
authority_acc.info.code_hash = hash;
authority_acc.info.code = Some(bytecode);

// 8. Increase the nonce of authority by one.
// 9. Increase the nonce of `authority` by one.
authority_acc.info.nonce = authority_acc.info.nonce.saturating_add(1);
authority_acc.mark_touch();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@
"comment": "`execution-spec-tests` generated test",
"filling-transition-tool": "ethereumjs t8n v1",
"description": "Test function documentation:\n\n Test the BLS12_G1ADD precompile using different call types.",
"url": "https://github.com/ethereum/execution-spec-tests/blob/pectra-devnet-3@v1.4.0/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1add.py#L204",
"url": "https://github.com/ethereum/execution-spec-tests/blob/pectra-devnet-4@v1.0.0/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1add.py#L204",
"reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-2537.md",
"reference-spec-version": "cd0f016ad0c4c68b8b1f5c502ef61ab9353b6e5e"
}
Expand Down Expand Up @@ -124,7 +124,7 @@
"comment": "`execution-spec-tests` generated test",
"filling-transition-tool": "ethereumjs t8n v1",
"description": "Test function documentation:\n\n Test the BLS12_G1ADD precompile using different call types.",
"url": "https://github.com/ethereum/execution-spec-tests/blob/pectra-devnet-3@v1.4.0/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1add.py#L204",
"url": "https://github.com/ethereum/execution-spec-tests/blob/pectra-devnet-4@v1.0.0/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1add.py#L204",
"reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-2537.md",
"reference-spec-version": "cd0f016ad0c4c68b8b1f5c502ef61ab9353b6e5e"
}
Expand Down Expand Up @@ -189,7 +189,7 @@
"comment": "`execution-spec-tests` generated test",
"filling-transition-tool": "ethereumjs t8n v1",
"description": "Test function documentation:\n\n Test the BLS12_G1ADD precompile using different call types.",
"url": "https://github.com/ethereum/execution-spec-tests/blob/pectra-devnet-3@v1.4.0/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1add.py#L204",
"url": "https://github.com/ethereum/execution-spec-tests/blob/pectra-devnet-4@v1.0.0/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1add.py#L204",
"reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-2537.md",
"reference-spec-version": "cd0f016ad0c4c68b8b1f5c502ef61ab9353b6e5e"
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@
"comment": "`execution-spec-tests` generated test",
"filling-transition-tool": "ethereumjs t8n v1",
"description": "Test function documentation:\n\n Test the BLS12_G1ADD precompile gas requirements.",
"url": "https://github.com/ethereum/execution-spec-tests/blob/pectra-devnet-3@v1.4.0/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1add.py#L170",
"url": "https://github.com/ethereum/execution-spec-tests/blob/pectra-devnet-4@v1.0.0/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1add.py#L170",
"reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-2537.md",
"reference-spec-version": "cd0f016ad0c4c68b8b1f5c502ef61ab9353b6e5e"
}
Expand Down Expand Up @@ -124,7 +124,7 @@
"comment": "`execution-spec-tests` generated test",
"filling-transition-tool": "ethereumjs t8n v1",
"description": "Test function documentation:\n\n Test the BLS12_G1ADD precompile gas requirements.",
"url": "https://github.com/ethereum/execution-spec-tests/blob/pectra-devnet-3@v1.4.0/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1add.py#L170",
"url": "https://github.com/ethereum/execution-spec-tests/blob/pectra-devnet-4@v1.0.0/tests/prague/eip2537_bls_12_381_precompiles/test_bls12_g1add.py#L170",
"reference-spec": "https://github.com/ethereum/EIPs/blob/master/EIPS/eip-2537.md",
"reference-spec-version": "cd0f016ad0c4c68b8b1f5c502ef61ab9353b6e5e"
}
Expand Down
Loading