Skip to content

Commit fc730dd

Browse files
committed
Handle block checkpoint extrinsics
1 parent 52bdee0 commit fc730dd

File tree

2 files changed

+16
-5
lines changed

2 files changed

+16
-5
lines changed

crates/anvil-polkadot/src/substrate_node/genesis.rs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,7 @@ pub struct DevelopmentGenesisBlockBuilder<Block: BlockT, B, E> {
162162
backend: Arc<B>,
163163
executor: E,
164164
checkpoint: Option<Block::Header>,
165+
checkpoint_extrinsics: Option<Vec<Block::Extrinsic>>,
165166
_phantom: PhantomData<Block>,
166167
}
167168

@@ -209,6 +210,7 @@ impl<Block: BlockT, B: Backend<Block>, E: RuntimeVersionOf>
209210
backend,
210211
executor,
211212
checkpoint: None,
213+
checkpoint_extrinsics: None,
212214
_phantom: PhantomData::<Block>,
213215
})
214216
}
@@ -219,6 +221,7 @@ impl<Block: BlockT, B: Backend<Block>, E: RuntimeVersionOf>
219221
backend: Arc<B>,
220222
executor: E,
221223
checkpoint: Block::Header,
224+
checkpoint_extrinsics: Vec<Block::Extrinsic>,
222225
) -> sp_blockchain::Result<Self> {
223226
let genesis_storage =
224227
build_genesis_storage.build_storage().map_err(sp_blockchain::Error::Storage)?;
@@ -242,6 +245,7 @@ impl<Block: BlockT, B: Backend<Block>, E: RuntimeVersionOf>
242245
backend,
243246
executor,
244247
checkpoint: Some(checkpoint),
248+
checkpoint_extrinsics: Some(checkpoint_extrinsics),
245249
_phantom: PhantomData::<Block>,
246250
})
247251
}
@@ -260,6 +264,7 @@ impl<Block: BlockT, B: Backend<Block>, E: RuntimeVersionOf> BuildGenesisBlock<Bl
260264
backend,
261265
executor,
262266
checkpoint,
267+
checkpoint_extrinsics,
263268
_phantom,
264269
} = self;
265270

@@ -272,7 +277,8 @@ impl<Block: BlockT, B: Backend<Block>, E: RuntimeVersionOf> BuildGenesisBlock<Bl
272277
);
273278

274279
let op = backend.begin_operation()?;
275-
let genesis_block = Block::new(checkpoint_header, Default::default());
280+
let extrinsics = checkpoint_extrinsics.unwrap_or_default();
281+
let genesis_block = Block::new(checkpoint_header, extrinsics);
276282
Ok((genesis_block, op))
277283
} else {
278284
// Normal mode: create new genesis block

crates/anvil-polkadot/src/substrate_node/service/client.rs

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,11 @@ pub fn new_client(
3838
executor: WasmExecutor,
3939
storage_overrides: Arc<Mutex<StorageOverrides>>,
4040
) -> Result<(Arc<Client>, Arc<Backend>, KeystorePtr, TaskManager), sc_service::error::Error> {
41-
let (rpc_client, checkpoint): (Option<Arc<dyn RPCClient<Block>>>, <Block as BlockT>::Header) =
42-
if let Some(fork_url) = &anvil_config.eth_rpc_url {
41+
let (rpc_client, checkpoint, checkpoint_extrinsics): (
42+
Option<Arc<dyn RPCClient<Block>>>,
43+
<Block as BlockT>::Header,
44+
Vec<<Block as BlockT>::Extrinsic>,
45+
) = if let Some(fork_url) = &anvil_config.eth_rpc_url {
4346
let http_client = jsonrpsee::http_client::HttpClientBuilder::default()
4447
.max_request_size(u32::MAX)
4548
.max_response_size(u32::MAX)
@@ -88,14 +91,15 @@ pub fn new_client(
8891
.ok_or_else(|| sp_blockchain::Error::Backend("fork checkpoint not found".into()))?;
8992

9093
let checkpoint_header = checkpoint.block.header().clone();
94+
let checkpoint_extrinsics = checkpoint.block.extrinsics().to_vec();
9195

9296
tracing::info!(
9397
"🔗 Forking from block #{} (hash: {:?})",
9498
checkpoint_header.number(),
9599
checkpoint_header.hash()
96100
);
97101

98-
(Some(Arc::new(rpc_client)), checkpoint_header)
102+
(Some(Arc::new(rpc_client)), checkpoint_header, checkpoint_extrinsics)
99103
} else {
100104
let checkpoint = Header::new(
101105
anvil_config.get_genesis_number().try_into().expect("genesis number too large"),
@@ -105,7 +109,7 @@ pub fn new_client(
105109
Default::default(),
106110
);
107111

108-
(None, checkpoint)
112+
(None, checkpoint, Vec::new())
109113
};
110114

111115
let backend = new_lazy_loading_backend(rpc_client.clone(), checkpoint.clone())?;
@@ -120,6 +124,7 @@ pub fn new_client(
120124
backend.clone(),
121125
executor.clone(),
122126
checkpoint.clone(),
127+
checkpoint_extrinsics.clone(),
123128
)?
124129
} else {
125130
// Normal mode: create standard genesis

0 commit comments

Comments
 (0)