From 57225c137a0c51801e8b6f3d9510dae765ded009 Mon Sep 17 00:00:00 2001 From: emerson Date: Thu, 20 Oct 2022 02:02:48 +0800 Subject: [PATCH 01/21] Upgrade @jup-ag/core version --- package.json | 2 +- yarn.lock | 713 +++++++++++++++++++++++++++++++++++++++++++++++---- 2 files changed, 668 insertions(+), 47 deletions(-) diff --git a/package.json b/package.json index 232a7b9..637e108 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,7 @@ "@dappio-wonderland/gateway-idls": "^0.2.8", "@dappio-wonderland/navigator": "^0.2.26", "@dappio-wonderland/utils": "^0.2.0", - "@jup-ag/core": "1.0.0-beta.26", + "@jup-ag/core": "3.0.0-beta.1", "@project-serum/anchor": "^0.24.2", "@project-serum/borsh": "^0.2.5", "@project-serum/serum": "^0.13.61", diff --git a/yarn.lock b/yarn.lock index 37b5ac7..2529880 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,6 +2,61 @@ # yarn lockfile v1 +"@apricot-lend/sdk-ts@0.17.5": + version "0.17.5" + resolved "https://registry.yarnpkg.com/@apricot-lend/sdk-ts/-/sdk-ts-0.17.5.tgz#f0528e35261d3944b775cdba261893cc7a6577d1" + integrity sha512-3U4IpYMyKQLXtU5whL/2WkLP3DpfJkZ3aznvm5AvxFBV6BUeVHWSjA8q9Nq/hGe0zSoC8YrtIRax3yUomIP84w== + dependencies: + "@apricot-lend/solana-swaps-js" "^0.1.18" + "@project-serum/borsh" "^0.2.3" + "@project-serum/serum" "^0.13.60" + "@pythnetwork/client" "^2.5.1" + "@solana/spl-token" "^0.1.8" + "@solana/web3.js" "^1.37.0" + "@switchboard-xyz/switchboard-api" "^0.2.152" + "@types/coingecko-api" "^1.0.10" + axios "^0.24.0" + buffer-layout "^1.2.2" + coingecko-api "^1.0.10" + decimal.js "^10.3.1" + js-base64 "^3.7.2" + retry-axios "^2.6.0" + tiny-invariant "^1.1.0" + +"@apricot-lend/sdk-ts@^0.17.3": + version "0.17.15" + resolved "https://registry.yarnpkg.com/@apricot-lend/sdk-ts/-/sdk-ts-0.17.15.tgz#ec4f198871dcbd1c971864cf34e4b1ab841e205b" + integrity sha512-YoNQDZ/EeDT8o7R5qYkCls2Fwk1BXup7C0nynITpF4SMOfklbpH4hqbXs8PALUdZSgvjsJWRoSCUkLugzHzFog== + dependencies: + "@apricot-lend/solana-swaps-js" "0.1.23" + "@project-serum/borsh" "^0.2.3" + "@project-serum/serum" "^0.13.60" + "@pythnetwork/client" "^2.5.1" + "@solana/spl-token" "^0.1.8" + "@solana/web3.js" "^1.37.0" + "@switchboard-xyz/switchboard-api" "^0.2.152" + "@types/coingecko-api" "^1.0.10" + axios "^0.24.0" + buffer-layout "^1.2.2" + coingecko-api "^1.0.10" + decimal.js "^10.3.1" + js-base64 "^3.7.2" + retry-axios "^2.6.0" + tiny-invariant "^1.1.0" + +"@apricot-lend/solana-swaps-js@0.1.23", "@apricot-lend/solana-swaps-js@^0.1.18": + version "0.1.23" + resolved "https://registry.yarnpkg.com/@apricot-lend/solana-swaps-js/-/solana-swaps-js-0.1.23.tgz#64ed730262db64fc296cd986e1f55bac130dfe8b" + integrity sha512-YWQiTyjFTtr3qXMdCL34m/1yOSq4pwm4Pr2GnH9jUU2zjF5bVlxyzCtd9qOQmTcbh+NoUtkO/3IfbDATzhF6mw== + dependencies: + "@orca-so/common-sdk" "0.1.1" + "@orca-so/whirlpools-sdk" "0.5.3" + "@project-serum/anchor" "^0.25.0" + "@solana/spl-token" "^0.1.8" + "@solana/web3.js" "^1.29.0" + decimal.js "^10.4.2" + tiny-invariant "^1.1.0" + "@babel/runtime@^7.10.5", "@babel/runtime@^7.12.5", "@babel/runtime@^7.17.2": version "7.20.6" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.20.6.tgz#facf4879bfed9b5326326273a64220f099b0fce3" @@ -9,6 +64,24 @@ dependencies: regenerator-runtime "^0.13.11" +"@blockworks-foundation/mango-client@^3.4.7": + version "3.6.20" + resolved "https://registry.yarnpkg.com/@blockworks-foundation/mango-client/-/mango-client-3.6.20.tgz#66ed0ae4545959fdc31ca1918de0f931de579d41" + integrity sha512-Te0i52KUyp5e8jQQZlIMsTy9fKIfefPHvkA8+NRGIH80kQcnJKKfzw3T1NxaDsc3KFMZwpuN3m4afDNpKTuF0g== + dependencies: + "@project-serum/anchor" "^0.21.0" + "@project-serum/serum" "^0.13.65" + "@project-serum/sol-wallet-adapter" "^0.2.0" + "@solana/spl-token" "^0.1.6" + "@solana/web3.js" "^1.43.5" + big.js "^6.1.1" + bn.js "^5.1.0" + buffer-layout "^1.2.1" + cross-fetch "^3.1.5" + dotenv "^10.0.0" + toformat "^2.0.0" + yargs "^17.0.1" + "@cykura/sdk-core@npm:@jup-ag/cykura-sdk-core@0.1.8", "@jup-ag/cykura-sdk-core@0.1.8": version "0.1.8" resolved "https://registry.yarnpkg.com/@jup-ag/cykura-sdk-core/-/cykura-sdk-core-0.1.8.tgz#ba8724644e18d1006422dbba5c7701360a729b91" @@ -71,32 +144,41 @@ dependencies: "@hapi/hoek" "^9.0.0" -"@jup-ag/core@1.0.0-beta.26": - version "1.0.0-beta.26" - resolved "https://registry.yarnpkg.com/@jup-ag/core/-/core-1.0.0-beta.26.tgz#fd2e637d982f809ad0373753e4f7e7d46c3a1ab0" - integrity sha512-TaUbh6eriuc59wnbM58HS2ahQHn3P3TAwBjwlqOIF3YHtuHP5OZB+Z7YkmHIl4UUvHcVy5cWqUEHnvfPDwDIdg== +"@jup-ag/core@3.0.0-beta.1": + version "3.0.0-beta.1" + resolved "https://registry.yarnpkg.com/@jup-ag/core/-/core-3.0.0-beta.1.tgz#df4012f52d4591d0ebe0a717fed3f3952e6d098c" + integrity sha512-S5Oor/7m4y4dbpOzi5nLrHsmXjn8ZlCygoocBIUKZxHtU3Cr9vyJI5E0HaNOU0f8Ln9O3kVxKHtGXAkHPZYpOg== dependencies: - "@jup-ag/crema-sdk" "2.0.6" + "@jup-ag/crema-sdk" "2.0.7" "@jup-ag/cykura-sdk" "0.1.25" "@jup-ag/cykura-sdk-core" "0.1.8" + "@jup-ag/deltafi-sdk" "0.0.2" + "@jup-ag/goosefx-ssl-sdk" "1.2.13" + "@jup-ag/invariant" "0.9.35" "@jup-ag/lifinity-sdk" "0.1.72" - "@jup-ag/math" "1.0.0-beta.26" + "@jup-ag/math" "3.0.0-beta.1" "@jup-ag/whirlpool-sdk" "0.1.1" - "@mercurial-finance/optimist" "0.1.4" - "@project-serum/anchor" "0.23.0" + "@mercurial-finance/dynamic-amm-sdk" "0.1.4" + "@mercurial-finance/optimist" "0.1.8" + "@mercurial-finance/vault-sdk" "0.2.27-25239a99.0" + "@noble/hashes" "1.1.2" + "@project-serum/anchor" "0.24.2" "@project-serum/serum" "0.13.65" + "@pythnetwork/client" "2.7.3" "@saberhq/stableswap-sdk" "1.13.6" "@solana/spl-token" "0.1.8" + bignumber.js "9.1.0" bn.js "5.2.1" cross-fetch "3.1.5" decimal.js "10.3.1" + fzstd "~0.0.4" jsbi "4.3.0" promise-retry "2.0.1" -"@jup-ag/crema-sdk@2.0.6": - version "2.0.6" - resolved "https://registry.yarnpkg.com/@jup-ag/crema-sdk/-/crema-sdk-2.0.6.tgz#cb432379ca9c4998cb41b4f574244d0070e99365" - integrity sha512-jfCWywBVKXs6tyXbtcY5kWIbx+HE0O0k9qGGaR4Y8ffLjycEChMQ8TmddBn3ZAPDfgwCeJQ7eE5jxVq9hM6zBA== +"@jup-ag/crema-sdk@2.0.7": + version "2.0.7" + resolved "https://registry.yarnpkg.com/@jup-ag/crema-sdk/-/crema-sdk-2.0.7.tgz#f9f19b07d6d32bd85eff9c8ba41c89b7a059cd42" + integrity sha512-EW1B36g2p1xZsXYLdY98pVP9yiI1viZBIIbfWZ9vVue1PDudsU8dNZXyjtnLbOBuRpT6QYecF/FTXcgLEjY7xg== dependencies: "@saberhq/solana-contrib" "^1.12.66" "@saberhq/token-utils" "^1.12.66" @@ -120,6 +202,37 @@ "@solana/web3.js" "^1.32.0" tiny-invariant "^1.1.0" +"@jup-ag/deltafi-sdk@0.0.2": + version "0.0.2" + resolved "https://registry.yarnpkg.com/@jup-ag/deltafi-sdk/-/deltafi-sdk-0.0.2.tgz#f8ca171d735562028dccac1eac4b88c3cfa2e014" + integrity sha512-x5aibvJn4JSa7TnviYLDchkxOluvE9W209jy90YfuccNsIDRB3qhDK5rpSu8y2kInXJFA++CY5qTr2VklvdqtQ== + dependencies: + "@project-serum/anchor" "~0.24.2" + "@pythnetwork/client" "^2.5.1" + "@solana/spl-token" "^0.1.8" + bigint-buffer "^1.1.5" + bignumber.js "^9.1.0" + bn.js "^5.2.0" + +"@jup-ag/goosefx-ssl-sdk@1.2.13": + version "1.2.13" + resolved "https://registry.yarnpkg.com/@jup-ag/goosefx-ssl-sdk/-/goosefx-ssl-sdk-1.2.13.tgz#906e03ece446e6411d55c78a79c6fc6aff0ad3bb" + integrity sha512-z249NSWWz716KR9El/Z/51cIxlH5A7cZ+afkx05C6HTNICfQpJXngYLJDJCfyJUAjowexPMr/m/rsDv+A/KH4A== + dependencies: + "@project-serum/anchor" "^0.17.1-beta.1" + "@solana/buffer-layout" "^4.0.0" + "@solana/spl-token" "^0.2.0" + "@solana/web3.js" "^1.41.1" + +"@jup-ag/invariant@0.9.35": + version "0.9.35" + resolved "https://registry.yarnpkg.com/@jup-ag/invariant/-/invariant-0.9.35.tgz#53de404dae38023ea3834dda9bb2c7d83537c2d3" + integrity sha512-5OPWvfOQYfXMeI4JjlCxTvoF9MR9wVQ+zVGAtzfgrfkM0sFslJ0c+4pn1TwySc+FGw4MDehrKUMj86VtqZnYZg== + dependencies: + "@project-serum/anchor" "^0.24.0" + "@solana/spl-token-registry" "^0.2.4484" + invariant "^2.2.4" + "@jup-ag/lifinity-sdk@0.1.72": version "0.1.72" resolved "https://registry.yarnpkg.com/@jup-ag/lifinity-sdk/-/lifinity-sdk-0.1.72.tgz#ef120303d99cd371fbff9b04d63d8cb3b92c6d9b" @@ -133,10 +246,10 @@ "@solana/web3.js" "1.31.0" decimal.js "^10.3.1" -"@jup-ag/math@1.0.0-beta.26": - version "1.0.0-beta.26" - resolved "https://registry.yarnpkg.com/@jup-ag/math/-/math-1.0.0-beta.26.tgz#78945ecd3e72e0662c801d0b5ffdc021ee0a02c9" - integrity sha512-R7QmF9u0f+r7j9xH5DldoHHAr66/cGP8AiWC7Z3M2sK5bRSxuYW834/ZEhRmgEY42xmg+a7kQeBxaQnChF4bUg== +"@jup-ag/math@3.0.0-beta.1": + version "3.0.0-beta.1" + resolved "https://registry.yarnpkg.com/@jup-ag/math/-/math-3.0.0-beta.1.tgz#8fce70de0bfd8344d77cc635e5faacb358370157" + integrity sha512-NbmHk1j7KTlCbccItUUAAhy4w8OIerAS2VfALEFOPAm1T85zvF4X2FDBVIL7BgzOm1ZlcZkUupGaVTXRypfRUw== dependencies: decimal.js "10.3.1" jsbi "4.3.0" @@ -154,16 +267,124 @@ decimal.js "~10.3.1" tiny-invariant "~1.2.0" -"@mercurial-finance/optimist@0.1.4": +"@mercurial-finance/dynamic-amm-sdk@0.1.4": version "0.1.4" - resolved "https://registry.yarnpkg.com/@mercurial-finance/optimist/-/optimist-0.1.4.tgz#3ed5155fe94d5df0f86d2f47a3506460109eed4a" - integrity sha512-m8QuyPx9j7fGd2grw0mD5WcYtBb8l7+OQI5aHdeIlxPg3QoPrbSdCHyFOuipYbvB0EY5YDbOmyeFwiTcBkBBSw== + resolved "https://registry.yarnpkg.com/@mercurial-finance/dynamic-amm-sdk/-/dynamic-amm-sdk-0.1.4.tgz#49c68c0171ef76520d98141d6a3493ed02f5db1a" + integrity sha512-zxFAuw5Qep24640rGGK1OT4F51CkyaA5L5GbnDMZjTQagB6Uv7gicamvGhsMkDSf1rYuEsfC248Kbp7TW2gr7Q== + dependencies: + "@mercurial-finance/vault-sdk" "0.2.27" + "@project-serum/anchor" "0.24.2" + "@saberhq/anchor-contrib" "^1.13.32" + "@saberhq/stableswap-sdk" "^1.13.32" + "@saberhq/token-utils" "1.13.32" + "@solana/spl-token" "0.1.8" + "@solana/spl-token-registry" "0.2.1105" + "@solana/web3.js" "^1.42.0" + bn-sqrt "^1.0.0" + bn.js "5.2.1" + dotenv "^16.0.1" + invariant "^2.2.4" + jsbi "^4.3.0" + +"@mercurial-finance/optimist@0.1.8": + version "0.1.8" + resolved "https://registry.yarnpkg.com/@mercurial-finance/optimist/-/optimist-0.1.8.tgz#d183dd4c0c09b9b446f9f90edff0265e63a5d1a2" + integrity sha512-2lkM07ia0QZzQqd8wOP1xiAazgRcfCoWXbcWwRAJZfNNuM0d6ybdyPJKagFU9r7vrlcEhLVCAlenRHMcFZ1v+w== + dependencies: + promise-retry "2.0.1" + +"@mercurial-finance/optimist@^0.1.4": + version "0.1.9" + resolved "https://registry.yarnpkg.com/@mercurial-finance/optimist/-/optimist-0.1.9.tgz#82b612fc6d602c1010cada4fb396d92b7fcae03a" + integrity sha512-cOJan58djQdg2iHKV/jPFgD1bNm2hffa5S0FXREKSNfzZRfsYLZOnRNJ24X0o+VJ9kC5BY0HYwduT/+dAyZ0AQ== + dependencies: + promise-retry "2.0.1" + +"@mercurial-finance/vault-sdk@0.2.27": + version "0.2.27" + resolved "https://registry.yarnpkg.com/@mercurial-finance/vault-sdk/-/vault-sdk-0.2.27.tgz#9be20d8114a62da568161e0e6db1aebc11c19859" + integrity sha512-WncIXzkDr+PZaEofDcjfKmmWyg1QW5E5Ceg7OYrzPij6i+qBHWz7l+1YQOshsTwqEwE0WpC8tfyZXFSqwtdnQw== + dependencies: + "@apricot-lend/sdk-ts" "0.17.5" + "@blockworks-foundation/mango-client" "^3.4.7" + "@mercurial-finance/optimist" "^0.1.4" + "@port.finance/port-sdk" "^0.2.67" + "@project-serum/anchor" "0.24.2" + "@quarryprotocol/quarry-sdk" "5.0.2" + "@saberhq/anchor-contrib" "^1.13.6" + "@solana/buffer-layout" "^4.0.0" + "@solana/spl-token" "0.1.8" + "@solana/spl-token-registry" "0.2.1105" + "@solana/wallet-adapter-base" "^0.9.5" + "@solana/web3.js" "^1.42.0" + "@solendprotocol/solend-sdk" "^0.5.6" + bn.js "5.2.1" + cross-fetch "^3.1.5" + decimal.js "10.3.1" + francium-sdk "^1.3.34" + jsbi "4.3.0" + +"@mercurial-finance/vault-sdk@0.2.27-25239a99.0": + version "0.2.27-25239a99.0" + resolved "https://registry.yarnpkg.com/@mercurial-finance/vault-sdk/-/vault-sdk-0.2.27-25239a99.0.tgz#65876da52de0ed729cdda218ad156f5ed1975fbb" + integrity sha512-a6xJ1CH7s19TAn7qgcpKzkSt+f1Hp6Rev1eunYVV6f+w98vQEhjEaoHjn81DHpDry5nQNF89yCTaELQYqR2yRw== + dependencies: + "@apricot-lend/sdk-ts" "^0.17.3" + "@blockworks-foundation/mango-client" "^3.4.7" + "@mercurial-finance/optimist" "^0.1.4" + "@port.finance/port-sdk" "^0.2.67" + "@project-serum/anchor" "0.24.2" + "@quarryprotocol/quarry-sdk" "5.0.2" + "@saberhq/anchor-contrib" "^1.13.6" + "@solana/buffer-layout" "^4.0.0" + "@solana/spl-token" "0.1.8" + "@solana/spl-token-registry" "0.2.1105" + "@solana/wallet-adapter-base" "^0.9.5" + "@solana/web3.js" "^1.42.0" + "@solendprotocol/solend-sdk" "^0.5.6" + bn.js "5.2.1" + cross-fetch "^3.1.5" + decimal.js "10.3.1" + francium-sdk "^1.3.34" + jsbi "4.3.0" + +"@metaplex-foundation/mpl-core@^0.0.2": + version "0.0.2" + resolved "https://registry.yarnpkg.com/@metaplex-foundation/mpl-core/-/mpl-core-0.0.2.tgz#17ee2cc216e17629d6df1dbba75964625ebbd603" + integrity sha512-UUJ4BlYiWdDegAWmjsNQiNehwYU3QfSFWs3sv4VX0J6/ZrQ28zqosGhQ+I2ZCTEy216finJ82sZWNjuwSWCYyQ== + dependencies: + "@solana/web3.js" "^1.31.0" + bs58 "^4.0.1" + +"@metaplex-foundation/mpl-token-metadata@1.2.5": + version "1.2.5" + resolved "https://registry.yarnpkg.com/@metaplex-foundation/mpl-token-metadata/-/mpl-token-metadata-1.2.5.tgz#1a927b1c7d30cd634a1e4782022712a02f6865c2" + integrity sha512-pxRG53JsTSwXpiJJMHNulJhH8kO3hHztQ3QxslUoKw2hBYKXsg9TGsiHgNIhN2MPZGBJ2pDeK6kNGv0sd54HhA== + dependencies: + "@metaplex-foundation/mpl-core" "^0.0.2" + "@solana/spl-token" "^0.1.8" + "@solana/web3.js" "^1.31.0" + +"@mithraic-labs/psy-american@^0.2.1": + version "0.2.3" + resolved "https://registry.yarnpkg.com/@mithraic-labs/psy-american/-/psy-american-0.2.3.tgz#a6f3a62f96ec01f94463a7b12f5bf71a003c9942" + integrity sha512-NsDfb9QNuLKNqRnq8rWAoD2Y3ouAEsAPFfwP28SmDVfkugvj03nvQtjotFLlH2TsE31YonG+gauhpeeGKZyyuw== + dependencies: + "@project-serum/anchor" "^0.24.2" + "@project-serum/serum" "^0.13.60" + "@solana/spl-token" "^0.1.8" + "@solana/web3.js" "^1.28.0" "@noble/ed25519@^1.7.0": version "1.7.1" resolved "https://registry.yarnpkg.com/@noble/ed25519/-/ed25519-1.7.1.tgz#6899660f6fbb97798a6fbd227227c4589a454724" integrity sha512-Rk4SkJFaXZiznFyC/t77Q0NKS4FL7TLJJsVG2V2oiEq3kJVeTdxysEe/yRWSpnWMe808XRDJ+VFh5pt/FN5plw== +"@noble/hashes@1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.1.2.tgz#e9e035b9b166ca0af657a7848eb2718f0f22f183" + integrity sha512-KYRCASVTv6aeUi1tsF8/vpyR7zpfs3FUzy2Jqm+MU+LmUKhQ0y2FpfwqkCcxSg2ua4GALJd8k2R76WxwZGbQpA== + "@noble/hashes@^1.1.2": version "1.1.4" resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.1.4.tgz#2611ebf5764c1bf754da7c7794de4fb30512336d" @@ -174,6 +395,26 @@ resolved "https://registry.yarnpkg.com/@noble/secp256k1/-/secp256k1-1.7.0.tgz#d15357f7c227e751d90aa06b05a0e5cf993ba8c1" integrity sha512-kbacwGSsH/CTout0ZnZWxnW1B+jH/7r/WAAKLBtrRJ/+CUH7lgmQzl3GTrQua3SGKWNSDsS6lmjnDpIJ5Dxyaw== +"@orca-so/common-sdk@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@orca-so/common-sdk/-/common-sdk-0.1.1.tgz#18a3a562f1b57f970f2115f453c7e00aa05034cf" + integrity sha512-OKFwr5VgzLKmM/C6xQom4y1jxrihuhKXhDwYMbgPLJW4SllePOfS6SG5fp9/17SvyuWL/zna8Z6ZW2QHpX1Yxw== + dependencies: + "@project-serum/anchor" "~0.25.0" + "@solana/spl-token" "0.1.8" + decimal.js "^10.3.1" + tiny-invariant "^1.2.0" + +"@orca-so/common-sdk@~0.1.1": + version "0.1.4" + resolved "https://registry.yarnpkg.com/@orca-so/common-sdk/-/common-sdk-0.1.4.tgz#4e87da14f525228ded7969431738a32260dc8495" + integrity sha512-reJyk60vEyDH4IutT+ulxy+FA12MfmVC9/13cLkcOBNTwtgV9/UIJnuA5I9ptqn4gaCols078n2el9nbtLsKaQ== + dependencies: + "@project-serum/anchor" "~0.25.0" + "@solana/spl-token" "0.1.8" + decimal.js "^10.3.1" + tiny-invariant "^1.2.0" + "@orca-so/whirlpool-client-sdk@npm:@jup-ag/whirlpool-client-sdk@0.0.8": version "0.0.8" resolved "https://registry.yarnpkg.com/@jup-ag/whirlpool-client-sdk/-/whirlpool-client-sdk-0.0.8.tgz#d3715266e0a76ab699078ce1f5525f80e09dd825" @@ -185,10 +426,61 @@ decimal.js "~10.3.1" lru-cache "^7.9.0" -"@project-serum/anchor@0.23.0", "@project-serum/anchor@~0.23.0": - version "0.23.0" - resolved "https://registry.yarnpkg.com/@project-serum/anchor/-/anchor-0.23.0.tgz#2b2eb6b51601b073e8db26663aa2d6c2f2841771" - integrity sha512-LV2/ifZOJVFTZ4GbEloXln3iVfCvO1YM8i7BBCrUm4tehP7irMx4nr4/IabHWOzrQcQElsxSP/lb1tBp+2ff8A== +"@orca-so/whirlpools-sdk@0.5.3": + version "0.5.3" + resolved "https://registry.yarnpkg.com/@orca-so/whirlpools-sdk/-/whirlpools-sdk-0.5.3.tgz#95b4547b4caf05db2b850dadf05b3b9f38c170a9" + integrity sha512-HhoZo+q1KXxAEjfVbbKTdW2B8APxDpvsRCX/AqxnN2/DOI3M+p1ZWHkrrHNINbygwJXE6Mi+jwx7jTBT2hbtVw== + dependencies: + "@metaplex-foundation/mpl-token-metadata" "1.2.5" + "@orca-so/common-sdk" "~0.1.1" + "@project-serum/anchor" "~0.25.0" + "@solana/spl-token" "^0.1.8" + decimal.js "^10.3.1" + tiny-invariant "^1.2.0" + +"@port.finance/port-sdk@^0.2.67": + version "0.2.69" + resolved "https://registry.yarnpkg.com/@port.finance/port-sdk/-/port-sdk-0.2.69.tgz#ceeb3c942779ecfedf487b60df0cdd42343f909a" + integrity sha512-Vhv72U4RSSFMBqr7kNx2kzakfWspnphWfYliOHqBALEmmS/JO8Nwf4cctVCqfjVc2pasjNqpIi7ltojRLLXAgg== + dependencies: + "@project-serum/anchor" "^0.21.0" + "@saberhq/solana-contrib" "^1.12.53" + "@saberhq/token-utils" "^1.12.53" + "@solana/buffer-layout" "^3.0.0" + "@solana/spl-token" "^0.1.8" + "@solana/spl-token-registry" "^0.2.1107" + big.js "^6.1.1" + bignumber.js "^9.0.1" + buffer-layout "1.2.2" + jsbi "^4.1.0" + prettier "^2.4.1" + tiny-invariant "^1.2.0" + typescript "^4.3.5" + +"@project-serum/anchor@0.16.2": + version "0.16.2" + resolved "https://registry.yarnpkg.com/@project-serum/anchor/-/anchor-0.16.2.tgz#b8b4ec4c749d59a224108f8d82ab68217ef752ae" + integrity sha512-wOJwObd4wOZ5tRRMCKYjeMNsEmf7vuC71KQRnw6wthhErL8c/818n4gYIZCf/1ZPl/8WPruIlmtQHDSEyy2+0Q== + dependencies: + "@project-serum/borsh" "^0.2.2" + "@solana/web3.js" "^1.17.0" + base64-js "^1.5.1" + bn.js "^5.1.2" + bs58 "^4.0.1" + buffer-layout "^1.2.0" + camelcase "^5.3.1" + crypto-hash "^1.3.0" + eventemitter3 "^4.0.7" + find "^0.3.0" + js-sha256 "^0.9.0" + pako "^2.0.3" + snake-case "^3.0.4" + toml "^3.0.0" + +"@project-serum/anchor@0.24.2", "@project-serum/anchor@^0.24.0", "@project-serum/anchor@^0.24.2", "@project-serum/anchor@~0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@project-serum/anchor/-/anchor-0.24.2.tgz#a3c52a99605c80735f446ca9b3a4885034731004" + integrity sha512-0/718g8/DnEuwAidUwh5wLYphUYXhUbiClkuRNhvNoa+1Y8a4g2tJyxoae+emV+PG/Gikd/QUBNMkIcimiIRTA== dependencies: "@project-serum/borsh" "^0.2.5" "@solana/web3.js" "^1.36.0" @@ -200,7 +492,6 @@ cross-fetch "^3.1.5" crypto-hash "^1.3.0" eventemitter3 "^4.0.7" - find "^0.3.0" js-sha256 "^0.9.0" pako "^2.0.3" snake-case "^3.0.4" @@ -226,6 +517,26 @@ snake-case "^3.0.4" toml "^3.0.0" +"@project-serum/anchor@^0.17.1-beta.1": + version "0.17.1-beta.2" + resolved "https://registry.yarnpkg.com/@project-serum/anchor/-/anchor-0.17.1-beta.2.tgz#c93b460018c1e90a9104d5b5b71f2cb7718bed50" + integrity sha512-uUqojV+oTmzjf/OelVj7anD71/wWnkdKAaNpz4Q57T06XUaFPnNbOvKh7c991/WDVGXrdDCQcx6nRQEP1tQn2Q== + dependencies: + "@project-serum/borsh" "^0.2.2" + "@solana/web3.js" "^1.17.0" + base64-js "^1.5.1" + bn.js "^5.1.2" + bs58 "^4.0.1" + buffer-layout "^1.2.0" + camelcase "^5.3.1" + crypto-hash "^1.3.0" + eventemitter3 "^4.0.7" + find "^0.3.0" + js-sha256 "^0.9.0" + pako "^2.0.3" + snake-case "^3.0.4" + toml "^3.0.0" + "@project-serum/anchor@^0.20.1": version "0.20.1" resolved "https://registry.yarnpkg.com/@project-serum/anchor/-/anchor-0.20.1.tgz#0937807e807e8332aa708cfef4bcb6cbb88b4129" @@ -246,6 +557,27 @@ snake-case "^3.0.4" toml "^3.0.0" +"@project-serum/anchor@^0.21.0": + version "0.21.0" + resolved "https://registry.yarnpkg.com/@project-serum/anchor/-/anchor-0.21.0.tgz#ad5fb33744991ec1900cdb2fd22707c908b12b5f" + integrity sha512-flRuW/F+iC8mitNokx82LOXyND7Dyk6n5UUPJpQv/+NfySFrNFlzuQZaBZJ4CG5g9s8HS/uaaIz1nVkDR8V/QA== + dependencies: + "@project-serum/borsh" "^0.2.4" + "@solana/web3.js" "^1.17.0" + base64-js "^1.5.1" + bn.js "^5.1.2" + bs58 "^4.0.1" + buffer-layout "^1.2.2" + camelcase "^5.3.1" + cross-fetch "^3.1.5" + crypto-hash "^1.3.0" + eventemitter3 "^4.0.7" + find "^0.3.0" + js-sha256 "^0.9.0" + pako "^2.0.3" + snake-case "^3.0.4" + toml "^3.0.0" + "@project-serum/anchor@^0.22.0", "@project-serum/anchor@^0.22.1": version "0.22.1" resolved "https://registry.yarnpkg.com/@project-serum/anchor/-/anchor-0.22.1.tgz#698a9620f94691de0a12bbc650a5c8380e2f0e8a" @@ -267,10 +599,31 @@ snake-case "^3.0.4" toml "^3.0.0" -"@project-serum/anchor@^0.24.2": - version "0.24.2" - resolved "https://registry.yarnpkg.com/@project-serum/anchor/-/anchor-0.24.2.tgz#a3c52a99605c80735f446ca9b3a4885034731004" - integrity sha512-0/718g8/DnEuwAidUwh5wLYphUYXhUbiClkuRNhvNoa+1Y8a4g2tJyxoae+emV+PG/Gikd/QUBNMkIcimiIRTA== +"@project-serum/anchor@^0.25.0", "@project-serum/anchor@~0.25.0": + version "0.25.0" + resolved "https://registry.yarnpkg.com/@project-serum/anchor/-/anchor-0.25.0.tgz#88ee4843336005cf5a64c80636ce626f0996f503" + integrity sha512-E6A5Y/ijqpfMJ5psJvbw0kVTzLZFUcOFgs6eSM2M2iWE1lVRF18T6hWZVNl6zqZsoz98jgnNHtVGJMs+ds9A7A== + dependencies: + "@project-serum/borsh" "^0.2.5" + "@solana/web3.js" "^1.36.0" + base64-js "^1.5.1" + bn.js "^5.1.2" + bs58 "^4.0.1" + buffer-layout "^1.2.2" + camelcase "^5.3.1" + cross-fetch "^3.1.5" + crypto-hash "^1.3.0" + eventemitter3 "^4.0.7" + js-sha256 "^0.9.0" + pako "^2.0.3" + snake-case "^3.0.4" + superstruct "^0.15.4" + toml "^3.0.0" + +"@project-serum/anchor@~0.23.0": + version "0.23.0" + resolved "https://registry.yarnpkg.com/@project-serum/anchor/-/anchor-0.23.0.tgz#2b2eb6b51601b073e8db26663aa2d6c2f2841771" + integrity sha512-LV2/ifZOJVFTZ4GbEloXln3iVfCvO1YM8i7BBCrUm4tehP7irMx4nr4/IabHWOzrQcQElsxSP/lb1tBp+2ff8A== dependencies: "@project-serum/borsh" "^0.2.5" "@solana/web3.js" "^1.36.0" @@ -282,12 +635,13 @@ cross-fetch "^3.1.5" crypto-hash "^1.3.0" eventemitter3 "^4.0.7" + find "^0.3.0" js-sha256 "^0.9.0" pako "^2.0.3" snake-case "^3.0.4" toml "^3.0.0" -"@project-serum/borsh@^0.2.2", "@project-serum/borsh@^0.2.5": +"@project-serum/borsh@^0.2.2", "@project-serum/borsh@^0.2.3", "@project-serum/borsh@^0.2.4", "@project-serum/borsh@^0.2.5": version "0.2.5" resolved "https://registry.yarnpkg.com/@project-serum/borsh/-/borsh-0.2.5.tgz#6059287aa624ecebbfc0edd35e4c28ff987d8663" integrity sha512-UmeUkUoKdQ7rhx6Leve1SssMR/Ghv8qrEiyywyxSWg7ooV7StdpPBhciiy5eB3T0qU1BXvdRNC8TdrkxK7WC5Q== @@ -295,7 +649,7 @@ bn.js "^5.1.2" buffer-layout "^1.2.0" -"@project-serum/serum@0.13.65", "@project-serum/serum@^0.13.61": +"@project-serum/serum@0.13.65", "@project-serum/serum@^0.13.60", "@project-serum/serum@^0.13.61", "@project-serum/serum@^0.13.65": version "0.13.65" resolved "https://registry.yarnpkg.com/@project-serum/serum/-/serum-0.13.65.tgz#6d3cf07912f13985765237f053cca716fe84b0b0" integrity sha512-BHRqsTqPSfFB5p+MgI2pjvMBAQtO8ibTK2fYY96boIFkCI3TTwXDt2gUmspeChKO2pqHr5aKevmexzAcXxrSRA== @@ -306,6 +660,14 @@ bn.js "^5.1.2" buffer-layout "^1.2.0" +"@project-serum/sol-wallet-adapter@^0.2.0": + version "0.2.6" + resolved "https://registry.yarnpkg.com/@project-serum/sol-wallet-adapter/-/sol-wallet-adapter-0.2.6.tgz#b4cd25a566294354427c97c26d716112b91a0107" + integrity sha512-cpIb13aWPW8y4KzkZAPDgw+Kb+DXjCC6rZoH74MGm3I/6e/zKyGnfAuW5olb2zxonFqsYgnv7ev8MQnvSgJ3/g== + dependencies: + bs58 "^4.0.1" + eventemitter3 "^4.0.7" + "@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2": version "1.1.2" resolved "https://registry.yarnpkg.com/@protobufjs/aspromise/-/aspromise-1.1.2.tgz#9b8b0cc663d669a7d8f6f5d0893a14d348f30fbf" @@ -359,6 +721,13 @@ resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570" integrity sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw== +"@pythnetwork/client@2.7.3": + version "2.7.3" + resolved "https://registry.yarnpkg.com/@pythnetwork/client/-/client-2.7.3.tgz#6075a16dc394d1734e76b04e907a680490a61536" + integrity sha512-+2k5JXxv/yUA6WMESSppJlg4T/AP+nZZfBnHmeG3RPCIJx+bargxFLCK4B2KgpQYdeTWb+2z8yRCNF7tHooCFQ== + dependencies: + buffer "^6.0.1" + "@pythnetwork/client@^2.5.1": version "2.8.0" resolved "https://registry.yarnpkg.com/@pythnetwork/client/-/client-2.8.0.tgz#1b764d710f17c2f3cd3c9ba0c4ae74d26e72b01b" @@ -366,6 +735,26 @@ dependencies: buffer "^6.0.1" +"@quarryprotocol/quarry-sdk@5.0.2": + version "5.0.2" + resolved "https://registry.yarnpkg.com/@quarryprotocol/quarry-sdk/-/quarry-sdk-5.0.2.tgz#f306ef4c0446a2ae7432e6e0593bc3dcb75812ee" + integrity sha512-wczlmNfb8fk6WCZsLLR7ysSjgxl6ZdEJ7cNDhgvFpU9E1YMSN1f2l2NK9yw+VksuLxWCightFsBrHSqqIftDzQ== + dependencies: + superstruct "^0.15.4" + tiny-invariant "^1.2.0" + tslib "^2.3.1" + +"@saberhq/anchor-contrib@^1.13.32", "@saberhq/anchor-contrib@^1.13.6": + version "1.14.11" + resolved "https://registry.yarnpkg.com/@saberhq/anchor-contrib/-/anchor-contrib-1.14.11.tgz#cebaac040faea643ade8ecb6afeeb2dcdf5a33a2" + integrity sha512-6fOMC9XjuMSpGin/5HGqDita/dYzndjMMUNjht7yQZzD9638cdjrAutwZjvYwMUepKLdJ5CQV4bE74bSeMF9HQ== + dependencies: + "@saberhq/solana-contrib" "^1.14.11" + eventemitter3 "^4.0.7" + lodash.camelcase "^4.3.0" + lodash.mapvalues "^4.6.0" + tslib "^2.4.0" + "@saberhq/option-utils@^1.14.11": version "1.14.11" resolved "https://registry.yarnpkg.com/@saberhq/option-utils/-/option-utils-1.14.11.tgz#db6c2e79ade3c8b15f90eb376c783c31358bf1ef" @@ -373,7 +762,7 @@ dependencies: tslib "^2.4.0" -"@saberhq/solana-contrib@^1.12.66", "@saberhq/solana-contrib@^1.13.6", "@saberhq/solana-contrib@^1.14.11": +"@saberhq/solana-contrib@^1.12.53", "@saberhq/solana-contrib@^1.12.66", "@saberhq/solana-contrib@^1.13.32", "@saberhq/solana-contrib@^1.13.6", "@saberhq/solana-contrib@^1.14.11", "@saberhq/solana-contrib@^1.14.9": version "1.14.11" resolved "https://registry.yarnpkg.com/@saberhq/solana-contrib/-/solana-contrib-1.14.11.tgz#d4a6a09f426afb353fc5727b06365446d4642bb7" integrity sha512-HOEJpTZnSGmrfJG2gV18vQbtI14ET9l4/Q1yyPk4R2dkydxZIfBIPCI9SRWZ9g01/nuob3Fryd79Ca6QDk7qjw== @@ -399,7 +788,30 @@ tiny-invariant "^1.2.0" tslib "^2.4.0" -"@saberhq/token-utils@^1.12.66", "@saberhq/token-utils@^1.13.6": +"@saberhq/stableswap-sdk@^1.13.32": + version "1.14.11" + resolved "https://registry.yarnpkg.com/@saberhq/stableswap-sdk/-/stableswap-sdk-1.14.11.tgz#88397d8a546888a92f767d98c83586ef0ced2f1d" + integrity sha512-nEOLIFC1QyeoNOtIQMotlyaGfYCsmyJJn0HqrjJL2tcX87zWOmH5aEEfhmg9jJ19aiFYPvQeQ6h8eKp+nFk9Ow== + dependencies: + "@saberhq/solana-contrib" "^1.14.11" + "@saberhq/token-utils" "^1.14.11" + "@solana/buffer-layout" "^4.0.0" + tiny-invariant "^1.3.1" + tslib "^2.4.0" + +"@saberhq/token-utils@1.13.32": + version "1.13.32" + resolved "https://registry.yarnpkg.com/@saberhq/token-utils/-/token-utils-1.13.32.tgz#2acc98bd4d3732b826396a70b958198e0d20dee8" + integrity sha512-n5ECiw82IQJwyq9bTkcrbNWVi+lAQoQlJlTmIye8odUQATBsqOWN+clqfrFkn/UMmezO60bo34bUaM0Oir7Pew== + dependencies: + "@saberhq/solana-contrib" "^1.13.32" + "@solana/buffer-layout" "^4.0.0" + "@solana/spl-token" "^0.1.8" + "@ubeswap/token-math" "^5.1.6" + tiny-invariant "^1.2.0" + tslib "^2.4.0" + +"@saberhq/token-utils@^1.12.53", "@saberhq/token-utils@^1.14.11": version "1.14.11" resolved "https://registry.yarnpkg.com/@saberhq/token-utils/-/token-utils-1.14.11.tgz#bc895173245a46789b65080eb38722e99dbfeb22" integrity sha512-C+K1IHQuLwG6APT8wbrlvJPM4arTcNHnnydqZbMpsi1Zyyis+UPM3n/PgHmyX2ydtQ+GzPMLFMgxahtjicEgXw== @@ -411,6 +823,18 @@ tiny-invariant "^1.3.1" tslib "^2.4.0" +"@saberhq/token-utils@^1.12.66", "@saberhq/token-utils@^1.13.6": + version "1.14.9" + resolved "https://registry.yarnpkg.com/@saberhq/token-utils/-/token-utils-1.14.9.tgz#265cb24134c504b04d247b3b8b84b74b6eb8cd52" + integrity sha512-iIcWQYFV2UBQtfQJIsnq38eW04hSgQiJDpshyT7Z69k6FZlAaNC5yvQQnCI1k4K/z7IZpu5W8Pq8XD665UG+AA== + dependencies: + "@saberhq/solana-contrib" "^1.14.9" + "@solana/buffer-layout" "^4.0.0" + "@solana/spl-token" "^0.1.8" + "@ubeswap/token-math" "^5.2.1" + tiny-invariant "^1.3.1" + tslib "^2.4.0" + "@sideway/address@^4.1.3": version "4.1.4" resolved "https://registry.yarnpkg.com/@sideway/address/-/address-4.1.4.tgz#03dccebc6ea47fdc226f7d3d1ad512955d4783f0" @@ -438,6 +862,13 @@ bigint-buffer "^1.1.5" bignumber.js "^9.0.1" +"@solana/buffer-layout@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@solana/buffer-layout/-/buffer-layout-3.0.0.tgz#b9353caeb9a1589cb77a1b145bcb1a9a93114326" + integrity sha512-MVdgAKKL39tEs0l8je0hKaXLQFb7Rdfb0Xg2LjFZd8Lfdazkg6xiS98uAZrEKvaoF3i4M95ei9RydkGIDMeo3w== + dependencies: + buffer "~6.0.3" + "@solana/buffer-layout@^4.0.0": version "4.0.1" resolved "https://registry.yarnpkg.com/@solana/buffer-layout/-/buffer-layout-4.0.1.tgz#b996235eaec15b1e0b5092a8ed6028df77fa6c15" @@ -445,6 +876,20 @@ dependencies: buffer "~6.0.3" +"@solana/spl-token-registry@0.2.1105": + version "0.2.1105" + resolved "https://registry.yarnpkg.com/@solana/spl-token-registry/-/spl-token-registry-0.2.1105.tgz#460fc363096aa59c5150f67736cddc1d5a810e8a" + integrity sha512-s9MIUoTAtqYsg1RaXIHXq7DhsUVS9VckvrwYuJBFn68YCZNSMUEquqaimbaHi88OVduFsApVAbKRmsGnJ9abIw== + dependencies: + cross-fetch "3.0.6" + +"@solana/spl-token-registry@^0.2.1107", "@solana/spl-token-registry@^0.2.4484": + version "0.2.4574" + resolved "https://registry.yarnpkg.com/@solana/spl-token-registry/-/spl-token-registry-0.2.4574.tgz#13f4636b7bec90d2bb43bbbb83512cd90d2ce257" + integrity sha512-JzlfZmke8Rxug20VT/VpI2XsXlsqMlcORIUivF+Yucj7tFi7A0dXG7h+2UnD0WaZJw8BrUz2ABNkUnv89vbv1A== + dependencies: + cross-fetch "3.0.6" + "@solana/spl-token-v2@npm:@solana/spl-token@0.2.0": version "0.2.0" resolved "https://registry.yarnpkg.com/@solana/spl-token/-/spl-token-0.2.0.tgz#329bb6babb5de0f9c40035ddb1657f01a8347acd" @@ -467,7 +912,14 @@ buffer-layout "^1.2.0" dotenv "10.0.0" -"@solana/web3.js@1.31.0", "@solana/web3.js@^1.17.0", "@solana/web3.js@^1.21.0", "@solana/web3.js@^1.32.0", "@solana/web3.js@^1.36.0", "@solana/web3.js@^1.63.0", "@solana/web3.js@^1.66.2": +"@solana/wallet-adapter-base@^0.9.5": + version "0.9.20" + resolved "https://registry.yarnpkg.com/@solana/wallet-adapter-base/-/wallet-adapter-base-0.9.20.tgz#42a3a2f42db9f6a41e36a132ee5a06a0bd3784f0" + integrity sha512-ZvnhJ4EJk61oyuBH/a9tMpUfeWQ3g3Cc0Nzl1NzE4SdqEhiNoEW8HXDig9HMemZ9bIEUxIpPWxp+SwjVl0u+rg== + dependencies: + eventemitter3 "^4.0.0" + +"@solana/web3.js@1.31.0", "@solana/web3.js@^1.17.0", "@solana/web3.js@^1.21.0", "@solana/web3.js@^1.28.0", "@solana/web3.js@^1.29.0", "@solana/web3.js@^1.31.0", "@solana/web3.js@^1.32.0", "@solana/web3.js@^1.36.0", "@solana/web3.js@^1.37.0", "@solana/web3.js@^1.41.1", "@solana/web3.js@^1.42.0", "@solana/web3.js@^1.43.5", "@solana/web3.js@^1.59.0", "@solana/web3.js@^1.63.0": version "1.70.0" resolved "https://registry.yarnpkg.com/@solana/web3.js/-/web3.js-1.70.0.tgz#14ad207f431861397db85921aad8df4e8374e7c8" integrity sha512-HwdI9LaHaszfpzgxJI44iP68mJWUeqK1TeSheKQsGkH5zlVyGWGmim50MyDWu2vXiuL8Akf2xEMSrDYyLordgg== @@ -488,6 +940,24 @@ rpc-websockets "^7.5.0" superstruct "^0.14.2" +"@solendprotocol/solend-sdk@^0.5.6": + version "0.5.9" + resolved "https://registry.yarnpkg.com/@solendprotocol/solend-sdk/-/solend-sdk-0.5.9.tgz#94c6bfe75709d4dfed998eadc6a33ba4770cd4bd" + integrity sha512-QB6IJWkwKeiAVBGuXxM0ST1tNaez8IQDsM1icJrA7CdEmXnwgLyX5RuaBo9vGYfgxzUmlaIXpBUpKTPN/BU5lA== + dependencies: + "@mithraic-labs/psy-american" "^0.2.1" + "@project-serum/anchor" "^0.24.2" + "@pythnetwork/client" "^2.5.1" + "@solana/buffer-layout" "^4.0.0" + "@solana/spl-token" "^0.1.8" + "@solana/web3.js" "^1.31.0" + axios "^0.24.0" + bignumber.js "^9.0.2" + bn.js "^5.2.0" + buffer "^6.0.3" + buffer-layout "^1.2.0" + isomorphic-fetch "^3.0.0" + "@switchboard-xyz/sbv2-lite@^0.1.5": version "0.1.6" resolved "https://registry.yarnpkg.com/@switchboard-xyz/sbv2-lite/-/sbv2-lite-0.1.6.tgz#dc3fbb5b3b028dbd3c688b991bcc48a670131ddb" @@ -496,7 +966,7 @@ "@project-serum/anchor" "^0.24.2" big.js "^6.1.1" -"@switchboard-xyz/switchboard-api@^0.2.191": +"@switchboard-xyz/switchboard-api@^0.2.152", "@switchboard-xyz/switchboard-api@^0.2.191": version "0.2.201" resolved "https://registry.yarnpkg.com/@switchboard-xyz/switchboard-api/-/switchboard-api-0.2.201.tgz#d082206d521d24dbcdeb06a77e6637a56ab883eb" integrity sha512-hlxgeYmO6dbOEcmQzT1SqRxdiCFyVOMpyW4HFPgmPKT0+wSVkjsLc+BKkMGYPDaO0sWMLTJrj0FGhhTsrqd8Mg== @@ -520,6 +990,11 @@ dependencies: "@types/node" "*" +"@types/coingecko-api@^1.0.10": + version "1.0.10" + resolved "https://registry.yarnpkg.com/@types/coingecko-api/-/coingecko-api-1.0.10.tgz#e841f75c1dc5c6ab8f251011b28a9aec0576ec19" + integrity sha512-ENJO5JzV7qTj8GfrRWAy8lom4RPQv03stvw2z9riz0z7WOXcaorc8OPov8JEekoGQ397O1BbvgPjZj7bWgqdgg== + "@types/connect@^3.4.33": version "3.4.35" resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.35.tgz#5fcf6ae445e4021d1fc2219a4873cc73a3bb2ad1" @@ -581,7 +1056,7 @@ dependencies: "@types/node" "*" -"@ubeswap/token-math@^5.2.1": +"@ubeswap/token-math@^5.1.6", "@ubeswap/token-math@^5.2.1": version "5.2.1" resolved "https://registry.yarnpkg.com/@ubeswap/token-math/-/token-math-5.2.1.tgz#66e70ba8d65b5fdb1b7459332fbdad4ddec32a64" integrity sha512-wkIKDKIl6rml4CVK3fvjjLVk55Z8qEYTgjxZx7MnrTwECazyhiDuekb9WAaDPXcW5QNffCu8uv4Ba8wE96CJsg== @@ -657,6 +1132,13 @@ axios@^0.21.1: dependencies: follow-redirects "^1.14.0" +axios@^0.24.0: + version "0.24.0" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.24.0.tgz#804e6fa1e4b9c5288501dd9dff56a7a0940d20d6" + integrity sha512-Q6cWsys88HoPgAaFAVUb0WpPk0O8iTeisR9IMqy9G8AbO4NlpVknrnQS03zzF9PGAWgO3cgletO3VjV/P7VztA== + dependencies: + follow-redirects "^1.14.4" + axios@^0.25.0: version "0.25.0" resolved "https://registry.yarnpkg.com/axios/-/axios-0.25.0.tgz#349cfbb31331a9b4453190791760a8d35b093e0a" @@ -711,7 +1193,12 @@ bigint-buffer@^1.1.5: dependencies: bindings "^1.3.0" -bignumber.js@^9.0.1: +bignumber.js@9.1.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.1.0.tgz#8d340146107fe3a6cb8d40699643c302e8773b62" + integrity sha512-4LwHK4nfDOraBCtst+wOWIHbu1vhvAPJK8g8nROd4iuc3PSEjWif/qwbkh8jwCJz6yDBvtU4KPynETgrfh7y3A== + +bignumber.js@^9.0.1, bignumber.js@^9.0.2, bignumber.js@^9.1.0: version "9.1.1" resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.1.1.tgz#c4df7dc496bd849d4c9464344c1aa74228b4dac6" integrity sha512-pHm4LsMJ6lzgNGVfZHjMoO8sdoRhOzOH4MLmY65Jg70bpxCKu5iOHNJyfF6OyvYw7t8Fpf35RuzUyqnQsj8Vig== @@ -733,6 +1220,13 @@ bluebird@3.7.2: resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== +bn-sqrt@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/bn-sqrt/-/bn-sqrt-1.0.0.tgz#aac3fcb56a359850d8339d3925213ac27c22b782" + integrity sha512-XdCMQ7tfEF/f7nrQgnrJ+DLQBwQzSQyPOKIXdUOTcGEvsRKBcIsdfORp7B5H8DWo8FOzZ4+a2TjSZzaqKgzicg== + dependencies: + bn.js "^5.2.0" + bn.js@5.2.1, bn.js@^5.0.0, bn.js@^5.1.0, bn.js@^5.1.2, bn.js@^5.2.0, bn.js@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" @@ -793,7 +1287,7 @@ buffer-from@^1.0.0, buffer-from@^1.1.0: resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== -buffer-layout@^1.2.0, buffer-layout@^1.2.2: +buffer-layout@1.2.2, buffer-layout@^1.2.0, buffer-layout@^1.2.1, buffer-layout@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/buffer-layout/-/buffer-layout-1.2.2.tgz#b9814e7c7235783085f9ca4966a0cfff112259d5" integrity sha512-kWSuLN694+KTk8SrYvCqwP2WcgQjoRCiF5b4QDvkkz8EmgD+aWAIceGFKMIAdmF/pH+vpgNV3d3kAKorcdAmWA== @@ -806,7 +1300,7 @@ buffer@6.0.1: base64-js "^1.3.1" ieee754 "^1.2.1" -buffer@6.0.3, buffer@^6.0.1, buffer@~6.0.3: +buffer@6.0.3, buffer@^6.0.1, buffer@^6.0.3, buffer@~6.0.3: version "6.0.3" resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== @@ -868,6 +1362,20 @@ cliui@^7.0.2: strip-ansi "^6.0.0" wrap-ansi "^7.0.0" +cliui@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" + integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.1" + wrap-ansi "^7.0.0" + +coingecko-api@^1.0.10: + version "1.0.10" + resolved "https://registry.yarnpkg.com/coingecko-api/-/coingecko-api-1.0.10.tgz#ac8694d5999f00727fe55f0078ce2917603076b2" + integrity sha512-7YLLC85+daxAw5QlBWoHVBVpJRwoPr4HtwanCr8V/WRjoyHTa1Lb9DQAvv4MDJZHiz4no6HGnDQnddtjV35oRA== + color-convert@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" @@ -897,6 +1405,13 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== +cross-fetch@3.0.6: + version "3.0.6" + resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.0.6.tgz#3a4040bc8941e653e0e9cf17f29ebcd177d3365c" + integrity sha512-KBPUbqgFjzWlVcURG+Svp9TlhA5uliYtiNx/0r8nv0pdypeQCRJ9IaSIc3q/x3q8t3F75cHuwxVql1HFGHCNJQ== + dependencies: + node-fetch "2.6.1" + cross-fetch@3.1.5, cross-fetch@^3.1.5: version "3.1.5" resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.5.tgz#e1389f44d9e7ba767907f7af8454787952ab534f" @@ -947,7 +1462,7 @@ decimal.js@10.3.1, decimal.js@~10.3.1: resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.3.1.tgz#d8c3a444a9c6774ba60ca6ad7261c3a94fd5e783" integrity sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ== -decimal.js@^10.3.1: +decimal.js@^10.3.1, decimal.js@^10.4.2: version "10.4.3" resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23" integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== @@ -980,11 +1495,16 @@ dot-case@^3.0.4: no-case "^3.0.4" tslib "^2.0.3" -dotenv@10.0.0: +dotenv@10.0.0, dotenv@^10.0.0: version "10.0.0" resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-10.0.0.tgz#3d4227b8fb95f81096cdd2b66653fb2c7085ba81" integrity sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q== +dotenv@^16.0.1: + version "16.0.3" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.0.3.tgz#115aec42bac5053db3c456db30cc243a5a836a07" + integrity sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ== + duplexer@~0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" @@ -1042,7 +1562,7 @@ event-stream@=3.3.4: stream-combiner "~0.0.4" through "~2.3.1" -eventemitter3@^4.0.7: +eventemitter3@^4.0.0, eventemitter3@^4.0.7: version "4.0.7" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== @@ -1109,7 +1629,7 @@ flat@^5.0.2: resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== -follow-redirects@^1.14.0, follow-redirects@^1.14.7, follow-redirects@^1.14.9: +follow-redirects@^1.14.0, follow-redirects@^1.14.4, follow-redirects@^1.14.7, follow-redirects@^1.14.9: version "1.15.2" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== @@ -1132,6 +1652,22 @@ form-data@^4.0.0: combined-stream "^1.0.8" mime-types "^2.1.12" +francium-sdk@^1.3.34: + version "1.4.3" + resolved "https://registry.yarnpkg.com/francium-sdk/-/francium-sdk-1.4.3.tgz#7ad2ff8cc7d60ed85a709eac4804b4ac3b1e56b3" + integrity sha512-lJACTgKMvPFr2MNhFliZZvUwLvvIasGzetvTYaEQ9jW2dv8hug/qCaNLzLcLlyMFuMXaINt3hg/sZbVYQvcTEw== + dependencies: + "@project-serum/anchor" "0.16.2" + "@project-serum/borsh" "^0.2.2" + "@project-serum/serum" "^0.13.60" + "@solana/spl-token" "^0.1.8" + "@solana/web3.js" "^1.59.0" + axios "^0.24.0" + bigint-buffer "^1.1.5" + bignumber.js "^9.0.1" + bn.js "^5.2.0" + lodash "^4.17.21" + from@~0: version "0.1.7" resolved "https://registry.yarnpkg.com/from/-/from-0.1.7.tgz#83c60afc58b9c56997007ed1a768b3ab303a44fe" @@ -1147,6 +1683,11 @@ fsevents@~2.3.2: resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== +fzstd@~0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/fzstd/-/fzstd-0.0.4.tgz#00f63df42ee7acde2c68b2d8b7be92b6c633d629" + integrity sha512-GNZEyoB2+mGNGhBBdRiPF1WE3xRK5VTOXFNiM8YqUmo5Lo/XeyvLtSSrWLN3NS7JRnwolabqsmE970MiqI69Ug== + get-caller-file@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" @@ -1247,6 +1788,13 @@ inherits@2: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== +invariant@^2.2.4: + version "2.2.4" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" + integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== + dependencies: + loose-envify "^1.0.0" + is-binary-path@~2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" @@ -1296,6 +1844,14 @@ isexe@^2.0.0: resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== +isomorphic-fetch@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-3.0.0.tgz#0267b005049046d2421207215d45d6a262b8b8b4" + integrity sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA== + dependencies: + node-fetch "^2.6.1" + whatwg-fetch "^3.4.1" + isomorphic-ws@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz#55fd4cd6c5e6491e76dc125938dd863f5cd4f2dc" @@ -1331,11 +1887,21 @@ joi@^17.4.0: "@sideway/formula" "^3.0.0" "@sideway/pinpoint" "^2.0.0" +js-base64@^3.7.2: + version "3.7.3" + resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-3.7.3.tgz#2e784bb0851636bf1e99ef12e4f3a8a8c9b7639f" + integrity sha512-PAr6Xg2jvd7MCR6Ld9Jg3BmTcjYsHEBx1VlwEwULb/qowPf5VD9kEMagj23Gm7JRnSvE/Da/57nChZjnvL8v6A== + js-sha256@^0.9.0: version "0.9.0" resolved "https://registry.yarnpkg.com/js-sha256/-/js-sha256-0.9.0.tgz#0b89ac166583e91ef9123644bd3c5334ce9d0966" integrity sha512-sga3MHh9sgQN2+pJ9VYZ+1LPwXOxuBJBA5nrR5/ofPfuiJBE2hnjsaN8se8JznOmGLN2p49Pe5U/ttafcs/apA== +"js-tokens@^3.0.0 || ^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + js-yaml@4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" @@ -1343,7 +1909,7 @@ js-yaml@4.1.0: dependencies: argparse "^2.0.1" -jsbi@4.3.0, jsbi@^4.1.0, jsbi@^4.2.0: +jsbi@4.3.0, jsbi@^4.1.0, jsbi@^4.2.0, jsbi@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/jsbi/-/jsbi-4.3.0.tgz#b54ee074fb6fcbc00619559305c8f7e912b04741" integrity sha512-SnZNcinB4RIcnEyZqFPdGPVgrg2AcnykiBy0sHVJQKHYeaLUvi3Exj+iaPpLnFVkDPZIV4U0yvgC9/R4uEAZ9g== @@ -1382,6 +1948,11 @@ locate-path@^6.0.0: dependencies: p-locate "^5.0.0" +lodash.camelcase@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" + integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA== + lodash.mapvalues@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz#1bafa5005de9dd6f4f26668c30ca37230cc9689c" @@ -1405,6 +1976,13 @@ long@^4.0.0: resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28" integrity sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA== +loose-envify@^1.0.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + lower-case@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" @@ -1584,13 +2162,18 @@ no-case@^3.0.4: lower-case "^2.0.2" tslib "^2.0.3" -node-fetch@2, node-fetch@2.6.7: +node-fetch@2, node-fetch@2.6.7, node-fetch@^2.6.1: version "2.6.7" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== dependencies: whatwg-url "^5.0.0" +node-fetch@2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" + integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== + node-gyp-build@^4.3.0: version "4.5.0" resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.5.0.tgz#7a64eefa0b21112f89f58379da128ac177f20e40" @@ -1673,6 +2256,11 @@ prettier@2.7.1: resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.7.1.tgz#e235806850d057f97bb08368a4f7d899f7760c64" integrity sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g== +prettier@^2.4.1: + version "2.8.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.1.tgz#4e1fd11c34e2421bc1da9aea9bd8127cd0a35efc" + integrity sha512-lqGoSJBQNJidqCHE80vqZJHWHRFoNYsSpP9AjFhlhi9ODCJA541svILes/+/1GM3VaL/abZi7cpFzOpdR9UPKg== + promise-retry@2.0.1, promise-retry@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22" @@ -1731,6 +2319,11 @@ require-directory@^2.1.1: resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== +retry-axios@^2.6.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/retry-axios/-/retry-axios-2.6.0.tgz#d4dc5c8a8e73982e26a705e46a33df99a28723e0" + integrity sha512-pOLi+Gdll3JekwuFjXO3fTq+L9lzMQGcSq7M5gIjExcl3Gu1hd4XXuf5o3+LuSBsaULQH7DiNbsqPd1chVpQGQ== + retry@^0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" @@ -1862,7 +2455,7 @@ stream-combiner@~0.0.4: dependencies: duplexer "~0.1.1" -string-width@^4.1.0, string-width@^4.2.0: +string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -1898,6 +2491,11 @@ superstruct@^0.14.2: resolved "https://registry.yarnpkg.com/superstruct/-/superstruct-0.14.2.tgz#0dbcdf3d83676588828f1cf5ed35cda02f59025b" integrity sha512-nPewA6m9mR3d6k7WkZ8N8zpTWfenFH3q9pA2PkuiZxINr9DKB2+40wEQf0ixn8VaGuJ78AB6iWOtStI+/4FKZQ== +superstruct@^0.15.4: + version "0.15.5" + resolved "https://registry.yarnpkg.com/superstruct/-/superstruct-0.15.5.tgz#0f0a8d3ce31313f0d84c6096cd4fa1bfdedc9dab" + integrity sha512-4AOeU+P5UuE/4nOUkmcQdW5y7i9ndt1cQd/3iUe+LTz3RxESf/W/5lg4B74HbDMMv8PHnPnGCQFH45kBcrQYoQ== + supports-color@8.1.1: version "8.1.1" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" @@ -1992,7 +2590,7 @@ tsconfig-paths@^3.5.0: minimist "^1.2.6" strip-bom "^3.0.0" -tslib@^2.0.3, tslib@^2.1.0, tslib@^2.4.0: +tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.1, tslib@^2.4.0: version "2.4.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.1.tgz#0d0bfbaac2880b91e22df0768e55be9753a5b17e" integrity sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA== @@ -2066,6 +2664,11 @@ webidl-conversions@^3.0.0: resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== +whatwg-fetch@^3.4.1: + version "3.6.2" + resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz#dced24f37f2624ed0281725d51d0e2e3fe677f8c" + integrity sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA== + whatwg-url@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" @@ -2130,6 +2733,11 @@ yargs-parser@^20.2.2: resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== +yargs-parser@^21.1.1: + version "21.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== + yargs-unparser@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" @@ -2153,6 +2761,19 @@ yargs@16.2.0: y18n "^5.0.5" yargs-parser "^20.2.2" +yargs@^17.0.1: + version "17.6.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.6.2.tgz#2e23f2944e976339a1ee00f18c77fedee8332541" + integrity sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw== + dependencies: + cliui "^8.0.1" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.3" + y18n "^5.0.5" + yargs-parser "^21.1.1" + yn@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/yn/-/yn-2.0.0.tgz#e5adabc8acf408f6385fc76495684c88e6af689a" From 9907dc236e2fd01ae3ee8375033fc6b103133c2a Mon Sep 17 00:00:00 2001 From: emerson Date: Thu, 20 Oct 2022 02:05:16 +0800 Subject: [PATCH 02/21] Add Jupiter Id --- src/ids.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/ids.ts b/src/ids.ts index 6896d62..a13b091 100644 --- a/src/ids.ts +++ b/src/ids.ts @@ -15,6 +15,12 @@ export const SOLEND_ADAPTER_PROGRAM_ID = new PublicKey("ADPTCXAFfJFVqcw73B4PWRZQ export const NFT_FINANCE_ADAPTER_PROGRAM_ID = new PublicKey("ADPTyBr92sBCE1hdYBRvXbMpF4hKs17xyDjFPxopcsrh"); +export const JUPITER_ADAPTER_PROGRAM_ID = new PublicKey("ADPT8iF4A7BSUWQ8AsVwmcod2suFzA4bpYpJj7kUWK3E"); + +export const SERUM_PROGRAM_ID = new PublicKey("9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin"); + +export const JUPITER_PROGRAM_ID = new PublicKey("JUP4Fb2cqiRUcaTHdrPC8h2gNsA2ETXiPDD33WcGuJB"); + export const NATIVE_SOL = new PublicKey("11111111111111111111111111111111"); export const WSOL = new PublicKey("So11111111111111111111111111111111111111112"); From 83c4d5ceacc108f6c4d47e386c3799ad0d3c8810 Mon Sep 17 00:00:00 2001 From: emerson Date: Thu, 20 Oct 2022 02:05:25 +0800 Subject: [PATCH 03/21] wip: wrap tx trough gateway --- src/builder.ts | 13 +++-- src/protocols/jupiter.ts | 100 ++++++++++++++++++++------------------- 2 files changed, 60 insertions(+), 53 deletions(-) diff --git a/src/builder.ts b/src/builder.ts index 8660766..c0be449 100644 --- a/src/builder.ts +++ b/src/builder.ts @@ -136,10 +136,15 @@ export class GatewayBuilder { // TODO: Move the logic into protocols switch (swapParams.protocol) { case SupportedProtocols.Jupiter: - const protocol = new ProtocolJupiter(this._provider.connection, { - ...swapParams, - userKey: this._provider.wallet.publicKey, - }); + const protocol = new ProtocolJupiter( + this._provider.connection, + this._program, + await this.getGatewayStateKey(), + { + ...swapParams, + userKey: this._provider.wallet.publicKey, + } + ); // Jupiter only await protocol.build(); diff --git a/src/protocols/jupiter.ts b/src/protocols/jupiter.ts index 0f369e6..90f912a 100644 --- a/src/protocols/jupiter.ts +++ b/src/protocols/jupiter.ts @@ -1,8 +1,11 @@ import * as anchor from "@project-serum/anchor"; import { Jupiter, RouteInfo } from "@jup-ag/core"; -import { IProtocolSwap, SwapParams } from "../types"; -import { WSOL } from "../ids"; +import JSBI from "jsbi"; +import { IProtocolSwap } from "../types"; +import { JUPITER_ADAPTER_PROGRAM_ID, JUPITER_PROGRAM_ID, WSOL } from "../ids"; import { getAssociatedTokenAddress } from "@solana/spl-token-v2"; +import { Gateway } from "@dappio-wonderland/gateway-idls"; +import { getActivityIndex, getGatewayAuthority } from "../utils"; interface ProtocolJupiterParams extends SwapParams { userKey: anchor.web3.PublicKey; @@ -13,7 +16,18 @@ export class ProtocolJupiter implements IProtocolSwap { private _bestRoute: RouteInfo; private _transactions: anchor.web3.Transaction[] = []; - constructor(private _connection: anchor.web3.Connection, private _params: ProtocolJupiterParams) {} + constructor( + private _connection: anchor.web3.Connection, + private _gatewayProgram: anchor.Program, + private _gatewayStateKey: anchor.web3.PublicKey, + private _params: ProtocolJupiterParams + ) {} + // constructor( + // private _connection: anchor.web3.Connection, + // private _gatewayProgram: anchor.Program, + // private _gatewayStateKey: anchor.web3.PublicKey, + // private _gatewayParams: GatewayParams + // ) {} async build(): Promise { this._jupiter = await Jupiter.load({ @@ -24,8 +38,8 @@ export class ProtocolJupiter implements IProtocolSwap { const routes = await this._jupiter.computeRoutes({ inputMint: this._params.fromTokenMint, outputMint: this._params.toTokenMint, - inputAmount: this._params.amount, // 1000000 => 1 USDC if inputToken.address is USDC mint - slippage: this._params.slippage, // 1 = 1% + amount: JSBI.BigInt(this._params.amount), // 1000000 => 1 USDC if inputToken.address is USDC mint + slippageBps: Math.ceil(this._params.slippage * 100), // 100 = 1% // forceFetch (optional) to force fetching routes and not use the cache // intermediateTokens, if provided will only find routes that use the intermediate tokens // feeBps @@ -35,56 +49,44 @@ export class ProtocolJupiter implements IProtocolSwap { } async swap(): Promise { + const preInstructions: anchor.web3.TransactionInstruction[] = []; + const postInstructions: anchor.web3.TransactionInstruction[] = []; + let remainingAccounts: anchor.web3.AccountMeta[]; + const { transactions } = await this._jupiter.exchange({ routeInfo: this._bestRoute, userPublicKey: this._params.userKey, }); const { setupTransaction, swapTransaction, cleanupTransaction } = transactions; - const userWSOLAta = await getAssociatedTokenAddress(WSOL, this._params.userKey); - - // Remove WSOL create instructions - // if (setupTransaction) { - // setupTransaction.instructions = setupTransaction.instructions.filter( - // (ix) => - // !( - // ix.programId.equals(ASSOCIATED_TOKEN_PROGRAM_ID) && - // ix.keys[1].pubkey.equals(userWSOLAta) - // ) - // ); - // } - - // Remove WSOL create/close instructions - // if (swapTransaction) { - // swapTransaction.instructions = swapTransaction.instructions - // .filter( - // (ix) => - // !( - // ix.programId.equals(ASSOCIATED_TOKEN_PROGRAM_ID) && - // ix.keys[1].pubkey.equals(userWSOLAta) - // ) - // ) - // .filter( - // (ix) => - // !( - // ix.programId.equals(TOKEN_PROGRAM_ID) && - // ix.keys[0].pubkey.equals(userWSOLAta) - // ) - // ); - // } - - // Remove WSOL close instructions - // if (cleanupTransaction) { - // cleanupTransaction.instructions = cleanupTransaction.instructions.filter( - // (ix) => - // !( - // ix.programId.equals(TOKEN_PROGRAM_ID) && - // ix.keys[0].pubkey.equals(userWSOLAta) - // ) - // ); - // } + // wrap through gateway + // TODO: export params to gateway state + let isPreIx = true; + for (let ix of swapTransaction.instructions) { + if (ix.programId.equals(JUPITER_PROGRAM_ID)) { + remainingAccounts = ix.keys; + isPreIx = false; + } else if (isPreIx) { + preInstructions.push(ix); + } else { + postInstructions.push(ix); + } + } + const txSwap = await this._gatewayProgram.methods + .swap() + .accounts({ + gatewayState: this._gatewayStateKey, + adapterProgramId: JUPITER_ADAPTER_PROGRAM_ID, + baseProgramId: JUPITER_PROGRAM_ID, + activityIndex: await getActivityIndex(this._params.userKey), + gatewayAuthority: getGatewayAuthority(), + }) + .preInstructions(preInstructions) + .postInstructions(postInstructions) + .remainingAccounts(remainingAccounts) + .transaction(); - for (let transaction of [setupTransaction, swapTransaction, cleanupTransaction] + for (let transaction of [setupTransaction, txSwap, cleanupTransaction] .filter(Boolean) .filter((tx) => tx.instructions.length > 0)) { this._transactions.push(transaction); @@ -97,7 +99,7 @@ export class ProtocolJupiter implements IProtocolSwap { } getSwapMinOutAmount(): number { - return this._bestRoute.outAmountWithSlippage; + return JSBI.toNumber(this._bestRoute.outAmount); } async getRoute() { From 517400a1fa4c3e3d00828d6d217cb46522a67682 Mon Sep 17 00:00:00 2001 From: emerson Date: Tue, 1 Nov 2022 08:10:40 +0000 Subject: [PATCH 04/21] Extract config --- src/protocols/jupiter.ts | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/protocols/jupiter.ts b/src/protocols/jupiter.ts index 90f912a..4751fd9 100644 --- a/src/protocols/jupiter.ts +++ b/src/protocols/jupiter.ts @@ -62,16 +62,39 @@ export class ProtocolJupiter implements IProtocolSwap { // wrap through gateway // TODO: export params to gateway state let isPreIx = true; + let swapIx: anchor.web3.TransactionInstruction; for (let ix of swapTransaction.instructions) { if (ix.programId.equals(JUPITER_PROGRAM_ID)) { remainingAccounts = ix.keys; isPreIx = false; + swapIx = ix; } else if (isPreIx) { preInstructions.push(ix); } else { postInstructions.push(ix); } } + + // Extract config + const rawData = Uint8Array.from(swapIx.data); + const swapConfig = { + protocolConfig: Buffer.from(rawData.slice(8, rawData.byteLength - 19)), // 7 - 9 bytes + inputAmount: Buffer.from( + rawData.slice(rawData.byteLength - 19, rawData.byteLength - 11) + ), // u64 + outputAmount: Buffer.from( + rawData.slice(rawData.byteLength - 11, rawData.byteLength - 3) + ), // u64 + slippageBps: Buffer.from( + rawData.slice(rawData.byteLength - 3, rawData.byteLength - 1) + ), // u16 + platformFeeBps: Buffer.from( + rawData.slice(rawData.byteLength - 1, rawData.byteLength) + ), // u8 + }; + console.log("data:", swapIx.data); + console.log("swapConfig:", swapConfig); + const txSwap = await this._gatewayProgram.methods .swap() .accounts({ From 242f575c84c7fc95cf299c55573dbe40e8640113 Mon Sep 17 00:00:00 2001 From: emerson Date: Fri, 25 Nov 2022 16:52:08 +0800 Subject: [PATCH 05/21] Update jupiter version --- package.json | 5 +- yarn.lock | 273 +++++++++++++++++++++++++++++++++------------------ 2 files changed, 182 insertions(+), 96 deletions(-) diff --git a/package.json b/package.json index 637e108..b9ebf64 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,7 @@ "@dappio-wonderland/gateway-idls": "^0.2.8", "@dappio-wonderland/navigator": "^0.2.26", "@dappio-wonderland/utils": "^0.2.0", - "@jup-ag/core": "3.0.0-beta.1", + "@jup-ag/core": "3.0.0-beta.8-e44d7b4", "@project-serum/anchor": "^0.24.2", "@project-serum/borsh": "^0.2.5", "@project-serum/serum": "^0.13.61", @@ -47,6 +47,7 @@ "testAdapterNftFinance": "ANCHOR_WALLET=~/.config/solana/gateway.json ts-mocha -p ./tsconfig.json -t 1000000 tests/testAdapterNftFinance.ts", "testAdapterFrancium": "ANCHOR_WALLET=~/.config/solana/gateway.json ts-mocha -p ./tsconfig.json -t 1000000 tests/testAdapterFrancium.ts", "testAdapterKatana": "ANCHOR_WALLET=~/.config/solana/gateway.json ts-mocha -p ./tsconfig.json -t 1000000 tests/testAdapterKatana.ts", - "testAdapterFriktion": "ANCHOR_WALLET=~/.config/solana/gateway.json ts-mocha -p ./tsconfig.json -t 1000000 tests/testAdapterFriktion.ts" + "testAdapterFriktion": "ANCHOR_WALLET=~/.config/solana/gateway.json ts-mocha -p ./tsconfig.json -t 1000000 tests/testAdapterFriktion.ts", + "testAdapterJupiter": "ANCHOR_WALLET=~/.config/solana/gateway.json ts-mocha -p ./tsconfig.json -t 1000000 tests/testAdapterJupiter.ts" } } diff --git a/yarn.lock b/yarn.lock index 2529880..a5750da 100644 --- a/yarn.lock +++ b/yarn.lock @@ -23,28 +23,7 @@ retry-axios "^2.6.0" tiny-invariant "^1.1.0" -"@apricot-lend/sdk-ts@^0.17.3": - version "0.17.15" - resolved "https://registry.yarnpkg.com/@apricot-lend/sdk-ts/-/sdk-ts-0.17.15.tgz#ec4f198871dcbd1c971864cf34e4b1ab841e205b" - integrity sha512-YoNQDZ/EeDT8o7R5qYkCls2Fwk1BXup7C0nynITpF4SMOfklbpH4hqbXs8PALUdZSgvjsJWRoSCUkLugzHzFog== - dependencies: - "@apricot-lend/solana-swaps-js" "0.1.23" - "@project-serum/borsh" "^0.2.3" - "@project-serum/serum" "^0.13.60" - "@pythnetwork/client" "^2.5.1" - "@solana/spl-token" "^0.1.8" - "@solana/web3.js" "^1.37.0" - "@switchboard-xyz/switchboard-api" "^0.2.152" - "@types/coingecko-api" "^1.0.10" - axios "^0.24.0" - buffer-layout "^1.2.2" - coingecko-api "^1.0.10" - decimal.js "^10.3.1" - js-base64 "^3.7.2" - retry-axios "^2.6.0" - tiny-invariant "^1.1.0" - -"@apricot-lend/solana-swaps-js@0.1.23", "@apricot-lend/solana-swaps-js@^0.1.18": +"@apricot-lend/solana-swaps-js@^0.1.18": version "0.1.23" resolved "https://registry.yarnpkg.com/@apricot-lend/solana-swaps-js/-/solana-swaps-js-0.1.23.tgz#64ed730262db64fc296cd986e1f55bac130dfe8b" integrity sha512-YWQiTyjFTtr3qXMdCL34m/1yOSq4pwm4Pr2GnH9jUU2zjF5bVlxyzCtd9qOQmTcbh+NoUtkO/3IfbDATzhF6mw== @@ -82,6 +61,38 @@ toformat "^2.0.0" yargs "^17.0.1" +"@cremafinance/anchor-contrib@1.14.3": + version "1.14.3" + resolved "https://registry.yarnpkg.com/@cremafinance/anchor-contrib/-/anchor-contrib-1.14.3.tgz#87a0d9f734a990641ba4a79939e7ec0658ffb6f8" + integrity sha512-X57tRaZPWGpgCaYn0bXXDIQ6RzZedppwS5MhtGWm1EiM3flqi8RUxcY2VAsZikQ0inHvrDbEOY85hxPTx1VCtQ== + dependencies: + "@cremafinance/solana-contrib" "^1.14.3" + eventemitter3 "^4.0.7" + lodash.camelcase "^4.3.0" + lodash.mapvalues "^4.6.0" + tslib "^2.4.0" + +"@cremafinance/option-utils@^1.14.3": + version "1.14.3" + resolved "https://registry.yarnpkg.com/@cremafinance/option-utils/-/option-utils-1.14.3.tgz#f57689f3f329694169a0ee252a18ba99fdc29e8d" + integrity sha512-XWFEGo3A2H8A2lR4OgBwpJtLKRlRy8pe7Il/Z1cfgVurShl8z2TQn9LWEUOhEt4Bwjq8xRnK/v4F8YCIX5X82Q== + dependencies: + tslib "^2.4.0" + +"@cremafinance/solana-contrib@^1.14.3": + version "1.14.3" + resolved "https://registry.yarnpkg.com/@cremafinance/solana-contrib/-/solana-contrib-1.14.3.tgz#8a82c3b767273a0fb19195375d09f59229f21436" + integrity sha512-3cAF98Pyb9ySDljdcwPuCNmZ0wFv54Kh9lskqqPNj0oMVzStwknq2Kvipecr5iR2G7bF80/RptlV9RixuurjOA== + dependencies: + "@cremafinance/option-utils" "^1.14.3" + "@solana/buffer-layout" "^4.0.0" + "@types/promise-retry" "^1.1.3" + "@types/retry" "^0.12.2" + promise-retry "^2.0.1" + retry "^0.13.1" + tiny-invariant "^1.2.0" + tslib "^2.4.0" + "@cykura/sdk-core@npm:@jup-ag/cykura-sdk-core@0.1.8", "@jup-ag/cykura-sdk-core@0.1.8": version "0.1.8" resolved "https://registry.yarnpkg.com/@jup-ag/cykura-sdk-core/-/cykura-sdk-core-0.1.8.tgz#ba8724644e18d1006422dbba5c7701360a729b91" @@ -117,6 +128,14 @@ graphql-request "^5.0.0" mocha "^10.0.0" +"@dradex/idl@npm:@jup-ag/dradex-idl@0.2.1", "@jup-ag/dradex-idl@0.2.1": + version "0.2.1" + resolved "https://registry.yarnpkg.com/@jup-ag/dradex-idl/-/dradex-idl-0.2.1.tgz#36cf9a75ca9712c0a588b6c0050744eab3a46c49" + integrity sha512-CZ5GZTLExy1+fw/tFOo6C4AbU0o/PcqJxxQpDp5UkSJ0SXbz7ZGMz9DfKu+htJuAwxwGgS/rbQfeBoU9fhDXuQ== + dependencies: + "@solana/buffer-layout" "4.0.0" + bn.js "5.2.1" + "@dappio-wonderland/utils@^0.2.0": version "0.2.0" resolved "https://registry.yarnpkg.com/@dappio-wonderland/utils/-/utils-0.2.0.tgz#becec69b1d90efd35565d20dd5bd275fafe29ec9" @@ -144,23 +163,27 @@ dependencies: "@hapi/hoek" "^9.0.0" -"@jup-ag/core@3.0.0-beta.1": - version "3.0.0-beta.1" - resolved "https://registry.yarnpkg.com/@jup-ag/core/-/core-3.0.0-beta.1.tgz#df4012f52d4591d0ebe0a717fed3f3952e6d098c" - integrity sha512-S5Oor/7m4y4dbpOzi5nLrHsmXjn8ZlCygoocBIUKZxHtU3Cr9vyJI5E0HaNOU0f8Ln9O3kVxKHtGXAkHPZYpOg== +"@jup-ag/core@3.0.0-beta.8-e44d7b4": + version "3.0.0-beta.8-e44d7b4" + resolved "https://registry.yarnpkg.com/@jup-ag/core/-/core-3.0.0-beta.8-e44d7b4.tgz#b30b1cf6c3b8b167fe52339157ffdc1af82a00c8" + integrity sha512-5fH98wbtDl5G5JMZbQJQ1yvYIzDePFe/t7pNbErg5PeMsXWqHkfubcwbWalfEI4NRr9a6qBj7yZfoWUTY0mCUQ== dependencies: - "@jup-ag/crema-sdk" "2.0.7" + "@jup-ag/crema-sdk-v2" "2.0.4" "@jup-ag/cykura-sdk" "0.1.25" "@jup-ag/cykura-sdk-core" "0.1.8" "@jup-ag/deltafi-sdk" "0.0.2" - "@jup-ag/goosefx-ssl-sdk" "1.2.13" + "@jup-ag/dradex-idl" "0.2.1" + "@jup-ag/dradex-sdk" "0.2.2" + "@jup-ag/goosefx-ssl-sdk" "1.2.15" "@jup-ag/invariant" "0.9.35" "@jup-ag/lifinity-sdk" "0.1.72" - "@jup-ag/math" "3.0.0-beta.1" + "@jup-ag/lifinity-sdk-v2" "1.0.5" + "@jup-ag/math" "3.0.0-beta.8-e44d7b4" + "@jup-ag/raydium-clmm-sdk" "1.0.2" "@jup-ag/whirlpool-sdk" "0.1.1" - "@mercurial-finance/dynamic-amm-sdk" "0.1.4" - "@mercurial-finance/optimist" "0.1.8" - "@mercurial-finance/vault-sdk" "0.2.27-25239a99.0" + "@mercurial-finance/dynamic-amm-sdk" "0.1.7" + "@mercurial-finance/optimist" "0.1.9-e44d7b4" + "@mercurial-finance/vault-sdk" "0.2.30" "@noble/hashes" "1.1.2" "@project-serum/anchor" "0.24.2" "@project-serum/serum" "0.13.65" @@ -175,22 +198,18 @@ jsbi "4.3.0" promise-retry "2.0.1" -"@jup-ag/crema-sdk@2.0.7": - version "2.0.7" - resolved "https://registry.yarnpkg.com/@jup-ag/crema-sdk/-/crema-sdk-2.0.7.tgz#f9f19b07d6d32bd85eff9c8ba41c89b7a059cd42" - integrity sha512-EW1B36g2p1xZsXYLdY98pVP9yiI1viZBIIbfWZ9vVue1PDudsU8dNZXyjtnLbOBuRpT6QYecF/FTXcgLEjY7xg== +"@jup-ag/crema-sdk-v2@2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@jup-ag/crema-sdk-v2/-/crema-sdk-v2-2.0.4.tgz#9e59aae44f7addc73ba1968ca8596ef258e3cb38" + integrity sha512-rtSbxwKGs74BzbTFj3QekYazNl+N7G6jkpCgRXOOwl8/dHmKZqnjfYlO+lWCzynuKkYNg5IZOudZ65QdcJ+NUA== dependencies: - "@saberhq/solana-contrib" "^1.12.66" - "@saberhq/token-utils" "^1.12.66" + "@cremafinance/anchor-contrib" "1.14.3" + "@project-serum/anchor" "^0.24.0" "@solana/buffer-layout" "^4.0.0" - "@solana/spl-token" "^0.1.8" - "@solana/spl-token-v2" "npm:@solana/spl-token@0.2.0" - "@solana/web3.js" "^1.36.0" - bn.js "^5.2.0" - bs58 "^5.0.0" + "@solana/web3.js" "^1.50.1" + bn.js "^5.2.1" decimal.js "^10.3.1" - jsbi "^4.2.0" - tiny-invariant "^1.2.0" + jsbi "^4.3.0" "@jup-ag/cykura-sdk@0.1.25": version "0.1.25" @@ -214,10 +233,20 @@ bignumber.js "^9.1.0" bn.js "^5.2.0" -"@jup-ag/goosefx-ssl-sdk@1.2.13": - version "1.2.13" - resolved "https://registry.yarnpkg.com/@jup-ag/goosefx-ssl-sdk/-/goosefx-ssl-sdk-1.2.13.tgz#906e03ece446e6411d55c78a79c6fc6aff0ad3bb" - integrity sha512-z249NSWWz716KR9El/Z/51cIxlH5A7cZ+afkx05C6HTNICfQpJXngYLJDJCfyJUAjowexPMr/m/rsDv+A/KH4A== +"@jup-ag/dradex-sdk@0.2.2": + version "0.2.2" + resolved "https://registry.yarnpkg.com/@jup-ag/dradex-sdk/-/dradex-sdk-0.2.2.tgz#8b32a5266569ee61f89595bc463e211a6fae215c" + integrity sha512-RF27iLWxUBVdTVI2+C+RNsUFkzYrp0Ufgg9cMsI22s9F3jsYqJnjzqQNebeS4qBKIwECXEhvLRBt14mKU1xF1g== + dependencies: + "@dradex/idl" "npm:@jup-ag/dradex-idl@0.2.1" + "@solana/spl-token" "^0.3.4" + decimal.js "^10.3.1" + jsbi "^4.3.0" + +"@jup-ag/goosefx-ssl-sdk@1.2.15": + version "1.2.15" + resolved "https://registry.yarnpkg.com/@jup-ag/goosefx-ssl-sdk/-/goosefx-ssl-sdk-1.2.15.tgz#eef413d24355572d308121e185391b8703a20c16" + integrity sha512-hQ0DuxW2D9AGFpGokpGyR8TM3/KCSbQ4WmOmJ0+/LNQGSYM7uukO2t2diKCv7B3ZMaqK65ymadwHIDu0W7LdEw== dependencies: "@project-serum/anchor" "^0.17.1-beta.1" "@solana/buffer-layout" "^4.0.0" @@ -233,6 +262,19 @@ "@solana/spl-token-registry" "^0.2.4484" invariant "^2.2.4" +"@jup-ag/lifinity-sdk-v2@1.0.5": + version "1.0.5" + resolved "https://registry.yarnpkg.com/@jup-ag/lifinity-sdk-v2/-/lifinity-sdk-v2-1.0.5.tgz#f7f4209a28592bc41ebb84d7f7c658cf3269d691" + integrity sha512-OB7ULaG0pdFtJ2zirrHQDTtVW4NFsg3rvGHQwEei+SEVaVdOJi29Mxr8chUPuWaIHdBr61OY0Nxw6j3OzMADxw== + dependencies: + "@project-serum/anchor" "0.24.2" + "@project-serum/borsh" "^0.2.5" + "@project-serum/serum" "^0.13.61" + "@pythnetwork/client" "^2.5.1" + "@solana/spl-token" "^0.1.8" + "@solana/web3.js" "^1.31.0" + decimal.js "^10.3.1" + "@jup-ag/lifinity-sdk@0.1.72": version "0.1.72" resolved "https://registry.yarnpkg.com/@jup-ag/lifinity-sdk/-/lifinity-sdk-0.1.72.tgz#ef120303d99cd371fbff9b04d63d8cb3b92c6d9b" @@ -246,14 +288,25 @@ "@solana/web3.js" "1.31.0" decimal.js "^10.3.1" -"@jup-ag/math@3.0.0-beta.1": - version "3.0.0-beta.1" - resolved "https://registry.yarnpkg.com/@jup-ag/math/-/math-3.0.0-beta.1.tgz#8fce70de0bfd8344d77cc635e5faacb358370157" - integrity sha512-NbmHk1j7KTlCbccItUUAAhy4w8OIerAS2VfALEFOPAm1T85zvF4X2FDBVIL7BgzOm1ZlcZkUupGaVTXRypfRUw== +"@jup-ag/math@3.0.0-beta.8-e44d7b4": + version "3.0.0-beta.8-e44d7b4" + resolved "https://registry.yarnpkg.com/@jup-ag/math/-/math-3.0.0-beta.8-e44d7b4.tgz#ae551911057af984b3a43ba1295654d3af063adc" + integrity sha512-16qDrzH3iQh9l2OeavkQw+b0BjEZqe0dJ3iEhe6DyNICNcFAo+8rSRmCFhI3026kHU/m/4ew51eZujbVDDl05w== dependencies: decimal.js "10.3.1" jsbi "4.3.0" +"@jup-ag/raydium-clmm-sdk@1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@jup-ag/raydium-clmm-sdk/-/raydium-clmm-sdk-1.0.2.tgz#22e822c1fd3975af58a6e8c6fdc2deb2373dcf76" + integrity sha512-cFTmIqnKpoJeEgvjMTc3ylFO2mhfEDWDJVqP2t5rmxTy18MT6g7qXSTT3c8HVB3pM3TJAms1CA0MBC/0RS9YwQ== + dependencies: + "@project-serum/anchor" "0.24.2" + "@project-serum/borsh" "^0.2.5" + "@solana/spl-token" "0.1.8" + "@solana/web3.js" "^1.66.2" + decimal.js "^10.3.1" + "@jup-ag/whirlpool-sdk@0.1.1": version "0.1.1" resolved "https://registry.yarnpkg.com/@jup-ag/whirlpool-sdk/-/whirlpool-sdk-0.1.1.tgz#f305bea2cf205994b87358ee5ad667d3c84c320e" @@ -267,10 +320,10 @@ decimal.js "~10.3.1" tiny-invariant "~1.2.0" -"@mercurial-finance/dynamic-amm-sdk@0.1.4": - version "0.1.4" - resolved "https://registry.yarnpkg.com/@mercurial-finance/dynamic-amm-sdk/-/dynamic-amm-sdk-0.1.4.tgz#49c68c0171ef76520d98141d6a3493ed02f5db1a" - integrity sha512-zxFAuw5Qep24640rGGK1OT4F51CkyaA5L5GbnDMZjTQagB6Uv7gicamvGhsMkDSf1rYuEsfC248Kbp7TW2gr7Q== +"@mercurial-finance/dynamic-amm-sdk@0.1.7": + version "0.1.7" + resolved "https://registry.yarnpkg.com/@mercurial-finance/dynamic-amm-sdk/-/dynamic-amm-sdk-0.1.7.tgz#d084ca41083b0d9d2595c3d30178f5b19fa5c522" + integrity sha512-p2rynJa0MKYWopq+goCqBCRTqtVOuR95B0OWLvhZfLdPywltxo+ywBaKePXD+IuCvWKzMcC75mLa9uCN5RAEIg== dependencies: "@mercurial-finance/vault-sdk" "0.2.27" "@project-serum/anchor" "0.24.2" @@ -282,23 +335,35 @@ "@solana/web3.js" "^1.42.0" bn-sqrt "^1.0.0" bn.js "5.2.1" + decimal.js "^10.4.1" dotenv "^16.0.1" invariant "^2.2.4" jsbi "^4.3.0" -"@mercurial-finance/optimist@0.1.8": +"@mercurial-finance/optimist@0.1.9-e44d7b4": + version "0.1.9-e44d7b4" + resolved "https://registry.yarnpkg.com/@mercurial-finance/optimist/-/optimist-0.1.9-e44d7b4.tgz#1f5abd4ac92446ccc2bf17973089e24558c6c31a" + integrity sha512-xw+2WYldC6NENU3zNM6vdgt4VBEdZb3VRna3Oi1ctyxeBVeJjbx4J3ZOLeqlDvWT+OrmPRqOOjIkNWy0DpNRAA== + dependencies: + promise-retry "2.0.1" + +"@mercurial-finance/optimist@^0.1.4": version "0.1.8" resolved "https://registry.yarnpkg.com/@mercurial-finance/optimist/-/optimist-0.1.8.tgz#d183dd4c0c09b9b446f9f90edff0265e63a5d1a2" integrity sha512-2lkM07ia0QZzQqd8wOP1xiAazgRcfCoWXbcWwRAJZfNNuM0d6ybdyPJKagFU9r7vrlcEhLVCAlenRHMcFZ1v+w== dependencies: promise-retry "2.0.1" -"@mercurial-finance/optimist@^0.1.4": - version "0.1.9" - resolved "https://registry.yarnpkg.com/@mercurial-finance/optimist/-/optimist-0.1.9.tgz#82b612fc6d602c1010cada4fb396d92b7fcae03a" - integrity sha512-cOJan58djQdg2iHKV/jPFgD1bNm2hffa5S0FXREKSNfzZRfsYLZOnRNJ24X0o+VJ9kC5BY0HYwduT/+dAyZ0AQ== +"@mercurial-finance/tulip-platform-sdk@2.0.30": + version "2.0.30" + resolved "https://registry.yarnpkg.com/@mercurial-finance/tulip-platform-sdk/-/tulip-platform-sdk-2.0.30.tgz#c528ca8efd96e4667d8d905274065d6435438ad6" + integrity sha512-ySPxAtFLtati9Vv7g3czrcNEiT9HBZboRDNnfEDmCFJqsub87Y2ZF125dpspaZzKUlolOrBIqBy1FZYIreMgfg== dependencies: - promise-retry "2.0.1" + "@project-serum/anchor" "^0.25.0" + "@project-serum/associated-token" "^0.1.1" + "@project-serum/borsh" "^0.2.5" + "@solana/web3.js" "^1.66.2" + lodash "^4.17.21" "@mercurial-finance/vault-sdk@0.2.27": version "0.2.27" @@ -324,14 +389,15 @@ francium-sdk "^1.3.34" jsbi "4.3.0" -"@mercurial-finance/vault-sdk@0.2.27-25239a99.0": - version "0.2.27-25239a99.0" - resolved "https://registry.yarnpkg.com/@mercurial-finance/vault-sdk/-/vault-sdk-0.2.27-25239a99.0.tgz#65876da52de0ed729cdda218ad156f5ed1975fbb" - integrity sha512-a6xJ1CH7s19TAn7qgcpKzkSt+f1Hp6Rev1eunYVV6f+w98vQEhjEaoHjn81DHpDry5nQNF89yCTaELQYqR2yRw== +"@mercurial-finance/vault-sdk@0.2.30": + version "0.2.30" + resolved "https://registry.yarnpkg.com/@mercurial-finance/vault-sdk/-/vault-sdk-0.2.30.tgz#5476f12d8c2296a492ba9c6e4865d275078b9a34" + integrity sha512-J3BvzRmBTO3cd+6BQ9bzSPZ3K4y1WhdRi8t0Bm7P5Plt9awRb4TXEXin/NJojnmkfbCmeQ4eaqJ9tofFPVmX/Q== dependencies: - "@apricot-lend/sdk-ts" "^0.17.3" + "@apricot-lend/sdk-ts" "0.17.5" "@blockworks-foundation/mango-client" "^3.4.7" "@mercurial-finance/optimist" "^0.1.4" + "@mercurial-finance/tulip-platform-sdk" "2.0.30" "@port.finance/port-sdk" "^0.2.67" "@project-serum/anchor" "0.24.2" "@quarryprotocol/quarry-sdk" "5.0.2" @@ -641,6 +707,11 @@ snake-case "^3.0.4" toml "^3.0.0" +"@project-serum/associated-token@^0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@project-serum/associated-token/-/associated-token-0.1.1.tgz#9acf745e84dad21e2ea26e06694704b9d698e532" + integrity sha512-Zc1wdqragbDiyBVagzIbIsMe37P7fgkArWZPIj+jJjDIoznlmYMK6ASU5mtdDZrPJ7sNABF/lzZ3+jvCCcU+oA== + "@project-serum/borsh@^0.2.2", "@project-serum/borsh@^0.2.3", "@project-serum/borsh@^0.2.4", "@project-serum/borsh@^0.2.5": version "0.2.5" resolved "https://registry.yarnpkg.com/@project-serum/borsh/-/borsh-0.2.5.tgz#6059287aa624ecebbfc0edd35e4c28ff987d8663" @@ -762,7 +833,21 @@ dependencies: tslib "^2.4.0" -"@saberhq/solana-contrib@^1.12.53", "@saberhq/solana-contrib@^1.12.66", "@saberhq/solana-contrib@^1.13.32", "@saberhq/solana-contrib@^1.13.6", "@saberhq/solana-contrib@^1.14.11", "@saberhq/solana-contrib@^1.14.9": +"@saberhq/solana-contrib@^1.12.53", "@saberhq/solana-contrib@^1.13.32", "@saberhq/solana-contrib@^1.13.6", "@saberhq/solana-contrib@^1.14.9": + version "1.14.9" + resolved "https://registry.yarnpkg.com/@saberhq/solana-contrib/-/solana-contrib-1.14.9.tgz#ec82b69460035df995ab163f643de61c3b7bcc17" + integrity sha512-e09v3c62cZ2I7hcS7x4q1am4wd4v0VfiIEBZxWBpvTVCKmdbdpUWUKyecI88VHbyO9exBLGq1yxJZZsz0OPyUA== + dependencies: + "@saberhq/option-utils" "^1.14.9" + "@solana/buffer-layout" "^4.0.0" + "@types/promise-retry" "^1.1.3" + "@types/retry" "^0.12.2" + promise-retry "^2.0.1" + retry "^0.13.1" + tiny-invariant "^1.3.1" + tslib "^2.4.0" + +"@saberhq/solana-contrib@^1.14.11": version "1.14.11" resolved "https://registry.yarnpkg.com/@saberhq/solana-contrib/-/solana-contrib-1.14.11.tgz#d4a6a09f426afb353fc5727b06365446d4642bb7" integrity sha512-HOEJpTZnSGmrfJG2gV18vQbtI14ET9l4/Q1yyPk4R2dkydxZIfBIPCI9SRWZ9g01/nuob3Fryd79Ca6QDk7qjw== @@ -811,24 +896,24 @@ tiny-invariant "^1.2.0" tslib "^2.4.0" -"@saberhq/token-utils@^1.12.53", "@saberhq/token-utils@^1.14.11": - version "1.14.11" - resolved "https://registry.yarnpkg.com/@saberhq/token-utils/-/token-utils-1.14.11.tgz#bc895173245a46789b65080eb38722e99dbfeb22" - integrity sha512-C+K1IHQuLwG6APT8wbrlvJPM4arTcNHnnydqZbMpsi1Zyyis+UPM3n/PgHmyX2ydtQ+GzPMLFMgxahtjicEgXw== +"@saberhq/token-utils@^1.12.53", "@saberhq/token-utils@^1.13.6": + version "1.14.9" + resolved "https://registry.yarnpkg.com/@saberhq/token-utils/-/token-utils-1.14.9.tgz#265cb24134c504b04d247b3b8b84b74b6eb8cd52" + integrity sha512-iIcWQYFV2UBQtfQJIsnq38eW04hSgQiJDpshyT7Z69k6FZlAaNC5yvQQnCI1k4K/z7IZpu5W8Pq8XD665UG+AA== dependencies: - "@saberhq/solana-contrib" "^1.14.11" + "@saberhq/solana-contrib" "^1.14.9" "@solana/buffer-layout" "^4.0.0" "@solana/spl-token" "^0.1.8" "@ubeswap/token-math" "^5.2.1" tiny-invariant "^1.3.1" tslib "^2.4.0" -"@saberhq/token-utils@^1.12.66", "@saberhq/token-utils@^1.13.6": - version "1.14.9" - resolved "https://registry.yarnpkg.com/@saberhq/token-utils/-/token-utils-1.14.9.tgz#265cb24134c504b04d247b3b8b84b74b6eb8cd52" - integrity sha512-iIcWQYFV2UBQtfQJIsnq38eW04hSgQiJDpshyT7Z69k6FZlAaNC5yvQQnCI1k4K/z7IZpu5W8Pq8XD665UG+AA== +"@saberhq/token-utils@^1.14.11": + version "1.14.11" + resolved "https://registry.yarnpkg.com/@saberhq/token-utils/-/token-utils-1.14.11.tgz#bc895173245a46789b65080eb38722e99dbfeb22" + integrity sha512-C+K1IHQuLwG6APT8wbrlvJPM4arTcNHnnydqZbMpsi1Zyyis+UPM3n/PgHmyX2ydtQ+GzPMLFMgxahtjicEgXw== dependencies: - "@saberhq/solana-contrib" "^1.14.9" + "@saberhq/solana-contrib" "^1.14.11" "@solana/buffer-layout" "^4.0.0" "@solana/spl-token" "^0.1.8" "@ubeswap/token-math" "^5.2.1" @@ -862,6 +947,13 @@ bigint-buffer "^1.1.5" bignumber.js "^9.0.1" +"@solana/buffer-layout@4.0.0", "@solana/buffer-layout@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@solana/buffer-layout/-/buffer-layout-4.0.0.tgz#75b1b11adc487234821c81dfae3119b73a5fd734" + integrity sha512-lR0EMP2HC3+Mxwd4YcnZb0smnaDw7Bl2IQWZiTevRH5ZZBZn6VRWn3/92E3qdU4SSImJkA6IDHawOHAnx/qUvQ== + dependencies: + buffer "~6.0.3" + "@solana/buffer-layout@^3.0.0": version "3.0.0" resolved "https://registry.yarnpkg.com/@solana/buffer-layout/-/buffer-layout-3.0.0.tgz#b9353caeb9a1589cb77a1b145bcb1a9a93114326" @@ -919,7 +1011,7 @@ dependencies: eventemitter3 "^4.0.0" -"@solana/web3.js@1.31.0", "@solana/web3.js@^1.17.0", "@solana/web3.js@^1.21.0", "@solana/web3.js@^1.28.0", "@solana/web3.js@^1.29.0", "@solana/web3.js@^1.31.0", "@solana/web3.js@^1.32.0", "@solana/web3.js@^1.36.0", "@solana/web3.js@^1.37.0", "@solana/web3.js@^1.41.1", "@solana/web3.js@^1.42.0", "@solana/web3.js@^1.43.5", "@solana/web3.js@^1.59.0", "@solana/web3.js@^1.63.0": +"@solana/web3.js@1.31.0", "@solana/web3.js@^1.17.0", "@solana/web3.js@^1.21.0", "@solana/web3.js@^1.28.0", "@solana/web3.js@^1.29.0", "@solana/web3.js@^1.31.0", "@solana/web3.js@^1.32.0", "@solana/web3.js@^1.36.0", "@solana/web3.js@^1.37.0", "@solana/web3.js@^1.41.1", "@solana/web3.js@^1.42.0", "@solana/web3.js@^1.43.5", "@solana/web3.js@^1.50.1", "@solana/web3.js@^1.59.0", "@solana/web3.js@^1.63.0", "@solana/web3.js@^1.66.2": version "1.70.0" resolved "https://registry.yarnpkg.com/@solana/web3.js/-/web3.js-1.70.0.tgz#14ad207f431861397db85921aad8df4e8374e7c8" integrity sha512-HwdI9LaHaszfpzgxJI44iP68mJWUeqK1TeSheKQsGkH5zlVyGWGmim50MyDWu2vXiuL8Akf2xEMSrDYyLordgg== @@ -1166,11 +1258,6 @@ base-x@^3.0.2: dependencies: safe-buffer "^5.0.1" -base-x@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/base-x/-/base-x-4.0.0.tgz#d0e3b7753450c73f8ad2389b5c018a4af7b2224a" - integrity sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw== - base64-js@^1.3.1, base64-js@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" @@ -1227,7 +1314,7 @@ bn-sqrt@^1.0.0: dependencies: bn.js "^5.2.0" -bn.js@5.2.1, bn.js@^5.0.0, bn.js@^5.1.0, bn.js@^5.1.2, bn.js@^5.2.0, bn.js@~5.2.0: +bn.js@5.2.1, bn.js@^5.0.0, bn.js@^5.1.0, bn.js@^5.1.2, bn.js@^5.2.0, bn.js@^5.2.1, bn.js@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== @@ -1275,13 +1362,6 @@ bs58@^4.0.0, bs58@^4.0.1: dependencies: base-x "^3.0.2" -bs58@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/bs58/-/bs58-5.0.0.tgz#865575b4d13c09ea2a84622df6c8cbeb54ffc279" - integrity sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ== - dependencies: - base-x "^4.0.0" - buffer-from@^1.0.0, buffer-from@^1.1.0: version "1.1.2" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" @@ -1467,6 +1547,11 @@ decimal.js@^10.3.1, decimal.js@^10.4.2: resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23" integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== +decimal.js@^10.4.1: + version "10.4.2" + resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.2.tgz#0341651d1d997d86065a2ce3a441fbd0d8e8b98e" + integrity sha512-ic1yEvwT6GuvaYwBLLY6/aFFgjZdySKTE8en/fkU3QICTmRtgtSlFn0u0BXN06InZwtfCelR7j8LRiDI/02iGA== + delay@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/delay/-/delay-5.0.0.tgz#137045ef1b96e5071060dd5be60bf9334436bd1d" @@ -1909,7 +1994,7 @@ js-yaml@4.1.0: dependencies: argparse "^2.0.1" -jsbi@4.3.0, jsbi@^4.1.0, jsbi@^4.2.0, jsbi@^4.3.0: +jsbi@4.3.0, jsbi@^4.1.0, jsbi@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/jsbi/-/jsbi-4.3.0.tgz#b54ee074fb6fcbc00619559305c8f7e912b04741" integrity sha512-SnZNcinB4RIcnEyZqFPdGPVgrg2AcnykiBy0sHVJQKHYeaLUvi3Exj+iaPpLnFVkDPZIV4U0yvgC9/R4uEAZ9g== From ec6e3c62e509748b35df921aa28209876d05c017 Mon Sep 17 00:00:00 2001 From: emerson Date: Fri, 25 Nov 2022 16:53:05 +0800 Subject: [PATCH 06/21] Add optional function in swap --- src/types.ts | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/types.ts b/src/types.ts index 4b263b7..e9e2e63 100644 --- a/src/types.ts +++ b/src/types.ts @@ -13,8 +13,11 @@ import { RouteInfo, TransactionFeeInfo } from "@jup-ag/core"; export const PAYLOAD_SIZE = 32; export interface IProtocolSwap { - swap: () => void; - getSwapMinOutAmount: () => void; + swap: () => Promise<{ txs: (anchor.web3.Transaction | anchor.web3.VersionedTransaction)[]; input: Buffer }>; + getSwapMinOutAmount: () => number; + + build?: () => void; + getRoute?: () => any; } export interface IProtocolPool { @@ -463,6 +466,12 @@ export type GatewayParams = TypeDef< name: "poolDirection"; type: "u8"; }, + { + name: "swapConfig"; + type: { + array: ["u8", 32]; + }; + }, { name: "farmType"; type: { From ffd7f807034a5b06d21d7bf1fee22d8a01c09345 Mon Sep 17 00:00:00 2001 From: emerson Date: Fri, 25 Nov 2022 16:54:07 +0800 Subject: [PATCH 07/21] Add jupiter --- src/builder.ts | 16 +- src/protocols/jupiter.ts | 295 ++++++++++++++++++++++++++++-------- tests/testAdapterJupiter.ts | 117 ++++++++++++++ 3 files changed, 364 insertions(+), 64 deletions(-) create mode 100644 tests/testAdapterJupiter.ts diff --git a/src/builder.ts b/src/builder.ts index c0be449..8e68fa2 100644 --- a/src/builder.ts +++ b/src/builder.ts @@ -31,6 +31,7 @@ import { IProtocolNFTFarm, IProtocolNFTPool, IProtocolPool, + IProtocolSwap, IProtocolVault, LockNFTParams, PoolDirection, @@ -105,6 +106,7 @@ export class GatewayBuilder { // Extra Metadata poolDirection: PoolDirection.Obverse, swapMinOutAmount: new anchor.BN(0), + swapConfig: [], farmType: [], }; @@ -133,13 +135,16 @@ export class GatewayBuilder { this._adjustParams(); + let protocol: IProtocolSwap; + // TODO: Move the logic into protocols switch (swapParams.protocol) { case SupportedProtocols.Jupiter: - const protocol = new ProtocolJupiter( + protocol = new ProtocolJupiter( this._provider.connection, this._program, await this.getGatewayStateKey(), + this.params, { ...swapParams, userKey: this._provider.wallet.publicKey, @@ -161,6 +166,15 @@ export class GatewayBuilder { throw new Error("Unsupported Protocol"); } + const { txs, input } = await protocol.swap(); + + // Push input payload + (this.params.payloadQueue as Uint8Array[]).push(input); + // TODO: Extract the logic of index dispatch to a config file + this.params.inputIndexQueue.push(0); + + this._transactions = [...this._transactions, ...txs]; + return this; } diff --git a/src/protocols/jupiter.ts b/src/protocols/jupiter.ts index 4751fd9..fa67ada 100644 --- a/src/protocols/jupiter.ts +++ b/src/protocols/jupiter.ts @@ -1,11 +1,13 @@ import * as anchor from "@project-serum/anchor"; import { Jupiter, RouteInfo } from "@jup-ag/core"; import JSBI from "jsbi"; -import { IProtocolSwap } from "../types"; -import { JUPITER_ADAPTER_PROGRAM_ID, JUPITER_PROGRAM_ID, WSOL } from "../ids"; +import { GatewayParams, IProtocolSwap, PAYLOAD_SIZE } from "../types"; +import { GATEWAY_PROGRAM_ID, JUPITER_ADAPTER_PROGRAM_ID, JUPITER_PROGRAM_ID, WSOL } from "../ids"; import { getAssociatedTokenAddress } from "@solana/spl-token-v2"; import { Gateway } from "@dappio-wonderland/gateway-idls"; -import { getActivityIndex, getGatewayAuthority } from "../utils"; +import { getActivityIndex, getGatewayAuthority, sigHash } from "../utils"; +import { struct, u64 } from "@project-serum/borsh"; +import { BN } from "bn.js"; interface ProtocolJupiterParams extends SwapParams { userKey: anchor.web3.PublicKey; @@ -20,6 +22,7 @@ export class ProtocolJupiter implements IProtocolSwap { private _connection: anchor.web3.Connection, private _gatewayProgram: anchor.Program, private _gatewayStateKey: anchor.web3.PublicKey, + private _gatewayParams: GatewayParams, private _params: ProtocolJupiterParams ) {} // constructor( @@ -48,77 +51,243 @@ export class ProtocolJupiter implements IProtocolSwap { this._bestRoute = routes.routesInfos[0]; } - async swap(): Promise { + async swap(): Promise<{ txs: (anchor.web3.Transaction | anchor.web3.VersionedTransaction)[]; input: Buffer }> { + // Handle payload input here + let payload = Buffer.alloc(PAYLOAD_SIZE); + + let txs: (anchor.web3.Transaction | anchor.web3.VersionedTransaction)[] = []; const preInstructions: anchor.web3.TransactionInstruction[] = []; const postInstructions: anchor.web3.TransactionInstruction[] = []; let remainingAccounts: anchor.web3.AccountMeta[]; - const { transactions } = await this._jupiter.exchange({ + // tx v1 + // const { transactions } = await this._jupiter.exchange({ + // routeInfo: this._bestRoute, + // userPublicKey: this._params.userKey, + // }); + // const { setupTransaction, swapTransaction, cleanupTransaction } = transactions; + + // tx v2 + let { swapTransaction } = await this._jupiter.exchange({ routeInfo: this._bestRoute, userPublicKey: this._params.userKey, }); - const { setupTransaction, swapTransaction, cleanupTransaction } = transactions; - - // wrap through gateway - // TODO: export params to gateway state - let isPreIx = true; - let swapIx: anchor.web3.TransactionInstruction; - for (let ix of swapTransaction.instructions) { - if (ix.programId.equals(JUPITER_PROGRAM_ID)) { - remainingAccounts = ix.keys; - isPreIx = false; - swapIx = ix; - } else if (isPreIx) { - preInstructions.push(ix); - } else { - postInstructions.push(ix); - } - } + console.log(swapTransaction); + console.log("compiledInstructions"); + (swapTransaction as anchor.web3.VersionedTransaction).message.compiledInstructions.forEach((ix, i) => { + console.log(`#${i}:`, ix); + }); + console.log("addressTableLookups"); + (swapTransaction as anchor.web3.VersionedTransaction).message.addressTableLookups.forEach((table, i) => { + console.log(`#${i}:`, table.accountKey.toBase58()); + }); + console.log("staticAccountKeys"); + (swapTransaction as anchor.web3.VersionedTransaction).message.staticAccountKeys.forEach((key, i) => { + console.log(`#${i}:`, key.toBase58()); + }); - // Extract config - const rawData = Uint8Array.from(swapIx.data); - const swapConfig = { - protocolConfig: Buffer.from(rawData.slice(8, rawData.byteLength - 19)), // 7 - 9 bytes - inputAmount: Buffer.from( - rawData.slice(rawData.byteLength - 19, rawData.byteLength - 11) - ), // u64 - outputAmount: Buffer.from( - rawData.slice(rawData.byteLength - 11, rawData.byteLength - 3) - ), // u64 - slippageBps: Buffer.from( - rawData.slice(rawData.byteLength - 3, rawData.byteLength - 1) - ), // u16 - platformFeeBps: Buffer.from( - rawData.slice(rawData.byteLength - 1, rawData.byteLength) - ), // u8 - }; - console.log("data:", swapIx.data); - console.log("swapConfig:", swapConfig); - - const txSwap = await this._gatewayProgram.methods - .swap() - .accounts({ - gatewayState: this._gatewayStateKey, - adapterProgramId: JUPITER_ADAPTER_PROGRAM_ID, - baseProgramId: JUPITER_PROGRAM_ID, - activityIndex: await getActivityIndex(this._params.userKey), - gatewayAuthority: getGatewayAuthority(), - }) - .preInstructions(preInstructions) - .postInstructions(postInstructions) - .remainingAccounts(remainingAccounts) - .transaction(); - - for (let transaction of [setupTransaction, txSwap, cleanupTransaction] - .filter(Boolean) - .filter((tx) => tx.instructions.length > 0)) { - this._transactions.push(transaction); + let isTxV2 = true; + if ((swapTransaction as anchor.web3.Transaction).instructions) { + isTxV2 = false; } - if (this._transactions.length == 0) { - throw new Error("Transactions are empty"); + if (isTxV2) { + const swapTx = swapTransaction as anchor.web3.VersionedTransaction; + + const originKeysLen = swapTx.message.staticAccountKeys.length; + const writeIndexStart = + swapTx.message.staticAccountKeys.length - swapTx.message.header.numReadonlyUnsignedAccounts; + const keysToAppend = 5; + const gatewayProgramIndex = originKeysLen + 1; + const gatewayStateIndex = writeIndexStart; + const jupiterAdapterProgramIndex = originKeysLen + 2; + const activityIndex = originKeysLen + 3; + const authorityIndex = originKeysLen + 4; + + let readOnlyKeys: anchor.web3.PublicKey[] = []; + for (let i = 0; i < swapTx.message.header.numReadonlyUnsignedAccounts; i++) { + readOnlyKeys = [swapTx.message.staticAccountKeys.pop(), ...readOnlyKeys]; + } + swapTx.message.staticAccountKeys.push(this._gatewayStateKey); + + swapTx.message.staticAccountKeys.push( + ...readOnlyKeys, + GATEWAY_PROGRAM_ID, + JUPITER_ADAPTER_PROGRAM_ID, + await getActivityIndex(this._params.userKey), + getGatewayAuthority() + ); + let jupiterProgramIndex = swapTx.message.staticAccountKeys.length - 1; + for (let [index, pubkey] of swapTx.message.staticAccountKeys.entries()) { + if (pubkey.equals(JUPITER_PROGRAM_ID)) { + jupiterProgramIndex = index; + } + } + swapTx.message.header.numReadonlyUnsignedAccounts = swapTx.message.header.numReadonlyUnsignedAccounts + 4; + + let swapIndex = 0; + let swapIx: anchor.web3.MessageCompiledInstruction; + for (let [index, ix] of swapTx.message.compiledInstructions.entries()) { + ix.accountKeyIndexes = ix.accountKeyIndexes.map((i) => { + return i < originKeysLen ? (i < writeIndexStart ? i : i + 1) : i + keysToAppend; + }); + ix.programIdIndex = ix.programIdIndex < writeIndexStart ? ix.programIdIndex : ix.programIdIndex + 1; + swapTx.message.compiledInstructions[index] = ix; + if (ix.programIdIndex == jupiterProgramIndex) { + swapIndex = index; + swapIx = ix; + } + } + const swapDiscriminator = Buffer.from(sigHash("global", "swap"), "hex"); + + const rawData = Uint8Array.from(swapIx.data); + const swapConfig = { + protocolConfig: Buffer.from(rawData.slice(8, rawData.byteLength - 19)), // 7 - 9 bytes + inputAmount: Buffer.from(rawData.slice(rawData.byteLength - 19, rawData.byteLength - 11)), // u64 + outputAmount: Buffer.from(rawData.slice(rawData.byteLength - 11, rawData.byteLength - 3)), // u64 + slippageBps: Buffer.from(rawData.slice(rawData.byteLength - 3, rawData.byteLength - 1)), // u16 + platformFeeBps: Buffer.from(rawData.slice(rawData.byteLength - 1, rawData.byteLength)), // u8 + }; + + payload.set(swapConfig.inputAmount); + console.log("payload:", payload); + payload.set(swapConfig.outputAmount, 8); + console.log("payload:", payload); + payload.set(swapConfig.slippageBps, 16); + console.log("payload:", payload); + // payload.set(swapConfig.platformFeeBps, 18); + // console.log("payload:", payload); + payload.set(swapConfig.protocolConfig, 18); + console.log("payload:", payload); + // payload.set([255], 18 + swapConfig.protocolConfig.length); // for on-chain identify + // console.log("payload:", payload); + + this._gatewayParams.swapConfig.push(...swapConfig.inputAmount); + this._gatewayParams.swapConfig.push(...swapConfig.outputAmount); + this._gatewayParams.swapConfig.push(...swapConfig.slippageBps); + this._gatewayParams.swapConfig.push(...swapConfig.platformFeeBps); + this._gatewayParams.swapConfig.push(...swapConfig.protocolConfig); + console.log("swapConfig:", this._gatewayParams.swapConfig); + swapIx.data = swapDiscriminator; + swapIx.programIdIndex = gatewayProgramIndex; + swapIx.accountKeyIndexes = [ + gatewayStateIndex, + jupiterAdapterProgramIndex, + jupiterProgramIndex, + activityIndex, + authorityIndex, + ...swapIx.accountKeyIndexes, + ]; + swapTx.message.compiledInstructions[swapIndex] = swapIx; + console.log("after wrap tx:", swapTx); + console.log("compiledInstructions"); + swapTx.message.compiledInstructions.forEach((ix, i) => { + console.log(`#${i}:`, ix); + }); + console.log("staticAccountKeys"); + swapTx.message.staticAccountKeys.forEach((key, i) => { + console.log(`#${i}:`, key.toBase58()); + }); + txs = [swapTx]; + } else { + let isPreIx = true; + let swapIx: anchor.web3.TransactionInstruction; + for (let ix of (swapTransaction as anchor.web3.Transaction).instructions) { + if (ix.programId.equals(JUPITER_PROGRAM_ID)) { + remainingAccounts = ix.keys; + isPreIx = false; + swapIx = ix; + } else if (isPreIx) { + preInstructions.push(ix); + } else { + postInstructions.push(ix); + } + } + + // Extract config + const rawData = Uint8Array.from(swapIx.data); + const swapConfig = { + protocolConfig: Buffer.from(rawData.slice(8, rawData.byteLength - 19)), // 7 - 9 bytes + inputAmount: Buffer.from(rawData.slice(rawData.byteLength - 19, rawData.byteLength - 11)), // u64 + outputAmount: Buffer.from(rawData.slice(rawData.byteLength - 11, rawData.byteLength - 3)), // u64 + slippageBps: Buffer.from(rawData.slice(rawData.byteLength - 3, rawData.byteLength - 1)), // u16 + platformFeeBps: Buffer.from(rawData.slice(rawData.byteLength - 1, rawData.byteLength)), // u8 + }; + console.log("data:", swapIx.data); + console.log("swapConfig:", swapConfig); + + const preTx = new anchor.web3.Transaction(); + if (preInstructions.length > 0) preTx.add(...preInstructions); + const postTx = new anchor.web3.Transaction(); + if (postInstructions.length > 0) postTx.add(...postInstructions); + const txSwap = await this._gatewayProgram.methods + .swap() + .accounts({ + gatewayState: this._gatewayStateKey, + adapterProgramId: JUPITER_ADAPTER_PROGRAM_ID, + baseProgramId: JUPITER_PROGRAM_ID, + activityIndex: await getActivityIndex(this._params.userKey), + gatewayAuthority: getGatewayAuthority(), + }) + // .preInstructions(preInstructions) + // .postInstructions(postInstructions) + .remainingAccounts(remainingAccounts) + .transaction(); + + console.log("remainingAccounts:"); + remainingAccounts.forEach((acc, i) => { + console.log(`#${i}:`, acc.pubkey.toBase58()); + }); + + payload.set(swapConfig.inputAmount); + payload.set(swapConfig.outputAmount, 8); + payload.set(swapConfig.slippageBps, 16); + payload.set(swapConfig.platformFeeBps, 18); + payload.set(swapConfig.protocolConfig, 19); + // payload.set([255], 19 + swapConfig.protocolConfig.length); + console.log("payload:", payload); + // inputLayout.encode( + // { + // inputAmount: new anchor.BN(5000), + // }, + // payload + // ); + + const inputAmount = new BN(swapConfig.inputAmount, "le"); + const outputAmount = new BN(swapConfig.outputAmount, "le"); + const slippage = new BN(swapConfig.slippageBps, "le"); + const fee = new BN(swapConfig.platformFeeBps, "le"); + + console.log("inputAmount:", Number(inputAmount)); + console.log("outputAmount:", Number(outputAmount)); + console.log("slippage:", Number(slippage)); + console.log("fee:", Number(fee)); + + this._gatewayParams.swapConfig.push(...swapConfig.inputAmount); + this._gatewayParams.swapConfig.push(...swapConfig.outputAmount); + this._gatewayParams.swapConfig.push(...swapConfig.slippageBps); + this._gatewayParams.swapConfig.push(...swapConfig.platformFeeBps); + this._gatewayParams.swapConfig.push(...swapConfig.protocolConfig); + console.log("swapConfig:", this._gatewayParams.swapConfig); + + // for (let transaction of [setupTransaction, txSwap, cleanupTransaction] + // .filter(Boolean) + // .filter((tx) => tx.instructions.length > 0)) { + // this._transactions.push(transaction); + // } + txs.push(txSwap); + if (preTx.instructions.length > 0) { + txs = [preTx, ...txs]; + } + if (postTx.instructions.length > 0) { + txs = [...txs, postTx]; + } } - return this._transactions; + // console.log("setupTransaction:", setupTransaction); + // console.log("txSwap:", txSwap); + // console.log("cleanupTransaction:", cleanupTransaction); + + return { txs, input: payload }; } getSwapMinOutAmount(): number { diff --git a/tests/testAdapterJupiter.ts b/tests/testAdapterJupiter.ts new file mode 100644 index 0000000..ef0b3c9 --- /dev/null +++ b/tests/testAdapterJupiter.ts @@ -0,0 +1,117 @@ +import * as anchor from "@project-serum/anchor"; +import { PublicKey, Connection } from "@solana/web3.js"; +import NodeWallet from "@project-serum/anchor/dist/cjs/nodewallet"; +import { getAccount, getAssociatedTokenAddress } from "@solana/spl-token-v2"; +import { + AddLiquidityParams, + StakeParams, + GatewayBuilder, + SupportedProtocols, + SwapParams, + UnstakeParams, + RemoveLiquidityParams, + HarvestParams, +} from "../src"; +import { raydium } from "@dappio-wonderland/navigator"; + +describe("Gateway", () => { + const connection = new Connection("https://rpc-mainnet-fork.epochs.studio", { + commitment: "confirmed", + wsEndpoint: "wss://rpc-mainnet-fork.epochs.studio/ws", + }); + // const connection = new Connection("https://solana-api.projectserum.com", { + // commitment: "confirmed", + // confirmTransactionInitialTimeout: 180 * 1000, + // }); + // const connection = new Connection("https://solana-api.tt-prod.net", { + // commitment: "confirmed", + // confirmTransactionInitialTimeout: 180 * 1000, + // }); + // const connection = new Connection("https://ssc-dao.genesysgo.net", { + // commitment: "confirmed", + // confirmTransactionInitialTimeout: 180 * 1000, + // }); + // const connection = new Connection("https://api.mainnet-beta.solana.com", { + // commitment: "confirmed", + // confirmTransactionInitialTimeout: 180 * 1000, + // }); + // const connection = new Connection("https://solana-mainnet.g.alchemy.com/v2/7Us4nzuUS82Z33j3AKzhUOKRA7d_TkNh", { + // commitment: "confirmed", + // wsEndpoint: "wss://solana-mainnet.g.alchemy.com/v2/7Us4nzuUS82Z33j3AKzhUOKRA7d_TkNh", + // confirmTransactionInitialTimeout: 180 * 1000, + // }); + + const options = anchor.AnchorProvider.defaultOptions(); + const wallet = NodeWallet.local(); + let provider = new anchor.AnchorProvider(connection, wallet, options); + + anchor.setProvider(provider); + + const zapInAmount = 10000; + + it("Swap in Jupiter", async () => { + const swapParams: SwapParams = { + protocol: SupportedProtocols.Jupiter, + fromTokenMint: new PublicKey( + "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v" // USDC + // "4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R" // RAY + ), + toTokenMint: new PublicKey( + // "4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R" // RAY + // "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB" // USDT + // "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v" // USDC + // "SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt" // SRM + "So11111111111111111111111111111111111111112" // WSOL + // "GENEtH5amGSi8kHAtQoezp1XEXwZJ8vcuePYnXdKrMYz" // GENE + // "66edZnAPEJSxnAK4SckuupssXpbu5doV57FUcghaqPsY" // PRGC + // "7s6NLX42eURZfpyuKkVLrr9ED9hJE8718cyXFsYKqq5g" // GEAR + ), + amount: zapInAmount, // Swap half of the fromToken to proceed zapIn + slippage: 1, + }; + + const gateway = new GatewayBuilder(provider); + + await gateway.swap(swapParams); + await gateway.finalize(); + + console.log(gateway.params); + // console.log(`swapInAmount: ${gateway.params.swapInAmount}`); + // console.log(`swapMinOutAmount: ${gateway.params.swapMinOutAmount}`); + + const txs = gateway.transactions(); + console.log(txs); + // const connection = new Connection("https://rpc-mainnet-fork.epochs.studio", { + // commitment: "confirmed", + // wsEndpoint: "wss://rpc-mainnet-fork.epochs.studio/ws", + // }); + // provider = new anchor.AnchorProvider(connection, wallet, options); + + console.log("======"); + console.log("Txs are sent..."); + const recentBlockhash = await connection.getLatestBlockhash(); + for (let tx of txs) { + if ((tx as anchor.web3.Transaction).instructions) { + const sig = await provider.sendAndConfirm(tx as anchor.web3.Transaction, [], { + skipPreflight: true, + commitment: "confirmed", + } as unknown as anchor.web3.ConfirmOptions); + console.log(sig); + } else { + const txV2 = tx as anchor.web3.VersionedTransaction; + txV2.message.recentBlockhash = recentBlockhash.blockhash; + txV2.sign([wallet.payer]); + let versionMessage = txV2.serialize(); + console.log(Buffer.from(versionMessage).toString("base64")); + //const result = sendAndConfirmTransaction(connection, tx, wallet); + const sig = await connection.sendRawTransaction(versionMessage, { + skipPreflight: true, + commitment: "confirmed", + } as unknown as anchor.web3.ConfirmOptions); + console.log(sig); + } + } + console.log("Txs are executed"); + console.log("======"); + }); +}); From a009343ab0eb9843ae8a23a64a6613d70708ca95 Mon Sep 17 00:00:00 2001 From: emerson Date: Wed, 4 Jan 2023 10:52:38 +0800 Subject: [PATCH 08/21] Update dependency --- package.json | 2 +- yarn.lock | 482 +++++++++++++-------------------------------------- 2 files changed, 124 insertions(+), 360 deletions(-) diff --git a/package.json b/package.json index b9ebf64..dfebf36 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,7 @@ "@dappio-wonderland/gateway-idls": "^0.2.8", "@dappio-wonderland/navigator": "^0.2.26", "@dappio-wonderland/utils": "^0.2.0", - "@jup-ag/core": "3.0.0-beta.8-e44d7b4", + "@jup-ag/core": "4.0.0-beta.3", "@project-serum/anchor": "^0.24.2", "@project-serum/borsh": "^0.2.5", "@project-serum/serum": "^0.13.61", diff --git a/yarn.lock b/yarn.lock index a5750da..8104df0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,40 +2,6 @@ # yarn lockfile v1 -"@apricot-lend/sdk-ts@0.17.5": - version "0.17.5" - resolved "https://registry.yarnpkg.com/@apricot-lend/sdk-ts/-/sdk-ts-0.17.5.tgz#f0528e35261d3944b775cdba261893cc7a6577d1" - integrity sha512-3U4IpYMyKQLXtU5whL/2WkLP3DpfJkZ3aznvm5AvxFBV6BUeVHWSjA8q9Nq/hGe0zSoC8YrtIRax3yUomIP84w== - dependencies: - "@apricot-lend/solana-swaps-js" "^0.1.18" - "@project-serum/borsh" "^0.2.3" - "@project-serum/serum" "^0.13.60" - "@pythnetwork/client" "^2.5.1" - "@solana/spl-token" "^0.1.8" - "@solana/web3.js" "^1.37.0" - "@switchboard-xyz/switchboard-api" "^0.2.152" - "@types/coingecko-api" "^1.0.10" - axios "^0.24.0" - buffer-layout "^1.2.2" - coingecko-api "^1.0.10" - decimal.js "^10.3.1" - js-base64 "^3.7.2" - retry-axios "^2.6.0" - tiny-invariant "^1.1.0" - -"@apricot-lend/solana-swaps-js@^0.1.18": - version "0.1.23" - resolved "https://registry.yarnpkg.com/@apricot-lend/solana-swaps-js/-/solana-swaps-js-0.1.23.tgz#64ed730262db64fc296cd986e1f55bac130dfe8b" - integrity sha512-YWQiTyjFTtr3qXMdCL34m/1yOSq4pwm4Pr2GnH9jUU2zjF5bVlxyzCtd9qOQmTcbh+NoUtkO/3IfbDATzhF6mw== - dependencies: - "@orca-so/common-sdk" "0.1.1" - "@orca-so/whirlpools-sdk" "0.5.3" - "@project-serum/anchor" "^0.25.0" - "@solana/spl-token" "^0.1.8" - "@solana/web3.js" "^1.29.0" - decimal.js "^10.4.2" - tiny-invariant "^1.1.0" - "@babel/runtime@^7.10.5", "@babel/runtime@^7.12.5", "@babel/runtime@^7.17.2": version "7.20.6" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.20.6.tgz#facf4879bfed9b5326326273a64220f099b0fce3" @@ -163,27 +129,27 @@ dependencies: "@hapi/hoek" "^9.0.0" -"@jup-ag/core@3.0.0-beta.8-e44d7b4": - version "3.0.0-beta.8-e44d7b4" - resolved "https://registry.yarnpkg.com/@jup-ag/core/-/core-3.0.0-beta.8-e44d7b4.tgz#b30b1cf6c3b8b167fe52339157ffdc1af82a00c8" - integrity sha512-5fH98wbtDl5G5JMZbQJQ1yvYIzDePFe/t7pNbErg5PeMsXWqHkfubcwbWalfEI4NRr9a6qBj7yZfoWUTY0mCUQ== +"@jup-ag/core@4.0.0-beta.3": + version "4.0.0-beta.3" + resolved "https://registry.yarnpkg.com/@jup-ag/core/-/core-4.0.0-beta.3.tgz#3b39a57e5a3a5d39419a244c5336cd486e5f924b" + integrity sha512-PynU/337qxrUY+i0GE59Y/D+sWWNlqxFSTEKPA6Uu5H6Urf9+wqZ+LxkZd6iiivALRpCtfO+iQXMU5AIWJYFpw== dependencies: - "@jup-ag/crema-sdk-v2" "2.0.4" + "@jup-ag/crema-sdk-v2" "2.1.6" "@jup-ag/cykura-sdk" "0.1.25" "@jup-ag/cykura-sdk-core" "0.1.8" "@jup-ag/deltafi-sdk" "0.0.2" "@jup-ag/dradex-idl" "0.2.1" - "@jup-ag/dradex-sdk" "0.2.2" - "@jup-ag/goosefx-ssl-sdk" "1.2.15" + "@jup-ag/dradex-sdk" "0.2.3" + "@jup-ag/goosefx-ssl-sdk" "1.2.17" "@jup-ag/invariant" "0.9.35" "@jup-ag/lifinity-sdk" "0.1.72" - "@jup-ag/lifinity-sdk-v2" "1.0.5" - "@jup-ag/math" "3.0.0-beta.8-e44d7b4" + "@jup-ag/lifinity-sdk-v2" "1.0.8" + "@jup-ag/math" "4.0.0-beta.3" "@jup-ag/raydium-clmm-sdk" "1.0.2" - "@jup-ag/whirlpool-sdk" "0.1.1" - "@mercurial-finance/dynamic-amm-sdk" "0.1.7" - "@mercurial-finance/optimist" "0.1.9-e44d7b4" - "@mercurial-finance/vault-sdk" "0.2.30" + "@jup-ag/whirlpools-sdk" "0.7.2" + "@mercurial-finance/dynamic-amm-sdk" "0.1.9" + "@mercurial-finance/optimist" "0.2.0" + "@mercurial-finance/vault-sdk" "0.3.2" "@noble/hashes" "1.1.2" "@project-serum/anchor" "0.24.2" "@project-serum/serum" "0.13.65" @@ -193,15 +159,15 @@ bignumber.js "9.1.0" bn.js "5.2.1" cross-fetch "3.1.5" - decimal.js "10.3.1" + decimal.js "10.4.2" fzstd "~0.0.4" jsbi "4.3.0" promise-retry "2.0.1" -"@jup-ag/crema-sdk-v2@2.0.4": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@jup-ag/crema-sdk-v2/-/crema-sdk-v2-2.0.4.tgz#9e59aae44f7addc73ba1968ca8596ef258e3cb38" - integrity sha512-rtSbxwKGs74BzbTFj3QekYazNl+N7G6jkpCgRXOOwl8/dHmKZqnjfYlO+lWCzynuKkYNg5IZOudZ65QdcJ+NUA== +"@jup-ag/crema-sdk-v2@2.1.6": + version "2.1.6" + resolved "https://registry.yarnpkg.com/@jup-ag/crema-sdk-v2/-/crema-sdk-v2-2.1.6.tgz#d4b0b26250e2093c376c1d19395148d9a430ddf4" + integrity sha512-YhYfzbZCB0G0XciDO0vFXOpJsIn6kveVYolXuJ0toj2t7W0OM9NfvdtUvboUbhE92nJfzpHBScb3X9Qosb8KOA== dependencies: "@cremafinance/anchor-contrib" "1.14.3" "@project-serum/anchor" "^0.24.0" @@ -233,22 +199,23 @@ bignumber.js "^9.1.0" bn.js "^5.2.0" -"@jup-ag/dradex-sdk@0.2.2": - version "0.2.2" - resolved "https://registry.yarnpkg.com/@jup-ag/dradex-sdk/-/dradex-sdk-0.2.2.tgz#8b32a5266569ee61f89595bc463e211a6fae215c" - integrity sha512-RF27iLWxUBVdTVI2+C+RNsUFkzYrp0Ufgg9cMsI22s9F3jsYqJnjzqQNebeS4qBKIwECXEhvLRBt14mKU1xF1g== +"@jup-ag/dradex-sdk@0.2.3": + version "0.2.3" + resolved "https://registry.yarnpkg.com/@jup-ag/dradex-sdk/-/dradex-sdk-0.2.3.tgz#8f3befe62c0d92c64d26b93d224811b9354bc96a" + integrity sha512-VGvJzy1aYFs7pdEBsyHipLDODG2JoczCBbNXkUjOMqf0RK8Cq0Ofwa6znDKDqK63sO+JdOD41dyQoswwsFUmVQ== dependencies: "@dradex/idl" "npm:@jup-ag/dradex-idl@0.2.1" "@solana/spl-token" "^0.3.4" decimal.js "^10.3.1" jsbi "^4.3.0" -"@jup-ag/goosefx-ssl-sdk@1.2.15": - version "1.2.15" - resolved "https://registry.yarnpkg.com/@jup-ag/goosefx-ssl-sdk/-/goosefx-ssl-sdk-1.2.15.tgz#eef413d24355572d308121e185391b8703a20c16" - integrity sha512-hQ0DuxW2D9AGFpGokpGyR8TM3/KCSbQ4WmOmJ0+/LNQGSYM7uukO2t2diKCv7B3ZMaqK65ymadwHIDu0W7LdEw== +"@jup-ag/goosefx-ssl-sdk@1.2.17": + version "1.2.17" + resolved "https://registry.yarnpkg.com/@jup-ag/goosefx-ssl-sdk/-/goosefx-ssl-sdk-1.2.17.tgz#f4417ff00e27263bfccfe80c9970f13391f6804d" + integrity sha512-ouBfsJqLeiWXccx026gEuOtoEo67uVt9FAFA3rP8fbX5DW9hS5n40vwGbAVXbftcbfJDdymsSep95WdjYJ4rZA== dependencies: "@project-serum/anchor" "^0.17.1-beta.1" + "@pythnetwork/client" "^2.8.0" "@solana/buffer-layout" "^4.0.0" "@solana/spl-token" "^0.2.0" "@solana/web3.js" "^1.41.1" @@ -262,10 +229,10 @@ "@solana/spl-token-registry" "^0.2.4484" invariant "^2.2.4" -"@jup-ag/lifinity-sdk-v2@1.0.5": - version "1.0.5" - resolved "https://registry.yarnpkg.com/@jup-ag/lifinity-sdk-v2/-/lifinity-sdk-v2-1.0.5.tgz#f7f4209a28592bc41ebb84d7f7c658cf3269d691" - integrity sha512-OB7ULaG0pdFtJ2zirrHQDTtVW4NFsg3rvGHQwEei+SEVaVdOJi29Mxr8chUPuWaIHdBr61OY0Nxw6j3OzMADxw== +"@jup-ag/lifinity-sdk-v2@1.0.8": + version "1.0.8" + resolved "https://registry.yarnpkg.com/@jup-ag/lifinity-sdk-v2/-/lifinity-sdk-v2-1.0.8.tgz#79116db8f3efda8d5873f7aec85a778881aedd63" + integrity sha512-9NKK3ky3mhCVRg93lkYYf6POTUXc6p033l4i4mYaUbqh3s0MNRn1zKqMoQmqSuJDVFzKQlVWWKLkuYv2+Wr86A== dependencies: "@project-serum/anchor" "0.24.2" "@project-serum/borsh" "^0.2.5" @@ -288,12 +255,12 @@ "@solana/web3.js" "1.31.0" decimal.js "^10.3.1" -"@jup-ag/math@3.0.0-beta.8-e44d7b4": - version "3.0.0-beta.8-e44d7b4" - resolved "https://registry.yarnpkg.com/@jup-ag/math/-/math-3.0.0-beta.8-e44d7b4.tgz#ae551911057af984b3a43ba1295654d3af063adc" - integrity sha512-16qDrzH3iQh9l2OeavkQw+b0BjEZqe0dJ3iEhe6DyNICNcFAo+8rSRmCFhI3026kHU/m/4ew51eZujbVDDl05w== +"@jup-ag/math@4.0.0-beta.3": + version "4.0.0-beta.3" + resolved "https://registry.yarnpkg.com/@jup-ag/math/-/math-4.0.0-beta.3.tgz#e813c50c28e5d8989fbfed826cbec5c30cf968c1" + integrity sha512-HchwfQGgh+FKpxRx1oIsXbXdvs06XepPwZS9XkzWiGgZRPHDOzRebwwi1dhKCHkDCvKZp3NfY/DWuCAo9QnaPg== dependencies: - decimal.js "10.3.1" + decimal.js "10.4.2" jsbi "4.3.0" "@jup-ag/raydium-clmm-sdk@1.0.2": @@ -307,25 +274,34 @@ "@solana/web3.js" "^1.66.2" decimal.js "^10.3.1" -"@jup-ag/whirlpool-sdk@0.1.1": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@jup-ag/whirlpool-sdk/-/whirlpool-sdk-0.1.1.tgz#f305bea2cf205994b87358ee5ad667d3c84c320e" - integrity sha512-GaEnG+T4ltQ3eKLVEnBRpatrRsR1v6t6epnp/hlXDTxiHyfFaVK/gmfi6ckCXs+npL/y39OtwsO0QV2zkOJdcg== - dependencies: - "@orca-so/whirlpool-client-sdk" "npm:@jup-ag/whirlpool-client-sdk@0.0.8" - "@project-serum/anchor" "~0.23.0" - "@solana/spl-token" "~0.1.8" - axios "^0.25.0" - bn.js "~5.2.0" - decimal.js "~10.3.1" - tiny-invariant "~1.2.0" - -"@mercurial-finance/dynamic-amm-sdk@0.1.7": - version "0.1.7" - resolved "https://registry.yarnpkg.com/@mercurial-finance/dynamic-amm-sdk/-/dynamic-amm-sdk-0.1.7.tgz#d084ca41083b0d9d2595c3d30178f5b19fa5c522" - integrity sha512-p2rynJa0MKYWopq+goCqBCRTqtVOuR95B0OWLvhZfLdPywltxo+ywBaKePXD+IuCvWKzMcC75mLa9uCN5RAEIg== +"@jup-ag/whirlpools-sdk@0.7.2": + version "0.7.2" + resolved "https://registry.yarnpkg.com/@jup-ag/whirlpools-sdk/-/whirlpools-sdk-0.7.2.tgz#c4cc2fa601686e5cb5f1020b8c50acf38c9fb529" + integrity sha512-q3QPZ4QCj5s9eaY000jmIPiaFVCuJ/cYAxdzR+0gEeDCgrcBl3eJsxvaIEnyElM6x2r6/lc+yhjJMP0kfrUYxQ== + dependencies: + "@orca-so/common-sdk" "^0.1.4" + "@project-serum/anchor" "~0.25.0" + "@solana/spl-token" "^0.1.8" + "@solana/web3.js" "^1.66.0" + decimal.js "^10.3.1" + tiny-invariant "^1.2.0" + +"@mercurial-finance/apricot-sdk@0.17.6": + version "0.17.6" + resolved "https://registry.yarnpkg.com/@mercurial-finance/apricot-sdk/-/apricot-sdk-0.17.6.tgz#e5e2266dbf3d454a09d745561f486aaa351d625a" + integrity sha512-/x/nMksG2h3uB7G4bPVXk0YjvsGVUniSikRmCf/VFFly9BqcRcBtSk4aMdSvIjYsJrpSzWVrHXUYeOtUF1ObDA== + dependencies: + "@solana/spl-token" "0.1.8" + "@solana/web3.js" "^1.37.0" + decimal.js "^10.3.1" + tiny-invariant "^1.1.0" + +"@mercurial-finance/dynamic-amm-sdk@0.1.9": + version "0.1.9" + resolved "https://registry.yarnpkg.com/@mercurial-finance/dynamic-amm-sdk/-/dynamic-amm-sdk-0.1.9.tgz#79986840a04fe2d7e63bc30fb4e4e33f0b3308da" + integrity sha512-yT0kPdA2plA/PFTphPJ++Sz802yYJMBSUhVfn8giP1hpn0tDG+E+c8VimOR3a7xj5iAlXf+eIeirxFmrdrbxiQ== dependencies: - "@mercurial-finance/vault-sdk" "0.2.27" + "@mercurial-finance/vault-sdk" "0.3.2" "@project-serum/anchor" "0.24.2" "@saberhq/anchor-contrib" "^1.13.32" "@saberhq/stableswap-sdk" "^1.13.32" @@ -340,10 +316,15 @@ invariant "^2.2.4" jsbi "^4.3.0" -"@mercurial-finance/optimist@0.1.9-e44d7b4": - version "0.1.9-e44d7b4" - resolved "https://registry.yarnpkg.com/@mercurial-finance/optimist/-/optimist-0.1.9-e44d7b4.tgz#1f5abd4ac92446ccc2bf17973089e24558c6c31a" - integrity sha512-xw+2WYldC6NENU3zNM6vdgt4VBEdZb3VRna3Oi1ctyxeBVeJjbx4J3ZOLeqlDvWT+OrmPRqOOjIkNWy0DpNRAA== +"@mercurial-finance/francium-sdk@1.4.3": + version "1.4.3" + resolved "https://registry.yarnpkg.com/@mercurial-finance/francium-sdk/-/francium-sdk-1.4.3.tgz#aa6c43da1a923a700bec0b0e425fe72a76d8dd68" + integrity sha512-beFsxFx9WsHsImCSZAPXlitE4kQMugHczATishmJdxXGEHvBfJ3hrncjaWf+znwlMTknx8zYgPFfeP9JzbHHgw== + +"@mercurial-finance/optimist@0.2.0": + version "0.2.0" + resolved "https://registry.yarnpkg.com/@mercurial-finance/optimist/-/optimist-0.2.0.tgz#03992ce6de460611006ac094037013bcb6a999b1" + integrity sha512-tUA1y83jTXroEClGN7dyhHxKZ+C+zKbSRx/LA7BltMumNG8mFSWJpi5uwkhmfhmSzvSgDob/qw0py3lFjw/FKQ== dependencies: promise-retry "2.0.1" @@ -354,6 +335,29 @@ dependencies: promise-retry "2.0.1" +"@mercurial-finance/port-sdk@0.2.69": + version "0.2.69" + resolved "https://registry.yarnpkg.com/@mercurial-finance/port-sdk/-/port-sdk-0.2.69.tgz#79978c4be9175afb3640e18e16f21e439f203ef2" + integrity sha512-DDZBLkoIQVhLQRy+t7dVuiHNw0nAmWD7xqwMekHT71bBLU5ajQglRvQ9b8d2RQQn1WJsXhbGbc7eTUGWdZqWoQ== + dependencies: + "@solana/buffer-layout" "^3.0.0" + "@solana/spl-token" "0.1.8" + "@solana/spl-token-registry" "^0.2.1107" + "@solana/web3.js" "^1.32.0" + big.js "^6.1.1" + bn.js "^5.2.1" + buffer-layout "1.2.2" + +"@mercurial-finance/solend-sdk@0.6.5": + version "0.6.5" + resolved "https://registry.yarnpkg.com/@mercurial-finance/solend-sdk/-/solend-sdk-0.6.5.tgz#54b2fe6fb28356ba8e749e8c42fb9193cec4f258" + integrity sha512-544KqvD1IkpnyTUDOCt0yVlTcayt9rv+CTXHTFQDinWQQkA8uWBoiNbI0g49bJVE//Np3SbJSOgJmq5KlxgvWQ== + dependencies: + "@solana/web3.js" "^1.52.0" + bn.js "^5.2.0" + buffer "^6.0.3" + buffer-layout "^1.2.0" + "@mercurial-finance/tulip-platform-sdk@2.0.30": version "2.0.30" resolved "https://registry.yarnpkg.com/@mercurial-finance/tulip-platform-sdk/-/tulip-platform-sdk-2.0.30.tgz#c528ca8efd96e4667d8d905274065d6435438ad6" @@ -365,40 +369,18 @@ "@solana/web3.js" "^1.66.2" lodash "^4.17.21" -"@mercurial-finance/vault-sdk@0.2.27": - version "0.2.27" - resolved "https://registry.yarnpkg.com/@mercurial-finance/vault-sdk/-/vault-sdk-0.2.27.tgz#9be20d8114a62da568161e0e6db1aebc11c19859" - integrity sha512-WncIXzkDr+PZaEofDcjfKmmWyg1QW5E5Ceg7OYrzPij6i+qBHWz7l+1YQOshsTwqEwE0WpC8tfyZXFSqwtdnQw== +"@mercurial-finance/vault-sdk@0.3.2": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@mercurial-finance/vault-sdk/-/vault-sdk-0.3.2.tgz#6ed4643f8b254274bc0e122085611cd11e181d96" + integrity sha512-q5mulo3KQKzfC0eqKB83+5oRW0iwR7mje6PDN2Y85cMS4OWpQc7y2uYWN8toVgwQKFfnkomp/mDnuRsgqZHTnw== dependencies: - "@apricot-lend/sdk-ts" "0.17.5" - "@blockworks-foundation/mango-client" "^3.4.7" - "@mercurial-finance/optimist" "^0.1.4" - "@port.finance/port-sdk" "^0.2.67" - "@project-serum/anchor" "0.24.2" - "@quarryprotocol/quarry-sdk" "5.0.2" - "@saberhq/anchor-contrib" "^1.13.6" - "@solana/buffer-layout" "^4.0.0" - "@solana/spl-token" "0.1.8" - "@solana/spl-token-registry" "0.2.1105" - "@solana/wallet-adapter-base" "^0.9.5" - "@solana/web3.js" "^1.42.0" - "@solendprotocol/solend-sdk" "^0.5.6" - bn.js "5.2.1" - cross-fetch "^3.1.5" - decimal.js "10.3.1" - francium-sdk "^1.3.34" - jsbi "4.3.0" - -"@mercurial-finance/vault-sdk@0.2.30": - version "0.2.30" - resolved "https://registry.yarnpkg.com/@mercurial-finance/vault-sdk/-/vault-sdk-0.2.30.tgz#5476f12d8c2296a492ba9c6e4865d275078b9a34" - integrity sha512-J3BvzRmBTO3cd+6BQ9bzSPZ3K4y1WhdRi8t0Bm7P5Plt9awRb4TXEXin/NJojnmkfbCmeQ4eaqJ9tofFPVmX/Q== - dependencies: - "@apricot-lend/sdk-ts" "0.17.5" "@blockworks-foundation/mango-client" "^3.4.7" + "@mercurial-finance/apricot-sdk" "0.17.6" + "@mercurial-finance/francium-sdk" "1.4.3" "@mercurial-finance/optimist" "^0.1.4" + "@mercurial-finance/port-sdk" "0.2.69" + "@mercurial-finance/solend-sdk" "0.6.5" "@mercurial-finance/tulip-platform-sdk" "2.0.30" - "@port.finance/port-sdk" "^0.2.67" "@project-serum/anchor" "0.24.2" "@quarryprotocol/quarry-sdk" "5.0.2" "@saberhq/anchor-contrib" "^1.13.6" @@ -407,40 +389,11 @@ "@solana/spl-token-registry" "0.2.1105" "@solana/wallet-adapter-base" "^0.9.5" "@solana/web3.js" "^1.42.0" - "@solendprotocol/solend-sdk" "^0.5.6" bn.js "5.2.1" cross-fetch "^3.1.5" decimal.js "10.3.1" - francium-sdk "^1.3.34" jsbi "4.3.0" -"@metaplex-foundation/mpl-core@^0.0.2": - version "0.0.2" - resolved "https://registry.yarnpkg.com/@metaplex-foundation/mpl-core/-/mpl-core-0.0.2.tgz#17ee2cc216e17629d6df1dbba75964625ebbd603" - integrity sha512-UUJ4BlYiWdDegAWmjsNQiNehwYU3QfSFWs3sv4VX0J6/ZrQ28zqosGhQ+I2ZCTEy216finJ82sZWNjuwSWCYyQ== - dependencies: - "@solana/web3.js" "^1.31.0" - bs58 "^4.0.1" - -"@metaplex-foundation/mpl-token-metadata@1.2.5": - version "1.2.5" - resolved "https://registry.yarnpkg.com/@metaplex-foundation/mpl-token-metadata/-/mpl-token-metadata-1.2.5.tgz#1a927b1c7d30cd634a1e4782022712a02f6865c2" - integrity sha512-pxRG53JsTSwXpiJJMHNulJhH8kO3hHztQ3QxslUoKw2hBYKXsg9TGsiHgNIhN2MPZGBJ2pDeK6kNGv0sd54HhA== - dependencies: - "@metaplex-foundation/mpl-core" "^0.0.2" - "@solana/spl-token" "^0.1.8" - "@solana/web3.js" "^1.31.0" - -"@mithraic-labs/psy-american@^0.2.1": - version "0.2.3" - resolved "https://registry.yarnpkg.com/@mithraic-labs/psy-american/-/psy-american-0.2.3.tgz#a6f3a62f96ec01f94463a7b12f5bf71a003c9942" - integrity sha512-NsDfb9QNuLKNqRnq8rWAoD2Y3ouAEsAPFfwP28SmDVfkugvj03nvQtjotFLlH2TsE31YonG+gauhpeeGKZyyuw== - dependencies: - "@project-serum/anchor" "^0.24.2" - "@project-serum/serum" "^0.13.60" - "@solana/spl-token" "^0.1.8" - "@solana/web3.js" "^1.28.0" - "@noble/ed25519@^1.7.0": version "1.7.1" resolved "https://registry.yarnpkg.com/@noble/ed25519/-/ed25519-1.7.1.tgz#6899660f6fbb97798a6fbd227227c4589a454724" @@ -461,17 +414,7 @@ resolved "https://registry.yarnpkg.com/@noble/secp256k1/-/secp256k1-1.7.0.tgz#d15357f7c227e751d90aa06b05a0e5cf993ba8c1" integrity sha512-kbacwGSsH/CTout0ZnZWxnW1B+jH/7r/WAAKLBtrRJ/+CUH7lgmQzl3GTrQua3SGKWNSDsS6lmjnDpIJ5Dxyaw== -"@orca-so/common-sdk@0.1.1": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@orca-so/common-sdk/-/common-sdk-0.1.1.tgz#18a3a562f1b57f970f2115f453c7e00aa05034cf" - integrity sha512-OKFwr5VgzLKmM/C6xQom4y1jxrihuhKXhDwYMbgPLJW4SllePOfS6SG5fp9/17SvyuWL/zna8Z6ZW2QHpX1Yxw== - dependencies: - "@project-serum/anchor" "~0.25.0" - "@solana/spl-token" "0.1.8" - decimal.js "^10.3.1" - tiny-invariant "^1.2.0" - -"@orca-so/common-sdk@~0.1.1": +"@orca-so/common-sdk@^0.1.4": version "0.1.4" resolved "https://registry.yarnpkg.com/@orca-so/common-sdk/-/common-sdk-0.1.4.tgz#4e87da14f525228ded7969431738a32260dc8495" integrity sha512-reJyk60vEyDH4IutT+ulxy+FA12MfmVC9/13cLkcOBNTwtgV9/UIJnuA5I9ptqn4gaCols078n2el9nbtLsKaQ== @@ -481,68 +424,6 @@ decimal.js "^10.3.1" tiny-invariant "^1.2.0" -"@orca-so/whirlpool-client-sdk@npm:@jup-ag/whirlpool-client-sdk@0.0.8": - version "0.0.8" - resolved "https://registry.yarnpkg.com/@jup-ag/whirlpool-client-sdk/-/whirlpool-client-sdk-0.0.8.tgz#d3715266e0a76ab699078ce1f5525f80e09dd825" - integrity sha512-nlAE/huKAWNxJ9g9BhD7nWGqTg/s0kGjWYqccsYM1Nv6CjesvWdtl8N4k81enmYYU2jgjm6f4XYKA8zTLHsBsA== - dependencies: - "@project-serum/anchor" "~0.23.0" - "@solana/spl-token" "~0.1.8" - bn.js "~5.2.0" - decimal.js "~10.3.1" - lru-cache "^7.9.0" - -"@orca-so/whirlpools-sdk@0.5.3": - version "0.5.3" - resolved "https://registry.yarnpkg.com/@orca-so/whirlpools-sdk/-/whirlpools-sdk-0.5.3.tgz#95b4547b4caf05db2b850dadf05b3b9f38c170a9" - integrity sha512-HhoZo+q1KXxAEjfVbbKTdW2B8APxDpvsRCX/AqxnN2/DOI3M+p1ZWHkrrHNINbygwJXE6Mi+jwx7jTBT2hbtVw== - dependencies: - "@metaplex-foundation/mpl-token-metadata" "1.2.5" - "@orca-so/common-sdk" "~0.1.1" - "@project-serum/anchor" "~0.25.0" - "@solana/spl-token" "^0.1.8" - decimal.js "^10.3.1" - tiny-invariant "^1.2.0" - -"@port.finance/port-sdk@^0.2.67": - version "0.2.69" - resolved "https://registry.yarnpkg.com/@port.finance/port-sdk/-/port-sdk-0.2.69.tgz#ceeb3c942779ecfedf487b60df0cdd42343f909a" - integrity sha512-Vhv72U4RSSFMBqr7kNx2kzakfWspnphWfYliOHqBALEmmS/JO8Nwf4cctVCqfjVc2pasjNqpIi7ltojRLLXAgg== - dependencies: - "@project-serum/anchor" "^0.21.0" - "@saberhq/solana-contrib" "^1.12.53" - "@saberhq/token-utils" "^1.12.53" - "@solana/buffer-layout" "^3.0.0" - "@solana/spl-token" "^0.1.8" - "@solana/spl-token-registry" "^0.2.1107" - big.js "^6.1.1" - bignumber.js "^9.0.1" - buffer-layout "1.2.2" - jsbi "^4.1.0" - prettier "^2.4.1" - tiny-invariant "^1.2.0" - typescript "^4.3.5" - -"@project-serum/anchor@0.16.2": - version "0.16.2" - resolved "https://registry.yarnpkg.com/@project-serum/anchor/-/anchor-0.16.2.tgz#b8b4ec4c749d59a224108f8d82ab68217ef752ae" - integrity sha512-wOJwObd4wOZ5tRRMCKYjeMNsEmf7vuC71KQRnw6wthhErL8c/818n4gYIZCf/1ZPl/8WPruIlmtQHDSEyy2+0Q== - dependencies: - "@project-serum/borsh" "^0.2.2" - "@solana/web3.js" "^1.17.0" - base64-js "^1.5.1" - bn.js "^5.1.2" - bs58 "^4.0.1" - buffer-layout "^1.2.0" - camelcase "^5.3.1" - crypto-hash "^1.3.0" - eventemitter3 "^4.0.7" - find "^0.3.0" - js-sha256 "^0.9.0" - pako "^2.0.3" - snake-case "^3.0.4" - toml "^3.0.0" - "@project-serum/anchor@0.24.2", "@project-serum/anchor@^0.24.0", "@project-serum/anchor@^0.24.2", "@project-serum/anchor@~0.24.2": version "0.24.2" resolved "https://registry.yarnpkg.com/@project-serum/anchor/-/anchor-0.24.2.tgz#a3c52a99605c80735f446ca9b3a4885034731004" @@ -686,33 +567,12 @@ superstruct "^0.15.4" toml "^3.0.0" -"@project-serum/anchor@~0.23.0": - version "0.23.0" - resolved "https://registry.yarnpkg.com/@project-serum/anchor/-/anchor-0.23.0.tgz#2b2eb6b51601b073e8db26663aa2d6c2f2841771" - integrity sha512-LV2/ifZOJVFTZ4GbEloXln3iVfCvO1YM8i7BBCrUm4tehP7irMx4nr4/IabHWOzrQcQElsxSP/lb1tBp+2ff8A== - dependencies: - "@project-serum/borsh" "^0.2.5" - "@solana/web3.js" "^1.36.0" - base64-js "^1.5.1" - bn.js "^5.1.2" - bs58 "^4.0.1" - buffer-layout "^1.2.2" - camelcase "^5.3.1" - cross-fetch "^3.1.5" - crypto-hash "^1.3.0" - eventemitter3 "^4.0.7" - find "^0.3.0" - js-sha256 "^0.9.0" - pako "^2.0.3" - snake-case "^3.0.4" - toml "^3.0.0" - "@project-serum/associated-token@^0.1.1": version "0.1.1" resolved "https://registry.yarnpkg.com/@project-serum/associated-token/-/associated-token-0.1.1.tgz#9acf745e84dad21e2ea26e06694704b9d698e532" integrity sha512-Zc1wdqragbDiyBVagzIbIsMe37P7fgkArWZPIj+jJjDIoznlmYMK6ASU5mtdDZrPJ7sNABF/lzZ3+jvCCcU+oA== -"@project-serum/borsh@^0.2.2", "@project-serum/borsh@^0.2.3", "@project-serum/borsh@^0.2.4", "@project-serum/borsh@^0.2.5": +"@project-serum/borsh@^0.2.2", "@project-serum/borsh@^0.2.4", "@project-serum/borsh@^0.2.5": version "0.2.5" resolved "https://registry.yarnpkg.com/@project-serum/borsh/-/borsh-0.2.5.tgz#6059287aa624ecebbfc0edd35e4c28ff987d8663" integrity sha512-UmeUkUoKdQ7rhx6Leve1SssMR/Ghv8qrEiyywyxSWg7ooV7StdpPBhciiy5eB3T0qU1BXvdRNC8TdrkxK7WC5Q== @@ -720,7 +580,7 @@ bn.js "^5.1.2" buffer-layout "^1.2.0" -"@project-serum/serum@0.13.65", "@project-serum/serum@^0.13.60", "@project-serum/serum@^0.13.61", "@project-serum/serum@^0.13.65": +"@project-serum/serum@0.13.65", "@project-serum/serum@^0.13.61", "@project-serum/serum@^0.13.65": version "0.13.65" resolved "https://registry.yarnpkg.com/@project-serum/serum/-/serum-0.13.65.tgz#6d3cf07912f13985765237f053cca716fe84b0b0" integrity sha512-BHRqsTqPSfFB5p+MgI2pjvMBAQtO8ibTK2fYY96boIFkCI3TTwXDt2gUmspeChKO2pqHr5aKevmexzAcXxrSRA== @@ -799,7 +659,7 @@ dependencies: buffer "^6.0.1" -"@pythnetwork/client@^2.5.1": +"@pythnetwork/client@^2.5.1", "@pythnetwork/client@^2.8.0": version "2.8.0" resolved "https://registry.yarnpkg.com/@pythnetwork/client/-/client-2.8.0.tgz#1b764d710f17c2f3cd3c9ba0c4ae74d26e72b01b" integrity sha512-YqqZSDDsEApC/F4H5ejcl8OCr7gsWv0noTK8YABT8pCtFRTQxXBP0r2S8KQMaIw1x97Mue/jkYybdMeFQzPjCw== @@ -826,14 +686,14 @@ lodash.mapvalues "^4.6.0" tslib "^2.4.0" -"@saberhq/option-utils@^1.14.11": +"@saberhq/option-utils@^1.14.11", "@saberhq/option-utils@^1.14.9": version "1.14.11" resolved "https://registry.yarnpkg.com/@saberhq/option-utils/-/option-utils-1.14.11.tgz#db6c2e79ade3c8b15f90eb376c783c31358bf1ef" integrity sha512-v75bHrUYp791lGN6PnbX7eg8T8WbdGSX1y591IhC3WgZDdXPxC/lY1Puv/g9pXxytyCrftTLFehv8+2odMKsyw== dependencies: tslib "^2.4.0" -"@saberhq/solana-contrib@^1.12.53", "@saberhq/solana-contrib@^1.13.32", "@saberhq/solana-contrib@^1.13.6", "@saberhq/solana-contrib@^1.14.9": +"@saberhq/solana-contrib@^1.13.32", "@saberhq/solana-contrib@^1.13.6", "@saberhq/solana-contrib@^1.14.9": version "1.14.9" resolved "https://registry.yarnpkg.com/@saberhq/solana-contrib/-/solana-contrib-1.14.9.tgz#ec82b69460035df995ab163f643de61c3b7bcc17" integrity sha512-e09v3c62cZ2I7hcS7x4q1am4wd4v0VfiIEBZxWBpvTVCKmdbdpUWUKyecI88VHbyO9exBLGq1yxJZZsz0OPyUA== @@ -896,7 +756,7 @@ tiny-invariant "^1.2.0" tslib "^2.4.0" -"@saberhq/token-utils@^1.12.53", "@saberhq/token-utils@^1.13.6": +"@saberhq/token-utils@^1.13.6": version "1.14.9" resolved "https://registry.yarnpkg.com/@saberhq/token-utils/-/token-utils-1.14.9.tgz#265cb24134c504b04d247b3b8b84b74b6eb8cd52" integrity sha512-iIcWQYFV2UBQtfQJIsnq38eW04hSgQiJDpshyT7Z69k6FZlAaNC5yvQQnCI1k4K/z7IZpu5W8Pq8XD665UG+AA== @@ -1011,7 +871,7 @@ dependencies: eventemitter3 "^4.0.0" -"@solana/web3.js@1.31.0", "@solana/web3.js@^1.17.0", "@solana/web3.js@^1.21.0", "@solana/web3.js@^1.28.0", "@solana/web3.js@^1.29.0", "@solana/web3.js@^1.31.0", "@solana/web3.js@^1.32.0", "@solana/web3.js@^1.36.0", "@solana/web3.js@^1.37.0", "@solana/web3.js@^1.41.1", "@solana/web3.js@^1.42.0", "@solana/web3.js@^1.43.5", "@solana/web3.js@^1.50.1", "@solana/web3.js@^1.59.0", "@solana/web3.js@^1.63.0", "@solana/web3.js@^1.66.2": +"@solana/web3.js@1.31.0", "@solana/web3.js@^1.17.0", "@solana/web3.js@^1.21.0", "@solana/web3.js@^1.31.0", "@solana/web3.js@^1.32.0", "@solana/web3.js@^1.36.0", "@solana/web3.js@^1.37.0", "@solana/web3.js@^1.41.1", "@solana/web3.js@^1.42.0", "@solana/web3.js@^1.43.5", "@solana/web3.js@^1.50.1", "@solana/web3.js@^1.52.0", "@solana/web3.js@^1.63.0", "@solana/web3.js@^1.66.0", "@solana/web3.js@^1.66.2": version "1.70.0" resolved "https://registry.yarnpkg.com/@solana/web3.js/-/web3.js-1.70.0.tgz#14ad207f431861397db85921aad8df4e8374e7c8" integrity sha512-HwdI9LaHaszfpzgxJI44iP68mJWUeqK1TeSheKQsGkH5zlVyGWGmim50MyDWu2vXiuL8Akf2xEMSrDYyLordgg== @@ -1032,24 +892,6 @@ rpc-websockets "^7.5.0" superstruct "^0.14.2" -"@solendprotocol/solend-sdk@^0.5.6": - version "0.5.9" - resolved "https://registry.yarnpkg.com/@solendprotocol/solend-sdk/-/solend-sdk-0.5.9.tgz#94c6bfe75709d4dfed998eadc6a33ba4770cd4bd" - integrity sha512-QB6IJWkwKeiAVBGuXxM0ST1tNaez8IQDsM1icJrA7CdEmXnwgLyX5RuaBo9vGYfgxzUmlaIXpBUpKTPN/BU5lA== - dependencies: - "@mithraic-labs/psy-american" "^0.2.1" - "@project-serum/anchor" "^0.24.2" - "@pythnetwork/client" "^2.5.1" - "@solana/buffer-layout" "^4.0.0" - "@solana/spl-token" "^0.1.8" - "@solana/web3.js" "^1.31.0" - axios "^0.24.0" - bignumber.js "^9.0.2" - bn.js "^5.2.0" - buffer "^6.0.3" - buffer-layout "^1.2.0" - isomorphic-fetch "^3.0.0" - "@switchboard-xyz/sbv2-lite@^0.1.5": version "0.1.6" resolved "https://registry.yarnpkg.com/@switchboard-xyz/sbv2-lite/-/sbv2-lite-0.1.6.tgz#dc3fbb5b3b028dbd3c688b991bcc48a670131ddb" @@ -1058,7 +900,7 @@ "@project-serum/anchor" "^0.24.2" big.js "^6.1.1" -"@switchboard-xyz/switchboard-api@^0.2.152", "@switchboard-xyz/switchboard-api@^0.2.191": +"@switchboard-xyz/switchboard-api@^0.2.191": version "0.2.201" resolved "https://registry.yarnpkg.com/@switchboard-xyz/switchboard-api/-/switchboard-api-0.2.201.tgz#d082206d521d24dbcdeb06a77e6637a56ab883eb" integrity sha512-hlxgeYmO6dbOEcmQzT1SqRxdiCFyVOMpyW4HFPgmPKT0+wSVkjsLc+BKkMGYPDaO0sWMLTJrj0FGhhTsrqd8Mg== @@ -1082,11 +924,6 @@ dependencies: "@types/node" "*" -"@types/coingecko-api@^1.0.10": - version "1.0.10" - resolved "https://registry.yarnpkg.com/@types/coingecko-api/-/coingecko-api-1.0.10.tgz#e841f75c1dc5c6ab8f251011b28a9aec0576ec19" - integrity sha512-ENJO5JzV7qTj8GfrRWAy8lom4RPQv03stvw2z9riz0z7WOXcaorc8OPov8JEekoGQ397O1BbvgPjZj7bWgqdgg== - "@types/connect@^3.4.33": version "3.4.35" resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.35.tgz#5fcf6ae445e4021d1fc2219a4873cc73a3bb2ad1" @@ -1224,20 +1061,6 @@ axios@^0.21.1: dependencies: follow-redirects "^1.14.0" -axios@^0.24.0: - version "0.24.0" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.24.0.tgz#804e6fa1e4b9c5288501dd9dff56a7a0940d20d6" - integrity sha512-Q6cWsys88HoPgAaFAVUb0WpPk0O8iTeisR9IMqy9G8AbO4NlpVknrnQS03zzF9PGAWgO3cgletO3VjV/P7VztA== - dependencies: - follow-redirects "^1.14.4" - -axios@^0.25.0: - version "0.25.0" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.25.0.tgz#349cfbb31331a9b4453190791760a8d35b093e0a" - integrity sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g== - dependencies: - follow-redirects "^1.14.7" - axios@^0.27.2: version "0.27.2" resolved "https://registry.yarnpkg.com/axios/-/axios-0.27.2.tgz#207658cc8621606e586c85db4b41a750e756d972" @@ -1285,7 +1108,7 @@ bignumber.js@9.1.0: resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.1.0.tgz#8d340146107fe3a6cb8d40699643c302e8773b62" integrity sha512-4LwHK4nfDOraBCtst+wOWIHbu1vhvAPJK8g8nROd4iuc3PSEjWif/qwbkh8jwCJz6yDBvtU4KPynETgrfh7y3A== -bignumber.js@^9.0.1, bignumber.js@^9.0.2, bignumber.js@^9.1.0: +bignumber.js@^9.0.1, bignumber.js@^9.1.0: version "9.1.1" resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.1.1.tgz#c4df7dc496bd849d4c9464344c1aa74228b4dac6" integrity sha512-pHm4LsMJ6lzgNGVfZHjMoO8sdoRhOzOH4MLmY65Jg70bpxCKu5iOHNJyfF6OyvYw7t8Fpf35RuzUyqnQsj8Vig== @@ -1314,7 +1137,7 @@ bn-sqrt@^1.0.0: dependencies: bn.js "^5.2.0" -bn.js@5.2.1, bn.js@^5.0.0, bn.js@^5.1.0, bn.js@^5.1.2, bn.js@^5.2.0, bn.js@^5.2.1, bn.js@~5.2.0: +bn.js@5.2.1, bn.js@^5.0.0, bn.js@^5.1.0, bn.js@^5.1.2, bn.js@^5.2.0, bn.js@^5.2.1: version "5.2.1" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== @@ -1451,11 +1274,6 @@ cliui@^8.0.1: strip-ansi "^6.0.1" wrap-ansi "^7.0.0" -coingecko-api@^1.0.10: - version "1.0.10" - resolved "https://registry.yarnpkg.com/coingecko-api/-/coingecko-api-1.0.10.tgz#ac8694d5999f00727fe55f0078ce2917603076b2" - integrity sha512-7YLLC85+daxAw5QlBWoHVBVpJRwoPr4HtwanCr8V/WRjoyHTa1Lb9DQAvv4MDJZHiz4no6HGnDQnddtjV35oRA== - color-convert@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" @@ -1537,21 +1355,21 @@ decimal.js-light@^2.5.1: resolved "https://registry.yarnpkg.com/decimal.js-light/-/decimal.js-light-2.5.1.tgz#134fd32508f19e208f4fb2f8dac0d2626a867934" integrity sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg== -decimal.js@10.3.1, decimal.js@~10.3.1: +decimal.js@10.3.1: version "10.3.1" resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.3.1.tgz#d8c3a444a9c6774ba60ca6ad7261c3a94fd5e783" integrity sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ== -decimal.js@^10.3.1, decimal.js@^10.4.2: - version "10.4.3" - resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23" - integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== - -decimal.js@^10.4.1: +decimal.js@10.4.2, decimal.js@^10.4.1: version "10.4.2" resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.2.tgz#0341651d1d997d86065a2ce3a441fbd0d8e8b98e" integrity sha512-ic1yEvwT6GuvaYwBLLY6/aFFgjZdySKTE8en/fkU3QICTmRtgtSlFn0u0BXN06InZwtfCelR7j8LRiDI/02iGA== +decimal.js@^10.3.1: + version "10.4.3" + resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23" + integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== + delay@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/delay/-/delay-5.0.0.tgz#137045ef1b96e5071060dd5be60bf9334436bd1d" @@ -1714,7 +1532,7 @@ flat@^5.0.2: resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== -follow-redirects@^1.14.0, follow-redirects@^1.14.4, follow-redirects@^1.14.7, follow-redirects@^1.14.9: +follow-redirects@^1.14.0, follow-redirects@^1.14.9: version "1.15.2" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== @@ -1737,22 +1555,6 @@ form-data@^4.0.0: combined-stream "^1.0.8" mime-types "^2.1.12" -francium-sdk@^1.3.34: - version "1.4.3" - resolved "https://registry.yarnpkg.com/francium-sdk/-/francium-sdk-1.4.3.tgz#7ad2ff8cc7d60ed85a709eac4804b4ac3b1e56b3" - integrity sha512-lJACTgKMvPFr2MNhFliZZvUwLvvIasGzetvTYaEQ9jW2dv8hug/qCaNLzLcLlyMFuMXaINt3hg/sZbVYQvcTEw== - dependencies: - "@project-serum/anchor" "0.16.2" - "@project-serum/borsh" "^0.2.2" - "@project-serum/serum" "^0.13.60" - "@solana/spl-token" "^0.1.8" - "@solana/web3.js" "^1.59.0" - axios "^0.24.0" - bigint-buffer "^1.1.5" - bignumber.js "^9.0.1" - bn.js "^5.2.0" - lodash "^4.17.21" - from@~0: version "0.1.7" resolved "https://registry.yarnpkg.com/from/-/from-0.1.7.tgz#83c60afc58b9c56997007ed1a768b3ab303a44fe" @@ -1929,14 +1731,6 @@ isexe@^2.0.0: resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== -isomorphic-fetch@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-3.0.0.tgz#0267b005049046d2421207215d45d6a262b8b8b4" - integrity sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA== - dependencies: - node-fetch "^2.6.1" - whatwg-fetch "^3.4.1" - isomorphic-ws@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz#55fd4cd6c5e6491e76dc125938dd863f5cd4f2dc" @@ -1972,11 +1766,6 @@ joi@^17.4.0: "@sideway/formula" "^3.0.0" "@sideway/pinpoint" "^2.0.0" -js-base64@^3.7.2: - version "3.7.3" - resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-3.7.3.tgz#2e784bb0851636bf1e99ef12e4f3a8a8c9b7639f" - integrity sha512-PAr6Xg2jvd7MCR6Ld9Jg3BmTcjYsHEBx1VlwEwULb/qowPf5VD9kEMagj23Gm7JRnSvE/Da/57nChZjnvL8v6A== - js-sha256@^0.9.0: version "0.9.0" resolved "https://registry.yarnpkg.com/js-sha256/-/js-sha256-0.9.0.tgz#0b89ac166583e91ef9123644bd3c5334ce9d0966" @@ -2075,11 +1864,6 @@ lower-case@^2.0.2: dependencies: tslib "^2.0.3" -lru-cache@^7.9.0: - version "7.14.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.14.1.tgz#8da8d2f5f59827edb388e63e459ac23d6d408fea" - integrity sha512-ysxwsnTKdAx96aTRdhDOCQfDgbHnt8SK0KY8SEjO0wHinhWOFTESbjVCMPbU1uGXg/ch4lifqx0wfjOawU2+WA== - lunr@^2.3.9: version "2.3.9" resolved "https://registry.yarnpkg.com/lunr/-/lunr-2.3.9.tgz#18b123142832337dd6e964df1a5a7707b25d35e1" @@ -2247,7 +2031,7 @@ no-case@^3.0.4: lower-case "^2.0.2" tslib "^2.0.3" -node-fetch@2, node-fetch@2.6.7, node-fetch@^2.6.1: +node-fetch@2, node-fetch@2.6.7: version "2.6.7" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== @@ -2341,11 +2125,6 @@ prettier@2.7.1: resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.7.1.tgz#e235806850d057f97bb08368a4f7d899f7760c64" integrity sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g== -prettier@^2.4.1: - version "2.8.1" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.1.tgz#4e1fd11c34e2421bc1da9aea9bd8127cd0a35efc" - integrity sha512-lqGoSJBQNJidqCHE80vqZJHWHRFoNYsSpP9AjFhlhi9ODCJA541svILes/+/1GM3VaL/abZi7cpFzOpdR9UPKg== - promise-retry@2.0.1, promise-retry@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22" @@ -2404,11 +2183,6 @@ require-directory@^2.1.1: resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== -retry-axios@^2.6.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/retry-axios/-/retry-axios-2.6.0.tgz#d4dc5c8a8e73982e26a705e46a33df99a28723e0" - integrity sha512-pOLi+Gdll3JekwuFjXO3fTq+L9lzMQGcSq7M5gIjExcl3Gu1hd4XXuf5o3+LuSBsaULQH7DiNbsqPd1chVpQGQ== - retry@^0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" @@ -2610,11 +2384,6 @@ tiny-invariant@^1.1.0, tiny-invariant@^1.2.0, tiny-invariant@^1.3.1: resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.3.1.tgz#8560808c916ef02ecfd55e66090df23a4b7aa642" integrity sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw== -tiny-invariant@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.2.0.tgz#a1141f86b672a9148c72e978a19a73b9b94a15a9" - integrity sha512-1Uhn/aqw5C6RI4KejVeTg6mIS7IqxnLJ8Mv2tV5rTc0qWobay7pDUz6Wi392Cnc8ak1H0F2cjoRzb2/AW4+Fvg== - to-regex-range@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" @@ -2749,11 +2518,6 @@ webidl-conversions@^3.0.0: resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== -whatwg-fetch@^3.4.1: - version "3.6.2" - resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz#dced24f37f2624ed0281725d51d0e2e3fe677f8c" - integrity sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA== - whatwg-url@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" From c8472f028fd451bc1b2649ba7b9fc5f505e70ed2 Mon Sep 17 00:00:00 2001 From: emerson Date: Wed, 4 Jan 2023 11:34:25 +0800 Subject: [PATCH 09/21] Update gateway idls --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index dfebf36..0367757 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "dist" ], "dependencies": { - "@dappio-wonderland/gateway-idls": "^0.2.8", + "@dappio-wonderland/gateway-idls": "^0.2.8-test-0d6d0430", "@dappio-wonderland/navigator": "^0.2.26", "@dappio-wonderland/utils": "^0.2.0", "@jup-ag/core": "4.0.0-beta.3", diff --git a/yarn.lock b/yarn.lock index 8104df0..a5f487d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -71,10 +71,10 @@ tiny-invariant "^1.1.0" toformat "^2.0.0" -"@dappio-wonderland/gateway-idls@^0.2.8": - version "0.2.8" - resolved "https://registry.yarnpkg.com/@dappio-wonderland/gateway-idls/-/gateway-idls-0.2.8.tgz#65af88946a483f1fd4b68fd9d7028387c6b2cad6" - integrity sha512-5xUskBwsEq/LhpZ63rQXIY9Xiaii9vicn8quKekJXsvW3L4nQ5qMtvmudE8sdJRmvRUV6uxHdTtMg2OqvhdRxQ== +"@dappio-wonderland/gateway-idls@^0.2.8-test-0d6d0430": + version "0.2.8-test-0d6d0430" + resolved "https://registry.yarnpkg.com/@dappio-wonderland/gateway-idls/-/gateway-idls-0.2.8-test-0d6d0430.tgz#4e32b3c70bbee79b0084efd8066439bb82b214ad" + integrity sha512-WPxbpRZFmI9wa500LUeAGoH6jUiSKqFZVOZ0BWdn3Mp/S9E25jfj3gEjRKEm0xHeAFsUE1ymSC02ttnyFNfSXA== "@dappio-wonderland/navigator@^0.2.26": version "0.2.26" From c9c04a87d6466e7891a4ee38247bf771660d8c9d Mon Sep 17 00:00:00 2001 From: emerson Date: Wed, 4 Jan 2023 14:31:25 +0800 Subject: [PATCH 10/21] Update Jupiter swap --- src/builder.ts | 36 +++++++-------- src/protocols/jupiter.ts | 87 ++++++++++++++++++++----------------- src/types.ts | 8 ++-- tests/testAdapterJupiter.ts | 17 ++++---- 4 files changed, 76 insertions(+), 72 deletions(-) diff --git a/src/builder.ts b/src/builder.ts index 8e68fa2..cfbe559 100644 --- a/src/builder.ts +++ b/src/builder.ts @@ -106,8 +106,8 @@ export class GatewayBuilder { // Extra Metadata poolDirection: PoolDirection.Obverse, swapMinOutAmount: new anchor.BN(0), - swapConfig: [], farmType: [], + swapConfig: [], }; this._metadata = { @@ -130,6 +130,9 @@ export class GatewayBuilder { // IProtocolSwap async swap(swapParams: SwapParams): Promise { // NOTE: No need to push protocol / action to queue since Jupiter apapter is not implemented yet + this.params.actionQueue.push(ActionType.Swap); + this.params.protocolQueue.push(swapParams.protocol); + this.params.versionQueue.push(1); this._metadata.fromTokenMint = swapParams.fromTokenMint; this._metadata.toTokenMint = swapParams.toTokenMint; @@ -158,9 +161,6 @@ export class GatewayBuilder { this._metadata.routes = Boolean(this._metadata.routes) ? [...this._metadata.routes, await protocol.getRoute()] : [await protocol.getRoute()]; - - this._transactions = [...this._transactions, ...(await protocol.swap())]; - break; default: throw new Error("Unsupported Protocol"); @@ -1685,20 +1685,20 @@ export class GatewayBuilder { } // ZapIn only: Update poolTokenAInAmount if swapOutAmount has value - if (this.params?.swapMinOutAmount?.toNumber() > 0) { - const indexAddLiquidity = this.params.actionQueue.indexOf(ActionType.AddLiquidity); - // Note: ZapIn only - if (indexAddLiquidity > 0) { - switch (this.params.poolDirection) { - case PoolDirection.Obverse: - this.params.payloadQueue[indexAddLiquidity] = new anchor.BN(this.params.swapMinOutAmount.toNumber()); - break; - case PoolDirection.Reverse: - this.params.payloadQueue[indexAddLiquidity] = new anchor.BN(this.params.swapMinOutAmount.toNumber()); - break; - } - } - } + // if (this.params?.swapMinOutAmount?.toNumber() > 0) { + // const indexAddLiquidity = this.params.actionQueue.indexOf(ActionType.AddLiquidity); + // // Note: ZapIn only + // if (indexAddLiquidity > 0) { + // switch (this.params.poolDirection) { + // case PoolDirection.Obverse: + // this.params.payloadQueue[indexAddLiquidity] = new anchor.BN(this.params.swapMinOutAmount.toNumber()); + // break; + // case PoolDirection.Reverse: + // this.params.payloadQueue[indexAddLiquidity] = new anchor.BN(this.params.swapMinOutAmount.toNumber()); + // break; + // } + // } + // } } async finalize(): Promise { diff --git a/src/protocols/jupiter.ts b/src/protocols/jupiter.ts index fa67ada..7818e47 100644 --- a/src/protocols/jupiter.ts +++ b/src/protocols/jupiter.ts @@ -1,7 +1,7 @@ import * as anchor from "@project-serum/anchor"; import { Jupiter, RouteInfo } from "@jup-ag/core"; import JSBI from "jsbi"; -import { GatewayParams, IProtocolSwap, PAYLOAD_SIZE } from "../types"; +import { GatewayParams, IProtocolSwap, PAYLOAD_SIZE, SwapParams } from "../types"; import { GATEWAY_PROGRAM_ID, JUPITER_ADAPTER_PROGRAM_ID, JUPITER_PROGRAM_ID, WSOL } from "../ids"; import { getAssociatedTokenAddress } from "@solana/spl-token-v2"; import { Gateway } from "@dappio-wonderland/gateway-idls"; @@ -41,14 +41,19 @@ export class ProtocolJupiter implements IProtocolSwap { const routes = await this._jupiter.computeRoutes({ inputMint: this._params.fromTokenMint, outputMint: this._params.toTokenMint, - amount: JSBI.BigInt(this._params.amount), // 1000000 => 1 USDC if inputToken.address is USDC mint + amount: JSBI.BigInt(Math.floor(this._params.amount)), // 1000000 => 1 USDC if inputToken.address is USDC mint slippageBps: Math.ceil(this._params.slippage * 100), // 100 = 1% // forceFetch (optional) to force fetching routes and not use the cache // intermediateTokens, if provided will only find routes that use the intermediate tokens // feeBps }); - this._bestRoute = routes.routesInfos[0]; + for (let route of routes.routesInfos) { + if (route.marketInfos.length <= 2) { + this._bestRoute = route; + break; + } + } } async swap(): Promise<{ txs: (anchor.web3.Transaction | anchor.web3.VersionedTransaction)[]; input: Buffer }> { @@ -72,19 +77,19 @@ export class ProtocolJupiter implements IProtocolSwap { routeInfo: this._bestRoute, userPublicKey: this._params.userKey, }); - console.log(swapTransaction); - console.log("compiledInstructions"); - (swapTransaction as anchor.web3.VersionedTransaction).message.compiledInstructions.forEach((ix, i) => { - console.log(`#${i}:`, ix); - }); - console.log("addressTableLookups"); - (swapTransaction as anchor.web3.VersionedTransaction).message.addressTableLookups.forEach((table, i) => { - console.log(`#${i}:`, table.accountKey.toBase58()); - }); - console.log("staticAccountKeys"); - (swapTransaction as anchor.web3.VersionedTransaction).message.staticAccountKeys.forEach((key, i) => { - console.log(`#${i}:`, key.toBase58()); - }); + // console.log(swapTransaction); + // console.log("compiledInstructions"); + // (swapTransaction as anchor.web3.VersionedTransaction).message.compiledInstructions.forEach((ix, i) => { + // console.log(`#${i}:`, ix); + // }); + // console.log("addressTableLookups"); + // (swapTransaction as anchor.web3.VersionedTransaction).message.addressTableLookups.forEach((table, i) => { + // console.log(`#${i}:`, table.accountKey.toBase58()); + // }); + // console.log("staticAccountKeys"); + // (swapTransaction as anchor.web3.VersionedTransaction).message.staticAccountKeys.forEach((key, i) => { + // console.log(`#${i}:`, key.toBase58()); + // }); let isTxV2 = true; if ((swapTransaction as anchor.web3.Transaction).instructions) { @@ -150,22 +155,22 @@ export class ProtocolJupiter implements IProtocolSwap { }; payload.set(swapConfig.inputAmount); - console.log("payload:", payload); + // console.log("payload:", payload); payload.set(swapConfig.outputAmount, 8); - console.log("payload:", payload); + // console.log("payload:", payload); payload.set(swapConfig.slippageBps, 16); - console.log("payload:", payload); + // console.log("payload:", payload); // payload.set(swapConfig.platformFeeBps, 18); // console.log("payload:", payload); payload.set(swapConfig.protocolConfig, 18); - console.log("payload:", payload); + // console.log("payload:", payload); // payload.set([255], 18 + swapConfig.protocolConfig.length); // for on-chain identify // console.log("payload:", payload); this._gatewayParams.swapConfig.push(...swapConfig.inputAmount); this._gatewayParams.swapConfig.push(...swapConfig.outputAmount); this._gatewayParams.swapConfig.push(...swapConfig.slippageBps); - this._gatewayParams.swapConfig.push(...swapConfig.platformFeeBps); + // this._gatewayParams.swapConfig.push(...swapConfig.platformFeeBps); this._gatewayParams.swapConfig.push(...swapConfig.protocolConfig); console.log("swapConfig:", this._gatewayParams.swapConfig); swapIx.data = swapDiscriminator; @@ -179,15 +184,15 @@ export class ProtocolJupiter implements IProtocolSwap { ...swapIx.accountKeyIndexes, ]; swapTx.message.compiledInstructions[swapIndex] = swapIx; - console.log("after wrap tx:", swapTx); - console.log("compiledInstructions"); - swapTx.message.compiledInstructions.forEach((ix, i) => { - console.log(`#${i}:`, ix); - }); - console.log("staticAccountKeys"); - swapTx.message.staticAccountKeys.forEach((key, i) => { - console.log(`#${i}:`, key.toBase58()); - }); + // console.log("after wrap tx:", swapTx); + // console.log("compiledInstructions"); + // swapTx.message.compiledInstructions.forEach((ix, i) => { + // console.log(`#${i}:`, ix); + // }); + // console.log("staticAccountKeys"); + // swapTx.message.staticAccountKeys.forEach((key, i) => { + // console.log(`#${i}:`, key.toBase58()); + // }); txs = [swapTx]; } else { let isPreIx = true; @@ -213,8 +218,8 @@ export class ProtocolJupiter implements IProtocolSwap { slippageBps: Buffer.from(rawData.slice(rawData.byteLength - 3, rawData.byteLength - 1)), // u16 platformFeeBps: Buffer.from(rawData.slice(rawData.byteLength - 1, rawData.byteLength)), // u8 }; - console.log("data:", swapIx.data); - console.log("swapConfig:", swapConfig); + // console.log("data:", swapIx.data); + // console.log("swapConfig:", swapConfig); const preTx = new anchor.web3.Transaction(); if (preInstructions.length > 0) preTx.add(...preInstructions); @@ -234,7 +239,7 @@ export class ProtocolJupiter implements IProtocolSwap { .remainingAccounts(remainingAccounts) .transaction(); - console.log("remainingAccounts:"); + // console.log("remainingAccounts:"); remainingAccounts.forEach((acc, i) => { console.log(`#${i}:`, acc.pubkey.toBase58()); }); @@ -242,10 +247,10 @@ export class ProtocolJupiter implements IProtocolSwap { payload.set(swapConfig.inputAmount); payload.set(swapConfig.outputAmount, 8); payload.set(swapConfig.slippageBps, 16); - payload.set(swapConfig.platformFeeBps, 18); - payload.set(swapConfig.protocolConfig, 19); + // payload.set(swapConfig.platformFeeBps, 18); + payload.set(swapConfig.protocolConfig, 18); // payload.set([255], 19 + swapConfig.protocolConfig.length); - console.log("payload:", payload); + // console.log("payload:", payload); // inputLayout.encode( // { // inputAmount: new anchor.BN(5000), @@ -258,15 +263,15 @@ export class ProtocolJupiter implements IProtocolSwap { const slippage = new BN(swapConfig.slippageBps, "le"); const fee = new BN(swapConfig.platformFeeBps, "le"); - console.log("inputAmount:", Number(inputAmount)); - console.log("outputAmount:", Number(outputAmount)); - console.log("slippage:", Number(slippage)); - console.log("fee:", Number(fee)); + // console.log("inputAmount:", Number(inputAmount)); + // console.log("outputAmount:", Number(outputAmount)); + // console.log("slippage:", Number(slippage)); + // console.log("fee:", Number(fee)); this._gatewayParams.swapConfig.push(...swapConfig.inputAmount); this._gatewayParams.swapConfig.push(...swapConfig.outputAmount); this._gatewayParams.swapConfig.push(...swapConfig.slippageBps); - this._gatewayParams.swapConfig.push(...swapConfig.platformFeeBps); + // this._gatewayParams.swapConfig.push(...swapConfig.platformFeeBps); this._gatewayParams.swapConfig.push(...swapConfig.protocolConfig); console.log("swapConfig:", this._gatewayParams.swapConfig); diff --git a/src/types.ts b/src/types.ts index e9e2e63..d39158b 100644 --- a/src/types.ts +++ b/src/types.ts @@ -467,15 +467,15 @@ export type GatewayParams = TypeDef< type: "u8"; }, { - name: "swapConfig"; + name: "farmType"; type: { - array: ["u8", 32]; + array: ["u64", 2]; }; }, { - name: "farmType"; + name: "swapConfig"; type: { - array: ["u64", 2]; + array: ["u8", 32]; }; } ]; diff --git a/tests/testAdapterJupiter.ts b/tests/testAdapterJupiter.ts index ef0b3c9..bf8b224 100644 --- a/tests/testAdapterJupiter.ts +++ b/tests/testAdapterJupiter.ts @@ -53,21 +53,25 @@ describe("Gateway", () => { const swapParams: SwapParams = { protocol: SupportedProtocols.Jupiter, fromTokenMint: new PublicKey( - "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v" // USDC + // "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v" // USDC // "4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R" // RAY + "So11111111111111111111111111111111111111112" // WSOL + // "SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt" // SRM ), toTokenMint: new PublicKey( // "4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R" // RAY // "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB" // USDT // "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v" // USDC - // "SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt" // SRM - "So11111111111111111111111111111111111111112" // WSOL + "SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt" // SRM + // "So11111111111111111111111111111111111111112" // WSOL // "GENEtH5amGSi8kHAtQoezp1XEXwZJ8vcuePYnXdKrMYz" // GENE // "66edZnAPEJSxnAK4SckuupssXpbu5doV57FUcghaqPsY" // PRGC // "7s6NLX42eURZfpyuKkVLrr9ED9hJE8718cyXFsYKqq5g" // GEAR + // "DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263" // Bonk ), amount: zapInAmount, // Swap half of the fromToken to proceed zapIn slippage: 1, + jupiterMarketUrl: "https://rpc-mainnet-fork.epochs.studio/jup/market.json", }; const gateway = new GatewayBuilder(provider); @@ -81,11 +85,6 @@ describe("Gateway", () => { const txs = gateway.transactions(); console.log(txs); - // const connection = new Connection("https://rpc-mainnet-fork.epochs.studio", { - // commitment: "confirmed", - // wsEndpoint: "wss://rpc-mainnet-fork.epochs.studio/ws", - // }); - // provider = new anchor.AnchorProvider(connection, wallet, options); console.log("======"); console.log("Txs are sent..."); @@ -100,9 +99,9 @@ describe("Gateway", () => { } else { const txV2 = tx as anchor.web3.VersionedTransaction; txV2.message.recentBlockhash = recentBlockhash.blockhash; + console.log(txV2.serialize().length); txV2.sign([wallet.payer]); let versionMessage = txV2.serialize(); - console.log(Buffer.from(versionMessage).toString("base64")); //const result = sendAndConfirmTransaction(connection, tx, wallet); const sig = await connection.sendRawTransaction(versionMessage, { skipPreflight: true, From cb4c20186c7bb794415ee4c10a8ec1f1d860f4e9 Mon Sep 17 00:00:00 2001 From: emerson Date: Wed, 4 Jan 2023 21:56:55 +0800 Subject: [PATCH 11/21] Update dependency --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 0367757..166e10c 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "dist" ], "dependencies": { - "@dappio-wonderland/gateway-idls": "^0.2.8-test-0d6d0430", + "@dappio-wonderland/gateway-idls": "^0.2.8-test-57afaf35", "@dappio-wonderland/navigator": "^0.2.26", "@dappio-wonderland/utils": "^0.2.0", "@jup-ag/core": "4.0.0-beta.3", diff --git a/yarn.lock b/yarn.lock index a5f487d..f1c3362 100644 --- a/yarn.lock +++ b/yarn.lock @@ -71,10 +71,10 @@ tiny-invariant "^1.1.0" toformat "^2.0.0" -"@dappio-wonderland/gateway-idls@^0.2.8-test-0d6d0430": - version "0.2.8-test-0d6d0430" - resolved "https://registry.yarnpkg.com/@dappio-wonderland/gateway-idls/-/gateway-idls-0.2.8-test-0d6d0430.tgz#4e32b3c70bbee79b0084efd8066439bb82b214ad" - integrity sha512-WPxbpRZFmI9wa500LUeAGoH6jUiSKqFZVOZ0BWdn3Mp/S9E25jfj3gEjRKEm0xHeAFsUE1ymSC02ttnyFNfSXA== +"@dappio-wonderland/gateway-idls@^0.2.8-test-57afaf35": + version "0.2.8-test-57afaf35" + resolved "https://registry.yarnpkg.com/@dappio-wonderland/gateway-idls/-/gateway-idls-0.2.8-test-57afaf35.tgz#943f62739522f7beaa3caf8392470ef5fc017b66" + integrity sha512-hwigGdQhRdBSY1ejVhjr5aKDGm64OLLR5c0oOzrn7JmXDb+BZchk4Xwgp5njYKg04aaQ5to7mAMPqeBsqAzcTA== "@dappio-wonderland/navigator@^0.2.26": version "0.2.26" From 18674a006632e361b413938fe8075c39cbb5fd7e Mon Sep 17 00:00:00 2001 From: emerson Date: Wed, 4 Jan 2023 22:11:28 +0800 Subject: [PATCH 12/21] Update params --- src/builder.ts | 4 +- src/protocols/jupiter.ts | 137 ++++++++++----------------------------- src/types.ts | 24 ++++++- 3 files changed, 60 insertions(+), 105 deletions(-) diff --git a/src/builder.ts b/src/builder.ts index cfbe559..583c229 100644 --- a/src/builder.ts +++ b/src/builder.ts @@ -107,7 +107,9 @@ export class GatewayBuilder { poolDirection: PoolDirection.Obverse, swapMinOutAmount: new anchor.BN(0), farmType: [], - swapConfig: [], + swapIndex: 0, + swapAmountConfig: [] as Uint8Array[], + swapRouteConfig: [] as Uint8Array[], }; this._metadata = { diff --git a/src/protocols/jupiter.ts b/src/protocols/jupiter.ts index 7818e47..780e15f 100644 --- a/src/protocols/jupiter.ts +++ b/src/protocols/jupiter.ts @@ -9,6 +9,13 @@ import { getActivityIndex, getGatewayAuthority, sigHash } from "../utils"; import { struct, u64 } from "@project-serum/borsh"; import { BN } from "bn.js"; +// Parameter for storing `SwapLeg` from Jupiter +const MAX_SWAP_CONFIG_SIZE = 30; +// Parameter for swap hop allowed in Jupiter route, currently Jupiter set to 3. +// But we target to 2 due to CPI still have ix size restriction now, track progress here: +// https://github.com/solana-labs/solana/issues/26641 +const MAX_ROUTE_HOP = 2; + interface ProtocolJupiterParams extends SwapParams { userKey: anchor.web3.PublicKey; } @@ -25,12 +32,6 @@ export class ProtocolJupiter implements IProtocolSwap { private _gatewayParams: GatewayParams, private _params: ProtocolJupiterParams ) {} - // constructor( - // private _connection: anchor.web3.Connection, - // private _gatewayProgram: anchor.Program, - // private _gatewayStateKey: anchor.web3.PublicKey, - // private _gatewayParams: GatewayParams - // ) {} async build(): Promise { this._jupiter = await Jupiter.load({ @@ -49,7 +50,7 @@ export class ProtocolJupiter implements IProtocolSwap { }); this._bestRoute = routes.routesInfos[0]; for (let route of routes.routesInfos) { - if (route.marketInfos.length <= 2) { + if (route.marketInfos.length <= MAX_ROUTE_HOP) { this._bestRoute = route; break; } @@ -59,37 +60,17 @@ export class ProtocolJupiter implements IProtocolSwap { async swap(): Promise<{ txs: (anchor.web3.Transaction | anchor.web3.VersionedTransaction)[]; input: Buffer }> { // Handle payload input here let payload = Buffer.alloc(PAYLOAD_SIZE); + let swapRouteConfig = Buffer.alloc(MAX_SWAP_CONFIG_SIZE); let txs: (anchor.web3.Transaction | anchor.web3.VersionedTransaction)[] = []; const preInstructions: anchor.web3.TransactionInstruction[] = []; const postInstructions: anchor.web3.TransactionInstruction[] = []; let remainingAccounts: anchor.web3.AccountMeta[]; - // tx v1 - // const { transactions } = await this._jupiter.exchange({ - // routeInfo: this._bestRoute, - // userPublicKey: this._params.userKey, - // }); - // const { setupTransaction, swapTransaction, cleanupTransaction } = transactions; - - // tx v2 let { swapTransaction } = await this._jupiter.exchange({ routeInfo: this._bestRoute, userPublicKey: this._params.userKey, }); - // console.log(swapTransaction); - // console.log("compiledInstructions"); - // (swapTransaction as anchor.web3.VersionedTransaction).message.compiledInstructions.forEach((ix, i) => { - // console.log(`#${i}:`, ix); - // }); - // console.log("addressTableLookups"); - // (swapTransaction as anchor.web3.VersionedTransaction).message.addressTableLookups.forEach((table, i) => { - // console.log(`#${i}:`, table.accountKey.toBase58()); - // }); - // console.log("staticAccountKeys"); - // (swapTransaction as anchor.web3.VersionedTransaction).message.staticAccountKeys.forEach((key, i) => { - // console.log(`#${i}:`, key.toBase58()); - // }); let isTxV2 = true; if ((swapTransaction as anchor.web3.Transaction).instructions) { @@ -147,7 +128,7 @@ export class ProtocolJupiter implements IProtocolSwap { const rawData = Uint8Array.from(swapIx.data); const swapConfig = { - protocolConfig: Buffer.from(rawData.slice(8, rawData.byteLength - 19)), // 7 - 9 bytes + protocolConfig: Buffer.from(rawData.slice(8, rawData.byteLength - 19)), // (regular)7 - 12 bytes, but sometimes(split swap) might be upto 17 bytes inputAmount: Buffer.from(rawData.slice(rawData.byteLength - 19, rawData.byteLength - 11)), // u64 outputAmount: Buffer.from(rawData.slice(rawData.byteLength - 11, rawData.byteLength - 3)), // u64 slippageBps: Buffer.from(rawData.slice(rawData.byteLength - 3, rawData.byteLength - 1)), // u16 @@ -155,24 +136,19 @@ export class ProtocolJupiter implements IProtocolSwap { }; payload.set(swapConfig.inputAmount); - // console.log("payload:", payload); payload.set(swapConfig.outputAmount, 8); - // console.log("payload:", payload); payload.set(swapConfig.slippageBps, 16); - // console.log("payload:", payload); - // payload.set(swapConfig.platformFeeBps, 18); - // console.log("payload:", payload); - payload.set(swapConfig.protocolConfig, 18); - // console.log("payload:", payload); - // payload.set([255], 18 + swapConfig.protocolConfig.length); // for on-chain identify - // console.log("payload:", payload); + if (swapConfig.protocolConfig.length < MAX_SWAP_CONFIG_SIZE) { + swapRouteConfig.set([swapConfig.protocolConfig.length], 0); + swapRouteConfig.set(swapConfig.protocolConfig, 1); + } else if (swapConfig.protocolConfig.length == MAX_SWAP_CONFIG_SIZE) { + payload.set(swapConfig.protocolConfig, 0); + } else { + throw `Error: Currently Gateway only support swap config under ${MAX_SWAP_CONFIG_SIZE} bytes,\nplease change to another route to fix it or wait for the updates.`; + } + (this._gatewayParams.swapAmountConfig as Uint8Array[]).push(payload.subarray(0, 18)); + (this._gatewayParams.swapRouteConfig as Uint8Array[]).push(swapRouteConfig); - this._gatewayParams.swapConfig.push(...swapConfig.inputAmount); - this._gatewayParams.swapConfig.push(...swapConfig.outputAmount); - this._gatewayParams.swapConfig.push(...swapConfig.slippageBps); - // this._gatewayParams.swapConfig.push(...swapConfig.platformFeeBps); - this._gatewayParams.swapConfig.push(...swapConfig.protocolConfig); - console.log("swapConfig:", this._gatewayParams.swapConfig); swapIx.data = swapDiscriminator; swapIx.programIdIndex = gatewayProgramIndex; swapIx.accountKeyIndexes = [ @@ -184,15 +160,6 @@ export class ProtocolJupiter implements IProtocolSwap { ...swapIx.accountKeyIndexes, ]; swapTx.message.compiledInstructions[swapIndex] = swapIx; - // console.log("after wrap tx:", swapTx); - // console.log("compiledInstructions"); - // swapTx.message.compiledInstructions.forEach((ix, i) => { - // console.log(`#${i}:`, ix); - // }); - // console.log("staticAccountKeys"); - // swapTx.message.staticAccountKeys.forEach((key, i) => { - // console.log(`#${i}:`, key.toBase58()); - // }); txs = [swapTx]; } else { let isPreIx = true; @@ -212,14 +179,26 @@ export class ProtocolJupiter implements IProtocolSwap { // Extract config const rawData = Uint8Array.from(swapIx.data); const swapConfig = { - protocolConfig: Buffer.from(rawData.slice(8, rawData.byteLength - 19)), // 7 - 9 bytes + protocolConfig: Buffer.from(rawData.slice(8, rawData.byteLength - 19)), // (regular)7 - 9 bytes, but sometimes(split swap) might be upto 17 bytes inputAmount: Buffer.from(rawData.slice(rawData.byteLength - 19, rawData.byteLength - 11)), // u64 outputAmount: Buffer.from(rawData.slice(rawData.byteLength - 11, rawData.byteLength - 3)), // u64 slippageBps: Buffer.from(rawData.slice(rawData.byteLength - 3, rawData.byteLength - 1)), // u16 platformFeeBps: Buffer.from(rawData.slice(rawData.byteLength - 1, rawData.byteLength)), // u8 }; - // console.log("data:", swapIx.data); - // console.log("swapConfig:", swapConfig); + + payload.set(swapConfig.inputAmount); + payload.set(swapConfig.outputAmount, 8); + payload.set(swapConfig.slippageBps, 16); + if (swapConfig.protocolConfig.length < MAX_SWAP_CONFIG_SIZE) { + swapRouteConfig.set([swapConfig.protocolConfig.length], 0); + swapRouteConfig.set(swapConfig.protocolConfig, 1); + } else if (swapConfig.protocolConfig.length == MAX_SWAP_CONFIG_SIZE) { + payload.set(swapConfig.protocolConfig, 0); + } else { + throw `Error: Currently Gateway only support swap config under ${MAX_SWAP_CONFIG_SIZE} bytes,\nplease change to another route to fix it or wait for the updates.`; + } + (this._gatewayParams.swapAmountConfig as Uint8Array[]).push(payload.subarray(0, 18)); + (this._gatewayParams.swapRouteConfig as Uint8Array[]).push(swapRouteConfig); const preTx = new anchor.web3.Transaction(); if (preInstructions.length > 0) preTx.add(...preInstructions); @@ -234,52 +213,9 @@ export class ProtocolJupiter implements IProtocolSwap { activityIndex: await getActivityIndex(this._params.userKey), gatewayAuthority: getGatewayAuthority(), }) - // .preInstructions(preInstructions) - // .postInstructions(postInstructions) .remainingAccounts(remainingAccounts) .transaction(); - // console.log("remainingAccounts:"); - remainingAccounts.forEach((acc, i) => { - console.log(`#${i}:`, acc.pubkey.toBase58()); - }); - - payload.set(swapConfig.inputAmount); - payload.set(swapConfig.outputAmount, 8); - payload.set(swapConfig.slippageBps, 16); - // payload.set(swapConfig.platformFeeBps, 18); - payload.set(swapConfig.protocolConfig, 18); - // payload.set([255], 19 + swapConfig.protocolConfig.length); - // console.log("payload:", payload); - // inputLayout.encode( - // { - // inputAmount: new anchor.BN(5000), - // }, - // payload - // ); - - const inputAmount = new BN(swapConfig.inputAmount, "le"); - const outputAmount = new BN(swapConfig.outputAmount, "le"); - const slippage = new BN(swapConfig.slippageBps, "le"); - const fee = new BN(swapConfig.platformFeeBps, "le"); - - // console.log("inputAmount:", Number(inputAmount)); - // console.log("outputAmount:", Number(outputAmount)); - // console.log("slippage:", Number(slippage)); - // console.log("fee:", Number(fee)); - - this._gatewayParams.swapConfig.push(...swapConfig.inputAmount); - this._gatewayParams.swapConfig.push(...swapConfig.outputAmount); - this._gatewayParams.swapConfig.push(...swapConfig.slippageBps); - // this._gatewayParams.swapConfig.push(...swapConfig.platformFeeBps); - this._gatewayParams.swapConfig.push(...swapConfig.protocolConfig); - console.log("swapConfig:", this._gatewayParams.swapConfig); - - // for (let transaction of [setupTransaction, txSwap, cleanupTransaction] - // .filter(Boolean) - // .filter((tx) => tx.instructions.length > 0)) { - // this._transactions.push(transaction); - // } txs.push(txSwap); if (preTx.instructions.length > 0) { txs = [preTx, ...txs]; @@ -288,9 +224,6 @@ export class ProtocolJupiter implements IProtocolSwap { txs = [...txs, postTx]; } } - // console.log("setupTransaction:", setupTransaction); - // console.log("txSwap:", txSwap); - // console.log("cleanupTransaction:", cleanupTransaction); return { txs, input: payload }; } diff --git a/src/types.ts b/src/types.ts index d39158b..4568c3f 100644 --- a/src/types.ts +++ b/src/types.ts @@ -473,9 +473,29 @@ export type GatewayParams = TypeDef< }; }, { - name: "swapConfig"; + name: "swapIndex"; + type: "u8"; + }, + { + name: "swapAmountConfig"; type: { - array: ["u8", 32]; + array: [ + { + array: ["u8", 18]; + }, + 4 + ]; + }; + }, + { + name: "swapRouteConfig"; + type: { + array: [ + { + array: ["u8", 30]; + }, + 4 + ]; }; } ]; From 3949f83898a7ed08e398ce76b75109d1a421cb29 Mon Sep 17 00:00:00 2001 From: emerson Date: Wed, 4 Jan 2023 22:11:42 +0800 Subject: [PATCH 13/21] Update --- tests/testAdapterJupiter.ts | 33 ++++- tests/testAdapterRaydium.ts | 236 ++++++++++++------------------------ 2 files changed, 107 insertions(+), 162 deletions(-) diff --git a/tests/testAdapterJupiter.ts b/tests/testAdapterJupiter.ts index bf8b224..c8d9e96 100644 --- a/tests/testAdapterJupiter.ts +++ b/tests/testAdapterJupiter.ts @@ -50,7 +50,7 @@ describe("Gateway", () => { const zapInAmount = 10000; it("Swap in Jupiter", async () => { - const swapParams: SwapParams = { + const swapParams1: SwapParams = { protocol: SupportedProtocols.Jupiter, fromTokenMint: new PublicKey( // "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v" // USDC @@ -60,10 +60,34 @@ describe("Gateway", () => { ), toTokenMint: new PublicKey( // "4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R" // RAY - // "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB" // USDT + "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB" // USDT // "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v" // USDC - "SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt" // SRM + // "SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt" // SRM + // "So11111111111111111111111111111111111111112" // WSOL + // "GENEtH5amGSi8kHAtQoezp1XEXwZJ8vcuePYnXdKrMYz" // GENE + // "66edZnAPEJSxnAK4SckuupssXpbu5doV57FUcghaqPsY" // PRGC + // "7s6NLX42eURZfpyuKkVLrr9ED9hJE8718cyXFsYKqq5g" // GEAR + // "DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263" // Bonk + ), + amount: zapInAmount, // Swap half of the fromToken to proceed zapIn + slippage: 1, + jupiterMarketUrl: "https://rpc-mainnet-fork.epochs.studio/jup/market.json", + }; + + const swapParams2: SwapParams = { + protocol: SupportedProtocols.Jupiter, + fromTokenMint: new PublicKey( + "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v" // USDC + // "4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R" // RAY // "So11111111111111111111111111111111111111112" // WSOL + // "SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt" // SRM + ), + toTokenMint: new PublicKey( + // "4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R" // RAY + // "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB" // USDT + // "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v" // USDC + // "SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt" // SRM + "So11111111111111111111111111111111111111112" // WSOL // "GENEtH5amGSi8kHAtQoezp1XEXwZJ8vcuePYnXdKrMYz" // GENE // "66edZnAPEJSxnAK4SckuupssXpbu5doV57FUcghaqPsY" // PRGC // "7s6NLX42eURZfpyuKkVLrr9ED9hJE8718cyXFsYKqq5g" // GEAR @@ -76,7 +100,8 @@ describe("Gateway", () => { const gateway = new GatewayBuilder(provider); - await gateway.swap(swapParams); + await gateway.swap(swapParams1); + await gateway.swap(swapParams2); await gateway.finalize(); console.log(gateway.params); diff --git a/tests/testAdapterRaydium.ts b/tests/testAdapterRaydium.ts index ae69608..b8c7723 100644 --- a/tests/testAdapterRaydium.ts +++ b/tests/testAdapterRaydium.ts @@ -44,9 +44,9 @@ describe("Gateway", () => { const zapInAmount = 10000; - it("Swap + AddLiquidity + Stake in Raydium", async () => { + it("Swap(Jupiter) + AddLiquidity(Raydium) + Stake(Raydium)", async () => { const poolId = new anchor.web3.PublicKey( - // "GaqgfieVmnmY4ZsZHHA6L5RSVzCGL3sKx4UgHBaYNy8m" // RAY-SRM + "GaqgfieVmnmY4ZsZHHA6L5RSVzCGL3sKx4UgHBaYNy8m" // RAY-SRM // "AVs9TA4nWDzfPJE9gGVNJMVhcQy3V9PGazuz33BfG2RA" // RAY-WSOL // "DVa7Qmb5ct9RCpaU7UTpSaf3GVMYz17vNVU67XpdCRut" // RAY-USDT // "6UmmUiYoBjSrhakAobJw8BvkmJtDVxaeBtbt7rxWo1mg" // RAY-USDC @@ -54,10 +54,10 @@ describe("Gateway", () => { // "8FrCybrh7UFznP1hVHg8kXZ8bhii37c7BGzmjkdcsGJp" // GENE-RAY (Pool V4) // "DPgYdwgz7ZytfrzLeRYJwXq9JGeskaXTRrM8biFEnLs1" // PRGC-USDC // "2N5HpqiZe2b5EKGhW1adx56chbWCAURHVqaH1gL9mppH" // GEAR-USDC - "58oQChx4yWmvKdwLLZzBi4ChoCc2fqCUWBkwMihLYQo2" // SOL-USDC + // "58oQChx4yWmvKdwLLZzBi4ChoCc2fqCUWBkwMihLYQo2" // SOL-USDC ); const farmId = new anchor.web3.PublicKey( - // "5DFbcYNLLy5SJiBpCCDzNSs7cWCsUbYnCkLXzcPQiKnR" // RAY-SRM + "5DFbcYNLLy5SJiBpCCDzNSs7cWCsUbYnCkLXzcPQiKnR" // RAY-SRM // "HUDr9BDaAGqi37xbQHzxCyXvfMCKPTPNF8g9c9bPu1Fu" // RAY-WSOL // "AvbVWpBi2e4C9HPmZgShGdPoNydG4Yw8GJvG9HUcLgce" // RAY-USDT // "CHYrUBX2RKX8iBg7gYTkccoGNBzP44LdaazMHCLcdEgS" // RAY-USDC @@ -65,20 +65,21 @@ describe("Gateway", () => { // "GVfLbXA3dpEHPvc4do9HvMZ8TACxm3x54BVrHPMEixcr" // GENE-RAY (Farm V5) // "GBjTMHf9TsRdMnP6S3ewAgpSoCacpZqQF1tXmnchborv" // PRGC-USDC (Farm V5) // "B7A3hAej7ZbAsVPM3M5ietDigQgxyucYPANJSGDVpQEw" // GEAR-USDC (Farm V5) - "GUzaohfNuFbBqQTnPgPSNciv3aUvriXYjQduRE3ZkqFw" // SOL-USDC + // "GUzaohfNuFbBqQTnPgPSNciv3aUvriXYjQduRE3ZkqFw" // SOL-USDC ); const swapParams: SwapParams = { protocol: SupportedProtocols.Jupiter, fromTokenMint: new PublicKey( - "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v" // USDC - // "4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R" // RAY + // "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v" // USDC + "4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R" // RAY + // "So11111111111111111111111111111111111111112" // WSOL ), toTokenMint: new PublicKey( // "4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R" // RAY // "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB" // USDT // "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v" // USDC - // "SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt" // SRM - "So11111111111111111111111111111111111111112" // WSOL + "SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt" // SRM + // "So11111111111111111111111111111111111111112" // WSOL // "GENEtH5amGSi8kHAtQoezp1XEXwZJ8vcuePYnXdKrMYz" // GENE // "66edZnAPEJSxnAK4SckuupssXpbu5doV57FUcghaqPsY" // PRGC // "7s6NLX42eURZfpyuKkVLrr9ED9hJE8718cyXFsYKqq5g" // GEAR @@ -94,7 +95,7 @@ describe("Gateway", () => { const stakeParams: StakeParams = { protocol: SupportedProtocols.Raydium, farmId, - version: 5, + version: 3, }; const gateway = new GatewayBuilder(provider); @@ -116,18 +117,33 @@ describe("Gateway", () => { console.log("======"); console.log("Txs are sent..."); + const recentBlockhash = await connection.getLatestBlockhash(); for (let tx of txs) { - const sig = await provider.sendAndConfirm(tx as anchor.web3.Transaction, [], { - skipPreflight: true, - commitment: "confirmed", - } as unknown as anchor.web3.ConfirmOptions); - console.log(sig); + if ((tx as anchor.web3.Transaction).instructions) { + const sig = await provider.sendAndConfirm(tx as anchor.web3.Transaction, [], { + skipPreflight: true, + commitment: "confirmed", + } as unknown as anchor.web3.ConfirmOptions); + console.log(sig); + } else { + const txV2 = tx as anchor.web3.VersionedTransaction; + txV2.message.recentBlockhash = recentBlockhash.blockhash; + console.log(txV2.serialize().length); + txV2.sign([wallet.payer]); + let versionMessage = txV2.serialize(); + //const result = sendAndConfirmTransaction(connection, tx, wallet); + const sig = await connection.sendRawTransaction(versionMessage, { + skipPreflight: true, + commitment: "confirmed", + } as unknown as anchor.web3.ConfirmOptions); + console.log(sig); + } } console.log("Txs are executed"); console.log("======"); }); - it("Unstake + Harvest + RemoveLiquidity + Swap in Raydium", async () => { + it("Unstake(Raydium) + Harvest(Raydium) + RemoveLiquidity(Raydium) + Swap(Jupiter)", async () => { const poolId = new anchor.web3.PublicKey( "GaqgfieVmnmY4ZsZHHA6L5RSVzCGL3sKx4UgHBaYNy8m" // RAY-SRM // "AVs9TA4nWDzfPJE9gGVNJMVhcQy3V9PGazuz33BfG2RA" // RAY-WSOL @@ -152,7 +168,7 @@ describe("Gateway", () => { // Get share amount const ledgerKey = await raydium.infos.getFarmerId(farm, provider.wallet.publicKey, farm.version); const ledger = (await raydium.infos.getFarmer(connection, ledgerKey, farm.version)) as raydium.FarmerInfo; - const shareAmount = ledger.amount as number; + const shareAmount = Math.floor((ledger.amount as number) / 10); console.log(shareAmount); const { tokenAAmount, tokenBAmount } = await poolWrapper.getTokenAmounts(shareAmount); @@ -188,8 +204,8 @@ describe("Gateway", () => { // "SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt" // SRM // "So11111111111111111111111111111111111111112" // WSOL ), - amount: tokenAAmount, // swap coin to pc - slippage: 3, + amount: Math.floor(tokenAAmount), // swap coin to pc + slippage: 1, jupiterMarketUrl: "https://rpc-mainnet-fork.epochs.studio/jup/market.json", }; @@ -210,144 +226,33 @@ describe("Gateway", () => { console.log("======"); console.log("Txs are sent..."); - // for (let tx of txs) { - // const sig = await provider.sendAndConfirm(tx, [], { - // skipPreflight: true, - // commitment: "confirmed", - // } as unknown as anchor.web3.ConfirmOptions); - // console.log(sig); - // } - console.log("Txs are executed"); - console.log("======"); - }); - - it("Directly Stake and Unstake in Raydium", async () => { - const gateway1 = new GatewayBuilder(provider); - const poolId = new anchor.web3.PublicKey( - "GaqgfieVmnmY4ZsZHHA6L5RSVzCGL3sKx4UgHBaYNy8m" // RAY-SRM - // "AVs9TA4nWDzfPJE9gGVNJMVhcQy3V9PGazuz33BfG2RA" // RAY-WSOL - // "DVa7Qmb5ct9RCpaU7UTpSaf3GVMYz17vNVU67XpdCRut" // RAY-USDT - // "6UmmUiYoBjSrhakAobJw8BvkmJtDVxaeBtbt7rxWo1mg" // RAY-USDC - ); - const farmId = new anchor.web3.PublicKey( - "5DFbcYNLLy5SJiBpCCDzNSs7cWCsUbYnCkLXzcPQiKnR" // RAY-SRM - // "HUDr9BDaAGqi37xbQHzxCyXvfMCKPTPNF8g9c9bPu1Fu" // RAY-WSOL - // "AvbVWpBi2e4C9HPmZgShGdPoNydG4Yw8GJvG9HUcLgce" // RAY-USDT - // "CHYrUBX2RKX8iBg7gYTkccoGNBzP44LdaazMHCLcdEgS" // RAY-USDC - ); - const swapParams: SwapParams = { - protocol: SupportedProtocols.Jupiter, - fromTokenMint: new PublicKey( - // "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v" // USDC - "4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R" // RAY - ), - toTokenMint: new PublicKey( - // "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB" // USDT - "SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt" // SRM - // "So11111111111111111111111111111111111111112" // WSOL - ), - amount: zapInAmount / 2, // Swap half of the fromToken to proceed zapIn - slippage: 3, - jupiterMarketUrl: "https://rpc-mainnet-fork.epochs.studio/jup/market.json", - }; - const addLiquidityParams: AddLiquidityParams = { - protocol: SupportedProtocols.Raydium, - poolId, - }; - - await gateway1.swap(swapParams); - await gateway1.addLiquidity(addLiquidityParams); - - await gateway1.finalize(); - - console.log(gateway1.params); - // console.log(`swapInAmount: ${gateway1.params.swapInAmount}`); - // console.log(`swapMinOutAmount: ${gateway1.params.swapMinOutAmount}`); - - const txs1 = gateway1.transactions(); - - console.log("======"); - console.log("Txs are sent..."); - // for (let tx of txs1) { - // const sig = await provider.sendAndConfirm(tx, [], { - // skipPreflight: true, - // commitment: "confirmed", - // } as unknown as anchor.web3.ConfirmOptions); - // console.log(sig); - // } - console.log("Txs are executed"); - console.log("======"); - - // Get LP amount - const pool = await raydium.infos.getPool(connection, poolId); - const userLpAta = await getAssociatedTokenAddress(pool.lpMint, provider.wallet.publicKey); - const userLpAtaAccount = await getAccount(connection, userLpAta); - const lpAmount = new anchor.BN(userLpAtaAccount.amount.toString()).toNumber(); - console.log(lpAmount); - - // Stake - const gateway2 = new GatewayBuilder(provider); - const stakeParams: StakeParams = { - protocol: SupportedProtocols.Raydium, - farmId, - lpAmount, - }; - - await gateway2.stake(stakeParams); - await gateway2.finalize(); - - const txs2 = gateway2.transactions(); - - console.log(gateway2.params); - - console.log("======"); - console.log("Txs are sent..."); - // for (let tx of txs2) { - // const sig = await provider.sendAndConfirm(tx, [], { - // skipPreflight: true, - // commitment: "confirmed", - // } as unknown as anchor.web3.ConfirmOptions); - // console.log(sig); - // } - console.log("Txs are executed"); - console.log("======"); - - // Get share amount - - const farm = (await raydium.infos.getFarm(connection, farmId)) as raydium.FarmInfo; - const ledgerKey = await raydium.infos.getFarmerId(farm, provider.wallet.publicKey, farm.version); - const ledger = await raydium.infos.getFarmer(connection, ledgerKey); - const shareAmount = ledger.amount as number; - console.log(shareAmount); - - const gateway3 = new GatewayBuilder(provider); - const unstakeParams: UnstakeParams = { - protocol: SupportedProtocols.Raydium, - farmId, - shareAmount: shareAmount / 2, // Unstake only half - }; - - await gateway3.unstake(unstakeParams); - await gateway3.finalize(); - - const txs3 = gateway3.transactions(); - - console.log(gateway3.params); - - console.log("======"); - console.log("Txs are sent..."); - // for (let tx of txs3) { - // const sig = await provider.sendAndConfirm(tx, [], { - // skipPreflight: true, - // commitment: "confirmed", - // } as unknown as anchor.web3.ConfirmOptions); - // console.log(sig); - // } + const recentBlockhash = await connection.getLatestBlockhash(); + for (let tx of txs) { + if ((tx as anchor.web3.Transaction).instructions) { + const sig = await provider.sendAndConfirm(tx as anchor.web3.Transaction, [], { + skipPreflight: true, + commitment: "confirmed", + } as unknown as anchor.web3.ConfirmOptions); + console.log(sig); + } else { + const txV2 = tx as anchor.web3.VersionedTransaction; + txV2.message.recentBlockhash = recentBlockhash.blockhash; + console.log(txV2.serialize().length); + txV2.sign([wallet.payer]); + let versionMessage = txV2.serialize(); + //const result = sendAndConfirmTransaction(connection, tx, wallet); + const sig = await connection.sendRawTransaction(versionMessage, { + skipPreflight: true, + commitment: "confirmed", + } as unknown as anchor.web3.ConfirmOptions); + console.log(sig); + } + } console.log("Txs are executed"); console.log("======"); }); - it("Swap (USDC => tokenA) + Swap (tokenA => tokenB) + AddLiquidity + Stake in Raydium", async () => { + it("Swap(USDC => tokenA) + Swap(USDC => tokenB) + AddLiquidity(Raydium) + Stake(Raydium)", async () => { const gateway = new GatewayBuilder(provider); const poolId = new anchor.web3.PublicKey( // "GaqgfieVmnmY4ZsZHHA6L5RSVzCGL3sKx4UgHBaYNy8m" // RAY-SRM @@ -427,12 +332,27 @@ describe("Gateway", () => { console.log("======"); console.log("Txs are sent..."); + const recentBlockhash = await connection.getLatestBlockhash(); for (let tx of txs) { - const sig = await provider.sendAndConfirm(tx as anchor.web3.Transaction, [], { - skipPreflight: true, - commitment: "confirmed", - } as unknown as anchor.web3.ConfirmOptions); - console.log(sig); + if ((tx as anchor.web3.Transaction).instructions) { + const sig = await provider.sendAndConfirm(tx as anchor.web3.Transaction, [], { + skipPreflight: true, + commitment: "confirmed", + } as unknown as anchor.web3.ConfirmOptions); + console.log(sig); + } else { + const txV2 = tx as anchor.web3.VersionedTransaction; + txV2.message.recentBlockhash = recentBlockhash.blockhash; + console.log(txV2.serialize().length); + txV2.sign([wallet.payer]); + let versionMessage = txV2.serialize(); + //const result = sendAndConfirmTransaction(connection, tx, wallet); + const sig = await connection.sendRawTransaction(versionMessage, { + skipPreflight: true, + commitment: "confirmed", + } as unknown as anchor.web3.ConfirmOptions); + console.log(sig); + } } console.log("Txs are executed"); console.log("======"); From 00af10d4ff18f5444aaf60a04289fec434990d22 Mon Sep 17 00:00:00 2001 From: emerson Date: Wed, 4 Jan 2023 22:15:05 +0800 Subject: [PATCH 14/21] Clean up --- tests/testAdapterJupiter.ts | 13 +------------ tests/testAdapterRaydium.ts | 1 - 2 files changed, 1 insertion(+), 13 deletions(-) diff --git a/tests/testAdapterJupiter.ts b/tests/testAdapterJupiter.ts index c8d9e96..269c4e3 100644 --- a/tests/testAdapterJupiter.ts +++ b/tests/testAdapterJupiter.ts @@ -1,18 +1,7 @@ import * as anchor from "@project-serum/anchor"; import { PublicKey, Connection } from "@solana/web3.js"; import NodeWallet from "@project-serum/anchor/dist/cjs/nodewallet"; -import { getAccount, getAssociatedTokenAddress } from "@solana/spl-token-v2"; -import { - AddLiquidityParams, - StakeParams, - GatewayBuilder, - SupportedProtocols, - SwapParams, - UnstakeParams, - RemoveLiquidityParams, - HarvestParams, -} from "../src"; -import { raydium } from "@dappio-wonderland/navigator"; +import { GatewayBuilder, SupportedProtocols, SwapParams } from "../src"; describe("Gateway", () => { const connection = new Connection("https://rpc-mainnet-fork.epochs.studio", { diff --git a/tests/testAdapterRaydium.ts b/tests/testAdapterRaydium.ts index b8c7723..d235d88 100644 --- a/tests/testAdapterRaydium.ts +++ b/tests/testAdapterRaydium.ts @@ -1,7 +1,6 @@ import * as anchor from "@project-serum/anchor"; import { PublicKey, Connection } from "@solana/web3.js"; import NodeWallet from "@project-serum/anchor/dist/cjs/nodewallet"; -import { getAccount, getAssociatedTokenAddress } from "@solana/spl-token-v2"; import { AddLiquidityParams, StakeParams, From a5cfe1e3d35cde869d75edf81fcbb7f687a5fdc5 Mon Sep 17 00:00:00 2001 From: emerson Date: Wed, 4 Jan 2023 23:54:08 +0800 Subject: [PATCH 15/21] Update jupiter core --- package.json | 2 +- yarn.lock | 50 +++++++++++++++++++++----------------------------- 2 files changed, 22 insertions(+), 30 deletions(-) diff --git a/package.json b/package.json index 166e10c..3d3c457 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,7 @@ "@dappio-wonderland/gateway-idls": "^0.2.8-test-57afaf35", "@dappio-wonderland/navigator": "^0.2.26", "@dappio-wonderland/utils": "^0.2.0", - "@jup-ag/core": "4.0.0-beta.3", + "@jup-ag/core": "4.0.0-beta.4", "@project-serum/anchor": "^0.24.2", "@project-serum/borsh": "^0.2.5", "@project-serum/serum": "^0.13.61", diff --git a/yarn.lock b/yarn.lock index f1c3362..afbf4d4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -129,10 +129,10 @@ dependencies: "@hapi/hoek" "^9.0.0" -"@jup-ag/core@4.0.0-beta.3": - version "4.0.0-beta.3" - resolved "https://registry.yarnpkg.com/@jup-ag/core/-/core-4.0.0-beta.3.tgz#3b39a57e5a3a5d39419a244c5336cd486e5f924b" - integrity sha512-PynU/337qxrUY+i0GE59Y/D+sWWNlqxFSTEKPA6Uu5H6Urf9+wqZ+LxkZd6iiivALRpCtfO+iQXMU5AIWJYFpw== +"@jup-ag/core@4.0.0-beta.4": + version "4.0.0-beta.4" + resolved "https://registry.yarnpkg.com/@jup-ag/core/-/core-4.0.0-beta.4.tgz#d1b7be4e553537efa39b26c0d420bd44b42a3b15" + integrity sha512-6R5DdoOC1OTaAQND4Rnq1TjYBCrqjv/x/bZJDOJYdgj8rdvxtUEQkCco7E1j3eLspagV+1p/MolXdPLw21ZwNA== dependencies: "@jup-ag/crema-sdk-v2" "2.1.6" "@jup-ag/cykura-sdk" "0.1.25" @@ -144,12 +144,12 @@ "@jup-ag/invariant" "0.9.35" "@jup-ag/lifinity-sdk" "0.1.72" "@jup-ag/lifinity-sdk-v2" "1.0.8" - "@jup-ag/math" "4.0.0-beta.3" + "@jup-ag/math" "4.0.0-beta.4" "@jup-ag/raydium-clmm-sdk" "1.0.2" "@jup-ag/whirlpools-sdk" "0.7.2" - "@mercurial-finance/dynamic-amm-sdk" "0.1.9" + "@mercurial-finance/dynamic-amm-sdk" "0.1.12" "@mercurial-finance/optimist" "0.2.0" - "@mercurial-finance/vault-sdk" "0.3.2" + "@mercurial-finance/vault-sdk" "0.3.3" "@noble/hashes" "1.1.2" "@project-serum/anchor" "0.24.2" "@project-serum/serum" "0.13.65" @@ -255,10 +255,10 @@ "@solana/web3.js" "1.31.0" decimal.js "^10.3.1" -"@jup-ag/math@4.0.0-beta.3": - version "4.0.0-beta.3" - resolved "https://registry.yarnpkg.com/@jup-ag/math/-/math-4.0.0-beta.3.tgz#e813c50c28e5d8989fbfed826cbec5c30cf968c1" - integrity sha512-HchwfQGgh+FKpxRx1oIsXbXdvs06XepPwZS9XkzWiGgZRPHDOzRebwwi1dhKCHkDCvKZp3NfY/DWuCAo9QnaPg== +"@jup-ag/math@4.0.0-beta.4": + version "4.0.0-beta.4" + resolved "https://registry.yarnpkg.com/@jup-ag/math/-/math-4.0.0-beta.4.tgz#f4265cbfc3a27c34ceb35f2491e57525a045fe10" + integrity sha512-k9RKAb4DAPjjD7rvWfXNErIuyW8JutCyaLQchv3IRdBoyOMduxyJCslmTU/gur/RmMOHYLXoYjFYRUFVHMptGQ== dependencies: decimal.js "10.4.2" jsbi "4.3.0" @@ -296,12 +296,12 @@ decimal.js "^10.3.1" tiny-invariant "^1.1.0" -"@mercurial-finance/dynamic-amm-sdk@0.1.9": - version "0.1.9" - resolved "https://registry.yarnpkg.com/@mercurial-finance/dynamic-amm-sdk/-/dynamic-amm-sdk-0.1.9.tgz#79986840a04fe2d7e63bc30fb4e4e33f0b3308da" - integrity sha512-yT0kPdA2plA/PFTphPJ++Sz802yYJMBSUhVfn8giP1hpn0tDG+E+c8VimOR3a7xj5iAlXf+eIeirxFmrdrbxiQ== +"@mercurial-finance/dynamic-amm-sdk@0.1.12": + version "0.1.12" + resolved "https://registry.yarnpkg.com/@mercurial-finance/dynamic-amm-sdk/-/dynamic-amm-sdk-0.1.12.tgz#24e63c8c6b8f876fb8f643c4f20e34ffc2a9da8a" + integrity sha512-MscZP0Mpzs0oo7KsOZlQWvpwKSKAE+baf0E5usseuVnMvarYDDw/7gnZFt2Ot/lFRxv79McqwcV/mLJWW25OnQ== dependencies: - "@mercurial-finance/vault-sdk" "0.3.2" + "@mercurial-finance/vault-sdk" "0.3.3" "@project-serum/anchor" "0.24.2" "@saberhq/anchor-contrib" "^1.13.32" "@saberhq/stableswap-sdk" "^1.13.32" @@ -369,10 +369,10 @@ "@solana/web3.js" "^1.66.2" lodash "^4.17.21" -"@mercurial-finance/vault-sdk@0.3.2": - version "0.3.2" - resolved "https://registry.yarnpkg.com/@mercurial-finance/vault-sdk/-/vault-sdk-0.3.2.tgz#6ed4643f8b254274bc0e122085611cd11e181d96" - integrity sha512-q5mulo3KQKzfC0eqKB83+5oRW0iwR7mje6PDN2Y85cMS4OWpQc7y2uYWN8toVgwQKFfnkomp/mDnuRsgqZHTnw== +"@mercurial-finance/vault-sdk@0.3.3": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@mercurial-finance/vault-sdk/-/vault-sdk-0.3.3.tgz#57aed78db652718190b6ee7d954644f88a189062" + integrity sha512-6zSLrvQp03x5101DV5+mZaQ3VZ+f78KQgGQEarMPrjm80F/Eb5ElNh7Od9S0BsEfL7nocM8yIi424wgH17/gLQ== dependencies: "@blockworks-foundation/mango-client" "^3.4.7" "@mercurial-finance/apricot-sdk" "0.17.6" @@ -387,7 +387,6 @@ "@solana/buffer-layout" "^4.0.0" "@solana/spl-token" "0.1.8" "@solana/spl-token-registry" "0.2.1105" - "@solana/wallet-adapter-base" "^0.9.5" "@solana/web3.js" "^1.42.0" bn.js "5.2.1" cross-fetch "^3.1.5" @@ -864,13 +863,6 @@ buffer-layout "^1.2.0" dotenv "10.0.0" -"@solana/wallet-adapter-base@^0.9.5": - version "0.9.20" - resolved "https://registry.yarnpkg.com/@solana/wallet-adapter-base/-/wallet-adapter-base-0.9.20.tgz#42a3a2f42db9f6a41e36a132ee5a06a0bd3784f0" - integrity sha512-ZvnhJ4EJk61oyuBH/a9tMpUfeWQ3g3Cc0Nzl1NzE4SdqEhiNoEW8HXDig9HMemZ9bIEUxIpPWxp+SwjVl0u+rg== - dependencies: - eventemitter3 "^4.0.0" - "@solana/web3.js@1.31.0", "@solana/web3.js@^1.17.0", "@solana/web3.js@^1.21.0", "@solana/web3.js@^1.31.0", "@solana/web3.js@^1.32.0", "@solana/web3.js@^1.36.0", "@solana/web3.js@^1.37.0", "@solana/web3.js@^1.41.1", "@solana/web3.js@^1.42.0", "@solana/web3.js@^1.43.5", "@solana/web3.js@^1.50.1", "@solana/web3.js@^1.52.0", "@solana/web3.js@^1.63.0", "@solana/web3.js@^1.66.0", "@solana/web3.js@^1.66.2": version "1.70.0" resolved "https://registry.yarnpkg.com/@solana/web3.js/-/web3.js-1.70.0.tgz#14ad207f431861397db85921aad8df4e8374e7c8" @@ -1465,7 +1457,7 @@ event-stream@=3.3.4: stream-combiner "~0.0.4" through "~2.3.1" -eventemitter3@^4.0.0, eventemitter3@^4.0.7: +eventemitter3@^4.0.7: version "4.0.7" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== From acef9999053cd6e412da6d4444776220049c04a4 Mon Sep 17 00:00:00 2001 From: emerson Date: Thu, 5 Jan 2023 14:52:07 +0800 Subject: [PATCH 16/21] v0.2.25-test-753809ab --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 3d3c457..128cedd 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@dappio-wonderland/gateway", - "version": "0.2.25", + "version": "0.2.25-test-753809ab", "description": "Dappio Gateway: The Framework that Empowers the Composability of Solana Programs", "main": "dist/index.js", "types": "dist/index.d.ts", From 85d818cd60703a7a8b10effa19cbd979ccf5d998 Mon Sep 17 00:00:00 2001 From: emerson Date: Fri, 13 Jan 2023 10:18:52 +0800 Subject: [PATCH 17/21] Fix route exceed tx size limit issue --- src/protocols/jupiter.ts | 65 +++++++++++++++++++++++++++++++++++----- 1 file changed, 58 insertions(+), 7 deletions(-) diff --git a/src/protocols/jupiter.ts b/src/protocols/jupiter.ts index 780e15f..6003304 100644 --- a/src/protocols/jupiter.ts +++ b/src/protocols/jupiter.ts @@ -15,6 +15,9 @@ const MAX_SWAP_CONFIG_SIZE = 30; // But we target to 2 due to CPI still have ix size restriction now, track progress here: // https://github.com/solana-labs/solana/issues/26641 const MAX_ROUTE_HOP = 2; +// Constraint to avoid exceed tx size limit after adding gateway keys in swap tx Jupiter generated +const MAX_STATIC_KEYS = 27; +const MAX_RAW_SWAP_TX_SIZE = 1072; interface ProtocolJupiterParams extends SwapParams { userKey: anchor.web3.PublicKey; @@ -23,7 +26,8 @@ interface ProtocolJupiterParams extends SwapParams { export class ProtocolJupiter implements IProtocolSwap { private _jupiter: Jupiter; private _bestRoute: RouteInfo; - private _transactions: anchor.web3.Transaction[] = []; + private _transaction: anchor.web3.Transaction | anchor.web3.VersionedTransaction; + private _addressLookupTableAccounts: anchor.web3.AddressLookupTableAccount[] = []; constructor( private _connection: anchor.web3.Connection, @@ -48,12 +52,19 @@ export class ProtocolJupiter implements IProtocolSwap { // intermediateTokens, if provided will only find routes that use the intermediate tokens // feeBps }); + this._bestRoute = routes.routesInfos[0]; - for (let route of routes.routesInfos) { - if (route.marketInfos.length <= MAX_ROUTE_HOP) { + for (let [i, route] of routes.routesInfos.entries()) { + const { isLegible, swapTransaction, addressLookupTableAccounts } = await this._legibleRoute(route); + if (isLegible) { this._bestRoute = route; + this._transaction = swapTransaction; + this._addressLookupTableAccounts = addressLookupTableAccounts; break; } + if (i == routes.routesInfos.length - 1) { + throw "Error: Failed to find a route that can pass through gateway."; + } } } @@ -67,10 +78,19 @@ export class ProtocolJupiter implements IProtocolSwap { const postInstructions: anchor.web3.TransactionInstruction[] = []; let remainingAccounts: anchor.web3.AccountMeta[]; - let { swapTransaction } = await this._jupiter.exchange({ - routeInfo: this._bestRoute, - userPublicKey: this._params.userKey, - }); + let swapTransaction: anchor.web3.Transaction | anchor.web3.VersionedTransaction; + let addressLookupTableAccounts: anchor.web3.AddressLookupTableAccount[]; + if (this._transaction) { + swapTransaction = this._transaction; + addressLookupTableAccounts = this._addressLookupTableAccounts; + } else { + let exchangeInfo = await this._jupiter.exchange({ + routeInfo: this._bestRoute, + userPublicKey: this._params.userKey, + }); + swapTransaction = exchangeInfo.swapTransaction; + addressLookupTableAccounts = exchangeInfo.addressLookupTableAccounts; + } let isTxV2 = true; if ((swapTransaction as anchor.web3.Transaction).instructions) { @@ -241,4 +261,35 @@ export class ProtocolJupiter implements IProtocolSwap { }), }; } + + private async _legibleRoute(routeInfo: RouteInfo): Promise<{ + isLegible: boolean; + swapTransaction: anchor.web3.Transaction | anchor.web3.VersionedTransaction; + addressLookupTableAccounts: anchor.web3.AddressLookupTableAccount[]; + }> { + let { swapTransaction, addressLookupTableAccounts } = await this._jupiter.exchange({ + routeInfo, + userPublicKey: this._params.userKey, + }); + + let isTxV2 = true; + if ((swapTransaction as anchor.web3.Transaction).instructions) { + isTxV2 = false; + } + + if (isTxV2) { + const versionedTx = swapTransaction as anchor.web3.VersionedTransaction; + const isLegible = + versionedTx.message.staticAccountKeys.length <= MAX_STATIC_KEYS + ? versionedTx.serialize().length < MAX_RAW_SWAP_TX_SIZE + ? true + : false + : false; + return { isLegible, swapTransaction, addressLookupTableAccounts }; + } else { + const legacyTx = swapTransaction as anchor.web3.Transaction; + const isLegible = legacyTx.serialize().length <= MAX_RAW_SWAP_TX_SIZE; + return { isLegible, swapTransaction, addressLookupTableAccounts }; + } + } } From b9dac5779ccc69c1e350bc048f469d6ec3d98107 Mon Sep 17 00:00:00 2001 From: emerson Date: Fri, 13 Jan 2023 10:21:11 +0800 Subject: [PATCH 18/21] v0.2.25-test-7c3e268b --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 128cedd..30f07d4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@dappio-wonderland/gateway", - "version": "0.2.25-test-753809ab", + "version": "0.2.25-test-7c3e268b", "description": "Dappio Gateway: The Framework that Empowers the Composability of Solana Programs", "main": "dist/index.js", "types": "dist/index.d.ts", From 56da7a934706111c1474dcba41d7c3a1c3efed0b Mon Sep 17 00:00:00 2001 From: emerson Date: Fri, 13 Jan 2023 17:08:14 +0800 Subject: [PATCH 19/21] Update gateway-idls to v0.2.9 --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 30f07d4..65779e2 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "dist" ], "dependencies": { - "@dappio-wonderland/gateway-idls": "^0.2.8-test-57afaf35", + "@dappio-wonderland/gateway-idls": "^0.2.9", "@dappio-wonderland/navigator": "^0.2.26", "@dappio-wonderland/utils": "^0.2.0", "@jup-ag/core": "4.0.0-beta.4", diff --git a/yarn.lock b/yarn.lock index afbf4d4..9fde0d2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -71,10 +71,10 @@ tiny-invariant "^1.1.0" toformat "^2.0.0" -"@dappio-wonderland/gateway-idls@^0.2.8-test-57afaf35": - version "0.2.8-test-57afaf35" - resolved "https://registry.yarnpkg.com/@dappio-wonderland/gateway-idls/-/gateway-idls-0.2.8-test-57afaf35.tgz#943f62739522f7beaa3caf8392470ef5fc017b66" - integrity sha512-hwigGdQhRdBSY1ejVhjr5aKDGm64OLLR5c0oOzrn7JmXDb+BZchk4Xwgp5njYKg04aaQ5to7mAMPqeBsqAzcTA== +"@dappio-wonderland/gateway-idls@^0.2.9": + version "0.2.9" + resolved "https://registry.yarnpkg.com/@dappio-wonderland/gateway-idls/-/gateway-idls-0.2.9.tgz#7d8720b7ffbd9dd4591655cad8ab4eb38cf8a5a3" + integrity sha512-hB36rmIvwnRNi0mJLActxVWSzorZgTcewEUVRAF2f0lmXAdFZTaVAaprYg5dhFt7XdHr60wQpCcyPDor4kBYcQ== "@dappio-wonderland/navigator@^0.2.26": version "0.2.26" From cd1bb480a67aa31e3c4a91dbc692ffee8992c608 Mon Sep 17 00:00:00 2001 From: emerson Date: Wed, 1 Feb 2023 23:56:46 +0800 Subject: [PATCH 20/21] Update lock file --- yarn.lock | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/yarn.lock b/yarn.lock index 9fde0d2..a5de30c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -94,14 +94,6 @@ graphql-request "^5.0.0" mocha "^10.0.0" -"@dradex/idl@npm:@jup-ag/dradex-idl@0.2.1", "@jup-ag/dradex-idl@0.2.1": - version "0.2.1" - resolved "https://registry.yarnpkg.com/@jup-ag/dradex-idl/-/dradex-idl-0.2.1.tgz#36cf9a75ca9712c0a588b6c0050744eab3a46c49" - integrity sha512-CZ5GZTLExy1+fw/tFOo6C4AbU0o/PcqJxxQpDp5UkSJ0SXbz7ZGMz9DfKu+htJuAwxwGgS/rbQfeBoU9fhDXuQ== - dependencies: - "@solana/buffer-layout" "4.0.0" - bn.js "5.2.1" - "@dappio-wonderland/utils@^0.2.0": version "0.2.0" resolved "https://registry.yarnpkg.com/@dappio-wonderland/utils/-/utils-0.2.0.tgz#becec69b1d90efd35565d20dd5bd275fafe29ec9" @@ -112,6 +104,14 @@ "@solana/web3.js" "^1.66.2" "@types/lodash" "^4.14.191" +"@dradex/idl@npm:@jup-ag/dradex-idl@0.2.1", "@jup-ag/dradex-idl@0.2.1": + version "0.2.1" + resolved "https://registry.yarnpkg.com/@jup-ag/dradex-idl/-/dradex-idl-0.2.1.tgz#36cf9a75ca9712c0a588b6c0050744eab3a46c49" + integrity sha512-CZ5GZTLExy1+fw/tFOo6C4AbU0o/PcqJxxQpDp5UkSJ0SXbz7ZGMz9DfKu+htJuAwxwGgS/rbQfeBoU9fhDXuQ== + dependencies: + "@solana/buffer-layout" "4.0.0" + bn.js "5.2.1" + "@graphql-typed-document-node/core@^3.1.1": version "3.1.1" resolved "https://registry.yarnpkg.com/@graphql-typed-document-node/core/-/core-3.1.1.tgz#076d78ce99822258cf813ecc1e7fa460fa74d052" @@ -806,7 +806,7 @@ bigint-buffer "^1.1.5" bignumber.js "^9.0.1" -"@solana/buffer-layout@4.0.0", "@solana/buffer-layout@^4.0.0": +"@solana/buffer-layout@4.0.0": version "4.0.0" resolved "https://registry.yarnpkg.com/@solana/buffer-layout/-/buffer-layout-4.0.0.tgz#75b1b11adc487234821c81dfae3119b73a5fd734" integrity sha512-lR0EMP2HC3+Mxwd4YcnZb0smnaDw7Bl2IQWZiTevRH5ZZBZn6VRWn3/92E3qdU4SSImJkA6IDHawOHAnx/qUvQ== @@ -851,7 +851,7 @@ "@solana/web3.js" "^1.32.0" start-server-and-test "^1.14.0" -"@solana/spl-token@0.1.8", "@solana/spl-token@^0.1.6", "@solana/spl-token@^0.1.8", "@solana/spl-token@^0.3.6", "@solana/spl-token@~0.1.8": +"@solana/spl-token@0.1.8", "@solana/spl-token@^0.1.6", "@solana/spl-token@^0.1.8", "@solana/spl-token@^0.2.0", "@solana/spl-token@^0.3.4", "@solana/spl-token@^0.3.6": version "0.1.8" resolved "https://registry.yarnpkg.com/@solana/spl-token/-/spl-token-0.1.8.tgz#f06e746341ef8d04165e21fc7f555492a2a0faa6" integrity sha512-LZmYCKcPQDtJgecvWOgT/cnoIQPWjdH+QVyzPcFvyDUiT0DiRjZaam4aqNUyvchLFhzgunv3d9xOoyE34ofdoQ== From 7f92b3c376478052e72763cfb6503e5327f74ba8 Mon Sep 17 00:00:00 2001 From: emerson Date: Wed, 1 Feb 2023 23:57:43 +0800 Subject: [PATCH 21/21] Update Jupiter adapter --- src/builder.ts | 2 + src/protocols/jupiter.ts | 196 ++++++++++++++---------------------- src/types.ts | 4 +- tests/testAdapterJupiter.ts | 43 ++++---- 4 files changed, 99 insertions(+), 146 deletions(-) diff --git a/src/builder.ts b/src/builder.ts index 583c229..2a1c589 100644 --- a/src/builder.ts +++ b/src/builder.ts @@ -163,6 +163,7 @@ export class GatewayBuilder { this._metadata.routes = Boolean(this._metadata.routes) ? [...this._metadata.routes, await protocol.getRoute()] : [await protocol.getRoute()]; + this._metadata.addressLookupTables = protocol.getAddressLookupTables().map((a) => a.key); break; default: throw new Error("Unsupported Protocol"); @@ -1739,6 +1740,7 @@ export class GatewayBuilder { async v0Transactions(addressLookupTable: anchor.web3.PublicKey[] = []): Promise { return compressV0(this._transactions, this._provider.wallet.publicKey, this._provider.connection, [ ...ADDRESS_LOOKUP_TABLES, + ...this._metadata.addressLookupTables, ...addressLookupTable, ]); } diff --git a/src/protocols/jupiter.ts b/src/protocols/jupiter.ts index 6003304..7880568 100644 --- a/src/protocols/jupiter.ts +++ b/src/protocols/jupiter.ts @@ -2,12 +2,9 @@ import * as anchor from "@project-serum/anchor"; import { Jupiter, RouteInfo } from "@jup-ag/core"; import JSBI from "jsbi"; import { GatewayParams, IProtocolSwap, PAYLOAD_SIZE, SwapParams } from "../types"; -import { GATEWAY_PROGRAM_ID, JUPITER_ADAPTER_PROGRAM_ID, JUPITER_PROGRAM_ID, WSOL } from "../ids"; -import { getAssociatedTokenAddress } from "@solana/spl-token-v2"; +import { GATEWAY_PROGRAM_ID, JUPITER_ADAPTER_PROGRAM_ID, JUPITER_PROGRAM_ID } from "../ids"; import { Gateway } from "@dappio-wonderland/gateway-idls"; import { getActivityIndex, getGatewayAuthority, sigHash } from "../utils"; -import { struct, u64 } from "@project-serum/borsh"; -import { BN } from "bn.js"; // Parameter for storing `SwapLeg` from Jupiter const MAX_SWAP_CONFIG_SIZE = 30; @@ -16,8 +13,7 @@ const MAX_SWAP_CONFIG_SIZE = 30; // https://github.com/solana-labs/solana/issues/26641 const MAX_ROUTE_HOP = 2; // Constraint to avoid exceed tx size limit after adding gateway keys in swap tx Jupiter generated -const MAX_STATIC_KEYS = 27; -const MAX_RAW_SWAP_TX_SIZE = 1072; +const MAX_RAW_SWAP_TX_SIZE = anchor.web3.PACKET_DATA_SIZE - anchor.web3.PUBLIC_KEY_LENGTH * 5 - 8; //1072; interface ProtocolJupiterParams extends SwapParams { userKey: anchor.web3.PublicKey; @@ -55,6 +51,7 @@ export class ProtocolJupiter implements IProtocolSwap { this._bestRoute = routes.routesInfos[0]; for (let [i, route] of routes.routesInfos.entries()) { + console.log(i, ":"); const { isLegible, swapTransaction, addressLookupTableAccounts } = await this._legibleRoute(route); if (isLegible) { this._bestRoute = route; @@ -66,14 +63,15 @@ export class ProtocolJupiter implements IProtocolSwap { throw "Error: Failed to find a route that can pass through gateway."; } } + console.log("========"); } - async swap(): Promise<{ txs: (anchor.web3.Transaction | anchor.web3.VersionedTransaction)[]; input: Buffer }> { + async swap(): Promise<{ txs: anchor.web3.Transaction[]; input: Buffer }> { // Handle payload input here let payload = Buffer.alloc(PAYLOAD_SIZE); let swapRouteConfig = Buffer.alloc(MAX_SWAP_CONFIG_SIZE); - let txs: (anchor.web3.Transaction | anchor.web3.VersionedTransaction)[] = []; + let txs: anchor.web3.Transaction[] = []; const preInstructions: anchor.web3.TransactionInstruction[] = []; const postInstructions: anchor.web3.TransactionInstruction[] = []; let remainingAccounts: anchor.web3.AccountMeta[]; @@ -99,88 +97,26 @@ export class ProtocolJupiter implements IProtocolSwap { if (isTxV2) { const swapTx = swapTransaction as anchor.web3.VersionedTransaction; - - const originKeysLen = swapTx.message.staticAccountKeys.length; - const writeIndexStart = - swapTx.message.staticAccountKeys.length - swapTx.message.header.numReadonlyUnsignedAccounts; - const keysToAppend = 5; - const gatewayProgramIndex = originKeysLen + 1; - const gatewayStateIndex = writeIndexStart; - const jupiterAdapterProgramIndex = originKeysLen + 2; - const activityIndex = originKeysLen + 3; - const authorityIndex = originKeysLen + 4; - - let readOnlyKeys: anchor.web3.PublicKey[] = []; - for (let i = 0; i < swapTx.message.header.numReadonlyUnsignedAccounts; i++) { - readOnlyKeys = [swapTx.message.staticAccountKeys.pop(), ...readOnlyKeys]; - } - swapTx.message.staticAccountKeys.push(this._gatewayStateKey); - - swapTx.message.staticAccountKeys.push( - ...readOnlyKeys, - GATEWAY_PROGRAM_ID, - JUPITER_ADAPTER_PROGRAM_ID, - await getActivityIndex(this._params.userKey), - getGatewayAuthority() - ); - let jupiterProgramIndex = swapTx.message.staticAccountKeys.length - 1; - for (let [index, pubkey] of swapTx.message.staticAccountKeys.entries()) { - if (pubkey.equals(JUPITER_PROGRAM_ID)) { - jupiterProgramIndex = index; - } - } - swapTx.message.header.numReadonlyUnsignedAccounts = swapTx.message.header.numReadonlyUnsignedAccounts + 4; - - let swapIndex = 0; - let swapIx: anchor.web3.MessageCompiledInstruction; - for (let [index, ix] of swapTx.message.compiledInstructions.entries()) { - ix.accountKeyIndexes = ix.accountKeyIndexes.map((i) => { - return i < originKeysLen ? (i < writeIndexStart ? i : i + 1) : i + keysToAppend; - }); - ix.programIdIndex = ix.programIdIndex < writeIndexStart ? ix.programIdIndex : ix.programIdIndex + 1; - swapTx.message.compiledInstructions[index] = ix; - if (ix.programIdIndex == jupiterProgramIndex) { - swapIndex = index; - swapIx = ix; + const decompiledMessage = anchor.web3.TransactionMessage.decompile(swapTx.message, { + addressLookupTableAccounts, + }); + const tx = new anchor.web3.Transaction(); + for (let ix of decompiledMessage.instructions) { + if (ix.programId.equals(JUPITER_PROGRAM_ID)) { + const { _swapAmountConfig, _swapRouteConfig } = this._getSwapConfig(ix.data); + _swapAmountConfig.copy(payload); + _swapRouteConfig.copy(swapRouteConfig); + tx.add(await this._wrap(ix)); + } else { + tx.add(ix); } } - const swapDiscriminator = Buffer.from(sigHash("global", "swap"), "hex"); - - const rawData = Uint8Array.from(swapIx.data); - const swapConfig = { - protocolConfig: Buffer.from(rawData.slice(8, rawData.byteLength - 19)), // (regular)7 - 12 bytes, but sometimes(split swap) might be upto 17 bytes - inputAmount: Buffer.from(rawData.slice(rawData.byteLength - 19, rawData.byteLength - 11)), // u64 - outputAmount: Buffer.from(rawData.slice(rawData.byteLength - 11, rawData.byteLength - 3)), // u64 - slippageBps: Buffer.from(rawData.slice(rawData.byteLength - 3, rawData.byteLength - 1)), // u16 - platformFeeBps: Buffer.from(rawData.slice(rawData.byteLength - 1, rawData.byteLength)), // u8 - }; - - payload.set(swapConfig.inputAmount); - payload.set(swapConfig.outputAmount, 8); - payload.set(swapConfig.slippageBps, 16); - if (swapConfig.protocolConfig.length < MAX_SWAP_CONFIG_SIZE) { - swapRouteConfig.set([swapConfig.protocolConfig.length], 0); - swapRouteConfig.set(swapConfig.protocolConfig, 1); - } else if (swapConfig.protocolConfig.length == MAX_SWAP_CONFIG_SIZE) { - payload.set(swapConfig.protocolConfig, 0); - } else { - throw `Error: Currently Gateway only support swap config under ${MAX_SWAP_CONFIG_SIZE} bytes,\nplease change to another route to fix it or wait for the updates.`; - } (this._gatewayParams.swapAmountConfig as Uint8Array[]).push(payload.subarray(0, 18)); (this._gatewayParams.swapRouteConfig as Uint8Array[]).push(swapRouteConfig); - swapIx.data = swapDiscriminator; - swapIx.programIdIndex = gatewayProgramIndex; - swapIx.accountKeyIndexes = [ - gatewayStateIndex, - jupiterAdapterProgramIndex, - jupiterProgramIndex, - activityIndex, - authorityIndex, - ...swapIx.accountKeyIndexes, - ]; - swapTx.message.compiledInstructions[swapIndex] = swapIx; - txs = [swapTx]; + txs.push(tx); + + return { txs, input: payload }; } else { let isPreIx = true; let swapIx: anchor.web3.TransactionInstruction; @@ -197,26 +133,9 @@ export class ProtocolJupiter implements IProtocolSwap { } // Extract config - const rawData = Uint8Array.from(swapIx.data); - const swapConfig = { - protocolConfig: Buffer.from(rawData.slice(8, rawData.byteLength - 19)), // (regular)7 - 9 bytes, but sometimes(split swap) might be upto 17 bytes - inputAmount: Buffer.from(rawData.slice(rawData.byteLength - 19, rawData.byteLength - 11)), // u64 - outputAmount: Buffer.from(rawData.slice(rawData.byteLength - 11, rawData.byteLength - 3)), // u64 - slippageBps: Buffer.from(rawData.slice(rawData.byteLength - 3, rawData.byteLength - 1)), // u16 - platformFeeBps: Buffer.from(rawData.slice(rawData.byteLength - 1, rawData.byteLength)), // u8 - }; - - payload.set(swapConfig.inputAmount); - payload.set(swapConfig.outputAmount, 8); - payload.set(swapConfig.slippageBps, 16); - if (swapConfig.protocolConfig.length < MAX_SWAP_CONFIG_SIZE) { - swapRouteConfig.set([swapConfig.protocolConfig.length], 0); - swapRouteConfig.set(swapConfig.protocolConfig, 1); - } else if (swapConfig.protocolConfig.length == MAX_SWAP_CONFIG_SIZE) { - payload.set(swapConfig.protocolConfig, 0); - } else { - throw `Error: Currently Gateway only support swap config under ${MAX_SWAP_CONFIG_SIZE} bytes,\nplease change to another route to fix it or wait for the updates.`; - } + const { _swapAmountConfig, _swapRouteConfig } = this._getSwapConfig(swapIx.data); + _swapAmountConfig.copy(payload); + _swapRouteConfig.copy(swapRouteConfig); (this._gatewayParams.swapAmountConfig as Uint8Array[]).push(payload.subarray(0, 18)); (this._gatewayParams.swapRouteConfig as Uint8Array[]).push(swapRouteConfig); @@ -252,6 +171,10 @@ export class ProtocolJupiter implements IProtocolSwap { return JSBI.toNumber(this._bestRoute.outAmount); } + getAddressLookupTables(): anchor.web3.AddressLookupTableAccount[] { + return this._addressLookupTableAccounts; + } + async getRoute() { return { ...this._bestRoute, @@ -271,25 +194,56 @@ export class ProtocolJupiter implements IProtocolSwap { routeInfo, userPublicKey: this._params.userKey, }); + const isLegible = + routeInfo.marketInfos.length <= MAX_ROUTE_HOP && swapTransaction.serialize().length <= MAX_RAW_SWAP_TX_SIZE; + if (isLegible) console.log(swapTransaction.serialize().length); + return { isLegible, swapTransaction, addressLookupTableAccounts }; + } - let isTxV2 = true; - if ((swapTransaction as anchor.web3.Transaction).instructions) { - isTxV2 = false; - } + private _getSwapConfig(data: Buffer): { + _swapAmountConfig: Buffer; + _swapRouteConfig: Buffer; + } { + let _swapAmountConfig = Buffer.alloc(PAYLOAD_SIZE); + let _swapRouteConfig = Buffer.alloc(MAX_SWAP_CONFIG_SIZE); + // Extract config + const rawData = Uint8Array.from(data); + const swapConfig = { + protocolConfig: Buffer.from(rawData.slice(8, rawData.byteLength - 19)), // (regular)7 - 9 bytes, but sometimes(split swap) might be upto 17 bytes + inputAmount: Buffer.from(rawData.slice(rawData.byteLength - 19, rawData.byteLength - 11)), // u64 + outputAmount: Buffer.from(rawData.slice(rawData.byteLength - 11, rawData.byteLength - 3)), // u64 + slippageBps: Buffer.from(rawData.slice(rawData.byteLength - 3, rawData.byteLength - 1)), // u16 + platformFeeBps: Buffer.from(rawData.slice(rawData.byteLength - 1, rawData.byteLength)), // u8 + }; - if (isTxV2) { - const versionedTx = swapTransaction as anchor.web3.VersionedTransaction; - const isLegible = - versionedTx.message.staticAccountKeys.length <= MAX_STATIC_KEYS - ? versionedTx.serialize().length < MAX_RAW_SWAP_TX_SIZE - ? true - : false - : false; - return { isLegible, swapTransaction, addressLookupTableAccounts }; + _swapAmountConfig.set(swapConfig.inputAmount); + _swapAmountConfig.set(swapConfig.outputAmount, 8); + _swapAmountConfig.set(swapConfig.slippageBps, 16); + if (swapConfig.protocolConfig.length < MAX_SWAP_CONFIG_SIZE) { + _swapRouteConfig.set([swapConfig.protocolConfig.length], 0); + _swapRouteConfig.set(swapConfig.protocolConfig, 1); + } else if (swapConfig.protocolConfig.length == MAX_SWAP_CONFIG_SIZE) { + _swapAmountConfig.set(swapConfig.protocolConfig, 0); } else { - const legacyTx = swapTransaction as anchor.web3.Transaction; - const isLegible = legacyTx.serialize().length <= MAX_RAW_SWAP_TX_SIZE; - return { isLegible, swapTransaction, addressLookupTableAccounts }; + throw `Error: Currently Gateway only support swap config under ${MAX_SWAP_CONFIG_SIZE} bytes,\nplease change to another route to fix it or wait for the updates.`; } + + return { _swapAmountConfig, _swapRouteConfig }; + } + + private async _wrap(ix: anchor.web3.TransactionInstruction): Promise { + const swapDiscriminator = Buffer.from(sigHash("global", "swap"), "hex"); + ix.data = swapDiscriminator; + ix.programId = GATEWAY_PROGRAM_ID; + ix.keys = [ + { pubkey: this._gatewayStateKey, isSigner: false, isWritable: true }, + { pubkey: JUPITER_ADAPTER_PROGRAM_ID, isSigner: false, isWritable: false }, + { pubkey: JUPITER_PROGRAM_ID, isSigner: false, isWritable: false }, + { pubkey: await getActivityIndex(this._params.userKey), isSigner: false, isWritable: false }, + { pubkey: getGatewayAuthority(), isSigner: false, isWritable: false }, + ...ix.keys, + ]; + + return ix; } } diff --git a/src/types.ts b/src/types.ts index 4568c3f..623a4cf 100644 --- a/src/types.ts +++ b/src/types.ts @@ -13,11 +13,12 @@ import { RouteInfo, TransactionFeeInfo } from "@jup-ag/core"; export const PAYLOAD_SIZE = 32; export interface IProtocolSwap { - swap: () => Promise<{ txs: (anchor.web3.Transaction | anchor.web3.VersionedTransaction)[]; input: Buffer }>; + swap: () => Promise<{ txs: anchor.web3.Transaction[]; input: Buffer }>; getSwapMinOutAmount: () => number; build?: () => void; getRoute?: () => any; + getAddressLookupTables?: () => anchor.web3.AddressLookupTableAccount[]; } export interface IProtocolPool { @@ -243,6 +244,7 @@ export interface GatewayMetadata { toTokenMint?: anchor.web3.PublicKey; addLiquidityTokenMint?: anchor.web3.PublicKey; removeLiquiditySingleToTokenMint?: anchor.web3.PublicKey; + addressLookupTables?: anchor.web3.PublicKey[]; } export interface SwapParams { diff --git a/tests/testAdapterJupiter.ts b/tests/testAdapterJupiter.ts index 269c4e3..3547cd7 100644 --- a/tests/testAdapterJupiter.ts +++ b/tests/testAdapterJupiter.ts @@ -36,22 +36,26 @@ describe("Gateway", () => { anchor.setProvider(provider); - const zapInAmount = 10000; + const zapInAmount = 1000000; it("Swap in Jupiter", async () => { const swapParams1: SwapParams = { protocol: SupportedProtocols.Jupiter, fromTokenMint: new PublicKey( - // "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v" // USDC + "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v" // USDC // "4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R" // RAY - "So11111111111111111111111111111111111111112" // WSOL + // "So11111111111111111111111111111111111111112" // WSOL // "SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt" // SRM + // "7dHbWXmci3dT8UFYWYZweBLXgycu7Y3iL6trKn1Y7ARj" // stSOL + // "2QHx6MmrsAXSKLynJ55GofBbveYaDPLvn6qgdefey5za" // GMT + // "orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE" // Orca ), toTokenMint: new PublicKey( // "4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R" // RAY - "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB" // USDT + // "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB" // USDT // "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v" // USDC // "SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt" // SRM + "orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE" // Orca // "So11111111111111111111111111111111111111112" // WSOL // "GENEtH5amGSi8kHAtQoezp1XEXwZJ8vcuePYnXdKrMYz" // GENE // "66edZnAPEJSxnAK4SckuupssXpbu5doV57FUcghaqPsY" // PRGC @@ -97,32 +101,23 @@ describe("Gateway", () => { // console.log(`swapInAmount: ${gateway.params.swapInAmount}`); // console.log(`swapMinOutAmount: ${gateway.params.swapMinOutAmount}`); - const txs = gateway.transactions(); + const txs = await gateway.v0Transactions(); console.log(txs); console.log("======"); console.log("Txs are sent..."); const recentBlockhash = await connection.getLatestBlockhash(); for (let tx of txs) { - if ((tx as anchor.web3.Transaction).instructions) { - const sig = await provider.sendAndConfirm(tx as anchor.web3.Transaction, [], { - skipPreflight: true, - commitment: "confirmed", - } as unknown as anchor.web3.ConfirmOptions); - console.log(sig); - } else { - const txV2 = tx as anchor.web3.VersionedTransaction; - txV2.message.recentBlockhash = recentBlockhash.blockhash; - console.log(txV2.serialize().length); - txV2.sign([wallet.payer]); - let versionMessage = txV2.serialize(); - //const result = sendAndConfirmTransaction(connection, tx, wallet); - const sig = await connection.sendRawTransaction(versionMessage, { - skipPreflight: true, - commitment: "confirmed", - } as unknown as anchor.web3.ConfirmOptions); - console.log(sig); - } + tx.message.recentBlockhash = recentBlockhash.blockhash; + console.log(tx.serialize().length); + tx.sign([wallet.payer]); + let versionMessage = tx.serialize(); + //const result = sendAndConfirmTransaction(connection, tx, wallet); + const sig = await connection.sendRawTransaction(versionMessage, { + skipPreflight: true, + commitment: "confirmed", + } as unknown as anchor.web3.ConfirmOptions); + console.log(sig); } console.log("Txs are executed"); console.log("======");