mirror of
https://github.com/serai-dex/serai.git
synced 2025-12-08 12:19:24 +00:00
Have coordinator publish batches to Substrate
This commit is contained in:
@@ -429,10 +429,11 @@ pub async fn handle_processors<D: Db, Pro: Processors, P: P2p>(
|
|||||||
);
|
);
|
||||||
// TODO: Also check the other KeyGenId fields
|
// TODO: Also check the other KeyGenId fields
|
||||||
|
|
||||||
// TODO: Is this safe?
|
// TODO: Publish an unsigned TX with a Musig signature here, instead of on-chain voting
|
||||||
|
// That removes the need for this nonce
|
||||||
let Ok(nonce) = serai.get_nonce(&substrate_signer.address()).await else {
|
let Ok(nonce) = serai.get_nonce(&substrate_signer.address()).await else {
|
||||||
log::error!("couldn't connect to Serai node to get nonce");
|
log::error!("couldn't get nonce from Serai node");
|
||||||
todo!(); // TODO
|
todo!()
|
||||||
};
|
};
|
||||||
|
|
||||||
let tx = serai
|
let tx = serai
|
||||||
@@ -459,7 +460,7 @@ pub async fn handle_processors<D: Db, Pro: Processors, P: P2p>(
|
|||||||
log::info!("voted on key pair for {:?} in TX {}", id.set, hex::encode(hash))
|
log::info!("voted on key pair for {:?} in TX {}", id.set, hex::encode(hash))
|
||||||
}
|
}
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
log::error!("couldn't connect to Serai node to publish TX: {:?}", e);
|
log::error!("couldn't connect to Serai node to publish vote TX: {:?}", e);
|
||||||
todo!(); // TODO
|
todo!(); // TODO
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -537,9 +538,33 @@ pub async fn handle_processors<D: Db, Pro: Processors, P: P2p>(
|
|||||||
}))
|
}))
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
ProcessorMessage::Substrate(msg) => match msg {
|
ProcessorMessage::Substrate(inner_msg) => match inner_msg {
|
||||||
// TODO
|
processor_messages::substrate::ProcessorMessage::Update { key: _, batch } => {
|
||||||
processor_messages::substrate::ProcessorMessage::Update { .. } => todo!(),
|
assert_eq!(
|
||||||
|
batch.batch.network, msg.network,
|
||||||
|
"processor sent us a batch for a different network than it was for",
|
||||||
|
);
|
||||||
|
// TODO: Check this key's key pair's substrate key is authorized to publish batches
|
||||||
|
// TODO: Check the batch ID is an atomic increment
|
||||||
|
|
||||||
|
match serai.publish(&serai.execute_batch(batch.clone())).await {
|
||||||
|
Ok(hash) => {
|
||||||
|
log::info!(
|
||||||
|
"executed batch {:?} {} (block {}) in TX {}",
|
||||||
|
batch.batch.network,
|
||||||
|
batch.batch.id,
|
||||||
|
hex::encode(batch.batch.block),
|
||||||
|
hex::encode(hash),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
Err(e) => {
|
||||||
|
log::error!("couldn't connect to Serai node to publish batch TX: {:?}", e);
|
||||||
|
todo!(); // TODO
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
None
|
||||||
|
}
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ impl Serai {
|
|||||||
.await
|
.await
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn execute_batch(&self, batch: SignedBatch) -> Result<Encoded, SeraiError> {
|
pub fn execute_batch(&self, batch: SignedBatch) -> Encoded {
|
||||||
self.unsigned::<InInstructions, _>(&in_instructions::Call::<Runtime>::execute_batch { batch })
|
self.unsigned::<InInstructions, _>(&in_instructions::Call::<Runtime>::execute_batch { batch })
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -269,7 +269,7 @@ impl Serai {
|
|||||||
.map_err(SeraiError::RpcError)
|
.map_err(SeraiError::RpcError)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn unsigned<P: 'static, C: Encode>(&self, call: &C) -> Result<Encoded, SeraiError> {
|
fn unsigned<P: 'static, C: Encode>(&self, call: &C) -> Encoded {
|
||||||
// TODO: Should Serai purge the old transaction code AND set this to 0/1?
|
// TODO: Should Serai purge the old transaction code AND set this to 0/1?
|
||||||
const TRANSACTION_VERSION: u8 = 4;
|
const TRANSACTION_VERSION: u8 = 4;
|
||||||
|
|
||||||
@@ -284,7 +284,7 @@ impl Serai {
|
|||||||
// Prefix the length
|
// Prefix the length
|
||||||
let mut complete_bytes = scale::Compact(u32::try_from(bytes.len()).unwrap()).encode();
|
let mut complete_bytes = scale::Compact(u32::try_from(bytes.len()).unwrap()).encode();
|
||||||
complete_bytes.extend(bytes);
|
complete_bytes.extend(bytes);
|
||||||
Ok(Encoded(complete_bytes))
|
Encoded(complete_bytes)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn sign<S: Send + Sync + Signer<SeraiConfig>>(
|
pub fn sign<S: Send + Sync + Signer<SeraiConfig>>(
|
||||||
|
|||||||
@@ -31,8 +31,7 @@ pub async fn provide_batch(batch: Batch) -> [u8; 32] {
|
|||||||
|
|
||||||
let block = publish_tx(
|
let block = publish_tx(
|
||||||
&serai
|
&serai
|
||||||
.execute_batch(SignedBatch { batch: batch.clone(), signature: pair.sign(&batch.encode()) })
|
.execute_batch(SignedBatch { batch: batch.clone(), signature: pair.sign(&batch.encode()) }),
|
||||||
.unwrap(),
|
|
||||||
)
|
)
|
||||||
.await;
|
.await;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user