Triangular Pairs can be useful for executing composite transactions on a blockchain to efficiently carry out arbitrage opportunities. This module helps in identifying all possible pairs of pools, such as Uniswap V2 or V3, and subsequently conducts further analyses.
-------------------------------------------------------------
| |
| -----|----- -----|----- -----|----- |
---> | A B | ---> | B Z | ---> | Z A | --->
-----|----- -----|----- -----|-----
Pool n Pool n Pool n+2
Contract A Contract B Contract A
import { TriangularPairs } from './src/TriangularPairs.mjs'
import { selection } from './tests/data/pairs-selection.mjs'
const triangularPairs = new TriangularPairs ()
const pairsEncoded = triangularPairs
.encodePairs( { 'items': selection['data'] } )
const result = triangularPairs
.start( { pairsEncoded } )
.getTriangularPairs()Here are all the public methods listed. .start(...) initiates the process. The results can be queried using the get methods. The main result can be found under .getTriangularPairs().
Starts the process and generates this.#tokens, this.#pairs, and this.#triangularPairs. The results are accessible through the methods listed below.
.start( { pairsEncoded } )
returns
this
import { TriangularPairs } from './src/TriangularPairs.mjs'
const triangularPairs = new TriangularPairs ()
const selection = {
"data": [
{
"contract_address": "0x5c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f",
"pair": "0x8c3b2e86aaceb1b7ad8cb96e63881c28f5cef29a",
"token1": "0x11a605d7e12b64d713e93c487277d819a1d14b99",
"token2": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
"total": 5434,
"tx_hash": "0x1e75b533f8aeda500c5d9837d40319d144c855ef7660679bd7a92368ff958fa7"
}
...
]
}
const pairsEncoded = triangularPairs
.encodePairs( { 'items': selection['data'] } )
const tokens = triangularPairs
.start( { pairsEncoded } )
.getTokens()
console.log( tokens )You can find a sample file here: ./tests/pairs-selection.mjs
Assists in encoding your data into the expected format for .start(). A pool pair needs to be encoded as a single string in the following order: contractAddress_pairAddress_token1Address_token2Address.
.encodePairs { items } )
returns
this
const selection = {
"data": [
{
"contract_address": "0x5c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f",
"pair": "0x8c3b2e86aaceb1b7ad8cb96e63881c28f5cef29a",
"token1": "0x11a605d7e12b64d713e93c487277d819a1d14b99",
"token2": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
"total": 5434,
"tx_hash": "0x1e75b533f8aeda500c5d9837d40319d144c855ef7660679bd7a92368ff958fa7"
}
...
]
}
const pairsEncoded = triangularPairs
.encodePairs( { 'items': selection['data'] } )Filters by tokens and provides references to individual pool pairs.
.getTokens()
returns
this.#tokens
import { TriangularPairs } from './src/TriangularPairs.mjs'
import { selection } from './tests/data/pairs-selection.mjs'
const triangularPairs = new TriangularPairs ()
const pairsEncoded = triangularPairs
.encodePairs( { 'items': selection['data'] } )
const tokens = triangularPairs
.start( { pairsEncoded } )
.getTokens()
console.log( tokens )Filters by pool pairs and lists the possible pools that provide this exchange opportunity under contracts. Additionally, the direction is indicated by specifying tokenA as the first and tokenB as the second position.
.getPairs()
returns
this.#pairs
import { TriangularPairs } from './src/TriangularPairs.mjs'
import { selection } from './tests/data/pairs-selection.mjs'
const triangularPairs = new TriangularPairs ()
const pairsEncoded = triangularPairs
.encodePairs( { 'items': selection['data'] } )
const pairs = triangularPairs
.start( { pairsEncoded } )
.getPairs()
console.log( pairs )Generates all possible unique Triangular Pairs and provides references to further information in this.#tokens and this.#pairs.
.getTriangularPairs()
returns
this.#triangularPairs
import { TriangularPairs } from './src/TriangularPairs.mjs'
import { selection } from './tests/data/pairs-selection.mjs'
const triangularPairs = new TriangularPairs ()
const pairsEncoded = triangularPairs
.encodePairs( { 'items': selection['data'] } )
const triPairs = triangularPairs
.start( { pairsEncoded } )
.getTriangularPairs()
console.log( triPairs )This project is licensed under the MIT License - see the LICENSE file for details.