Skip to content

Commit 437d3bb

Browse files
committed
refactor: Unify certificate position handling using TxCertificateWithPos
Signed-off-by: William Hankins <william@sundae.fi>
1 parent 54cd9aa commit 437d3bb

File tree

10 files changed

+603
-657
lines changed

10 files changed

+603
-657
lines changed

codec/src/map_parameters.rs

Lines changed: 236 additions & 248 deletions
Large diffs are not rendered by default.

common/src/messages.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ pub struct AssetDeltasMessage {
9191
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
9292
pub struct TxCertificatesMessage {
9393
/// Ordered set of certificates
94-
pub certificates: Vec<TxCertificate>,
94+
pub certificates: Vec<TxCertificateWithPos>,
9595
}
9696

9797
/// Address deltas message

common/src/types.rs

Lines changed: 22 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1859,46 +1859,46 @@ pub enum TxCertificate {
18591859
None(()),
18601860

18611861
/// Stake registration
1862-
StakeRegistration(StakeAddressWithPos),
1862+
StakeRegistration(StakeAddress),
18631863

18641864
/// Stake de-registration
1865-
StakeDeregistration(StakeAddressWithPos),
1865+
StakeDeregistration(StakeAddress),
18661866

18671867
/// Stake Delegation to a pool
1868-
StakeDelegation(StakeDelegationWithPos),
1868+
StakeDelegation(StakeDelegation),
18691869

18701870
/// Pool registration
1871-
PoolRegistrationWithPos(PoolRegistrationWithPos),
1871+
PoolRegistration(PoolRegistration),
18721872

18731873
/// Pool retirement
1874-
PoolRetirementWithPos(PoolRetirementWithPos),
1874+
PoolRetirement(PoolRetirement),
18751875

18761876
/// Genesis key delegation
18771877
GenesisKeyDelegation(GenesisKeyDelegation),
18781878

18791879
/// Move instantaneous rewards
1880-
MoveInstantaneousReward(MoveInstantaneousRewardWithPos),
1880+
MoveInstantaneousReward(MoveInstantaneousReward),
18811881

18821882
/// New stake registration
1883-
Registration(RegistrationWithPos),
1883+
Registration(Registration),
18841884

18851885
/// Stake deregistration
1886-
Deregistration(DeregistrationWithPos),
1886+
Deregistration(Deregistration),
18871887

18881888
/// Vote delegation
18891889
VoteDelegation(VoteDelegation),
18901890

18911891
/// Combined stake and vote delegation
1892-
StakeAndVoteDelegation(StakeAndVoteDelegationWithPos),
1892+
StakeAndVoteDelegation(StakeAndVoteDelegation),
18931893

18941894
/// Stake registration and SPO delegation
1895-
StakeRegistrationAndDelegation(StakeRegistrationAndDelegationWithPos),
1895+
StakeRegistrationAndDelegation(StakeRegistrationAndDelegation),
18961896

18971897
/// Stake registration and vote delegation
1898-
StakeRegistrationAndVoteDelegation(StakeRegistrationAndVoteDelegationWithPos),
1898+
StakeRegistrationAndVoteDelegation(StakeRegistrationAndVoteDelegation),
18991899

19001900
/// Stake registration and combined SPO and vote delegation
1901-
StakeRegistrationAndStakeAndVoteDelegation(StakeRegistrationAndStakeAndVoteDelegationWithPos),
1901+
StakeRegistrationAndStakeAndVoteDelegation(StakeRegistrationAndStakeAndVoteDelegation),
19021902

19031903
/// Authorise a committee hot credential
19041904
AuthCommitteeHot(AuthCommitteeHot),
@@ -1907,13 +1907,20 @@ pub enum TxCertificate {
19071907
ResignCommitteeCold(ResignCommitteeCold),
19081908

19091909
/// DRep registration
1910-
DRepRegistration(DRepRegistrationWithPos),
1910+
DRepRegistration(DRepRegistration),
19111911

19121912
/// DRep deregistration
1913-
DRepDeregistration(DRepDeregistrationWithPos),
1913+
DRepDeregistration(DRepDeregistration),
19141914

19151915
/// DRep update
1916-
DRepUpdate(DRepUpdateWithPos),
1916+
DRepUpdate(DRepUpdate),
1917+
}
1918+
1919+
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
1920+
pub struct TxCertificateWithPos {
1921+
pub cert: TxCertificate,
1922+
pub tx_identifier: TxIdentifier,
1923+
pub cert_index: u64,
19171924
}
19181925

19191926
#[derive(Debug, Default, Clone, serde::Serialize, serde::Deserialize)]

modules/accounts_state/src/state.rs

Lines changed: 63 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -875,84 +875,63 @@ impl State {
875875
pub fn handle_tx_certificates(&mut self, tx_certs_msg: &TxCertificatesMessage) -> Result<()> {
876876
// Handle certificates
877877
for tx_cert in tx_certs_msg.certificates.iter() {
878-
match tx_cert {
878+
match &tx_cert.cert {
879879
TxCertificate::StakeRegistration(reg) => {
880-
self.register_stake_address(&reg.stake_address, None);
880+
self.register_stake_address(&reg, None);
881881
}
882882

883883
TxCertificate::StakeDeregistration(dreg) => {
884-
self.deregister_stake_address(&dreg.stake_address, None);
884+
self.deregister_stake_address(&dreg, None);
885885
}
886886

887887
TxCertificate::MoveInstantaneousReward(mir) => {
888-
self.handle_mir(&mir.cert).unwrap_or_else(|e| error!("MIR failed: {e:#}"));
888+
self.handle_mir(&mir).unwrap_or_else(|e| error!("MIR failed: {e:#}"));
889889
}
890890

891891
TxCertificate::Registration(reg) => {
892-
self.register_stake_address(&reg.cert.stake_address, Some(reg.cert.deposit));
892+
self.register_stake_address(&reg.stake_address, Some(reg.deposit));
893893
}
894894

895895
TxCertificate::Deregistration(dreg) => {
896-
self.deregister_stake_address(&dreg.cert.stake_address, Some(dreg.cert.refund));
896+
self.deregister_stake_address(&dreg.stake_address, Some(dreg.refund));
897897
}
898898

899899
TxCertificate::StakeDelegation(delegation) => {
900-
self.record_stake_delegation(
901-
&delegation.cert.stake_address,
902-
&delegation.cert.operator,
903-
);
900+
self.record_stake_delegation(&delegation.stake_address, &delegation.operator);
904901
}
905902

906903
TxCertificate::VoteDelegation(delegation) => {
907904
self.record_drep_delegation(&delegation.stake_address, &delegation.drep);
908905
}
909906

910907
TxCertificate::StakeAndVoteDelegation(delegation) => {
911-
self.record_stake_delegation(
912-
&delegation.cert.stake_address,
913-
&delegation.cert.operator,
914-
);
915-
self.record_drep_delegation(
916-
&delegation.cert.stake_address,
917-
&delegation.cert.drep,
918-
);
908+
self.record_stake_delegation(&delegation.stake_address, &delegation.operator);
909+
self.record_drep_delegation(&delegation.stake_address, &delegation.drep);
919910
}
920911

921912
TxCertificate::StakeRegistrationAndDelegation(delegation) => {
922913
self.register_stake_address(
923-
&delegation.cert.stake_address,
924-
Some(delegation.cert.deposit),
925-
);
926-
self.record_stake_delegation(
927-
&delegation.cert.stake_address,
928-
&delegation.cert.operator,
914+
&delegation.stake_address,
915+
Some(delegation.deposit),
929916
);
917+
self.record_stake_delegation(&delegation.stake_address, &delegation.operator);
930918
}
931919

932920
TxCertificate::StakeRegistrationAndVoteDelegation(delegation) => {
933921
self.register_stake_address(
934-
&delegation.cert.stake_address,
935-
Some(delegation.cert.deposit),
936-
);
937-
self.record_drep_delegation(
938-
&delegation.cert.stake_address,
939-
&delegation.cert.drep,
922+
&delegation.stake_address,
923+
Some(delegation.deposit),
940924
);
925+
self.record_drep_delegation(&delegation.stake_address, &delegation.drep);
941926
}
942927

943928
TxCertificate::StakeRegistrationAndStakeAndVoteDelegation(delegation) => {
944929
self.register_stake_address(
945-
&delegation.cert.stake_address,
946-
Some(delegation.cert.deposit),
947-
);
948-
self.record_stake_delegation(
949-
&delegation.cert.stake_address,
950-
&delegation.cert.operator,
951-
);
952-
self.record_drep_delegation(
953-
&delegation.cert.stake_address,
954-
&delegation.cert.drep,
930+
&delegation.stake_address,
931+
Some(delegation.deposit),
955932
);
933+
self.record_stake_delegation(&delegation.stake_address, &delegation.operator);
934+
self.record_drep_delegation(&delegation.stake_address, &delegation.drep);
956935
}
957936

958937
_ => (),
@@ -1013,11 +992,10 @@ mod tests {
1013992
use acropolis_common::{
1014993
protocol_params::ConwayParams, rational_number::RationalNumber, Anchor, Committee,
1015994
Constitution, CostModel, DRepVotingThresholds, NetworkId, PoolVotingThresholds, Pot,
1016-
PotDelta, Ratio, Registration, RegistrationWithPos, StakeAddress, StakeAddressDelta,
1017-
StakeAndVoteDelegation, StakeAndVoteDelegationWithPos, StakeCredential,
1018-
StakeRegistrationAndStakeAndVoteDelegation,
1019-
StakeRegistrationAndStakeAndVoteDelegationWithPos, StakeRegistrationAndVoteDelegation,
1020-
StakeRegistrationAndVoteDelegationWithPos, TxIdentifier, VoteDelegation, Withdrawal,
995+
PotDelta, Ratio, Registration, StakeAddress, StakeAddressDelta, StakeAndVoteDelegation,
996+
StakeCredential, StakeRegistrationAndStakeAndVoteDelegation,
997+
StakeRegistrationAndVoteDelegation, TxCertificateWithPos, TxIdentifier, VoteDelegation,
998+
Withdrawal,
1021999
};
10221000

10231001
// Helper to create a StakeAddress from a byte slice
@@ -1390,57 +1368,66 @@ mod tests {
13901368
let spo3 = create_address(&[0x03]);
13911369
let spo4 = create_address(&[0x04]);
13921370

1371+
let tx_identifier = TxIdentifier::default();
1372+
13931373
let certificates = vec![
13941374
// register the first two SPOs separately from their delegation
1395-
TxCertificate::Registration(RegistrationWithPos {
1396-
cert: Registration {
1375+
TxCertificateWithPos {
1376+
cert: TxCertificate::Registration(Registration {
13971377
stake_address: spo1.clone(),
13981378
deposit: 1,
1399-
},
1400-
tx_identifier: TxIdentifier::default(),
1379+
}),
1380+
tx_identifier,
14011381
cert_index: 0,
1402-
}),
1403-
TxCertificate::Registration(RegistrationWithPos {
1404-
cert: Registration {
1382+
},
1383+
TxCertificateWithPos {
1384+
cert: TxCertificate::Registration(Registration {
14051385
stake_address: spo2.clone(),
14061386
deposit: 1,
1407-
},
1408-
tx_identifier: TxIdentifier::default(),
1387+
}),
1388+
tx_identifier,
14091389
cert_index: 0,
1410-
}),
1411-
TxCertificate::VoteDelegation(VoteDelegation {
1412-
stake_address: spo1.clone(),
1413-
drep: DRepChoice::Key(DREP_HASH.to_vec()),
1414-
}),
1415-
TxCertificate::StakeAndVoteDelegation(StakeAndVoteDelegationWithPos {
1416-
cert: StakeAndVoteDelegation {
1390+
},
1391+
TxCertificateWithPos {
1392+
cert: TxCertificate::VoteDelegation(VoteDelegation {
1393+
stake_address: spo1.clone(),
1394+
drep: DRepChoice::Key(DREP_HASH.to_vec()),
1395+
}),
1396+
tx_identifier,
1397+
cert_index: 0,
1398+
},
1399+
TxCertificateWithPos {
1400+
cert: TxCertificate::StakeAndVoteDelegation(StakeAndVoteDelegation {
14171401
stake_address: spo2.clone(),
14181402
operator: spo1.get_hash().to_vec(),
14191403
drep: DRepChoice::Script(DREP_HASH.to_vec()),
1420-
},
1421-
tx_identifier: TxIdentifier::default(),
1422-
}),
1423-
TxCertificate::StakeRegistrationAndVoteDelegation(
1424-
StakeRegistrationAndVoteDelegationWithPos {
1425-
cert: StakeRegistrationAndVoteDelegation {
1404+
}),
1405+
tx_identifier,
1406+
cert_index: 0,
1407+
},
1408+
TxCertificateWithPos {
1409+
cert: TxCertificate::StakeRegistrationAndVoteDelegation(
1410+
StakeRegistrationAndVoteDelegation {
14261411
stake_address: spo3.clone(),
14271412
drep: DRepChoice::Abstain,
14281413
deposit: 1,
14291414
},
1430-
tx_identifier: TxIdentifier::default(),
1431-
},
1432-
),
1433-
TxCertificate::StakeRegistrationAndStakeAndVoteDelegation(
1434-
StakeRegistrationAndStakeAndVoteDelegationWithPos {
1435-
cert: StakeRegistrationAndStakeAndVoteDelegation {
1415+
),
1416+
tx_identifier,
1417+
cert_index: 0,
1418+
},
1419+
TxCertificateWithPos {
1420+
cert: TxCertificate::StakeRegistrationAndStakeAndVoteDelegation(
1421+
StakeRegistrationAndStakeAndVoteDelegation {
14361422
stake_address: spo4.clone(),
14371423
operator: spo1.get_hash().to_vec(),
14381424
drep: DRepChoice::NoConfidence,
14391425
deposit: 1,
14401426
},
1441-
tx_identifier: TxIdentifier::default(),
1442-
},
1443-
),
1427+
),
1428+
tx_identifier,
1429+
cert_index: 0,
1430+
},
14441431
];
14451432

14461433
state.handle_tx_certificates(&TxCertificatesMessage { certificates })?;

0 commit comments

Comments
 (0)