near/contracts: clamp upgrade repayment delta to 0

This ensures that the refund amount is at most the attached deposit when
upgrading the contract.
This commit is contained in:
Csongor Kiss 2023-08-24 17:58:38 +01:00 committed by Evan Gray
parent 446cbaaa53
commit 6168dd8ab3
3 changed files with 12 additions and 0 deletions

View File

@ -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!(

View File

@ -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!(

View File

@ -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!(