improve logging during payment parsing

This commit is contained in:
Bryan Stitt 2023-07-26 16:39:17 -07:00
parent 9bc1e5a783
commit 788ebff29f

@ -308,22 +308,26 @@ pub async fn user_balance_post(
let mut response_data = vec![];
for log in transaction_receipt.logs {
if let Some(true) = log.removed {
debug!(?log, "log removed");
// TODO: do we need to make sure this row is deleted? it should be handled by `handle_uncle_block`
continue;
}
if log.address != payment_factory_address {
trace!(?log, ?payment_factory_address, "wrong log address");
continue;
}
info!(?log, "likely relevant");
// Parse the log into an event
if let Ok(event) = payment_factory_contract
.decode_event::<payment_factory::PaymentReceivedFilter>(
match payment_factory_contract.decode_event::<payment_factory::PaymentReceivedFilter>(
"PaymentReceived",
log.topics,
log.data,
)
{
) {
Err(err) => debug!(?err, "failed parsing log as PaymentReceived"),
Ok(event) => {
let recipient_account = event.account;
let payment_token_address = event.token;
let payment_token_wei = event.amount;
@ -340,13 +344,15 @@ pub async fn user_balance_post(
.as_u64();
// the internal provider will handle caching of requests
let payment_token = IERC20::new(payment_token_address, app.internal_provider().clone());
let payment_token =
IERC20::new(payment_token_address, app.internal_provider().clone());
// get the decimals for the token
// hopefully u32 is always enough, because the Decimal crate doesn't accept a larger scale
// <https://eips.ethereum.org/EIPS/eip-20> uses uint8, but i've seen pretty much every int in practice
let payment_token_decimals = payment_token.decimals().call().await?.as_u32();
let mut payment_token_amount = Decimal::from_str_exact(&payment_token_wei.to_string())?;
let mut payment_token_amount =
Decimal::from_str_exact(&payment_token_wei.to_string())?;
// Setting the scale already does the decimal shift, no need to divide a second time
payment_token_amount.set_scale(payment_token_decimals)?;
@ -425,6 +431,7 @@ pub async fn user_balance_post(
};
}
}
}
let response = (StatusCode::CREATED, Json(json!(response_data))).into_response();