From 188a33d8209f951b590385292ada82ab0b1b12e4 Mon Sep 17 00:00:00 2001 From: Denis Fadeev Date: Tue, 24 Dec 2024 11:47:36 +0300 Subject: [PATCH] Solana deposit and call (#203) --- package.json | 5 +- packages/client/src/client.ts | 2 + packages/client/src/idl/gateway.json | 497 -------------------- packages/client/src/index.ts | 1 + packages/client/src/solanaDeposit.ts | 14 +- packages/client/src/solanaDepositAndCall.ts | 141 ++++++ packages/tasks/src/index.ts | 1 + packages/tasks/src/solanaDeposit.ts | 17 +- packages/tasks/src/solanaDepositAndCall.ts | 80 ++++ yarn.lock | 167 ++++++- 10 files changed, 401 insertions(+), 524 deletions(-) delete mode 100644 packages/client/src/idl/gateway.json create mode 100644 packages/client/src/solanaDepositAndCall.ts create mode 100644 packages/tasks/src/solanaDepositAndCall.ts diff --git a/package.json b/package.json index 22380cca..9b37c566 100644 --- a/package.json +++ b/package.json @@ -56,6 +56,7 @@ "@typescript-eslint/eslint-plugin": "^5.59.9", "@typescript-eslint/parser": "^5.59.9", "@uniswap/v2-core": "^1.0.1", + "@zetachain/protocol-contracts-solana": "2.0.0-rc1", "chai": "^4.2.0", "cpx": "^1.5.0", "eslint": "^8.42.0", @@ -100,7 +101,7 @@ "@solana/web3.js": "^1.95.3", "@uniswap/v2-periphery": "^1.1.0-beta.0", "@zetachain/faucet-cli": "^4.1.1", - "@zetachain/networks": "v10.0.0", + "@zetachain/networks": "10.0.0-rc1", "@zetachain/protocol-contracts": "11.0.0-rc3", "axios": "^1.4.0", "bech32": "^2.0.0", @@ -125,4 +126,4 @@ "ws": "^8.17.1" }, "packageManager": "yarn@1.22.21+sha1.1959a18351b811cdeedbd484a8f86c3cc3bbaf72" -} \ No newline at end of file +} diff --git a/packages/client/src/client.ts b/packages/client/src/client.ts index 2e9102f1..d3cbabf0 100644 --- a/packages/client/src/client.ts +++ b/packages/client/src/client.ts @@ -23,6 +23,7 @@ import { getZRC20GasToken, sendZeta, solanaDeposit, + solanaDepositAndCall, trackCCTX, zetachainCall, zetachainWithdraw, @@ -176,6 +177,7 @@ export class ZetaChainClient { getZRC20FromERC20 = getZRC20FromERC20; getZRC20GasToken = getZRC20GasToken; solanaDeposit = solanaDeposit; + solanaDepositAndCall = solanaDepositAndCall; zetachainWithdrawAndCall = zetachainWithdrawAndCall; zetachainWithdraw = zetachainWithdraw; zetachainCall = zetachainCall; diff --git a/packages/client/src/idl/gateway.json b/packages/client/src/idl/gateway.json deleted file mode 100644 index d5f677ae..00000000 --- a/packages/client/src/idl/gateway.json +++ /dev/null @@ -1,497 +0,0 @@ -{ - "address": "ZETAjseVjuFsxdRxo6MmTCvqFwb3ZHUx56Co3vCmGis", - "metadata": { - "name": "gateway", - "version": "0.1.0", - "spec": "0.1.0", - "description": "Created with Anchor" - }, - "instructions": [ - { - "name": "deposit", - "discriminator": [ - 242, - 35, - 198, - 137, - 82, - 225, - 242, - 182 - ], - "accounts": [ - { - "name": "signer", - "writable": true, - "signer": true - }, - { - "name": "pda", - "writable": true - }, - { - "name": "system_program", - "address": "11111111111111111111111111111111" - } - ], - "args": [ - { - "name": "amount", - "type": "u64" - }, - { - "name": "memo", - "type": "bytes" - } - ] - }, - { - "name": "deposit_spl_token", - "discriminator": [ - 86, - 172, - 212, - 121, - 63, - 233, - 96, - 144 - ], - "accounts": [ - { - "name": "signer", - "writable": true, - "signer": true - }, - { - "name": "pda", - "writable": true, - "pda": { - "seeds": [ - { - "kind": "const", - "value": [ - 109, - 101, - 116, - 97 - ] - } - ] - } - }, - { - "name": "token_program", - "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" - }, - { - "name": "from", - "writable": true - }, - { - "name": "to", - "writable": true - } - ], - "args": [ - { - "name": "amount", - "type": "u64" - }, - { - "name": "memo", - "type": "bytes" - } - ] - }, - { - "name": "initialize", - "discriminator": [ - 175, - 175, - 109, - 31, - 13, - 152, - 155, - 237 - ], - "accounts": [ - { - "name": "signer", - "writable": true, - "signer": true - }, - { - "name": "pda", - "writable": true, - "pda": { - "seeds": [ - { - "kind": "const", - "value": [ - 109, - 101, - 116, - 97 - ] - } - ] - } - }, - { - "name": "system_program", - "address": "11111111111111111111111111111111" - } - ], - "args": [ - { - "name": "tss_address", - "type": { - "array": [ - "u8", - 20 - ] - } - }, - { - "name": "chain_id", - "type": "u64" - } - ] - }, - { - "name": "set_deposit_paused", - "discriminator": [ - 98, - 179, - 141, - 24, - 246, - 120, - 164, - 143 - ], - "accounts": [ - { - "name": "pda", - "writable": true - }, - { - "name": "signer", - "writable": true, - "signer": true - } - ], - "args": [ - { - "name": "deposit_paused", - "type": "bool" - } - ] - }, - { - "name": "update_authority", - "discriminator": [ - 32, - 46, - 64, - 28, - 149, - 75, - 243, - 88 - ], - "accounts": [ - { - "name": "pda", - "writable": true - }, - { - "name": "signer", - "writable": true, - "signer": true - } - ], - "args": [ - { - "name": "new_authority_address", - "type": "pubkey" - } - ] - }, - { - "name": "update_tss", - "discriminator": [ - 227, - 136, - 3, - 242, - 177, - 168, - 10, - 160 - ], - "accounts": [ - { - "name": "pda", - "writable": true - }, - { - "name": "signer", - "writable": true, - "signer": true - } - ], - "args": [ - { - "name": "tss_address", - "type": { - "array": [ - "u8", - 20 - ] - } - } - ] - }, - { - "name": "withdraw", - "discriminator": [ - 183, - 18, - 70, - 156, - 148, - 109, - 161, - 34 - ], - "accounts": [ - { - "name": "signer", - "writable": true, - "signer": true - }, - { - "name": "pda", - "writable": true - }, - { - "name": "to", - "writable": true - } - ], - "args": [ - { - "name": "amount", - "type": "u64" - }, - { - "name": "signature", - "type": { - "array": [ - "u8", - 64 - ] - } - }, - { - "name": "recovery_id", - "type": "u8" - }, - { - "name": "message_hash", - "type": { - "array": [ - "u8", - 32 - ] - } - }, - { - "name": "nonce", - "type": "u64" - } - ] - }, - { - "name": "withdraw_spl_token", - "discriminator": [ - 219, - 156, - 234, - 11, - 89, - 235, - 246, - 32 - ], - "accounts": [ - { - "name": "signer", - "writable": true, - "signer": true - }, - { - "name": "pda", - "writable": true, - "pda": { - "seeds": [ - { - "kind": "const", - "value": [ - 109, - 101, - 116, - 97 - ] - } - ] - } - }, - { - "name": "from", - "writable": true - }, - { - "name": "to", - "writable": true - }, - { - "name": "token_program", - "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" - } - ], - "args": [ - { - "name": "amount", - "type": "u64" - }, - { - "name": "signature", - "type": { - "array": [ - "u8", - 64 - ] - } - }, - { - "name": "recovery_id", - "type": "u8" - }, - { - "name": "message_hash", - "type": { - "array": [ - "u8", - 32 - ] - } - }, - { - "name": "nonce", - "type": "u64" - } - ] - } - ], - "accounts": [ - { - "name": "Pda", - "discriminator": [ - 169, - 245, - 0, - 205, - 225, - 36, - 43, - 94 - ] - } - ], - "errors": [ - { - "code": 6000, - "name": "SignerIsNotAuthority", - "msg": "SignerIsNotAuthority" - }, - { - "code": 6001, - "name": "InsufficientPoints", - "msg": "InsufficientPoints" - }, - { - "code": 6002, - "name": "NonceMismatch", - "msg": "NonceMismatch" - }, - { - "code": 6003, - "name": "TSSAuthenticationFailed", - "msg": "TSSAuthenticationFailed" - }, - { - "code": 6004, - "name": "DepositToAddressMismatch", - "msg": "DepositToAddressMismatch" - }, - { - "code": 6005, - "name": "MessageHashMismatch", - "msg": "MessageHashMismatch" - }, - { - "code": 6006, - "name": "MemoLengthExceeded", - "msg": "MemoLengthExceeded" - }, - { - "code": 6007, - "name": "MemoLengthTooShort", - "msg": "MemoLengthTooShort" - }, - { - "code": 6008, - "name": "DepositPaused", - "msg": "DepositPaused" - } - ], - "types": [ - { - "name": "Pda", - "type": { - "kind": "struct", - "fields": [ - { - "name": "nonce", - "type": "u64" - }, - { - "name": "tss_address", - "type": { - "array": [ - "u8", - 20 - ] - } - }, - { - "name": "authority", - "type": "pubkey" - }, - { - "name": "chain_id", - "type": "u64" - }, - { - "name": "deposit_paused", - "type": "bool" - } - ] - } - } - ] -} \ No newline at end of file diff --git a/packages/client/src/index.ts b/packages/client/src/index.ts index 6f1e0ce5..5f30930b 100644 --- a/packages/client/src/index.ts +++ b/packages/client/src/index.ts @@ -15,6 +15,7 @@ export * from "./getSupportedChains"; export * from "./prepareData"; export * from "./sendZeta"; export * from "./solanaDeposit"; +export * from "./solanaDepositAndCall"; export * from "./trackCCTX"; export * from "./zetachainCall"; export * from "./zetachainWithdraw"; diff --git a/packages/client/src/solanaDeposit.ts b/packages/client/src/solanaDeposit.ts index 0ceab20f..3cfc9e83 100644 --- a/packages/client/src/solanaDeposit.ts +++ b/packages/client/src/solanaDeposit.ts @@ -2,10 +2,10 @@ import * as anchor from "@coral-xyz/anchor"; import { TransactionMessage, VersionedTransaction } from "@solana/web3.js"; import { Transaction } from "@solana/web3.js"; import { getEndpoints } from "@zetachain/networks"; +import Gateway_IDL from "@zetachain/protocol-contracts-solana/idl/gateway.json"; import { ethers } from "ethers"; import { ZetaChainClient } from "./client"; -import Gateway_IDL from "./idl/gateway.json"; const SEED = "meta"; @@ -13,7 +13,6 @@ export const solanaDeposit = async function ( this: ZetaChainClient, args: { amount: number; - params: any[]; recipient: string; } ) { @@ -80,16 +79,9 @@ export const solanaDeposit = async function ( try { const tx = new anchor.web3.Transaction(); - const m = Buffer.from( - ethers.utils.arrayify( - args.recipient + - ethers.utils.defaultAbiCoder - .encode(args.params[0], args.params[1]) - .slice(2) - ) - ); + const recipient = Buffer.from(ethers.utils.arrayify(args.recipient)); const depositInstruction = await gatewayProgram.methods - .deposit(depositAmount, m) + .deposit(depositAmount, recipient) .accounts({ pda: pdaAccount, signer: this.solanaAdapter diff --git a/packages/client/src/solanaDepositAndCall.ts b/packages/client/src/solanaDepositAndCall.ts new file mode 100644 index 00000000..61624d01 --- /dev/null +++ b/packages/client/src/solanaDepositAndCall.ts @@ -0,0 +1,141 @@ +import * as anchor from "@coral-xyz/anchor"; +import { TransactionMessage, VersionedTransaction } from "@solana/web3.js"; +import { Transaction } from "@solana/web3.js"; +import { getEndpoints } from "@zetachain/networks"; +import Gateway_IDL from "@zetachain/protocol-contracts-solana/idl/gateway.json"; +import { ethers } from "ethers"; + +import { ZetaChainClient } from "./client"; + +const SEED = "meta"; + +export const solanaDepositAndCall = async function ( + this: ZetaChainClient, + args: { + amount: number; + params: any[]; + recipient: string; + } +) { + if (!this.isSolanaWalletConnected()) { + throw new Error("Solana wallet not connected"); + } + + const network = "solana_" + this.network; + const api = getEndpoints("solana" as any, network); + + const connection = new anchor.web3.Connection(api[0].url); + + let provider; + if (this.solanaAdapter) { + const walletAdapter = { + publicKey: this.solanaAdapter.publicKey!, + signAllTransactions: async (txs: Transaction[]) => { + if (!this.solanaAdapter?.signAllTransactions) { + throw new Error( + "Wallet does not support signing multiple transactions" + ); + } + return await this.solanaAdapter.signAllTransactions(txs); + }, + signTransaction: async (tx: Transaction) => { + if (!this.solanaAdapter?.signTransaction) { + throw new Error("Wallet does not support transaction signing"); + } + return await this.solanaAdapter.signTransaction(tx); + }, + }; + + provider = new anchor.AnchorProvider( + connection, + walletAdapter as any, + anchor.AnchorProvider.defaultOptions() + ); + } else if (this.solanaWallet) { + provider = new anchor.AnchorProvider( + connection, + this.solanaWallet, + anchor.AnchorProvider.defaultOptions() + ); + } else { + throw new Error("No valid Solana wallet found"); + } + anchor.setProvider(provider); + + const programId = new anchor.web3.PublicKey(Gateway_IDL.address); + const gatewayProgram = new anchor.Program( + Gateway_IDL as anchor.Idl, + provider + ); + + const seeds = [Buffer.from(SEED, "utf-8")]; + const [pdaAccount] = anchor.web3.PublicKey.findProgramAddressSync( + seeds, + programId + ); + + const depositAmount = new anchor.BN( + anchor.web3.LAMPORTS_PER_SOL * args.amount + ); + + try { + const tx = new anchor.web3.Transaction(); + const recipient = Buffer.from(ethers.utils.arrayify(args.recipient)); + + if (!Array.isArray(args.params[0]) || !Array.isArray(args.params[1])) { + throw new Error( + "Invalid 'params' format. Expected arrays of types and values." + ); + } + + const message = Buffer.from( + ethers.utils.arrayify( + ethers.utils.defaultAbiCoder.encode(args.params[0], args.params[1]) + ) + ); + + const depositInstruction = await gatewayProgram.methods + .depositAndCall(depositAmount, recipient, message) + .accounts({ + pda: pdaAccount, + signer: this.solanaAdapter + ? this.solanaAdapter.publicKey! + : this.solanaWallet!.publicKey, + systemProgram: anchor.web3.SystemProgram.programId, + }) + .instruction(); + + tx.add(depositInstruction); + + // Send the transaction + let txSignature; + if (this.solanaAdapter) { + const { blockhash, lastValidBlockHeight } = + await connection.getLatestBlockhash(); + const messageLegacy = new TransactionMessage({ + instructions: tx.instructions, + payerKey: this.solanaAdapter.publicKey!, + recentBlockhash: blockhash, + }).compileToV0Message(); + + const versionedTransaction = new VersionedTransaction(messageLegacy); + + txSignature = await this.solanaAdapter.sendTransaction( + versionedTransaction, + connection + ); + } else { + txSignature = await anchor.web3.sendAndConfirmTransaction( + connection, + tx, + [this.solanaWallet!.payer] + ); + } + + console.log("Transaction signature:", txSignature); + + return txSignature; + } catch (error) { + console.error("Transaction failed:", error); + } +}; diff --git a/packages/tasks/src/index.ts b/packages/tasks/src/index.ts index e03682c5..e69b6d60 100644 --- a/packages/tasks/src/index.ts +++ b/packages/tasks/src/index.ts @@ -12,6 +12,7 @@ export { poolsTask } from "./pools"; export { sendBTCTask } from "./sendBTC"; export { sendZETATask } from "./sendZETA"; export { solanaDeposit } from "./solanaDeposit"; +export { solanaDepositAndCall } from "./solanaDepositAndCall"; export { tokensTask } from "./tokens"; export { zetachainCall } from "./zetachainCall"; export { zetachainWithdraw } from "./zetachainWithdraw"; diff --git a/packages/tasks/src/solanaDeposit.ts b/packages/tasks/src/solanaDeposit.ts index adf6a602..cb9eba47 100644 --- a/packages/tasks/src/solanaDeposit.ts +++ b/packages/tasks/src/solanaDeposit.ts @@ -30,18 +30,9 @@ export const solanaDeposit = async ( recipient = args.recipient; } const { amount, idPath } = args; - const params = [JSON.parse(args.types), args.values]; - await client.solanaDeposit({ amount, params, recipient }); + await client.solanaDeposit({ amount, recipient }); }; -task("solana-deposit", "Solana deposit", solanaDeposit) - .addParam("amount", "Amount of SOL to deposit") - .addParam("recipient", "Universal contract address") - .addOptionalParam("solanaNetwork", "Solana Network", "devnet") - .addOptionalParam("idPath", "Path to id.json", "~/.config/solana/id.json") - .addParam("types", "The types of the parameters (example: ['string'])") - .addVariadicPositionalParam("values", "The values of the parameters"); - export const getKeypairFromFile = async (filepath: string) => { const path = await import("path"); if (filepath[0] === "~") { @@ -72,3 +63,9 @@ export const getKeypairFromFile = async (filepath: string) => { } return Keypair.fromSecretKey(parsedFileContents); }; + +task("solana-deposit", "Solana deposit", solanaDeposit) + .addParam("amount", "Amount of SOL to deposit") + .addParam("recipient", "Universal contract address") + .addOptionalParam("solanaNetwork", "Solana Network", "devnet") + .addOptionalParam("idPath", "Path to id.json", "~/.config/solana/id.json"); diff --git a/packages/tasks/src/solanaDepositAndCall.ts b/packages/tasks/src/solanaDepositAndCall.ts new file mode 100644 index 00000000..b2e6ebac --- /dev/null +++ b/packages/tasks/src/solanaDepositAndCall.ts @@ -0,0 +1,80 @@ +import { Wallet } from "@coral-xyz/anchor"; +import { Keypair } from "@solana/web3.js"; +import bech32 from "bech32"; +import { utils } from "ethers"; +import { task } from "hardhat/config"; +import type { HardhatRuntimeEnvironment } from "hardhat/types"; + +import { ZetaChainClient } from "../../client/src"; + +export const solanaDepositAndCall = async ( + args: any, + hre: HardhatRuntimeEnvironment +) => { + const keypair = await getKeypairFromFile(args.idPath); + const wallet = new Wallet(keypair); + + const client = new ZetaChainClient({ + network: args.solanaNetwork, + solanaWallet: wallet, + }); + let recipient; + try { + if ((bech32 as any).decode(args.recipient)) { + recipient = utils.solidityPack( + ["bytes"], + [utils.toUtf8Bytes(args.recipient)] + ); + } + } catch (e) { + recipient = args.recipient; + } + const { amount, idPath } = args; + let paramTypes; + try { + paramTypes = JSON.parse(args.types); + } catch (error: any) { + throw new Error(`Invalid JSON in 'types' parameter: ${error.message}`); + } + const params = [paramTypes, args.values]; + await client.solanaDepositAndCall({ amount, params, recipient }); +}; + +export const getKeypairFromFile = async (filepath: string) => { + const path = await import("path"); + if (filepath[0] === "~") { + const home = process.env.HOME || null; + if (home) { + filepath = path.join(home, filepath.slice(1)); + } + } + // Get contents of file + let fileContents; + try { + const { readFile } = await import("fs/promises"); + const fileContentsBuffer = await readFile(filepath); + fileContents = fileContentsBuffer.toString(); + } catch (error) { + throw new Error(`Could not read keypair from file at '${filepath}'`); + } + // Parse contents of file + let parsedFileContents; + try { + parsedFileContents = Uint8Array.from(JSON.parse(fileContents)); + } catch (thrownObject) { + const error: any = thrownObject; + if (!error.message.includes("Unexpected token")) { + throw error; + } + throw new Error(`Invalid secret key file at '${filepath}'!`); + } + return Keypair.fromSecretKey(parsedFileContents); +}; + +task("solana-deposit-and-call", "Solana deposit and call", solanaDepositAndCall) + .addParam("amount", "Amount of SOL to deposit") + .addParam("recipient", "Universal contract address") + .addOptionalParam("solanaNetwork", "Solana Network", "devnet") + .addOptionalParam("idPath", "Path to id.json", "~/.config/solana/id.json") + .addParam("types", "The types of the parameters (example: ['string'])") + .addVariadicPositionalParam("values", "The values of the parameters"); diff --git a/yarn.lock b/yarn.lock index e85df870..3e6ed06b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -313,7 +313,7 @@ resolved "https://registry.yarnpkg.com/@coral-xyz/anchor-errors/-/anchor-errors-0.30.1.tgz#bdfd3a353131345244546876eb4afc0e125bec30" integrity sha512-9Mkradf5yS5xiLWrl9WrpjqOrAV+/W2RQHDlbnAZBivoGpOs1ECjoDCkVk4aRG8ZdiFiB8zQEVlxf+8fKkmSfQ== -"@coral-xyz/anchor@^0.30.1": +"@coral-xyz/anchor@^0.30.0", "@coral-xyz/anchor@^0.30.1": version "0.30.1" resolved "https://registry.yarnpkg.com/@coral-xyz/anchor/-/anchor-0.30.1.tgz#17f3e9134c28cd0ea83574c6bab4e410bcecec5d" integrity sha512-gDXFoF5oHgpriXAaLpxyWBHdCs8Awgf/gLHIo6crv7Aqm937CNdY+x+6hoj7QR5vaJV7MxWSQ0NGFzL3kPbWEQ== @@ -2003,13 +2003,118 @@ optionalDependencies: "@react-native-async-storage/async-storage" "^1.17.7" -"@solana/buffer-layout@^4.0.1": +"@solana/buffer-layout-utils@^0.2.0": + version "0.2.0" + resolved "https://registry.yarnpkg.com/@solana/buffer-layout-utils/-/buffer-layout-utils-0.2.0.tgz#b45a6cab3293a2eb7597cceb474f229889d875ca" + integrity sha512-szG4sxgJGktbuZYDg2FfNmkMi0DYQoVjN2h7ta1W1hPrwzarcFLBq9UpX1UjNXsNpT9dn+chgprtWGioUAr4/g== + dependencies: + "@solana/buffer-layout" "^4.0.0" + "@solana/web3.js" "^1.32.0" + bigint-buffer "^1.1.5" + bignumber.js "^9.0.1" + +"@solana/buffer-layout@^4.0.0", "@solana/buffer-layout@^4.0.1": version "4.0.1" resolved "https://registry.yarnpkg.com/@solana/buffer-layout/-/buffer-layout-4.0.1.tgz#b996235eaec15b1e0b5092a8ed6028df77fa6c15" integrity sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA== dependencies: buffer "~6.0.3" +"@solana/codecs-core@2.0.0-rc.1": + version "2.0.0-rc.1" + resolved "https://registry.yarnpkg.com/@solana/codecs-core/-/codecs-core-2.0.0-rc.1.tgz#1a2d76b9c7b9e7b7aeb3bd78be81c2ba21e3ce22" + integrity sha512-bauxqMfSs8EHD0JKESaNmNuNvkvHSuN3bbWAF5RjOfDu2PugxHrvRebmYauvSumZ3cTfQ4HJJX6PG5rN852qyQ== + dependencies: + "@solana/errors" "2.0.0-rc.1" + +"@solana/codecs-data-structures@2.0.0-rc.1": + version "2.0.0-rc.1" + resolved "https://registry.yarnpkg.com/@solana/codecs-data-structures/-/codecs-data-structures-2.0.0-rc.1.tgz#d47b2363d99fb3d643f5677c97d64a812982b888" + integrity sha512-rinCv0RrAVJ9rE/rmaibWJQxMwC5lSaORSZuwjopSUE6T0nb/MVg6Z1siNCXhh/HFTOg0l8bNvZHgBcN/yvXog== + dependencies: + "@solana/codecs-core" "2.0.0-rc.1" + "@solana/codecs-numbers" "2.0.0-rc.1" + "@solana/errors" "2.0.0-rc.1" + +"@solana/codecs-numbers@2.0.0-rc.1": + version "2.0.0-rc.1" + resolved "https://registry.yarnpkg.com/@solana/codecs-numbers/-/codecs-numbers-2.0.0-rc.1.tgz#f34978ddf7ea4016af3aaed5f7577c1d9869a614" + integrity sha512-J5i5mOkvukXn8E3Z7sGIPxsThRCgSdgTWJDQeZvucQ9PT6Y3HiVXJ0pcWiOWAoQ3RX8e/f4I3IC+wE6pZiJzDQ== + dependencies: + "@solana/codecs-core" "2.0.0-rc.1" + "@solana/errors" "2.0.0-rc.1" + +"@solana/codecs-strings@2.0.0-rc.1": + version "2.0.0-rc.1" + resolved "https://registry.yarnpkg.com/@solana/codecs-strings/-/codecs-strings-2.0.0-rc.1.tgz#e1d9167075b8c5b0b60849f8add69c0f24307018" + integrity sha512-9/wPhw8TbGRTt6mHC4Zz1RqOnuPTqq1Nb4EyuvpZ39GW6O2t2Q7Q0XxiB3+BdoEjwA2XgPw6e2iRfvYgqty44g== + dependencies: + "@solana/codecs-core" "2.0.0-rc.1" + "@solana/codecs-numbers" "2.0.0-rc.1" + "@solana/errors" "2.0.0-rc.1" + +"@solana/codecs@2.0.0-rc.1": + version "2.0.0-rc.1" + resolved "https://registry.yarnpkg.com/@solana/codecs/-/codecs-2.0.0-rc.1.tgz#146dc5db58bd3c28e04b4c805e6096c2d2a0a875" + integrity sha512-qxoR7VybNJixV51L0G1RD2boZTcxmwUWnKCaJJExQ5qNKwbpSyDdWfFJfM5JhGyKe9DnPVOZB+JHWXnpbZBqrQ== + dependencies: + "@solana/codecs-core" "2.0.0-rc.1" + "@solana/codecs-data-structures" "2.0.0-rc.1" + "@solana/codecs-numbers" "2.0.0-rc.1" + "@solana/codecs-strings" "2.0.0-rc.1" + "@solana/options" "2.0.0-rc.1" + +"@solana/errors@2.0.0-rc.1": + version "2.0.0-rc.1" + resolved "https://registry.yarnpkg.com/@solana/errors/-/errors-2.0.0-rc.1.tgz#3882120886eab98a37a595b85f81558861b29d62" + integrity sha512-ejNvQ2oJ7+bcFAYWj225lyRkHnixuAeb7RQCixm+5mH4n1IA4Qya/9Bmfy5RAAHQzxK43clu3kZmL5eF9VGtYQ== + dependencies: + chalk "^5.3.0" + commander "^12.1.0" + +"@solana/options@2.0.0-rc.1": + version "2.0.0-rc.1" + resolved "https://registry.yarnpkg.com/@solana/options/-/options-2.0.0-rc.1.tgz#06924ba316dc85791fc46726a51403144a85fc4d" + integrity sha512-mLUcR9mZ3qfHlmMnREdIFPf9dpMc/Bl66tLSOOWxw4ml5xMT2ohFn7WGqoKcu/UHkT9CrC6+amEdqCNvUqI7AA== + dependencies: + "@solana/codecs-core" "2.0.0-rc.1" + "@solana/codecs-data-structures" "2.0.0-rc.1" + "@solana/codecs-numbers" "2.0.0-rc.1" + "@solana/codecs-strings" "2.0.0-rc.1" + "@solana/errors" "2.0.0-rc.1" + +"@solana/spl-memo@^0.2.5": + version "0.2.5" + resolved "https://registry.yarnpkg.com/@solana/spl-memo/-/spl-memo-0.2.5.tgz#a7828cdd1e810ff77c7c015ac97dfa166d0651fe" + integrity sha512-0Zx5t3gAdcHlRTt2O3RgGlni1x7vV7Xq7j4z9q8kKOMgU03PyoTbFQ/BSYCcICHzkaqD7ZxAiaJ6dlXolg01oA== + dependencies: + buffer "^6.0.3" + +"@solana/spl-token-group@^0.0.7": + version "0.0.7" + resolved "https://registry.yarnpkg.com/@solana/spl-token-group/-/spl-token-group-0.0.7.tgz#83c00f0cd0bda33115468cd28b89d94f8ec1fee4" + integrity sha512-V1N/iX7Cr7H0uazWUT2uk27TMqlqedpXHRqqAbVO2gvmJyT0E0ummMEAVQeXZ05ZhQ/xF39DLSdBp90XebWEug== + dependencies: + "@solana/codecs" "2.0.0-rc.1" + +"@solana/spl-token-metadata@^0.1.6": + version "0.1.6" + resolved "https://registry.yarnpkg.com/@solana/spl-token-metadata/-/spl-token-metadata-0.1.6.tgz#d240947aed6e7318d637238022a7b0981b32ae80" + integrity sha512-7sMt1rsm/zQOQcUWllQX9mD2O6KhSAtY1hFR2hfFwgqfFWzSY9E9GDvFVNYUI1F0iQKcm6HmePU9QbKRXTEBiA== + dependencies: + "@solana/codecs" "2.0.0-rc.1" + +"@solana/spl-token@^0.4.6": + version "0.4.9" + resolved "https://registry.yarnpkg.com/@solana/spl-token/-/spl-token-0.4.9.tgz#24d032d2935f237925c3b058ba6bb1e1ece5428c" + integrity sha512-g3wbj4F4gq82YQlwqhPB0gHFXfgsC6UmyGMxtSLf/BozT/oKd59465DbnlUK8L8EcimKMavxsVAMoLcEdeCicg== + dependencies: + "@solana/buffer-layout" "^4.0.0" + "@solana/buffer-layout-utils" "^0.2.0" + "@solana/spl-token-group" "^0.0.7" + "@solana/spl-token-metadata" "^0.1.6" + buffer "^6.0.3" + "@solana/wallet-adapter-base@^0.9.23": version "0.9.23" resolved "https://registry.yarnpkg.com/@solana/wallet-adapter-base/-/wallet-adapter-base-0.9.23.tgz#3b17c28afd44e173f44f658bf9700fd637e12a11" @@ -2101,6 +2206,27 @@ "@solana/wallet-standard-core" "^1.1.1" "@solana/wallet-standard-wallet-adapter" "^1.1.2" +"@solana/web3.js@^1.32.0": + version "1.95.8" + resolved "https://registry.yarnpkg.com/@solana/web3.js/-/web3.js-1.95.8.tgz#2d49abda23f7a79a3cc499ab6680f7be11786ee1" + integrity sha512-sBHzNh7dHMrmNS5xPD1d0Xa2QffW/RXaxu/OysRXBfwTp+LYqGGmMtCYYwrHPrN5rjAmJCsQRNAwv4FM0t3B6g== + dependencies: + "@babel/runtime" "^7.25.0" + "@noble/curves" "^1.4.2" + "@noble/hashes" "^1.4.0" + "@solana/buffer-layout" "^4.0.1" + agentkeepalive "^4.5.0" + bigint-buffer "^1.1.5" + bn.js "^5.2.1" + borsh "^0.7.0" + bs58 "^4.0.1" + buffer "6.0.3" + fast-stable-stringify "^1.0.0" + jayson "^4.1.1" + node-fetch "^2.7.0" + rpc-websockets "^9.0.2" + superstruct "^2.0.2" + "@solana/web3.js@^1.68.0", "@solana/web3.js@^1.95.3": version "1.95.3" resolved "https://registry.yarnpkg.com/@solana/web3.js/-/web3.js-1.95.3.tgz#70b5f4d76823f56b5af6403da51125fffeb65ff3" @@ -2655,13 +2781,32 @@ typescript "5.5.4" zod "3.22.4" -"@zetachain/networks@^10.0.0", "@zetachain/networks@v10.0.0": +"@zetachain/networks@10.0.0-rc1": + version "10.0.0-rc1" + resolved "https://registry.yarnpkg.com/@zetachain/networks/-/networks-10.0.0-rc1.tgz#ef869694dffb7f73e2212dc656480b9fe1066e33" + integrity sha512-ggHrrvwGajLau86S1Q8yK42PDvLCGM++U601/Nq7LP4WWyhvMtexAAeAnI/A62ZHQ+IRJK25xD1zWuxU1ZL4Sg== + dependencies: + dotenv "^16.1.4" + +"@zetachain/networks@^10.0.0": version "10.0.0" resolved "https://registry.yarnpkg.com/@zetachain/networks/-/networks-10.0.0.tgz#dd5d14a0870f6b658644aded8c96859f15531089" integrity sha512-FPolaO19oVkSLSPDUA/Hu+8AhG3lDEslRDpLnMzbMbnNSC669Fkah0/TEf+6egrQbAifBRfFLzwWidAGs8oxtA== dependencies: dotenv "^16.1.4" +"@zetachain/protocol-contracts-solana@2.0.0-rc1": + version "2.0.0-rc1" + resolved "https://registry.yarnpkg.com/@zetachain/protocol-contracts-solana/-/protocol-contracts-solana-2.0.0-rc1.tgz#6dec49165a5a711c4aa5cec41ac3eed259b0e276" + integrity sha512-49mjRwXcIZfNXPcG9e8XUY2ve6kxJLqbB7CIlTT+IZFW5RzXnoUclynycQeOLEJrpaVVSFz8q0s1alnv/zVvMQ== + dependencies: + "@coral-xyz/anchor" "^0.30.0" + "@solana/spl-memo" "^0.2.5" + "@solana/spl-token" "^0.4.6" + elliptic "^6.5.7" + ethereumjs-util "^7.1.5" + secp256k1 "^5.0.0" + "@zetachain/protocol-contracts@11.0.0-rc3": version "11.0.0-rc3" resolved "https://registry.yarnpkg.com/@zetachain/protocol-contracts/-/protocol-contracts-11.0.0-rc3.tgz#9b719391d0728fd1b4e046c5f496180a45ecf0d5" @@ -3220,6 +3365,11 @@ bigint-buffer@^1.1.5: dependencies: bindings "^1.3.0" +bignumber.js@^9.0.1: + version "9.1.2" + resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.1.2.tgz#b7c4242259c008903b13707983b5f4bbd31eda0c" + integrity sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug== + binary-extensions@^1.0.0: version "1.13.1" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" @@ -4811,7 +4961,7 @@ ethereumjs-util@^6.0.0, ethereumjs-util@^6.2.1: ethjs-util "0.1.6" rlp "^2.2.3" -ethereumjs-util@^7.1.4: +ethereumjs-util@^7.1.4, ethereumjs-util@^7.1.5: version "7.1.5" resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz#9ecf04861e4fbbeed7465ece5f23317ad1129181" integrity sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg== @@ -8415,6 +8565,15 @@ secp256k1@^4.0.1: node-addon-api "^5.0.0" node-gyp-build "^4.2.0" +secp256k1@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-5.0.1.tgz#dc2c86187d48ff2da756f0f7e96417ee03c414b1" + integrity sha512-lDFs9AAIaWP9UCdtWrotXWWF9t8PWgQDcxqgAnpM9rMqxb3Oaq2J0thzPVSxBwdJgyQtkU/sYtFtbM1RSt/iYA== + dependencies: + elliptic "^6.5.7" + node-addon-api "^5.0.0" + node-gyp-build "^4.2.0" + secure-compare@3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/secure-compare/-/secure-compare-3.0.1.tgz#f1a0329b308b221fae37b9974f3d578d0ca999e3"