UNPKG

@swaptoshi/dex-module

Version:

Klayr decentralized exchange (dex) on-chain module

65 lines 3.53 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.countInitializedTicksCrossed = countInitializedTicksCrossed; exports.countOneBits = countOneBits; const int_1 = require("../int"); async function countInitializedTicksCrossed(tickBitmapStore, context, self, tickBefore, tickAfter) { let initializedTicksCrossed = int_1.Uint32.from(0); let wordPosLower = int_1.Int16.from(0); let wordPosHigher = int_1.Int16.from(0); let bitPosLower = int_1.Uint8.from(0); let bitPosHigher = int_1.Uint8.from(0); let tickBeforeInitialized = false; let tickAfterInitialized = false; const wordPos = int_1.Int16.from(0).add(int_1.Int24.from(tickBefore).div(self.tickSpacing).shr(8)); const bitPos = int_1.Uint8.from(0).add(int_1.Int24.from(tickBefore).div(self.tickSpacing).mod(256)); const wordPosAfter = int_1.Int16.from(0).add(int_1.Int24.from(tickAfter).div(self.tickSpacing).shr(8)); const bitPosAfter = int_1.Uint8.from(int_1.Int24.from(tickAfter).div(self.tickSpacing).mod(256)); tickAfterInitialized = int_1.Uint256.from(int_1.Uint256.from((await tickBitmapStore.getOrDefault(context, tickBitmapStore.getKey(self.address, wordPosAfter.toString()))).bitmap).and(int_1.Uint256.from(1).shl(bitPosAfter))).gt(0) && int_1.Uint256.from(int_1.Int24.from(tickAfter).mod(self.tickSpacing)).eq(0) && int_1.Int24.from(tickBefore).gt(tickAfter); tickBeforeInitialized = int_1.Uint256.from(int_1.Uint256.from((await tickBitmapStore.getOrDefault(context, tickBitmapStore.getKey(self.address, wordPos.toString()))).bitmap).and(int_1.Uint256.from(1).shl(bitPos))).gt(0) && int_1.Uint256.from(int_1.Int24.from(tickBefore).mod(self.tickSpacing)).eq(0) && int_1.Int24.from(tickBefore).lt(tickAfter); if (wordPos.lt(wordPosAfter) || (wordPos.eq(wordPosAfter) && bitPos.lte(bitPosAfter))) { wordPosLower = int_1.Int16.from(wordPos); bitPosLower = int_1.Uint8.from(bitPos); wordPosHigher = int_1.Int16.from(wordPosAfter); bitPosHigher = int_1.Uint8.from(bitPosAfter); } else { wordPosLower = int_1.Int16.from(wordPosAfter); bitPosLower = int_1.Uint8.from(bitPosAfter); wordPosHigher = int_1.Int16.from(wordPos); bitPosHigher = int_1.Uint8.from(bitPos); } let mask = int_1.Uint256.from(int_1.Uint256.MAX).shl(bitPosLower); while (wordPosLower.lte(wordPosHigher)) { if (wordPosLower.eq(wordPosHigher)) { mask = mask.and(int_1.Uint256.from(int_1.Uint256.MAX).shr(int_1.Uint8.from(255).sub(bitPosHigher))); } const masked = int_1.Uint256.from((await tickBitmapStore.getOrDefault(context, tickBitmapStore.getKey(self.address, wordPosLower.toString()))).bitmap).and(mask); initializedTicksCrossed = initializedTicksCrossed.add(countOneBits(masked.toString())); wordPosLower = wordPosLower.add(1); mask = int_1.Uint256.from(int_1.Uint256.MAX); } if (tickAfterInitialized) { initializedTicksCrossed = initializedTicksCrossed.sub(1); } if (tickBeforeInitialized) { initializedTicksCrossed = initializedTicksCrossed.sub(1); } return initializedTicksCrossed.toString(); } function countOneBits(_x) { let x = int_1.Uint256.from(_x); let bits = int_1.Uint16.from(0); while (!x.eq(0)) { bits = bits.add(1); x = x.and(x.sub(1)); } return bits.toString(); } //# sourceMappingURL=pool_ticks_counter.js.map