Implemented NFT creation with Liquidity Pool (#224)

# Pull Request Description

## Changes Made
This PR adds the following changes:

- Implemented NFT creation with integrated liquidity pools in 3land
create NFT functionality

  
## Implementation Details

- Each NFT can be created with an associated liquidity pool
- Liquidity pools are identified by a unique poolName per wallet
- Multiple NFT editions can be created for the same liquidity pool
- Liquidity pools support any SPL token
- The SPL token used for the liquidity pool matches the NFT edition
token
- Sale proceeds (primary and secondary) are directed to the liquidity
pool
- Royalties from sales are automatically added to the liquidity pool
- NFT holders can burn their NFT to reclaim their investment
- Wallet addresses are restricted to one liquidity pool per poolName per
SPL token

## Transaction executed when testing
Example transactions created using solana-agent-kit:

1. First NFT edition with pool (pool 1):
https://dev.3.land/item/fXajTSwvrFCzaSL9mKE1KtTZ9wpChHC8egeXarMx3oD

2. Second edition with same pool (pool 1):
https://dev.3.land/item/8LdRScybmPQXkDdF2wafMSQ159ZDwckG1Pq7EkwGMFwW

3. Third edition with new pool (same SPL token):
https://dev.3.land/item/4HogLfgrgMYPpDqQK6Kw4kyGVtc7iu5ftBZuVRiPLm94

4. Fourth edition with new pool (different SPL token):
https://dev.3.land/item/FmPSPrNw9AoCCvUceHoXHuaFp2nC7GZEqyBsGpWEsMDM

## Additional Notes

- All features have been thoroughly tested and verified working
- The implementation maintains backward compatibility with existing NFT
creation
- Liquidity pool operations are atomic and maintain consistent state
- Pool naming restrictions prevent confusion and potential conflicts

## Checklist
- [X ] I have tested these changes locally
- [ X] I have updated the documentation
- [X ] I have added a transaction link
This commit is contained in:
aryan
2025-01-18 01:12:12 +05:30
committed by GitHub
8 changed files with 420 additions and 64 deletions

View File

@@ -134,10 +134,7 @@ console.log("Token Mint Address:", result.mint.toString());
```
### Create NFT Collection on 3Land
```typescript
const optionsWithBase58: StoreInitOptions = {
privateKey: "",
isMainnet: true, // if false, collection will be created on devnet 3.land (dev.3.land)
};
const isDevnet = true; // (Optional) if not present TX takes place in Mainnet
const collectionOpts: CreateCollectionOptions = {
collectionName: "",
@@ -147,18 +144,16 @@ const optionsWithBase58: StoreInitOptions = {
};
const result = await agent.create3LandCollection(
optionsWithBase58,
collectionOpts
collectionOpts,
isDevnet, // (Optional) if not present TX takes place in Mainnet
);
```
### Create NFT on 3Land
When creating an NFT using 3Land's tool, it automatically goes for sale on 3.land website
```typescript
const optionsWithBase58: StoreInitOptions = {
privateKey: "",
isMainnet: true, // if false, listing will be on devnet 3.land (dev.3.land)
};
const isDevnet = true; // (Optional) if not present TX takes place in Mainnet
const withPool = true; // (Optional) only present if NFT will be created with a Liquidity Pool for a specific SPL token
const collectionAccount = ""; //hash for the collection
const createItemOptions: CreateSingleOptions = {
itemName: "",
@@ -170,15 +165,15 @@ const createItemOptions: CreateSingleOptions = {
{ trait_type: "", value: "" },
],
price: 0, //100000000 == 0.1 sol, can be set to 0 for a free mint
splHash: "", //present if listing is on a specific SPL token, if not present sale will be on $SOL, must be present if "withPool" is true
poolName: "", // Only present if "withPool" is true
mainImageUrl: "",
splHash: "", //present if listing is on a specific SPL token, if not present sale will be on $SOL
};
const isMainnet = true;
const result = await agent.create3LandNft(
optionsWithBase58,
collectionAccount,
createItemOptions,
isMainnet
isDevnet, // (Optional) if not present TX takes place in Mainnet
withPool
);
```

View File

@@ -23,7 +23,7 @@
"author": "sendaifun",
"license": "Apache-2.0",
"dependencies": {
"@3land/listings-sdk": "^0.0.4",
"@3land/listings-sdk": "^0.0.6",
"@ai-sdk/openai": "^1.0.11",
"@bonfida/spl-name-service": "^3.0.7",
"@cks-systems/manifest-sdk": "0.1.59",

371
pnpm-lock.yaml generated
View File

@@ -9,8 +9,8 @@ importers:
.:
dependencies:
'@3land/listings-sdk':
specifier: ^0.0.4
version: 0.0.4(@types/node@22.10.5)(arweave@1.15.5)(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.2)(utf-8-validate@5.0.10)
specifier: ^0.0.6
version: 0.0.6(@types/node@22.10.5)(arweave@1.15.5)(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.2)(utf-8-validate@5.0.10)
'@ai-sdk/openai':
specifier: ^1.0.11
version: 1.0.11(zod@3.24.1)
@@ -174,8 +174,8 @@ importers:
packages:
'@3land/listings-sdk@0.0.4':
resolution: {integrity: sha512-Ljq8R4e7y+wl4m8BGhiInFPCHEzHZZFz1qghnbc8B3bLEKXWM9+2gZOCAa84rdUKuLfzenEdeS2LclTKhdKTFQ==}
'@3land/listings-sdk@0.0.6':
resolution: {integrity: sha512-1OG4qddbij7kLGcyRvwA9WUiif7DJi2gEWODHF4NnfgQHRl22yLSFHZeHPLlo9mE1T2LZnn0I6HtUxvUtCHCAQ==}
'@ai-sdk/openai@1.0.11':
resolution: {integrity: sha512-qI9s7Slma5i5bB4yYVlFdcG3PNDwdqivPT1Dr8adDX92nSSpILjgFIooS5yys9sXjvvcfOi/WXbDvVhLSRRlvg==}
@@ -612,6 +612,12 @@ packages:
engines: {node: '>=6'}
hasBin: true
'@hapi/hoek@9.3.0':
resolution: {integrity: sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==}
'@hapi/topo@5.1.0':
resolution: {integrity: sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==}
'@humanfs/core@0.19.1':
resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==}
engines: {node: '>=18.18.0'}
@@ -1160,6 +1166,15 @@ packages:
'@shikijs/vscode-textmate@10.0.1':
resolution: {integrity: sha512-fTIQwLF+Qhuws31iw7Ncl1R3HUDtGwIipiJ9iU+UsDUwMhegFcQKQHd51nZjb7CArq0MvON8rbgCGQYWHUKAdg==}
'@sideway/address@4.1.5':
resolution: {integrity: sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==}
'@sideway/formula@3.0.1':
resolution: {integrity: sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==}
'@sideway/pinpoint@2.0.0':
resolution: {integrity: sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==}
'@sindresorhus/is@4.6.0':
resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==}
engines: {node: '>=10'}
@@ -1304,6 +1319,10 @@ packages:
resolution: {integrity: sha512-LZmYCKcPQDtJgecvWOgT/cnoIQPWjdH+QVyzPcFvyDUiT0DiRjZaam4aqNUyvchLFhzgunv3d9xOoyE34ofdoQ==}
engines: {node: '>= 10'}
'@solana/spl-token@0.2.0':
resolution: {integrity: sha512-RWcn31OXtdqIxmkzQfB2R+WpsJOVS6rKuvpxJFjvik2LyODd+WN58ZP3Rpjpro03fscGAkzlFuP3r42doRJgyQ==}
engines: {node: '>= 14'}
'@solana/spl-token@0.3.11':
resolution: {integrity: sha512-bvohO3rIMSVL24Pb+I4EYTJ6cL82eFpInEXD/I8K8upOGjpqHsKUoAempR/RnUlI1qSFNyFlWJfu6MNUgfbCQQ==}
engines: {node: '>=16'}
@@ -1411,6 +1430,9 @@ packages:
resolution: {integrity: sha512-tuwHtoYzvqnahsMrecfNNkQceCYwgiY0qKS8RwqtaxvDEgjm0E+0bXwKz2eUD3ZFYifomJmRKDmSBx9yQzAeMQ==}
engines: {node: '>=20.18.0'}
'@ts-morph/common@0.19.0':
resolution: {integrity: sha512-Unz/WHmd4pGax91rdIKWi51wnVUW11QttMEPpBiBgIewnc9UQIX7UDLxr5vRlqeByXCwhkF6VabSsI0raWcyAQ==}
'@tsconfig/node10@1.0.11':
resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==}
@@ -1662,6 +1684,10 @@ packages:
'@solana/web3.js': ^1.78.4
solana-bankrun: ^0.2.0
anchor-client-gen@0.28.1:
resolution: {integrity: sha512-Gi205FuTSk1+haoYAGBDAA4h0X1xfmY0C++CQIWwtXIMCSy5+71XEaFMPgmjtYdvVJoAL021NqVrDiBHhNJ+fQ==}
hasBin: true
ansi-escapes@4.3.2:
resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==}
engines: {node: '>=8'}
@@ -1710,6 +1736,9 @@ packages:
arg@4.1.3:
resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==}
arg@5.0.2:
resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==}
argparse@2.0.1:
resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
@@ -1814,6 +1843,9 @@ packages:
bl@4.1.0:
resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==}
bluebird@3.7.2:
resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==}
bn.js@4.11.6:
resolution: {integrity: sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==}
@@ -1914,6 +1946,10 @@ packages:
resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
engines: {node: '>=10'}
camelcase@7.0.1:
resolution: {integrity: sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==}
engines: {node: '>=14.16'}
ccount@2.0.1:
resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==}
@@ -1942,6 +1978,10 @@ packages:
resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==}
engines: {node: '>= 16'}
check-more-types@2.24.0:
resolution: {integrity: sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==}
engines: {node: '>= 0.8.0'}
chownr@1.1.4:
resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==}
@@ -1984,6 +2024,9 @@ packages:
resolution: {integrity: sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==}
engines: {node: '>=0.8'}
code-block-writer@12.0.0:
resolution: {integrity: sha512-q4dMFMlXtKR3XNBHyMHt/3pwYNA69EDk00lloMOaaUMKPUXBw6lpXtbu3MMVG6/uOihGnRDOlkyqsONEUj60+w==}
color-convert@2.0.1:
resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
engines: {node: '>=7.0.0'}
@@ -2095,6 +2138,15 @@ packages:
supports-color:
optional: true
debug@4.3.4:
resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==}
engines: {node: '>=6.0'}
peerDependencies:
supports-color: '*'
peerDependenciesMeta:
supports-color:
optional: true
debug@4.4.0:
resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==}
engines: {node: '>=6.0'}
@@ -2205,6 +2257,9 @@ packages:
resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==}
engines: {node: '>= 0.4'}
duplexer@0.1.2:
resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==}
eastasianwidth@0.2.0:
resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
@@ -2379,6 +2434,9 @@ packages:
resolution: {integrity: sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==}
engines: {node: '>=6.5.0', npm: '>=3'}
event-stream@3.3.4:
resolution: {integrity: sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==}
event-target-shim@5.0.1:
resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==}
engines: {node: '>=6'}
@@ -2401,6 +2459,10 @@ packages:
resolution: {integrity: sha512-IzUmBGPR3+oUG9dUeXynyNmf91/3zUSJg1lCktzKw47OXuhco54U3r9B7O4XX+Rb1Itm9OZ2b0RkTs10bICOxA==}
engines: {node: '>=12.0.0'}
execa@5.1.1:
resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==}
engines: {node: '>=10'}
execa@8.0.1:
resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==}
engines: {node: '>=16.17'}
@@ -2550,6 +2612,9 @@ packages:
resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==}
engines: {node: '>= 0.6'}
from@0.1.7:
resolution: {integrity: sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==}
fs-constants@1.0.0:
resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==}
@@ -2587,6 +2652,10 @@ packages:
resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==}
engines: {node: '>=8'}
get-stream@6.0.1:
resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==}
engines: {node: '>=10'}
get-stream@8.0.1:
resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==}
engines: {node: '>=16'}
@@ -2702,6 +2771,10 @@ packages:
resolution: {integrity: sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==}
engines: {node: '>=10.19.0'}
human-signals@2.1.0:
resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==}
engines: {node: '>=10.17.0'}
human-signals@5.0.0:
resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==}
engines: {node: '>=16.17.0'}
@@ -2821,6 +2894,10 @@ packages:
resolution: {integrity: sha512-XVm7LOeLpTW4jV19QSH38vkswxoLud8sQ57YwJVTPWdiaI9I8keEhGFpBlslyVsgdQy4Opg8QOLb8YRgsyZiQg==}
engines: {node: '>=10'}
is-stream@2.0.1:
resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==}
engines: {node: '>=8'}
is-stream@3.0.0:
resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
@@ -2859,6 +2936,9 @@ packages:
jito-ts@3.0.1:
resolution: {integrity: sha512-TSofF7KqcwyaWGjPaSYC8RDoNBY1TPRNBHdrw24bdIi7mQ5bFEDdYK3D//llw/ml8YDvcZlgd644WxhjLTS9yg==}
joi@17.13.3:
resolution: {integrity: sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==}
js-base64@3.7.7:
resolution: {integrity: sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw==}
@@ -2997,6 +3077,10 @@ packages:
openai:
optional: true
lazy-ass@1.6.0:
resolution: {integrity: sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==}
engines: {node: '> 0.8'}
levn@0.4.1:
resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
engines: {node: '>= 0.8.0'}
@@ -3090,6 +3174,9 @@ packages:
make-error@1.3.6:
resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==}
map-stream@0.1.0:
resolution: {integrity: sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==}
markdown-it@14.1.0:
resolution: {integrity: sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==}
hasBin: true
@@ -3205,6 +3292,10 @@ packages:
minimatch@3.1.2:
resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
minimatch@7.4.6:
resolution: {integrity: sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==}
engines: {node: '>=10'}
minimatch@9.0.5:
resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==}
engines: {node: '>=16 || 14 >=14.17'}
@@ -3223,9 +3314,17 @@ packages:
mkdirp-classic@0.5.3:
resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==}
mkdirp@2.1.6:
resolution: {integrity: sha512-+hEnITedc8LAtIP9u3HJDFIdcLV2vXP33sqLLIzkv1Db1zO/1OxbvYf0Y1OC/S/Qo5dxHXepofhmxL02PsKe+A==}
engines: {node: '>=10'}
hasBin: true
ms@2.0.0:
resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==}
ms@2.1.2:
resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
ms@2.1.3:
resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
@@ -3318,6 +3417,10 @@ packages:
resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==}
engines: {node: '>=10'}
npm-run-path@4.0.1:
resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==}
engines: {node: '>=8'}
npm-run-path@5.3.0:
resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
@@ -3433,6 +3536,9 @@ packages:
resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==}
engines: {node: '>= 0.8'}
path-browserify@1.0.1:
resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==}
path-exists@4.0.0:
resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
engines: {node: '>=8'}
@@ -3464,6 +3570,9 @@ packages:
resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==}
engines: {node: '>= 14.16'}
pause-stream@0.0.11:
resolution: {integrity: sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==}
pbkdf2@3.1.2:
resolution: {integrity: sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==}
engines: {node: '>=0.12'}
@@ -3535,6 +3644,11 @@ packages:
proxy-from-env@1.1.0:
resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==}
ps-tree@1.2.0:
resolution: {integrity: sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA==}
engines: {node: '>= 0.10'}
hasBin: true
pump@3.0.2:
resolution: {integrity: sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==}
@@ -3815,9 +3929,17 @@ packages:
space-separated-tokens@2.0.2:
resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==}
split@0.3.3:
resolution: {integrity: sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA==}
spok@1.5.5:
resolution: {integrity: sha512-IrJIXY54sCNFASyHPOY+jEirkiJ26JDqsGiI0Dvhwcnkl0PEWi1PSsrkYql0rzDw8LFVTcA7rdUCAJdE2HE+2Q==}
start-server-and-test@1.15.4:
resolution: {integrity: sha512-ucQtp5+UCr0m4aHlY+aEV2JSYNTiMZKdSKK/bsIr6AlmwAWDYDnV7uGlWWEtWa7T4XvRI5cPYcPcQgeLqpz+Tg==}
engines: {node: '>=6'}
hasBin: true
statuses@1.5.0:
resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==}
engines: {node: '>= 0.6'}
@@ -3826,6 +3948,9 @@ packages:
resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==}
engines: {node: '>= 0.8'}
stream-combiner@0.0.4:
resolution: {integrity: sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw==}
stream-transform@2.1.3:
resolution: {integrity: sha512-9GHUiM5hMiCi6Y03jD2ARC1ettBXkQBoQAe7nJsPknnI0ow10aXjTnew8QtYQmLjzn974BnmWEAJgCY6ZP1DeQ==}
@@ -3866,6 +3991,10 @@ packages:
resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
engines: {node: '>=4'}
strip-final-newline@2.0.0:
resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==}
engines: {node: '>=6'}
strip-final-newline@3.0.0:
resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==}
engines: {node: '>=12'}
@@ -3985,6 +4114,9 @@ packages:
ts-log@2.2.7:
resolution: {integrity: sha512-320x5Ggei84AxzlXp91QkIGSw5wgaLT6GeAH0KsqDmRZdVWW2OiSeVvElVoatk3f7nicwXlElXsoFkARiGE2yg==}
ts-morph@18.0.0:
resolution: {integrity: sha512-Kg5u0mk19PIIe4islUI/HWRvm9bC1lHejK4S0oh1zaZ77TMZAEmQC0sHQYiu2RgCQFZKXz1fMVi/7nOOeirznA==}
ts-node@10.9.2:
resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==}
hasBin: true
@@ -4173,6 +4305,11 @@ packages:
vlq@2.0.4:
resolution: {integrity: sha512-aodjPa2wPQFkra1G8CzJBTHXhgk3EVSwxSWXNPr1fgdFLUb8kvLV1iEb6rFgasIsjP82HWI6dsb5Io26DDnasA==}
wait-on@7.0.1:
resolution: {integrity: sha512-9AnJE9qTjRQOlTZIldAaf/da2eW0eSRSgcqq85mXQja/DW3MriHxkpODDSUEg+Gri/rKEcXUZHe+cevvYItaog==}
engines: {node: '>=12.0.0'}
hasBin: true
wcwidth@1.0.1:
resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==}
@@ -4314,17 +4451,20 @@ packages:
snapshots:
'@3land/listings-sdk@0.0.4(@types/node@22.10.5)(arweave@1.15.5)(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.2)(utf-8-validate@5.0.10)':
'@3land/listings-sdk@0.0.6(@types/node@22.10.5)(arweave@1.15.5)(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.2)(utf-8-validate@5.0.10)':
dependencies:
'@coral-xyz/borsh': 0.30.1(@solana/web3.js@1.98.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))
'@irys/sdk': 0.2.11(arweave@1.15.5)(bufferutil@4.0.9)(utf-8-validate@5.0.10)
'@metaplex-foundation/beet': 0.7.2
'@metaplex-foundation/mpl-token-metadata': 2.13.0(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.2)(utf-8-validate@5.0.10)
'@project-serum/anchor': 0.26.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)
'@solana/spl-token': 0.2.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)
'@solana/web3.js': 1.98.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)
anchor-client-gen: 0.28.1(bufferutil@4.0.9)(utf-8-validate@5.0.10)
bn: 1.0.5
bn.js: 5.2.1
bs58: 6.0.0
buffer-layout: 1.2.2
cyrb53: 1.0.0
fs: 0.0.1-security
irys: 0.0.1
@@ -5165,6 +5305,12 @@ snapshots:
protobufjs: 7.4.0
yargs: 17.7.2
'@hapi/hoek@9.3.0': {}
'@hapi/topo@5.1.0':
dependencies:
'@hapi/hoek': 9.3.0
'@humanfs/core@0.19.1': {}
'@humanfs/node@0.16.6':
@@ -5188,6 +5334,16 @@ snapshots:
'@humanwhocodes/retry@0.4.1': {}
'@irys/arweave@0.0.2':
dependencies:
asn1.js: 5.4.1
async-retry: 1.3.3
axios: 1.7.9
base64-js: 1.5.1
bignumber.js: 9.1.2
transitivePeerDependencies:
- debug
'@irys/arweave@0.0.2(debug@4.4.0)':
dependencies:
asn1.js: 5.4.1
@@ -5208,7 +5364,7 @@ snapshots:
'@irys/query@0.0.8':
dependencies:
async-retry: 1.3.3
axios: 1.7.9(debug@4.4.0)
axios: 1.7.9
transitivePeerDependencies:
- debug
@@ -5263,7 +5419,7 @@ snapshots:
algosdk: 1.24.1
arbundles: 0.11.2(arweave@1.15.5)(bufferutil@4.0.9)(utf-8-validate@5.0.10)
async-retry: 1.3.3
axios: 1.7.9(debug@4.4.0)
axios: 1.7.9
base64url: 3.0.1
bignumber.js: 9.1.2
bs58: 5.0.0
@@ -6150,7 +6306,7 @@ snapshots:
dependencies:
'@pythnetwork/price-service-sdk': 1.8.0
'@types/ws': 8.5.13
axios: 1.7.9(debug@4.4.0)
axios: 1.7.9
axios-retry: 3.9.1
isomorphic-ws: 4.0.1(ws@8.18.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))
ts-log: 2.2.7
@@ -6204,7 +6360,7 @@ snapshots:
'@solana/buffer-layout': 4.0.1
'@solana/spl-token': 0.4.9(@solana/web3.js@1.98.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.2)(utf-8-validate@5.0.10)
'@solana/web3.js': 1.98.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)
axios: 1.7.9(debug@4.4.0)
axios: 1.7.9
big.js: 6.2.2
bn.js: 5.2.1
dayjs: 1.11.13
@@ -6293,6 +6449,14 @@ snapshots:
'@shikijs/vscode-textmate@10.0.1': {}
'@sideway/address@4.1.5':
dependencies:
'@hapi/hoek': 9.3.0
'@sideway/formula@3.0.1': {}
'@sideway/pinpoint@2.0.0': {}
'@sindresorhus/is@4.6.0': {}
'@solana/buffer-layout-utils@0.2.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)':
@@ -6685,6 +6849,18 @@ snapshots:
- encoding
- utf-8-validate
'@solana/spl-token@0.2.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)':
dependencies:
'@solana/buffer-layout': 4.0.1
'@solana/buffer-layout-utils': 0.2.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)
'@solana/web3.js': 1.98.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)
start-server-and-test: 1.15.4
transitivePeerDependencies:
- bufferutil
- encoding
- supports-color
- utf-8-validate
'@solana/spl-token@0.3.11(@solana/web3.js@1.92.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.6.3)(utf-8-validate@5.0.10)':
dependencies:
'@solana/buffer-layout': 4.0.1
@@ -7024,7 +7200,7 @@ snapshots:
'@switchboard-xyz/common@2.5.12(bufferutil@4.0.9)(utf-8-validate@5.0.10)':
dependencies:
'@solana/web3.js': 1.98.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)
axios: 1.7.9(debug@4.4.0)
axios: 1.7.9
big.js: 6.2.2
bn.js: 5.2.1
bs58: 6.0.0
@@ -7047,7 +7223,7 @@ snapshots:
'@solana/web3.js': 1.98.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)
'@solworks/soltoolkit-sdk': 0.0.23(bufferutil@4.0.9)(fastestsmallesttextencoderdecoder@1.0.22)(utf-8-validate@5.0.10)
'@switchboard-xyz/common': 2.5.12(bufferutil@4.0.9)(utf-8-validate@5.0.10)
axios: 1.7.9(debug@4.4.0)
axios: 1.7.9
big.js: 6.2.2
bs58: 5.0.0
js-yaml: 4.1.0
@@ -7137,6 +7313,13 @@ snapshots:
dependencies:
'@grpc/grpc-js': 1.12.5
'@ts-morph/common@0.19.0':
dependencies:
fast-glob: 3.3.2
minimatch: 7.4.6
mkdirp: 2.1.6
path-browserify: 1.0.1
'@tsconfig/node10@1.0.11': {}
'@tsconfig/node12@1.0.11': {}
@@ -7360,7 +7543,7 @@ snapshots:
'@zodios/core@10.9.6(axios@1.7.9)(zod@3.24.1)':
dependencies:
axios: 1.7.9(debug@4.4.0)
axios: 1.7.9
zod: 3.24.1
JSONStream@1.3.5:
@@ -7436,6 +7619,23 @@ snapshots:
'@solana/web3.js': 1.92.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)
solana-bankrun: 0.3.1(bufferutil@4.0.9)(utf-8-validate@5.0.10)
anchor-client-gen@0.28.1(bufferutil@4.0.9)(utf-8-validate@5.0.10):
dependencies:
'@coral-xyz/anchor': 0.28.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)
'@coral-xyz/borsh': 0.28.0(@solana/web3.js@1.98.0(bufferutil@4.0.9)(utf-8-validate@5.0.10))
'@solana/web3.js': 1.98.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)
bn.js: 5.2.1
camelcase: 7.0.1
commander: 10.0.1
js-sha256: 0.9.0
prettier: 2.8.8
snake-case: 3.0.4
ts-morph: 18.0.0
transitivePeerDependencies:
- bufferutil
- encoding
- utf-8-validate
ansi-escapes@4.3.2:
dependencies:
type-fest: 0.21.3
@@ -7503,7 +7703,7 @@ snapshots:
'@ethersproject/signing-key': 5.7.0
'@ethersproject/transactions': 5.7.0
'@ethersproject/wallet': 5.7.0
'@irys/arweave': 0.0.2(debug@4.4.0)
'@irys/arweave': 0.0.2
'@noble/ed25519': 1.7.3
base64url: 3.0.1
bs58: 4.0.1
@@ -7529,6 +7729,8 @@ snapshots:
arg@4.1.3: {}
arg@5.0.2: {}
argparse@2.0.1: {}
array-flatten@1.1.1: {}
@@ -7579,6 +7781,13 @@ snapshots:
'@babel/runtime': 7.26.0
is-retry-allowed: 2.2.0
axios@0.27.2(debug@4.3.4):
dependencies:
follow-redirects: 1.15.9(debug@4.3.4)
form-data: 4.0.1
transitivePeerDependencies:
- debug
axios@0.27.2(debug@4.4.0):
dependencies:
follow-redirects: 1.15.9(debug@4.4.0)
@@ -7588,7 +7797,7 @@ snapshots:
axios@0.28.1:
dependencies:
follow-redirects: 1.15.9(debug@4.4.0)
follow-redirects: 1.15.9
form-data: 4.0.1
proxy-from-env: 1.1.0
transitivePeerDependencies:
@@ -7596,7 +7805,15 @@ snapshots:
axios@1.7.4:
dependencies:
follow-redirects: 1.15.9(debug@4.4.0)
follow-redirects: 1.15.9
form-data: 4.0.1
proxy-from-env: 1.1.0
transitivePeerDependencies:
- debug
axios@1.7.9:
dependencies:
follow-redirects: 1.15.9
form-data: 4.0.1
proxy-from-env: 1.1.0
transitivePeerDependencies:
@@ -7662,6 +7879,8 @@ snapshots:
inherits: 2.0.4
readable-stream: 3.6.2
bluebird@3.7.2: {}
bn.js@4.11.6: {}
bn.js@4.12.1: {}
@@ -7780,6 +7999,8 @@ snapshots:
camelcase@6.3.0: {}
camelcase@7.0.1: {}
ccount@2.0.1: {}
chai@5.1.2:
@@ -7805,6 +8026,8 @@ snapshots:
check-error@2.1.1: {}
check-more-types@2.24.0: {}
chownr@1.1.4: {}
cipher-base@1.0.6:
@@ -7843,6 +8066,8 @@ snapshots:
clone@2.1.2: {}
code-block-writer@12.0.0: {}
color-convert@2.0.1:
dependencies:
color-name: 1.1.4
@@ -7939,6 +8164,10 @@ snapshots:
dependencies:
ms: 2.0.0
debug@4.3.4:
dependencies:
ms: 2.1.2
debug@4.4.0:
dependencies:
ms: 2.1.3
@@ -8020,6 +8249,8 @@ snapshots:
es-errors: 1.3.0
gopd: 1.2.0
duplexer@0.1.2: {}
eastasianwidth@0.2.0: {}
ee-first@1.1.1: {}
@@ -8266,6 +8497,16 @@ snapshots:
bn.js: 4.11.6
number-to-bn: 1.7.0
event-stream@3.3.4:
dependencies:
duplexer: 0.1.2
from: 0.1.7
map-stream: 0.1.0
pause-stream: 0.0.11
split: 0.3.3
stream-combiner: 0.0.4
through: 2.3.8
event-target-shim@5.0.1: {}
eventemitter3@4.0.7: {}
@@ -8278,6 +8519,18 @@ snapshots:
eventsource@2.0.2: {}
execa@5.1.1:
dependencies:
cross-spawn: 7.0.6
get-stream: 6.0.1
human-signals: 2.1.0
is-stream: 2.0.1
merge-stream: 2.0.0
npm-run-path: 4.0.1
onetime: 5.1.2
signal-exit: 3.0.7
strip-final-newline: 2.0.0
execa@8.0.1:
dependencies:
cross-spawn: 7.0.6
@@ -8470,6 +8723,12 @@ snapshots:
flatted@3.3.2: {}
follow-redirects@1.15.9: {}
follow-redirects@1.15.9(debug@4.3.4):
optionalDependencies:
debug: 4.3.4
follow-redirects@1.15.9(debug@4.4.0):
optionalDependencies:
debug: 4.4.0
@@ -8510,6 +8769,8 @@ snapshots:
fresh@0.5.2: {}
from@0.1.7: {}
fs-constants@1.0.0: {}
fs.realpath@1.0.0: {}
@@ -8547,6 +8808,8 @@ snapshots:
dependencies:
pump: 3.0.2
get-stream@6.0.1: {}
get-stream@8.0.1: {}
get-tsconfig@4.8.1:
@@ -8713,6 +8976,8 @@ snapshots:
quick-lru: 5.1.1
resolve-alpn: 1.2.1
human-signals@2.1.0: {}
human-signals@5.0.0: {}
humanize-ms@1.2.1:
@@ -8823,6 +9088,8 @@ snapshots:
is-retry-allowed@2.2.0: {}
is-stream@2.0.1: {}
is-stream@3.0.0: {}
is-typed-array@1.1.15:
@@ -8886,6 +9153,14 @@ snapshots:
- encoding
- utf-8-validate
joi@17.13.3:
dependencies:
'@hapi/hoek': 9.3.0
'@hapi/topo': 5.1.0
'@sideway/address': 4.1.5
'@sideway/formula': 3.0.1
'@sideway/pinpoint': 2.0.0
js-base64@3.7.7: {}
js-sha256@0.11.0: {}
@@ -8975,7 +9250,7 @@ snapshots:
zod-to-json-schema: 3.24.1(zod@3.24.1)
optionalDependencies:
'@langchain/groq': 0.1.2(@langchain/core@0.3.27(openai@4.77.3(zod@3.24.1)))
axios: 1.7.9(debug@4.4.0)
axios: 1.7.9
transitivePeerDependencies:
- encoding
- openai
@@ -8991,6 +9266,8 @@ snapshots:
optionalDependencies:
openai: 4.77.3(zod@3.24.1)
lazy-ass@1.6.0: {}
levn@0.4.1:
dependencies:
prelude-ls: 1.2.1
@@ -9089,6 +9366,8 @@ snapshots:
make-error@1.3.6: {}
map-stream@0.1.0: {}
markdown-it@14.1.0:
dependencies:
argparse: 2.0.1
@@ -9196,6 +9475,10 @@ snapshots:
dependencies:
brace-expansion: 1.1.11
minimatch@7.4.6:
dependencies:
brace-expansion: 2.0.1
minimatch@9.0.5:
dependencies:
brace-expansion: 2.0.1
@@ -9208,8 +9491,12 @@ snapshots:
mkdirp-classic@0.5.3: {}
mkdirp@2.1.6: {}
ms@2.0.0: {}
ms@2.1.2: {}
ms@2.1.3: {}
multistream@4.1.0:
@@ -9288,6 +9575,10 @@ snapshots:
normalize-url@6.1.0: {}
npm-run-path@4.0.1:
dependencies:
path-key: 3.1.1
npm-run-path@5.3.0:
dependencies:
path-key: 4.0.0
@@ -9418,6 +9709,8 @@ snapshots:
parseurl@1.3.3: {}
path-browserify@1.0.1: {}
path-exists@4.0.0: {}
path-is-absolute@1.0.1: {}
@@ -9440,6 +9733,10 @@ snapshots:
pathval@2.0.0: {}
pause-stream@0.0.11:
dependencies:
through: 2.3.8
pbkdf2@3.1.2:
dependencies:
create-hash: 1.2.0
@@ -9521,6 +9818,10 @@ snapshots:
proxy-from-env@1.1.0: {}
ps-tree@1.2.0:
dependencies:
event-stream: 3.3.4
pump@3.0.2:
dependencies:
end-of-stream: 1.4.4
@@ -9857,6 +10158,10 @@ snapshots:
space-separated-tokens@2.0.2: {}
split@0.3.3:
dependencies:
through: 2.3.8
spok@1.5.5:
dependencies:
ansicolors: 0.3.2
@@ -9865,10 +10170,27 @@ snapshots:
- jiti
- supports-color
start-server-and-test@1.15.4:
dependencies:
arg: 5.0.2
bluebird: 3.7.2
check-more-types: 2.24.0
debug: 4.3.4
execa: 5.1.1
lazy-ass: 1.6.0
ps-tree: 1.2.0
wait-on: 7.0.1(debug@4.3.4)
transitivePeerDependencies:
- supports-color
statuses@1.5.0: {}
statuses@2.0.1: {}
stream-combiner@0.0.4:
dependencies:
duplexer: 0.1.2
stream-transform@2.1.3:
dependencies:
mixme: 0.5.10
@@ -9914,6 +10236,8 @@ snapshots:
strip-bom@3.0.0: {}
strip-final-newline@2.0.0: {}
strip-final-newline@3.0.0: {}
strip-hex-prefix@1.0.0:
@@ -10014,6 +10338,11 @@ snapshots:
ts-log@2.2.7: {}
ts-morph@18.0.0:
dependencies:
'@ts-morph/common': 0.19.0
code-block-writer: 12.0.0
ts-node@10.9.2(@types/node@20.17.11)(typescript@5.7.2):
dependencies:
'@cspotcode/source-map-support': 0.8.1
@@ -10233,6 +10562,16 @@ snapshots:
vlq@2.0.4: {}
wait-on@7.0.1(debug@4.3.4):
dependencies:
axios: 0.27.2(debug@4.3.4)
joi: 17.13.3
lodash: 4.17.21
minimist: 1.2.8
rxjs: 7.8.1
transitivePeerDependencies:
- debug
wcwidth@1.0.1:
dependencies:
defaults: 1.0.4

View File

@@ -631,24 +631,43 @@ export class SolanaAgentKit {
}
async create3LandCollection(
optionsWithBase58: StoreInitOptions,
collectionOpts: CreateCollectionOptions,
isDevnet: boolean = false,
): Promise<string> {
let optionsWithBase58: StoreInitOptions = {
privateKey: this.wallet.secretKey,
};
if (isDevnet) {
optionsWithBase58.isMainnet = false;
} else {
optionsWithBase58.isMainnet = true;
}
const tx = await createCollection(optionsWithBase58, collectionOpts);
return `Transaction: ${tx}`;
}
async create3LandNft(
optionsWithBase58: StoreInitOptions,
collectionAccount: string,
createItemOptions: CreateSingleOptions,
isMainnet: boolean,
isDevnet: boolean = false,
withPool: boolean = false,
): Promise<string> {
let optionsWithBase58: StoreInitOptions = {
privateKey: this.wallet.secretKey,
};
if (isDevnet) {
optionsWithBase58.isMainnet = false;
} else {
optionsWithBase58.isMainnet = true;
}
const tx = await createSingle(
optionsWithBase58,
collectionAccount,
createItemOptions,
isMainnet,
!isDevnet,
withPool,
);
return `Transaction: ${tx}`;
}

View File

@@ -10,7 +10,6 @@ export class Solana3LandCreateCollection extends Tool {
description = `Creates an NFT Collection that you can visit on 3.land's website (3.land/collection/{collectionAccount})
Inputs:
privateKey (required): represents the privateKey of the wallet - can be an array of numbers, Uint8Array or base58 string
isMainnet (required): defines is the tx takes places in mainnet
collectionSymbol (required): the symbol of the collection
collectionName (required): the name of the collection
@@ -26,14 +25,8 @@ export class Solana3LandCreateCollection extends Tool {
protected async _call(input: string): Promise<string> {
try {
const inputFormat = JSON.parse(input);
const privateKey = inputFormat.privateKey;
const isMainnet = inputFormat.isMainnet;
const optionsWithBase58: StoreInitOptions = {
...(privateKey && { privateKey }),
...(isMainnet && { isMainnet }),
};
const collectionSymbol = inputFormat?.collectionSymbol;
const collectionName = inputFormat?.collectionName;
const collectionDescription = inputFormat?.collectionDescription;
@@ -49,8 +42,8 @@ export class Solana3LandCreateCollection extends Tool {
};
const tx = await this.solanaKit.create3LandCollection(
optionsWithBase58,
collectionOpts,
!isMainnet,
);
return JSON.stringify({
status: "success",

View File

@@ -10,7 +10,6 @@ export class Solana3LandCreateSingle extends Tool {
description = `Creates an NFT and lists it on 3.land's website
Inputs:
privateKey (required): represents the privateKey of the wallet - can be an array of numbers, Uint8Array or base58 string
collectionAccount (optional): represents the account for the nft collection
itemName (required): the name of the NFT
sellerFee (required): the fee of the seller
@@ -21,7 +20,9 @@ export class Solana3LandCreateSingle extends Tool {
mainImageUrl (required): the main image of the NFT
coverImageUrl (optional): the cover image of the NFT
splHash (optional): the hash of the spl token, if not provided listing will be in $SOL
isMainnet (required): defines is the tx takes places in mainnet
poolName (optional): the name of the pool
isMainnet (required): defines if the tx takes places in mainnet
withPool (optional): defines if minted edition will be tied to a liquidity pool
`;
constructor(private solanaKit: SolanaAgentKit) {
@@ -31,13 +32,9 @@ export class Solana3LandCreateSingle extends Tool {
protected async _call(input: string): Promise<string> {
try {
const inputFormat = JSON.parse(input);
const privateKey = inputFormat.privateKey;
const isMainnet = inputFormat.isMainnet;
const optionsWithBase58: StoreInitOptions = {
...(privateKey && { privateKey }),
...(isMainnet && { isMainnet }),
};
const withPool = inputFormat.withPool;
const poolName = inputFormat.poolName;
const collectionAccount = inputFormat.collectionAccount;
@@ -52,6 +49,15 @@ export class Solana3LandCreateSingle extends Tool {
const coverImageUrl = inputFormat?.coverImageUrl;
const splHash = inputFormat?.splHash;
if (withPool) {
if (!poolName) {
throw new Error("poolName is required when withPool is true");
}
if (!splHash) {
throw new Error("splHash is required when withPool is true");
}
}
const createItemOptions: CreateSingleOptions = {
...(itemName && { itemName }),
...(sellerFee && { sellerFee }),
@@ -63,6 +69,7 @@ export class Solana3LandCreateSingle extends Tool {
...(mainImageUrl && { mainImageUrl }),
...(coverImageUrl && { coverImageUrl }),
...(splHash && { splHash }),
...(poolName && { poolName }),
};
if (!collectionAccount) {
@@ -70,10 +77,10 @@ export class Solana3LandCreateSingle extends Tool {
}
const tx = await this.solanaKit.create3LandNft(
optionsWithBase58,
collectionAccount,
createItemOptions,
isMainnet,
!isMainnet,
withPool,
);
return JSON.stringify({
status: "success",

View File

@@ -37,7 +37,8 @@ export async function createSingle(
optionsWithBase58: StoreInitOptions,
collectionAccount: string,
createItemOptions: CreateSingleOptions,
isMainnet: boolean,
isMainnet: boolean = false,
withPool: boolean = false,
) {
try {
const landStore = isMainnet
@@ -49,6 +50,8 @@ export async function createSingle(
landStore,
collectionAccount,
createItemOptions,
true, //isAI
withPool,
);
return singleEditionTx;
} catch (error: any) {

View File

@@ -13,10 +13,7 @@ const agent = new SolanaAgentKit(
{ OPENAI_API_KEY: process.env.OPENAI_API_KEY! },
);
const optionsWithBase58: StoreInitOptions = {
privateKey: process.env.SOLANA_PRIVATE_KEY!,
isMainnet: false,
};
const isDevnet = true;
/****************************** CREATING COLLECTION ******************************** */
@@ -29,8 +26,8 @@ const collectionOpts: CreateCollectionOptions = {
(async () => {
const collection = await agent.create3LandCollection(
optionsWithBase58,
collectionOpts,
isDevnet,
);
console.log("collection: ", collection);
@@ -41,21 +38,24 @@ const collectionAccount = "";
const createItemOptions: CreateSingleOptions = {
itemName: "",
sellerFee: 500, //5%
itemAmount: 100,
itemAmount: 333,
itemSymbol: "",
itemDescription: "",
traits: [{ trait_type: "", value: "" }],
price: 0, //100000000 == 0.1 sol
price: 100000000, //100000000 == 0.1 sol,
splHash: "",
poolName: "",
mainImageUrl: "",
};
const isMainnet = false;
const withPool = true;
(async () => {
const result = agent.create3LandNft(
optionsWithBase58,
collectionAccount,
createItemOptions,
isMainnet,
isDevnet,
withPool,
);
console.log("result: ", result);
})();