Skip to content

Commit

Permalink
Merge pull request #2385 from AleoHQ/feat/withdrawal-address
Browse files Browse the repository at this point in the history
[Coinbase Go/No-Go] ARC-0037 - Introduce withdrawal address for stakers
  • Loading branch information
howardwu authored Mar 15, 2024
2 parents 53daab8 + 7c6798a commit c0441b2
Show file tree
Hide file tree
Showing 13 changed files with 916 additions and 159 deletions.
7 changes: 5 additions & 2 deletions ledger/block/src/ratify/bytes.rs
Original file line number Diff line number Diff line change
Expand Up @@ -50,10 +50,12 @@ impl<N: Network> FromBytes for Ratify<N> {
let address: Address<N> = FromBytes::read_le(&mut reader)?;
// Read the validator address.
let validator_address: Address<N> = FromBytes::read_le(&mut reader)?;
// Read the withdrawal address.
let withdrawal_address: Address<N> = FromBytes::read_le(&mut reader)?;
// Read the amount.
let amount: u64 = FromBytes::read_le(&mut reader)?;
// Insert the bonded balance.
bonded_balances.insert(address, (validator_address, amount));
bonded_balances.insert(address, (validator_address, withdrawal_address, amount));
}
// Return the ratify object.
Self::Genesis(Box::new(committee), Box::new(public_balances), Box::new(bonded_balances))
Expand Down Expand Up @@ -92,9 +94,10 @@ impl<N: Network> ToBytes for Ratify<N> {
amount.write_le(&mut writer)?;
}
u16::try_from(bonded_balances.len()).map_err(|e| error(e.to_string()))?.write_le(&mut writer)?;
for (address, (validator_address, amount)) in bonded_balances.iter() {
for (address, (validator_address, withdrawal_address, amount)) in bonded_balances.iter() {
address.write_le(&mut writer)?;
validator_address.write_le(&mut writer)?;
withdrawal_address.write_le(&mut writer)?;
amount.write_le(&mut writer)?;
}
Ok(())
Expand Down
12 changes: 8 additions & 4 deletions ledger/block/src/ratify/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,9 @@ use indexmap::IndexMap;
type Variant = u8;
/// A helper type to represent the public balances.
type PublicBalances<N> = IndexMap<Address<N>, u64>;
/// A helper type to represent the bonded balances.
type BondedBalances<N> = IndexMap<Address<N>, (Address<N>, u64)>;
/// A helper type to represent the bonded balances, as a
/// mapping of `staker_address` to `(validator_address, withdrawal_address, amount)`.
type BondedBalances<N> = IndexMap<Address<N>, (Address<N>, Address<N>, u64)>;

// Note: The size of the `Ratify` object is 32 bytes.
#[derive(Clone, PartialEq, Eq)]
Expand Down Expand Up @@ -58,8 +59,11 @@ pub(crate) mod test_helpers {
for (address, _) in committee.members().iter() {
public_balances.insert(*address, rng.gen());
}
let bonded_balances =
committee.members().iter().map(|(address, (amount, _))| (*address, (*address, *amount))).collect();
let bonded_balances = committee
.members()
.iter()
.map(|(address, (amount, _))| (*address, (*address, *address, *amount)))
.collect();

vec![
Ratify::Genesis(Box::new(committee), Box::new(public_balances), Box::new(bonded_balances)),
Expand Down
12 changes: 9 additions & 3 deletions ledger/src/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -226,8 +226,11 @@ fn test_insufficient_public_fees() {

// Attempt to bond the node with insufficient public fees.
{
let inputs =
[Value::from_str(&format!("{recipient_address}")).unwrap(), Value::from_str("1000000000000u64").unwrap()];
let inputs = [
Value::from_str(&format!("{recipient_address}")).unwrap(),
Value::from_str(&format!("{recipient_address}")).unwrap(),
Value::from_str("1000000000000u64").unwrap(),
];
let transaction = ledger
.vm
.execute(&recipient_private_key, ("credits.aleo", "bond_public"), inputs.into_iter(), None, 0, None, rng)
Expand Down Expand Up @@ -520,6 +523,7 @@ fn test_bond_and_unbond_validator() {
// Construct the bond public
let bond_amount = 1000000000000u64; // 1 million credits.
let inputs = [
Value::from_str(&format!("{new_member_address}")).unwrap(),
Value::from_str(&format!("{new_member_address}")).unwrap(),
Value::from_str(&format!("{bond_amount}u64")).unwrap(),
];
Expand Down Expand Up @@ -1490,7 +1494,7 @@ fn test_max_committee_limit_with_bonds() {
.iter()
.map(|(private_key, (amount, _))| {
let address = Address::try_from(private_key).unwrap();
(address, (address, *amount))
(address, (address, address, *amount))
})
.collect();

Expand All @@ -1517,6 +1521,7 @@ fn test_max_committee_limit_with_bonds() {
&first_private_key,
("credits.aleo", "bond_public"),
vec![
Value::<CurrentNetwork>::from_str(&first_address.to_string()).unwrap(),
Value::<CurrentNetwork>::from_str(&first_address.to_string()).unwrap(),
Value::<CurrentNetwork>::from_str(&format!("{MIN_VALIDATOR_STAKE}u64")).unwrap(),
]
Expand Down Expand Up @@ -1560,6 +1565,7 @@ fn test_max_committee_limit_with_bonds() {
&second_private_key,
("credits.aleo", "bond_public"),
vec![
Value::<CurrentNetwork>::from_str(&second_address.to_string()).unwrap(),
Value::<CurrentNetwork>::from_str(&second_address.to_string()).unwrap(),
Value::<CurrentNetwork>::from_str(&format!("{MIN_VALIDATOR_STAKE}u64")).unwrap(),
]
Expand Down
2 changes: 1 addition & 1 deletion parameters/src/mainnet/genesis.rs
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,6 @@ mod tests {
#[test]
fn test_genesis_block() {
let bytes = GenesisBytes::load_bytes();
assert_eq!(15165, bytes.len() as u64, "Update me if serialization has changed");
assert_eq!(15485, bytes.len() as u64, "Update me if serialization has changed");
}
}
Binary file modified parameters/src/mainnet/resources/block.genesis
Binary file not shown.
6 changes: 3 additions & 3 deletions parameters/src/mainnet/resources/bond_public.metadata
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"prover_checksum": "81d3f2b91a7c9c1e788edefedef4ac136be4f1d65bb05c9675e59e6d6da843c2",
"prover_size": 28928250,
"verifier_checksum": "26790f191f07b5814f5f324e417603e79cae78cd986a8bb98c248ac5816b48cc",
"prover_checksum": "f22e621043e90a085cccff02496da7a4e61e565a910133a7f7ba164a38690ac4",
"prover_size": 29351562,
"verifier_checksum": "6cb877e752e5127f6e13e6e0804a5858366752b578a4dfde47edf24deebb846d",
"verifier_size": 665
}
Binary file modified parameters/src/mainnet/resources/bond_public.verifier
Binary file not shown.
Loading

0 comments on commit c0441b2

Please sign in to comment.