feat: dutydb#415
Conversation
|
@claude review |
|
Claude finished @mskrzypkows's task in 4m 38s —— View job Review — Pluto DutyDB (PR #415)Overall: a solid, readable port of Charon's 1. Correctness / parity with Charon(a) pub async fn store(&self, duty: Duty, unsigned_set: UnsignedDataSet) -> Result<()> {
let mut state = self.state.write().await;
if !self.deadliner.add(duty.clone()).await {
return Err(Error::ExpiredDuty);
}Go's Recommend either:
(b) Dead clash check in The key includes the tree‑hash root of the att data, and the "clash" check compares (c) Aggregated attestation duty is always re‑inserted even when already present } else {
self.agg_keys_by_slot.entry(slot).or_default().push(key);
}
self.agg_duties.insert(key, agg.clone());Matches Go ( (d) Go's (e) Expired duties are not drained when Same as Go (early (f)
2. Concurrency model(a)
(b) (c) (d) 3. API / style
4. TestsThe new suite covers shutdown, attester happy path, unsupported duty types, proposer, sync contribution, clashes for sync/blocks/proposer, and expiry. Compared to
The 5. Nits
Summary
Nothing here blocks merge other than (1a) and the missing tests.
|
No description provided.