Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 14 additions & 3 deletions libs/types-internal/src/event.rs
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,9 @@ pub enum EventType {
Init(InitArgs),
/// The minter upgraded with the specified arguments.
Upgrade(UpgradeArgs),
/// A user manually submitted a valid ckSOL deposit transaction via
/// `process_deposit`. ckSOL tokens have not yet been minted for this deposit.
AcceptedManualDeposit {
/// A valid ckSOL deposit was discovered. ckSOL tokens have not yet been
/// minted for this deposit.
AcceptedDeposit {
/// The signature of the Solana deposit transaction.
signature: Signature,
/// The account to which the minter should mint ckSOL.
Expand All @@ -36,6 +36,8 @@ pub enum EventType {
/// This amount is generally lower than `deposit_amount` due
/// to the deposit fee.
amount_to_mint: Lamport,
/// The source of the deposit — manual or automatic.
source: DepositSource,
},
/// The minter discovered a Solana transaction that is a valid ckSOL
/// deposit, but it is unknown whether ckSOL tokens were minted for
Expand Down Expand Up @@ -123,6 +125,15 @@ pub enum EventType {
},
}

/// The source of an accepted deposit.
#[derive(Clone, Copy, Debug, PartialEq, CandidType, Deserialize)]
pub enum DepositSource {
/// The deposit was submitted manually via `process_deposit`.
Manual,
/// The deposit was discovered automatically by the minter's polling mechanism.
Automatic,
}

/// The purpose of a submitted Solana transaction.
#[derive(Clone, Debug, PartialEq, CandidType, Deserialize)]
pub enum TransactionPurpose {
Expand Down
16 changes: 13 additions & 3 deletions minter/cksol_minter.did
Original file line number Diff line number Diff line change
Expand Up @@ -322,6 +322,14 @@ type TransactionPurpose = variant {
};
};

// The source of an accepted deposit.
type DepositSource = variant {
// The deposit was submitted manually via `process_deposit`.
Manual;
// The deposit was discovered automatically by the minter's polling mechanism.
Automatic;
};

// A minter event payload.
//
// *WARNING*: This type is used exclusively by the debug `get_events` endpoint.
Expand All @@ -336,9 +344,9 @@ type EventType = variant {
// burned the requested amount of ckSOL.
// The Solana transaction was not generated yet.
AcceptedWithdrawalRequest : AcceptedWithdrawalRequest;
// A user manually submitted a valid ckSOL deposit transaction via
// `process_deposit`. ckSOL tokens have not yet been minted for this deposit.
AcceptedManualDeposit : record {
// A valid ckSOL deposit was discovered. ckSOL tokens have not yet been
// minted for this deposit.
AcceptedDeposit : record {
// The signature of the Solana deposit transaction.
signature: Signature;
// The account to which the minter should mint ckSOL.
Expand All @@ -349,6 +357,8 @@ type EventType = variant {
// This amount is generally lower than `deposit_amount` due
// to the deposit fee.
amount_to_mint: Lamport;
// The source of the deposit — manual or automatic.
source: DepositSource;
};
// The minter discovered a Solana transaction that is a valid ckSOL
// deposit, but it is unknown whether ckSOL tokens were minted for
Expand Down
17 changes: 12 additions & 5 deletions minter/src/canbench.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,10 @@ use crate::{
runtime::IcCanisterRuntime,
state::{
audit::{process_event, replay_events},
event::{DepositId, EventType, TransactionPurpose, VersionedMessage, WithdrawalRequest},
event::{
DepositId, DepositSource, EventType, TransactionPurpose, VersionedMessage,
WithdrawalRequest,
},
init_once_state, mutate_state, reset_state,
},
storage::{reset_events, total_event_count, with_event_iter},
Expand Down Expand Up @@ -97,10 +100,11 @@ fn setup_10k_events() {
mutate_state(|s| {
process_event(
s,
EventType::AcceptedManualDeposit {
EventType::AcceptedDeposit {
deposit_id: id,
deposit_amount: amount,
amount_to_mint: amount - deposit_fee,
source: DepositSource::Manual,
},
&runtime,
)
Expand Down Expand Up @@ -147,10 +151,11 @@ fn setup_10k_events() {
mutate_state(|s| {
process_event(
s,
EventType::AcceptedManualDeposit {
EventType::AcceptedDeposit {
deposit_id: id,
deposit_amount: amount,
amount_to_mint: amount - deposit_fee,
source: DepositSource::Manual,
},
&runtime,
)
Expand Down Expand Up @@ -211,10 +216,11 @@ fn setup_10k_events() {
mutate_state(|s| {
process_event(
s,
EventType::AcceptedManualDeposit {
EventType::AcceptedDeposit {
deposit_id: id,
deposit_amount: amount,
amount_to_mint: amount - deposit_fee,
source: DepositSource::Manual,
},
&runtime,
)
Expand Down Expand Up @@ -260,10 +266,11 @@ fn setup_10k_events() {
mutate_state(|s| {
process_event(
s,
EventType::AcceptedManualDeposit {
EventType::AcceptedDeposit {
deposit_id: id,
deposit_amount: amount,
amount_to_mint: amount - deposit_fee,
source: DepositSource::Manual,
},
&runtime,
)
Expand Down
14 changes: 7 additions & 7 deletions minter/src/consolidate/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ async fn should_return_early_if_task_already_active() {

// Only events from setup
EventsAssert::from_recorded()
.expect_event(|e| assert_matches!(e, EventType::AcceptedManualDeposit { .. }))
.expect_event(|e| assert_matches!(e, EventType::AcceptedDeposit { .. }))
.expect_event(|e| assert_matches!(e, EventType::Minted { .. }))
.assert_no_more_events();
}
Expand All @@ -65,7 +65,7 @@ async fn should_return_early_if_fetching_blockhash_fails() {

// Only events from setup
EventsAssert::from_recorded()
.expect_event(|e| assert_matches!(e, EventType::AcceptedManualDeposit { .. }))
.expect_event(|e| assert_matches!(e, EventType::AcceptedDeposit { .. }))
.expect_event(|e| assert_matches!(e, EventType::Minted { .. }))
.assert_no_more_events();
}
Expand All @@ -91,7 +91,7 @@ async fn should_submit_single_consolidation_request() {
consolidate_deposits(runtime).await;

EventsAssert::from_recorded()
.expect_event(|e| assert_matches!(e, EventType::AcceptedManualDeposit { .. }))
.expect_event(|e| assert_matches!(e, EventType::AcceptedDeposit { .. }))
.expect_event(|e| assert_matches!(e, EventType::Minted { .. }))
.expect_event(|e| {
assert_matches!(e, EventType::SubmittedTransaction {
Expand Down Expand Up @@ -127,7 +127,7 @@ async fn should_record_events_even_if_transaction_submission_fails() {
consolidate_deposits(runtime).await;

EventsAssert::from_recorded()
.expect_event(|e| assert_matches!(e, EventType::AcceptedManualDeposit { .. }))
.expect_event(|e| assert_matches!(e, EventType::AcceptedDeposit { .. }))
.expect_event(|e| assert_matches!(e, EventType::Minted { .. }))
.expect_event(|e| {
assert_matches!(e, EventType::SubmittedTransaction {
Expand Down Expand Up @@ -177,7 +177,7 @@ async fn should_submit_multiple_consolidation_batches() {
// Events from setup
for _ in 0..NUM_DEPOSITS {
events_assert = events_assert
.expect_event(|e| assert_matches!(e, EventType::AcceptedManualDeposit { .. }))
.expect_event(|e| assert_matches!(e, EventType::AcceptedDeposit { .. }))
.expect_event(|e| assert_matches!(e, EventType::Minted { .. }));
}
// Batch 1:
Expand Down Expand Up @@ -239,9 +239,9 @@ async fn should_consolidate_multiple_deposits_to_same_account_in_single_transfer
consolidate_deposits(runtime).await;

EventsAssert::from_recorded()
.expect_event(|e| assert_matches!(e, EventType::AcceptedManualDeposit { .. }))
.expect_event(|e| assert_matches!(e, EventType::AcceptedDeposit { .. }))
.expect_event(|e| assert_matches!(e, EventType::Minted { .. }))
.expect_event(|e| assert_matches!(e, EventType::AcceptedManualDeposit { .. }))
.expect_event(|e| assert_matches!(e, EventType::AcceptedDeposit { .. }))
.expect_event(|e| assert_matches!(e, EventType::Minted { .. }))
.expect_event(|e| {
assert_matches!(e, EventType::SubmittedTransaction {
Expand Down
5 changes: 3 additions & 2 deletions minter/src/deposit/manual/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ use crate::{
state::{
Deposit,
audit::process_event,
event::{DepositId, EventType},
event::{DepositId, DepositSource, EventType},
mutate_state, read_state,
},
};
Expand Down Expand Up @@ -96,10 +96,11 @@ async fn try_accept_deposit<R: CanisterRuntime>(
mutate_state(|state| {
process_event(
state,
EventType::AcceptedManualDeposit {
EventType::AcceptedDeposit {
deposit_id,
deposit_amount,
amount_to_mint,
source: DepositSource::Manual,
},
runtime,
)
Expand Down
8 changes: 5 additions & 3 deletions minter/src/deposit/manual/tests.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
use crate::{
constants::GET_TRANSACTION_CYCLES,
deposit::manual::process_deposit,
state::event::{DepositId, EventType},
state::event::{DepositId, DepositSource, EventType},
storage::reset_events,
test_fixtures::{
BLOCK_INDEX, DEPOSIT_CONSOLIDATION_FEE, EventsAssert, MANUAL_DEPOSIT_FEE,
Expand Down Expand Up @@ -245,13 +245,14 @@ mod process_deposit_tests {
);

EventsAssert::from_recorded()
.expect_event_eq(EventType::AcceptedManualDeposit {
.expect_event_eq(EventType::AcceptedDeposit {
deposit_id: DepositId {
signature,
account: DEPOSITOR_ACCOUNT,
},
deposit_amount: DEPOSIT_AMOUNT,
amount_to_mint: DEPOSIT_AMOUNT - MANUAL_DEPOSIT_FEE,
source: DepositSource::Manual,
})
.expect_event_eq(EventType::Minted {
deposit_id: DepositId {
Expand Down Expand Up @@ -397,10 +398,11 @@ mod process_deposit_tests {
account: ACCOUNTS[i],
};
events_assert = events_assert
.expect_event_eq(EventType::AcceptedManualDeposit {
.expect_event_eq(EventType::AcceptedDeposit {
deposit_id,
deposit_amount: DEPOSIT_AMOUNTS[i],
amount_to_mint: DEPOSIT_AMOUNTS[i] - MANUAL_DEPOSIT_FEE,
source: DepositSource::Manual,
})
.expect_event_eq(EventType::Minted {
deposit_id,
Expand Down
13 changes: 10 additions & 3 deletions minter/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,9 @@ fn withdrawal_status(args: WithdrawalStatusArgs) -> WithdrawalStatus {
fn get_events(
args: cksol_types_internal::event::GetEventsArgs,
) -> cksol_types_internal::event::GetEventsResult {
use cksol_minter::state::event::{Event, EventType, TransactionPurpose, VersionedMessage};
use cksol_minter::state::event::{
DepositSource, Event, EventType, TransactionPurpose, VersionedMessage,
};
use cksol_types_internal::event;

const MAX_EVENTS_PER_RESPONSE: u64 = 2_000;
Expand All @@ -129,15 +131,20 @@ fn get_events(
amount_to_transfer: request.amount_to_transfer,
}
}
EventType::AcceptedManualDeposit {
EventType::AcceptedDeposit {
deposit_id,
deposit_amount,
amount_to_mint,
} => event::EventType::AcceptedManualDeposit {
source,
} => event::EventType::AcceptedDeposit {
signature: deposit_id.signature.into(),
account: deposit_id.account,
deposit_amount,
amount_to_mint,
source: match source {
DepositSource::Manual => event::DepositSource::Manual,
DepositSource::Automatic => event::DepositSource::Automatic,
},
},
EventType::Minted {
deposit_id,
Expand Down
3 changes: 2 additions & 1 deletion minter/src/state/audit.rs
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,11 @@ fn apply_state_transition(state: &mut State, payload: &EventType, timestamp: u64
EventType::AcceptedWithdrawalRequest(request) => {
state.process_accepted_withdrawal(request, timestamp);
}
EventType::AcceptedManualDeposit {
EventType::AcceptedDeposit {
deposit_id,
deposit_amount,
amount_to_mint,
source: _,
} => {
state.process_accepted_deposit(deposit_id, deposit_amount, amount_to_mint);
}
Expand Down
18 changes: 15 additions & 3 deletions minter/src/state/event.rs
Original file line number Diff line number Diff line change
Expand Up @@ -42,16 +42,18 @@ pub enum EventType {
/// The minter upgraded with the specified arguments.
#[n(1)]
Upgrade(#[n(0)] UpgradeArgs),
/// A user manually submitted a valid ckSOL deposit transaction via
/// `process_deposit`. ckSOL tokens have not yet been minted for this deposit.
/// A valid ckSOL deposit was discovered. ckSOL tokens have not yet been
/// minted for this deposit.
#[n(2)]
AcceptedManualDeposit {
AcceptedDeposit {
#[n(0)]
deposit_id: DepositId,
#[n(1)]
deposit_amount: Lamport,
#[n(2)]
amount_to_mint: Lamport,
#[n(3)]
source: DepositSource,
},
/// The minter discovered a Solana transaction that is a valid ckSOL
/// deposit, but it is unknown whether ckSOL tokens were minted for
Expand Down Expand Up @@ -144,6 +146,16 @@ pub enum EventType {
},
}

/// The source of an accepted deposit — whether it was submitted manually or
/// discovered automatically by the minter's polling mechanism.
#[derive(Clone, Copy, Eq, PartialEq, Debug, Decode, Encode)]
pub enum DepositSource {
#[n(0)]
Manual,
#[n(1)]
Automatic,
}

/// Payload of the `AcceptedWithdrawalRequest` event.
#[derive(Clone, Eq, PartialEq, Debug, Decode, Encode)]
pub struct WithdrawalRequest {
Expand Down
Loading
Loading