From 67abd6305a9318e1aef2db970493b81f78f420b7 Mon Sep 17 00:00:00 2001 From: Sean Date: Mon, 10 Jun 2024 17:17:35 +0900 Subject: [PATCH] refactor: use `u256` --- src/libraries/currency_delta.cairo | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/src/libraries/currency_delta.cairo b/src/libraries/currency_delta.cairo index b55461c..007ffb8 100644 --- a/src/libraries/currency_delta.cairo +++ b/src/libraries/currency_delta.cairo @@ -4,7 +4,7 @@ mod CurrencyDelta { #[storage] struct Storage { - currency_delta: LegacyMap::<(ContractAddress, ContractAddress), i128> + currency_delta: LegacyMap::<(ContractAddress, ContractAddress), (bool, u256)> } #[generate_trait] @@ -15,7 +15,7 @@ mod CurrencyDelta { ref self: ComponentState, locker: ContractAddress, currency: ContractAddress, - ) -> i128 { + ) -> (bool, u256) { self.currency_delta.read((locker, currency)) } @@ -23,10 +23,19 @@ mod CurrencyDelta { ref self: ComponentState, locker: ContractAddress, currency: ContractAddress, - delta: i128, + sign: bool, + delta: u256, ) { - let mut currency_delta = self.currency_delta.read((locker, currency)); - self.currency_delta.write((locker, currency), currency_delta + delta) + let (sign_delta, currency_delta): (bool, u256) = self.currency_delta.read((locker, currency)); + if sign_delta == sign { + self.currency_delta.write((locker, currency), (sign, currency_delta + delta)) + } else if currency_delta == delta { + self.currency_delta.write((locker, currency), (false, 0)) + } else if currency_delta < delta { + self.currency_delta.write((locker, currency), (sign, delta - currency_delta)) + } else { + self.currency_delta.write((locker, currency), (sign_delta, currency_delta - delta)) + } } } }