Full Code of milktoastlab/SolanaNFTBot for AI

main e77710555004 cached
80 files
333.3 KB
119.2k tokens
71 symbols
1 requests
Download .txt
Showing preview only (357K chars total). Download the full file or copy to clipboard to get everything.
Repository: milktoastlab/SolanaNFTBot
Branch: main
Commit: e77710555004
Files: 80
Total size: 333.3 KB

Directory structure:
gitextract_jl1rlllm/

├── .editorconfig
├── .github/
│   └── workflows/
│       └── main.yml
├── .gitignore
├── Dockerfile
├── LICENSE
├── README.md
├── babel.config.js
├── docker-compose.yml
├── jest.config.ts
├── nodemon.json
├── package.json
├── src/
│   ├── cli/
│   │   └── get-confirmed-transaction.ts
│   ├── config/
│   │   ├── config.test.ts
│   │   ├── config.ts
│   │   └── index.ts
│   ├── lib/
│   │   ├── discord/
│   │   │   ├── __mocks__/
│   │   │   │   └── index.ts
│   │   │   ├── index.ts
│   │   │   └── notifyDiscordSale.ts
│   │   ├── logger/
│   │   │   ├── index.ts
│   │   │   └── logger.ts
│   │   ├── marketplaces/
│   │   │   ├── __fixtures__/
│   │   │   │   ├── alphaArtSaleTx.ts
│   │   │   │   ├── digitalEyesSaleTx.ts
│   │   │   │   ├── exchangeArtSaleTx.ts
│   │   │   │   ├── exchangeArtSaleTxV2.ts
│   │   │   │   ├── magicEdenFailedTx.ts
│   │   │   │   ├── magicEdenSaleFromBidTx.ts
│   │   │   │   ├── magicEdenSaleTx.ts
│   │   │   │   ├── magicEdenSaleTxV2.ts
│   │   │   │   ├── openSeaBidTx.ts
│   │   │   │   ├── openSeaSale2Tx.ts
│   │   │   │   ├── openSeaSale3Tx.ts
│   │   │   │   ├── openSeaSaleTx.ts
│   │   │   │   ├── solanartBidTx.ts
│   │   │   │   ├── solanartDelistingTx.ts
│   │   │   │   ├── solanartListingTx.ts
│   │   │   │   ├── solanartSaleFromBidTx.ts
│   │   │   │   ├── solanartSaleTx.ts
│   │   │   │   ├── solanartSalesTxWithFloatingLamport.ts
│   │   │   │   └── solseaSaleTx.ts
│   │   │   ├── alphaArt.test.ts
│   │   │   ├── alphaArt.ts
│   │   │   ├── digitalEyes.test.ts
│   │   │   ├── digitalEyes.ts
│   │   │   ├── exchangeArt.test.ts
│   │   │   ├── exchangeArt.ts
│   │   │   ├── helper.test.ts
│   │   │   ├── helper.ts
│   │   │   ├── index.ts
│   │   │   ├── magicEden.test.ts
│   │   │   ├── magicEden.ts
│   │   │   ├── marketplaces.ts
│   │   │   ├── openSea.test.ts
│   │   │   ├── openSea.ts
│   │   │   ├── parseNFTSaleForAllMarkets.test.ts
│   │   │   ├── parseNFTSaleForAllMarkets.ts
│   │   │   ├── solanart.test.ts
│   │   │   ├── solanart.ts
│   │   │   ├── solsea.test.ts
│   │   │   ├── solsea.ts
│   │   │   └── types.ts
│   │   ├── notifier/
│   │   │   ├── index.ts
│   │   │   ├── notifier.test.ts
│   │   │   └── notifier.ts
│   │   ├── sleep/
│   │   │   ├── index.ts
│   │   │   └── sleep.ts
│   │   ├── solana/
│   │   │   ├── NFTData.ts
│   │   │   ├── connection.ts
│   │   │   └── index.ts
│   │   ├── truncateForAddress.ts
│   │   └── twitter/
│   │       ├── index.ts
│   │       └── notifyTwitter.ts
│   ├── server.ts
│   └── workers/
│       ├── initWorkers.test.ts
│       ├── initWorkers.ts
│       ├── notifyMagicEdenNFTSalesWorker.test.ts
│       ├── notifyMagicEdenNFTSalesWorker.ts
│       ├── notifyNFTSalesWorker.test.ts
│       ├── notifyNFTSalesWorker.ts
│       └── types.ts
└── tsconfig.json

================================================
FILE CONTENTS
================================================

================================================
FILE: .editorconfig
================================================
# top-most EditorConfig file
root = true

# Unix-style newlines with a newline ending every file
[*]
insert_final_newline = true

# 2 space indentation
[*.{ts,tsx}]
indent_style = space
indent_size = 2

# Matches the exact files either package.json or .travis.yml
[{package.json,.travis.yml}]
indent_style = space
indent_size = 2


================================================
FILE: .github/workflows/main.yml
================================================
# This is a basic workflow to help you get started with Actions

name: CI

# Controls when the workflow will run
on:
  # Triggers the workflow on push or pull request events but only for the main branch
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

  # Allows you to run this workflow manually from the Actions tab
  workflow_dispatch:

# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
  # This workflow contains a single job called "build"
  build:
    # The type of runner that the job will run on
    runs-on: ubuntu-latest

    # Steps represent a sequence of tasks that will be executed as part of the job
    steps:
      # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
      - uses: actions/checkout@v2

      - name: Setup Yarn
        # You may pin to the exact commit or the version.
        # uses: mskelton/setup-yarn@9a4157decaf2f0a260628079af3512df41f7823d
        uses: mskelton/setup-yarn@v1.0.1
        with:
          # Additional flags to pass to the install command.
          flags: --frozen-lockfile
          # Node version to use, defaults to the current LTS version.
          node-version: 16.x
      - name: Build
        run: yarn build
      - name: Test
        run: yarn test
      - name: Lint
        run: yarn lint-format


================================================
FILE: .gitignore
================================================
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.

# dependencies
node_modules
/.pnp
.pnp.js

# yarn
.yarn

# testing
/coverage

# next.js
/.next/
/out/

# production
/build

# misc
.DS_Store
*.pem

# debug
npm-debug.log*
yarn-debug.log*
yarn-error.log*

# local env files
.env.local
.env.development.local
.env.test.local
.env.production.local

# vercel
.vercel

.idea

dist


================================================
FILE: Dockerfile
================================================
FROM node:16 as dependencies
WORKDIR /solananftbot
COPY package.json yarn.lock .env ./
RUN yarn install --frozen-lockfile

FROM node:16 as builder
WORKDIR /solananftbot
COPY . .
COPY --from=dependencies /solananftbot/node_modules ./node_modules
COPY --from=dependencies /solananftbot/.env ./.env
RUN yarn build

FROM node:16 as runner
WORKDIR /solananftbot
ENV NODE_ENV production
# If you are using a custom next.config.js file, uncomment this line.
# COPY --from=builder /solananftbot/next.config.js ./
COPY --from=builder /solananftbot/dist ./dist
COPY --from=builder /solananftbot/node_modules ./node_modules
COPY --from=builder /solananftbot/package.json ./package.json
COPY --from=builder /solananftbot/.env ./.env

EXPOSE 4000
CMD ["yarn", "start"]


================================================
FILE: LICENSE
================================================
MIT License

Copyright (c) 2021 milktoastlab

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.


================================================
FILE: README.md
================================================
# Solana NFT Bot

Solana NFT bot is a helpful bot for your Solana NFT projects.

## Sponsor
This project is proudly sponsored by [milktoast.world](https://milktoast.world):
An NFT project that aims to spread happiness and cheer. 

<img src="https://user-images.githubusercontent.com/90617759/139604005-addc968d-2193-4e7b-9ac9-86622672391b.png" width=100>

If you find this project useful, please support us by following [Milktoast](https://twitter.com/milktoastnft) and [KryptoJ](https://twitter.com/kryptoj_) on Twitter!  


## Features
- [x] Notify discord channel on each purchase in marketplaces. 
- [x] Send Twitter tweet on each purchase in marketplaces. (Experimental)
- [x] [Support major marketplaces](#marketplace-support) 

<img width="400" alt="Screen Shot 2022-01-30 at 10 34 53 pm" src="https://user-images.githubusercontent.com/90617759/151699155-3cb01555-da85-47dd-ad10-2a9dd97eb360.png">

## Running using docker

### Requirement
* [Docker](https://www.docker.com/products/docker-desktop) >= v20.10
  * If you're new to Docker, we recommend going through their [get started page](https://docs.docker.com/get-started/) to gain a basic understanding of Docker before moving forward.
* A Solana RPC node/server - This is needed so the bot know where to call to fetch solana transactions.
Here are some potential routes to get a node:
  * https://quicknode.com/
  * [Run your own](https://medium.com/@MisterKevin_js/how-to-run-your-own-solana-rpc-endpoint-on-figments-datahub-e9ca881bebb7)



### Instructions

#### Run bot locally using docker in the terminal

If you're new to docker, before starting I recommend 

Run the following command with your own secrets replaced with your own configuration:

```
docker run --name nftbot -d -p 4000:4000 -e SOLANA_RPC=YOURRPCURL -e DISCORD_BOT_TOKEN=YOURDISCORDTOKEN -e SUBSCRIPTION_DISCORD_CHANNEL_ID=YOURCHANNELID -e SUBSCRIPTION_MINT_ADDRESS=YOURMINTADDRESS milktoastlab/solananftbot
```
Note: The command above is tested in linux/unix env only. You may have a different experience in Windows.
Please check the [documentation on how to run docker command in windows](https://docs.microsoft.com/en-us/virtualization/windowscontainers/quick-start/run-your-first-container) if you need any help.

View logs
```
docker logs ntfbot
```

To make sure the bot is working properly, use [/test-sale-tx](src/server.ts#L47) endpoint
```
curl "http://localhost:4000/test-sale-tx?signature={sale_transaction_signature}&channelId={discord_channel_id}"
```

In case of *DiscordAPIError: Missing Access* error, check if the bot has been invited to the channel. Go to the channel, click "Add members or roles" and add your bot account as a member.


Alternatively, you can run it using docker-compose:

Update `.env` with your secret and run
```
docker-compose up -d bot
```

See [here](#configurable-environments) for more details on environment variables

View logs
```
docker-compose logs bot
```

## Running in development
### Requirement
* Node >= 16.6
* Yarn

### Instructions

#### 1. Install dependencies
```
yarn install
```

#### 2. Update .env with your secrets

Follow the instructions [here](#configurable-environments)

#### 3. Run the server
```
yarn dev
```

## Configurable environments

Here are a list of environments you need to configure before running the NFT bot.

```sh
# RPC node url
SOLANA_RPC=
# Discord bot secret
DISCORD_BOT_TOKEN=
# The discord channel to notify
SUBSCRIPTION_DISCORD_CHANNEL_ID=
# Mint address to watch for sales
SUBSCRIPTION_MINT_ADDRESS=
# Twitter secrets
TWITTER_API_KEY=
TWITTER_API_KEY_SECRET=
TWITTER_ACCESS_TOKEN=
TWITTER_ACCESS_TOKEN_SECRET=
# Magic eden API
MAGIC_EDEN_URL=https://api-mainnet.magiceden.dev/v2
# Enter the NFT collection that you want to track
MAGIC_EDEN_COLLECTION=
# The discord channel to notify
MAGIC_EDEN_DISCORD_CHANNEL_ID=
```
https://github.com/milktoastlab/SolanaNFTBot/blob/main/.env

### Variable breakdowns

#### DISCORD_BOT_TOKEN
This is your discord bot secret.
If you don't have a discord bot yet, you can create one following the instructions here:
https://discordpy.readthedocs.io/en/stable/discord.html

Make sure your bot has the required permissions:
* View channels
* Read/Send messages
* Send messages
* Embed links

<img width="827" alt="Screen Shot 2021-10-31 at 9 25 31 am" src="https://user-images.githubusercontent.com/90617759/139560537-e0420217-25d7-4538-81cc-d53422c24db9.png">

#### SUBSCRIPTION_DISCORD_CHANNEL_ID
This is the ID of the discord channel you want to send notifications to.
You will need to enable developer mode have access the channel IDs.
Here are the instructions:
https://support.discord.com/hc/en-us/articles/206346498-Where-can-I-find-my-User-Server-Message-ID-

#### SUBSCRIPTION_MINT_ADDRESS
This is the address that you want the Solana NFT bot to watch for notifications.
It needs to be one of the creator addresses:
<img width="324" alt="Screen Shot 2021-11-12 at 6 16 31 pm" src="https://user-images.githubusercontent.com/90617759/141426468-fcf7c522-4480-4a4e-b1e9-c0cbed3f4f10.png">

_Note: Avoid personal addresses because it could detect unwanted sales._

##### Watch multiple addresses
You can watch multiple addresses at once by using a comma between addresses:
```bash
SUBSCRIPTION_MINT_ADDRESS=add123,add1235
```
This feature reduces the need to run multiple containers in production.

#### Twitter variables

__Experimental:__
We haven't stress test Twitter notification on high volume projects. We recommend you have a good internet connection for your bot if you want to use this feature, because for each notification, the bot will upload the nft image to Twitter for display. 
Create a Github issue to let us know if you encounter any problems.


To post sales notification tweets to Twitter via the API, you will first need Elevated access to the Twitter API.

<img src= https://user-images.githubusercontent.com/50549441/149970878-fc94fb39-8147-4163-a17e-f0552b8e71cc.png>

While logged in to the account you want to use the Twitter API for, apply for Elevated access to the twitter API by clicking the link here and following the steps: 
https://developer.twitter.com/en/portal/petition/essential/basic-info

The approval process may take a while. 

Create a new project, and create a new App under that project.

The API Key and secret will be displayed to you there, which you'll assign to `TWITTER_API_KEY` and `TWITTER_API_KEY_SECRET` respectively.

Then, click on the Keys and tokens tab, and generate the Access Token and Secret. Assign these to `TWITTER_ACCESS_TOKEN` and `TWITTER_ACCESS_TOKEN_SECRET` respectively.

<img src= https://user-images.githubusercontent.com/50549441/149973388-58f3a303-91f4-4e1b-ab7f-dfc2a22aa5da.png>

### Magic Eden variables
Magic eden's NFT trading program has changed to V2, which means the old way of detecting sales won't work anymore. We have updated the bot to use the new API to detect sales.  
To enable this feature, you will need to add the following variables to your `.env` file:

__MAGIC_EDEN_COLLECTION__ 

This is the collection key to magic eden. To find our what it is, navigate to the collection page and look at the url. It should be the last part of the url.
```
Example:
https://magiceden.io/marketplace/milktoast
```
The collection key is "milktoast"

__MAGIC_EDEN_DISCORD_CHANNEL_ID__

This is the discord channel to notify. Same as `SUBSCRIPTION_DISCORD_CHANNEL_ID` but it doesn't support multiple channels at the moment.


## Production deployment

The solana nft bot is containerized, you can deploy it on any hosting service that supports docker. 

Here are some options: 

* [Akash Network](https://akash.network), a decentralized cloud compute marketplace. [Click here for the step by step guide.](https://medium.com/@kryptoj/how-to-host-a-solana-nft-bot-on-the-akash-network-no-code-ccbeb9ce35d1)
* https://www.ibm.com/cloud/code-engine
* [Digital Ocean](https://www.digitalocean.com/products/droplets)

## Marketplace support

- [x] [Magic Eden](https://magiceden.io/)
- [x] [Solanart](http://solanart.io/)
- [x] [Digital Eyes](https://digitaleyes.market/)
- [x] [Alpha Art](https://alpha.art/)
- [x] [Exchange Art](https://exchange.art/)
- [x] [Solsea](https://solsea.io/)
- [x] [OpenSea](https://opensea.io/)

### Adding new marketplace

SolanaNFTBot aim to support as many marketplaces are possible. 
Here is the instruction on how you can add support to other marketplaces.

#### 1. Add a new marketplace config
Use `src/lib/marketplaces/solsea.ts` as example

#### 2. Write a test for the marketplace
Use `src/lib/marketplaces/solsea.test.ts` as example

#### 3. Add the new marketplace to the existing list 
`src/lib/marketplaces/marketplaces.ts`

## Support

If you have any questions or feedback, feel free to jump into our discord #dev-talk channel and have a chat.
https://discord.com/invite/GYxur2tvzP


================================================
FILE: babel.config.js
================================================
module.exports = {
  presets: [
    ["@babel/preset-env", { targets: { node: "current" } }],
    "@babel/preset-typescript",
  ],
};


================================================
FILE: docker-compose.yml
================================================
version: "3.9"
services:
  bot:
    image: milktoastlab/solananftbot
    ports:
      - "4000:4000"
    env_file:
      - .env


================================================
FILE: jest.config.ts
================================================
/*
 * For a detailed explanation regarding each configuration property, visit:
 * https://jestjs.io/docs/configuration
 */

module.exports = {
  // All imported modules in your tests should be mocked automatically
  // automock: false,

  // Stop running tests after `n` failures
  // bail: 0,

  // The directory where Jest should store its cached dependency information
  // cacheDirectory: "/private/var/folders/w6/bzw5qrfd6_n14pqvd1khrx8r0000gn/T/jest_dx",

  // Automatically clear mock calls and instances between every test
  clearMocks: true,

  // Indicates whether the coverage information should be collected while executing the test
  collectCoverage: true,

  // An array of glob patterns indicating a set of files for which coverage information should be collected
  // collectCoverageFrom: undefined,

  // The directory where Jest should output its coverage files
  coverageDirectory: "coverage",

  // An array of regexp pattern strings used to skip coverage collection
  coveragePathIgnorePatterns: [
    "/node_modules/",
    "/__fixtures__/",
  ],

  // Indicates which provider should be used to instrument code for coverage
  coverageProvider: "babel",

  // A list of reporter names that Jest uses when writing coverage reports
  // coverageReporters: [
  //   "json",
  //   "text",
  //   "lcov",
  //   "clover"
  // ],

  // An object that configures minimum threshold enforcement for coverage results
  // coverageThreshold: undefined,

  // A path to a custom dependency extractor
  // dependencyExtractor: undefined,

  // Make calling deprecated APIs throw helpful error messages
  // errorOnDeprecated: false,

  // Force coverage collection from ignored files using an array of glob patterns
  // forceCoverageMatch: [],

  // A path to a module which exports an async function that is triggered once before all test suites
  // globalSetup: undefined,

  // A path to a module which exports an async function that is triggered once after all test suites
  // globalTeardown: undefined,

  // A set of global variables that need to be available in all test environments
  // globals: {},

  // The maximum amount of workers used to run your tests. Can be specified as % or a number. E.g. maxWorkers: 10% will use 10% of your CPU amount + 1 as the maximum worker number. maxWorkers: 2 will use a maximum of 2 workers.
  // maxWorkers: "50%",

  // An array of directory names to be searched recursively up from the requiring module's location
  moduleDirectories: [
    "node_modules",
    "src"
  ],

  // An array of file extensions your modules use
  // moduleFileExtensions: [
  //   "js",
  //   "jsx",
  //   "ts",
  //   "tsx",
  //   "json",
  //   "node"
  // ],

  // A map from regular expressions to module names or to arrays of module names that allow to stub out resources with a single module
  // moduleNameMapper: {},

  // An array of regexp pattern strings, matched against all module paths before considered 'visible' to the module loader
  // modulePathIgnorePatterns: [],

  // Activates notifications for test results
  // notify: false,

  // An enum that specifies notification mode. Requires { notify: true }
  // notifyMode: "failure-change",

  // A preset that is used as a base for Jest's configuration
  // preset: undefined,

  // Run tests from one or more projects
  // projects: undefined,

  // Use this configuration option to add custom reporters to Jest
  // reporters: undefined,

  // Automatically reset mock state between every test
  // resetMocks: false,

  // Reset the module registry before running each individual test
  // resetModules: false,

  // A path to a custom resolver
  // resolver: undefined,

  // Automatically restore mock state between every test
  // restoreMocks: false,

  // The root directory that Jest should scan for tests and modules within
  // rootDir: './src',

  // A list of paths to directories that Jest should use to search for files in
  // roots: [
  //   "src"
  // ],

  // Allows you to use a custom runner instead of Jest's default test runner
  // runner: "jest-runner",

  // The paths to modules that run some code to configure or set up the testing environment before each test
  // setupFiles: [],

  // A list of paths to modules that run some code to configure or set up the testing framework before each test
  // setupFilesAfterEnv: [],

  // The number of seconds after which a test is considered as slow and reported as such in the results.
  // slowTestThreshold: 5,

  // A list of paths to snapshot serializer modules Jest should use for snapshot testing
  // snapshotSerializers: [],

  // The test environment that will be used for testing
  // testEnvironment: "jest-environment-node",

  // Options that will be passed to the testEnvironment
  // testEnvironmentOptions: {},

  // Adds a location field to test results
  // testLocationInResults: false,

  // The glob patterns Jest uses to detect test files
  testMatch: ["**/*.test.ts"],

  // An array of regexp pattern strings that are matched against all test paths, matched tests are skipped
  // testPathIgnorePatterns: [
  //   "/node_modules/"
  // ],

  // The regexp pattern or array of patterns that Jest uses to detect test files
  // testRegex: [],

  // This option allows the use of a custom results processor
  // testResultsProcessor: undefined,

  // This option allows use of a custom test runner
  // testRunner: "jest-circus/runner",

  // This option sets the URL for the jsdom environment. It is reflected in properties such as location.href
  // testURL: "http://localhost",

  // Setting this value to "fake" allows the use of fake timers for functions such as "setTimeout"
  // timers: "real",

  // A map from regular expressions to paths to transformers
  // transform: undefined,

  // An array of regexp pattern strings that are matched against all source file paths, matched files will skip transformation
  // transformIgnorePatterns: [
  //   "/node_modules/",
  //   "\\.pnp\\.[^\\/]+$"
  // ],

  // An array of regexp pattern strings that are matched against all modules before the module loader will automatically return a mock for them
  // unmockedModulePathPatterns: undefined,

  // Indicates whether each individual test should be reported during the run
  // verbose: undefined,

  // An array of regexp patterns that are matched against all source file paths before re-running tests in watch mode
  // watchPathIgnorePatterns: [],

  // Whether to use watchman for file crawling
  // watchman: true,
};


================================================
FILE: nodemon.json
================================================
{
  "ignore": ["**/*.test.ts", "node_modules"],
  "watch": ["src"],
  "exec": "yarn ts-run",
  "ext": "ts"
}


================================================
FILE: package.json
================================================
{
  "name": "@milktoast-lab/SolNFTBot",
  "version": "0.15.2",
  "main": "dist/src/index.js",
  "types": "dist/src/index.d.ts",
  "license": "MIT",
  "engines": {
    "node": ">=16.6"
  },
  "scripts": {
    "dev": "nodemon",
    "ts-run": "ts-node src/server.ts",
    "build": "tsc",
    "start": "NODE_PATH=./dist/src NODE_ENV=production node dist/src/server.js",
    "test": "jest --no-watchman",
    "lint-format": "prettier -c ./src/**/*.ts",
    "fix-format": "prettier -w ./src/**/*.ts",
    "transaction": "ts-node --project tsconfig.json -r dotenv/config ./src/cli/get-confirmed-transaction.ts"
  },
  "dependencies": {
    "@discordjs/builders": "^0.8.1",
    "@metaplex-foundation/js": "^0.17.0",
    "@solana/web3.js": "^1.64.0",
    "axios": "^0.25.0",
    "discord.js": "^13.2.0",
    "dotenv": "^16.0.3",
    "express": "^4.17.1",
    "file-type": "16.5.4",
    "queue": "^6.0.2",
    "ts-node": "^10.4.0",
    "twitter-api-v2": "^1.9.0"
  },
  "devDependencies": {
    "@babel/core": "^7.15.8",
    "@babel/preset-env": "^7.15.8",
    "@babel/preset-typescript": "^7.15.0",
    "@types/express": "^4.17.13",
    "@types/jest": "^27.0.2",
    "@types/node": "^16.11.4",
    "babel-jest": "^27.3.1",
    "jest": "^27.2.5",
    "nodemon": "^2.0.14",
    "prettier": "^2.4.1",
    "tsconfig-paths": "^3.11.0",
    "typescript": "4.4.4"
  }
}


================================================
FILE: src/cli/get-confirmed-transaction.ts
================================================
import { newConnection } from "../lib/solana";

async function run(signature: string) {
  const conn = newConnection();
  const tx = await conn.getParsedConfirmedTransaction(signature);
  if (!tx) {
    console.log(`No transaction found for ${signature}`);
    return;
  }

  console.log(JSON.stringify(tx));
}

run(process.env.TX as string);


================================================
FILE: src/config/config.test.ts
================================================
import { loadConfig } from "./config";

jest.spyOn(console, "error");

describe("config", () => {
  test("load single subscription", () => {
    const config = loadConfig({
      SUBSCRIPTION_MINT_ADDRESS: "add123",
      SUBSCRIPTION_DISCORD_CHANNEL_ID: "discord123",
    });
    expect(config.subscriptions.length).toEqual(1);
    const { type, discordChannelId, mintAddress } = config.subscriptions[0];
    expect(type).toEqual("NFTSale");
    expect(mintAddress).toEqual("add123");
    expect(discordChannelId).toEqual("discord123");
  });
  test("load multiple subscriptions", () => {
    const config = loadConfig({
      SUBSCRIPTION_MINT_ADDRESS: "add123,add456",
      SUBSCRIPTION_DISCORD_CHANNEL_ID: "discord123,discord456",
    });
    expect(config.subscriptions.length).toEqual(2);
    const subscription0 = config.subscriptions[0];

    expect(subscription0.type).toEqual("NFTSale");
    expect(subscription0.mintAddress).toEqual("add123");
    expect(subscription0.discordChannelId).toEqual("discord123");

    const subscription1 = config.subscriptions[1];
    expect(subscription1.type).toEqual("NFTSale");
    expect(subscription1.mintAddress).toEqual("add456");
    expect(subscription1.discordChannelId).toEqual("discord456");
  });
  test("load multiple subscriptions with one address", () => {
    const config = loadConfig({
      SUBSCRIPTION_MINT_ADDRESS: "add123,add456",
      SUBSCRIPTION_DISCORD_CHANNEL_ID: "discord123",
    });
    expect(config.subscriptions.length).toEqual(2);
    const subscription0 = config.subscriptions[0];

    expect(subscription0.type).toEqual("NFTSale");
    expect(subscription0.mintAddress).toEqual("add123");
    expect(subscription0.discordChannelId).toEqual("discord123");

    const subscription1 = config.subscriptions[1];
    expect(subscription1.type).toEqual("NFTSale");
    expect(subscription1.mintAddress).toEqual("add456");
    expect(subscription1.discordChannelId).toEqual("discord123");
  });

  test("do not load invalid subscription", () => {
    const config = loadConfig({
      SUBSCRIPTION_MINT_ADDRESS: "",
      SUBSCRIPTION_DISCORD_CHANNEL_ID: "discord123",
    });
    expect(config.subscriptions.length).toEqual(0);
  });
});


================================================
FILE: src/config/config.ts
================================================
import logger from "lib/logger";

export interface Subscription {
  discordChannelId: string;
  type: "NFTSale";
  mintAddress: string;
}

interface TwitterConfig {
  appKey: string;
  appSecret: string;
  accessToken: string;
  accessSecret: string;
}

export interface MagicEdenConfig {
  url: string;
  collection: string;
  discordChannelId: string;
}

export interface Config {
  twitter: TwitterConfig;
  discordBotToken: string;
  queueConcurrency: number;
  subscriptions: Subscription[];
  magicEdenConfig: MagicEdenConfig;
}

export type Env = { [key: string]: string };

export interface MutableConfig extends Config {
  setSubscriptions(subscriptions: Subscription[]): Promise<void>;

  addSubscription(subscription: Subscription): Promise<void>;
}

function loadSubscriptions(env: Env): Subscription[] {
  if (!env.SUBSCRIPTION_MINT_ADDRESS || !env.SUBSCRIPTION_DISCORD_CHANNEL_ID) {
    return [];
  }
  const addresses = env.SUBSCRIPTION_MINT_ADDRESS.split(",");
  const discordChannels = env.SUBSCRIPTION_DISCORD_CHANNEL_ID.split(",");
  if (
    discordChannels.length != addresses.length &&
    discordChannels.length !== 1
  ) {
    logger.error(
      `Invalid number of discord channel ids: ${discordChannels.length}`
    );
    return [];
  }

  const subscriptions: Subscription[] = [];

  addresses.forEach((address, idx) => {
    if (!address) {
      return;
    }
    const channel = discordChannels[idx] || discordChannels[0];
    if (!channel) {
      return;
    }

    subscriptions.push({
      type: "NFTSale",
      discordChannelId: channel,
      mintAddress: address,
    });
  });

  return subscriptions;
}

export function loadConfig(env: Env): MutableConfig {
  const config: Config = {
    twitter: {
      appKey: env.TWITTER_API_KEY || "",
      appSecret: env.TWITTER_API_KEY_SECRET || "",
      accessToken: env.TWITTER_ACCESS_TOKEN || "",
      accessSecret: env.TWITTER_ACCESS_TOKEN_SECRET || "",
    },
    discordBotToken: env.DISCORD_BOT_TOKEN || "",
    queueConcurrency: parseInt(env.QUEUE_CONCURRENCY || "2", 10),
    subscriptions: loadSubscriptions(env),
    magicEdenConfig: {
      url: env.MAGIC_EDEN_URL || "",
      collection: env.MAGIC_EDEN_COLLECTION || "",
      discordChannelId: env.MAGIC_EDEN_DISCORD_CHANNEL_ID || "",
    },
  };

  return {
    ...config,
    async setSubscriptions(subscriptions: Subscription[]): Promise<void> {
      this.subscriptions = subscriptions;
    },
    async addSubscription(subscription: Subscription): Promise<void> {
      this.subscriptions.push(subscription);
    },
  };
}


================================================
FILE: src/config/index.ts
================================================
export * from "./config";


================================================
FILE: src/lib/discord/__mocks__/index.ts
================================================
import Discord, {TextChannel} from "discord.js";

export async function initClient(): Promise<Discord.Client> {
  const discordClient = new Discord.Client({ intents: [] });
  jest.spyOn(discordClient, "isReady").mockImplementation(() => true);
  jest.spyOn(discordClient.channels, "fetch").mockImplementation(async () => {
    return { send() {} } as unknown as TextChannel;
  });
  return discordClient;
};

export async function fetchDiscordChannel(
  client: Discord.Client,
  channelId: string
): Promise<TextChannel | undefined> {
  return {} as TextChannel;
}


================================================
FILE: src/lib/discord/index.ts
================================================
import Discord, { Intents, TextChannel } from "discord.js";
import logger from "lib/logger";
const myIntents = new Intents();
myIntents.add(Intents.FLAGS.DIRECT_MESSAGES, Intents.FLAGS.GUILD_MESSAGES);

let client: Discord.Client;

export async function initClient(
  token: string
): Promise<Discord.Client> {
  if (!client) {
    client = new Discord.Client({
      intents: myIntents,
    });
  }
  if (client.isReady()) {
    return client;
  }
  return new Promise<Discord.Client>((resolve) => {
    client.on("ready", () => {
      logger.log(`Logged in as ${client.user?.tag}!`);
      resolve(client);
    });
    client.login(token);
  });
}

export async function fetchDiscordChannel(
  client: Discord.Client,
  channelId: string
): Promise<TextChannel | undefined> {
  if (!client.isReady()) {
    return;
  }

  const channel = (await client.channels.fetch(channelId)) as TextChannel;
  if (!channel) {
    logger.warn("Can't see channel");
    return;
  }
  if (!channel.send) {
    logger.warn("Channel must be a TextChannel");
    return;
  }
  return channel;
}


================================================
FILE: src/lib/discord/notifyDiscordSale.ts
================================================
import Discord, {
  MessageActionRow,
  MessageEmbed,
  TextChannel,
} from "discord.js";
import { Marketplace, NFTSale, SaleMethod } from "lib/marketplaces";
import truncateForAddress from "lib/truncateForAddress";
import logger from "lib/logger";
import { fetchDiscordChannel } from "./index";

const status: {
  totalNotified: number;
  lastNotified?: Date;
} = {
  totalNotified: 0,
};

export function getStatus() {
  return status;
}

export default async function notifyDiscordSale(
  client: Discord.Client,
  channelId: string,
  nftSale: NFTSale,
  test?: boolean
) {
  const channel = await fetchDiscordChannel(client, channelId);
  if (!channel) {
    return;
  }

  const { marketplace, nftData } = nftSale;

  if (!nftData) {
    logger.log("missing nft Data for token: ", nftSale.token);
    return;
  }

  const method = `Sold${
    nftSale.method === SaleMethod.Bid ? " via bidding" : ""
  }`;

  const description = `${method} for ${nftSale.getPriceInSOL()} S◎L on ${
    marketplace.name
  }`;

  const actionRowMsg = new MessageActionRow({
    type: 1,
    components: [
      {
        style: 5,
        label: `View Transaction`,
        url: `https://solscan.io/tx/${nftSale.transaction}`,
        disabled: false,
        type: 2,
      },
      {
        style: 5,
        label: `View Token`,
        url: `https://solscan.io/token/${nftSale.token}`,
        disabled: false,
        type: 2,
      },
    ],
  });

  const embedMsg = new MessageEmbed({
    color: 0x0099ff,
    title: nftData.name,
    url: marketplace.itemURL(nftSale.token),
    timestamp: `${nftSale.soldAt}`,
    fields: [
      {
        name: "Price",
        value: `${nftSale.getPriceInSOL().toFixed(2)} S◎L ${
          nftSale.method === SaleMethod.Bid ? "(Via bidding)" : ""
        }`,
        inline: false,
      },
      {
        name: "Buyer",
        value: formatAddress(marketplace, nftSale.buyer),
        inline: true,
      },
      {
        name: "Seller",
        value: nftSale.seller
          ? formatAddress(marketplace, nftSale.seller)
          : "unknown",
        inline: true,
      },
    ],
    image: {
      url: encodeURI(nftData.image),
      width: 600,
      height: 600,
    },
    footer: {
      text: `Sold on ${marketplace.name}`,
      icon_url: marketplace.iconURL,
      proxy_icon_url: marketplace.itemURL(nftSale.token),
    },
  });

  await channel.send({
    components: [actionRowMsg],
    embeds: [embedMsg],
  });
  const logMsg = `Notified discord #${channel.name}: ${nftData.name} - ${description}`;
  logger.log(logMsg);

  if (!test) {
    status.lastNotified = new Date();
    status.totalNotified++;
  }
}

function formatAddress(marketplace: Marketplace, address: string): string {
  if (!address) {
    return "";
  }

  return `[${truncateForAddress(address)}](${marketplace.profileURL(address)})`;
}


================================================
FILE: src/lib/logger/index.ts
================================================
export { default } from "./logger";


================================================
FILE: src/lib/logger/logger.ts
================================================
const logger = {
  prefix(level: string) {
    return `[${level}] ${new Date().toISOString()}:`;
  },
  log(msg?: any, ...optionalParams: any[]) {
    console.log(this.prefix("info"), msg, ...optionalParams);
  },
  warn(msg?: any, ...optionalParams: any[]) {
    console.warn(this.prefix("warning"), msg, ...optionalParams);
  },
  error(msg?: any, ...optionalParams: any[]) {
    console.error(this.prefix("error"), msg, ...optionalParams);
  },
};

export default logger;


================================================
FILE: src/lib/marketplaces/__fixtures__/alphaArtSaleTx.ts
================================================
import { ParsedConfirmedTransaction } from "@solana/web3.js";

const saleTx: ParsedConfirmedTransaction = {
  blockTime: 1636257741,
  meta: {
    err: null,
    fee: 5000,
    innerInstructions: [
      {
        index: 0,
        instructions: [
          {
            parsed: {
              info: {
                destination: "5x13F4NupczfwP9EjJP4wcDQWinhUk2wXNeS1xYMzAgR",
                lamports: 2039280,
                source: "CScUB4iBTfCWaFkj5gRpXx42HVpAgDvPJgbQxtETRXi1",
              },
              type: "transfer",
            },
            program: "system",
            programId: "11111111111111111111111111111111",
          },
          {
            parsed: {
              info: {
                account: "5x13F4NupczfwP9EjJP4wcDQWinhUk2wXNeS1xYMzAgR",
                space: 165,
              },
              type: "allocate",
            },
            program: "system",
            programId: "11111111111111111111111111111111",
          },
          {
            parsed: {
              info: {
                account: "5x13F4NupczfwP9EjJP4wcDQWinhUk2wXNeS1xYMzAgR",
                owner: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
              },
              type: "assign",
            },
            program: "system",
            programId: "11111111111111111111111111111111",
          },
          {
            parsed: {
              info: {
                account: "5x13F4NupczfwP9EjJP4wcDQWinhUk2wXNeS1xYMzAgR",
                mint: "14Cc7DA6MwpNdAZZYdLxK6WQ9meMaeLX1WsCyLRf5nqw",
                owner: "CScUB4iBTfCWaFkj5gRpXx42HVpAgDvPJgbQxtETRXi1",
                rentSysvar: "SysvarRent111111111111111111111111111111111",
              },
              type: "initializeAccount",
            },
            program: "spl-token",
            programId: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
          },
        ],
      },
      {
        index: 1,
        instructions: [
          {
            parsed: {
              info: {
                destination: "D3wgcpWjAWR3GREbkyuGr3bNLHfdQsLr5hN2AvSP8pBi",
                lamports: 15600000,
                source: "CScUB4iBTfCWaFkj5gRpXx42HVpAgDvPJgbQxtETRXi1",
              },
              type: "transfer",
            },
            program: "system",
            programId: "11111111111111111111111111111111",
          },
          {
            parsed: {
              info: {
                destination: "67dNFe4z58pmTs1DshwTm2rT127XtBCeRaBxDUYwaLfu",
                lamports: 78000000,
                source: "CScUB4iBTfCWaFkj5gRpXx42HVpAgDvPJgbQxtETRXi1",
              },
              type: "transfer",
            },
            program: "system",
            programId: "11111111111111111111111111111111",
          },
          {
            parsed: {
              info: {
                destination: "Gi44PdWS951cZjR5hgW1VnvKkxcV3scyHFpAFY3QpYSb",
                lamports: 686400000,
                source: "CScUB4iBTfCWaFkj5gRpXx42HVpAgDvPJgbQxtETRXi1",
              },
              type: "transfer",
            },
            program: "system",
            programId: "11111111111111111111111111111111",
          },
          {
            parsed: {
              info: {
                amount: "1",
                destination: "5x13F4NupczfwP9EjJP4wcDQWinhUk2wXNeS1xYMzAgR",
                multisigAuthority:
                  "4pUQS4Jo2dsfWzt3VgHXy3H6RYnEDd11oWPiaM2rdAPw",
                signers: ["4pUQS4Jo2dsfWzt3VgHXy3H6RYnEDd11oWPiaM2rdAPw"],
                source: "EDAWjyzq1Mf4JDue3tNiqhGeUg8az41EsHEQcEmjnZBY",
              },
              type: "transfer",
            },
            program: "spl-token",
            programId: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
          },
          {
            parsed: {
              info: {
                account: "EDAWjyzq1Mf4JDue3tNiqhGeUg8az41EsHEQcEmjnZBY",
                destination: "Gi44PdWS951cZjR5hgW1VnvKkxcV3scyHFpAFY3QpYSb",
                multisigOwner: "4pUQS4Jo2dsfWzt3VgHXy3H6RYnEDd11oWPiaM2rdAPw",
                signers: ["4pUQS4Jo2dsfWzt3VgHXy3H6RYnEDd11oWPiaM2rdAPw"],
              },
              type: "closeAccount",
            },
            program: "spl-token",
            programId: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
          },
        ],
      },
    ],
    logMessages: [
      "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL invoke [1]",
      "Program log: Transfer 2039280 lamports to the associated token account",
      "Program 11111111111111111111111111111111 invoke [2]",
      "Program 11111111111111111111111111111111 success",
      "Program log: Allocate space for the associated token account",
      "Program 11111111111111111111111111111111 invoke [2]",
      "Program 11111111111111111111111111111111 success",
      "Program log: Assign the associated token account to the SPL Token program",
      "Program 11111111111111111111111111111111 invoke [2]",
      "Program 11111111111111111111111111111111 success",
      "Program log: Initialize the associated token account",
      "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]",
      "Program log: Instruction: InitializeAccount",
      "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 3449 of 179574 compute units",
      "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success",
      "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL consumed 24524 of 200000 compute units",
      "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL success",
      "Program HZaWndaNWHFDd9Dhk5pqUUtsmoBCqzb1MLu3NAh1VX6B invoke [1]",
      "Program log: Instruction: Exchange",
      "Program log: Transfer 15600000 service fee to fee_collector",
      "Program 11111111111111111111111111111111 invoke [2]",
      "Program 11111111111111111111111111111111 success",
      "Program log: Send 78000000 lamports royalty to 67dNFe4z58pmTs1DshwTm2rT127XtBCeRaBxDUYwaLfu",
      "Program 11111111111111111111111111111111 invoke [2]",
      "Program 11111111111111111111111111111111 success",
      "Program log: Send Remaining 686400000 lamports to initializer",
      "Program 11111111111111111111111111111111 invoke [2]",
      "Program 11111111111111111111111111111111 success",
      "Program log: Calling the token program to transfer tokens to the taker...",
      "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]",
      "Program log: Instruction: Transfer",
      "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 3246 of 157040 compute units",
      "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success",
      "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]",
      "Program log: Instruction: CloseAccount",
      "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 2422 of 150764 compute units",
      "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success",
      "Program log: Closing the escrow account...",
      "Program HZaWndaNWHFDd9Dhk5pqUUtsmoBCqzb1MLu3NAh1VX6B consumed 53096 of 200000 compute units",
      "Program HZaWndaNWHFDd9Dhk5pqUUtsmoBCqzb1MLu3NAh1VX6B success",
    ],
    postBalances: [
      445990595, 2039280, 0, 2334481480, 0, 430340495378, 4572720, 142232472680,
      1461600, 1, 1089991680, 1009200, 0, 5616720, 9221625333, 898174080,
      1141440,
    ],
    postTokenBalances: [
      {
        accountIndex: 1,
        mint: "14Cc7DA6MwpNdAZZYdLxK6WQ9meMaeLX1WsCyLRf5nqw",
        owner: "CScUB4iBTfCWaFkj5gRpXx42HVpAgDvPJgbQxtETRXi1",
        uiTokenAmount: {
          amount: "1",
          decimals: 0,
          uiAmount: 1.0,
          uiAmountString: "1",
        },
      },
    ],
    preBalances: [
      1228034875, 0, 2039280, 1644357880, 1684320, 430324895378, 4572720,
      142154472680, 1461600, 1, 1089991680, 1009200, 0, 5616720, 9221625333,
      898174080, 1141440,
    ],
    preTokenBalances: [
      {
        accountIndex: 2,
        mint: "14Cc7DA6MwpNdAZZYdLxK6WQ9meMaeLX1WsCyLRf5nqw",
        owner: "4pUQS4Jo2dsfWzt3VgHXy3H6RYnEDd11oWPiaM2rdAPw",
        uiTokenAmount: {
          amount: "1",
          decimals: 0,
          uiAmount: 1.0,
          uiAmountString: "1",
        },
      },
    ],
    rewards: [],
    status: { Ok: null },
  },
  slot: 105618616,
  transaction: {
    message: {
      accountKeys: [
        {
          pubkey: "CScUB4iBTfCWaFkj5gRpXx42HVpAgDvPJgbQxtETRXi1",
          signer: true,
          writable: true,
        },
        {
          pubkey: "5x13F4NupczfwP9EjJP4wcDQWinhUk2wXNeS1xYMzAgR",
          signer: false,
          writable: true,
        },
        {
          pubkey: "EDAWjyzq1Mf4JDue3tNiqhGeUg8az41EsHEQcEmjnZBY",
          signer: false,
          writable: true,
        },
        {
          pubkey: "Gi44PdWS951cZjR5hgW1VnvKkxcV3scyHFpAFY3QpYSb",
          signer: false,
          writable: true,
        },
        {
          pubkey: "AmcWF1RdEB4dAxuevnpVG3cwHTYxbV8cz27c1qT5dddr",
          signer: false,
          writable: true,
        },
        {
          pubkey: "D3wgcpWjAWR3GREbkyuGr3bNLHfdQsLr5hN2AvSP8pBi",
          signer: false,
          writable: true,
        },
        {
          pubkey: "J9qZY93eS6Du1E8K6zNqAs71YeAiBncUywmuCbF1Wwei",
          signer: false,
          writable: true,
        },
        {
          pubkey: "67dNFe4z58pmTs1DshwTm2rT127XtBCeRaBxDUYwaLfu",
          signer: false,
          writable: true,
        },
        {
          pubkey: "14Cc7DA6MwpNdAZZYdLxK6WQ9meMaeLX1WsCyLRf5nqw",
          signer: false,
          writable: false,
        },
        {
          pubkey: "11111111111111111111111111111111",
          signer: false,
          writable: false,
        },
        {
          pubkey: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
          signer: false,
          writable: false,
        },
        {
          pubkey: "SysvarRent111111111111111111111111111111111",
          signer: false,
          writable: false,
        },
        {
          pubkey: "B7dtJwRwGnx5hMA8uDQuk4cxHGR4sF843FTME4Jr2ft2",
          signer: false,
          writable: false,
        },
        {
          pubkey: "5QY6DGcNE7rCW6ReRJSfiq9KF8wmyESbhiiLwvJT1YWy",
          signer: false,
          writable: false,
        },
        {
          pubkey: "4pUQS4Jo2dsfWzt3VgHXy3H6RYnEDd11oWPiaM2rdAPw",
          signer: false,
          writable: false,
        },
        {
          pubkey: "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL",
          signer: false,
          writable: false,
        },
        {
          pubkey: "HZaWndaNWHFDd9Dhk5pqUUtsmoBCqzb1MLu3NAh1VX6B",
          signer: false,
          writable: false,
        },
      ],
      instructions: [
        {
          parsed: {
            info: {
              account: "5x13F4NupczfwP9EjJP4wcDQWinhUk2wXNeS1xYMzAgR",
              mint: "14Cc7DA6MwpNdAZZYdLxK6WQ9meMaeLX1WsCyLRf5nqw",
              rentSysvar: "SysvarRent111111111111111111111111111111111",
              source: "CScUB4iBTfCWaFkj5gRpXx42HVpAgDvPJgbQxtETRXi1",
              systemProgram: "11111111111111111111111111111111",
              tokenProgram: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
              wallet: "CScUB4iBTfCWaFkj5gRpXx42HVpAgDvPJgbQxtETRXi1",
            },
            type: "create",
          },
          program: "spl-associated-token-account",
          programId: "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL",
        },
        {
          accounts: [
            "CScUB4iBTfCWaFkj5gRpXx42HVpAgDvPJgbQxtETRXi1",
            "5x13F4NupczfwP9EjJP4wcDQWinhUk2wXNeS1xYMzAgR",
            "EDAWjyzq1Mf4JDue3tNiqhGeUg8az41EsHEQcEmjnZBY",
            "Gi44PdWS951cZjR5hgW1VnvKkxcV3scyHFpAFY3QpYSb",
            "AmcWF1RdEB4dAxuevnpVG3cwHTYxbV8cz27c1qT5dddr",
            "B7dtJwRwGnx5hMA8uDQuk4cxHGR4sF843FTME4Jr2ft2",
            "5QY6DGcNE7rCW6ReRJSfiq9KF8wmyESbhiiLwvJT1YWy",
            "14Cc7DA6MwpNdAZZYdLxK6WQ9meMaeLX1WsCyLRf5nqw",
            "4pUQS4Jo2dsfWzt3VgHXy3H6RYnEDd11oWPiaM2rdAPw",
            "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
            "11111111111111111111111111111111",
            "D3wgcpWjAWR3GREbkyuGr3bNLHfdQsLr5hN2AvSP8pBi",
            "J9qZY93eS6Du1E8K6zNqAs71YeAiBncUywmuCbF1Wwei",
            "67dNFe4z58pmTs1DshwTm2rT127XtBCeRaBxDUYwaLfu",
          ],
          data: "2UnMphP3bh8T",
          programId: "HZaWndaNWHFDd9Dhk5pqUUtsmoBCqzb1MLu3NAh1VX6B",
        },
      ],
      recentBlockhash: "BBdpUZtu4nysqope7HrxBhSP6fauFgQ1ccSEe6b6UZzU",
    },
    signatures: [
      "4CwUFDv1JoaK4iN2chARePZZjAPrXdcX2VwDC2Snt4gNgdmFfqtiUR6HkniFNfLwh35rQzTjqhpDkgzWw69e6Svc",
    ],
  },
};
export default saleTx;


================================================
FILE: src/lib/marketplaces/__fixtures__/digitalEyesSaleTx.ts
================================================
import { ParsedConfirmedTransaction } from "@solana/web3.js";

const saleTx: ParsedConfirmedTransaction = {
  blockTime: 1635551628,
  meta: {
    err: null,
    fee: 5000,
    innerInstructions: [
      {
        index: 0,
        instructions: [
          {
            parsed: {
              info: {
                destination: "8F81Yh4FbpGgPcCoxuJsDNaBwZW6JURp6yAvQFnhVhw6",
                lamports: 2039280,
                source: "59uZhxZov3UeBG3QQWg8rKLm4MHGA89V3XLBRUxbqXaV",
              },
              type: "transfer",
            },
            program: "system",
            programId: "11111111111111111111111111111111",
          },
          {
            parsed: {
              info: {
                account: "8F81Yh4FbpGgPcCoxuJsDNaBwZW6JURp6yAvQFnhVhw6",
                space: 165,
              },
              type: "allocate",
            },
            program: "system",
            programId: "11111111111111111111111111111111",
          },
          {
            parsed: {
              info: {
                account: "8F81Yh4FbpGgPcCoxuJsDNaBwZW6JURp6yAvQFnhVhw6",
                owner: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
              },
              type: "assign",
            },
            program: "system",
            programId: "11111111111111111111111111111111",
          },
          {
            parsed: {
              info: {
                account: "8F81Yh4FbpGgPcCoxuJsDNaBwZW6JURp6yAvQFnhVhw6",
                mint: "ECoNeXqLJofE7WZZzkntyTr3kqgrELmcLiY4HN9qb2ae",
                owner: "59uZhxZov3UeBG3QQWg8rKLm4MHGA89V3XLBRUxbqXaV",
                rentSysvar: "SysvarRent111111111111111111111111111111111",
              },
              type: "initializeAccount",
            },
            program: "spl-token",
            programId: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
          },
        ],
      },
      {
        index: 1,
        instructions: [
          {
            parsed: {
              info: {
                destination: "3iYf9hHQPciwgJ1TCjpRUp1A3QW4AfaK7J6vCmETRMuu",
                lamports: 750000,
                source: "59uZhxZov3UeBG3QQWg8rKLm4MHGA89V3XLBRUxbqXaV",
              },
              type: "transfer",
            },
            program: "system",
            programId: "11111111111111111111111111111111",
          },
          {
            parsed: {
              info: {
                destination: "Zp66dczQGRNwpcRzpAN24SY1EhYU7c253HDKZw84YH9",
                lamports: 0,
                source: "59uZhxZov3UeBG3QQWg8rKLm4MHGA89V3XLBRUxbqXaV",
              },
              type: "transfer",
            },
            program: "system",
            programId: "11111111111111111111111111111111",
          },
          {
            parsed: {
              info: {
                destination: "3UCtQ8D24XviEujCNWpM7hQNqMHfqzat1XtJta6DhvhD",
                lamports: 0,
                source: "59uZhxZov3UeBG3QQWg8rKLm4MHGA89V3XLBRUxbqXaV",
              },
              type: "transfer",
            },
            program: "system",
            programId: "11111111111111111111111111111111",
          },
          {
            parsed: {
              info: {
                destination: "6EjCH2MQBucbfCXZbrUpP3jTkYLJi3r87rdyptrrNAXJ",
                lamports: 29250000,
                source: "59uZhxZov3UeBG3QQWg8rKLm4MHGA89V3XLBRUxbqXaV",
              },
              type: "transfer",
            },
            program: "system",
            programId: "11111111111111111111111111111111",
          },
          {
            parsed: {
              info: {
                amount: "1",
                destination: "8F81Yh4FbpGgPcCoxuJsDNaBwZW6JURp6yAvQFnhVhw6",
                multisigAuthority:
                  "F4ghBzHFNgJxV4wEQDchU5i7n4XWWMBSaq7CuswGiVsr",
                signers: ["F4ghBzHFNgJxV4wEQDchU5i7n4XWWMBSaq7CuswGiVsr"],
                source: "G28rmTFZQwX38airfjtfowPk2gJqSdxyJWggkCBxZoJu",
              },
              type: "transfer",
            },
            program: "spl-token",
            programId: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
          },
          {
            parsed: {
              info: {
                account: "G28rmTFZQwX38airfjtfowPk2gJqSdxyJWggkCBxZoJu",
                destination: "6EjCH2MQBucbfCXZbrUpP3jTkYLJi3r87rdyptrrNAXJ",
                multisigOwner: "F4ghBzHFNgJxV4wEQDchU5i7n4XWWMBSaq7CuswGiVsr",
                signers: ["F4ghBzHFNgJxV4wEQDchU5i7n4XWWMBSaq7CuswGiVsr"],
              },
              type: "closeAccount",
            },
            program: "spl-token",
            programId: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
          },
        ],
      },
    ],
    logMessages: [
      "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL invoke [1]",
      "Program log: Transfer 2039280 lamports to the associated token account",
      "Program 11111111111111111111111111111111 invoke [2]",
      "Program 11111111111111111111111111111111 success",
      "Program log: Allocate space for the associated token account",
      "Program 11111111111111111111111111111111 invoke [2]",
      "Program 11111111111111111111111111111111 success",
      "Program log: Assign the associated token account to the SPL Token program",
      "Program 11111111111111111111111111111111 invoke [2]",
      "Program 11111111111111111111111111111111 success",
      "Program log: Initialize the associated token account",
      "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]",
      "Program log: Instruction: InitializeAccount",
      "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 3449 of 179575 compute units",
      "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success",
      "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL consumed 24523 of 200000 compute units",
      "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL success",
      "Program A7p8451ktDCHq5yYaHczeLMYsjRsAkzc3hCXcSrwYHU7 invoke [1]",
      "Program log: Instruction: Exchange",
      "Program log: amount: 1",
      'Program log: sales tax recipients: passed:3iYf9hHQPciwgJ1TCjpRUp1A3QW4AfaK7J6vCmETRMuu / expected:"3iYf9hHQPciwgJ1TCjpRUp1A3QW4AfaK7J6vCmETRMuu"',
      "Program log: Transfering sales tax",
      "Program 11111111111111111111111111111111 invoke [2]",
      "Program 11111111111111111111111111111111 success",
      "Program log: Checking metadata...",
      "Program log: Disbursing royalties...",
      "Program 11111111111111111111111111111111 invoke [2]",
      "Program 11111111111111111111111111111111 success",
      "Program 11111111111111111111111111111111 invoke [2]",
      "Program 11111111111111111111111111111111 success",
      "Program log: Transfering payment to initializer.",
      "Program 11111111111111111111111111111111 invoke [2]",
      "Program 11111111111111111111111111111111 success",
      "Program log: Calling the token program to transfer tokens to the taker...",
      "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]",
      "Program log: Instruction: Transfer",
      "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 3246 of 130231 compute units",
      "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success",
      "Program log: Calling the token program to close pda's temp account...",
      "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]",
      "Program log: Instruction: CloseAccount",
      "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 2422 of 123814 compute units",
      "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success",
      "Program log: Closing the escrow account...",
      "Program A7p8451ktDCHq5yYaHczeLMYsjRsAkzc3hCXcSrwYHU7 consumed 79962 of 200000 compute units",
      "Program A7p8451ktDCHq5yYaHczeLMYsjRsAkzc3hCXcSrwYHU7 success",
    ],
    postBalances: [
      6630906551, 2039280, 0, 2443004876, 0, 1017119393853, 1461600, 5616720,
      4572720, 1806098160, 1, 1089991680, 1, 92968990310, 898174080, 1141440,
    ],
    postTokenBalances: [
      {
        accountIndex: 1,
        mint: "ECoNeXqLJofE7WZZzkntyTr3kqgrELmcLiY4HN9qb2ae",
        uiTokenAmount: {
          amount: "1",
          decimals: 0,
          uiAmount: 1.0,
          uiAmountString: "1",
        },
      },
    ],
    preBalances: [
      6662950831, 0, 2039280, 2410093916, 1621680, 1017118643853, 1461600,
      5616720, 4572720, 1806098160, 1, 1089991680, 1, 92968990310, 898174080,
      1141440,
    ],
    preTokenBalances: [
      {
        accountIndex: 2,
        mint: "ECoNeXqLJofE7WZZzkntyTr3kqgrELmcLiY4HN9qb2ae",
        uiTokenAmount: {
          amount: "1",
          decimals: 0,
          uiAmount: 1.0,
          uiAmountString: "1",
        },
      },
    ],
    rewards: [],
    status: { Ok: null },
  },
  slot: 104209815,
  transaction: {
    message: {
      accountKeys: [
        {
          pubkey: "59uZhxZov3UeBG3QQWg8rKLm4MHGA89V3XLBRUxbqXaV",
          signer: true,
          writable: true,
        },
        {
          pubkey: "8F81Yh4FbpGgPcCoxuJsDNaBwZW6JURp6yAvQFnhVhw6",
          signer: false,
          writable: true,
        },
        {
          pubkey: "G28rmTFZQwX38airfjtfowPk2gJqSdxyJWggkCBxZoJu",
          signer: false,
          writable: true,
        },
        {
          pubkey: "6EjCH2MQBucbfCXZbrUpP3jTkYLJi3r87rdyptrrNAXJ",
          signer: false,
          writable: true,
        },
        {
          pubkey: "BKcWGeoSu7fYJVTMBvPGdGc5L8uMctQ1GJ56H9q9jPdS",
          signer: false,
          writable: true,
        },
        {
          pubkey: "3iYf9hHQPciwgJ1TCjpRUp1A3QW4AfaK7J6vCmETRMuu",
          signer: false,
          writable: true,
        },
        {
          pubkey: "ECoNeXqLJofE7WZZzkntyTr3kqgrELmcLiY4HN9qb2ae",
          signer: false,
          writable: true,
        },
        {
          pubkey: "2TrLT1Rj7yz9Kgbt7Y1VtSfvTNCnE2mnYyE5yP6VZyS9",
          signer: false,
          writable: true,
        },
        {
          pubkey: "Zp66dczQGRNwpcRzpAN24SY1EhYU7c253HDKZw84YH9",
          signer: false,
          writable: true,
        },
        {
          pubkey: "3UCtQ8D24XviEujCNWpM7hQNqMHfqzat1XtJta6DhvhD",
          signer: false,
          writable: true,
        },
        {
          pubkey: "11111111111111111111111111111111",
          signer: false,
          writable: false,
        },
        {
          pubkey: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
          signer: false,
          writable: false,
        },
        {
          pubkey: "SysvarRent111111111111111111111111111111111",
          signer: false,
          writable: false,
        },
        {
          pubkey: "F4ghBzHFNgJxV4wEQDchU5i7n4XWWMBSaq7CuswGiVsr",
          signer: false,
          writable: false,
        },
        {
          pubkey: "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL",
          signer: false,
          writable: false,
        },
        {
          pubkey: "A7p8451ktDCHq5yYaHczeLMYsjRsAkzc3hCXcSrwYHU7",
          signer: false,
          writable: false,
        },
      ],
      instructions: [
        {
          parsed: {
            info: {
              account: "8F81Yh4FbpGgPcCoxuJsDNaBwZW6JURp6yAvQFnhVhw6",
              mint: "ECoNeXqLJofE7WZZzkntyTr3kqgrELmcLiY4HN9qb2ae",
              rentSysvar: "SysvarRent111111111111111111111111111111111",
              source: "59uZhxZov3UeBG3QQWg8rKLm4MHGA89V3XLBRUxbqXaV",
              systemProgram: "11111111111111111111111111111111",
              tokenProgram: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
              wallet: "59uZhxZov3UeBG3QQWg8rKLm4MHGA89V3XLBRUxbqXaV",
            },
            type: "create",
          },
          program: "spl-associated-token-account",
          programId: "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL",
        },
        {
          accounts: [
            "59uZhxZov3UeBG3QQWg8rKLm4MHGA89V3XLBRUxbqXaV",
            "8F81Yh4FbpGgPcCoxuJsDNaBwZW6JURp6yAvQFnhVhw6",
            "G28rmTFZQwX38airfjtfowPk2gJqSdxyJWggkCBxZoJu",
            "6EjCH2MQBucbfCXZbrUpP3jTkYLJi3r87rdyptrrNAXJ",
            "BKcWGeoSu7fYJVTMBvPGdGc5L8uMctQ1GJ56H9q9jPdS",
            "3iYf9hHQPciwgJ1TCjpRUp1A3QW4AfaK7J6vCmETRMuu",
            "ECoNeXqLJofE7WZZzkntyTr3kqgrELmcLiY4HN9qb2ae",
            "2TrLT1Rj7yz9Kgbt7Y1VtSfvTNCnE2mnYyE5yP6VZyS9",
            "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
            "11111111111111111111111111111111",
            "F4ghBzHFNgJxV4wEQDchU5i7n4XWWMBSaq7CuswGiVsr",
            "Zp66dczQGRNwpcRzpAN24SY1EhYU7c253HDKZw84YH9",
            "3UCtQ8D24XviEujCNWpM7hQNqMHfqzat1XtJta6DhvhD",
          ],
          data: "jzDsaTSmGkw",
          programId: "A7p8451ktDCHq5yYaHczeLMYsjRsAkzc3hCXcSrwYHU7",
        },
      ],
      recentBlockhash: "GqE4a2j1VYCcKgKMRVMmT7aaNY88pwyxh8Cnscb8R7a1",
    },
    signatures: [
      "5DqZaNrvEKLLUupRTbt56eYG4f8U25uxYH4wCw5UevbEttkBLDJuF9927yacw7J74kTtWKC1xuyA1QBQRakh3cd1",
    ],
  },
};
export default saleTx;


================================================
FILE: src/lib/marketplaces/__fixtures__/exchangeArtSaleTx.ts
================================================
import { ParsedConfirmedTransaction } from "@solana/web3.js";

const saleTx: ParsedConfirmedTransaction = {
  blockTime: 1636465965,
  meta: {
    err: null,
    fee: 5000,
    innerInstructions: [
      {
        index: 0,
        instructions: [
          {
            parsed: {
              info: {
                destination: "6482e33zrerYfhKAjPR2ncMSrH2tbTy5LDjdhB5PXzxd",
                lamports: 49750000,
                source: "8WX1T8ofK91YxcPHp9t1wnQanHfcu4Nzy3fwQqMNGecJ",
              },
              type: "transfer",
            },
            program: "system",
            programId: "11111111111111111111111111111111",
          },
          {
            parsed: {
              info: {
                destination: "BhrcD75cVC4Dpuqat6QP9MwAEeyBf8GFZ74iMzv41jTm",
                lamports: 0,
                source: "8WX1T8ofK91YxcPHp9t1wnQanHfcu4Nzy3fwQqMNGecJ",
              },
              type: "transfer",
            },
            program: "system",
            programId: "11111111111111111111111111111111",
          },
          {
            parsed: {
              info: {
                destination: "4QJzmvKWpneEgHDa99QCb4hWtAhxA6qfFNtYWAb8Cw93",
                lamports: 99500000,
                source: "8WX1T8ofK91YxcPHp9t1wnQanHfcu4Nzy3fwQqMNGecJ",
              },
              type: "transfer",
            },
            program: "system",
            programId: "11111111111111111111111111111111",
          },
          {
            parsed: {
              info: {
                destination: "7ZvteCjTjt5HxYbmxyzo9xMavDEXkNLUG6r6pJJXijvj",
                lamports: 99500000,
                source: "8WX1T8ofK91YxcPHp9t1wnQanHfcu4Nzy3fwQqMNGecJ",
              },
              type: "transfer",
            },
            program: "system",
            programId: "11111111111111111111111111111111",
          },
          {
            parsed: {
              info: {
                destination: "7A6AV8pMznyt9eBXGbnkcgbuKhStz3vDQvWcRBoYWV5R",
                lamports: 1741250000,
                source: "8WX1T8ofK91YxcPHp9t1wnQanHfcu4Nzy3fwQqMNGecJ",
              },
              type: "transfer",
            },
            program: "system",
            programId: "11111111111111111111111111111111",
          },
          {
            parsed: {
              info: {
                amount: "1",
                destination: "GzAM8LrsbDFHhmXkBsmUZ3aJad2G3y8XSJCMrfCXRqwb",
                multisigAuthority:
                  "BjaNzGdwRcFYeQGfuLYsc1BbaNRG1yxyWs1hZuGRT8J2",
                signers: ["BjaNzGdwRcFYeQGfuLYsc1BbaNRG1yxyWs1hZuGRT8J2"],
                source: "4Nh4j5A9ukweW3e14LaxmRGWKGM3ePrVjDamJfTc5HpQ",
              },
              type: "transfer",
            },
            program: "spl-token",
            programId: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
          },
          {
            parsed: {
              info: {
                account: "4Nh4j5A9ukweW3e14LaxmRGWKGM3ePrVjDamJfTc5HpQ",
                destination: "7A6AV8pMznyt9eBXGbnkcgbuKhStz3vDQvWcRBoYWV5R",
                multisigOwner: "BjaNzGdwRcFYeQGfuLYsc1BbaNRG1yxyWs1hZuGRT8J2",
                signers: ["BjaNzGdwRcFYeQGfuLYsc1BbaNRG1yxyWs1hZuGRT8J2"],
              },
              type: "closeAccount",
            },
            program: "spl-token",
            programId: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
          },
        ],
      },
    ],
    logMessages: [
      "Program AmK5g2XcyptVLCFESBCJqoSfwV3znGoVYQnqEnaAZKWn invoke [1]",
      "Program log: Instruction: AcceptExchangeByTaker (amount: 1)",
      "Program 11111111111111111111111111111111 invoke [2]",
      "Program 11111111111111111111111111111111 success",
      "Program 11111111111111111111111111111111 invoke [2]",
      "Program 11111111111111111111111111111111 success",
      "Program 11111111111111111111111111111111 invoke [2]",
      "Program 11111111111111111111111111111111 success",
      "Program 11111111111111111111111111111111 invoke [2]",
      "Program 11111111111111111111111111111111 success",
      "Program 11111111111111111111111111111111 invoke [2]",
      "Program 11111111111111111111111111111111 success",
      "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]",
      "Program log: Instruction: Transfer",
      "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 3246 of 146259 compute units",
      "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success",
      "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]",
      "Program log: Instruction: CloseAccount",
      "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 2422 of 140048 compute units",
      "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success",
      "Program AmK5g2XcyptVLCFESBCJqoSfwV3znGoVYQnqEnaAZKWn consumed 63945 of 200000 compute units",
      "Program AmK5g2XcyptVLCFESBCJqoSfwV3znGoVYQnqEnaAZKWn success",
    ],
    postBalances: [
      242200763, 2039280, 0, 1759795401, 0, 23534995018, 4572720, 149500000,
      149495000, 1461600, 5616720, 1089991680, 1, 119000000, 1461600, 1141440,
    ],
    postTokenBalances: [
      {
        accountIndex: 1,
        mint: "GSG2UXwfv5EE1Ad62bCc3pWcgJy5NRdFYof9JyyFZDMS",
        uiTokenAmount: {
          amount: "1",
          decimals: 0,
          uiAmount: 1.0,
          uiAmountString: "1",
        },
      },
    ],
    preBalances: [
      2232205763, 2039280, 2039280, 14877481, 1628640, 23485245018, 4572720,
      50000000, 49995000, 1461600, 5616720, 1089991680, 1, 119000000, 1461600,
      1141440,
    ],
    preTokenBalances: [
      {
        accountIndex: 1,
        mint: "GSG2UXwfv5EE1Ad62bCc3pWcgJy5NRdFYof9JyyFZDMS",
        uiTokenAmount: {
          amount: "0",
          decimals: 0,
          uiAmount: null,
          uiAmountString: "0",
        },
      },
      {
        accountIndex: 2,
        mint: "GSG2UXwfv5EE1Ad62bCc3pWcgJy5NRdFYof9JyyFZDMS",
        uiTokenAmount: {
          amount: "1",
          decimals: 0,
          uiAmount: 1.0,
          uiAmountString: "1",
        },
      },
    ],
    rewards: [],
    status: { Ok: null },
  },
  slot: 106028506,
  transaction: {
    message: {
      accountKeys: [
        {
          pubkey: "8WX1T8ofK91YxcPHp9t1wnQanHfcu4Nzy3fwQqMNGecJ",
          signer: true,
          writable: true,
        },
        {
          pubkey: "GzAM8LrsbDFHhmXkBsmUZ3aJad2G3y8XSJCMrfCXRqwb",
          signer: false,
          writable: true,
        },
        {
          pubkey: "4Nh4j5A9ukweW3e14LaxmRGWKGM3ePrVjDamJfTc5HpQ",
          signer: false,
          writable: true,
        },
        {
          pubkey: "7A6AV8pMznyt9eBXGbnkcgbuKhStz3vDQvWcRBoYWV5R",
          signer: false,
          writable: true,
        },
        {
          pubkey: "8UcHhLq4euUGidninfLDzbBEq9jnQRsMF9hHvPtW4dC4",
          signer: false,
          writable: true,
        },
        {
          pubkey: "6482e33zrerYfhKAjPR2ncMSrH2tbTy5LDjdhB5PXzxd",
          signer: false,
          writable: true,
        },
        {
          pubkey: "BhrcD75cVC4Dpuqat6QP9MwAEeyBf8GFZ74iMzv41jTm",
          signer: false,
          writable: true,
        },
        {
          pubkey: "4QJzmvKWpneEgHDa99QCb4hWtAhxA6qfFNtYWAb8Cw93",
          signer: false,
          writable: true,
        },
        {
          pubkey: "7ZvteCjTjt5HxYbmxyzo9xMavDEXkNLUG6r6pJJXijvj",
          signer: false,
          writable: true,
        },
        {
          pubkey: "GSG2UXwfv5EE1Ad62bCc3pWcgJy5NRdFYof9JyyFZDMS",
          signer: false,
          writable: false,
        },
        {
          pubkey: "FLUgjuKHWySQ5gnQxmqnvoeydHcLY8VdfjNbFrpvYLNR",
          signer: false,
          writable: false,
        },
        {
          pubkey: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
          signer: false,
          writable: false,
        },
        {
          pubkey: "11111111111111111111111111111111",
          signer: false,
          writable: false,
        },
        {
          pubkey: "BjaNzGdwRcFYeQGfuLYsc1BbaNRG1yxyWs1hZuGRT8J2",
          signer: false,
          writable: false,
        },
        {
          pubkey: "9jd5tCY3JhjfSYSpgRzsgpoF5V52rNXYm4eRMfXeqUwR",
          signer: false,
          writable: false,
        },
        {
          pubkey: "AmK5g2XcyptVLCFESBCJqoSfwV3znGoVYQnqEnaAZKWn",
          signer: false,
          writable: false,
        },
      ],
      instructions: [
        {
          accounts: [
            "8WX1T8ofK91YxcPHp9t1wnQanHfcu4Nzy3fwQqMNGecJ",
            "GzAM8LrsbDFHhmXkBsmUZ3aJad2G3y8XSJCMrfCXRqwb",
            "4Nh4j5A9ukweW3e14LaxmRGWKGM3ePrVjDamJfTc5HpQ",
            "7A6AV8pMznyt9eBXGbnkcgbuKhStz3vDQvWcRBoYWV5R",
            "8UcHhLq4euUGidninfLDzbBEq9jnQRsMF9hHvPtW4dC4",
            "6482e33zrerYfhKAjPR2ncMSrH2tbTy5LDjdhB5PXzxd",
            "GSG2UXwfv5EE1Ad62bCc3pWcgJy5NRdFYof9JyyFZDMS",
            "FLUgjuKHWySQ5gnQxmqnvoeydHcLY8VdfjNbFrpvYLNR",
            "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
            "11111111111111111111111111111111",
            "BjaNzGdwRcFYeQGfuLYsc1BbaNRG1yxyWs1hZuGRT8J2",
            "9jd5tCY3JhjfSYSpgRzsgpoF5V52rNXYm4eRMfXeqUwR",
            "BhrcD75cVC4Dpuqat6QP9MwAEeyBf8GFZ74iMzv41jTm",
            "4QJzmvKWpneEgHDa99QCb4hWtAhxA6qfFNtYWAb8Cw93",
            "7ZvteCjTjt5HxYbmxyzo9xMavDEXkNLUG6r6pJJXijvj",
          ],
          data: "jzDsaTSmGkw",
          programId: "AmK5g2XcyptVLCFESBCJqoSfwV3znGoVYQnqEnaAZKWn",
        },
      ],
      recentBlockhash: "Cj3zXV6hkKDMRmAkgdfURo3acZ5h2W28LbariB3ZrFJh",
    },
    signatures: [
      "4WniSeFvZHsnZEDueeWhP18dUC9bGwZjoQ19RQq14796GCdb7WVRsTjK8AZCLLhL136p4J96minzfZcKVjY3fNAY",
    ],
  },
};

export default saleTx;


================================================
FILE: src/lib/marketplaces/__fixtures__/exchangeArtSaleTxV2.ts
================================================
import { ParsedConfirmedTransaction } from "@solana/web3.js";

const saleTx: ParsedConfirmedTransaction = {
  blockTime: 1637139756,
  meta: {
    err: null,
    fee: 5000,
    innerInstructions: [
      {
        index: 0,
        instructions: [
          {
            parsed: {
              info: {
                destination: "6oTEszeAVQwvFgUkcitipR865qQUAy3UQ5ys5rfNDXC6",
                lamports: 2039280,
                source: "FR4xWcvhxA2dLTDda5cmD1zUxz9gnzrVhhLq4owcAzt3",
              },
              type: "transfer",
            },
            program: "system",
            programId: "11111111111111111111111111111111",
          },
          {
            parsed: {
              info: {
                account: "6oTEszeAVQwvFgUkcitipR865qQUAy3UQ5ys5rfNDXC6",
                space: 165,
              },
              type: "allocate",
            },
            program: "system",
            programId: "11111111111111111111111111111111",
          },
          {
            parsed: {
              info: {
                account: "6oTEszeAVQwvFgUkcitipR865qQUAy3UQ5ys5rfNDXC6",
                owner: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
              },
              type: "assign",
            },
            program: "system",
            programId: "11111111111111111111111111111111",
          },
          {
            parsed: {
              info: {
                account: "6oTEszeAVQwvFgUkcitipR865qQUAy3UQ5ys5rfNDXC6",
                mint: "BtoorpGmtSydBtUfCaiHAEFPnE6Q4QKopTKrix6Ftcn2",
                owner: "FR4xWcvhxA2dLTDda5cmD1zUxz9gnzrVhhLq4owcAzt3",
                rentSysvar: "SysvarRent111111111111111111111111111111111",
              },
              type: "initializeAccount",
            },
            program: "spl-token",
            programId: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
          },
        ],
      },
      {
        index: 1,
        instructions: [
          {
            parsed: {
              info: {
                destination: "6482e33zrerYfhKAjPR2ncMSrH2tbTy5LDjdhB5PXzxd",
                lamports: 5000000,
                source: "FR4xWcvhxA2dLTDda5cmD1zUxz9gnzrVhhLq4owcAzt3",
              },
              type: "transfer",
            },
            program: "system",
            programId: "11111111111111111111111111111111",
          },
          {
            parsed: {
              info: {
                destination: "2DXWoqh6dCp8VFWwuPszWXcWAnegaEMyT4UVgRMJJzQn",
                lamports: 0,
                source: "FR4xWcvhxA2dLTDda5cmD1zUxz9gnzrVhhLq4owcAzt3",
              },
              type: "transfer",
            },
            program: "system",
            programId: "11111111111111111111111111111111",
          },
          {
            parsed: {
              info: {
                destination: "8pJyixptCqPPLSkT9qqjMmJjAELdP8YiGsL1ihNmSsaE",
                lamports: 100000000,
                source: "FR4xWcvhxA2dLTDda5cmD1zUxz9gnzrVhhLq4owcAzt3",
              },
              type: "transfer",
            },
            program: "system",
            programId: "11111111111111111111111111111111",
          },
          {
            parsed: {
              info: {
                destination: "3Z6T94rMaTKjfdQb9ShunvMJ6C9LqDqEkfKBBeGArpzp",
                lamports: 95000000,
                source: "FR4xWcvhxA2dLTDda5cmD1zUxz9gnzrVhhLq4owcAzt3",
              },
              type: "transfer",
            },
            program: "system",
            programId: "11111111111111111111111111111111",
          },
          {
            parsed: {
              info: {
                amount: "1",
                destination: "6oTEszeAVQwvFgUkcitipR865qQUAy3UQ5ys5rfNDXC6",
                multisigAuthority:
                  "BjaNzGdwRcFYeQGfuLYsc1BbaNRG1yxyWs1hZuGRT8J2",
                signers: ["BjaNzGdwRcFYeQGfuLYsc1BbaNRG1yxyWs1hZuGRT8J2"],
                source: "HukHCJmGZLG6BEr8MjjacEoeJzjiMuwX4Y5Q5Yyvm1Lo",
              },
              type: "transfer",
            },
            program: "spl-token",
            programId: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
          },
          {
            parsed: {
              info: {
                account: "HukHCJmGZLG6BEr8MjjacEoeJzjiMuwX4Y5Q5Yyvm1Lo",
                destination: "3Z6T94rMaTKjfdQb9ShunvMJ6C9LqDqEkfKBBeGArpzp",
                multisigOwner: "BjaNzGdwRcFYeQGfuLYsc1BbaNRG1yxyWs1hZuGRT8J2",
                signers: ["BjaNzGdwRcFYeQGfuLYsc1BbaNRG1yxyWs1hZuGRT8J2"],
              },
              type: "closeAccount",
            },
            program: "spl-token",
            programId: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
          },
        ],
      },
    ],
    logMessages: [
      "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL invoke [1]",
      "Program log: Transfer 2039280 lamports to the associated token account",
      "Program 11111111111111111111111111111111 invoke [2]",
      "Program 11111111111111111111111111111111 success",
      "Program log: Allocate space for the associated token account",
      "Program 11111111111111111111111111111111 invoke [2]",
      "Program 11111111111111111111111111111111 success",
      "Program log: Assign the associated token account to the SPL Token program",
      "Program 11111111111111111111111111111111 invoke [2]",
      "Program 11111111111111111111111111111111 success",
      "Program log: Initialize the associated token account",
      "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]",
      "Program log: Instruction: InitializeAccount",
      "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 3449 of 179574 compute units",
      "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success",
      "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL consumed 24524 of 200000 compute units",
      "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL success",
      "Program AmK5g2XcyptVLCFESBCJqoSfwV3znGoVYQnqEnaAZKWn invoke [1]",
      "Program log: Instruction: AcceptExchangeByTaker (amount: 1)",
      "Program 11111111111111111111111111111111 invoke [2]",
      "Program 11111111111111111111111111111111 success",
      "Program log: final seller fee basis points after PHBT: 5000.0",
      "Program 11111111111111111111111111111111 invoke [2]",
      "Program 11111111111111111111111111111111 success",
      "Program 11111111111111111111111111111111 invoke [2]",
      "Program 11111111111111111111111111111111 success",
      "Program 11111111111111111111111111111111 invoke [2]",
      "Program 11111111111111111111111111111111 success",
      "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]",
      "Program log: Instruction: Transfer",
      "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 3246 of 144566 compute units",
      "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success",
      "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]",
      "Program log: Instruction: CloseAccount",
      "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 2422 of 138355 compute units",
      "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success",
      "Program AmK5g2XcyptVLCFESBCJqoSfwV3znGoVYQnqEnaAZKWn consumed 65510 of 200000 compute units",
      "Program AmK5g2XcyptVLCFESBCJqoSfwV3znGoVYQnqEnaAZKWn success",
    ],
    postBalances: [
      3583436090, 2039280, 0, 178325906, 0, 92565366518, 4572720, 16484238885,
      1461600, 1, 1089991680, 1009200, 5616720, 166000000, 898174080, 1141440,
    ],
    postTokenBalances: [
      {
        accountIndex: 1,
        mint: "BtoorpGmtSydBtUfCaiHAEFPnE6Q4QKopTKrix6Ftcn2",
        owner: "FR4xWcvhxA2dLTDda5cmD1zUxz9gnzrVhhLq4owcAzt3",
        uiTokenAmount: {
          amount: "1",
          decimals: 0,
          uiAmount: 1.0,
          uiAmountString: "1",
        },
      },
    ],
    preBalances: [
      3785480370, 0, 2039280, 79657986, 1628640, 92560366518, 4572720,
      16384238885, 1461600, 1, 1089991680, 1009200, 5616720, 166000000,
      898174080, 1141440,
    ],
    preTokenBalances: [
      {
        accountIndex: 2,
        mint: "BtoorpGmtSydBtUfCaiHAEFPnE6Q4QKopTKrix6Ftcn2",
        owner: "BjaNzGdwRcFYeQGfuLYsc1BbaNRG1yxyWs1hZuGRT8J2",
        uiTokenAmount: {
          amount: "1",
          decimals: 0,
          uiAmount: 1.0,
          uiAmountString: "1",
        },
      },
    ],
    rewards: [],
    status: { Ok: null },
  },
  slot: 107304222,
  transaction: {
    message: {
      accountKeys: [
        {
          pubkey: "FR4xWcvhxA2dLTDda5cmD1zUxz9gnzrVhhLq4owcAzt3",
          signer: true,
          writable: true,
        },
        {
          pubkey: "6oTEszeAVQwvFgUkcitipR865qQUAy3UQ5ys5rfNDXC6",
          signer: false,
          writable: true,
        },
        {
          pubkey: "HukHCJmGZLG6BEr8MjjacEoeJzjiMuwX4Y5Q5Yyvm1Lo",
          signer: false,
          writable: true,
        },
        {
          pubkey: "3Z6T94rMaTKjfdQb9ShunvMJ6C9LqDqEkfKBBeGArpzp",
          signer: false,
          writable: true,
        },
        {
          pubkey: "BjEdwXRGZh6NLk99P5utngc5Wed7UHYgxHBSQStq4o54",
          signer: false,
          writable: true,
        },
        {
          pubkey: "6482e33zrerYfhKAjPR2ncMSrH2tbTy5LDjdhB5PXzxd",
          signer: false,
          writable: true,
        },
        {
          pubkey: "2DXWoqh6dCp8VFWwuPszWXcWAnegaEMyT4UVgRMJJzQn",
          signer: false,
          writable: true,
        },
        {
          pubkey: "8pJyixptCqPPLSkT9qqjMmJjAELdP8YiGsL1ihNmSsaE",
          signer: false,
          writable: true,
        },
        {
          pubkey: "BtoorpGmtSydBtUfCaiHAEFPnE6Q4QKopTKrix6Ftcn2",
          signer: false,
          writable: false,
        },
        {
          pubkey: "11111111111111111111111111111111",
          signer: false,
          writable: false,
        },
        {
          pubkey: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
          signer: false,
          writable: false,
        },
        {
          pubkey: "SysvarRent111111111111111111111111111111111",
          signer: false,
          writable: false,
        },
        {
          pubkey: "CiFhuzidkjaxprBVPAENEpoRJsGkcxXnv2SNLPktYy7B",
          signer: false,
          writable: false,
        },
        {
          pubkey: "BjaNzGdwRcFYeQGfuLYsc1BbaNRG1yxyWs1hZuGRT8J2",
          signer: false,
          writable: false,
        },
        {
          pubkey: "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL",
          signer: false,
          writable: false,
        },
        {
          pubkey: "AmK5g2XcyptVLCFESBCJqoSfwV3znGoVYQnqEnaAZKWn",
          signer: false,
          writable: false,
        },
      ],
      instructions: [
        {
          parsed: {
            info: {
              account: "6oTEszeAVQwvFgUkcitipR865qQUAy3UQ5ys5rfNDXC6",
              mint: "BtoorpGmtSydBtUfCaiHAEFPnE6Q4QKopTKrix6Ftcn2",
              rentSysvar: "SysvarRent111111111111111111111111111111111",
              source: "FR4xWcvhxA2dLTDda5cmD1zUxz9gnzrVhhLq4owcAzt3",
              systemProgram: "11111111111111111111111111111111",
              tokenProgram: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
              wallet: "FR4xWcvhxA2dLTDda5cmD1zUxz9gnzrVhhLq4owcAzt3",
            },
            type: "create",
          },
          program: "spl-associated-token-account",
          programId: "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL",
        },
        {
          accounts: [
            "FR4xWcvhxA2dLTDda5cmD1zUxz9gnzrVhhLq4owcAzt3",
            "6oTEszeAVQwvFgUkcitipR865qQUAy3UQ5ys5rfNDXC6",
            "HukHCJmGZLG6BEr8MjjacEoeJzjiMuwX4Y5Q5Yyvm1Lo",
            "3Z6T94rMaTKjfdQb9ShunvMJ6C9LqDqEkfKBBeGArpzp",
            "BjEdwXRGZh6NLk99P5utngc5Wed7UHYgxHBSQStq4o54",
            "6482e33zrerYfhKAjPR2ncMSrH2tbTy5LDjdhB5PXzxd",
            "BtoorpGmtSydBtUfCaiHAEFPnE6Q4QKopTKrix6Ftcn2",
            "CiFhuzidkjaxprBVPAENEpoRJsGkcxXnv2SNLPktYy7B",
            "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
            "11111111111111111111111111111111",
            "BjaNzGdwRcFYeQGfuLYsc1BbaNRG1yxyWs1hZuGRT8J2",
            "FR4xWcvhxA2dLTDda5cmD1zUxz9gnzrVhhLq4owcAzt3",
            "2DXWoqh6dCp8VFWwuPszWXcWAnegaEMyT4UVgRMJJzQn",
            "8pJyixptCqPPLSkT9qqjMmJjAELdP8YiGsL1ihNmSsaE",
          ],
          data: "jzDsaTSmGkw",
          programId: "AmK5g2XcyptVLCFESBCJqoSfwV3znGoVYQnqEnaAZKWn",
        },
      ],
      recentBlockhash: "784RVPH2bwcPFdAjA3ozdeYFTgWTkAQtD5q6zcsPikty",
    },
    signatures: [
      "496U5Ric72tCEwDVekapUVqCGrHEeSTpA9wsn88R65nT8hZbuEZS5sjgn5iT4mnmSKbSNcTf4Q7Bdu2hyjWcqaAD",
    ],
  },
};
export default saleTx;


================================================
FILE: src/lib/marketplaces/__fixtures__/magicEdenFailedTx.ts
================================================
import {ParsedConfirmedTransaction} from "@solana/web3.js";

const saleTx: ParsedConfirmedTransaction = {
  "blockTime": 1646744640,
  "meta": {
    "err": {"InstructionError": [0, {"Custom": 1}]},
    "fee": 5000,
    "innerInstructions": [{
      "index": 0,
      "instructions": [{
        "parsed": {
          "info": {
            "lamports": 2011440,
            "newAccount": "AXz5FXk9xuSj4dL5SCQTezPXL6rNZwqKyV8aWHTtf5s1",
            "owner": "M2mx93ekt1fmXSVkTrUL9xVFHkmME8HTUi5Cyc5aF7K",
            "source": "L9xDD9dUAcM8r5NHF6SJZRtd4FBpiDUJCbkKF2msWeL",
            "space": 161
          }, "type": "createAccount"
        }, "program": "system", "programId": "11111111111111111111111111111111"
      }, {
        "parsed": {
          "info": {
            "destination": "7NcXXsn5MBUi3nfaE8VMJeZEUFnzcc9btHCFTHBoyrzG",
            "lamports": 199000000000,
            "source": "L9xDD9dUAcM8r5NHF6SJZRtd4FBpiDUJCbkKF2msWeL"
          }, "type": "transfer"
        }, "program": "system", "programId": "11111111111111111111111111111111"
      }]
    }],
    "logMessages": ["Program M2mx93ekt1fmXSVkTrUL9xVFHkmME8HTUi5Cyc5aF7K invoke [1]", "Program log: Instruction: Buy", "Program 11111111111111111111111111111111 invoke [2]", "Program 11111111111111111111111111111111 success", "Program 11111111111111111111111111111111 invoke [2]", "Transfer: insufficient lamports 535541880, need 199000000000", "Program 11111111111111111111111111111111 failed: custom program error: 0x1", "Program M2mx93ekt1fmXSVkTrUL9xVFHkmME8HTUi5Cyc5aF7K consumed 31706 of 200000 compute units", "Program M2mx93ekt1fmXSVkTrUL9xVFHkmME8HTUi5Cyc5aF7K failed: custom program error: 0x1"],
    "postBalances": [537553320, 0, 100148868680, 0, 4679361921, 2039280, 0, 622546587905, 2234160, 122636106118, 183253627269, 21196708033, 7189216410, 1057098000, 1, 1461600, 5616720, 3654000, 953185920, 1009200, 898174080, 58542103680, 1141440],
    "postTokenBalances": [{
      "accountIndex": 5,
      "mint": "HrMZjUm31CANQdP61abasiMvYpEYc8dAtuDNxWmzZSkq",
      "owner": "1BWutmTvYPwDtmw9abTkS4Ssr8no61spGAvW1X6NDix",
      "uiTokenAmount": {"amount": "1", "decimals": 0, "uiAmount": 1.0, "uiAmountString": "1"}
    }],
    "preBalances": [537558320, 0, 100148868680, 0, 4679361921, 2039280, 0, 622546587905, 2234160, 122636106118, 183253627269, 21196708033, 7189216410, 1057098000, 1, 1461600, 5616720, 3654000, 953185920, 1009200, 898174080, 58542103680, 1141440],
    "preTokenBalances": [{
      "accountIndex": 5,
      "mint": "HrMZjUm31CANQdP61abasiMvYpEYc8dAtuDNxWmzZSkq",
      "owner": "1BWutmTvYPwDtmw9abTkS4Ssr8no61spGAvW1X6NDix",
      "uiTokenAmount": {"amount": "1", "decimals": 0, "uiAmount": 1.0, "uiAmountString": "1"}
    }],
    "rewards": [],
    "status": {"Err": {"InstructionError": [0, {"Custom": 1}]}}
  }, "slot": 124028515, "transaction": {
    "message": {
      "accountKeys": [{
        "pubkey": "L9xDD9dUAcM8r5NHF6SJZRtd4FBpiDUJCbkKF2msWeL",
        "signer": true,
        "writable": true
      }, {
        "pubkey": "7NcXXsn5MBUi3nfaE8VMJeZEUFnzcc9btHCFTHBoyrzG",
        "signer": false,
        "writable": true
      }, {
        "pubkey": "autMW8SgBkVYeBgqYiTuJZnkvDZMVU2MHJh9Jh7CSQ2",
        "signer": false,
        "writable": true
      }, {
        "pubkey": "AXz5FXk9xuSj4dL5SCQTezPXL6rNZwqKyV8aWHTtf5s1",
        "signer": false,
        "writable": true
      }, {
        "pubkey": "Dga1gJnASog3uDjjibVkqvbtfbvrj9Hz3v2uN1Vojaid",
        "signer": false,
        "writable": true
      }, {
        "pubkey": "91suNRSJkMbTtNj7U7oQUxQ4TEu9jHJEiFAY3RTU8BUx",
        "signer": false,
        "writable": true
      }, {
        "pubkey": "6i9pirs3gRj1XsGVks3SHsQcnoAES2mwFYmhKAkexgYw",
        "signer": false,
        "writable": true
      }, {
        "pubkey": "rFqFJ9g7TGBD8Ed7TPDnvGKZ5pWLPDyxLcvcH2eRCtt",
        "signer": false,
        "writable": true
      }, {
        "pubkey": "2mxszBFYzWnwUN3MsYf96ENtNXRFtxE66rVR71j2gTpi",
        "signer": false,
        "writable": true
      }, {
        "pubkey": "9BKWqDHfHZh9j39xakYVMdr6hXmCLHH5VfCpeq2idU9L",
        "signer": false,
        "writable": true
      }, {
        "pubkey": "9FYsKrNuEweb55Wa2jaj8wTKYDBvuCG3huhakEj96iN9",
        "signer": false,
        "writable": true
      }, {
        "pubkey": "HNGVuL5kqjDehw7KR63w9gxow32sX6xzRNgLb8GkbwCM",
        "signer": false,
        "writable": true
      }, {
        "pubkey": "7FzXBBPjzrNJbm9MrZKZcyvP3ojVeYPUG2XkBPVZvuBu",
        "signer": false,
        "writable": true
      }, {
        "pubkey": "DC2mkgwhy56w3viNtHDjJQmc7SGu2QX785bS4aexojwX",
        "signer": false,
        "writable": true
      }, {
        "pubkey": "11111111111111111111111111111111",
        "signer": false,
        "writable": false
      }, {
        "pubkey": "HrMZjUm31CANQdP61abasiMvYpEYc8dAtuDNxWmzZSkq",
        "signer": false,
        "writable": false
      }, {
        "pubkey": "57wdSxZi3tA2jfFKvjaZbbkFR5G9yj51QbuHgbsunCTt",
        "signer": false,
        "writable": false
      }, {
        "pubkey": "E8cU1WiRWjanGxmn96ewBgk9vPTcL6AEZ1t6F6fkgUWe",
        "signer": false,
        "writable": false
      }, {
        "pubkey": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
        "signer": false,
        "writable": false
      }, {
        "pubkey": "SysvarRent111111111111111111111111111111111",
        "signer": false,
        "writable": false
      }, {
        "pubkey": "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL",
        "signer": false,
        "writable": false
      }, {
        "pubkey": "1BWutmTvYPwDtmw9abTkS4Ssr8no61spGAvW1X6NDix",
        "signer": false,
        "writable": false
      }, {
        "pubkey": "M2mx93ekt1fmXSVkTrUL9xVFHkmME8HTUi5Cyc5aF7K",
        "signer": false,
        "writable": false
      }],
      "instructions": [{
        "accounts": ["L9xDD9dUAcM8r5NHF6SJZRtd4FBpiDUJCbkKF2msWeL", "11111111111111111111111111111111", "HrMZjUm31CANQdP61abasiMvYpEYc8dAtuDNxWmzZSkq", "57wdSxZi3tA2jfFKvjaZbbkFR5G9yj51QbuHgbsunCTt", "7NcXXsn5MBUi3nfaE8VMJeZEUFnzcc9btHCFTHBoyrzG", "autMW8SgBkVYeBgqYiTuJZnkvDZMVU2MHJh9Jh7CSQ2", "E8cU1WiRWjanGxmn96ewBgk9vPTcL6AEZ1t6F6fkgUWe", "AXz5FXk9xuSj4dL5SCQTezPXL6rNZwqKyV8aWHTtf5s1", "autMW8SgBkVYeBgqYiTuJZnkvDZMVU2MHJh9Jh7CSQ2", "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA", "11111111111111111111111111111111", "SysvarRent111111111111111111111111111111111"],
        "data": "3Jmjmsq2jyrch5iuumKthq9BpAtbcaJp3dQRuTsmCFqy3Bu",
        "programId": "M2mx93ekt1fmXSVkTrUL9xVFHkmME8HTUi5Cyc5aF7K"
      }, {
        "accounts": ["L9xDD9dUAcM8r5NHF6SJZRtd4FBpiDUJCbkKF2msWeL", "Dga1gJnASog3uDjjibVkqvbtfbvrj9Hz3v2uN1Vojaid", "11111111111111111111111111111111", "91suNRSJkMbTtNj7U7oQUxQ4TEu9jHJEiFAY3RTU8BUx", "HrMZjUm31CANQdP61abasiMvYpEYc8dAtuDNxWmzZSkq", "57wdSxZi3tA2jfFKvjaZbbkFR5G9yj51QbuHgbsunCTt", "7NcXXsn5MBUi3nfaE8VMJeZEUFnzcc9btHCFTHBoyrzG", "6i9pirs3gRj1XsGVks3SHsQcnoAES2mwFYmhKAkexgYw", "autMW8SgBkVYeBgqYiTuJZnkvDZMVU2MHJh9Jh7CSQ2", "E8cU1WiRWjanGxmn96ewBgk9vPTcL6AEZ1t6F6fkgUWe", "rFqFJ9g7TGBD8Ed7TPDnvGKZ5pWLPDyxLcvcH2eRCtt", "AXz5FXk9xuSj4dL5SCQTezPXL6rNZwqKyV8aWHTtf5s1", "autMW8SgBkVYeBgqYiTuJZnkvDZMVU2MHJh9Jh7CSQ2", "2mxszBFYzWnwUN3MsYf96ENtNXRFtxE66rVR71j2gTpi", "autMW8SgBkVYeBgqYiTuJZnkvDZMVU2MHJh9Jh7CSQ2", "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA", "11111111111111111111111111111111", "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL", "1BWutmTvYPwDtmw9abTkS4Ssr8no61spGAvW1X6NDix", "SysvarRent111111111111111111111111111111111", "9BKWqDHfHZh9j39xakYVMdr6hXmCLHH5VfCpeq2idU9L", "9FYsKrNuEweb55Wa2jaj8wTKYDBvuCG3huhakEj96iN9", "HNGVuL5kqjDehw7KR63w9gxow32sX6xzRNgLb8GkbwCM", "7FzXBBPjzrNJbm9MrZKZcyvP3ojVeYPUG2XkBPVZvuBu", "DC2mkgwhy56w3viNtHDjJQmc7SGu2QX785bS4aexojwX"],
        "data": "d6iteQtSVrfiCnAFBCZVgGJni4MkYHGWFMcA4f3DWT4LEbK7SgUwCTKy8",
        "programId": "M2mx93ekt1fmXSVkTrUL9xVFHkmME8HTUi5Cyc5aF7K"
      }],
      "recentBlockhash": "GkuTfjHCRufeew6yCoVbuEmTiNkY82X6R8dqSE5qiGgm"
    },
    "signatures": ["5D3kshpCeGwhxBBPRQXmD48XvENJKXSwR79v6ceZBRAS41d2JeqMv3d2Yy9aZ1LADwQdDiop4ErRihnfYudfRJBy"]
  }
}

export default saleTx;


================================================
FILE: src/lib/marketplaces/__fixtures__/magicEdenSaleFromBidTx.ts
================================================
import { ParsedConfirmedTransaction } from "@solana/web3.js";

const saleTx: ParsedConfirmedTransaction = {
  blockTime: 1640678496,
  meta: {
    err: null,
    fee: 5000,
    innerInstructions: [
      {
        index: 0,
        instructions: [
          {
            parsed: {
              info: {
                destination: "2NZukH2TXpcuZP4htiuT8CFxcaQSWzkkR6kepSWnZ24Q",
                lamports: 17000000,
                source: "2aAcGP4Ls74XKAkFXKfFfw7CaJpHrPWcz6EaNcptWHhe",
              },
              type: "transfer",
            },
            program: "system",
            programId: "11111111111111111111111111111111",
          },
          {
            parsed: {
              info: {
                destination: "4eQwMqAA4c2VUD51rqfAke7kqeFLAxcxSB67rtFjDyZA",
                lamports: 17000000,
                source: "2aAcGP4Ls74XKAkFXKfFfw7CaJpHrPWcz6EaNcptWHhe",
              },
              type: "transfer",
            },
            program: "system",
            programId: "11111111111111111111111111111111",
          },
          {
            parsed: {
              info: {
                destination: "Dz9kwoBVVzF11cHeKotQpA7t4aeCQsgRpVw4dg8zkntg",
                lamports: 17000000,
                source: "2aAcGP4Ls74XKAkFXKfFfw7CaJpHrPWcz6EaNcptWHhe",
              },
              type: "transfer",
            },
            program: "system",
            programId: "11111111111111111111111111111111",
          },
          {
            parsed: {
              info: {
                destination: "4xHEEswq2T2E5uNoa1uw34RNKzPerayBHxX3P4SaR7cD",
                lamports: 17000000,
                source: "2aAcGP4Ls74XKAkFXKfFfw7CaJpHrPWcz6EaNcptWHhe",
              },
              type: "transfer",
            },
            program: "system",
            programId: "11111111111111111111111111111111",
          },
          {
            parsed: {
              info: {
                destination: "33CJriD17bUScYW7eKFjM6BPfkFWPerHfdpvtw3a8JdN",
                lamports: 17000000,
                source: "2aAcGP4Ls74XKAkFXKfFfw7CaJpHrPWcz6EaNcptWHhe",
              },
              type: "transfer",
            },
            program: "system",
            programId: "11111111111111111111111111111111",
          },
          {
            parsed: {
              info: {
                destination: "HWZybKNqMa93EmHK2ESL2v1XShcnt4ma4nFf14497jNS",
                lamports: 17000000,
                source: "2aAcGP4Ls74XKAkFXKfFfw7CaJpHrPWcz6EaNcptWHhe",
              },
              type: "transfer",
            },
            program: "system",
            programId: "11111111111111111111111111111111",
          },
          {
            parsed: {
              info: {
                destination: "AJ3r8njrEnHnwmv2JmnXEYoy7EfsxWQq7UcnLUhjuVab",
                lamports: 748000000,
                source: "2aAcGP4Ls74XKAkFXKfFfw7CaJpHrPWcz6EaNcptWHhe",
              },
              type: "transfer",
            },
            program: "system",
            programId: "11111111111111111111111111111111",
          },
          {
            parsed: {
              info: {
                account: "GvFvwYnoZGejJptANFYEhW29qEhYjHK5V1i1sV3b9PU9",
                authority: "GUfCR9mK6azb9vcpsxgXyj7XRPAKJd4KMHTTVvtncGgp",
                authorityType: "accountOwner",
                newAuthority: "2fT7A7iKwDodPj5rm4u4tXRFny9JY1ttHhHGp1PsvsAn",
              },
              type: "setAuthority",
            },
            program: "spl-token",
            programId: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
          },
        ],
      },
    ],
    logMessages: [
      "Program MEisE1HzehtrDpAAT8PnLHjpSSkRYakotTuJRPjTpo8 invoke [1]",
      "Program 11111111111111111111111111111111 invoke [2]",
      "Program 11111111111111111111111111111111 success",
      "Program 11111111111111111111111111111111 invoke [2]",
      "Program 11111111111111111111111111111111 success",
      "Program 11111111111111111111111111111111 invoke [2]",
      "Program 11111111111111111111111111111111 success",
      "Program 11111111111111111111111111111111 invoke [2]",
      "Program 11111111111111111111111111111111 success",
      "Program 11111111111111111111111111111111 invoke [2]",
      "Program 11111111111111111111111111111111 success",
      "Program 11111111111111111111111111111111 invoke [2]",
      "Program 11111111111111111111111111111111 success",
      "Program 11111111111111111111111111111111 invoke [2]",
      "Program 11111111111111111111111111111111 success",
      "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]",
      "Program log: Instruction: SetAuthority",
      "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 2028 of 148416 compute units",
      "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success",
      "Program MEisE1HzehtrDpAAT8PnLHjpSSkRYakotTuJRPjTpo8 consumed 56397 of 200000 compute units",
      "Program MEisE1HzehtrDpAAT8PnLHjpSSkRYakotTuJRPjTpo8 success",
    ],
    postBalances: [
      3227874610, 179985000, 2039280, 0, 0, 0, 3318475293836, 338698861972,
      11263045161, 7408400000, 107000000, 7406350720, 136218400423, 1,
      1089991680, 5616720, 1141440,
    ],
    postTokenBalances: [
      {
        accountIndex: 2,
        mint: "3SxS8hpvZ6BfHXwaURJAhtxXWbwnkUGA7HPV3b7uLnjN",
        owner: "2fT7A7iKwDodPj5rm4u4tXRFny9JY1ttHhHGp1PsvsAn",
        uiTokenAmount: {
          amount: "1",
          decimals: 0,
          uiAmount: 1.0,
          uiAmountString: "1",
        },
      },
    ],
    preBalances: [
      2478431930, 178071000, 2039280, 1914000, 850000000, 1447680,
      3318458293836, 338681861972, 11246045161, 7391400000, 90000000,
      7389350720, 136218400423, 1, 1089991680, 5616720, 1141440,
    ],
    preTokenBalances: [
      {
        accountIndex: 2,
        mint: "3SxS8hpvZ6BfHXwaURJAhtxXWbwnkUGA7HPV3b7uLnjN",
        owner: "GUfCR9mK6azb9vcpsxgXyj7XRPAKJd4KMHTTVvtncGgp",
        uiTokenAmount: {
          amount: "1",
          decimals: 0,
          uiAmount: 1.0,
          uiAmountString: "1",
        },
      },
    ],
    rewards: [],
    status: { Ok: null },
  },
  slot: 113678983,
  transaction: {
    message: {
      accountKeys: [
        {
          pubkey: "AJ3r8njrEnHnwmv2JmnXEYoy7EfsxWQq7UcnLUhjuVab",
          signer: true,
          writable: true,
        },
        {
          pubkey: "2fT7A7iKwDodPj5rm4u4tXRFny9JY1ttHhHGp1PsvsAn",
          signer: false,
          writable: true,
        },
        {
          pubkey: "GvFvwYnoZGejJptANFYEhW29qEhYjHK5V1i1sV3b9PU9",
          signer: false,
          writable: true,
        },
        {
          pubkey: "3wbvVNnZaNDQRVqQetUt3pkpucmjM6Pa2JyR9Yy2GYzj",
          signer: false,
          writable: true,
        },
        {
          pubkey: "2aAcGP4Ls74XKAkFXKfFfw7CaJpHrPWcz6EaNcptWHhe",
          signer: false,
          writable: true,
        },
        {
          pubkey: "Hcot8D67Dod6B9D19FTeuuG8cuxjUzKEDWHUUcdZEENb",
          signer: false,
          writable: true,
        },
        {
          pubkey: "2NZukH2TXpcuZP4htiuT8CFxcaQSWzkkR6kepSWnZ24Q",
          signer: false,
          writable: true,
        },
        {
          pubkey: "4eQwMqAA4c2VUD51rqfAke7kqeFLAxcxSB67rtFjDyZA",
          signer: false,
          writable: true,
        },
        {
          pubkey: "Dz9kwoBVVzF11cHeKotQpA7t4aeCQsgRpVw4dg8zkntg",
          signer: false,
          writable: true,
        },
        {
          pubkey: "4xHEEswq2T2E5uNoa1uw34RNKzPerayBHxX3P4SaR7cD",
          signer: false,
          writable: true,
        },
        {
          pubkey: "33CJriD17bUScYW7eKFjM6BPfkFWPerHfdpvtw3a8JdN",
          signer: false,
          writable: true,
        },
        {
          pubkey: "HWZybKNqMa93EmHK2ESL2v1XShcnt4ma4nFf14497jNS",
          signer: false,
          writable: true,
        },
        {
          pubkey: "GUfCR9mK6azb9vcpsxgXyj7XRPAKJd4KMHTTVvtncGgp",
          signer: false,
          writable: false,
        },
        {
          pubkey: "11111111111111111111111111111111",
          signer: false,
          writable: false,
        },
        {
          pubkey: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
          signer: false,
          writable: false,
        },
        {
          pubkey: "3F4Zwfm9Gz2UB1cB4sWsqHetzokkXFfw6VfbL15UCKcu",
          signer: false,
          writable: false,
        },
        {
          pubkey: "MEisE1HzehtrDpAAT8PnLHjpSSkRYakotTuJRPjTpo8",
          signer: false,
          writable: false,
        },
      ],
      instructions: [
        {
          accounts: [
            "AJ3r8njrEnHnwmv2JmnXEYoy7EfsxWQq7UcnLUhjuVab",
            "2fT7A7iKwDodPj5rm4u4tXRFny9JY1ttHhHGp1PsvsAn",
            "GvFvwYnoZGejJptANFYEhW29qEhYjHK5V1i1sV3b9PU9",
            "3wbvVNnZaNDQRVqQetUt3pkpucmjM6Pa2JyR9Yy2GYzj",
            "2aAcGP4Ls74XKAkFXKfFfw7CaJpHrPWcz6EaNcptWHhe",
            "Hcot8D67Dod6B9D19FTeuuG8cuxjUzKEDWHUUcdZEENb",
            "GUfCR9mK6azb9vcpsxgXyj7XRPAKJd4KMHTTVvtncGgp",
            "11111111111111111111111111111111",
            "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
            "2NZukH2TXpcuZP4htiuT8CFxcaQSWzkkR6kepSWnZ24Q",
            "3F4Zwfm9Gz2UB1cB4sWsqHetzokkXFfw6VfbL15UCKcu",
            "4eQwMqAA4c2VUD51rqfAke7kqeFLAxcxSB67rtFjDyZA",
            "Dz9kwoBVVzF11cHeKotQpA7t4aeCQsgRpVw4dg8zkntg",
            "4xHEEswq2T2E5uNoa1uw34RNKzPerayBHxX3P4SaR7cD",
            "33CJriD17bUScYW7eKFjM6BPfkFWPerHfdpvtw3a8JdN",
            "HWZybKNqMa93EmHK2ESL2v1XShcnt4ma4nFf14497jNS",
          ],
          data: "RJ7YoBrhBjrzChhwrWvuLj",
          programId: "MEisE1HzehtrDpAAT8PnLHjpSSkRYakotTuJRPjTpo8",
        },
      ],
      recentBlockhash: "4dvuRRQzcFYkGS9TqVPth94nK1p1n2HD9d9g3pKTsV3c",
    },
    signatures: [
      "1cSgCBgot6w4KevVvsZc2PiST16BsEh9KAvmnbsSC9xXvput4SXLoq5pneQfczQEBw3jjcdmupG7Gp6MjG5MLzy",
    ],
  },
};

export default saleTx;


================================================
FILE: src/lib/marketplaces/__fixtures__/magicEdenSaleTx.ts
================================================
import { ParsedConfirmedTransaction } from "@solana/web3.js";

const saleTx: ParsedConfirmedTransaction = {
  blockTime: 1635141315,
  meta: {
    err: null,
    fee: 5000,
    innerInstructions: [
      {
        index: 0,
        instructions: [
          {
            parsed: {
              info: {
                destination: "2NZukH2TXpcuZP4htiuT8CFxcaQSWzkkR6kepSWnZ24Q",
                lamports: 74400000,
                source: "U7ZkJtaAwvBHt9Tw5BK8sdp2wLrEe7p1g3kFxB9WJCu",
              },
              type: "transfer",
            },
            program: "system",
            programId: "11111111111111111111111111111111",
          },
          {
            parsed: {
              info: {
                destination: "4eQwMqAA4c2VUD51rqfAke7kqeFLAxcxSB67rtFjDyZA",
                lamports: 74400000,
                source: "U7ZkJtaAwvBHt9Tw5BK8sdp2wLrEe7p1g3kFxB9WJCu",
              },
              type: "transfer",
            },
            program: "system",
            programId: "11111111111111111111111111111111",
          },
          {
            parsed: {
              info: {
                destination: "Dz9kwoBVVzF11cHeKotQpA7t4aeCQsgRpVw4dg8zkntg",
                lamports: 74400000,
                source: "U7ZkJtaAwvBHt9Tw5BK8sdp2wLrEe7p1g3kFxB9WJCu",
              },
              type: "transfer",
            },
            program: "system",
            programId: "11111111111111111111111111111111",
          },
          {
            parsed: {
              info: {
                destination: "4xHEEswq2T2E5uNoa1uw34RNKzPerayBHxX3P4SaR7cD",
                lamports: 74400000,
                source: "U7ZkJtaAwvBHt9Tw5BK8sdp2wLrEe7p1g3kFxB9WJCu",
              },
              type: "transfer",
            },
            program: "system",
            programId: "11111111111111111111111111111111",
          },
          {
            parsed: {
              info: {
                destination: "33CJriD17bUScYW7eKFjM6BPfkFWPerHfdpvtw3a8JdN",
                lamports: 74400000,
                source: "U7ZkJtaAwvBHt9Tw5BK8sdp2wLrEe7p1g3kFxB9WJCu",
              },
              type: "transfer",
            },
            program: "system",
            programId: "11111111111111111111111111111111",
          },
          {
            parsed: {
              info: {
                destination: "HWZybKNqMa93EmHK2ESL2v1XShcnt4ma4nFf14497jNS",
                lamports: 74400000,
                source: "U7ZkJtaAwvBHt9Tw5BK8sdp2wLrEe7p1g3kFxB9WJCu",
              },
              type: "transfer",
            },
            program: "system",
            programId: "11111111111111111111111111111111",
          },
          {
            parsed: {
              info: {
                destination: "HihC794BdNCetkizxdFjVD2KiKWirGYbm2ojvRYXQd6H",
                lamports: 3273600000,
                source: "U7ZkJtaAwvBHt9Tw5BK8sdp2wLrEe7p1g3kFxB9WJCu",
              },
              type: "transfer",
            },
            program: "system",
            programId: "11111111111111111111111111111111",
          },
          {
            parsed: {
              info: {
                account: "9m8xj63juQLQvSmWybzxxmShbnsf8tH29kkfRRKDBz2c",
                authority: "GUfCR9mK6azb9vcpsxgXyj7XRPAKJd4KMHTTVvtncGgp",
                authorityType: "accountOwner",
                newAuthority: "U7ZkJtaAwvBHt9Tw5BK8sdp2wLrEe7p1g3kFxB9WJCu",
              },
              type: "setAuthority",
            },
            program: "spl-token",
            programId: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
          },
        ],
      },
    ],
    logMessages: [
      "Program MEisE1HzehtrDpAAT8PnLHjpSSkRYakotTuJRPjTpo8 invoke [1]",
      "Program 11111111111111111111111111111111 invoke [2]",
      "Program 11111111111111111111111111111111 success",
      "Program 11111111111111111111111111111111 invoke [2]",
      "Program 11111111111111111111111111111111 success",
      "Program 11111111111111111111111111111111 invoke [2]",
      "Program 11111111111111111111111111111111 success",
      "Program 11111111111111111111111111111111 invoke [2]",
      "Program 11111111111111111111111111111111 success",
      "Program 11111111111111111111111111111111 invoke [2]",
      "Program 11111111111111111111111111111111 success",
      "Program 11111111111111111111111111111111 invoke [2]",
      "Program 11111111111111111111111111111111 success",
      "Program 11111111111111111111111111111111 invoke [2]",
      "Program 11111111111111111111111111111111 success",
      "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]",
      "Program log: Instruction: SetAuthority",
      "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 2028 of 156898 compute units",
      "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success",
      "Program MEisE1HzehtrDpAAT8PnLHjpSSkRYakotTuJRPjTpo8 consumed 47267 of 200000 compute units",
      "Program MEisE1HzehtrDpAAT8PnLHjpSSkRYakotTuJRPjTpo8 success",
    ],
    postBalances: [
      7687945720, 2039280, 3277943593, 0, 7767438857012, 344467027205,
      8688759800, 5636600000, 497000000, 5634555720, 118399366401, 1,
      1089991680, 5616720, 1141440,
    ],
    postTokenBalances: [
      {
        accountIndex: 1,
        mint: "8pwYVy61QiSTJGPc8yYfkVPLBBr8r17WkpUFRhNK6cjK",
        uiTokenAmount: {
          amount: "1",
          decimals: 0,
          uiAmount: 1.0,
          uiAmountString: "1",
        },
      },
    ],
    preBalances: [
      11407950720, 2039280, 2895913, 1447680, 7767364457012, 344392627205,
      8614359800, 5562200000, 422600000, 5560155720, 118399366401, 1,
      1089991680, 5616720, 1141440,
    ],
    preTokenBalances: [
      {
        accountIndex: 1,
        mint: "8pwYVy61QiSTJGPc8yYfkVPLBBr8r17WkpUFRhNK6cjK",
        uiTokenAmount: {
          amount: "1",
          decimals: 0,
          uiAmount: 1.0,
          uiAmountString: "1",
        },
      },
    ],
    rewards: [],
    status: { Ok: null },
  },
  slot: 103384246,
  transaction: {
    message: {
      accountKeys: [
        {
          pubkey: "U7ZkJtaAwvBHt9Tw5BK8sdp2wLrEe7p1g3kFxB9WJCu",
          signer: true,
          writable: true,
        },
        {
          pubkey: "9m8xj63juQLQvSmWybzxxmShbnsf8tH29kkfRRKDBz2c",
          signer: false,
          writable: true,
        },
        {
          pubkey: "HihC794BdNCetkizxdFjVD2KiKWirGYbm2ojvRYXQd6H",
          signer: false,
          writable: true,
        },
        {
          pubkey: "DKoBZuFVfeVycjeb76M3nabuDx3zewTBbDr6mdCsUU1M",
          signer: false,
          writable: true,
        },
        {
          pubkey: "2NZukH2TXpcuZP4htiuT8CFxcaQSWzkkR6kepSWnZ24Q",
          signer: false,
          writable: true,
        },
        {
          pubkey: "4eQwMqAA4c2VUD51rqfAke7kqeFLAxcxSB67rtFjDyZA",
          signer: false,
          writable: true,
        },
        {
          pubkey: "Dz9kwoBVVzF11cHeKotQpA7t4aeCQsgRpVw4dg8zkntg",
          signer: false,
          writable: true,
        },
        {
          pubkey: "4xHEEswq2T2E5uNoa1uw34RNKzPerayBHxX3P4SaR7cD",
          signer: false,
          writable: true,
        },
        {
          pubkey: "33CJriD17bUScYW7eKFjM6BPfkFWPerHfdpvtw3a8JdN",
          signer: false,
          writable: true,
        },
        {
          pubkey: "HWZybKNqMa93EmHK2ESL2v1XShcnt4ma4nFf14497jNS",
          signer: false,
          writable: true,
        },
        {
          pubkey: "GUfCR9mK6azb9vcpsxgXyj7XRPAKJd4KMHTTVvtncGgp",
          signer: false,
          writable: false,
        },
        {
          pubkey: "11111111111111111111111111111111",
          signer: false,
          writable: false,
        },
        {
          pubkey: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
          signer: false,
          writable: false,
        },
        {
          pubkey: "AJUb5pxdi4Bh4AeL6mHHqTjU5Up4x114Y9nyu7pkRMBc",
          signer: false,
          writable: false,
        },
        {
          pubkey: "MEisE1HzehtrDpAAT8PnLHjpSSkRYakotTuJRPjTpo8",
          signer: false,
          writable: false,
        },
      ],
      instructions: [
        {
          accounts: [
            "U7ZkJtaAwvBHt9Tw5BK8sdp2wLrEe7p1g3kFxB9WJCu",
            "9m8xj63juQLQvSmWybzxxmShbnsf8tH29kkfRRKDBz2c",
            "HihC794BdNCetkizxdFjVD2KiKWirGYbm2ojvRYXQd6H",
            "DKoBZuFVfeVycjeb76M3nabuDx3zewTBbDr6mdCsUU1M",
            "GUfCR9mK6azb9vcpsxgXyj7XRPAKJd4KMHTTVvtncGgp",
            "11111111111111111111111111111111",
            "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
            "2NZukH2TXpcuZP4htiuT8CFxcaQSWzkkR6kepSWnZ24Q",
            "AJUb5pxdi4Bh4AeL6mHHqTjU5Up4x114Y9nyu7pkRMBc",
            "4eQwMqAA4c2VUD51rqfAke7kqeFLAxcxSB67rtFjDyZA",
            "Dz9kwoBVVzF11cHeKotQpA7t4aeCQsgRpVw4dg8zkntg",
            "4xHEEswq2T2E5uNoa1uw34RNKzPerayBHxX3P4SaR7cD",
            "33CJriD17bUScYW7eKFjM6BPfkFWPerHfdpvtw3a8JdN",
            "HWZybKNqMa93EmHK2ESL2v1XShcnt4ma4nFf14497jNS",
          ],
          data: "8s5SjQsS25V",
          programId: "MEisE1HzehtrDpAAT8PnLHjpSSkRYakotTuJRPjTpo8",
        },
      ],
      recentBlockhash: "5heDujnNgj2hPUXa9iqRMxynQX5Z2tzXEkPn9wuagWSd",
    },
    signatures: [
      "626EgwuS6dbUKrkZujQCFjHiRsz92ALR5gNAEg2eMpZzEo88Cci6HifpDFcvgYR8j88nXUq1nRUA7UDRdvB7Y6WD",
    ],
  },
};

export default saleTx;


================================================
FILE: src/lib/marketplaces/__fixtures__/magicEdenSaleTxV2.ts
================================================
import { ParsedConfirmedTransaction } from "@solana/web3.js";

const saleTx: ParsedConfirmedTransaction = {
  blockTime: 1643310376,
  meta: {
    err: null,
    fee: 5000,
    innerInstructions: [
      {
        index: 0,
        instructions: [
          {
            parsed: {
              info: {
                destination: "4p8JyqkVHZHaNxuoXHKCf4G7HPCVQVAzkcrk3qWFYwbd",
                lamports: 800000000,
                source: "87QLcvBCVmfcKo8sVZfPEbRS8PzT9tsgmHuHxRvvrChv",
              },
              type: "transfer",
            },
            program: "system",
            programId: "11111111111111111111111111111111",
          },
        ],
      },
      {
        index: 1,
        instructions: [
          {
            parsed: {
              info: {
                lamports: 2011440,
                newAccount: "CgbcZSgtCR3sRCXowNPxb7nY2qovJtx2gWHFFy4VxG7z",
                owner: "M2mx93ekt1fmXSVkTrUL9xVFHkmME8HTUi5Cyc5aF7K",
                source: "87QLcvBCVmfcKo8sVZfPEbRS8PzT9tsgmHuHxRvvrChv",
                space: 161,
              },
              type: "createAccount",
            },
            program: "system",
            programId: "11111111111111111111111111111111",
          },
        ],
      },
      {
        index: 2,
        instructions: [
          {
            parsed: {
              info: {
                destination: "RRUMF9KYPcvNSmnicNMAFKx5wDYix3wjNa6bA7R6xqA",
                lamports: 4000000,
                source: "4p8JyqkVHZHaNxuoXHKCf4G7HPCVQVAzkcrk3qWFYwbd",
              },
              type: "transfer",
            },
            program: "system",
            programId: "11111111111111111111111111111111",
          },
          {
            parsed: {
              info: {
                destination: "Ao65TQeY33TvP8fF36cy8ykgoU8Mbamks4J5oCA8eEWj",
                lamports: 21600000,
                source: "4p8JyqkVHZHaNxuoXHKCf4G7HPCVQVAzkcrk3qWFYwbd",
              },
              type: "transfer",
            },
            program: "system",
            programId: "11111111111111111111111111111111",
          },
          {
            parsed: {
              info: {
                destination: "BEmqvnMVMDJWw4xN6q7jfnHNbfbgZmnmSQZFc2AfJtqP",
                lamports: 12400000,
                source: "4p8JyqkVHZHaNxuoXHKCf4G7HPCVQVAzkcrk3qWFYwbd",
              },
              type: "transfer",
            },
            program: "system",
            programId: "11111111111111111111111111111111",
          },
          {
            parsed: {
              info: {
                destination: "3m5x6yLrRsDHQp81jKDBNH1xfy89Wjgc5uiZSzrmdMcy",
                lamports: 2000000,
                source: "4p8JyqkVHZHaNxuoXHKCf4G7HPCVQVAzkcrk3qWFYwbd",
              },
              type: "transfer",
            },
            program: "system",
            programId: "11111111111111111111111111111111",
          },
          {
            parsed: {
              info: {
                destination: "rFqFJ9g7TGBD8Ed7TPDnvGKZ5pWLPDyxLcvcH2eRCtt",
                lamports: 16000000,
                source: "4p8JyqkVHZHaNxuoXHKCf4G7HPCVQVAzkcrk3qWFYwbd",
              },
              type: "transfer",
            },
            program: "system",
            programId: "11111111111111111111111111111111",
          },
          {
            parsed: {
              info: {
                destination: "FVftjwhGyfzcGfTGK8SU8E55E3dCod7rQc2fymaR9vTe",
                lamports: 744000000,
                source: "4p8JyqkVHZHaNxuoXHKCf4G7HPCVQVAzkcrk3qWFYwbd",
              },
              type: "transfer",
            },
            program: "system",
            programId: "11111111111111111111111111111111",
          },
          {
            parsed: {
              info: {
                account: "BdhynZZn5qNNygMeqfZzwQAqdpcvsoPawVdECnQLorCA",
                mint: "5ygnoy84v2bqMw8iFLD4k3axQfF8wgKQtG6maTtgwojG",
                rentSysvar: "SysvarRent111111111111111111111111111111111",
                source: "87QLcvBCVmfcKo8sVZfPEbRS8PzT9tsgmHuHxRvvrChv",
                systemProgram: "11111111111111111111111111111111",
                tokenProgram: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
                wallet: "87QLcvBCVmfcKo8sVZfPEbRS8PzT9tsgmHuHxRvvrChv",
              },
              type: "create",
            },
            program: "spl-associated-token-account",
            programId: "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL",
          },
          {
            parsed: {
              info: {
                destination: "BdhynZZn5qNNygMeqfZzwQAqdpcvsoPawVdECnQLorCA",
                lamports: 2039280,
                source: "87QLcvBCVmfcKo8sVZfPEbRS8PzT9tsgmHuHxRvvrChv",
              },
              type: "transfer",
            },
            program: "system",
            programId: "11111111111111111111111111111111",
          },
          {
            parsed: {
              info: {
                account: "BdhynZZn5qNNygMeqfZzwQAqdpcvsoPawVdECnQLorCA",
                space: 165,
              },
              type: "allocate",
            },
            program: "system",
            programId: "11111111111111111111111111111111",
          },
          {
            parsed: {
              info: {
                account: "BdhynZZn5qNNygMeqfZzwQAqdpcvsoPawVdECnQLorCA",
                owner: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
              },
              type: "assign",
            },
            program: "system",
            programId: "11111111111111111111111111111111",
          },
          {
            parsed: {
              info: {
                account: "BdhynZZn5qNNygMeqfZzwQAqdpcvsoPawVdECnQLorCA",
                mint: "5ygnoy84v2bqMw8iFLD4k3axQfF8wgKQtG6maTtgwojG",
                owner: "87QLcvBCVmfcKo8sVZfPEbRS8PzT9tsgmHuHxRvvrChv",
                rentSysvar: "SysvarRent111111111111111111111111111111111",
              },
              type: "initializeAccount",
            },
            program: "spl-token",
            programId: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
          },
          {
            parsed: {
              info: {
                amount: "1",
                authority: "1BWutmTvYPwDtmw9abTkS4Ssr8no61spGAvW1X6NDix",
                destination: "BdhynZZn5qNNygMeqfZzwQAqdpcvsoPawVdECnQLorCA",
                source: "3qdhuUJTFCb47hztH5PDGF9HTjqEAKDAF4dTHKVaehAL",
              },
              type: "transfer",
            },
            program: "spl-token",
            programId: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
          },
        ],
      },
    ],
    logMessages: [
      "Program M2mx93ekt1fmXSVkTrUL9xVFHkmME8HTUi5Cyc5aF7K invoke [1]",
      "Program log: Instruction: Deposit",
      "Program 11111111111111111111111111111111 invoke [2]",
      "Program 11111111111111111111111111111111 success",
      "Program M2mx93ekt1fmXSVkTrUL9xVFHkmME8HTUi5Cyc5aF7K consumed 10184 of 200000 compute units",
      "Program M2mx93ekt1fmXSVkTrUL9xVFHkmME8HTUi5Cyc5aF7K success",
      "Program M2mx93ekt1fmXSVkTrUL9xVFHkmME8HTUi5Cyc5aF7K invoke [1]",
      "Program log: Instruction: Buy",
      "Program 11111111111111111111111111111111 invoke [2]",
      "Program 11111111111111111111111111111111 success",
      "Program M2mx93ekt1fmXSVkTrUL9xVFHkmME8HTUi5Cyc5aF7K consumed 27510 of 200000 compute units",
      "Program M2mx93ekt1fmXSVkTrUL9xVFHkmME8HTUi5Cyc5aF7K success",
      "Program M2mx93ekt1fmXSVkTrUL9xVFHkmME8HTUi5Cyc5aF7K invoke [1]",
      "Program log: Instruction: ExecuteSale",
      "Program 11111111111111111111111111111111 invoke [2]",
      "Program 11111111111111111111111111111111 success",
      "Program 11111111111111111111111111111111 invoke [2]",
      "Program 11111111111111111111111111111111 success",
      "Program 11111111111111111111111111111111 invoke [2]",
      "Program 11111111111111111111111111111111 success",
      "Program 11111111111111111111111111111111 invoke [2]",
      "Program 11111111111111111111111111111111 success",
      "Program 11111111111111111111111111111111 invoke [2]",
      "Program 11111111111111111111111111111111 success",
      "Program 11111111111111111111111111111111 invoke [2]",
      "Program 11111111111111111111111111111111 success",
      "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL invoke [2]",
      "Program log: Transfer 2039280 lamports to the associated token account",
      "Program 11111111111111111111111111111111 invoke [3]",
      "Program 11111111111111111111111111111111 success",
      "Program log: Allocate space for the associated token account",
      "Program 11111111111111111111111111111111 invoke [3]",
      "Program 11111111111111111111111111111111 success",
      "Program log: Assign the associated token account to the SPL Token program",
      "Program 11111111111111111111111111111111 invoke [3]",
      "Program 11111111111111111111111111111111 success",
      "Program log: Initialize the associated token account",
      "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [3]",
      "Program log: Instruction: InitializeAccount",
      "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 3297 of 125376 compute units",
      "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success",
      "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL consumed 24372 of 145802 compute units",
      "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL success",
      "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]",
      "Program log: Instruction: Transfer",
      "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 2712 of 116265 compute units",
      "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success",
      "Program M2mx93ekt1fmXSVkTrUL9xVFHkmME8HTUi5Cyc5aF7K consumed 89981 of 200000 compute units",
      "Program M2mx93ekt1fmXSVkTrUL9xVFHkmME8HTUi5Cyc5aF7K success",
    ],
    postBalances: [
      8279202731, 0, 7162913680, 0, 3147126730, 2039280, 2039280, 89956212927,
      0, 4906800, 212378229132, 721447087, 3601185904, 24081502475, 1, 3654000,
      1461600, 5616720, 953185920, 1009200, 898174080, 0, 1141440,
    ],
    postTokenBalances: [
      {
        accountIndex: 5,
        mint: "5ygnoy84v2bqMw8iFLD4k3axQfF8wgKQtG6maTtgwojG",
        owner: "FVftjwhGyfzcGfTGK8SU8E55E3dCod7rQc2fymaR9vTe",
        uiTokenAmount: {
          amount: "0",
          decimals: 0,
          uiAmount: null,
          uiAmountString: "0",
        },
      },
      {
        accountIndex: 6,
        mint: "5ygnoy84v2bqMw8iFLD4k3axQfF8wgKQtG6maTtgwojG",
        owner: "87QLcvBCVmfcKo8sVZfPEbRS8PzT9tsgmHuHxRvvrChv",
        uiTokenAmount: {
          amount: "1",
          decimals: 0,
          uiAmount: 1.0,
          uiAmountString: "1",
        },
      },
    ],
    preBalances: [
      9081247011, 0, 7162913680, 0, 2400892570, 2039280, 0, 89940212927,
      2234160, 4906800, 212374229132, 699847087, 3588785904, 24079502475, 1,
      3654000, 1461600, 5616720, 953185920, 1009200, 898174080, 0, 1141440,
    ],
    preTokenBalances: [
      {
        accountIndex: 5,
        mint: "5ygnoy84v2bqMw8iFLD4k3axQfF8wgKQtG6maTtgwojG",
        owner: "FVftjwhGyfzcGfTGK8SU8E55E3dCod7rQc2fymaR9vTe",
        uiTokenAmount: {
          amount: "1",
          decimals: 0,
          uiAmount: 1.0,
          uiAmountString: "1",
        },
      },
    ],
    rewards: [],
    status: { Ok: null },
  },
  slot: 118115018,
  transaction: {
    message: {
      accountKeys: [
        {
          pubkey: "87QLcvBCVmfcKo8sVZfPEbRS8PzT9tsgmHuHxRvvrChv",
          signer: true,
          writable: true,
        },
        {
          pubkey: "4p8JyqkVHZHaNxuoXHKCf4G7HPCVQVAzkcrk3qWFYwbd",
          signer: false,
          writable: true,
        },
        {
          pubkey: "autMW8SgBkVYeBgqYiTuJZnkvDZMVU2MHJh9Jh7CSQ2",
          signer: false,
          writable: true,
        },
        {
          pubkey: "CgbcZSgtCR3sRCXowNPxb7nY2qovJtx2gWHFFy4VxG7z",
          signer: false,
          writable: true,
        },
        {
          pubkey: "FVftjwhGyfzcGfTGK8SU8E55E3dCod7rQc2fymaR9vTe",
          signer: false,
          writable: true,
        },
        {
          pubkey: "3qdhuUJTFCb47hztH5PDGF9HTjqEAKDAF4dTHKVaehAL",
          signer: false,
          writable: true,
        },
        {
          pubkey: "BdhynZZn5qNNygMeqfZzwQAqdpcvsoPawVdECnQLorCA",
          signer: false,
          writable: true,
        },
        {
          pubkey: "rFqFJ9g7TGBD8Ed7TPDnvGKZ5pWLPDyxLcvcH2eRCtt",
          signer: false,
          writable: true,
        },
        {
          pubkey: "9kDcWHT7brm8bX9UxH2JAbUHWrcsHaDRZwfGaXF63Nfy",
          signer: false,
          writable: true,
        },
        {
          pubkey: "9sfttw8dc1j7RsSgiFdDyt1a1XyRT3BPgFqYCXysER5W",
          signer: false,
          writable: true,
        },
        {
          pubkey: "RRUMF9KYPcvNSmnicNMAFKx5wDYix3wjNa6bA7R6xqA",
          signer: false,
          writable: true,
        },
        {
          pubkey: "Ao65TQeY33TvP8fF36cy8ykgoU8Mbamks4J5oCA8eEWj",
          signer: false,
          writable: true,
        },
        {
          pubkey: "BEmqvnMVMDJWw4xN6q7jfnHNbfbgZmnmSQZFc2AfJtqP",
          signer: false,
          writable: true,
        },
        {
          pubkey: "3m5x6yLrRsDHQp81jKDBNH1xfy89Wjgc5uiZSzrmdMcy",
          signer: false,
          writable: true,
        },
        {
          pubkey: "11111111111111111111111111111111",
          signer: false,
          writable: false,
        },
        {
          pubkey: "E8cU1WiRWjanGxmn96ewBgk9vPTcL6AEZ1t6F6fkgUWe",
          signer: false,
          writable: false,
        },
        {
          pubkey: "5ygnoy84v2bqMw8iFLD4k3axQfF8wgKQtG6maTtgwojG",
          signer: false,
          writable: false,
        },
        {
          pubkey: "Bt1LrjGhVBhCvntA1Gaji6Lxcq75P314iX2UjjLsKcU9",
          signer: false,
          writable: false,
        },
        {
          pubkey: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
          signer: false,
          writable: false,
        },
        {
          pubkey: "SysvarRent111111111111111111111111111111111",
          signer: false,
          writable: false,
        },
        {
          pubkey: "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL",
          signer: false,
          writable: false,
        },
        {
          pubkey: "1BWutmTvYPwDtmw9abTkS4Ssr8no61spGAvW1X6NDix",
          signer: false,
          writable: false,
        },
        {
          pubkey: "M2mx93ekt1fmXSVkTrUL9xVFHkmME8HTUi5Cyc5aF7K",
          signer: false,
          writable: false,
        },
      ],
      instructions: [
        {
          accounts: [
            "87QLcvBCVmfcKo8sVZfPEbRS8PzT9tsgmHuHxRvvrChv",
            "11111111111111111111111111111111",
            "4p8JyqkVHZHaNxuoXHKCf4G7HPCVQVAzkcrk3qWFYwbd",
            "autMW8SgBkVYeBgqYiTuJZnkvDZMVU2MHJh9Jh7CSQ2",
            "E8cU1WiRWjanGxmn96ewBgk9vPTcL6AEZ1t6F6fkgUWe",
            "11111111111111111111111111111111",
          ],
          data: "3GyWrkssW12wSfxfrSBu6tNB",
          programId: "M2mx93ekt1fmXSVkTrUL9xVFHkmME8HTUi5Cyc5aF7K",
        },
        {
          accounts: [
            "87QLcvBCVmfcKo8sVZfPEbRS8PzT9tsgmHuHxRvvrChv",
            "11111111111111111111111111111111",
            "5ygnoy84v2bqMw8iFLD4k3axQfF8wgKQtG6maTtgwojG",
            "Bt1LrjGhVBhCvntA1Gaji6Lxcq75P314iX2UjjLsKcU9",
            "4p8JyqkVHZHaNxuoXHKCf4G7HPCVQVAzkcrk3qWFYwbd",
            "autMW8SgBkVYeBgqYiTuJZnkvDZMVU2MHJh9Jh7CSQ2",
            "E8cU1WiRWjanGxmn96ewBgk9vPTcL6AEZ1t6F6fkgUWe",
            "CgbcZSgtCR3sRCXowNPxb7nY2qovJtx2gWHFFy4VxG7z",
            "autMW8SgBkVYeBgqYiTuJZnkvDZMVU2MHJh9Jh7CSQ2",
            "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
            "11111111111111111111111111111111",
            "SysvarRent111111111111111111111111111111111",
          ],
          data: "3Jmjmsq2jyrcnQkVCncXtJwWS92N2wHC7taajq9YRxu9oAX",
          programId: "M2mx93ekt1fmXSVkTrUL9xVFHkmME8HTUi5Cyc5aF7K",
        },
        {
          accounts: [
            "87QLcvBCVmfcKo8sVZfPEbRS8PzT9tsgmHuHxRvvrChv",
            "FVftjwhGyfzcGfTGK8SU8E55E3dCod7rQc2fymaR9vTe",
            "11111111111111111111111111111111",
            "3qdhuUJTFCb47hztH5PDGF9HTjqEAKDAF4dTHKVaehAL",
            "5ygnoy84v2bqMw8iFLD4k3axQfF8wgKQtG6maTtgwojG",
            "Bt1LrjGhVBhCvntA1Gaji6Lxcq75P314iX2UjjLsKcU9",
            "4p8JyqkVHZHaNxuoXHKCf4G7HPCVQVAzkcrk3qWFYwbd",
            "BdhynZZn5qNNygMeqfZzwQAqdpcvsoPawVdECnQLorCA",
            "autMW8SgBkVYeBgqYiTuJZnkvDZMVU2MHJh9Jh7CSQ2",
            "E8cU1WiRWjanGxmn96ewBgk9vPTcL6AEZ1t6F6fkgUWe",
            "rFqFJ9g7TGBD8Ed7TPDnvGKZ5pWLPDyxLcvcH2eRCtt",
            "CgbcZSgtCR3sRCXowNPxb7nY2qovJtx2gWHFFy4VxG7z",
            "autMW8SgBkVYeBgqYiTuJZnkvDZMVU2MHJh9Jh7CSQ2",
            "9kDcWHT7brm8bX9UxH2JAbUHWrcsHaDRZwfGaXF63Nfy",
            "autMW8SgBkVYeBgqYiTuJZnkvDZMVU2MHJh9Jh7CSQ2",
            "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
            "11111111111111111111111111111111",
            "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL",
            "1BWutmTvYPwDtmw9abTkS4Ssr8no61spGAvW1X6NDix",
            "SysvarRent111111111111111111111111111111111",
            "9sfttw8dc1j7RsSgiFdDyt1a1XyRT3BPgFqYCXysER5W",
            "RRUMF9KYPcvNSmnicNMAFKx5wDYix3wjNa6bA7R6xqA",
            "Ao65TQeY33TvP8fF36cy8ykgoU8Mbamks4J5oCA8eEWj",
            "BEmqvnMVMDJWw4xN6q7jfnHNbfbgZmnmSQZFc2AfJtqP",
            "3m5x6yLrRsDHQp81jKDBNH1xfy89Wjgc5uiZSzrmdMcy",
          ],
          data: "d6iteQtSVrfiCnAHGCJ6bGCdwTFPQJgyXsHyJ5txQNo2VSyZcK7PRfFFm",
          programId: "M2mx93ekt1fmXSVkTrUL9xVFHkmME8HTUi5Cyc5aF7K",
        },
      ],
      recentBlockhash: "CR6v1SWMqsnBGkheEEhF64Tvc6TYabYdnRVPm8Kn6mL1",
    },
    signatures: [
      "J9kVpP5br8Q9wKNh2YPEZTDQtMLnLuCLEkRUgHvhhKYciVYq6XwF4imjrsNVhMY8Pw3wGkvY3AKW3qxtBisBp5v",
    ],
  },
};

export default saleTx;


================================================
FILE: src/lib/marketplaces/__fixtures__/openSeaBidTx.ts
================================================
import {ParsedConfirmedTransaction} from "@solana/web3.js";

const tx: ParsedConfirmedTransaction = {
  "blockTime": 1650079198, "meta": {
    "err": null,
    "fee": 10000,
    "innerInstructions": [{
      "index": 0,
      "instructions": [{
        "parsed": {
          "info": {
            "destination": "9QveoLZ4SA1JdFdmuLRE7cynvrpbuZq2a5vvvy4ry5VY",
            "lamports": 49000000,
            "source": "8x7qhXu8osWcJrQWmczNGN7HS8scnGJhdt4PXxGWu3S1"
          }, "type": "transfer"
        }, "program": "system", "programId": {"_bn": "00"}
      }]
    }, {
      "index": 1,
      "instructions": [{
        "parsed": {
          "info": {
            "destination": "Aiyx4xsfL3NkhVZVp4xWZmdP3dpxAUSmtFt1vLYBFrWp",
            "lamports": 897840,
            "source": "5xyoD5hnWDBLsW6rjW2TBmqiDQsbod6Uaw15dRhNrDzn"
          }, "type": "transfer"
        }, "program": "system", "programId": {"_bn": "00"}
      }, {
        "parsed": {
          "info": {
            "account": "Aiyx4xsfL3NkhVZVp4xWZmdP3dpxAUSmtFt1vLYBFrWp",
            "space": 1
          }, "type": "allocate"
        }, "program": "system", "programId": {"_bn": "00"}
      }, {
        "parsed": {
          "info": {
            "account": "Aiyx4xsfL3NkhVZVp4xWZmdP3dpxAUSmtFt1vLYBFrWp",
            "owner": "hausS13jsjafwWwGqZTUQRmWyvyxn9EQpqMwV1PBBmk"
          }, "type": "assign"
        }, "program": "system", "programId": {"_bn": "00"}
      }]
    }],
    "logMessages": ["Program hausS13jsjafwWwGqZTUQRmWyvyxn9EQpqMwV1PBBmk invoke [1]", "Program log: Instruction: Deposit", "Program 11111111111111111111111111111111 invoke [2]", "Program 11111111111111111111111111111111 success", "Program hausS13jsjafwWwGqZTUQRmWyvyxn9EQpqMwV1PBBmk consumed 20144 of 200000 compute units", "Program hausS13jsjafwWwGqZTUQRmWyvyxn9EQpqMwV1PBBmk success", "Program hausS13jsjafwWwGqZTUQRmWyvyxn9EQpqMwV1PBBmk invoke [1]", "Program log: Instruction: Buy", "Program log: Err(Custom(6013)), Ok(254), 254", "Program log: Transfer 897840 lamports to the new account", "Program 11111111111111111111111111111111 invoke [2]", "Program 11111111111111111111111111111111 success", "Program log: Allocate space for the account Aiyx4xsfL3NkhVZVp4xWZmdP3dpxAUSmtFt1vLYBFrWp", "Program 11111111111111111111111111111111 invoke [2]", "Program 11111111111111111111111111111111 success", "Program log: Assign the account to the owning program", "Program 11111111111111111111111111111111 invoke [2]", "Program 11111111111111111111111111111111 success", "Program log: Completed assignation!", "Program hausS13jsjafwWwGqZTUQRmWyvyxn9EQpqMwV1PBBmk consumed 56074 of 200000 compute units", "Program hausS13jsjafwWwGqZTUQRmWyvyxn9EQpqMwV1PBBmk success", "Program 11111111111111111111111111111111 invoke [1]", "Program 11111111111111111111111111111111 success"],
    "postBalances": [34800744, 10489990000, 355090000, 102695402162, 897840, 152395037831, 4085520, 953185920, 1, 1009200, 2039280, 5616720, 1141440],
    "postTokenBalances": [{
      "accountIndex": 10,
      "mint": "GGe6kTQRbFscLJ7ANeAVw6wNABMUnr1bVMT7fNn1aVxv",
      "owner": "6vuH8FisDk3HEYd4oJN7jPdcEaJXF9kQDWxTiTgqGX49",
      "uiTokenAmount": {"amount": "1", "decimals": 0, "uiAmount": 1, "uiAmountString": "1"}
    }],
    "preBalances": [84708584, 10489990000, 306090000, 102695402162, 0, 152395037831, 4085520, 953185920, 1, 1009200, 2039280, 5616720, 1141440],
    "preTokenBalances": [{
      "accountIndex": 10,
      "mint": "GGe6kTQRbFscLJ7ANeAVw6wNABMUnr1bVMT7fNn1aVxv",
      "owner": "6vuH8FisDk3HEYd4oJN7jPdcEaJXF9kQDWxTiTgqGX49",
      "uiTokenAmount": {"amount": "1", "decimals": 0, "uiAmount": 1, "uiAmountString": "1"}
    }],
    "rewards": [],
    "status": {"Ok": null}
  }, "slot": 129938837, "transaction": {
    "message": {
      "accountKeys": [{
        "pubkey": {"_bn": "76207c90c0971f18f0e64cd685ec9fa39f4be7474f08208824ac8bedc0aed202"},
        "signer": true,
        "writable": true
      }, {
        "pubkey": {"_bn": "0c14ca16dab25717d8fe41d9ec2617cd3f5d7c986f19d87898707564f3c516a7"},
        "signer": true,
        "writable": true
      }, {
        "pubkey": {"_bn": "7cfe84a8831eca82cfe41c9dadbdf237dd03da16d8f2d06d595c44e029c3be37"},
        "signer": false,
        "writable": true
      }, {
        "pubkey": {"_bn": "49c5e99524f07898034804274203258b3165710477bd5762d3d2d93ad0a4c3bf"},
        "signer": false,
        "writable": true
      }, {
        "pubkey": {"_bn": "907a6372423fbc0d005a18e2ff6bdb81f1b1b5f31b5ab7dfbfbfce66534a7b15"},
        "signer": false,
        "writable": true
      }, {
        "pubkey": {"_bn": "069b8857feab8184fb687f634618c035dac439dc1aeb3b5598a0f00000000001"},
        "signer": false,
        "writable": false
      }, {
        "pubkey": {"_bn": "2989d6a9ff6b2a168b81bed69f59efcb8172a8c663a80112cce020c86145700b"},
        "signer": false,
        "writable": false
      }, {
        "pubkey": {"_bn": "06ddf6e1d765a193d9cbe146ceeb79ac1cb485ed5f5b37913a8cf5857eff00a9"},
        "signer": false,
        "writable": false
      }, {
        "pubkey": {"_bn": "00"},
        "signer": false,
        "writable": false
      }, {
        "pubkey": {"_bn": "06a7d517192c5c51218cc94c3d4af17f58daee089ba1fd44e3dbd98a00000000"},
        "signer": false,
        "writable": false
      }, {
        "pubkey": {"_bn": "ed501c2bf970de1b601ff82e39383f1e6475d6c9361df6df0747441b9f08cb10"},
        "signer": false,
        "writable": false
      }, {
        "pubkey": {"_bn": "6e60c995754a2f14ec5ecd6c9a3788a86c2cd729bcf73b2d3f3cb062d1a7496c"},
        "signer": false,
        "writable": false
      }, {
        "pubkey": {"_bn": "0a6593863cba461564eae41373721546eb0151c9308276bbd4ad2a1c3a42107b"},
        "signer": false,
        "writable": false
      }],
      "instructions": [{
        "accounts": [{"_bn": "76207c90c0971f18f0e64cd685ec9fa39f4be7474f08208824ac8bedc0aed202"}, {"_bn": "76207c90c0971f18f0e64cd685ec9fa39f4be7474f08208824ac8bedc0aed202"}, {"_bn": "0c14ca16dab25717d8fe41d9ec2617cd3f5d7c986f19d87898707564f3c516a7"}, {"_bn": "7cfe84a8831eca82cfe41c9dadbdf237dd03da16d8f2d06d595c44e029c3be37"}, {"_bn": "069b8857feab8184fb687f634618c035dac439dc1aeb3b5598a0f00000000001"}, {"_bn": "0c14ca16dab25717d8fe41d9ec2617cd3f5d7c986f19d87898707564f3c516a7"}, {"_bn": "2989d6a9ff6b2a168b81bed69f59efcb8172a8c663a80112cce020c86145700b"}, {"_bn": "49c5e99524f07898034804274203258b3165710477bd5762d3d2d93ad0a4c3bf"}, {"_bn": "06ddf6e1d765a193d9cbe146ceeb79ac1cb485ed5f5b37913a8cf5857eff00a9"}, {"_bn": "00"}, {"_bn": "06a7d517192c5c51218cc94c3d4af17f58daee089ba1fd44e3dbd98a00000000"}],
        "data": "3GyWrkssW12wRP8osktezmE7",
        "programId": {"_bn": "0a6593863cba461564eae41373721546eb0151c9308276bbd4ad2a1c3a42107b"}
      }, {
        "accounts": [{"_bn": "76207c90c0971f18f0e64cd685ec9fa39f4be7474f08208824ac8bedc0aed202"}, {"_bn": "76207c90c0971f18f0e64cd685ec9fa39f4be7474f08208824ac8bedc0aed202"}, {"_bn": "00"}, {"_bn": "069b8857feab8184fb687f634618c035dac439dc1aeb3b5598a0f00000000001"}, {"_bn": "ed501c2bf970de1b601ff82e39383f1e6475d6c9361df6df0747441b9f08cb10"}, {"_bn": "6e60c995754a2f14ec5ecd6c9a3788a86c2cd729bcf73b2d3f3cb062d1a7496c"}, {"_bn": "7cfe84a8831eca82cfe41c9dadbdf237dd03da16d8f2d06d595c44e029c3be37"}, {"_bn": "0c14ca16dab25717d8fe41d9ec2617cd3f5d7c986f19d87898707564f3c516a7"}, {"_bn": "2989d6a9ff6b2a168b81bed69f59efcb8172a8c663a80112cce020c86145700b"}, {"_bn": "49c5e99524f07898034804274203258b3165710477bd5762d3d2d93ad0a4c3bf"}, {"_bn": "907a6372423fbc0d005a18e2ff6bdb81f1b1b5f31b5ab7dfbfbfce66534a7b15"}, {"_bn": "06ddf6e1d765a193d9cbe146ceeb79ac1cb485ed5f5b37913a8cf5857eff00a9"}, {"_bn": "00"}, {"_bn": "06a7d517192c5c51218cc94c3d4af17f58daee089ba1fd44e3dbd98a00000000"}],
        "data": "48CS5rNxJb9H9ojfQ1885A7vY8x2wmHZZadu",
        "programId": {"_bn": "0a6593863cba461564eae41373721546eb0151c9308276bbd4ad2a1c3a42107b"}
      }, {
        "parsed": {
          "info": {
            "destination": "5xyoD5hnWDBLsW6rjW2TBmqiDQsbod6Uaw15dRhNrDzn",
            "lamports": 897840,
            "source": "8x7qhXu8osWcJrQWmczNGN7HS8scnGJhdt4PXxGWu3S1"
          }, "type": "transfer"
        }, "program": "system", "programId": {"_bn": "00"}
      }],
      "recentBlockhash": "BbydjUpsFYLFdy2jfvq8HjwdQaVWpZga4WzdfA7jrWy5"
    },
    "signatures": ["3pL9V7rUs9i9oriNDEAYjsEn4x53JXcgurED4JuQ5C53biw1LQNqvo5abBx7fa5LrkPbA2otVkiDRPaEZYe1XtFS", "2yxLqEUUXGdtEnSnULpRLDxDXejcXCZnQziLAAF1s7AxPqFsRr8jgBamqXhoGoE52z1APcsB5YNRLWLF9MECT8U7"]
  }
}

export default tx;


================================================
FILE: src/lib/marketplaces/__fixtures__/openSeaSale2Tx.ts
================================================
import { ParsedConfirmedTransaction } from "@solana/web3.js";

const saleTx: ParsedConfirmedTransaction = {
  blockTime: 1650205927,
  meta: {
    err: null,
    fee: 10000,
    innerInstructions: [
      {
        index: 0,
        instructions: [
          {
            parsed: {
              info: {
                amount: "1",
                delegate: "HS2eL9WJbh7pA4i4veK3YDwhGLRjY3uKryvG1NbHRprj",
                owner: "GHpmaYCQpsHdia7qJLzSANwCXjQGhBaqrjcJkQF1WxhA",
                source: "824CvcF9V7tNJM4hRMJkn4ZvKTH5LNriRaz3vti8y9sw",
              },
              type: "approve",
            },
            program: "spl-token",
            programId: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
          },
          {
            parsed: {
              info: {
                destination: "Gihc1SqWvPFvLtNuMoYzZmS5xt9PJhAENc41fzeJjhx3",
                lamports: 897840,
                source: "5xyoD5hnWDBLsW6rjW2TBmqiDQsbod6Uaw15dRhNrDzn",
              },
              type: "transfer",
            },
            program: "system",
            programId: "11111111111111111111111111111111",
          },
          {
            parsed: {
              info: {
                account: "Gihc1SqWvPFvLtNuMoYzZmS5xt9PJhAENc41fzeJjhx3",
                space: 1,
              },
              type: "allocate",
            },
            program: "system",
            programId: "11111111111111111111111111111111",
          },
          {
            parsed: {
              info: {
                account: "Gihc1SqWvPFvLtNuMoYzZmS5xt9PJhAENc41fzeJjhx3",
                owner: "hausS13jsjafwWwGqZTUQRmWyvyxn9EQpqMwV1PBBmk",
              },
              type: "assign",
            },
            program: "system",
            programId: "11111111111111111111111111111111",
          },
        ],
      },
      {
        index: 2,
        instructions: [
          {
            parsed: {
              info: {
                destination: "pAHAKoTJsAAe2ZcvTZUxoYzuygVAFAmbYmJYdWT886r",
                lamports: 1795680,
                source: "5xyoD5hnWDBLsW6rjW2TBmqiDQsbod6Uaw15dRhNrDzn",
              },
              type: "transfer",
            },
            program: "system",
            programId: "11111111111111111111111111111111",
          },
        ],
      },
      {
        index: 5,
        instructions: [
          {
            parsed: {
              info: {
                destination: "FP1Wcq6ptVY6Q2JkTgL2SyZdwpRFUZGw8HEBvE9Zyo7P",
                lamports: 2039280,
                source: "GHpmaYCQpsHdia7qJLzSANwCXjQGhBaqrjcJkQF1WxhA",
              },
              type: "transfer",
            },
            program: "system",
            programId: "11111111111111111111111111111111",
          },
          {
            parsed: {
              info: {
                account: "FP1Wcq6ptVY6Q2JkTgL2SyZdwpRFUZGw8HEBvE9Zyo7P",
                space: 165,
              },
              type: "allocate",
            },
            program: "system",
            programId: "11111111111111111111111111111111",
          },
          {
            parsed: {
              info: {
                account: "FP1Wcq6ptVY6Q2JkTgL2SyZdwpRFUZGw8HEBvE9Zyo7P",
                owner: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
              },
              type: "assign",
            },
            program: "system",
            programId: "11111111111111111111111111111111",
          },
          {
            parsed: {
              info: {
                account: "FP1Wcq6ptVY6Q2JkTgL2SyZdwpRFUZGw8HEBvE9Zyo7P",
                mint: "CiRHyMF2zUdfqJ5x6ixQnDiPJw4CcWWGmdqS2YQiFd88",
                owner: "C4YZMGs9KfffEqoD6s4oB8r7ipvhJsaGCagKTi2ixN5C",
                rentSysvar: "SysvarRent111111111111111111111111111111111",
              },
              type: "initializeAccount",
            },
            program: "spl-token",
            programId: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
          },
        ],
      },
      {
        index: 6,
        instructions: [
          {
            parsed: {
              info: {
                destination: "HPWFCze26yt86yu5V56w8dRSRNvsggJ9bNKwC9qfjBz",
                lamports: 17000000,
                source: "5xwPyXkfmJdmNhdAhsCxBiWdGLABtbuyw9MRAF5b1Z16",
              },
              type: "transfer",
            },
            program: "system",
            programId: "11111111111111111111111111111111",
          },
          {
            parsed: {
              info: {
                destination: "2Tbc5LX7NSb32jiHMQfLra2vxppM11acfpjQ4VUV6De3",
                lamports: 16500000,
                source: "5xwPyXkfmJdmNhdAhsCxBiWdGLABtbuyw9MRAF5b1Z16",
              },
              type: "transfer",
            },
            program: "system",
            programId: "11111111111111111111111111111111",
          },
          {
            parsed: {
              info: {
                destination: "3wxiFnooogeur15QFihkEWbJpbr56xSC6xZjBxUw3BVq",
                lamports: 16500000,
                source: "5xwPyXkfmJdmNhdAhsCxBiWdGLABtbuyw9MRAF5b1Z16",
              },
              type: "transfer",
            },
            program: "system",
            programId: "11111111111111111111111111111111",
          },
          {
            parsed: {
              info: {
                destination: "8mcjXbJ8j4VryYFNpcBCFS37Au8zVYU53WTVaruJWcKt",
                lamports: 25000000,
                source: "5xwPyXkfmJdmNhdAhsCxBiWdGLABtbuyw9MRAF5b1Z16",
              },
              type: "transfer",
            },
            program: "system",
            programId: "11111111111111111111111111111111",
          },
          {
            parsed: {
              info: {
                destination: "GHpmaYCQpsHdia7qJLzSANwCXjQGhBaqrjcJkQF1WxhA",
                lamports: 925000000,
                source: "5xwPyXkfmJdmNhdAhsCxBiWdGLABtbuyw9MRAF5b1Z16",
              },
              type: "transfer",
            },
            program: "system",
            programId: "11111111111111111111111111111111",
          },
          {
            parsed: {
              info: {
                amount: "1",
                authority: "HS2eL9WJbh7pA4i4veK3YDwhGLRjY3uKryvG1NbHRprj",
                destination: "FP1Wcq6ptVY6Q2JkTgL2SyZdwpRFUZGw8HEBvE9Zyo7P",
                source: "824CvcF9V7tNJM4hRMJkn4ZvKTH5LNriRaz3vti8y9sw",
              },
              type: "transfer",
            },
            program: "spl-token",
            programId: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
          },
        ],
      },
    ],
    logMessages: [
      "Program hausS13jsjafwWwGqZTUQRmWyvyxn9EQpqMwV1PBBmk invoke [1]",
      "Program log: Instruction: Sell",
      "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]",
      "Program log: Instruction: Approve",
      "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 2050 of 165822 compute units",
      "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success",
      "Program log: Transfer 897840 lamports to the new account",
      "Program 11111111111111111111111111111111 invoke [2]",
      "Program 11111111111111111111111111111111 success",
      "Program log: Allocate space for the account Gihc1SqWvPFvLtNuMoYzZmS5xt9PJhAENc41fzeJjhx3",
      "Program 11111111111111111111111111111111 invoke [2]",
      "Program 11111111111111111111111111111111 success",
      "Program log: Assign the account to the owning program",
      "Program 11111111111111111111111111111111 invoke [2]",
      "Program 11111111111111111111111111111111 success",
      "Program log: Completed assignation!",
      "Program hausS13jsjafwWwGqZTUQRmWyvyxn9EQpqMwV1PBBmk consumed 60439 of 200000 compute units",
      "Program hausS13jsjafwWwGqZTUQRmWyvyxn9EQpqMwV1PBBmk success",
      "Program 11111111111111111111111111111111 invoke [1]",
      "Program 11111111111111111111111111111111 success",
      "Program hausS13jsjafwWwGqZTUQRmWyvyxn9EQpqMwV1PBBmk invoke [1]",
      "Program log: Instruction: WithdrawFromFee",
      "Program 11111111111111111111111111111111 invoke [2]",
      "Program 11111111111111111111111111111111 success",
      "Program hausS13jsjafwWwGqZTUQRmWyvyxn9EQpqMwV1PBBmk consumed 13348 of 200000 compute units",
      "Program hausS13jsjafwWwGqZTUQRmWyvyxn9EQpqMwV1PBBmk success",
      "Program 11111111111111111111111111111111 invoke [1]",
      "Program 11111111111111111111111111111111 success",
      "Program 11111111111111111111111111111111 invoke [1]",
      "Program 11111111111111111111111111111111 success",
      "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL invoke [1]",
      "Program log: Transfer 2039280 lamports to the associated token account",
      "Program 11111111111111111111111111111111 invoke [2]",
      "Program 11111111111111111111111111111111 success",
      "Program log: Allocate space for the associated token account",
      "Program 11111111111111111111111111111111 invoke [2]",
      "Program 11111111111111111111111111111111 success",
      "Program log: Assign the associated token account to the SPL Token program",
      "Program 11111111111111111111111111111111 invoke [2]",
      "Program 11111111111111111111111111111111 success",
      "Program log: Initialize the associated token account",
      "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]",
      "Program log: Instruction: InitializeAccount",
      "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 3297 of 179469 compute units",
      "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success",
      "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL consumed 24509 of 200000 compute units",
      "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL success",
      "Program hausS13jsjafwWwGqZTUQRmWyvyxn9EQpqMwV1PBBmk invoke [1]",
      "Program log: Instruction: ExecuteSale",
      "Program log: Err(Custom(6013)), Ok(253), 253",
      "Program 11111111111111111111111111111111 invoke [2]",
      "Program 11111111111111111111111111111111 success",
      "Program 11111111111111111111111111111111 invoke [2]",
      "Program 11111111111111111111111111111111 success",
      "Program 11111111111111111111111111111111 invoke [2]",
      "Program 11111111111111111111111111111111 success",
      "Program 11111111111111111111111111111111 invoke [2]",
      "Program 11111111111111111111111111111111 success",
      "Program 11111111111111111111111111111111 invoke [2]",
      "Program 11111111111111111111111111111111 success",
      "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]",
      "Program log: Instruction: Transfer",
      "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 2712 of 123845 compute units",
      "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success",
      "Program hausS13jsjafwWwGqZTUQRmWyvyxn9EQpqMwV1PBBmk consumed 82007 of 200000 compute units",
      "Program hausS13jsjafwWwGqZTUQRmWyvyxn9EQpqMwV1PBBmk success",
    ],
    postBalances: [
      1044053447, 10489990000, 2039280, 4085520, 102754659602, 0, 0, 426941640,
      2039280, 0, 489304360448, 0, 4572720, 3543981044, 166821478461, 931289370,
      5616720, 953185920, 1, 0, 1009200, 1461600, 152395037831, 898174080,
      1141440,
    ],
    postTokenBalances: [
      {
        accountIndex: 2,
        mint: "CiRHyMF2zUdfqJ5x6ixQnDiPJw4CcWWGmdqS2YQiFd88",
        owner: "GHpmaYCQpsHdia7qJLzSANwCXjQGhBaqrjcJkQF1WxhA",
        uiTokenAmount: {
          amount: "0",
          decimals: 0,
          uiAmount: null,
          uiAmountString: "0",
        },
      },
      {
        accountIndex: 8,
        mint: "CiRHyMF2zUdfqJ5x6ixQnDiPJw4CcWWGmdqS2YQiFd88",
        owner: "C4YZMGs9KfffEqoD6s4oB8r7ipvhJsaGCagKTi2ixN5C",
        uiTokenAmount: {
          amount: "1",
          decimals: 0,
          uiAmount: 1,
          uiAmountString: "1",
        },
      },
    ],
    preBalances: [
      121102727, 10489990000, 2039280, 4085520, 102754659602, 0, 0, 426043800,
      0, 1000000000, 489279360448, 897840, 4572720, 3526981044, 166804978461,
      914789370, 5616720, 953185920, 1, 0, 1009200, 1461600, 152395037831,
      898174080, 1141440,
    ],
    preTokenBalances: [
      {
        accountIndex: 2,
        mint: "CiRHyMF2zUdfqJ5x6ixQnDiPJw4CcWWGmdqS2YQiFd88",
        owner: "GHpmaYCQpsHdia7qJLzSANwCXjQGhBaqrjcJkQF1WxhA",
        uiTokenAmount: {
          amount: "1",
          decimals: 0,
          uiAmount: 1,
          uiAmountString: "1",
        },
      },
    ],
    rewards: [],
    status: { Ok: null },
  },
  slot: 130155306,
  transaction: {
    message: {
      accountKeys: [
        {
          pubkey: "GHpmaYCQpsHdia7qJLzSANwCXjQGhBaqrjcJkQF1WxhA",
          signer: true,
          writable: true,
        },
        {
          pubkey: "pAHAKoTJsAAe2ZcvTZUxoYzuygVAFAmbYmJYdWT886r",
          signer: true,
          writable: true,
        },
        {
          pubkey: "824CvcF9V7tNJM4hRMJkn4ZvKTH5LNriRaz3vti8y9sw",
          signer: false,
          writable: true,
        },
        {
          pubkey: "3o9d13qUvEuuauhFrVom1vuCzgNsJifeaBYDPquaT73Y",
          signer: false,
          writable: true,
        },
        {
          pubkey: "5xyoD5hnWDBLsW6rjW2TBmqiDQsbod6Uaw15dRhNrDzn",
          signer: false,
          writable: true,
        },
        {
          pubkey: "Gihc1SqWvPFvLtNuMoYzZmS5xt9PJhAENc41fzeJjhx3",
          signer: false,
          writable: true,
        },
        {
          pubkey: "4JR3h5EnSg2teCjNLUQBUf4oXFEkZMwQCGBqpvGgfTt5",
          signer: false,
          writable: true,
        },
        {
          pubkey: "C4YZMGs9KfffEqoD6s4oB8r7ipvhJsaGCagKTi2ixN5C",
          signer: false,
          writable: true,
        },
        {
          pubkey: "FP1Wcq6ptVY6Q2JkTgL2SyZdwpRFUZGw8HEBvE9Zyo7P",
          signer: false,
          writable: true,
        },
        {
          pubkey: "5xwPyXkfmJdmNhdAhsCxBiWdGLABtbuyw9MRAF5b1Z16",
          signer: false,
          writable: true,
        },
        {
          pubkey: "8mcjXbJ8j4VryYFNpcBCFS37Au8zVYU53WTVaruJWcKt",
          signer: false,
          writable: true,
        },
        {
          pubkey: "5ssHxeeehmY5y3C8RZeB5YmxXFC5cgNwtxhBhxW7BnC3",
          signer: false,
          writable: true,
        },
        {
          pubkey: "86V3AnzroujF3SF6jSzzN5BJxiJ2BVh86x3p6uRYcg1k",
          signer: false,
          writable: true,
        },
        {
          pubkey: "HPWFCze26yt86yu5V56w8dRSRNvsggJ9bNKwC9qfjBz",
          signer: false,
          writable: true,
        },
        {
          pubkey: "2Tbc5LX7NSb32jiHMQfLra2vxppM11acfpjQ4VUV6De3",
          signer: false,
          writable: true,
        },
        {
          pubkey: "3wxiFnooogeur15QFihkEWbJpbr56xSC6xZjBxUw3BVq",
          signer: false,
          writable: true,
        },
        {
          pubkey: "EBDvjxNibXpXz3euMqcmLMwf5gWcFJKD88jxsZ16ttkg",
          signer: false,
          writable: false,
        },
        {
          pubkey: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
          signer: false,
          writable: false,
        },
        {
          pubkey: "11111111111111111111111111111111",
          signer: false,
          writable: false,
        },
        {
          pubkey: "HS2eL9WJbh7pA4i4veK3YDwhGLRjY3uKryvG1NbHRprj",
          signer: false,
          writable: false,
        },
        {
          pubkey: "SysvarRent111111111111111111111111111111111",
          signer: false,
          writable: false,
        },
        {
          pubkey: "CiRHyMF2zUdfqJ5x6ixQnDiPJw4CcWWGmdqS2YQiFd88",
          signer: false,
          writable: false,
        },
        {
          pubkey: "So11111111111111111111111111111111111111112",
          signer: false,
          writable: false,
        },
        {
          pubkey: "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL",
          signer: false,
          writable: false,
        },
        {
          pubkey: "hausS13jsjafwWwGqZTUQRmWyvyxn9EQpqMwV1PBBmk",
          signer: false,
          writable: false,
        },
      ],
      instructions: [
        {
          accounts: [
            "GHpmaYCQpsHdia7qJLzSANwCXjQGhBaqrjcJkQF1WxhA",
            "824CvcF9V7tNJM4hRMJkn4ZvKTH5LNriRaz3vti8y9sw",
            "EBDvjxNibXpXz3euMqcmLMwf5gWcFJKD88jxsZ16ttkg",
            "pAHAKoTJsAAe2ZcvTZUxoYzuygVAFAmbYmJYdWT886r",
            "3o9d13qUvEuuauhFrVom1vuCzgNsJifeaBYDPquaT73Y",
            "5xyoD5hnWDBLsW6rjW2TBmqiDQsbod6Uaw15dRhNrDzn",
            "Gihc1SqWvPFvLtNuMoYzZmS5xt9PJhAENc41fzeJjhx3",
            "4JR3h5EnSg2teCjNLUQBUf4oXFEkZMwQCGBqpvGgfTt5",
            "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
            "11111111111111111111111111111111",
            "HS2eL9WJbh7pA4i4veK3YDwhGLRjY3uKryvG1NbHRprj",
            "SysvarRent111111111111111111111111111111111",
          ],
          data: "81r6u24fHZhKyc6M2WCR5XYgv31RuV6rV1Wdd",
          programId: "hausS13jsjafwWwGqZTUQRmWyvyxn9EQpqMwV1PBBmk",
        },
        {
          parsed: {
            info: {
              destination: "5xyoD5hnWDBLsW6rjW2TBmqiDQsbod6Uaw15dRhNrDzn",
              lamports: 897840,
              source: "GHpmaYCQpsHdia7qJLzSANwCXjQGhBaqrjcJkQF1WxhA",
            },
            type: "transfer",
          },
          program: "system",
          programId: "11111111111111111111111111111111",
        },
        {
          accounts: [
            "pAHAKoTJsAAe2ZcvTZUxoYzuygVAFAmbYmJYdWT886r",
            "pAHAKoTJsAAe2ZcvTZUxoYzuygVAFAmbYmJYdWT886r",
            "5xyoD5hnWDBLsW6rjW2TBmqiDQsbod6Uaw15dRhNrDzn",
            "3o9d13qUvEuuauhFrVom1vuCzgNsJifeaBYDPquaT73Y",
            "11111111111111111111111111111111",
          ],
          data: "PCrWfhudhPULPQhY2paGG7",
          programId: "hausS13jsjafwWwGqZTUQRmWyvyxn9EQpqMwV1PBBmk",
        },
        {
          parsed: {
            info: {
              destination: "C4YZMGs9KfffEqoD6s4oB8r7ipvhJsaGCagKTi2ixN5C",
              lamports: 897840,
              source: "pAHAKoTJsAAe2ZcvTZUxoYzuygVAFAmbYmJYdWT886r",
            },
            type: "transfer",
          },
          program: "system",
          programId: "11111111111111111111111111111111",
        },
        {
          parsed: {
            info: {
              destination: "GHpmaYCQpsHdia7qJLzSANwCXjQGhBaqrjcJkQF1WxhA",
              lamports: 897840,
              source: "pAHAKoTJsAAe2ZcvTZUxoYzuygVAFAmbYmJYdWT886r",
            },
            type: "transfer",
          },
          program: "system",
          programId: "11111111111111111111111111111111",
        },
        {
          parsed: {
            info: {
              account: "FP1Wcq6ptVY6Q2JkTgL2SyZdwpRFUZGw8HEBvE9Zyo7P",
              mint: "CiRHyMF2zUdfqJ5x6ixQnDiPJw4CcWWGmdqS2YQiFd88",
              rentSysvar: "SysvarRent111111111111111111111111111111111",
              source: "GHpmaYCQpsHdia7qJLzSANwCXjQGhBaqrjcJkQF1WxhA",
              systemProgram: "11111111111111111111111111111111",
              tokenProgram: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
              wallet: "C4YZMGs9KfffEqoD6s4oB8r7ipvhJsaGCagKTi2ixN5C",
            },
            type: "create",
          },
          program: "spl-associated-token-account",
          programId: "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL",
        },
        {
          accounts: [
            "C4YZMGs9KfffEqoD6s4oB8r7ipvhJsaGCagKTi2ixN5C",
            "GHpmaYCQpsHdia7qJLzSANwCXjQGhBaqrjcJkQF1WxhA",
            "824CvcF9V7tNJM4hRMJkn4ZvKTH5LNriRaz3vti8y9sw",
            "CiRHyMF2zUdfqJ5x6ixQnDiPJw4CcWWGmdqS2YQiFd88",
            "EBDvjxNibXpXz3euMqcmLMwf5gWcFJKD88jxsZ16ttkg",
            "So11111111111111111111111111111111111111112",
            "5xwPyXkfmJdmNhdAhsCxBiWdGLABtbuyw9MRAF5b1Z16",
            "GHpmaYCQpsHdia7qJLzSANwCXjQGhBaqrjcJkQF1WxhA",
            "FP1Wcq6ptVY6Q2JkTgL2SyZdwpRFUZGw8HEBvE9Zyo7P",
            "pAHAKoTJsAAe2ZcvTZUxoYzuygVAFAmbYmJYdWT886r",
            "3o9d13qUvEuuauhFrVom1vuCzgNsJifeaBYDPquaT73Y",
            "5xyoD5hnWDBLsW6rjW2TBmqiDQsbod6Uaw15dRhNrDzn",
            "8mcjXbJ8j4VryYFNpcBCFS37Au8zVYU53WTVaruJWcKt",
            "5ssHxeeehmY5y3C8RZeB5YmxXFC5cgNwtxhBhxW7BnC3",
            "Gihc1SqWvPFvLtNuMoYzZmS5xt9PJhAENc41fzeJjhx3",
            "4JR3h5EnSg2teCjNLUQBUf4oXFEkZMwQCGBqpvGgfTt5",
            "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
            "11111111111111111111111111111111",
            "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL",
            "HS2eL9WJbh7pA4i4veK3YDwhGLRjY3uKryvG1NbHRprj",
            "SysvarRent111111111111111111111111111111111",
            "86V3AnzroujF3SF6jSzzN5BJxiJ2BVh86x3p6uRYcg1k",
            "HPWFCze26yt86yu5V56w8dRSRNvsggJ9bNKwC9qfjBz",
            "2Tbc5LX7NSb32jiHMQfLra2vxppM11acfpjQ4VUV6De3",
            "3wxiFnooogeur15QFihkEWbJpbr56xSC6xZjBxUw3BVq",
          ],
          data: "63LNsZWnP5nH22SwowudszNaWWQ2mDpCq9cKZ",
          programId: "hausS13jsjafwWwGqZTUQRmWyvyxn9EQpqMwV1PBBmk",
        },
      ],
      recentBlockhash: "5VqXz3JW6UhvSZ9KgyPy72afwU76seJ61E4FeeBVBJmc",
    },
    signatures: [
      "4frBMA4q4i11YxxpqNhFaygRuC6wa1XW8KHJwMWCCp3C6piXAWmSGinot7XiBXPqTTcnLGJkgag9Kvuz4gkiMrnX",
      "4VjEjpyUVtZuaBUFkjP9uCZKVMc7xGeuYmvwd8swgTWZ6cEWafnmAz2Qjr92ewMYwzhSZJ7daJ4xxSNkSjT6zGG8",
    ],
  },
};

export default saleTx;


================================================
FILE: src/lib/marketplaces/__fixtures__/openSeaSale3Tx.ts
================================================
import { ParsedConfirmedTransaction } from "@solana/web3.js";

const saleTx: ParsedConfirmedTransaction = {
  blockTime: 1650281847,
  meta: {
    err: null,
    fee: 5000,
    innerInstructions: [
      {
        index: 0,
        instructions: [
          {
            parsed: {
              info: {
                destination: "5qXGXK96DDm8tYGcH1Er5RVLKLMtHxxsJWYKjuScD1Vp",
                lamports: 99000000000,
                source: "4ZGWPgjMNGHMrUJqyLFzEk92XDJwUFvyaAWbSm17ueHC",
              },
              type: "transfer",
            },
            program: "system",
            programId: "11111111111111111111111111111111",
          },
          {
            parsed: {
              info: {
                destination: "7CJBzeZi6Zcben2iKLe7L1XrYfgNagk9hHdijtJpqsYe",
                lamports: 897840,
                source: "4ZGWPgjMNGHMrUJqyLFzEk92XDJwUFvyaAWbSm17ueHC",
              },
              type: "transfer",
            },
            program: "system",
            programId: "11111111111111111111111111111111",
          },
          {
            parsed: {
              info: {
                account: "7CJBzeZi6Zcben2iKLe7L1XrYfgNagk9hHdijtJpqsYe",
                space: 1,
              },
              type: "allocate",
            },
            program: "system",
            programId: "11111111111111111111111111111111",
          },
          {
            parsed: {
              info: {
                account: "7CJBzeZi6Zcben2iKLe7L1XrYfgNagk9hHdijtJpqsYe",
                owner: "hausS13jsjafwWwGqZTUQRmWyvyxn9EQpqMwV1PBBmk",
              },
              type: "assign",
            },
            program: "system",
            programId: "11111111111111111111111111111111",
          },
        ],
      },
      {
        index: 1,
        instructions: [
          {
            parsed: {
              info: {
                destination: "GVnaCFMZtnX91PZtGQ8J6MxNQoKf8XyvLPtv4BYBykHX",
                lamports: 2763120,
                source: "4ZGWPgjMNGHMrUJqyLFzEk92XDJwUFvyaAWbSm17ueHC",
              },
              type: "transfer",
            },
            program: "system",
            programId: "11111111111111111111111111111111",
          },
          {
            parsed: {
              info: {
                account: "GVnaCFMZtnX91PZtGQ8J6MxNQoKf8XyvLPtv4BYBykHX",
                space: 269,
              },
              type: "allocate",
            },
            program: "system",
            programId: "11111111111111111111111111111111",
          },
          {
            parsed: {
              info: {
                account: "GVnaCFMZtnX91PZtGQ8J6MxNQoKf8XyvLPtv4BYBykHX",
                owner: "hausS13jsjafwWwGqZTUQRmWyvyxn9EQpqMwV1PBBmk",
              },
              type: "assign",
            },
            program: "system",
            programId: "11111111111111111111111111111111",
          },
        ],
      },
      {
        index: 2,
        instructions: [
          {
            parsed: {
              info: {
                destination: "9BKWqDHfHZh9j39xakYVMdr6hXmCLHH5VfCpeq2idU9L",
                lamports: 1621620000,
                source: "5qXGXK96DDm8tYGcH1Er5RVLKLMtHxxsJWYKjuScD1Vp",
              },
              type: "transfer",
            },
            program: "system",
            programId: "11111111111111111111111111111111",
          },
          {
            parsed: {
              info: {
                destination: "9FYsKrNuEweb55Wa2jaj8wTKYDBvuCG3huhakEj96iN9",
                lamports: 1039500000,
                source: "5qXGXK96DDm8tYGcH1Er5RVLKLMtHxxsJWYKjuScD1Vp",
              },
              type: "transfer",
            },
            program: "system",
            programId: "11111111111111111111111111111111",
          },
          {
            parsed: {
              info: {
                destination: "HNGVuL5kqjDehw7KR63w9gxow32sX6xzRNgLb8GkbwCM",
                lamports: 1039500000,
                source: "5qXGXK96DDm8tYGcH1Er5RVLKLMtHxxsJWYKjuScD1Vp",
              },
              type: "transfer",
            },
            program: "system",
            programId: "11111111111111111111111111111111",
          },
          {
            parsed: {
              info: {
                destination: "7FzXBBPjzrNJbm9MrZKZcyvP3ojVeYPUG2XkBPVZvuBu",
                lamports: 415800000,
                source: "5qXGXK96DDm8tYGcH1Er5RVLKLMtHxxsJWYKjuScD1Vp",
              },
              type: "transfer",
            },
            program: "system",
            programId: "11111111111111111111111111111111",
          },
          {
            parsed: {
              info: {
                destination: "DC2mkgwhy56w3viNtHDjJQmc7SGu2QX785bS4aexojwX",
                lamports: 41580000,
                source: "5qXGXK96DDm8tYGcH1Er5RVLKLMtHxxsJWYKjuScD1Vp",
              },
              type: "transfer",
            },
            program: "system",
            programId: "11111111111111111111111111111111",
          },
          {
            parsed: {
              info: {
                destination: "2e3dJ3mEjpdMDZsL5rGuCkMxqE116nBpMS2tKu9v8RRB",
                lamports: 2970000000,
                source: "5qXGXK96DDm8tYGcH1Er5RVLKLMtHxxsJWYKjuScD1Vp",
              },
              type: "transfer",
            },
            program: "system",
            programId: "11111111111111111111111111111111",
          },
          {
            parsed: {
              info: {
                destination: "AYfUa1MUjjivuDKDuXhY5rHCaDBvyAQrNh3XD6bYX8Ty",
                lamports: 91872000000,
                source: "5qXGXK96DDm8tYGcH1Er5RVLKLMtHxxsJWYKjuScD1Vp",
              },
              type: "transfer",
            },
            program: "system",
            programId: "11111111111111111111111111111111",
          },
          {
            parsed: {
              info: {
                account: "Fzzx1oFf4X7b9Tws5Ldp5Tnc5u3dX3jzgQ58dp2bQXqb",
                mint: "FfiAdK89m762LxdCQTjdKB4qyH77PMzhgt2wbP5SGg6V",
                rentSysvar: "SysvarRent111111111111111111111111111111111",
                source: "4ZGWPgjMNGHMrUJqyLFzEk92XDJwUFvyaAWbSm17ueHC",
                systemProgram: "11111111111111111111111111111111",
                tokenProgram: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
                wallet: "4ZGWPgjMNGHMrUJqyLFzEk92XDJwUFvyaAWbSm17ueHC",
              },
              type: "create",
            },
            program: "spl-associated-token-account",
            programId: "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL",
          },
          {
            parsed: {
              info: {
                destination: "Fzzx1oFf4X7b9Tws5Ldp5Tnc5u3dX3jzgQ58dp2bQXqb",
                lamports: 2039280,
                source: "4ZGWPgjMNGHMrUJqyLFzEk92XDJwUFvyaAWbSm17ueHC",
              },
              type: "transfer",
            },
            program: "system",
            programId: "11111111111111111111111111111111",
          },
          {
            parsed: {
              info: {
                account: "Fzzx1oFf4X7b9Tws5Ldp5Tnc5u3dX3jzgQ58dp2bQXqb",
                space: 165,
              },
              type: "allocate",
            },
            program: "system",
            programId: "11111111111111111111111111111111",
          },
          {
            parsed: {
              info: {
                account: "Fzzx1oFf4X7b9Tws5Ldp5Tnc5u3dX3jzgQ58dp2bQXqb",
                owner: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
              },
              type: "assign",
            },
            program: "system",
            programId: "11111111111111111111111111111111",
          },
          {
            parsed: {
              info: {
                account: "Fzzx1oFf4X7b9Tws5Ldp5Tnc5u3dX3jzgQ58dp2bQXqb",
                mint: "FfiAdK89m762LxdCQTjdKB4qyH77PMzhgt2wbP5SGg6V",
                owner: "4ZGWPgjMNGHMrUJqyLFzEk92XDJwUFvyaAWbSm17ueHC",
                rentSysvar: "SysvarRent111111111111111111111111111111111",
              },
              type: "initializeAccount",
            },
            program: "spl-token",
            programId: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
          },
          {
            parsed: {
              info: {
                amount: "1",
                authority: "HS2eL9WJbh7pA4i4veK3YDwhGLRjY3uKryvG1NbHRprj",
                destination: "Fzzx1oFf4X7b9Tws5Ldp5Tnc5u3dX3jzgQ58dp2bQXqb",
                source: "3A5yUQ1taLvuyA2GaeF1Qjpcj5i6SK3cH4HTG6LmNKwt",
              },
              type: "transfer",
            },
            program: "spl-token",
            programId: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
          },
        ],
      },
      {
        index: 3,
        instructions: [
          {
            parsed: {
              info: {
                destination: "4bBkJxZtco4czavs94pEhpa3dTQfdvmDvYTxwHFH3ogx",
                lamports: 2234160,
                source: "4ZGWPgjMNGHMrUJqyLFzEk92XDJwUFvyaAWbSm17ueHC",
              },
              type: "transfer",
            },
            program: "system",
            programId: "11111111111111111111111111111111",
          },
          {
            parsed: {
              info: {
                account: "4bBkJxZtco4czavs94pEhpa3dTQfdvmDvYTxwHFH3ogx",
                space: 193,
              },
              type: "allocate",
            },
            program: "system",
            programId: "11111111111111111111111111111111",
          },
          {
            parsed: {
              info: {
                account: "4bBkJxZtco4czavs94pEhpa3dTQfdvmDvYTxwHFH3ogx",
                owner: "hausS13jsjafwWwGqZTUQRmWyvyxn9EQpqMwV1PBBmk",
              },
              type: "assign",
            },
            program: "system",
            programId: "11111111111111111111111111111111",
          },
        ],
      },
    ],
    logMessages: [
      "Program hausS13jsjafwWwGqZTUQRmWyvyxn9EQpqMwV1PBBmk invoke [1]",
      "Program log: Instruction: PublicBuy",
      "Program log: Ok(252), Err(Custom(6013)), 252",
      "Program 11111111111111111111111111111111 invoke [2]",
      "Program 11111111111111111111111111111111 success",
      "Program log: Transfer 897840 lamports to the new account",
      "Program 11111111111111111111111111111111 invoke [2]",
      "Program 11111111111111111111111111111111 success",
      "Program log: Allocate space for the account 7CJBzeZi6Zcben2iKLe7L1XrYfgNagk9hHdijtJpqsYe",
      "Program 11111111111111111111111111111111 invoke [2]",
      "Program 11111111111111111111111111111111 success",
      "Program log: Assign the account to the owning program",
      "Program 11111111111111111111111111111111 invoke [2]",
      "Program 11111111111111111111111111111111 success",
      "Program log: Completed assignation!",
      "Program hausS13jsjafwWwGqZTUQRmWyvyxn9EQpqMwV1PBBmk consumed 63218 of 200000 compute units",
      "Program hausS13jsjafwWwGqZTUQRmWyvyxn9EQpqMwV1PBBmk success",
      "Program hausS13jsjafwWwGqZTUQRmWyvyxn9EQpqMwV1PBBmk invoke [1]",
      "Program log: Instruction: PrintBidReceipt",
      "Program log: Transfer 2763120 lamports to the new account",
      "Program 11111111111111111111111111111111 invoke [2]",
      "Program 11111111111111111111111111111111 success",
      "Program log: Allocate space for the account GVnaCFMZtnX91PZtGQ8J6MxNQoKf8XyvLPtv4BYBykHX",
      "Program 11111111111111111111111111111111 invoke [2]",
      "Program 11111111111111111111111111111111 success",
      "Program log: Assign the account to the owning program",
      "Program 11111111111111111111111111111111 invoke [2]",
      "Program 11111111111111111111111111111111 success",
      "Program log: Completed assignation!",
      "Program hausS13jsjafwWwGqZTUQRmWyvyxn9EQpqMwV1PBBmk consumed 35456 of 200000 compute units",
      "Program hausS13jsjafwWwGqZTUQRmWyvyxn9EQpqMwV1PBBmk success",
      "Program hausS13jsjafwWwGqZTUQRmWyvyxn9EQpqMwV1PBBmk invoke [1]",
      "Program log: Instruction: ExecuteSale",
      "Program log: Ok(252), Err(Custom(6013)), 252",
      "Program 11111111111111111111111111111111 invoke [2]",
      "Program 11111111111111111111111111111111 success",
      "Program 11111111111111111111111111111111 invoke [2]",
      "Program 11111111111111111111111111111111 success",
      "Program 11111111111111111111111111111111 invoke [2]",
      "Program 11111111111111111111111111111111 success",
      "Program 11111111111111111111111111111111 invoke [2]",
      "Program 11111111111111111111111111111111 success",
      "Program 11111111111111111111111111111111 invoke [2]",
      "Program 11111111111111111111111111111111 success",
      "Program 11111111111111111111111111111111 invoke [2]",
      "Program 11111111111111111111111111111111 success",
      "Program 11111111111111111111111111111111 invoke [2]",
      "Program 11111111111111111111111111111111 success",
      "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL invoke [2]",
      "Program log: Transfer 2039280 lamports to the associated token account",
      "Program 11111111111111111111111111111111 invoke [3]",
      "Program 11111111111111111111111111111111 success",
      "Program log: Allocate space for the associated token account",
      "Program 11111111111111111111111111111111 invoke [3]",
      "Program 11111111111111111111111111111111 success",
      "Program log: Assign the associated token account to the SPL Token program",
      "Program 11111111111111111111111111111111 invoke [3]",
      "Program 11111111111111111111111111111111 success",
      "Program log: Initialize the associated token account",
      "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [3]",
      "Program log: Instruction: InitializeAccount",
      "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 3297 of 103392 compute units",
      "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success",
      "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL consumed 24372 of 123818 compute units",
      "Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL success",
      "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]",
      "Program log: Instruction: Transfer",
      "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 2712 of 93057 compute units",
      "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success",
      "Program hausS13jsjafwWwGqZTUQRmWyvyxn9EQpqMwV1PBBmk consumed 112861 of 200000 compute units",
      "Program hausS13jsjafwWwGqZTUQRmWyvyxn9EQpqMwV1PBBmk success",
      "Program hausS13jsjafwWwGqZTUQRmWyvyxn9EQpqMwV1PBBmk invoke [1]",
      "Program log: Instruction: PrintPurchaseReceipt",
      "Program log: Transfer 2234160 lamports to the new account",
      "Program 11111111111111111111111111111111 invoke [2]",
      "Program 11111111111111111111111111111111 success",
      "Program log: Allocate space for the account 4bBkJxZtco4czavs94pEhpa3dTQfdvmDvYTxwHFH3ogx",
      "Program 11111111111111111111111111111111 invoke [2]",
      "Program 11111111111111111111111111111111 success",
      "Program log: Assign the account to the owning program",
      "Program 11111111111111111111111111111111 invoke [2]",
      "Program 11111111111111111111111111111111 success",
      "Program log: Completed assignation!",
      "Program hausS13jsjafwWwGqZTUQRmWyvyxn9EQpqMwV1PBBmk consumed 47454 of 200000 compute units",
      "Program hausS13jsjafwWwGqZTUQRmWyvyxn9EQpqMwV1PBBmk success",
    ],
    postBalances: [
      1041366112522, 43476452999, 2039280, 2234160, 0, 0, 0, 74091992398, 0, 0,
      104685015440, 67120527091, 315028594814, 6905505600, 2533440, 2039280,
      2763120, 225253532855, 1, 5616720, 898174080, 194991640, 1461600, 4085520,
      1141440, 0, 152395037831, 0, 1009200, 953185920,
    ],
    postTokenBalances: [
      {
        accountIndex: 2,
        mint: "FfiAdK89m762LxdCQTjdKB4qyH77PMzhgt2wbP5SGg6V",
        owner: "AYfUa1MUjjivuDKDuXhY5rHCaDBvyAQrNh3XD6bYX8Ty",
        uiTokenAmount: {
          amount: "0",
          decimals: 0,
          uiAmount: null,
          uiAmountString: "0",
        },
      },
      {
        accountIndex: 15,
        mint: "FfiAdK89m762LxdCQTjdKB4qyH77PMzhgt2wbP5SGg6V",
        owner: "4ZGWPgjMNGHMrUJqyLFzEk92XDJwUFvyaAWbSm17ueHC",
        uiTokenAmount: {
          amount: "1",
          decimals: 0,
          uiAmount: 1,
          uiAmountString: "1",
        },
      },
    ],
    preBalances: [
      1140372256242, 40506452999, 2039280, 0, 0, 897840, 0, 73676192398, 0, 0,
      103063395440, 66081027091, 223156594814, 6863925600, 2533440, 0, 0,
      224214032855, 1, 5616720, 898174080, 194991640, 1461600, 4085520, 1141440,
      0, 152395037831, 0, 1009200, 953185920,
    ],
    preTokenBalances: [
      {
        accountIndex: 2,
        mint: "FfiAdK89m762LxdCQTjdKB4qyH77PMzhgt2wbP5SGg6V",
        owner: "AYfUa1MUjjivuDKDuXhY5rHCaDBvyAQrNh3XD6bYX8Ty",
        uiTokenAmount: {
          amount: "1",
          decimals: 0,
          uiAmount: 1,
          uiAmountString: "1",
        },
      },
    ],
    rewards: [],
    status: { Ok: null },
  },
  slot: 130271640,
  transaction: {
    message: {
      accountKeys: [
        {
          pubkey: "4ZGWPgjMNGHMrUJqyLFzEk92XDJwUFvyaAWbSm17ueHC",
          signer: true,
          writable: true,
        },
        {
          pubkey: "2e3dJ3mEjpdMDZsL5rGuCkMxqE116nBpMS2tKu9v8RRB",
          signer: false,
          writable: true,
        },
        {
          pubkey: "3A5yUQ1taLvuyA2GaeF1Qjpcj5i6SK3cH4HTG6LmNKwt",
          signer: false,
          writable: true,
        },
        {
          pubkey: "4bBkJxZtco4czavs94pEhpa3dTQfdvmDvYTxwHFH3ogx",
          signer: false,
          writable: true,
        },
        {
          pubkey: "5qXGXK96DDm8tYGcH1Er5RVLKLMtHxxsJWYKjuScD1Vp",
          signer: false,
          writable: true,
        },
        {
          pubkey: "7brnY48kvFyPQNcKPUdhAWsXGrijrynm3HMPgCETmPeP",
          signer: false,
          writable: true,
        },
        {
          pubkey: "7CJBzeZi6Zcben2iKLe7L1XrYfgNagk9hHdijtJpqsYe",
          signer: false,
          writable: true,
        },
        {
          pubkey: "7FzXBBPjzrNJbm9MrZKZcyvP3ojVeYPUG2XkBPVZvuBu",
          signer: false,
          writable: true,
        },
        {
          pubkey: "836amfe6knfizUBxZqejArTUiY2FscQJjxGpCWwgw1vf",
          signer: false,
          writable: true,
        },
        {
          pubkey: "91boRn3TZ7oeprHKk3q8QbyfevjZxLnL9LZsEqN468GE",
          signer: false,
          writable: true,
        },
        {
          pubkey: "9BKWqDHfHZh9j39xakYVMdr6hXmCLHH5VfCpeq2idU9L",
          signer: false,
          writable: true,
        },
        {
          pubkey: "9FYsKrNuEweb55Wa2jaj8wTKYDBvuCG3huhakEj96iN9",
          signer: false,
          writable: true,
        },
        {
          pubkey: "AYfUa1MUjjivuDKDuXhY5rHCaDBvyAQrNh3XD6bYX8Ty",
          signer: false,
          writable: true,
        },
        {
          pubkey: "DC2mkgwhy56w3viNtHDjJQmc7SGu2QX785bS4aexojwX",
          signer: false,
          writable: true,
        },
        {
          pubkey: "DmqoaxU4ajeEoYbCTmuioTDDfBC8mdieBndAmS4s6KzQ",
          signer: false,
          writable: true,
        },
        {
          pubkey: "Fzzx1oFf4X7b9Tws5Ldp5Tnc5u3dX3jzgQ58dp2bQXqb",
          signer: false,
          writable: true,
        },
        {
          pubkey: "GVnaCFMZtnX91PZtGQ8J6MxNQoKf8XyvLPtv4BYBykHX",
          signer: false,
          writable: true,
        },
        {
          pubkey: "HNGVuL5kqjDehw7KR63w9gxow32sX6xzRNgLb8GkbwCM",
          signer: false,
          writable: true,
        },
        {
          pubkey: "11111111111111111111111111111111",
          signer: false,
          writable: false,
        },
        {
          pubkey: "22CV2FHavBttAqfAZbxpcHzSXkL3TyDwqeykw6m22RDe",
          signer: false,
          writable: false,
        },
        {
          pubkey: "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL",
          signer: false,
          writable: false,
        },
        {
          pubkey: "BAfqGqULeJg6XVqw75orgNnmELcuwnTSnVpvhQmPPuFK",
          signer: false,
          writable: false,
        },
        {
          pubkey: "FfiAdK89m762LxdCQTjdKB4qyH77PMzhgt2wbP5SGg6V",
          signer: false,
          writable: false,
        },
        {
          pubkey: "GWErq8nJf5JQtohg5k7RTkiZmoCxvGBJqbMSfkrxYFFy",
          signer: false,
          writable: false,
        },
        {
          pubkey: "hausS13jsjafwWwGqZTUQRmWyvyxn9EQpqMwV1PBBmk",
          signer: false,
          writable: false,
        },
        {
          pubkey: "HS2eL9WJbh7pA4i4veK3YDwhGLRjY3uKryvG1NbHRprj",
          signer: false,
          writable: false,
        },
        {
          pubkey: "So11111111111111111111111111111111111111112",
          signer: false,
          writable: false,
        },
        {
          pubkey: "Sysvar1nstructions1111111111111111111111111",
          signer: false,
          writable: false,
        },
        {
          pubkey: "SysvarRent111111111111111111111111111111111",
          signer: false,
          writable: false,
        },
        {
          pubkey: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
          signer: false,
          writable: false,
        },
      ],
      instructions: [
        {
          accounts: [
            "4ZGWPgjMNGHMrUJqyLFzEk92XDJwUFvyaAWbSm17ueHC",
            "4ZGWPgjMNGHMrUJqyLFzEk92XDJwUFvyaAWbSm17ueHC",
            "4ZGWPgjMNGHMrUJqyLFzEk92XDJwUFvyaAWbSm17ueHC",
            "So11111111111111111111111111111111111111112",
            "3A5yUQ1taLvuyA2GaeF1Qjpcj5i6SK3cH4HTG6LmNKwt",
            "22CV2FHavBttAqfAZbxpcHzSXkL3TyDwqeykw6m22RDe",
            "5qXGXK96DDm8tYGcH1Er5RVLKLMtHxxsJWYKjuScD1Vp",
            "BAfqGqULeJg6XVqw75orgNnmELcuwnTSnVpvhQmPPuFK",
            "GWErq8nJf5JQtohg5k7RTkiZmoCxvGBJqbMSfkrxYFFy",
            "91boRn3TZ7oeprHKk3q8QbyfevjZxLnL9LZsEqN468GE",
            "7CJBzeZi6Zcben2iKLe7L1XrYfgNagk9hHdijtJpqsYe",
            "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
            "11111111111111111111111111111111",
            "SysvarRent111111111111111111111111111111111",
          ],
          data: "6BjfuCDKyc5ubRvGND8wVQzxSMF3fFbGgvtw",
          programId: "hausS13jsjafwWwGqZTUQRmWyvyxn9EQpqMwV1PBBmk",
        },
        {
          accounts: [
            "GVnaCFMZtnX91PZtGQ8J6MxNQoKf8XyvLPtv4BYBykHX",
            "4ZGWPgjMNGHMrUJqyLFzEk92XDJwUFvyaAWbSm17ueHC",
            "11111111111111111111111111111111",
            "SysvarRent111111111111111111111111111111111",
            "Sysvar1nstructions1111111111111111111111111",
          ],
          data: "2D7j12dEPh7T3",
          programId: "hausS13jsjafwWwGqZTUQRmWyvyxn9EQpqMwV1PBBmk",
        },
        {
          accounts: [
            "4ZGWPgjMNGHMrUJqyLFzEk92XDJwUFvyaAWbSm17ueHC",
            "AYfUa1MUjjivuDKDuXhY5rHCaDBvyAQrNh3XD6bYX8Ty",
            "3A5yUQ1taLvuyA2GaeF1Qjpcj5i6SK3cH4HTG6LmNKwt",
            "FfiAdK89m762LxdCQTjdKB4qyH77PMzhgt2wbP5SGg6V",
            "22CV2FHavBttAqfAZbxpcHzSXkL3TyDwqeykw6m22RDe",
            "So11111111111111111111111111111111111111112",
            "5qXGXK96DDm8tYGcH1Er5RVLKLMtHxxsJWYKjuScD1Vp",
            "AYfUa1MUjjivuDKDuXhY5rHCaDBvyAQrNh3XD6bYX8Ty",
            "Fzzx1oFf4X7b9Tws5Ldp5Tnc5u3dX3jzgQ58dp2bQXqb",
            "BAfqGqULeJg6XVqw75orgNnmELcuwnTSnVpvhQmPPuFK",
            "GWErq8nJf5JQtohg5k7RTkiZmoCxvGBJqbMSfkrxYFFy",
            "91boRn3TZ7oeprHKk3q8QbyfevjZxLnL9LZsEqN468GE",
            "2e3dJ3mEjpdMDZsL5rGuCkMxqE116nBpMS2tKu9v8RRB",
            "7CJBzeZi6Zcben2iKLe7L1XrYfgNagk9hHdijtJpqsYe",
            "7brnY48kvFyPQNcKPUdhAWsXGrijrynm3HMPgCETmPeP",
            "836amfe6knfizUBxZqejArTUiY2FscQJjxGpCWwgw1vf",
            "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
            "11111111111111111111111111111111",
            "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL",
            "HS2eL9WJbh7pA4i4veK3YDwhGLRjY3uKryvG1NbHRprj",
            "SysvarRent111111111111111111111111111111111",
            "9BKWqDHfHZh9j39xakYVMdr6hXmCLHH5VfCpeq2idU9L",
            "9FYsKrNuEweb55Wa2jaj8wTKYDBvuCG3huhakEj96iN9",
            "HNGVuL5kqjDehw7KR63w9gxow32sX6xzRNgLb8GkbwCM",
            "7FzXBBPjzrNJbm9MrZKZcyvP3ojVeYPUG2XkBPVZvuBu",
            "DC2mkgwhy56w3viNtHDjJQmc7SGu2QX785bS4aexojwX",
          ],
          data: "63LNsZWnP5nH22Swj9EAzK3gbak4JGFuCCgGw",
          programId: "hausS13jsjafwWwGqZTUQRmWyvyxn9EQpqMwV1PBBmk",
        },
        {
          accounts: [
            "4bBkJxZtco4czavs94pEhpa3dTQfdvmDvYTxwHFH3ogx",
            "DmqoaxU4ajeEoYbCTmuioTDDfBC8mdieBndAmS4s6KzQ",
            "GVnaCFMZtnX91PZtGQ8J6MxNQoKf8XyvLPtv4BYBykHX",
            "4ZGWPgjMNGHMrUJqyLFzEk92XDJwUFvyaAWbSm17ueHC",
            "11111111111111111111111111111111",
            "SysvarRent111111111111111111111111111111111",
            "Sysvar1nstructions1111111111111111111111111",
          ],
          data: "3u2uhbNXzTFBb",
          programId: "hausS13jsjafwWwGqZTUQRmWyvyxn9EQpqMwV1PBBmk",
        },
      ],
      recentBlockhash: "EqFgqBcEBZmzWeGyk9PuKAtwtD4ZEBxMmBdF3mqHryk8",
    },
    signatures: [
      "66EfiWJrPWzdu4BqFAff1Eov7JQfUrfMbmmxAKEx6QqrS2D6zm5XbsCP5yq3RnaUzUDxc5tWJBChBjmhWNFXzmaR",
    ],
  },
};

export default saleTx;


================================================
FILE: src/lib/marketplaces/__fixtures__/openSeaSaleTx.ts
================================================
import {ParsedConfirmedTransaction} from "@solana/web3.js";

const saleTx: ParsedConfirmedTransaction = {
  "blockTime": 1649206880,
  "meta": {
    "err": null,
    "fee": 10000,
    "innerInstructions": [{
      "index": 0,
      "instructions": [{
        "parsed": {
          "info": {
            "amount": "1",
            "delegate": "HS2eL9WJbh7pA4i4veK3YDwhGLRjY3uKryvG1NbHRprj",
            "owner": "J6CH2rnYqfhqk7fTKoPBpjYjMjzRYvtcWWYqXuTbX451",
            "source": "FWhvk9XkwbAYtBMyUQEzkKdF84ZHsRpxXabNKuX1WAWA"
          }, "type": "approve"
        },
        "program": "spl-token",
        "programId": {"_bn": "06ddf6e1d765a193d9cbe146ceeb79ac1cb485ed5f5b37913a8cf5857eff00a9"}
      }, {
        "parsed": {
          "info": {
            "destination": "AmsLrn1TU4VBj4kg9wNUaH12k63btEraUfXnnZJhdbwc",
            "lamports": 897840,
            "source": "5xyoD5hnWDBLsW6rjW2TBmqiDQsbod6Uaw15dRhNrDzn"
          }, "type": "transfer"
        }, "program": "system", "programId": {"_bn": "00"}
      }, {
        "parsed": {
          "info": {
            "account": "AmsLrn1TU4VBj4kg9wNUaH12k63btEraUfXnnZJhdbwc",
            "space": 1
          }, "type": "allocate"
        }, "program": "system", "programId": {"_bn": "00"}
      }, {
        "parsed": {
          "info": {
            "account": "AmsLrn1TU4VBj4kg9wNUaH12k63btEraUfXnnZJhdbwc",
            "owner": "hausS13jsjafwWwGqZTUQRmWyvyxn9EQpqMwV1PBBmk"
          }, "type": "assign"
        }, "program": "system", "programId": {"_bn": "00"}
      }]
    }, {
      "index": 2,
      "instructions": [{
        "parsed": {
          "info": {
            "destination": "71kwsvqZ5hTzQUB8piTRUBbCaoUWGMyN5Gb8vAtt9ZYV",
            "lamports": 1795680,
            "source": "5xyoD5hnWDBLsW6rjW2TBmqiDQsbod6Uaw15dRhNrDzn"
          }, "type": "transfer"
        }, "program": "system", "programId": {"_bn": "00"}
      }]
    }, {
      "index": 5,
      "instructions": [{
        "parsed": {
          "info": {
            "destination": "9BKWqDHfHZh9j39xakYVMdr6hXmCLHH5VfCpeq2idU9L",
            "lamports": 1539720000,
            "source": "BqdcmEKknjPMk2HNqG3ThiQQzeRLXarxY2PY9emsQ7v4"
          }, "type": "transfer"
        }, "program": "system", "programId": {"_bn": "00"}
      }, {
        "parsed": {
          "info": {
            "destination": "9FYsKrNuEweb55Wa2jaj8wTKYDBvuCG3huhakEj96iN9",
            "lamports": 987000000,
            "source": "BqdcmEKknjPMk2HNqG3ThiQQzeRLXarxY2PY9emsQ7v4"
          }, "type": "transfer"
        }, "program": "system", "programId": {"_bn": "00"}
      }, {
        "parsed": {
          "info": {
            "destination": "HNGVuL5kqjDehw7KR63w9gxow32sX6xzRNgLb8GkbwCM",
            "lamports": 987000000,
            "source": "BqdcmEKknjPMk2HNqG3ThiQQzeRLXarxY2PY9emsQ7v4"
          }, "type": "transfer"
        }, "program": "system", "programId": {"_bn": "00"}
      }, {
        "parsed": {
          "info": {
            "destination": "7FzXBBPjzrNJbm9MrZKZcyvP3ojVeYPUG2XkBPVZvuBu",
            "lamports": 394800000,
            "source": "BqdcmEKknjPMk2HNqG3ThiQQzeRLXarxY2PY9emsQ7v4"
          }, "type": "transfer"
        }, "program": "system", "programId": {"_bn": "00"}
      }, {
        "parsed": {
          "info": {
            "destination": "DC2mkgwhy56w3viNtHDjJQmc7SGu2QX785bS4aexojwX",
            "lamports": 39480000,
            "source": "BqdcmEKknjPMk2HNqG3ThiQQzeRLXarxY2PY9emsQ7v4"
          }, "type": "transfer"
        }, "program": "system", "programId": {"_bn": "00"}
      }, {
        "parsed": {
          "info": {
            "destination": "8mcjXbJ8j4VryYFNpcBCFS37Au8zVYU53WTVaruJWcKt",
            "lamports": 2350000000,
            "source": "BqdcmEKknjPMk2HNqG3ThiQQzeRLXarxY2PY9emsQ7v4"
          }, "type": "transfer"
        }, "program": "system", "programId": {"_bn": "00"}
      }, {
        "parsed": {
          "info": {
            "destination": "J6CH2rnYqfhqk7fTKoPBpjYjMjzRYvtcWWYqXuTbX451",
            "lamports": 87702000000,
            "source": "BqdcmEKknjPMk2HNqG3ThiQQzeRLXarxY2PY9emsQ7v4"
          }, "type": "transfer"
        }, "program": "system", "programId": {"_bn": "00"}
      }, {
        "parsed": {
          "info": {
            "amount": "1",
            "authority": "HS2eL9WJbh7pA4i4veK3YDwhGLRjY3uKryvG1NbHRprj",
            "destination": "FDQhqk3pQgSVj2praA5jD4pEKC9hzerSzGSXHeqAppAT",
            "source": "FWhvk9XkwbAYtBMyUQEzkKdF84ZHsRpxXabNKuX1WAWA"
          }, "type": "transfer"
        },
        "program": "spl-token",
        "programId": {"_bn": "06ddf6e1d765a193d9cbe146ceeb79ac1cb485ed5f5b37913a8cf5857eff00a9"}
      }]
    }],
    "logMessages": ["Program hausS13jsjafwWwGqZTUQRmWyvyxn9EQpqMwV1PBBmk invoke [1]", "Program log: Instruction: Sell", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: Approve", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 2026 of 170370 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program log: Transfer 897840 lamports to the new account", "Program 11111111111111111111111111111111 invoke [2]", "Program 11111111111111111111111111111111 success", "Program log: Allocate space for the account AmsLrn1TU4VBj4kg9wNUaH12k63btEraUfXnnZJhdbwc", "Program 11111111111111111111111111111111 invoke [2]", "Program 11111111111111111111111111111111 success", "Program log: Assign the account to the owning program", "Program 11111111111111111111111111111111 invoke [2]", "Program 11111111111111111111111111111111 success", "Program log: Completed assignation!", "Program hausS13jsjafwWwGqZTUQRmWyvyxn9EQpqMwV1PBBmk consumed 55831 of 200000 compute units", "Program hausS13jsjafwWwGqZTUQRmWyvyxn9EQpqMwV1PBBmk success", "Program 11111111111111111111111111111111 invoke [1]", "Program 11111111111111111111111111111111 success", "Program hausS13jsjafwWwGqZTUQRmWyvyxn9EQpqMwV1PBBmk invoke [1]", "Program log: Instruction: WithdrawFromFee", "Program 11111111111111111111111111111111 invoke [2]", "Program 11111111111111111111111111111111 success", "Program hausS13jsjafwWwGqZTUQRmWyvyxn9EQpqMwV1PBBmk consumed 13348 of 200000 compute units", "Program hausS13jsjafwWwGqZTUQRmWyvyxn9EQpqMwV1PBBmk success", "Program 11111111111111111111111111111111 invoke [1]", "Program 11111111111111111111111111111111 success", "Program 11111111111111111111111111111111 invoke [1]", "Program 11111111111111111111111111111111 success", "Program hausS13jsjafwWwGqZTUQRmWyvyxn9EQpqMwV1PBBmk invoke [1]", "Program log: Instruction: ExecuteSale", "Program log: Err(Custom(6013)), Ok(255), 255", "Program 11111111111111111111111111111111 invoke [2]", "Program 11111111111111111111111111111111 success", "Program 11111111111111111111111111111111 invoke [2]", "Program 11111111111111111111111111111111 success", "Program 11111111111111111111111111111111 invoke [2]", "Program 11111111111111111111111111111111 success", "Program 11111111111111111111111111111111 invoke [2]", "Program 11111111111111111111111111111111 success", "Program 11111111111111111111111111111111 invoke [2]", "Program 11111111111111111111111111111111 success", "Program 11111111111111111111111111111111 invoke [2]", "Program 11111111111111111111111111111111 success", "Program 11111111111111111111111111111111 invoke [2]", "Program 11111111111111111111111111111111 success", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [2]", "Program log: Instruction: Transfer", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 2712 of 128895 compute units", "Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success", "Program hausS13jsjafwWwGqZTUQRmWyvyxn9EQpqMwV1PBBmk consumed 77023 of 200000 compute units", "Program hausS13jsjafwWwGqZTUQRmWyvyxn9EQpqMwV1PBBmk success"],
    "postBalances": [551806734363, 22295920, 2039280, 4085520, 101854902482, 0, 0, 224458141440, 2310000000, 2039280, 31502432899, 0, 944386067440, 823658107091, 82581107855, 31989638398, 4306995000, 5616720, 953185920, 1, 0, 1009200, 1461600, 152395037831, 898174080, 1141440],
    "postTokenBalances": [{
      "accountIndex": 2,
      "mint": "CL8vqe2dL8Khh1fZtzSZL6DcXweSkdzGVS4t8LbmBh14",
      "owner": "J6CH2rnYqfhqk7fTKoPBpjYjMjzRYvtcWWYqXuTbX451",
      "uiTokenAmount": {"amount": "0", "decimals": 0, "uiAmount": null, "uiAmountString": "0"}
    }, {
      "accountIndex": 9,
      "mint": "CL8vqe2dL8Khh1fZtzSZL6DcXweSkdzGVS4t8LbmBh14",
      "owner": "EatSzWzfeo47TKCVQn6khv3qgWA9oKg28sfHcA4wsBZ1",
      "uiTokenAmount": {"amount": "1", "decimals": 0, "uiAmount": 1, "uiAmountString": "1"}
    }],
    "preBalances": [464104744363, 22295920, 2039280, 4085520, 101854902482, 0, 0, 224457243600, 96310000000, 2039280, 29152432899, 897840, 942846347440, 822671107091, 81594107855, 31594838398, 4267515000, 5616720, 953185920, 1, 0, 1009200, 1461600, 152395037831, 898174080, 1141440],
    "preTokenBalances": [{
      "accountIndex": 2,
      "mint": "CL8vqe2dL8Khh1fZtzSZL6DcXweSkdzGVS4t8LbmBh14",
      "owner": "J6CH2rnYqfhqk7fTKoPBpjYjMjzRYvtcWWYqXuTbX451",
      "uiTokenAmount": {"amount": "1", "decimals": 0, "uiAmount": 1, "uiAmountString": "1"}
    }, {
      "accountIndex": 9,
      "mint": "CL8vqe2dL8Khh1fZtzSZL6DcXweSkdzGVS4t8LbmBh14",
      "owner": "EatSzWzfeo47TKCVQn6khv3qgWA9oKg28sfHcA4wsBZ1",
      "uiTokenAmount": {"amount": "0", "decimals": 0, "uiAmount": null, "uiAmountString": "0"}
    }],
    "rewards": [],
    "status": {"Ok": null}
  }, "slot": 128414021, "transaction": {
    "message": {
      "accountKeys": [{
        "pubkey": {"_bn": "fdeb5502ecdd8477eabb88423bac3c1a819078ea4653259fb342f601cece8964"},
        "signer": true,
        "writable": true
      }, {
        "pubkey": {"_bn": "5957cfc8a0e42253218140104fbeb444dec3d24b06d03de8efd6ea4d74b0f1b2"},
        "signer": true,
        "writable": true
      }, {
        "pubkey": {"_bn": "d79fbc7eae510dfbb522862cc837eef953bc9b136af3fb4de03ed5b683f4eb27"},
        "signer": false,
        "writable": true
      }, {
        "pubkey": {"_bn": "2989d6a9ff6b2a168b81bed69f59efcb8172a8c663a80112cce020c86145700b"},
        "signer": false,
        "writable": true
      }, {
        "pubkey": {"_bn": "49c5e99524f07898034804274203258b3165710477bd5762d3d2d93ad0a4c3bf"},
        "signer": false,
        "writable": true
      }, {
        "pubkey": {"_bn": "9137a90629483d28899733c1bb90c0fd2beec2d5752a4aa6baee07acfd3cec67"},
        "signer": false,
        "writable": true
      }, {
        "pubkey": {"_bn": "554834cb47a18536de10856c40cd94b4d545e7e8ce23011bfe2af6b35ae3ad32"},
        "signer": false,
        "writable": true
      }, {
        "pubkey": {"_bn": "c9d644f2dbe938ba41f8253e0b77be77dff0061b92abebcaf6e6761906466c78"},
        "signer": false,
        "writable": true
      }, {
        "pubkey": {"_bn": "a10a268ecd21a1f027fd6b7cf53d3b3bfc9251fdb1cc8b3fb7fd0105fafa7b55"},
        "signer": false,
        "writable": true
      }, {
        "pubkey": {"_bn": "d331639817d825643f482d574803ced3236d199326b1c24b62df578c156be7e8"},
        "signer": false,
        "writable": true
      }, {
        "pubkey": {"_bn": "736fc48d12def6a316c4a28f340f33a6133c07a3044abb71fd07b52eac169a0b"},
        "signer": false,
        "writable": true
      }, {
        "pubkey": {"_bn": "3a8cda0ee1ac4b27c7c2c2f32b0da7743cf76968ad4dace0b5c7a044439dee09"},
        "signer": false,
        "writable": true
      }, {
        "pubkey": {"_bn": "79823cdb6ce50873db3f895e243f94d8220b9838702ef97bbaeb6970dd2394ff"},
        "signer": false,
        "writable": true
      }, {
        "pubkey": {"_bn": "7a97a8dd8992557bb1775608180d05c7f341865add90def08a1969f340016cd6"},
        "signer": false,
        "writable": true
      }, {
        "pubkey": {"_bn": "f32db6394ef748976b14ecfbc276dac42f08176162184b4bda980306206dd54a"},
        "signer": false,
        "writable": true
      }, {
        "pubkey": {"_bn": "5cfd4a8feec61e4228f0286c5d2b00510d2615263a20ed583f19da112744ed10"},
        "signer": false,
        "writable": true
      }, {
        "pubkey": {"_bn": "b51fa29b1ddbc2641f10f9d3c921395a89b34404b498a5e989d0c7a4e7b1f8c2"},
        "signer": false,
        "writable": true
      }, {
        "pubkey": {"_bn": "4cebb96c7e001c56092f91df86d78c33272aca8fdfbf0cdceea319e36585a604"},
        "signer": false,
        "writable": false
      }, {
        "pubkey": {"_bn": "06ddf6e1d765a193d9cbe146ceeb79ac1cb485ed5f5b37913a8cf5857eff00a9"},
        "signer": false,
        "writable": false
      }, {
        "pubkey": {"_bn": "00"},
        "signer": false,
        "writable": false
      }, {
        "pubkey": {"_bn": "f4245e977593125fb15941b6c0a9260af4438bcd10355292a40b05df87f5d520"},
        "signer": false,
        "writable": false
      }, {
        "pubkey": {"_bn": "06a7d517192c5c51218cc94c3d4af17f58daee089ba1fd44e3dbd98a00000000"},
        "signer": false,
        "writable": false
      }, {
        "pubkey": {"_bn": "a8578e5a4636e8627d645731f173d52965942fcf79e0069678745ea1dce12673"},
        "signer": false,
        "writable": false
      }, {
        "pubkey": {"_bn": "069b8857feab8184fb687f634618c035dac439dc1aeb3b5598a0f00000000001"},
        "signer": false,
        "writable": false
      }, {
        "pubkey": {"_bn": "8c97258f4e2489f1bb3d1029148e0d830b5a1399daff1084048e7bd8dbe9f859"},
        "signer": false,
        "writable": false
      }, {
        "pubkey": {"_bn": "0a6593863cba461564eae41373721546eb0151c9308276bbd4ad2a1c3a42107b"},
        "signer": false,
        "writable": false
      }],
      "instructions": [{
        "accounts": [{"_bn": "fdeb5502ecdd8477eabb88423bac3c1a819078ea4653259fb342f601cece8964"}, {"_bn": "d79fbc7eae510dfbb522862cc837eef953bc9b136af3fb4de03ed5b683f4eb27"}, {"_bn": "4cebb96c7e001c56092f91df86d78c33272aca8fdfbf0cdceea319e36585a604"}, {"_bn": "5957cfc8a0e42253218140104fbeb444dec3d24b06d03de8efd6ea4d74b0f1b2"}, {"_bn": "2989d6a9ff6b2a168b81bed69f59efcb8172a8c663a80112cce020c86145700b"}, {"_bn": "49c5e99524f07898034804274203258b3165710477bd5762d3d2d93ad0a4c3bf"}, {"_bn": "9137a90629483d28899733c1bb90c0fd2beec2d5752a4aa6baee07acfd3cec67"}, {"_bn": "554834cb47a18536de10856c40cd94b4d545e7e8ce23011bfe2af6b35ae3ad32"}, {"_bn": "06ddf6e1d765a193d9cbe146ceeb79ac1cb485ed5f5b37913a8cf5857eff00a9"}, {"_bn": "00"}, {"_bn": "f4245e977593125fb15941b6c0a9260af4438bcd10355292a40b05df87f5d520"}, {"_bn": "06a7d517192c5c51218cc94c3d4af17f58daee089ba1fd44e3dbd98a00000000"}],
        "data": "81r6u24fHZhKcNPeduJymPQqvNmJErHCHUtrb",
        "programId": {"_bn": "0a6593863cba461564eae41373721546eb0151c9308276bbd4ad2a1c3a42107b"}
      }, {
        "parsed": {
          "info": {
            "destination": "5xyoD5hnWDBLsW6rjW2TBmqiDQsbod6Uaw15dRhNrDzn",
            "lamports": 897840,
            "source": "J6CH2rnYqfhqk7fTKoPBpjYjMjzRYvtcWWYqXuTbX451"
          }, "type": "transfer"
        }, "program": "system", "programId": {"_bn": "00"}
      }, {
        "accounts": [{"_bn": "5957cfc8a0e42253218140104fbeb444dec3d24b06d03de8efd6ea4d74b0f1b2"}, {"_bn": "5957cfc8a0e42253218140104fbeb444dec3d24b06d03de8efd6ea4d74b0f1b2"}, {"_bn": "49c5e99524f07898034804274203258b3165710477bd5762d3d2d93ad0a4c3bf"}, {"_bn": "2989d6a9ff6b2a168b81bed69f59efcb8172a8c663a80112cce0
Download .txt
gitextract_jl1rlllm/

├── .editorconfig
├── .github/
│   └── workflows/
│       └── main.yml
├── .gitignore
├── Dockerfile
├── LICENSE
├── README.md
├── babel.config.js
├── docker-compose.yml
├── jest.config.ts
├── nodemon.json
├── package.json
├── src/
│   ├── cli/
│   │   └── get-confirmed-transaction.ts
│   ├── config/
│   │   ├── config.test.ts
│   │   ├── config.ts
│   │   └── index.ts
│   ├── lib/
│   │   ├── discord/
│   │   │   ├── __mocks__/
│   │   │   │   └── index.ts
│   │   │   ├── index.ts
│   │   │   └── notifyDiscordSale.ts
│   │   ├── logger/
│   │   │   ├── index.ts
│   │   │   └── logger.ts
│   │   ├── marketplaces/
│   │   │   ├── __fixtures__/
│   │   │   │   ├── alphaArtSaleTx.ts
│   │   │   │   ├── digitalEyesSaleTx.ts
│   │   │   │   ├── exchangeArtSaleTx.ts
│   │   │   │   ├── exchangeArtSaleTxV2.ts
│   │   │   │   ├── magicEdenFailedTx.ts
│   │   │   │   ├── magicEdenSaleFromBidTx.ts
│   │   │   │   ├── magicEdenSaleTx.ts
│   │   │   │   ├── magicEdenSaleTxV2.ts
│   │   │   │   ├── openSeaBidTx.ts
│   │   │   │   ├── openSeaSale2Tx.ts
│   │   │   │   ├── openSeaSale3Tx.ts
│   │   │   │   ├── openSeaSaleTx.ts
│   │   │   │   ├── solanartBidTx.ts
│   │   │   │   ├── solanartDelistingTx.ts
│   │   │   │   ├── solanartListingTx.ts
│   │   │   │   ├── solanartSaleFromBidTx.ts
│   │   │   │   ├── solanartSaleTx.ts
│   │   │   │   ├── solanartSalesTxWithFloatingLamport.ts
│   │   │   │   └── solseaSaleTx.ts
│   │   │   ├── alphaArt.test.ts
│   │   │   ├── alphaArt.ts
│   │   │   ├── digitalEyes.test.ts
│   │   │   ├── digitalEyes.ts
│   │   │   ├── exchangeArt.test.ts
│   │   │   ├── exchangeArt.ts
│   │   │   ├── helper.test.ts
│   │   │   ├── helper.ts
│   │   │   ├── index.ts
│   │   │   ├── magicEden.test.ts
│   │   │   ├── magicEden.ts
│   │   │   ├── marketplaces.ts
│   │   │   ├── openSea.test.ts
│   │   │   ├── openSea.ts
│   │   │   ├── parseNFTSaleForAllMarkets.test.ts
│   │   │   ├── parseNFTSaleForAllMarkets.ts
│   │   │   ├── solanart.test.ts
│   │   │   ├── solanart.ts
│   │   │   ├── solsea.test.ts
│   │   │   ├── solsea.ts
│   │   │   └── types.ts
│   │   ├── notifier/
│   │   │   ├── index.ts
│   │   │   ├── notifier.test.ts
│   │   │   └── notifier.ts
│   │   ├── sleep/
│   │   │   ├── index.ts
│   │   │   └── sleep.ts
│   │   ├── solana/
│   │   │   ├── NFTData.ts
│   │   │   ├── connection.ts
│   │   │   └── index.ts
│   │   ├── truncateForAddress.ts
│   │   └── twitter/
│   │       ├── index.ts
│   │       └── notifyTwitter.ts
│   ├── server.ts
│   └── workers/
│       ├── initWorkers.test.ts
│       ├── initWorkers.ts
│       ├── notifyMagicEdenNFTSalesWorker.test.ts
│       ├── notifyMagicEdenNFTSalesWorker.ts
│       ├── notifyNFTSalesWorker.test.ts
│       ├── notifyNFTSalesWorker.ts
│       └── types.ts
└── tsconfig.json
Download .txt
SYMBOL INDEX (71 symbols across 28 files)

FILE: src/cli/get-confirmed-transaction.ts
  function run (line 3) | async function run(signature: string) {

FILE: src/config/config.ts
  type Subscription (line 3) | interface Subscription {
  type TwitterConfig (line 9) | interface TwitterConfig {
  type MagicEdenConfig (line 16) | interface MagicEdenConfig {
  type Config (line 22) | interface Config {
  type Env (line 30) | type Env = { [key: string]: string };
  type MutableConfig (line 32) | interface MutableConfig extends Config {
  function loadSubscriptions (line 38) | function loadSubscriptions(env: Env): Subscription[] {
  function loadConfig (line 75) | function loadConfig(env: Env): MutableConfig {

FILE: src/lib/discord/__mocks__/index.ts
  function initClient (line 3) | async function initClient(): Promise<Discord.Client> {
  function fetchDiscordChannel (line 12) | async function fetchDiscordChannel(

FILE: src/lib/discord/index.ts
  function initClient (line 8) | async function initClient(
  function fetchDiscordChannel (line 28) | async function fetchDiscordChannel(

FILE: src/lib/discord/notifyDiscordSale.ts
  function getStatus (line 18) | function getStatus() {
  function notifyDiscordSale (line 22) | async function notifyDiscordSale(
  function formatAddress (line 119) | function formatAddress(marketplace: Marketplace, address: string): string {

FILE: src/lib/logger/logger.ts
  method prefix (line 2) | prefix(level: string) {
  method log (line 5) | log(msg?: any, ...optionalParams: any[]) {
  method warn (line 8) | warn(msg?: any, ...optionalParams: any[]) {
  method error (line 11) | error(msg?: any, ...optionalParams: any[]) {

FILE: src/lib/marketplaces/alphaArt.ts
  method parseNFTSale (line 11) | parseNFTSale(web3Conn, txResp): Promise<NFTSale | null> {

FILE: src/lib/marketplaces/digitalEyes.ts
  method parseNFTSale (line 11) | parseNFTSale(web3Conn, txResp): Promise<NFTSale | null> {

FILE: src/lib/marketplaces/exchangeArt.ts
  method parseNFTSale (line 11) | parseNFTSale(web3Conn, txResp): Promise<NFTSale | null> {

FILE: src/lib/marketplaces/helper.ts
  function getTransfersFromInnerInstructions (line 15) | function getTransfersFromInnerInstructions(
  function txContainsLog (line 43) | function txContainsLog(
  function getTokenOriginFromTx (line 57) | function getTokenOriginFromTx(
  function wasTokenMovedInTx (line 77) | function wasTokenMovedInTx(tx: ParsedConfirmedTransaction): boolean {
  function getTokenDestinationFromTx (line 106) | function getTokenDestinationFromTx(
  function getTokenFromMeta (line 126) | function getTokenFromMeta(
  function getPriceInLamportForSolanaArt (line 138) | function getPriceInLamportForSolanaArt(
  function guessSellerByTransfers (line 170) | function guessSellerByTransfers(transfers: Transfer[]): string | undefin...
  function findLargestInnerInstructionIndex (line 186) | function findLargestInnerInstructionIndex(
  function parseNFTSaleOnTx (line 198) | async function parseNFTSaleOnTx(

FILE: src/lib/marketplaces/magicEden.ts
  method parseNFTSale (line 15) | parseNFTSale(web3Conn, txResp): Promise<NFTSale | null> {

FILE: src/lib/marketplaces/openSea.ts
  method parseNFTSale (line 11) | parseNFTSale(web3Conn, txResp): Promise<NFTSale | null> {

FILE: src/lib/marketplaces/parseNFTSaleForAllMarkets.ts
  function parseNFTSaleForAllMarkets (line 5) | async function parseNFTSaleForAllMarkets(

FILE: src/lib/marketplaces/solanart.ts
  method parseNFTSale (line 11) | parseNFTSale(web3Conn, txResp): Promise<NFTSale | null> {

FILE: src/lib/marketplaces/solsea.ts
  method parseNFTSale (line 11) | parseNFTSale(web3Conn, txResp): Promise<NFTSale | null> {

FILE: src/lib/marketplaces/types.ts
  type SaleMethod (line 5) | enum SaleMethod {
  type Marketplace (line 10) | interface Marketplace {
  type Transfer (line 22) | interface Transfer {
  type NFTSale (line 31) | interface NFTSale {

FILE: src/lib/notifier/notifier.ts
  type NotificationType (line 11) | enum NotificationType {
  type Notifier (line 15) | interface Notifier {
  type Platform (line 19) | enum Platform {
  function queueNotification (line 25) | function queueNotification(
  function newNotifierFactory (line 39) | async function newNotifierFactory(config: Config, nQueue: queue) {
  function logNotificationError (line 79) | function logNotificationError(err: unknown, platform: string) {

FILE: src/lib/sleep/sleep.ts
  function sleep (line 1) | async function sleep(ms: number) {

FILE: src/lib/solana/NFTData.ts
  type NFTData (line 5) | interface NFTData {
  function fetchNFTData (line 12) | async function fetchNFTData(

FILE: src/lib/solana/connection.ts
  function newConnection (line 11) | function newConnection(): Connection {
  type Opt (line 19) | interface Opt extends ConfirmedSignaturesForAddress2Options {
  function fetchWeb3Transactions (line 23) | async function fetchWeb3Transactions(

FILE: src/lib/truncateForAddress.ts
  function truncateForAddress (line 1) | function truncateForAddress(str: String): string {

FILE: src/lib/twitter/index.ts
  function initTwitterClient (line 3) | async function initTwitterClient(tokens: TwitterApiTokens) {

FILE: src/lib/twitter/notifyTwitter.ts
  function notifyTwitter (line 5) | async function notifyTwitter(
  function getDataType (line 29) | async function getDataType(buffer: Buffer) {
  function getImageDataFromUrl (line 36) | async function getImageDataFromUrl(url: string) {

FILE: src/workers/initWorkers.test.ts
  function sleep (line 8) | async function sleep(ms: number) {
  method execute (line 16) | async execute() {}
  method execute (line 31) | async execute() {

FILE: src/workers/initWorkers.ts
  function initWorkers (line 7) | async function initWorkers(

FILE: src/workers/notifyMagicEdenNFTSalesWorker.ts
  type CollectionActivity (line 11) | interface CollectionActivity {
  function newNotificationsTracker (line 26) | function newNotificationsTracker(limit: number = 50) {
  function newWorker (line 42) | function newWorker(

FILE: src/workers/notifyNFTSalesWorker.ts
  type Project (line 8) | interface Project {
  function getSignatureFromTx (line 13) | function getSignatureFromTx(
  function newNotificationsTracker (line 22) | function newNotificationsTracker(limit: number = 50) {
  function newWorker (line 38) | function newWorker(

FILE: src/workers/types.ts
  type Worker (line 1) | interface Worker {
Condensed preview — 80 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (365K chars).
[
  {
    "path": ".editorconfig",
    "chars": 330,
    "preview": "# top-most EditorConfig file\nroot = true\n\n# Unix-style newlines with a newline ending every file\n[*]\ninsert_final_newlin"
  },
  {
    "path": ".github/workflows/main.yml",
    "chars": 1359,
    "preview": "# This is a basic workflow to help you get started with Actions\n\nname: CI\n\n# Controls when the workflow will run\non:\n  #"
  },
  {
    "path": ".gitignore",
    "chars": 412,
    "preview": "# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.\n\n# dependencies\nnode_modules\n/.pnp"
  },
  {
    "path": "Dockerfile",
    "chars": 756,
    "preview": "FROM node:16 as dependencies\nWORKDIR /solananftbot\nCOPY package.json yarn.lock .env ./\nRUN yarn install --frozen-lockfil"
  },
  {
    "path": "LICENSE",
    "chars": 1069,
    "preview": "MIT License\n\nCopyright (c) 2021 milktoastlab\n\nPermission is hereby granted, free of charge, to any person obtaining a co"
  },
  {
    "path": "README.md",
    "chars": 8870,
    "preview": "# Solana NFT Bot\n\nSolana NFT bot is a helpful bot for your Solana NFT projects.\n\n## Sponsor\nThis project is proudly spon"
  },
  {
    "path": "babel.config.js",
    "chars": 133,
    "preview": "module.exports = {\n  presets: [\n    [\"@babel/preset-env\", { targets: { node: \"current\" } }],\n    \"@babel/preset-typescri"
  },
  {
    "path": "docker-compose.yml",
    "chars": 127,
    "preview": "version: \"3.9\"\nservices:\n  bot:\n    image: milktoastlab/solananftbot\n    ports:\n      - \"4000:4000\"\n    env_file:\n      "
  },
  {
    "path": "jest.config.ts",
    "chars": 6535,
    "preview": "/*\n * For a detailed explanation regarding each configuration property, visit:\n * https://jestjs.io/docs/configuration\n "
  },
  {
    "path": "nodemon.json",
    "chars": 109,
    "preview": "{\n  \"ignore\": [\"**/*.test.ts\", \"node_modules\"],\n  \"watch\": [\"src\"],\n  \"exec\": \"yarn ts-run\",\n  \"ext\": \"ts\"\n}\n"
  },
  {
    "path": "package.json",
    "chars": 1354,
    "preview": "{\n  \"name\": \"@milktoast-lab/SolNFTBot\",\n  \"version\": \"0.15.2\",\n  \"main\": \"dist/src/index.js\",\n  \"types\": \"dist/src/index"
  },
  {
    "path": "src/cli/get-confirmed-transaction.ts",
    "chars": 343,
    "preview": "import { newConnection } from \"../lib/solana\";\n\nasync function run(signature: string) {\n  const conn = newConnection();\n"
  },
  {
    "path": "src/config/config.test.ts",
    "chars": 2214,
    "preview": "import { loadConfig } from \"./config\";\n\njest.spyOn(console, \"error\");\n\ndescribe(\"config\", () => {\n  test(\"load single su"
  },
  {
    "path": "src/config/config.ts",
    "chars": 2580,
    "preview": "import logger from \"lib/logger\";\n\nexport interface Subscription {\n  discordChannelId: string;\n  type: \"NFTSale\";\n  mintA"
  },
  {
    "path": "src/config/index.ts",
    "chars": 26,
    "preview": "export * from \"./config\";\n"
  },
  {
    "path": "src/lib/discord/__mocks__/index.ts",
    "chars": 566,
    "preview": "import Discord, {TextChannel} from \"discord.js\";\n\nexport async function initClient(): Promise<Discord.Client> {\n  const "
  },
  {
    "path": "src/lib/discord/index.ts",
    "chars": 1079,
    "preview": "import Discord, { Intents, TextChannel } from \"discord.js\";\nimport logger from \"lib/logger\";\nconst myIntents = new Inten"
  },
  {
    "path": "src/lib/discord/notifyDiscordSale.ts",
    "chars": 2863,
    "preview": "import Discord, {\n  MessageActionRow,\n  MessageEmbed,\n  TextChannel,\n} from \"discord.js\";\nimport { Marketplace, NFTSale,"
  },
  {
    "path": "src/lib/logger/index.ts",
    "chars": 36,
    "preview": "export { default } from \"./logger\";\n"
  },
  {
    "path": "src/lib/logger/logger.ts",
    "chars": 475,
    "preview": "const logger = {\n  prefix(level: string) {\n    return `[${level}] ${new Date().toISOString()}:`;\n  },\n  log(msg?: any, ."
  },
  {
    "path": "src/lib/marketplaces/__fixtures__/alphaArtSaleTx.ts",
    "chars": 12662,
    "preview": "import { ParsedConfirmedTransaction } from \"@solana/web3.js\";\n\nconst saleTx: ParsedConfirmedTransaction = {\n  blockTime:"
  },
  {
    "path": "src/lib/marketplaces/__fixtures__/digitalEyesSaleTx.ts",
    "chars": 13033,
    "preview": "import { ParsedConfirmedTransaction } from \"@solana/web3.js\";\n\nconst saleTx: ParsedConfirmedTransaction = {\n  blockTime:"
  },
  {
    "path": "src/lib/marketplaces/__fixtures__/exchangeArtSaleTx.ts",
    "chars": 9759,
    "preview": "import { ParsedConfirmedTransaction } from \"@solana/web3.js\";\n\nconst saleTx: ParsedConfirmedTransaction = {\n  blockTime:"
  },
  {
    "path": "src/lib/marketplaces/__fixtures__/exchangeArtSaleTxV2.ts",
    "chars": 12741,
    "preview": "import { ParsedConfirmedTransaction } from \"@solana/web3.js\";\n\nconst saleTx: ParsedConfirmedTransaction = {\n  blockTime:"
  },
  {
    "path": "src/lib/marketplaces/__fixtures__/magicEdenFailedTx.ts",
    "chars": 8109,
    "preview": "import {ParsedConfirmedTransaction} from \"@solana/web3.js\";\n\nconst saleTx: ParsedConfirmedTransaction = {\n  \"blockTime\":"
  },
  {
    "path": "src/lib/marketplaces/__fixtures__/magicEdenSaleFromBidTx.ts",
    "chars": 9986,
    "preview": "import { ParsedConfirmedTransaction } from \"@solana/web3.js\";\n\nconst saleTx: ParsedConfirmedTransaction = {\n  blockTime:"
  },
  {
    "path": "src/lib/marketplaces/__fixtures__/magicEdenSaleTx.ts",
    "chars": 9418,
    "preview": "import { ParsedConfirmedTransaction } from \"@solana/web3.js\";\n\nconst saleTx: ParsedConfirmedTransaction = {\n  blockTime:"
  },
  {
    "path": "src/lib/marketplaces/__fixtures__/magicEdenSaleTxV2.ts",
    "chars": 18055,
    "preview": "import { ParsedConfirmedTransaction } from \"@solana/web3.js\";\n\nconst saleTx: ParsedConfirmedTransaction = {\n  blockTime:"
  },
  {
    "path": "src/lib/marketplaces/__fixtures__/openSeaBidTx.ts",
    "chars": 8522,
    "preview": "import {ParsedConfirmedTransaction} from \"@solana/web3.js\";\n\nconst tx: ParsedConfirmedTransaction = {\n  \"blockTime\": 165"
  },
  {
    "path": "src/lib/marketplaces/__fixtures__/openSeaSale2Tx.ts",
    "chars": 21365,
    "preview": "import { ParsedConfirmedTransaction } from \"@solana/web3.js\";\n\nconst saleTx: ParsedConfirmedTransaction = {\n  blockTime:"
  },
  {
    "path": "src/lib/marketplaces/__fixtures__/openSeaSale3Tx.ts",
    "chars": 25404,
    "preview": "import { ParsedConfirmedTransaction } from \"@solana/web3.js\";\n\nconst saleTx: ParsedConfirmedTransaction = {\n  blockTime:"
  },
  {
    "path": "src/lib/marketplaces/__fixtures__/openSeaSaleTx.ts",
    "chars": 18520,
    "preview": "import {ParsedConfirmedTransaction} from \"@solana/web3.js\";\n\nconst saleTx: ParsedConfirmedTransaction = {\n  \"blockTime\":"
  },
  {
    "path": "src/lib/marketplaces/__fixtures__/solanartBidTx.ts",
    "chars": 9607,
    "preview": "import { ParsedConfirmedTransaction } from \"@solana/web3.js\";\n\nconst tx: ParsedConfirmedTransaction = {\n  blockTime: 164"
  },
  {
    "path": "src/lib/marketplaces/__fixtures__/solanartDelistingTx.ts",
    "chars": 10697,
    "preview": "import { ParsedConfirmedTransaction } from \"@solana/web3.js\";\n\nconst tx: ParsedConfirmedTransaction = {\n  blockTime: 164"
  },
  {
    "path": "src/lib/marketplaces/__fixtures__/solanartListingTx.ts",
    "chars": 10280,
    "preview": "import { ParsedConfirmedTransaction } from \"@solana/web3.js\";\n\nconst tx: ParsedConfirmedTransaction = {\n  blockTime: 164"
  },
  {
    "path": "src/lib/marketplaces/__fixtures__/solanartSaleFromBidTx.ts",
    "chars": 10511,
    "preview": "import { ParsedConfirmedTransaction } from \"@solana/web3.js\";\n\nconst saleTx: ParsedConfirmedTransaction = {\n  blockTime:"
  },
  {
    "path": "src/lib/marketplaces/__fixtures__/solanartSaleTx.ts",
    "chars": 13068,
    "preview": "import { ParsedConfirmedTransaction } from \"@solana/web3.js\";\n\nconst saleTx: ParsedConfirmedTransaction = {\n  blockTime:"
  },
  {
    "path": "src/lib/marketplaces/__fixtures__/solanartSalesTxWithFloatingLamport.ts",
    "chars": 12432,
    "preview": "import { ParsedConfirmedTransaction } from \"@solana/web3.js\";\n\nconst sale: ParsedConfirmedTransaction = {\n  blockTime: 1"
  },
  {
    "path": "src/lib/marketplaces/__fixtures__/solseaSaleTx.ts",
    "chars": 9691,
    "preview": "import { ParsedConfirmedTransaction } from \"@solana/web3.js\";\n\nconst saleTx: ParsedConfirmedTransaction = {\n  blockTime:"
  },
  {
    "path": "src/lib/marketplaces/alphaArt.test.ts",
    "chars": 1867,
    "preview": "import alphaArt from \"./alphaArt\";\nimport alphaArtSaleTx from \"./__fixtures__/alphaArtSaleTx\";\nimport { Connection } fro"
  },
  {
    "path": "src/lib/marketplaces/alphaArt.ts",
    "chars": 555,
    "preview": "import { Marketplace, NFTSale } from \"./types\";\nimport { parseNFTSaleOnTx } from \"./helper\";\n\nconst alphaArt: Marketplac"
  },
  {
    "path": "src/lib/marketplaces/digitalEyes.test.ts",
    "chars": 2604,
    "preview": "import digitalEyes from \"./digitalEyes\";\nimport digitalEyesSaleTx from \"./__fixtures__/digitalEyesSaleTx\";\nimport { Conn"
  },
  {
    "path": "src/lib/marketplaces/digitalEyes.ts",
    "chars": 594,
    "preview": "import { Marketplace, NFTSale } from \"./types\";\nimport { parseNFTSaleOnTx } from \"./helper\";\n\nconst digitalEyes: Marketp"
  },
  {
    "path": "src/lib/marketplaces/exchangeArt.test.ts",
    "chars": 4703,
    "preview": "import exchangeArt from \"./exchangeArt\";\nimport exchangeArtSaleTx from \"./__fixtures__/exchangeArtSaleTx\";\nimport exchan"
  },
  {
    "path": "src/lib/marketplaces/exchangeArt.ts",
    "chars": 591,
    "preview": "import { Marketplace, NFTSale } from \"./types\";\nimport { parseNFTSaleOnTx } from \"./helper\";\n\nconst exchangeArt: Marketp"
  },
  {
    "path": "src/lib/marketplaces/helper.test.ts",
    "chars": 5883,
    "preview": "import { parseNFTSaleOnTx } from \"./helper\";\nimport solanartSalesTxWithFloatingLamport from \"./__fixtures__/solanartSale"
  },
  {
    "path": "src/lib/marketplaces/helper.ts",
    "chars": 8460,
    "preview": "import {\n  Connection,\n  ParsedConfirmedTransaction,\n  ParsedConfirmedTransactionMeta,\n  ParsedInnerInstruction,\n  Parse"
  },
  {
    "path": "src/lib/marketplaces/index.ts",
    "chars": 138,
    "preview": "export * from \"./types\";\nexport { default as parseNFTSale } from \"./parseNFTSaleForAllMarkets\";\nexport { default } from "
  },
  {
    "path": "src/lib/marketplaces/magicEden.test.ts",
    "chars": 316,
    "preview": "import magicEden from \"./magicEden\";\n\njest.mock(\"lib/solana/NFTData\", () => {\n  return {\n    fetchNFTData: () => {\n     "
  },
  {
    "path": "src/lib/marketplaces/magicEden.ts",
    "chars": 771,
    "preview": "import { Marketplace, NFTSale } from \"./types\";\nimport { parseNFTSaleOnTx } from \"lib/marketplaces/helper\";\n\nconst magic"
  },
  {
    "path": "src/lib/marketplaces/marketplaces.ts",
    "chars": 530,
    "preview": "import { Marketplace } from \"./types\";\nimport magicEden from \"./magicEden\";\nimport digitalEyes from \"./digitalEyes\";\nimp"
  },
  {
    "path": "src/lib/marketplaces/openSea.test.ts",
    "chars": 3018,
    "preview": "import openSea from \"./openSea\";\nimport openSeaSaleTx from \"./__fixtures__/openSeaSaleTx\";\nimport openSeaSale2Tx from \"."
  },
  {
    "path": "src/lib/marketplaces/openSea.ts",
    "chars": 586,
    "preview": "import { Marketplace, NFTSale } from \"./types\";\nimport { parseNFTSaleOnTx } from \"./helper\";\n\nconst openSea: Marketplace"
  },
  {
    "path": "src/lib/marketplaces/parseNFTSaleForAllMarkets.test.ts",
    "chars": 1554,
    "preview": "import magicEdenSaleTx from \"./__fixtures__/magicEdenSaleTx\";\nimport magicEdenSaleTxV2 from \"./__fixtures__/magicEdenSal"
  },
  {
    "path": "src/lib/marketplaces/parseNFTSaleForAllMarkets.ts",
    "chars": 573,
    "preview": "import { NFTSale } from \"./types\";\nimport marketplaces from \"./index\";\nimport { Connection, ParsedConfirmedTransaction }"
  },
  {
    "path": "src/lib/marketplaces/solanart.test.ts",
    "chars": 4323,
    "preview": "import solanart from \"./solanart\";\nimport solanartSaleTx from \"./__fixtures__/solanartSaleTx\";\nimport solanartSaleFromBi"
  },
  {
    "path": "src/lib/marketplaces/solanart.ts",
    "chars": 557,
    "preview": "import { Marketplace, NFTSale } from \"./types\";\nimport { parseNFTSaleOnTx } from \"./helper\";\n\nconst solanart: Marketplac"
  },
  {
    "path": "src/lib/marketplaces/solsea.test.ts",
    "chars": 1740,
    "preview": "import solsea from \"./solsea\";\nimport solseaSaleTx from \"./__fixtures__/solseaSaleTx\";\nimport { Connection } from \"@sola"
  },
  {
    "path": "src/lib/marketplaces/solsea.ts",
    "chars": 552,
    "preview": "import { Marketplace, NFTSale } from \"./types\";\nimport { parseNFTSaleOnTx } from \"./helper\";\n\nconst solsea: Marketplace "
  },
  {
    "path": "src/lib/marketplaces/types.ts",
    "chars": 910,
    "preview": "import { Connection, ParsedConfirmedTransaction } from \"@solana/web3.js\";\nimport { MagicEdenConfig } from \"config\";\nimpo"
  },
  {
    "path": "src/lib/notifier/index.ts",
    "chars": 28,
    "preview": "export * from \"./notifier\";\n"
  },
  {
    "path": "src/lib/notifier/notifier.test.ts",
    "chars": 1631,
    "preview": "import {newNotifierFactory, NotificationType} from \"./notifier\";\nimport {loadConfig} from \"config\";\nimport notifyDiscord"
  },
  {
    "path": "src/lib/notifier/notifier.ts",
    "chars": 2062,
    "preview": "import {Config} from \"config\";\nimport { initClient as initDiscordClient } from \"lib/discord\";\nimport initTwitterClient f"
  },
  {
    "path": "src/lib/sleep/index.ts",
    "chars": 33,
    "preview": "export {default} from './sleep';\n"
  },
  {
    "path": "src/lib/sleep/sleep.ts",
    "chars": 123,
    "preview": "export default async function sleep(ms: number) {\n  return new Promise((resolve) => {\n    setTimeout(resolve, ms);\n  });"
  },
  {
    "path": "src/lib/solana/NFTData.ts",
    "chars": 888,
    "preview": "import { Metaplex } from \"@metaplex-foundation/js\";\nimport { Connection, PublicKey } from \"@solana/web3.js\";\nimport logg"
  },
  {
    "path": "src/lib/solana/connection.ts",
    "chars": 1502,
    "preview": "import {\n  ConfirmedSignaturesForAddress2Options,\n  Connection,\n  ConnectionConfig,\n  ParsedTransactionWithMeta,\n  Publi"
  },
  {
    "path": "src/lib/solana/index.ts",
    "chars": 71,
    "preview": "export * from \"./connection\";\nexport const LamportPerSOL = 1000000000;\n"
  },
  {
    "path": "src/lib/truncateForAddress.ts",
    "chars": 138,
    "preview": "export default function truncateForAddress(str: String): string {\n  return str.substring(0, 6) + \"...\" + str.substring(s"
  },
  {
    "path": "src/lib/twitter/index.ts",
    "chars": 328,
    "preview": "import TwitterApi, { TwitterApiTokens } from \"twitter-api-v2\";\n\nasync function initTwitterClient(tokens: TwitterApiToken"
  },
  {
    "path": "src/lib/twitter/notifyTwitter.ts",
    "chars": 1260,
    "preview": "import TwitterAPI from \"twitter-api-v2\";\nimport { NFTSale, SaleMethod } from \"lib/marketplaces\";\nimport axios from \"axio"
  },
  {
    "path": "src/server.ts",
    "chars": 4605,
    "preview": "import express from \"express\";\nimport { initClient as initDiscordClient } from \"lib/discord\";\nimport initWorkers from \"w"
  },
  {
    "path": "src/workers/initWorkers.test.ts",
    "chars": 1000,
    "preview": "import initWorkers from \"./initWorkers\";\nimport { Worker } from \"./types\";\n\njest.useFakeTimers();\njest.spyOn(global, \"se"
  },
  {
    "path": "src/workers/initWorkers.ts",
    "chars": 812,
    "preview": "import { Worker } from \"./types\";\nimport logger from \"lib/logger\";\nimport sleep from \"lib/sleep\";\n\nconst defaultInterval"
  },
  {
    "path": "src/workers/notifyMagicEdenNFTSalesWorker.test.ts",
    "chars": 2023,
    "preview": "import { NotificationType } from \"lib/notifier\";\nimport { MagicEdenConfig } from \"config\";\nimport { CollectionActivity }"
  },
  {
    "path": "src/workers/notifyMagicEdenNFTSalesWorker.ts",
    "chars": 3311,
    "preview": "import axios from \"axios\";\nimport { MagicEdenConfig } from \"config\";\nimport { NFTSale, SaleMethod } from \"lib/marketplac"
  },
  {
    "path": "src/workers/notifyNFTSalesWorker.test.ts",
    "chars": 2410,
    "preview": "import { NotificationType } from \"lib/notifier\";\n\njest.mock(\"lib/solana/NFTData\", () => {\n  return {\n    fetchNFTData: ("
  },
  {
    "path": "src/workers/notifyNFTSalesWorker.ts",
    "chars": 2496,
    "preview": "import { Worker } from \"./types\";\nimport { Connection, ParsedConfirmedTransaction } from \"@solana/web3.js\";\nimport { fet"
  },
  {
    "path": "src/workers/types.ts",
    "chars": 60,
    "preview": "export interface Worker {\n  execute: () => Promise<void>;\n}\n"
  },
  {
    "path": "tsconfig.json",
    "chars": 599,
    "preview": "{\n  \"compilerOptions\": {\n    \"module\": \"commonjs\",\n    \"target\": \"es2019\",\n    \"outDir\": \"dist\",\n    \"rootDir\": \"\",\n    "
  }
]

About this extraction

This page contains the full source code of the milktoastlab/SolanaNFTBot GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 80 files (333.3 KB), approximately 119.2k tokens, and a symbol index with 71 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!