From 8c7fc884696d0c3f593e489b06d5d2dbf8dcf105 Mon Sep 17 00:00:00 2001 From: sirouk <8901571+sirouk@users.noreply.github.com> Date: Wed, 8 Jan 2025 16:10:32 -0800 Subject: [PATCH] [move] migrate PoF bid ux to fixed values instead of percent (#323) Co-authored-by: 0o-de-lally <1364012+0o-de-lally@users.noreply.github.com> --- .../src/libra_framework_sdk_builder.rs | 49 +++++++++++ .../sources/ol_sources/proof_of_fee.move | 82 +++++++++++++++++- framework/releases/head.mrb | Bin 890723 -> 893147 bytes tools/txs/src/txs_cli_vals.rs | 28 ++++-- 4 files changed, 149 insertions(+), 10 deletions(-) diff --git a/framework/cached-packages/src/libra_framework_sdk_builder.rs b/framework/cached-packages/src/libra_framework_sdk_builder.rs index a3bae1d52..3c4909b23 100644 --- a/framework/cached-packages/src/libra_framework_sdk_builder.rs +++ b/framework/cached-packages/src/libra_framework_sdk_builder.rs @@ -474,6 +474,12 @@ pub enum EntryFunctionCall { epoch_expiry: u64, }, + /// update the bid using estimated net reward instead of the internal bid variables + ProofOfFeePofUpdateBidNetReward { + net_reward: u64, + epoch_expiry: u64, + }, + /// This function initiates governance for the multisig. It is called by the sponsor address, and is only callable once. /// init_gov fails gracefully if the governance is already initialized. /// init_type will throw errors if the type is already initialized. @@ -808,6 +814,10 @@ impl EntryFunctionCall { ProofOfFeePofUpdateBid { bid, epoch_expiry } => { proof_of_fee_pof_update_bid(bid, epoch_expiry) } + ProofOfFeePofUpdateBidNetReward { + net_reward, + epoch_expiry, + } => proof_of_fee_pof_update_bid_net_reward(net_reward, epoch_expiry), SafeInitPaymentMultisig { authorities } => safe_init_payment_multisig(authorities), SlowWalletSmokeTestVmUnlock { user_addr, @@ -2147,6 +2157,28 @@ pub fn proof_of_fee_pof_update_bid(bid: u64, epoch_expiry: u64) -> TransactionPa )) } +/// update the bid using estimated net reward instead of the internal bid variables +pub fn proof_of_fee_pof_update_bid_net_reward( + net_reward: u64, + epoch_expiry: u64, +) -> TransactionPayload { + TransactionPayload::EntryFunction(EntryFunction::new( + ModuleId::new( + AccountAddress::new([ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, + ]), + ident_str!("proof_of_fee").to_owned(), + ), + ident_str!("pof_update_bid_net_reward").to_owned(), + vec![], + vec![ + bcs::to_bytes(&net_reward).unwrap(), + bcs::to_bytes(&epoch_expiry).unwrap(), + ], + )) +} + /// This function initiates governance for the multisig. It is called by the sponsor address, and is only callable once. /// init_gov fails gracefully if the governance is already initialized. /// init_type will throw errors if the type is already initialized. @@ -3105,6 +3137,19 @@ mod decoder { } } + pub fn proof_of_fee_pof_update_bid_net_reward( + payload: &TransactionPayload, + ) -> Option { + if let TransactionPayload::EntryFunction(script) = payload { + Some(EntryFunctionCall::ProofOfFeePofUpdateBidNetReward { + net_reward: bcs::from_bytes(script.args().first()?).ok()?, + epoch_expiry: bcs::from_bytes(script.args().get(1)?).ok()?, + }) + } else { + None + } + } + pub fn safe_init_payment_multisig(payload: &TransactionPayload) -> Option { if let TransactionPayload::EntryFunction(script) = payload { Some(EntryFunctionCall::SafeInitPaymentMultisig { @@ -3480,6 +3525,10 @@ static SCRIPT_FUNCTION_DECODER_MAP: once_cell::sync::Lazy 0, EWTF_WHY_IS_REWARD_ZERO); + assert!(net_reward < nominal_reward, ENET_REWARD_GREATER_THAN_REWARD); + + let pct_with_decimal = (net_reward * 10) / nominal_reward; + + return pct_with_decimal + } + + /// Instead of setting a bid with the internal variables of pct bid, we + /// allow the user to set their expected net_reward in an epoch + fun set_net_reward(account_sig: &signer, net_reward: u64, expiry_epoch: u64) acquires + ConsensusReward, ProofOfFeeAuction { + // double check the epoch expiry + let epoch_checked = check_epoch_expiry(expiry_epoch); + // convert to bid + let scaled_pct = convert_net_reward_to_bid(net_reward); + set_bid(account_sig, scaled_pct, epoch_checked); + } + + /// check if the expiry is too far in the future + /// and if so, return what the maximum allowed would be. + /// if within range returns the provided epoch without change + /// @returns checked epoch for bid expiration + fun check_epoch_expiry(expiry_epoch: u64): u64 { + let this_epoch = epoch_helper::get_current_epoch(); + if (expiry_epoch > MAXIMUM_BID_EXPIRATION_EPOCHS) { + return this_epoch + MAXIMUM_BID_EXPIRATION_EPOCHS + }; + expiry_epoch + } + /// Note that the validator will not be bidding on any future /// epochs if they retract their bid. The must set a new bid. fun retract_bid(account_sig: &signer) acquires ProofOfFeeAuction { @@ -770,6 +842,14 @@ module ol_framework::proof_of_fee { set_bid(sender, bid, epoch_expiry); } + /// update the bid using estimated net reward instead of the internal bid variables + public entry fun pof_update_bid_net_reward(sender: &signer, net_reward: u64, + epoch_expiry: u64) acquires ProofOfFeeAuction, ConsensusReward { + let checked_epoch = check_epoch_expiry(epoch_expiry); + // update the bid, initializes if not already. + set_net_reward(sender, net_reward, checked_epoch); + } + /// retract bid public entry fun pof_retract_bid(sender: signer) acquires ProofOfFeeAuction { // retract a bid diff --git a/framework/releases/head.mrb b/framework/releases/head.mrb index d0e20fa1107afdd1f6a9b8bfcc8c311a53a3564f..6bfd477db42594ea48012c4c1c55dbc0e41bdb04 100644 GIT binary patch delta 32250 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 diff --git a/tools/txs/src/txs_cli_vals.rs b/tools/txs/src/txs_cli_vals.rs index 6dbd3eef5..98d1ea749 100644 --- a/tools/txs/src/txs_cli_vals.rs +++ b/tools/txs/src/txs_cli_vals.rs @@ -6,8 +6,8 @@ use diem_genesis::config::OperatorConfiguration; use diem_types::account_address::AccountAddress; use libra_cached_packages::libra_stdlib::EntryFunctionCall::{ self, JailUnjailByVoucher, ProofOfFeePofRetractBid, ProofOfFeePofUpdateBid, - StakeUpdateNetworkAndFullnodeAddresses, ValidatorUniverseRegisterValidator, VouchRevoke, - VouchVouchFor, + ProofOfFeePofUpdateBidNetReward, StakeUpdateNetworkAndFullnodeAddresses, + ValidatorUniverseRegisterValidator, VouchRevoke, VouchVouchFor, }; use libra_config::validator_registration; use libra_types::global_config_dir; @@ -18,14 +18,17 @@ use std::{fs, path::PathBuf}; pub enum ValidatorTxs { /// Proof-of-Fee auction bidding Pof { + #[clap(short('r'), long)] + /// Estimated net reward you would like to receive each epoch + net_reward: u64, #[clap(short, long)] /// Percentage of the nominal reward you will bid to join the /// validator set, with three decimal places: 1.234 is 123.4% - bid_pct: f64, + bid_pct: Option, #[clap(short, long)] - /// Epoch until the bid is valid (will expire in `expiry` + 1) + /// Epoch until the bid is valid (will expire in `expiry` + 1). Max 30 epochs expiry: u64, - #[clap(short, long)] + #[clap(long)] /// Eliminates the bid. There are only a limited amount of retractions that can happen in an epoch retract: bool, }, @@ -69,15 +72,16 @@ impl ValidatorTxs { pub fn make_payload(&self) -> anyhow::Result { let p = match self { ValidatorTxs::Pof { + net_reward, bid_pct, - expiry: epoch_expiry, + expiry, retract, } => { if *retract { ProofOfFeePofRetractBid {} - } else { + } else if let Some(b) = bid_pct { // TODO: the u64 will truncate, but without rounding it will drop the last digit. - let scaled_bid = (bid_pct * 1000.0).round() as u64; // scale to 10ˆ3. + let scaled_bid = (b * 1000.0).round() as u64; // scale to 10ˆ3. if scaled_bid > 1100 { bail!( "a bid amount at 110.0% or above the epoch's reward, will be rejected" @@ -85,7 +89,13 @@ impl ValidatorTxs { } ProofOfFeePofUpdateBid { bid: scaled_bid, - epoch_expiry: *epoch_expiry, + epoch_expiry: *expiry, + } + } else { + // Default path is to update based on the expected net reward + ProofOfFeePofUpdateBidNetReward { + net_reward: *net_reward, + epoch_expiry: *expiry, } } }