reject tickets with more than a single payment

This commit is contained in:
Jędrzej Stuczyński
2024-07-25 17:35:53 +01:00
parent 4c10cebf1b
commit 06fca9bd1f
3 changed files with 20 additions and 0 deletions
@@ -102,6 +102,11 @@ pub enum RequestHandlingError {
#[error(transparent)]
EcashFailure(EcashTicketError),
#[error(
"the received payment contained more than a single ticket. that's currently not supported"
)]
MultipleTickets,
}
impl RequestHandlingError {
@@ -413,6 +418,10 @@ where
// check if the credential hasn't been spent before
let serial_number = credential.data.encoded_serial_number();
if credential.data.payment.spend_value != 1 {
return Err(RequestHandlingError::MultipleTickets);
}
self.check_credential_spending_date(credential.data.spend_date, spend_date.ecash_date())?;
self.check_bloomfilter(&serial_number).await?;
self.check_local_db_for_double_spending(&serial_number)
@@ -96,6 +96,11 @@ pub enum EcashTicketVerificationRejection {
#[error("failed to verify the provided ticket")]
InvalidTicket,
#[error(
"the received payment contained more than a single ticket. that's currently not supported"
)]
MultipleTickets,
}
// All strings are base58 encoded representations of structs
+6
View File
@@ -37,6 +37,12 @@ pub async fn verify_ticket(
) -> crate::ecash::error::Result<Json<EcashTicketVerificationResponse>> {
let credential_data = &verify_ticket_body.credential;
let gateway_cosmos_addr = &verify_ticket_body.gateway_cosmos_addr;
// easy check: is there only a single payment attached?
if credential_data.payment.spend_value != 1 {
return reject_ticket(EcashTicketVerificationRejection::MultipleTickets);
}
let sn = &credential_data.encoded_serial_number();
let spend_date = credential_data.spend_date;
let epoch_id = credential_data.epoch_id;