You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
/**********************************************************************************************************************/// This function allows any staker to bond their microcredits to a validator.// The corresponding functions for 'bond_public' are 'unbond_public' and 'claim_unbond_public'.
function bond_public:// Input the validator's address.
input r0 asaddress.public;// Input the amount of microcredits to bond.
input r1 asu64.public;// Determine if the amount is at least one credit.
gte r1 1_000_000u64 into r2;// Enforce the amount is at least one credit.
assert.eq r2 true;// Bond the specified amount of microcredits to the specified validator.async bond_public self.caller r0 r1 into r3;// Output the finalize future.
output r3 ascredits.aleo/bond_public.future;
finalize bond_public:// Input the staker's address.
input r0 asaddress.public;// Input the validator's address.
input r1 asaddress.public;// Input the amount of microcredits to bond.
input r2 asu64.public;// Determine whether the caller is a validator.
assert.neq r0 r1;/* Committee */// Check if the caller is a validator.
contains committee[r0] into r3;// Enforce the caller is *not* a validator.
assert.eq r3 false;// Get the stake for the specified validator.// If the validator does not exist, this finalize scope will fail.
get committee[r1] into r4;// Ensure that the validator is open to stakers.
assert.eq r4.is_open true;// Increment the stake for the specified validator.
add r4.microcredits r2 into r5;// Construct the updated committee state.
cast r5 r4.is_open into r6 ascommittee_state;/* Bonded */// Construct the initial bond state.
cast r1 0u64 into r7 asbond_state;// Get the bond state for the caller, or default to the initial bond state.
get.or_use bonded[r0] r7 into r8;// Enforce the validator matches in the bond state.
assert.eq r8.validator r1;// Increment the microcredits in the bond state.
add r8.microcredits r2 into r9;// Determine if the amount is at least 10 credits.
gte r9 10_000_000u64 into r10;// Enforce the amount is at least 10 credits.
assert.eq r10 true;// Construct the updated bond state.
cast r1 r9 into r11 asbond_state;/* Account */// Get the balance of the caller.// If the account does not exist, this finalize scope will fail.
get account[r0] into r12;// Decrement the balance of the caller.
sub r12 r2 into r13;/* Writes */// Update the committee state for the specified validator.
set r6 into committee[r1];// Update the bond state for the caller.
set r11 into bonded[r0];// Update the balance of the caller.
set r13 into account[r0];/**********************************************************************************************************************/// This function allows any staker to bond their microcredits to a validator.// The corresponding functions for 'bond_public' are 'unbond_public' and 'claim_unbond_public'.
function validator_bond_public:// Input the amount of microcredits to bond.
input r0 asu64.public;// Determine if the amount is at least one credit.
gte r0 1_000_000u64 into r1;// Enforce the amount is at least one credit.
assert.eq r1 true;// Bond the specified amount of microcredits to the specified validator.async validator_bond_public self.caller r0 into r2;// Output the finalize future.
output r2 ascredits.aleo/validator_bond_public.future;
finalize validator_bond_public:// Input the staker's address.
input r0 asaddress.public;// Input the amount of microcredits to bond.
input r1 asu64.public;/* Committee */// Construct the initial committee state.// Note: We set the initial 'is_open' state to 'true'.
cast 0u64 true into r2 ascommittee_state;// Retrieve the committee state of the specified validator.
get.or_use committee[r0] r2 into r3;// Ensure that the validator is open to stakers.
assert.eq r3.is_open true;// Increment the stake for the specified validator.
add r3.microcredits r1 into r4;// Construct the updated committee state.
cast r4 r3.is_open into r5 ascommittee_state;/* Bonded */// Construct the initial bond state.
cast r0 0u64 into r6 asbond_state;// Get the bond state for the caller, or default to the initial bond state.
get.or_use bonded[r0] r6 into r7;// Enforce the validator matches in the bond state.
assert.eq r7.validator r0;// Increment the microcredits in the bond state.
add r7.microcredits r1 into r8;// Determine if the amount is at least one million credits.
gte r8 1_000_000_000_000u64 into r9;// Enforce the amount is at least one million credits.
assert.eq r8 true;// Construct the updated bond state.
cast r1 r8 into r10 asbond_state;/* Account */// Get the balance of the caller.// If the account does not exist, this finalize scope will fail.
get account[r0] into r11;// Decrement the balance of the caller.
sub r11 r1 into r12;/* Writes */// Update the committee state of the specified validator.
set r5 into committee[r0];// Update the bond state for the caller.
set r10 into bonded[r0];// Update the balance of the caller.
set r12 into account[r0];
The text was updated successfully, but these errors were encountered:
The text was updated successfully, but these errors were encountered: