1use jsonrpsee::{core::RpcResult, proc_macros::rpc};
2
3use alloy_primitives::{Address, Bytes, B256, U256};
4use alloy_rpc_types_anvil::{Forking, Metadata, MineOptions, NodeInfo};
5use alloy_rpc_types_eth::Block;
6
7#[cfg_attr(not(feature = "client"), rpc(server, namespace = "anvil"))]
10#[cfg_attr(feature = "client", rpc(server, client, namespace = "anvil"))]
11pub trait AnvilApi {
12 #[method(name = "impersonateAccount")]
14 async fn anvil_impersonate_account(&self, address: Address) -> RpcResult<()>;
15
16 #[method(name = "stopImpersonatingAccount")]
18 async fn anvil_stop_impersonating_account(&self, address: Address) -> RpcResult<()>;
19
20 #[method(name = "autoImpersonateAccount")]
22 async fn anvil_auto_impersonate_account(&self, enabled: bool) -> RpcResult<()>;
23
24 #[method(name = "getAutomine")]
26 async fn anvil_get_automine(&self) -> RpcResult<bool>;
27
28 #[method(name = "mine")]
30 async fn anvil_mine(&self, blocks: Option<U256>, interval: Option<U256>) -> RpcResult<()>;
31
32 #[method(name = "setAutomine")]
35 async fn anvil_set_automine(&self, enabled: bool) -> RpcResult<()>;
36
37 #[method(name = "setIntervalMining")]
39 async fn anvil_set_interval_mining(&self, interval: u64) -> RpcResult<()>;
40
41 #[method(name = "anvil_dropTransaction")]
43 async fn anvil_drop_transaction(&self, tx_hash: B256) -> RpcResult<Option<B256>>;
44
45 #[method(name = "reset")]
49 async fn anvil_reset(&self, fork: Option<Forking>) -> RpcResult<()>;
50
51 #[method(name = "setRpcUrl")]
53 async fn anvil_set_rpc_url(&self, url: String) -> RpcResult<()>;
54
55 #[method(name = "setBalance")]
57 async fn anvil_set_balance(&self, address: Address, balance: U256) -> RpcResult<()>;
58
59 #[method(name = "setCode")]
61 async fn anvil_set_code(&self, address: Address, code: Bytes) -> RpcResult<()>;
62
63 #[method(name = "setNonce")]
65 async fn anvil_set_nonce(&self, address: Address, nonce: U256) -> RpcResult<()>;
66
67 #[method(name = "setStorageAt")]
69 async fn anvil_set_storage_at(
70 &self,
71 address: Address,
72 slot: U256,
73 value: B256,
74 ) -> RpcResult<bool>;
75
76 #[method(name = "setCoinbase")]
78 async fn anvil_set_coinbase(&self, address: Address) -> RpcResult<()>;
79
80 #[method(name = "setChainId")]
82 async fn anvil_set_chain_id(&self, chain_id: u64) -> RpcResult<()>;
83
84 #[method(name = "setLoggingEnabled")]
86 async fn anvil_set_logging_enabled(&self, enabled: bool) -> RpcResult<()>;
87
88 #[method(name = "setMinGasPrice")]
90 async fn anvil_set_min_gas_price(&self, gas_price: U256) -> RpcResult<()>;
91
92 #[method(name = "setNextBlockBaseFeePerGas")]
94 async fn anvil_set_next_block_base_fee_per_gas(&self, base_fee: U256) -> RpcResult<()>;
95
96 #[method(name = "setTime")]
98 async fn anvil_set_time(&self, timestamp: u64) -> RpcResult<u64>;
99
100 #[method(name = "dumpState")]
103 async fn anvil_dump_state(&self) -> RpcResult<Bytes>;
104
105 #[method(name = "loadState")]
108 async fn anvil_load_state(&self, state: Bytes) -> RpcResult<bool>;
109
110 #[method(name = "nodeInfo")]
112 async fn anvil_node_info(&self) -> RpcResult<NodeInfo>;
113
114 #[method(name = "metadata")]
116 async fn anvil_metadata(&self) -> RpcResult<Metadata>;
117
118 #[method(name = "snapshot")]
120 async fn anvil_snapshot(&self) -> RpcResult<U256>;
121
122 #[method(name = "revert")]
125 async fn anvil_revert(&self, id: U256) -> RpcResult<bool>;
126
127 #[method(name = "increaseTime")]
129 async fn anvil_increase_time(&self, seconds: U256) -> RpcResult<i64>;
130
131 #[method(name = "setNextBlockTimestamp")]
133 async fn anvil_set_next_block_timestamp(&self, seconds: u64) -> RpcResult<()>;
134
135 #[method(name = "setBlockGasLimit")]
137 async fn anvil_set_block_gas_limit(&self, gas_limit: U256) -> RpcResult<bool>;
138
139 #[method(name = "setBlockTimestampInterval")]
141 async fn anvil_set_block_timestamp_interval(&self, seconds: u64) -> RpcResult<()>;
142
143 #[method(name = "removeBlockTimestampInterval")]
145 async fn anvil_remove_block_timestamp_interval(&self) -> RpcResult<bool>;
146
147 #[method(name = "mine_detailed")] async fn anvil_mine_detailed(&self, opts: Option<MineOptions>) -> RpcResult<Vec<Block>>;
156
157 #[method(name = "enableTraces")]
160 async fn anvil_enable_traces(&self) -> RpcResult<()>;
161
162 #[method(name = "removePoolTransactions")]
164 async fn anvil_remove_pool_transactions(&self, address: Address) -> RpcResult<()>;
165}