mirror of
https://github.com/sigp/lighthouse.git
synced 2026-03-09 03:31:45 +00:00
* Remove use of ethers_core::RlpStream
* Merge branch 'unstable' of https://github.com/sigp/lighthouse into remove_use_of_ethers_core
* Remove old code
* Simplify keccak call
* Remove unused package
* Merge branch 'unstable' of https://github.com/ethDreamer/lighthouse into remove_use_of_ethers_core
* Merge branch 'unstable' into remove_use_of_ethers_core
* Run clippy
* Merge branch 'remove_use_of_ethers_core' of https://github.com/dospore/lighthouse into remove_use_of_ethers_core
* Check all cargo fmt
* migrate to alloy primitives init
* fix deps
* integrate alloy-primitives
* resolve dep issues
* more changes based on dep changes
* add TODOs
* Merge branch 'unstable' of https://github.com/sigp/lighthouse into remove_use_of_ethers_core
* Revert lock
* Add BeaconBlocksByRange v3
* continue migration
* Revert "Add BeaconBlocksByRange v3"
This reverts commit e3ce7fc5ea.
* impl hash256 extended trait
* revert some uneeded diffs
* merge conflict resolved
* fix subnet id rshift calc
* rename to FixedBytesExtended
* debugging
* Merge branch 'unstable' of https://github.com/sigp/lighthouse into migrate-to-alloy-primitives
* fix failed test
* fixing more tests
* Merge branch 'unstable' of https://github.com/sigp/lighthouse into remove_use_of_ethers_core
* introduce a shim to convert between the two u256 types
* move alloy to wrokspace
* align alloy versions
* update
* update web3signer test certs
* refactor
* resolve failing tests
* linting
* fix graffiti string test
* fmt
* fix ef test
* resolve merge conflicts
* remove udep and revert cert
* cargo patch
* cyclic dep
* fix build error
* Merge branch 'unstable' of https://github.com/sigp/lighthouse into migrate-to-alloy-primitives
* resolve conflicts, update deps
* merge unstable
* fmt
* fix deps
* Merge branch 'unstable' of https://github.com/sigp/lighthouse into migrate-to-alloy-primitives
* resolve merge conflicts
* resolve conflicts, make necessary changes
* Remove patch
* fmt
* remove file
* merge conflicts
* sneaking in a smol change
* bump versions
* Merge remote-tracking branch 'origin/unstable' into migrate-to-alloy-primitives
* Updates for peerDAS
* Update ethereum_hashing to prevent dupe
* updated alloy-consensus, removed TODOs
* cargo update
* endianess fix
* Merge branch 'unstable' of https://github.com/sigp/lighthouse into migrate-to-alloy-primitives
* fmt
* fix merge
* fix test
* fixed_bytes crate
* minor fixes
* convert u256 to i64
* panic free mixin to_low_u64_le
* from_str_radix
* computbe_subnet api and ensuring we use big-endian
* Merge branch 'unstable' of https://github.com/sigp/lighthouse into migrate-to-alloy-primitives
* fix test
* Simplify subnet_id test
* Simplify some more tests
* Add tests to fixed_bytes crate
* Merge branch 'unstable' into migrate-to-alloy-primitives
94 lines
3.6 KiB
Rust
94 lines
3.6 KiB
Rust
use deposit_contract::{encode_eth1_tx_data, BYTECODE, CONTRACT_DEPLOY_GAS, DEPOSIT_GAS};
|
|
use ethers_core::types::{
|
|
transaction::{eip2718::TypedTransaction, eip2930::AccessList},
|
|
Address, Bytes, Eip1559TransactionRequest, TransactionRequest, U256,
|
|
};
|
|
use types::{DepositData, EthSpec, FixedBytesExtended, Hash256, Keypair, Signature};
|
|
|
|
/// Hardcoded deposit contract address based on sender address and nonce
|
|
pub const DEPOSIT_CONTRACT_ADDRESS: &str = "64f43BEc7F86526686C931d65362bB8698872F90";
|
|
|
|
#[derive(Debug)]
|
|
pub enum Transaction {
|
|
Transfer(Address, Address),
|
|
TransferLegacy(Address, Address),
|
|
TransferAccessList(Address, Address),
|
|
DeployDepositContract(Address),
|
|
DepositDepositContract {
|
|
sender: Address,
|
|
deposit_contract_address: Address,
|
|
},
|
|
}
|
|
|
|
/// Get a list of transactions to publish to the execution layer.
|
|
pub fn transactions<E: EthSpec>(account1: Address, account2: Address) -> Vec<TypedTransaction> {
|
|
vec![
|
|
Transaction::Transfer(account1, account2).transaction::<E>(),
|
|
Transaction::TransferLegacy(account1, account2).transaction::<E>(),
|
|
Transaction::TransferAccessList(account1, account2).transaction::<E>(),
|
|
Transaction::DeployDepositContract(account1).transaction::<E>(),
|
|
Transaction::DepositDepositContract {
|
|
sender: account1,
|
|
deposit_contract_address: ethers_core::types::Address::from_slice(
|
|
&hex::decode(DEPOSIT_CONTRACT_ADDRESS).unwrap(),
|
|
),
|
|
}
|
|
.transaction::<E>(),
|
|
]
|
|
}
|
|
|
|
impl Transaction {
|
|
pub fn transaction<E: EthSpec>(&self) -> TypedTransaction {
|
|
match &self {
|
|
Self::TransferLegacy(from, to) => TransactionRequest::new()
|
|
.from(*from)
|
|
.to(*to)
|
|
.value(1)
|
|
.into(),
|
|
Self::Transfer(from, to) => Eip1559TransactionRequest::new()
|
|
.from(*from)
|
|
.to(*to)
|
|
.value(1)
|
|
.into(),
|
|
Self::TransferAccessList(from, to) => TransactionRequest::new()
|
|
.from(*from)
|
|
.to(*to)
|
|
.value(1)
|
|
.with_access_list(AccessList::default())
|
|
.into(),
|
|
Self::DeployDepositContract(addr) => {
|
|
let mut bytecode = String::from_utf8(BYTECODE.to_vec()).unwrap();
|
|
bytecode.retain(|c| c.is_ascii_hexdigit());
|
|
let bytecode = hex::decode(&bytecode[1..]).unwrap();
|
|
TransactionRequest::new()
|
|
.from(*addr)
|
|
.data(Bytes::from(bytecode))
|
|
.gas(CONTRACT_DEPLOY_GAS)
|
|
.into()
|
|
}
|
|
Self::DepositDepositContract {
|
|
sender,
|
|
deposit_contract_address,
|
|
} => {
|
|
let keypair = Keypair::random();
|
|
|
|
let amount: u64 = 32_000_000_000;
|
|
let mut deposit = DepositData {
|
|
pubkey: keypair.pk.into(),
|
|
withdrawal_credentials: Hash256::zero(),
|
|
amount,
|
|
signature: Signature::empty().into(),
|
|
};
|
|
deposit.signature = deposit.create_signature(&keypair.sk, &E::default_spec());
|
|
TransactionRequest::new()
|
|
.from(*sender)
|
|
.to(*deposit_contract_address)
|
|
.data(Bytes::from(encode_eth1_tx_data(&deposit).unwrap()))
|
|
.gas(DEPOSIT_GAS)
|
|
.value(U256::from(amount) * U256::exp10(9))
|
|
.into()
|
|
}
|
|
}
|
|
}
|
|
}
|