From 6168dd8ab3855b1d24c733008265d7c0ca8534e4 Mon Sep 17 00:00:00 2001 From: Csongor Kiss Date: Thu, 24 Aug 2023 17:58:38 +0100 Subject: [PATCH] near/contracts: clamp upgrade repayment delta to 0 This ensures that the refund amount is at most the attached deposit when upgrading the contract. --- near/contracts/nft-bridge/src/lib.rs | 4 ++++ near/contracts/token-bridge/src/lib.rs | 4 ++++ near/contracts/wormhole/src/lib.rs | 4 ++++ 3 files changed, 12 insertions(+) diff --git a/near/contracts/nft-bridge/src/lib.rs b/near/contracts/nft-bridge/src/lib.rs index 5132eb184..e9f14e457 100644 --- a/near/contracts/nft-bridge/src/lib.rs +++ b/near/contracts/nft-bridge/src/lib.rs @@ -48,6 +48,8 @@ use { pub mod byte_utils; pub mod state; +use std::cmp::max; + use crate::byte_utils::{ get_string_from_32, ByteUtils, @@ -791,6 +793,8 @@ impl NFTBridge { ) { let delta = (env::storage_usage() as i128 - storage_used as i128) * env::storage_byte_cost() as i128; + let delta = max(0, delta); + let refund = attached_deposit as i128 - delta; if refund > 0 { env::log_str(&format!( diff --git a/near/contracts/token-bridge/src/lib.rs b/near/contracts/token-bridge/src/lib.rs index 8caa36083..ec9095f93 100644 --- a/near/contracts/token-bridge/src/lib.rs +++ b/near/contracts/token-bridge/src/lib.rs @@ -40,6 +40,8 @@ use { pub mod byte_utils; pub mod state; +use std::cmp::max; + use crate::byte_utils::{ get_string_from_32, ByteUtils, @@ -1709,6 +1711,8 @@ impl TokenBridge { )); let delta = (env::storage_usage() as i128 - storage_used as i128) * env::storage_byte_cost() as i128; + let delta = max(0, delta); + let refund = attached_deposit as i128 - delta; if refund > 0 { env::log_str(&format!( diff --git a/near/contracts/wormhole/src/lib.rs b/near/contracts/wormhole/src/lib.rs index 1e4af31cf..d405c0d5a 100644 --- a/near/contracts/wormhole/src/lib.rs +++ b/near/contracts/wormhole/src/lib.rs @@ -26,6 +26,8 @@ pub mod byte_utils; pub mod state; +use std::cmp::max; + use crate::byte_utils::{ get_string_from_32, ByteUtils, @@ -582,6 +584,8 @@ impl Wormhole { ) { let delta = (env::storage_usage() as i128 - storage_used as i128) * env::storage_byte_cost() as i128; + let delta = max(0, delta); + let refund = attached_deposit as i128 - delta; if refund > 0 { env::log_str(&format!(