Skip to content

Commit

Permalink
add secp256r1 to cost-model
Browse files Browse the repository at this point in the history
  • Loading branch information
samkim-crypto committed Dec 4, 2024
1 parent 4dc208f commit 770f0b2
Show file tree
Hide file tree
Showing 4 changed files with 33 additions and 0 deletions.
4 changes: 4 additions & 0 deletions cost-model/src/block_cost_limits.rs
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,10 @@ pub const SECP256K1_VERIFY_COST: u64 = COMPUTE_UNIT_TO_US_RATIO * 223;
pub const ED25519_VERIFY_COST: u64 = COMPUTE_UNIT_TO_US_RATIO * 76;
/// Number of compute units for one ed25519 strict signature verification.
pub const ED25519_VERIFY_STRICT_COST: u64 = COMPUTE_UNIT_TO_US_RATIO * 80;
/// Number of compute units for one secp256k1 signature verification.
///
/// TODO: update actual compute cost
pub const SECP256R1_VERIFY_COST: u64 = COMPUTE_UNIT_TO_US_RATIO * 999_999;
/// Number of compute units for one write lock
pub const WRITE_LOCK_UNITS: u64 = COMPUTE_UNIT_TO_US_RATIO * 10;
/// Number of data bytes per compute units
Expand Down
5 changes: 5 additions & 0 deletions cost-model/src/cost_model.rs
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,11 @@ impl CostModel {
.num_ed25519_instruction_signatures()
.saturating_mul(ed25519_verify_cost),
)
.saturating_add(
signatures_count_detail
.num_secp256r1_instruction_signatures()
.saturating_mul(SECP256R1_VERIFY_COST),
)
}

fn get_writable_accounts(message: &impl SVMMessage) -> impl Iterator<Item = &Pubkey> {
Expand Down
14 changes: 14 additions & 0 deletions cost-model/src/cost_tracker.rs
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@ pub struct CostTracker {
/// the tracker, but are still waiting for an update with actual usage or
/// removal if the transaction does not end up getting committed.
in_flight_transaction_count: usize,
secp256r1_instruction_signature_count: u64,
}

impl Default for CostTracker {
Expand All @@ -102,6 +103,7 @@ impl Default for CostTracker {
secp256k1_instruction_signature_count: 0,
ed25519_instruction_signature_count: 0,
in_flight_transaction_count: 0,
secp256r1_instruction_signature_count: 0,
}
}
}
Expand Down Expand Up @@ -256,6 +258,11 @@ impl CostTracker {
self.in_flight_transaction_count,
i64
),
(
"secp256r1_instruction_signature_count",
self.secp256r1_instruction_signature_count,
i64
)
);
}

Expand Down Expand Up @@ -334,6 +341,10 @@ impl CostTracker {
self.ed25519_instruction_signature_count,
tx_cost.num_ed25519_instruction_signatures()
);
saturating_add_assign!(
self.secp256r1_instruction_signature_count,
tx_cost.num_secp256r1_instruction_signatures()
);
self.add_transaction_execution_cost(tx_cost, tx_cost.sum())
}

Expand All @@ -353,6 +364,9 @@ impl CostTracker {
self.ed25519_instruction_signature_count = self
.ed25519_instruction_signature_count
.saturating_sub(tx_cost.num_ed25519_instruction_signatures());
self.secp256r1_instruction_signature_count = self
.secp256r1_instruction_signature_count
.saturating_sub(tx_cost.num_secp256r1_instruction_signatures());
}

/// Apply additional actual execution units to cost_tracker
Expand Down
10 changes: 10 additions & 0 deletions cost-model/src/transaction_cost.rs
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,16 @@ impl<'a, Tx: TransactionWithMeta> TransactionCost<'a, Tx> {
.num_ed25519_instruction_signatures(),
}
}

pub fn num_secp256r1_instruction_signatures(&self) -> u64 {
match self {
Self::SimpleVote { .. } => 0,
Self::Transaction(usage_cost) => usage_cost
.transaction
.signature_details()
.num_secp256r1_instruction_signatures(),
}
}
}

// costs are stored in number of 'compute unit's
Expand Down

0 comments on commit 770f0b2

Please sign in to comment.