Skip to content

Commit

Permalink
Merge pull request #57 from aboutcircles/rc-v0.3.7
Browse files Browse the repository at this point in the history
Release candidate v0.3.7 alpha
  • Loading branch information
benjaminbollen authored Oct 9, 2024
2 parents 74a6435 + be6b97d commit f6f81b9
Show file tree
Hide file tree
Showing 40 changed files with 530 additions and 266 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{"contractName":"Hub","deployedAddress":"0xa1d3Bc93D3b9BE137721A597796c1E7ae6598aEb","sourcePath":"src/hub/Hub.sol:Hub","constructor-args":"0xdbF22D4e8962Db3b2F1d9Ff55be728A887e47710 0x1De4cea0c6A4a67FA7Ce2Ff9c628D43D5AEA1984 0xA8366F19208FaE17f3707f5164bDC3c73eea2219 0xC7E57f5356c46b53A2A1395766B90A5d57981eDf 0x86eA22F850F7fe97De700d841200e148347Ca231 1675209600 31540000 https://gateway.aboutcircles.com/v1/circles/{id}.json","argumentsFile":"constructorArgs_Hub.txt"}
{"contractName":"Migration","deployedAddress":"0xA8366F19208FaE17f3707f5164bDC3c73eea2219","sourcePath":"src/migration/Migration.sol:Migration","constructor-args":"0xdbF22D4e8962Db3b2F1d9Ff55be728A887e47710 0xa1d3Bc93D3b9BE137721A597796c1E7ae6598aEb 1675209600","argumentsFile":"constructorArgs_Migration.txt"}
{"contractName":"NameRegistry","deployedAddress":"0x1De4cea0c6A4a67FA7Ce2Ff9c628D43D5AEA1984","sourcePath":"src/names/NameRegistry.sol:NameRegistry","constructor-args":"0xa1d3Bc93D3b9BE137721A597796c1E7ae6598aEb","argumentsFile":"constructorArgs_NameRegistry.txt"}
{"contractName":"ERC20Lift","deployedAddress":"0xC7E57f5356c46b53A2A1395766B90A5d57981eDf","sourcePath":"src/lift/ERC20Lift.sol:ERC20Lift","constructor-args":"0xa1d3Bc93D3b9BE137721A597796c1E7ae6598aEb 0x1De4cea0c6A4a67FA7Ce2Ff9c628D43D5AEA1984 0xcB42B236c3e58857A7F3D45df427535976e09027 0x0d52CBB59F817f23861b4571F1c056e7E3FaC6cE","argumentsFile":"constructorArgs_ERC20Lift.txt"}
{"contractName":"StandardTreasury","deployedAddress":"0x86eA22F850F7fe97De700d841200e148347Ca231","sourcePath":"src/treasury/StandardTreasury.sol:StandardTreasury","constructor-args":"0xa1d3Bc93D3b9BE137721A597796c1E7ae6598aEb 0x7881Eca1d73a2Da217Ac206Ae281048BdA0E1a94","argumentsFile":"constructorArgs_StandardTreasury.txt"}
{"contractName":"BaseGroupMintPolicy","deployedAddress":"0x92bfAbDc2D2608751C617e48469278CF19ef3C77","sourcePath":"src/groups/BaseMintPolicy.sol:MintPolicy","constructor-args":"","argumentsFile":"constructorArgs_BaseGroupMintPolicy.txt"}
{"contractName":"MastercopyDemurrageERC20","deployedAddress":"0xcB42B236c3e58857A7F3D45df427535976e09027","sourcePath":"src/lift/DemurrageCircles.sol:DemurrageCircles","constructor-args":"","argumentsFile":"constructorArgs_MastercopyDemurrageERC20.txt"}
{"contractName":"MastercopyInflationaryERC20","deployedAddress":"0x0d52CBB59F817f23861b4571F1c056e7E3FaC6cE","sourcePath":"src/lift/InflationaryCircles.sol:InflationaryCircles","constructor-args":"","argumentsFile":"constructorArgs_MastercopyInflationaryERC20.txt"}
{"contractName":"MastercopyStandardVault","deployedAddress":"0x7881Eca1d73a2Da217Ac206Ae281048BdA0E1a94","sourcePath":"src/treasury/StandardVault.sol:StandardVault","constructor-args":"","argumentsFile":"constructorArgs_MastercopyStandardVault.txt"}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
Chiado deployment
=================
Deployment Date: 2024-10-07 12:03:49
Version: rc-0.3.7-alpha
Git Commit: b824758e79ab581278c0f17bd03bde7855161afc
Deployer Address: 0x7619F26728Ced663E50E578EB6ff42430931564c, Intitial nonce: 193
Compiler Version: v0.8.23+commit.f704f362

Deployed Contracts:
Hub: 0xa1d3Bc93D3b9BE137721A597796c1E7ae6598aEb
Migration: 0xA8366F19208FaE17f3707f5164bDC3c73eea2219
NameRegistry: 0x1De4cea0c6A4a67FA7Ce2Ff9c628D43D5AEA1984
ERC20Lift: 0xC7E57f5356c46b53A2A1395766B90A5d57981eDf
StandardTreasury: 0x86eA22F850F7fe97De700d841200e148347Ca231
BaseGroupMintPolicy: 0x92bfAbDc2D2608751C617e48469278CF19ef3C77
MastercopyDemurrageERC20: 0xcB42B236c3e58857A7F3D45df427535976e09027
MastercopyInflationaryERC20: 0x0d52CBB59F817f23861b4571F1c056e7E3FaC6cE
MastercopyStandardVault: 0x7881Eca1d73a2Da217Ac206Ae281048BdA0E1a94
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@

Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
0xa1d3Bc93D3b9BE137721A597796c1E7ae6598aEb 0x1De4cea0c6A4a67FA7Ce2Ff9c628D43D5AEA1984 0xcB42B236c3e58857A7F3D45df427535976e09027 0x0d52CBB59F817f23861b4571F1c056e7E3FaC6cE
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
0xdbF22D4e8962Db3b2F1d9Ff55be728A887e47710 0x1De4cea0c6A4a67FA7Ce2Ff9c628D43D5AEA1984 0xA8366F19208FaE17f3707f5164bDC3c73eea2219 0xC7E57f5356c46b53A2A1395766B90A5d57981eDf 0x86eA22F850F7fe97De700d841200e148347Ca231 1675209600 31540000 https://gateway.aboutcircles.com/v1/circles/{id}.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@

Original file line number Diff line number Diff line change
@@ -0,0 +1 @@

Original file line number Diff line number Diff line change
@@ -0,0 +1 @@

Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
0xdbF22D4e8962Db3b2F1d9Ff55be728A887e47710 0xa1d3Bc93D3b9BE137721A597796c1E7ae6598aEb 1675209600
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
0xa1d3Bc93D3b9BE137721A597796c1E7ae6598aEb
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
0xa1d3Bc93D3b9BE137721A597796c1E7ae6598aEb 0x7881Eca1d73a2Da217Ac206Ae281048BdA0E1a94
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@

Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
0x3a0F7848071f067c25b0747eC5bEdc77cb3778eb 0x6192069E85afBD09D03f7e85eB6c35982A847e16 0xBF2F902d56d7ad2F2B1d674DC8B4d8C58354e7e5 0xD3529a99A7881DF7D11829135759AD0e4A8Ab587
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
0x29b9a7fBb8995b2423a71cC17cf9810798F6C543 0x6192069E85afBD09D03f7e85eB6c35982A847e16 0x3483cE5904413bc4Fb83DA2E43540eD769752C88 0x1CAc5fE351EFFa130223aC0f84EB6B7Efc7a66AD 0x421ae522F756412808Ff62F74C20e5ebDA8C4208 1602720000 31540000 https://gateway.aboutcircles.com/v1/circles/{id}.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@

Original file line number Diff line number Diff line change
@@ -0,0 +1 @@

Original file line number Diff line number Diff line change
@@ -0,0 +1 @@

Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
0x29b9a7fBb8995b2423a71cC17cf9810798F6C543 0x3a0F7848071f067c25b0747eC5bEdc77cb3778eb 1602720000
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
0x3a0F7848071f067c25b0747eC5bEdc77cb3778eb
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
0x3a0F7848071f067c25b0747eC5bEdc77cb3778eb 0x6604C8eBDD57F3771e4D0Cb3A174AfaEAf38C463
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{"contractName":"Hub","deployedAddress":"0x3a0F7848071f067c25b0747eC5bEdc77cb3778eb","sourcePath":"src/hub/Hub.sol:Hub","constructor-args":"0x29b9a7fBb8995b2423a71cC17cf9810798F6C543 0x6192069E85afBD09D03f7e85eB6c35982A847e16 0x3483cE5904413bc4Fb83DA2E43540eD769752C88 0x1CAc5fE351EFFa130223aC0f84EB6B7Efc7a66AD 0x421ae522F756412808Ff62F74C20e5ebDA8C4208 1602720000 31540000 https://gateway.aboutcircles.com/v1/circles/{id}.json","argumentsFile":"constructorArgs_Hub.txt"}
{"contractName":"Migration","deployedAddress":"0x3483cE5904413bc4Fb83DA2E43540eD769752C88","sourcePath":"src/migration/Migration.sol:Migration","constructor-args":"0x29b9a7fBb8995b2423a71cC17cf9810798F6C543 0x3a0F7848071f067c25b0747eC5bEdc77cb3778eb 1602720000","argumentsFile":"constructorArgs_Migration.txt"}
{"contractName":"NameRegistry","deployedAddress":"0x6192069E85afBD09D03f7e85eB6c35982A847e16","sourcePath":"src/names/NameRegistry.sol:NameRegistry","constructor-args":"0x3a0F7848071f067c25b0747eC5bEdc77cb3778eb","argumentsFile":"constructorArgs_NameRegistry.txt"}
{"contractName":"ERC20Lift","deployedAddress":"0x1CAc5fE351EFFa130223aC0f84EB6B7Efc7a66AD","sourcePath":"src/lift/ERC20Lift.sol:ERC20Lift","constructor-args":"0x3a0F7848071f067c25b0747eC5bEdc77cb3778eb 0x6192069E85afBD09D03f7e85eB6c35982A847e16 0xBF2F902d56d7ad2F2B1d674DC8B4d8C58354e7e5 0xD3529a99A7881DF7D11829135759AD0e4A8Ab587","argumentsFile":"constructorArgs_ERC20Lift.txt"}
{"contractName":"StandardTreasury","deployedAddress":"0x421ae522F756412808Ff62F74C20e5ebDA8C4208","sourcePath":"src/treasury/StandardTreasury.sol:StandardTreasury","constructor-args":"0x3a0F7848071f067c25b0747eC5bEdc77cb3778eb 0x6604C8eBDD57F3771e4D0Cb3A174AfaEAf38C463","argumentsFile":"constructorArgs_StandardTreasury.txt"}
{"contractName":"BaseGroupMintPolicy","deployedAddress":"0x48F6B0aa3Ca905C9DbE41717c7664639107257da","sourcePath":"src/groups/BaseMintPolicy.sol:MintPolicy","constructor-args":"","argumentsFile":"constructorArgs_BaseGroupMintPolicy.txt"}
{"contractName":"MastercopyDemurrageERC20","deployedAddress":"0xBF2F902d56d7ad2F2B1d674DC8B4d8C58354e7e5","sourcePath":"src/lift/DemurrageCircles.sol:DemurrageCircles","constructor-args":"","argumentsFile":"constructorArgs_MastercopyDemurrageERC20.txt"}
{"contractName":"MastercopyInflationaryERC20","deployedAddress":"0xD3529a99A7881DF7D11829135759AD0e4A8Ab587","sourcePath":"src/lift/InflationaryCircles.sol:InflationaryCircles","constructor-args":"","argumentsFile":"constructorArgs_MastercopyInflationaryERC20.txt"}
{"contractName":"MastercopyStandardVault","deployedAddress":"0x6604C8eBDD57F3771e4D0Cb3A174AfaEAf38C463","sourcePath":"src/treasury/StandardVault.sol:StandardVault","constructor-args":"","argumentsFile":"constructorArgs_MastercopyStandardVault.txt"}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
Gnosis Chain deployment
=================
Deployment Date: 2024-10-07 12:11:12
Version: rc-0.3.7-alpha
Git Commit: b824758e79ab581278c0f17bd03bde7855161afc
Deployer Address: 0x7619F26728Ced663E50E578EB6ff42430931564c, Initial nonce: 86
Compiler Version: v0.8.23+commit.f704f362

Deployed Contracts:
Hub: 0x3a0F7848071f067c25b0747eC5bEdc77cb3778eb
Migration: 0x3483cE5904413bc4Fb83DA2E43540eD769752C88
NameRegistry: 0x6192069E85afBD09D03f7e85eB6c35982A847e16
ERC20Lift: 0x1CAc5fE351EFFa130223aC0f84EB6B7Efc7a66AD
StandardTreasury: 0x421ae522F756412808Ff62F74C20e5ebDA8C4208
BaseGroupMintPolicy: 0x48F6B0aa3Ca905C9DbE41717c7664639107257da
MastercopyDemurrageERC20: 0xBF2F902d56d7ad2F2B1d674DC8B4d8C58354e7e5
MastercopyInflationaryERC20: 0xD3529a99A7881DF7D11829135759AD0e4A8Ab587
MastercopyStandardVault: 0x6604C8eBDD57F3771e4D0Cb3A174AfaEAf38C463
2 changes: 1 addition & 1 deletion script/deployments/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "deploy-circles",
"version": "rc-0.3.6-alpha",
"version": "rc-0.3.7-alpha",
"type": "module",
"dependencies": {
"dotenv": "^16.4.5",
Expand Down
57 changes: 35 additions & 22 deletions src/circles/Circles.sol
Original file line number Diff line number Diff line change
Expand Up @@ -28,12 +28,6 @@ contract Circles is ERC1155, ICirclesErrors {

// Constants

/**
* @notice Issue one Circle per hour for each human in demurraged units.
* So per second issue 10**18 / 3600 = 277777777777778 attoCircles.
*/
uint256 private constant ISSUANCE_PER_SECOND = uint256(277777777777778);

/**
* @notice Upon claiming, the maximum claim is upto two weeks
* of history. Unclaimed older Circles are unclaimable.
Expand Down Expand Up @@ -88,12 +82,16 @@ contract Circles is ERC1155, ICirclesErrors {
MintTime memory mintTime = mintTimes[_human];
if (mintTime.mintV1Status != address(0) && mintTime.mintV1Status != CIRCLES_STOPPED_V1) {
// Circles v1 contract cannot be active.
revert CirclesERC1155MintBlocked(_human, mintTime.mintV1Status);
// revert CirclesERC1155MintBlocked(_human, mintTime.mintV1Status);
revert CirclesErrorOneAddressArg(_human, 0xC0);
}

if (uint256(mintTime.lastMintTime) + 1 hours > block.timestamp) {
// Mint time is set to indefinite future for stopped mints in v2
// and only complete hours get minted, so shortcut the calculation
// Check if at least one new completed hour is mintable
uint256 lastCompletedHour = mintTime.lastMintTime / 1 hours;
uint256 currentCompletedHour = block.timestamp / 1 hours;

if (lastCompletedHour >= currentCompletedHour || mintTime.lastMintTime == INDEFINITE_FUTURE) {
// No new completed hour to mint, or stopped
return (0, 0, 0);
}

Expand All @@ -112,10 +110,17 @@ contract Circles is ERC1155, ICirclesErrors {
// calculate the number of completed hours in day A until `startMint`
int128 k = Math64x64.fromUInt((startMint - (dA * 1 days + inflationDayZero)) / 1 hours);

// Calculate the number of incompleted hours remaining in day B from current timestamp
int128 l = Math64x64.fromUInt(((dB + 1) * 1 days + inflationDayZero - block.timestamp) / 1 hours + 1);
// Calculate the number of seconds remaining in the current day (dB)
uint256 secondsRemainingInB = ((dB + 1) * 1 days + inflationDayZero - block.timestamp);
// Calculate the number of complete hours remaining
uint256 hoursRemainingInB = secondsRemainingInB / 1 hours;
// Calculate l:
// If there are any seconds beyond complete hours, add 1 to account for the incomplete hour
// Convert the result to int128 using Math64x64.fromUInt
int128 l = Math64x64.fromUInt(hoursRemainingInB + (secondsRemainingInB % 1 hours > 0 ? 1 : 0));

// calculate the overcounted (demurraged) k (in day A) and l (in day B) hours
// note that the hours l are not demurraged as it is current day by construction
int128 overcount = Math64x64.add(Math64x64.mul(R[n], k), l);

// subtract the overcount from the total issuance, and convert to attoCircles
Expand All @@ -138,24 +143,33 @@ contract Circles is ERC1155, ICirclesErrors {
// No issuance to claim, simply return without reverting
return;
}
// mint personal Circles to the human
_mintAndUpdateTotalSupply(_human, toTokenId(_human), issuance, "");
// update the last mint time

// update the last mint time, before minting as mint time determines the check (guard for reeentrancy attack)
mintTimes[_human].lastMintTime = uint96(block.timestamp);

// mint personal Circles to the human; ERC1155 mint will perform acceptance call
_mintAndUpdateTotalSupply(_human, toTokenId(_human), issuance, "", true);

emit PersonalMint(_human, issuance, startPeriod, endPeriod);
}

function _mintAndUpdateTotalSupply(address _account, uint256 _id, uint256 _value, bytes memory _data) internal {
_mint(_account, _id, _value, _data);
function _mintAndUpdateTotalSupply(
address _account,
uint256 _id,
uint256 _value,
bytes memory _data,
bool _doAcceptanceCheck
) internal {
_mint(_account, _id, _value, _data, _doAcceptanceCheck);

uint64 today = day(block.timestamp);
DiscountedBalance memory totalSupplyBalance = discountedTotalSupplies[_id];
uint256 newTotalSupply =
_calculateDiscountedBalance(totalSupplyBalance.balance, today - totalSupplyBalance.lastUpdatedDay) + _value;
if (newTotalSupply > MAX_VALUE) {
// DiscountedBalances: balance exceeds maximum value
revert CirclesDemurrageAmountExceedsMaxUint190(_account, _id, newTotalSupply, 2);
// revert CirclesDemurrageAmountExceedsMaxUint192(_account, _id, newTotalSupply, 2);
revert CirclesErrorAddressUintArgs(_account, _id, 0x80);
}
totalSupplyBalance.balance = uint192(newTotalSupply);
totalSupplyBalance.lastUpdatedDay = today;
Expand All @@ -176,7 +190,8 @@ contract Circles is ERC1155, ICirclesErrors {
// and the total supply might differ on the least significant bits.
// There is no good way to handle this, so user should burn a few attoCRC less,
// or wait a day for the total supply to be discounted to zero automatically.
revert CirclesLogicAssertion(4);
// revert CirclesLogicAssertion(4);
revert CirclesErrorNoArgs(0x84);
}
unchecked {
totalSupplyBalance.balance = uint192(discountedTotalSupply - _value);
Expand All @@ -185,14 +200,12 @@ contract Circles is ERC1155, ICirclesErrors {
discountedTotalSupplies[_id] = totalSupplyBalance;
}

// Private functions

/**
* @dev Max function to compare two values.
* @param a Value a
* @param b Value b
*/
function _max(uint256 a, uint256 b) private pure returns (uint256) {
function _max(uint256 a, uint256 b) internal pure returns (uint256) {
return a >= b ? a : b;
}
}
7 changes: 4 additions & 3 deletions src/circles/Demurrage.sol
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ pragma solidity >=0.8.24;
import {ABDKMath64x64 as Math64x64} from "lib/abdk-libraries-solidity/ABDKMath64x64.sol";
import "../errors/Errors.sol";

contract Demurrage is ICirclesDemurrageErrors {
contract Demurrage is ICirclesCompactErrors, ICirclesDemurrageErrors {
// Type declarations

/**
Expand Down Expand Up @@ -256,9 +256,10 @@ contract Demurrage is ICirclesDemurrageErrors {
R[_dayDifference] = demurrageFactor;
}
return demurrageFactor;
} else {
return Math64x64.pow(GAMMA_64x64, _dayDifference);
}
// if the day difference is for older than 14 days, calculate the value
// and do not cache it
return Math64x64.pow(GAMMA_64x64, _dayDifference);
}

/**
Expand Down
17 changes: 13 additions & 4 deletions src/circles/DiscountedBalances.sol
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,10 @@ contract DiscountedBalances is Demurrage {
*/
mapping(uint256 => DiscountedBalance) internal discountedTotalSupplies;

// Events

event DiscountCost(address indexed account, uint256 indexed id, uint256 discountCost);

// Constructor

/**
Expand Down Expand Up @@ -46,7 +50,8 @@ contract DiscountedBalances is Demurrage {
DiscountedBalance memory discountedBalance = discountedBalances[_id][_account];
if (_day < discountedBalance.lastUpdatedDay) {
// DiscountedBalances: day is before last updated day
revert CirclesDemurrageDayBeforeLastUpdatedDay(_account, _id, _day, discountedBalance.lastUpdatedDay, 0);
// revert CirclesDemurrageDayBeforeLastUpdatedDay(_account, _id, _day, discountedBalance.lastUpdatedDay, 0);
revert CirclesErrorAddressUintArgs(_account, discountedBalance.lastUpdatedDay, 0xA0);
}
uint256 dayDifference;
unchecked {
Expand Down Expand Up @@ -93,7 +98,8 @@ contract DiscountedBalances is Demurrage {
function _updateBalance(address _account, uint256 _id, uint256 _balance, uint64 _day) internal {
if (_balance > MAX_VALUE) {
// DiscountedBalances: balance exceeds maximum value
revert CirclesDemurrageAmountExceedsMaxUint190(_account, _id, _balance, 0);
// revert CirclesDemurrageAmountExceedsMaxUint192(_account, _id, _balance, 0);
revert CirclesErrorAddressUintArgs(_account, _id, 0x81);
}
DiscountedBalance memory discountedBalance = discountedBalances[_id][_account];
discountedBalance.balance = uint192(_balance);
Expand All @@ -112,7 +118,8 @@ contract DiscountedBalances is Demurrage {
DiscountedBalance memory discountedBalance = discountedBalances[_id][_account];
if (_day < discountedBalance.lastUpdatedDay) {
// DiscountedBalances: day is before last updated day
revert CirclesDemurrageDayBeforeLastUpdatedDay(_account, _id, _day, discountedBalance.lastUpdatedDay, 1);
// revert CirclesDemurrageDayBeforeLastUpdatedDay(_account, _id, _day, discountedBalance.lastUpdatedDay, 1);
revert CirclesErrorAddressUintArgs(_account, discountedBalance.lastUpdatedDay, 0xA1);
}
uint256 dayDifference;
unchecked {
Expand All @@ -124,12 +131,14 @@ contract DiscountedBalances is Demurrage {
uint256 discountCost = discountedBalance.balance - discountedBalanceOnDay;
if (discountCost > 0) {
emit IERC1155.TransferSingle(msg.sender, _account, address(0), _id, discountCost);
emit DiscountCost(_account, _id, discountCost);
}
}
uint256 updatedBalance = discountedBalanceOnDay + _value;
if (updatedBalance > MAX_VALUE) {
// DiscountedBalances: balance exceeds maximum value
revert CirclesDemurrageAmountExceedsMaxUint190(_account, _id, updatedBalance, 1);
// revert CirclesDemurrageAmountExceedsMaxUint190(_account, _id, updatedBalance, 1);
revert CirclesErrorAddressUintArgs(_account, _id, 0x82);
}
discountedBalance.balance = uint192(updatedBalance);
discountedBalance.lastUpdatedDay = _day;
Expand Down
Loading

0 comments on commit f6f81b9

Please sign in to comment.