alloy-rs / alloy

Transports, Middleware, and Networks for the Alloy project
https://alloy.rs
Apache License 2.0
653 stars 236 forks source link

[Feature] Provide EIP1167 API in alloy-eips crate #1653

Open StackOverflowExcept1on opened 5 days ago

StackOverflowExcept1on commented 5 days ago

Component

consensus, eips, genesis

Describe the feature you would like

https://eips.ethereum.org/EIPS/eip-1167

use alloy::primitives::{hex, Address, FixedBytes};

const INITIALIZATION_CODE: FixedBytes<10> = FixedBytes::new(hex!("3d602d80600a3d3981f3"));
const RUNTIME_CODE_1: FixedBytes<10> = FixedBytes::new(hex!("363d3d373d3d3d363d73"));
const RUNTIME_CODE_2: FixedBytes<15> = FixedBytes::new(hex!("5af43d82803e903d91602b57fd5bf3"));

pub const fn minimal_proxy_bytecode(address: [u8; 20]) -> [u8; 55] {
    let address = Address::new(address);
    let part1: FixedBytes<20> = INITIALIZATION_CODE.concat_const(RUNTIME_CODE_1);
    let part2: FixedBytes<40> = part1.concat_const(address.0);
    let part3: FixedBytes<55> = part2.concat_const(RUNTIME_CODE_2);
    part3.0
}

We could also make an extension method (a trait in alloy-eips implemented for alloy::primitives::Address) similar to alloy::primitives::Address::create2(...).

Additional context

No response