Skip to content

onsol-labs/chatgpt-plugin

 
 

Repository files navigation

Solana ChatGPT Plugin

A ChatGPT plugin for Solana. Install as an unverified plugin with url https://solana-gpt-plugin.onrender.com.

Transfer Sol in ChatGPT Buy NFTs in ChatGPT Search NFTs in ChatGPT

Endpoints

ChatGPT can POST to the following resources, as described by .well-known/openapi.yaml.

/getAccountInfo { address }

Returns the output of getAccountInfo method from the RPC with buffer data, and if it can be deserialized by its program IDL, then the response payload has additional field called extended that has a JSON serialized string of the anchor data. Chat GPT's plugin model seems to be able to read this pretty well.

{
  ...,
  "extended": "{\"authority\":\"8fbqVvpK3Dj7fdP2c8JJhtD7Zy3n9qtwAeGfbkgPu625\",\"numMinted\":50}"
}
/getBalance { address }

Returns

{
  "sol": 0.40296
}
/getAssetsByOwner { address }

Returns the assets returned by the Metaplex Read API spec

/getTransaction { signature }

Accepts

{
  "signature": "h51pjmFcn8LkxejofUQoDYkyubUKaB7bNtyMMSCCamSEYRutS2G2vm2w1ERShko8boRqdaaTAs4MR6sGYkTByNF"
}

Returns the transaction status metadata for the getTransaction method from the Solana RPC.

/getTokenAccounts { address }

Returns the token accounts owned by a user with an amount > 0. Derived from the getTokenAccountsByOwner method on the Solana RPC.

/getSignaturesForAddress { address }

Returns the transaction signatures returned in getSignaturesForAddress method from the Solana RPC.

Endpoints for NFT discovery

These endpoints are under development and subject to rapid change. These currently use the Hyperspace API.

/getCollectionsByFloorPrice { maxFloorPrice, minFloorPrice, orderBy, pageSize }

Returns

{
  "projects": [
    {
      "id": "<hyperspace-collection-id or pubkey>",
      "desc": "collection description",
      "img": "collection image url",
      "website": "collection website url",
      "floor_price": 0.1
    }
  ],
  "hasMore": true,
  "currentPage'": 1
}
/getListedCollectionNFTs { projectId, pageSize, priceOrder }

Returns LLM friendly response of available NFTs:

{ 
  "listings": [
    {
      "price": 0.1,
      "token": "<token-address-pubkey>",
      "marketplace": "<marketplace-pubkey>"
    }
  ],
  "hasMore": true,
  "currentPage": 1
} 

Endpoints for Sending Transactions

/createBuyTransaction { token, price }

Right now we are trusting Hyperspace to craft a valid transaction for us. In the future we will setup a write interface for programs on Solana to adhere to in order to be a target of LLM transaction composition.

Returns

{
  "linkToSign": "<url-to-sign-transaction>" 
}
/createTransferSol { destination, amount }

Creates a transaction to transfer an amount in Sol.

Returns

{
  "linkToSign": "<url-to-sign-transaction>" 
}
/createTransferToken { destination, mint, amount }

Creates a transaction to transfer an amount of token (from the mint).

Returns

{
  "linkToSign": "<url-to-sign-transaction>" 
}

Endpoints for Transaction Composition (not LLM accessible)

These are also subject to change, and we may create actual webpages to inspect the transaction before signing. However for now, these are simply redirect links to ensure that SolanaPay QR codes show up in the ChatGPT link previews.

/page/:methodName

Returns a webpage with OpenGraph metadata that will be rendered in the ChatGPT rich link preview. All ChatGPT links should be proxied through this sort of pipeline to maximize user engagement of links. The og:image tag is to /qr/:methodName to show a SolanaPay QR code in link previews.

This is currently a blank page, but we may show a preview of the transaction in the future.

/qr/:methodName

Returns a PNG QR code that has been optimized to show in the particular aspect ratio of ChatGPT plugins. This just encodes a SolanaPay link that redirects to /sign/:methodName.

/sign/:methodName

This is the final redirect link that actually returns transaction bytes in a SolanaPay compatible format so users can sign transactions that are recommended by ChatGPT.

{
  "transaction": "<base64-encoded-transaction-bytes>"
}

Development

To install dependencies, just execute yarn. This project uses node with version >=16.17.0.

To start a development server, execute yarn dev. This will start the plugin available from localhost:3333 with its own configuration settings in .well-known-dev/.

License

This codebase is released under Apache License 2.0.

Disclaimer

By accessing or using this codebase or any of its components, you accept and agree with the Disclaimer.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • TypeScript 96.0%
  • Python 4.0%