LFJ Developer Docs
  • Liquidity Book
  • Introduction
  • LB V2.2 Key Changes
  • Guides
    • Swap Tokens
    • Add/Remove Liquidity
    • Tracking Volume
    • Tracking Pool Balances
    • Finding The Best Quote
    • Byte32 Decoding
    • Price From Bin Id
    • Bin Id From Price
    • Finding Liquidity Depth
    • User Balances
  • Concepts
    • Concentrated Liquidity
    • Bin Math
    • Bin Liquidity
    • Swaps
    • Fees
    • Oracle
  • Contracts
    • Interfaces
      • ILBLegacyFactory
      • ILBLegacyToken
      • ILBLegacyPair
      • ILBLegacyRouter
      • ILBFlashLoanCallback
      • IPendingOwnable
      • IJoeFactory
      • IJoePair
      • IJoeRouter01
      • IJoeRouter02
      • IWNATIVE
      • ILBFactory
      • ILBHooks
      • ILBPair
      • ILBRouter
      • ILBToken
    • Libraries
      • Math
        • BitMath
        • Encoded
        • LiquidityConfigurations
        • PackedUint128Math
        • SafeCast
        • SampleMath
        • TreeMath
        • Uint128x128Math
        • Uint256x256Math
      • BinHelper
      • Clone
      • Constants
      • FeeHelper
      • Hooks
      • ImmutableClone
      • JoeLibrary
      • OracleHelper
      • PairParameterHelper
      • PriceHelper
      • ReentrancyGuardUpgradeable
      • TokenHelper
    • LBBaseHooks
    • LBFactory
    • LBPair
    • LBQuoter
    • LBRouter
    • LBToken
  • Deployment Addresses
    • Avalanche C-Chain
    • Fuji Testnet
    • Arbitrum One
    • Binance Smart Chain
    • Binance Smart Chain Testnet
    • Ethereum Mainnet
    • Monad Testnet
  • SDK
    • Introduction
    • Making a Trade
    • Adding Liquidity
    • Removing Liquidity
  • Audits
  • AMM
    • Joe V1 Contracts
    • Joe V1 Audits
  • LFJ DEX API
    • Dex Analytics
    • Pools
    • Rewards
    • User
    • User Lifetime Stats
    • Vaults
    • Models
  • LFJ Aggregator API
    • Default
    • Models
Powered by GitBook
On this page
  • State Variables
  • OFFSET
  • MASK_128
  • MASK_128_PLUS_ONE
  • Functions
  • encode
  • encodeFirst
  • encodeSecond
  • encode
  • decode
  • decodeX
  • decodeY
  • decode
  • add
  • add
  • sub
  • sub
  • lt
  • gt
  • scalarMulDivBasisPointRoundDown
  • Errors
  • PackedUint128Math__AddOverflow
  • PackedUint128Math__SubUnderflow
  • PackedUint128Math__MultiplierTooLarge
  1. Contracts
  2. Libraries
  3. Math

PackedUint128Math

PreviousLiquidityConfigurationsNextSafeCast

Last updated 8 days ago

This library contains functions to encode and decode two uint128 into a single bytes32 and interact with the encoded bytes32.

State Variables

OFFSET

uint256 private constant OFFSET = 128;

MASK_128

uint256 private constant MASK_128 = 0xffffffffffffffffffffffffffffffff;

MASK_128_PLUS_ONE

uint256 private constant MASK_128_PLUS_ONE = MASK_128 + 1;

Functions

encode

Encodes two uint128 into a single bytes32

function encode(uint128 x1, uint128 x2) internal pure returns (bytes32 z);

Parameters

Name
Type
Description

x1

uint128

The first uint128

x2

uint128

The second uint128

Returns

Name
Type
Description

z

bytes32

The encoded bytes32 as follows: [0 - 128[: x1 [128 - 256[: x2

encodeFirst

Encodes a uint128 into a single bytes32 as the first uint128

function encodeFirst(uint128 x1) internal pure returns (bytes32 z);

Parameters

Name
Type
Description

x1

uint128

The uint128

Returns

Name
Type
Description

z

bytes32

The encoded bytes32 as follows: [0 - 128[: x1 [128 - 256[: empty

encodeSecond

Encodes a uint128 into a single bytes32 as the second uint128

function encodeSecond(uint128 x2) internal pure returns (bytes32 z);

Parameters

Name
Type
Description

x2

uint128

The uint128

Returns

Name
Type
Description

z

bytes32

The encoded bytes32 as follows: [0 - 128[: empty [128 - 256[: x2

encode

Encodes a uint128 into a single bytes32 as the first or second uint128

function encode(uint128 x, bool first) internal pure returns (bytes32 z);

Parameters

Name
Type
Description

x

uint128

The uint128

first

bool

Whether to encode as the first or second uint128

Returns

Name
Type
Description

z

bytes32

The encoded bytes32 as follows: if first: [0 - 128[: x [128 - 256[: empty else: [0 - 128[: empty [128 - 256[: x

decode

Decodes a bytes32 into two uint128

function decode(bytes32 z) internal pure returns (uint128 x1, uint128 x2);

Parameters

Name
Type
Description

z

bytes32

The encoded bytes32 as follows: [0 - 128[: x1 [128 - 256[: x2

Returns

Name
Type
Description

x1

uint128

The first uint128

x2

uint128

The second uint128

decodeX

Decodes a bytes32 into a uint128 as the first uint128

function decodeX(bytes32 z) internal pure returns (uint128 x);

Parameters

Name
Type
Description

z

bytes32

The encoded bytes32 as follows: [0 - 128[: x [128 - 256[: any

Returns

Name
Type
Description

x

uint128

The first uint128

decodeY

Decodes a bytes32 into a uint128 as the second uint128

function decodeY(bytes32 z) internal pure returns (uint128 y);

Parameters

Name
Type
Description

z

bytes32

The encoded bytes32 as follows: [0 - 128[: any [128 - 256[: y

Returns

Name
Type
Description

y

uint128

The second uint128

decode

Decodes a bytes32 into a uint128 as the first or second uint128

function decode(bytes32 z, bool first) internal pure returns (uint128 x);

Parameters

Name
Type
Description

z

bytes32

The encoded bytes32 as follows: if first: [0 - 128[: x1 [128 - 256[: empty else: [0 - 128[: empty [128 - 256[: x2

first

bool

Whether to decode as the first or second uint128

Returns

Name
Type
Description

x

uint128

The decoded uint128

add

Adds two encoded bytes32, reverting on overflow on any of the uint128

function add(bytes32 x, bytes32 y) internal pure returns (bytes32 z);

Parameters

Name
Type
Description

x

bytes32

The first bytes32 encoded as follows: [0 - 128[: x1 [128 - 256[: x2

y

bytes32

The second bytes32 encoded as follows: [0 - 128[: y1 [128 - 256[: y2

Returns

Name
Type
Description

z

bytes32

The sum of x and y encoded as follows: [0 - 128[: x1 + y1 [128 - 256[: x2 + y2

add

Adds an encoded bytes32 and two uint128, reverting on overflow on any of the uint128

function add(bytes32 x, uint128 y1, uint128 y2) internal pure returns (bytes32);

Parameters

Name
Type
Description

x

bytes32

The bytes32 encoded as follows: [0 - 128[: x1 [128 - 256[: x2

y1

uint128

The first uint128

y2

uint128

The second uint128

Returns

Name
Type
Description

<none>

bytes32

z The sum of x and y encoded as follows: [0 - 128[: x1 + y1 [128 - 256[: x2 + y2

sub

Subtracts two encoded bytes32, reverting on underflow on any of the uint128

function sub(bytes32 x, bytes32 y) internal pure returns (bytes32 z);

Parameters

Name
Type
Description

x

bytes32

The first bytes32 encoded as follows: [0 - 128[: x1 [128 - 256[: x2

y

bytes32

The second bytes32 encoded as follows: [0 - 128[: y1 [128 - 256[: y2

Returns

Name
Type
Description

z

bytes32

The difference of x and y encoded as follows: [0 - 128[: x1 - y1 [128 - 256[: x2 - y2

sub

Subtracts an encoded bytes32 and two uint128, reverting on underflow on any of the uint128

function sub(bytes32 x, uint128 y1, uint128 y2) internal pure returns (bytes32);

Parameters

Name
Type
Description

x

bytes32

The bytes32 encoded as follows: [0 - 128[: x1 [128 - 256[: x2

y1

uint128

The first uint128

y2

uint128

The second uint128

Returns

Name
Type
Description

<none>

bytes32

z The difference of x and y encoded as follows: [0 - 128[: x1 - y1 [128 - 256[: x2 - y2

lt

Returns whether any of the uint128 of x is strictly greater than the corresponding uint128 of y

function lt(bytes32 x, bytes32 y) internal pure returns (bool);

Parameters

Name
Type
Description

x

bytes32

The first bytes32 encoded as follows: [0 - 128[: x1 [128 - 256[: x2

y

bytes32

The second bytes32 encoded as follows: [0 - 128[: y1 [128 - 256[: y2

Returns

Name
Type
Description

<none>

bool

x1 < y1

gt

Returns whether any of the uint128 of x is strictly greater than the corresponding uint128 of y

function gt(bytes32 x, bytes32 y) internal pure returns (bool);

Parameters

Name
Type
Description

x

bytes32

The first bytes32 encoded as follows: [0 - 128[: x1 [128 - 256[: x2

y

bytes32

The second bytes32 encoded as follows: [0 - 128[: y1 [128 - 256[: y2

Returns

Name
Type
Description

<none>

bool

x1 < y1

scalarMulDivBasisPointRoundDown

Multiplies an encoded bytes32 by a uint128 then divides the result by 10_000, rounding down The result can't overflow as the multiplier needs to be smaller or equal to 10_000

function scalarMulDivBasisPointRoundDown(bytes32 x, uint128 multiplier) internal pure returns (bytes32 z);

Parameters

Name
Type
Description

x

bytes32

The bytes32 encoded as follows: [0 - 128[: x1 [128 - 256[: x2

multiplier

uint128

The uint128 to multiply by (must be smaller or equal to 10_000)

Returns

Name
Type
Description

z

bytes32

The product of x and multiplier encoded as follows: [0 - 128[: floor((x1 * multiplier) / 10_000) [128 - 256[: floor((x2 * multiplier) / 10_000)

Errors

PackedUint128Math__AddOverflow

error PackedUint128Math__AddOverflow();

PackedUint128Math__SubUnderflow

error PackedUint128Math__SubUnderflow();

PackedUint128Math__MultiplierTooLarge

error PackedUint128Math__MultiplierTooLarge();
Git Source