npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@stove-labs/arbitrage-bot-swap-execution

v1.2.0

Published

Swap execution plugin to execute swaps on exchanges

Downloads

6

Readme

Arbitrage Bot Swap Execution Plugin

This repository is related to the core library of the arbitrage bot.

The swap execution plugin is responsible to group swaps transactions and token approvals wherever possible in batches. For example in Tezos, when operations are grouped with the batch call, they are executed atomically. That means that if one operation fails, the whole stack fails and reverts. This is especially handy for arbitrage done completely on Tezos, because it poses a risk free approach if the net profit condition is not met.

Dependency

We use the TypeScript/JavaScript SDK @taquito/taquito to interact with the Tezos node.

Learning resource

// this is a typical batch operation if arbitrage is done between 2 DEXs on Tezos
const batchParameters = [
    xtzToTokenExchange1, // swap 1
    approveTokenSpendingExchange2,
    tokenToXtzExchange2, // swap 2
    revokeTokenSpendingExchange2
]
// src/swapExecution.ts

// retrieve all operation parameters and save in the batchParameters array
for await (const operationParameters of swaps.map((swap) =>
            this.getExchangePluginBySwap(swap).forgeOperation(
            swap,
            botAddress
            )
        )) {
            batchParameters = [...batchParameters, ...operationParameters];
        }

⚠️ It is important to note that arbitrage is a competitive field and many other bots could go for the same arbitrage opportunity. The node operator (usually) orders operations by baker fee. However, for batch operations only the operation fee of the first operation is taken into account. That's why the totalEstOpCost * multiplier is applied to the first operation only of the batch. Leaving the fee for all the other operations would be a waste.

// src/handleTezosSwapExecution.ts

// estimate operation cost for the batch operation
const estimates = await tezos.estimate.batch(batchParameters);
const totalEstOpCost = estimates.reduce(
    (sum, current) => sum + current.suggestedFeeMutez,
    0
);

let multiplier = ecosystemKey.multiplier || 1;

// increase operation cost/fee if necessary to stay competitive in regards to other swaps in the block
// (inflated) fee is only applied to the first operation in the batch!
batchParameters[0].fee = new BigNumber(totalEstOpCost * multiplier)
    .integerValue()
    .toNumber();