Description
What feature should we add?
EIP-7702 is working well with manual transaction signing via ethereum/eth-account#316. There are undoubtedly better ways to interact and build 7702 transactions than currently exist within web3.py. Today we must do something like:
(untested, pseudocode-ish)
# get the contract of interest, as an example
contract = w3.eth.contract(address=contract_address, abi=contract_abi)
acct = Account.from_key(my_key)
signed_auth = acct.sign_authorization({
"address": contract.address,
"nonce": w3.eth.get_transaction_count(acct) + 1,
"chainId": w3.eth.chain_id,
})
# extract the data for the desired contract interaction
contract_call = contract.functions.myFunction(arg1, arg2).build_transaction()
tx = {
"to": acct.address,
...
"authorizationList": [signed_auth],
"data": contract_call["data"],
}
signed_tx = acct.sign_transaction(tx)
w3.eth.send_raw_transaction(signed_tx.raw_transaction)
The goal would be to improve the DevEx to build and send a 7702 transaction. I believe this likely has to exist at the web3.py, not the eth-account level, as we should have access to the web3 object to facilitate eth_chainId
, eth_getTransactionCount
(nonce), eth_estimateGas
calls, contract call data collection, etc.
Loosely, if I have a known contract and ABI, I'd like to be able to say take this account, authorize this account to behave like that contract, and build my transaction with this auth inside the "authorlzationList" while making the first call to function A on the contract. It may also be better to have a builder where there can be many iterations of this to build a single transaction with many such auths.