Skip to content

Commit

Permalink
Initial observations fix timestamps and observation calculation
Browse files Browse the repository at this point in the history
  • Loading branch information
MilGard91 authored and shark0der committed Oct 18, 2023
1 parent 0800394 commit 855f720
Showing 1 changed file with 8 additions and 8 deletions.
16 changes: 8 additions & 8 deletions contracts/modules/capital/Ramm.sol
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,6 @@ contract Ramm is IRamm, MasterAwareV2 {
uint public constant PRICE_BUFFER_DENOMINATOR = 10_000;
uint public constant GRANULARITY = 2;
uint public constant PERIOD_SIZE = 86_400; // day
uint public constant INITIAL_PERIODS = 9;

uint public constant FAST_LIQUIDITY_SPEED = 1_500 ether;
uint public constant TARGET_LIQUIDITY = 5_000 ether;
Expand Down Expand Up @@ -438,25 +437,25 @@ contract Ramm is IRamm, MasterAwareV2 {
uint timestamp
) public pure returns (Observation[3] memory initialObservations) {

Observation memory previousObservation;
uint priceCumulativeAbove;
uint priceCumulativeBelow;
uint endIdx = timestamp.divCeil(PERIOD_SIZE);
uint previousTimestamp = (endIdx - 11) * PERIOD_SIZE; // 9 days | 1 day | until the update

for (uint idx = endIdx - 2; idx <= endIdx; idx++) {
uint priceCumulativeAbove = previousObservation.priceCumulativeAbove;
uint priceCumulativeBelow = previousObservation.priceCumulativeBelow;

uint observationTimestamp = Math.min(timestamp, idx * PERIOD_SIZE);
uint observationIndex = idx % GRANULARITY;
uint timeElapsed = endIdx - 2 == idx ? INITIAL_PERIODS * PERIOD_SIZE : PERIOD_SIZE;
uint timeElapsed = observationTimestamp - previousTimestamp;

priceCumulativeAbove += 1 ether * initialState.eth * timeElapsed / initialState.nxmA;
priceCumulativeBelow += 1 ether * initialState.eth * timeElapsed / initialState.nxmB;
priceCumulativeAbove += 1 ether * initialState.eth * timeElapsed / initialState.nxmA / 1e9;
priceCumulativeBelow += 1 ether * initialState.eth * timeElapsed / initialState.nxmB / 1e9;

initialObservations[observationIndex] = Observation(
observationTimestamp.toUint32(),
uint64(priceCumulativeAbove),
uint64(priceCumulativeBelow)
);
previousTimestamp = observationTimestamp;
}

return initialObservations;
Expand Down Expand Up @@ -601,6 +600,7 @@ contract Ramm is IRamm, MasterAwareV2 {
// already initialized
return;
}

uint128 nxmReserveA = (INITIAL_LIQUIDITY * 1 ether / SPOT_PRICE_A).toUint128();
uint128 nxmReserveB = (INITIAL_LIQUIDITY * 1 ether / SPOT_PRICE_B).toUint128();
uint128 ethReserve = INITIAL_LIQUIDITY.toUint128();
Expand Down

0 comments on commit 855f720

Please sign in to comment.