@shogun-sdk/intents-sdk 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (303) hide show
  1. package/README.md +124 -0
  2. package/dist/_esm/chains.js +46 -0
  3. package/dist/_esm/chains.js.map +1 -0
  4. package/dist/_esm/config.js +2 -0
  5. package/dist/_esm/config.js.map +1 -0
  6. package/dist/_esm/constants.js +46 -0
  7. package/dist/_esm/constants.js.map +1 -0
  8. package/dist/_esm/core/evm/abi/erc20.js +313 -0
  9. package/dist/_esm/core/evm/abi/erc20.js.map +1 -0
  10. package/dist/_esm/core/evm/abi/source-chain-guard.js +1716 -0
  11. package/dist/_esm/core/evm/abi/source-chain-guard.js.map +1 -0
  12. package/dist/_esm/core/evm/intent-provider.js +59 -0
  13. package/dist/_esm/core/evm/intent-provider.js.map +1 -0
  14. package/dist/_esm/core/evm/order-signature.js +19 -0
  15. package/dist/_esm/core/evm/order-signature.js.map +1 -0
  16. package/dist/_esm/core/evm/permit2.js +31 -0
  17. package/dist/_esm/core/evm/permit2.js.map +1 -0
  18. package/dist/_esm/core/evm/sdk.js +79 -0
  19. package/dist/_esm/core/evm/sdk.js.map +1 -0
  20. package/dist/_esm/core/evm/validator.js +46 -0
  21. package/dist/_esm/core/evm/validator.js.map +1 -0
  22. package/dist/_esm/core/evm/viem-provider.js +76 -0
  23. package/dist/_esm/core/evm/viem-provider.js.map +1 -0
  24. package/dist/_esm/core/order.js +190 -0
  25. package/dist/_esm/core/order.js.map +1 -0
  26. package/dist/_esm/core/sdk.js +120 -0
  27. package/dist/_esm/core/sdk.js.map +1 -0
  28. package/dist/_esm/core/solana/client.js +19 -0
  29. package/dist/_esm/core/solana/client.js.map +1 -0
  30. package/dist/_esm/core/solana/generated/accounts/adminSingleton.js +56 -0
  31. package/dist/_esm/core/solana/generated/accounts/adminSingleton.js.map +1 -0
  32. package/dist/_esm/core/solana/generated/accounts/guard.js +62 -0
  33. package/dist/_esm/core/solana/generated/accounts/guard.js.map +1 -0
  34. package/dist/_esm/core/solana/generated/accounts/index.js +11 -0
  35. package/dist/_esm/core/solana/generated/accounts/index.js.map +1 -0
  36. package/dist/_esm/core/solana/generated/accounts/order.js +78 -0
  37. package/dist/_esm/core/solana/generated/accounts/order.js.map +1 -0
  38. package/dist/_esm/core/solana/generated/errors/index.js +9 -0
  39. package/dist/_esm/core/solana/generated/errors/index.js.map +1 -0
  40. package/dist/_esm/core/solana/generated/errors/sourceChainGuard.js +35 -0
  41. package/dist/_esm/core/solana/generated/errors/sourceChainGuard.js.map +1 -0
  42. package/dist/_esm/core/solana/generated/index.js +13 -0
  43. package/dist/_esm/core/solana/generated/index.js.map +1 -0
  44. package/dist/_esm/core/solana/generated/instructions/cancelOrder.js +125 -0
  45. package/dist/_esm/core/solana/generated/instructions/cancelOrder.js.map +1 -0
  46. package/dist/_esm/core/solana/generated/instructions/claimTokens.js +142 -0
  47. package/dist/_esm/core/solana/generated/instructions/claimTokens.js.map +1 -0
  48. package/dist/_esm/core/solana/generated/instructions/collectProtocolFees.js +146 -0
  49. package/dist/_esm/core/solana/generated/instructions/collectProtocolFees.js.map +1 -0
  50. package/dist/_esm/core/solana/generated/instructions/createGuard.js +236 -0
  51. package/dist/_esm/core/solana/generated/instructions/createGuard.js.map +1 -0
  52. package/dist/_esm/core/solana/generated/instructions/createOrder.js +182 -0
  53. package/dist/_esm/core/solana/generated/instructions/createOrder.js.map +1 -0
  54. package/dist/_esm/core/solana/generated/instructions/index.js +19 -0
  55. package/dist/_esm/core/solana/generated/instructions/index.js.map +1 -0
  56. package/dist/_esm/core/solana/generated/instructions/initialize.js +109 -0
  57. package/dist/_esm/core/solana/generated/instructions/initialize.js.map +1 -0
  58. package/dist/_esm/core/solana/generated/instructions/preStartOrderExecution.js +123 -0
  59. package/dist/_esm/core/solana/generated/instructions/preStartOrderExecution.js.map +1 -0
  60. package/dist/_esm/core/solana/generated/instructions/setAdmin.js +98 -0
  61. package/dist/_esm/core/solana/generated/instructions/setAdmin.js.map +1 -0
  62. package/dist/_esm/core/solana/generated/instructions/setAuctioneerPubKey.js +104 -0
  63. package/dist/_esm/core/solana/generated/instructions/setAuctioneerPubKey.js.map +1 -0
  64. package/dist/_esm/core/solana/generated/instructions/startOrderExecution.js +105 -0
  65. package/dist/_esm/core/solana/generated/instructions/startOrderExecution.js.map +1 -0
  66. package/dist/_esm/core/solana/generated/instructions/startOrderExecutionAfterSwap.js +113 -0
  67. package/dist/_esm/core/solana/generated/instructions/startOrderExecutionAfterSwap.js.map +1 -0
  68. package/dist/_esm/core/solana/generated/programs/index.js +9 -0
  69. package/dist/_esm/core/solana/generated/programs/index.js.map +1 -0
  70. package/dist/_esm/core/solana/generated/programs/sourceChainGuard.js +82 -0
  71. package/dist/_esm/core/solana/generated/programs/sourceChainGuard.js.map +1 -0
  72. package/dist/_esm/core/solana/generated/shared/index.js +82 -0
  73. package/dist/_esm/core/solana/generated/shared/index.js.map +1 -0
  74. package/dist/_esm/core/solana/generated/types/adminUpdated.js +18 -0
  75. package/dist/_esm/core/solana/generated/types/adminUpdated.js.map +1 -0
  76. package/dist/_esm/core/solana/generated/types/auctioneerPubkeyUpdated.js +24 -0
  77. package/dist/_esm/core/solana/generated/types/auctioneerPubkeyUpdated.js.map +1 -0
  78. package/dist/_esm/core/solana/generated/types/executionStarted.js +30 -0
  79. package/dist/_esm/core/solana/generated/types/executionStarted.js.map +1 -0
  80. package/dist/_esm/core/solana/generated/types/guardCreated.js +28 -0
  81. package/dist/_esm/core/solana/generated/types/guardCreated.js.map +1 -0
  82. package/dist/_esm/core/solana/generated/types/index.js +16 -0
  83. package/dist/_esm/core/solana/generated/types/index.js.map +1 -0
  84. package/dist/_esm/core/solana/generated/types/orderCancelled.js +18 -0
  85. package/dist/_esm/core/solana/generated/types/orderCancelled.js.map +1 -0
  86. package/dist/_esm/core/solana/generated/types/orderCreated.js +36 -0
  87. package/dist/_esm/core/solana/generated/types/orderCreated.js.map +1 -0
  88. package/dist/_esm/core/solana/generated/types/orderFulfilled.js +18 -0
  89. package/dist/_esm/core/solana/generated/types/orderFulfilled.js.map +1 -0
  90. package/dist/_esm/core/solana/generated/types/tokenInSwapped.js +26 -0
  91. package/dist/_esm/core/solana/generated/types/tokenInSwapped.js.map +1 -0
  92. package/dist/_esm/core/solana/order-instructions.js +92 -0
  93. package/dist/_esm/core/solana/order-instructions.js.map +1 -0
  94. package/dist/_esm/core/solana/sdk.js +111 -0
  95. package/dist/_esm/core/solana/sdk.js.map +1 -0
  96. package/dist/_esm/core/solana/validator.js +22 -0
  97. package/dist/_esm/core/solana/validator.js.map +1 -0
  98. package/dist/_esm/core/sui/client.js +3 -0
  99. package/dist/_esm/core/sui/client.js.map +1 -0
  100. package/dist/_esm/core/sui/order-transaction.js +56 -0
  101. package/dist/_esm/core/sui/order-transaction.js.map +1 -0
  102. package/dist/_esm/core/sui/sdk.js +94 -0
  103. package/dist/_esm/core/sui/sdk.js.map +1 -0
  104. package/dist/_esm/core/sui/validator.js +25 -0
  105. package/dist/_esm/core/sui/validator.js.map +1 -0
  106. package/dist/_esm/errors/index.js +94 -0
  107. package/dist/_esm/errors/index.js.map +1 -0
  108. package/dist/_esm/index.js +7 -0
  109. package/dist/_esm/index.js.map +1 -0
  110. package/dist/_esm/package.json +1 -0
  111. package/dist/_esm/types/intent.js +2 -0
  112. package/dist/_esm/types/intent.js.map +1 -0
  113. package/dist/_esm/utils/base-validator.js +51 -0
  114. package/dist/_esm/utils/base-validator.js.map +1 -0
  115. package/dist/_esm/utils/logger.js +109 -0
  116. package/dist/_esm/utils/logger.js.map +1 -0
  117. package/dist/_esm/utils/order-validator.js +75 -0
  118. package/dist/_esm/utils/order-validator.js.map +1 -0
  119. package/dist/_esm/utils/parsers.js +10 -0
  120. package/dist/_esm/utils/parsers.js.map +1 -0
  121. package/dist/_esm/utils/type-utils.js +2 -0
  122. package/dist/_esm/utils/type-utils.js.map +1 -0
  123. package/dist/_types/chains.d.ts +69 -0
  124. package/dist/_types/chains.d.ts.map +1 -0
  125. package/dist/_types/config.d.ts +21 -0
  126. package/dist/_types/config.d.ts.map +1 -0
  127. package/dist/_types/constants.d.ts +18 -0
  128. package/dist/_types/constants.d.ts.map +1 -0
  129. package/dist/_types/core/evm/abi/erc20.d.ts +240 -0
  130. package/dist/_types/core/evm/abi/erc20.d.ts.map +1 -0
  131. package/dist/_types/core/evm/abi/source-chain-guard.d.ts +1343 -0
  132. package/dist/_types/core/evm/abi/source-chain-guard.d.ts.map +1 -0
  133. package/dist/_types/core/evm/intent-provider.d.ts +12 -0
  134. package/dist/_types/core/evm/intent-provider.d.ts.map +1 -0
  135. package/dist/_types/core/evm/order-signature.d.ts +19 -0
  136. package/dist/_types/core/evm/order-signature.d.ts.map +1 -0
  137. package/dist/_types/core/evm/permit2.d.ts +75 -0
  138. package/dist/_types/core/evm/permit2.d.ts.map +1 -0
  139. package/dist/_types/core/evm/sdk.d.ts +50 -0
  140. package/dist/_types/core/evm/sdk.d.ts.map +1 -0
  141. package/dist/_types/core/evm/validator.d.ts +13 -0
  142. package/dist/_types/core/evm/validator.d.ts.map +1 -0
  143. package/dist/_types/core/evm/viem-provider.d.ts +9657 -0
  144. package/dist/_types/core/evm/viem-provider.d.ts.map +1 -0
  145. package/dist/_types/core/order.d.ts +122 -0
  146. package/dist/_types/core/order.d.ts.map +1 -0
  147. package/dist/_types/core/sdk.d.ts +86 -0
  148. package/dist/_types/core/sdk.d.ts.map +1 -0
  149. package/dist/_types/core/solana/client.d.ts +11 -0
  150. package/dist/_types/core/solana/client.d.ts.map +1 -0
  151. package/dist/_types/core/solana/generated/accounts/adminSingleton.d.ts +36 -0
  152. package/dist/_types/core/solana/generated/accounts/adminSingleton.d.ts.map +1 -0
  153. package/dist/_types/core/solana/generated/accounts/guard.d.ts +48 -0
  154. package/dist/_types/core/solana/generated/accounts/guard.d.ts.map +1 -0
  155. package/dist/_types/core/solana/generated/accounts/index.d.ts +11 -0
  156. package/dist/_types/core/solana/generated/accounts/index.d.ts.map +1 -0
  157. package/dist/_types/core/solana/generated/accounts/order.d.ts +92 -0
  158. package/dist/_types/core/solana/generated/accounts/order.d.ts.map +1 -0
  159. package/dist/_types/core/solana/generated/errors/index.d.ts +9 -0
  160. package/dist/_types/core/solana/generated/errors/index.d.ts.map +1 -0
  161. package/dist/_types/core/solana/generated/errors/sourceChainGuard.d.ts +27 -0
  162. package/dist/_types/core/solana/generated/errors/sourceChainGuard.d.ts.map +1 -0
  163. package/dist/_types/core/solana/generated/index.d.ts +13 -0
  164. package/dist/_types/core/solana/generated/index.d.ts.map +1 -0
  165. package/dist/_types/core/solana/generated/instructions/cancelOrder.d.ts +108 -0
  166. package/dist/_types/core/solana/generated/instructions/cancelOrder.d.ts.map +1 -0
  167. package/dist/_types/core/solana/generated/instructions/claimTokens.d.ts +131 -0
  168. package/dist/_types/core/solana/generated/instructions/claimTokens.d.ts.map +1 -0
  169. package/dist/_types/core/solana/generated/instructions/collectProtocolFees.d.ts +91 -0
  170. package/dist/_types/core/solana/generated/instructions/collectProtocolFees.d.ts.map +1 -0
  171. package/dist/_types/core/solana/generated/instructions/createGuard.d.ts +133 -0
  172. package/dist/_types/core/solana/generated/instructions/createGuard.d.ts.map +1 -0
  173. package/dist/_types/core/solana/generated/instructions/createOrder.d.ts +122 -0
  174. package/dist/_types/core/solana/generated/instructions/createOrder.d.ts.map +1 -0
  175. package/dist/_types/core/solana/generated/instructions/index.d.ts +19 -0
  176. package/dist/_types/core/solana/generated/instructions/index.d.ts.map +1 -0
  177. package/dist/_types/core/solana/generated/instructions/initialize.d.ts +63 -0
  178. package/dist/_types/core/solana/generated/instructions/initialize.d.ts.map +1 -0
  179. package/dist/_types/core/solana/generated/instructions/preStartOrderExecution.d.ts +105 -0
  180. package/dist/_types/core/solana/generated/instructions/preStartOrderExecution.d.ts.map +1 -0
  181. package/dist/_types/core/solana/generated/instructions/setAdmin.d.ts +61 -0
  182. package/dist/_types/core/solana/generated/instructions/setAdmin.d.ts.map +1 -0
  183. package/dist/_types/core/solana/generated/instructions/setAuctioneerPubKey.d.ts +68 -0
  184. package/dist/_types/core/solana/generated/instructions/setAuctioneerPubKey.d.ts.map +1 -0
  185. package/dist/_types/core/solana/generated/instructions/startOrderExecution.d.ts +85 -0
  186. package/dist/_types/core/solana/generated/instructions/startOrderExecution.d.ts.map +1 -0
  187. package/dist/_types/core/solana/generated/instructions/startOrderExecutionAfterSwap.d.ts +95 -0
  188. package/dist/_types/core/solana/generated/instructions/startOrderExecutionAfterSwap.d.ts.map +1 -0
  189. package/dist/_types/core/solana/generated/programs/index.d.ts +9 -0
  190. package/dist/_types/core/solana/generated/programs/index.d.ts.map +1 -0
  191. package/dist/_types/core/solana/generated/programs/sourceChainGuard.d.ts +59 -0
  192. package/dist/_types/core/solana/generated/programs/sourceChainGuard.d.ts.map +1 -0
  193. package/dist/_types/core/solana/generated/shared/index.d.ts +52 -0
  194. package/dist/_types/core/solana/generated/shared/index.d.ts.map +1 -0
  195. package/dist/_types/core/solana/generated/types/adminUpdated.d.ts +16 -0
  196. package/dist/_types/core/solana/generated/types/adminUpdated.d.ts.map +1 -0
  197. package/dist/_types/core/solana/generated/types/auctioneerPubkeyUpdated.d.ts +17 -0
  198. package/dist/_types/core/solana/generated/types/auctioneerPubkeyUpdated.d.ts.map +1 -0
  199. package/dist/_types/core/solana/generated/types/executionStarted.d.ts +26 -0
  200. package/dist/_types/core/solana/generated/types/executionStarted.d.ts.map +1 -0
  201. package/dist/_types/core/solana/generated/types/guardCreated.d.ts +19 -0
  202. package/dist/_types/core/solana/generated/types/guardCreated.d.ts.map +1 -0
  203. package/dist/_types/core/solana/generated/types/index.d.ts +16 -0
  204. package/dist/_types/core/solana/generated/types/index.d.ts.map +1 -0
  205. package/dist/_types/core/solana/generated/types/orderCancelled.d.ts +16 -0
  206. package/dist/_types/core/solana/generated/types/orderCancelled.d.ts.map +1 -0
  207. package/dist/_types/core/solana/generated/types/orderCreated.d.ts +32 -0
  208. package/dist/_types/core/solana/generated/types/orderCreated.d.ts.map +1 -0
  209. package/dist/_types/core/solana/generated/types/orderFulfilled.d.ts +16 -0
  210. package/dist/_types/core/solana/generated/types/orderFulfilled.d.ts.map +1 -0
  211. package/dist/_types/core/solana/generated/types/tokenInSwapped.d.ts +22 -0
  212. package/dist/_types/core/solana/generated/types/tokenInSwapped.d.ts.map +1 -0
  213. package/dist/_types/core/solana/order-instructions.d.ts +12 -0
  214. package/dist/_types/core/solana/order-instructions.d.ts.map +1 -0
  215. package/dist/_types/core/solana/sdk.d.ts +65 -0
  216. package/dist/_types/core/solana/sdk.d.ts.map +1 -0
  217. package/dist/_types/core/solana/validator.d.ts +9 -0
  218. package/dist/_types/core/solana/validator.d.ts.map +1 -0
  219. package/dist/_types/core/sui/client.d.ts +3 -0
  220. package/dist/_types/core/sui/client.d.ts.map +1 -0
  221. package/dist/_types/core/sui/order-transaction.d.ts +9 -0
  222. package/dist/_types/core/sui/order-transaction.d.ts.map +1 -0
  223. package/dist/_types/core/sui/sdk.d.ts +55 -0
  224. package/dist/_types/core/sui/sdk.d.ts.map +1 -0
  225. package/dist/_types/core/sui/validator.d.ts +9 -0
  226. package/dist/_types/core/sui/validator.d.ts.map +1 -0
  227. package/dist/_types/errors/index.d.ts +32 -0
  228. package/dist/_types/errors/index.d.ts.map +1 -0
  229. package/dist/_types/index.d.ts +10 -0
  230. package/dist/_types/index.d.ts.map +1 -0
  231. package/dist/_types/types/intent.d.ts +129 -0
  232. package/dist/_types/types/intent.d.ts.map +1 -0
  233. package/dist/_types/utils/base-validator.d.ts +28 -0
  234. package/dist/_types/utils/base-validator.d.ts.map +1 -0
  235. package/dist/_types/utils/logger.d.ts +35 -0
  236. package/dist/_types/utils/logger.d.ts.map +1 -0
  237. package/dist/_types/utils/order-validator.d.ts +40 -0
  238. package/dist/_types/utils/order-validator.d.ts.map +1 -0
  239. package/dist/_types/utils/parsers.d.ts +4 -0
  240. package/dist/_types/utils/parsers.d.ts.map +1 -0
  241. package/dist/_types/utils/type-utils.d.ts +2 -0
  242. package/dist/_types/utils/type-utils.d.ts.map +1 -0
  243. package/package.json +62 -0
  244. package/src/chains.ts +77 -0
  245. package/src/config.ts +24 -0
  246. package/src/constants.ts +61 -0
  247. package/src/core/evm/abi/erc20.ts +312 -0
  248. package/src/core/evm/abi/source-chain-guard.ts +1715 -0
  249. package/src/core/evm/intent-provider.ts +63 -0
  250. package/src/core/evm/order-signature.ts +33 -0
  251. package/src/core/evm/permit2.ts +60 -0
  252. package/src/core/evm/sdk.ts +74 -0
  253. package/src/core/evm/validator.ts +60 -0
  254. package/src/core/evm/viem-provider.ts +79 -0
  255. package/src/core/order.ts +186 -0
  256. package/src/core/sdk.ts +154 -0
  257. package/src/core/solana/client.ts +37 -0
  258. package/src/core/solana/generated/accounts/adminSingleton.ts +136 -0
  259. package/src/core/solana/generated/accounts/guard.ts +156 -0
  260. package/src/core/solana/generated/accounts/index.ts +11 -0
  261. package/src/core/solana/generated/accounts/order.ts +218 -0
  262. package/src/core/solana/generated/errors/index.ts +9 -0
  263. package/src/core/solana/generated/errors/sourceChainGuard.ts +52 -0
  264. package/src/core/solana/generated/index.ts +13 -0
  265. package/src/core/solana/generated/instructions/cancelOrder.ts +357 -0
  266. package/src/core/solana/generated/instructions/claimTokens.ts +419 -0
  267. package/src/core/solana/generated/instructions/collectProtocolFees.ts +383 -0
  268. package/src/core/solana/generated/instructions/createGuard.ts +569 -0
  269. package/src/core/solana/generated/instructions/createOrder.ts +480 -0
  270. package/src/core/solana/generated/instructions/index.ts +19 -0
  271. package/src/core/solana/generated/instructions/initialize.ts +231 -0
  272. package/src/core/solana/generated/instructions/preStartOrderExecution.ts +362 -0
  273. package/src/core/solana/generated/instructions/setAdmin.ts +211 -0
  274. package/src/core/solana/generated/instructions/setAuctioneerPubKey.ts +241 -0
  275. package/src/core/solana/generated/instructions/startOrderExecution.ts +293 -0
  276. package/src/core/solana/generated/instructions/startOrderExecutionAfterSwap.ts +323 -0
  277. package/src/core/solana/generated/programs/index.ts +9 -0
  278. package/src/core/solana/generated/programs/sourceChainGuard.ts +223 -0
  279. package/src/core/solana/generated/shared/index.ts +124 -0
  280. package/src/core/solana/generated/types/adminUpdated.ts +35 -0
  281. package/src/core/solana/generated/types/auctioneerPubkeyUpdated.ts +44 -0
  282. package/src/core/solana/generated/types/executionStarted.ts +63 -0
  283. package/src/core/solana/generated/types/guardCreated.ts +50 -0
  284. package/src/core/solana/generated/types/index.ts +16 -0
  285. package/src/core/solana/generated/types/orderCancelled.ts +35 -0
  286. package/src/core/solana/generated/types/orderCreated.ts +80 -0
  287. package/src/core/solana/generated/types/orderFulfilled.ts +35 -0
  288. package/src/core/solana/generated/types/tokenInSwapped.ts +53 -0
  289. package/src/core/solana/order-instructions.ts +131 -0
  290. package/src/core/solana/sdk.ts +135 -0
  291. package/src/core/solana/validator.ts +26 -0
  292. package/src/core/sui/client.ts +3 -0
  293. package/src/core/sui/order-transaction.ts +78 -0
  294. package/src/core/sui/sdk.ts +95 -0
  295. package/src/core/sui/validator.ts +32 -0
  296. package/src/errors/index.ts +106 -0
  297. package/src/index.ts +10 -0
  298. package/src/types/intent.ts +143 -0
  299. package/src/utils/base-validator.ts +64 -0
  300. package/src/utils/logger.ts +128 -0
  301. package/src/utils/order-validator.ts +103 -0
  302. package/src/utils/parsers.ts +8 -0
  303. package/src/utils/type-utils.ts +1 -0
@@ -0,0 +1,569 @@
1
+ /**
2
+ * This code was AUTOGENERATED using the codama library.
3
+ * Please DO NOT EDIT THIS FILE, instead use visitors
4
+ * to add features, then rerun codama to update it.
5
+ *
6
+ * @see https://github.com/codama-idl/codama
7
+ */
8
+
9
+ import { type Address, getAddressDecoder, getAddressEncoder, getProgramDerivedAddress } from '@solana/kit';
10
+ import {
11
+ type Codec,
12
+ combineCodec,
13
+ type Decoder,
14
+ type Encoder,
15
+ fixDecoderSize,
16
+ fixEncoderSize,
17
+ getBytesDecoder,
18
+ getBytesEncoder,
19
+ getStructDecoder,
20
+ getStructEncoder,
21
+ type ReadonlyUint8Array,
22
+ transformEncoder,
23
+ } from '@solana/kit';
24
+ import {
25
+ type IAccountMeta,
26
+ type IInstruction,
27
+ type IInstructionWithAccounts,
28
+ type IInstructionWithData,
29
+ type ReadonlyAccount,
30
+ type WritableAccount,
31
+ type WritableSignerAccount,
32
+ } from '@solana/kit';
33
+ import { type IAccountSignerMeta, type TransactionSigner } from '@solana/kit';
34
+ import { SOURCE_CHAIN_GUARD_PROGRAM_ADDRESS } from '../programs/index.js';
35
+ import { expectAddress, getAccountMetaFactory, type ResolvedAccount } from '../shared/index.js';
36
+
37
+ export const CREATE_GUARD_DISCRIMINATOR = new Uint8Array([251, 254, 17, 198, 219, 218, 154, 99]);
38
+
39
+ export function getCreateGuardDiscriminatorBytes() {
40
+ return fixEncoderSize(getBytesEncoder(), 8).encode(CREATE_GUARD_DISCRIMINATOR);
41
+ }
42
+
43
+ export type CreateGuardInstruction<
44
+ TProgram extends string = typeof SOURCE_CHAIN_GUARD_PROGRAM_ADDRESS,
45
+ TAccountAdmin extends string | IAccountMeta<string> = string,
46
+ TAccountGuard extends string | IAccountMeta<string> = string,
47
+ TAccountAdminSingleton extends string | IAccountMeta<string> = string,
48
+ TAccountSystemProgram extends string | IAccountMeta<string> = '11111111111111111111111111111111',
49
+ TAccountAssociatedTokenProgram extends string | IAccountMeta<string> = 'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL',
50
+ TAccountCollateralTokenMint extends string | IAccountMeta<string> = string,
51
+ TAccountCollateralTokenAccount extends string | IAccountMeta<string> = string,
52
+ TAccountCollateralTokenProgram extends string | IAccountMeta<string> = string,
53
+ TAccountStablecoinTokenMint extends string | IAccountMeta<string> = string,
54
+ TAccountStablecoinTokenAccount extends string | IAccountMeta<string> = string,
55
+ TAccountStablecoinTokenProgram extends string | IAccountMeta<string> = string,
56
+ TRemainingAccounts extends readonly IAccountMeta<string>[] = [],
57
+ > = IInstruction<TProgram> &
58
+ IInstructionWithData<Uint8Array> &
59
+ IInstructionWithAccounts<
60
+ [
61
+ TAccountAdmin extends string
62
+ ? WritableSignerAccount<TAccountAdmin> & IAccountSignerMeta<TAccountAdmin>
63
+ : TAccountAdmin,
64
+ TAccountGuard extends string ? WritableAccount<TAccountGuard> : TAccountGuard,
65
+ TAccountAdminSingleton extends string ? ReadonlyAccount<TAccountAdminSingleton> : TAccountAdminSingleton,
66
+ TAccountSystemProgram extends string ? ReadonlyAccount<TAccountSystemProgram> : TAccountSystemProgram,
67
+ TAccountAssociatedTokenProgram extends string
68
+ ? ReadonlyAccount<TAccountAssociatedTokenProgram>
69
+ : TAccountAssociatedTokenProgram,
70
+ TAccountCollateralTokenMint extends string
71
+ ? ReadonlyAccount<TAccountCollateralTokenMint>
72
+ : TAccountCollateralTokenMint,
73
+ TAccountCollateralTokenAccount extends string
74
+ ? WritableAccount<TAccountCollateralTokenAccount>
75
+ : TAccountCollateralTokenAccount,
76
+ TAccountCollateralTokenProgram extends string
77
+ ? ReadonlyAccount<TAccountCollateralTokenProgram>
78
+ : TAccountCollateralTokenProgram,
79
+ TAccountStablecoinTokenMint extends string
80
+ ? ReadonlyAccount<TAccountStablecoinTokenMint>
81
+ : TAccountStablecoinTokenMint,
82
+ TAccountStablecoinTokenAccount extends string
83
+ ? WritableAccount<TAccountStablecoinTokenAccount>
84
+ : TAccountStablecoinTokenAccount,
85
+ TAccountStablecoinTokenProgram extends string
86
+ ? ReadonlyAccount<TAccountStablecoinTokenProgram>
87
+ : TAccountStablecoinTokenProgram,
88
+ ...TRemainingAccounts,
89
+ ]
90
+ >;
91
+
92
+ export type CreateGuardInstructionData = {
93
+ discriminator: ReadonlyUint8Array;
94
+ auctioneerPubKey: Address;
95
+ };
96
+
97
+ export type CreateGuardInstructionDataArgs = { auctioneerPubKey: Address };
98
+
99
+ export function getCreateGuardInstructionDataEncoder(): Encoder<CreateGuardInstructionDataArgs> {
100
+ return transformEncoder(
101
+ getStructEncoder([
102
+ ['discriminator', fixEncoderSize(getBytesEncoder(), 8)],
103
+ ['auctioneerPubKey', getAddressEncoder()],
104
+ ]),
105
+ (value) => ({ ...value, discriminator: CREATE_GUARD_DISCRIMINATOR }),
106
+ );
107
+ }
108
+
109
+ export function getCreateGuardInstructionDataDecoder(): Decoder<CreateGuardInstructionData> {
110
+ return getStructDecoder([
111
+ ['discriminator', fixDecoderSize(getBytesDecoder(), 8)],
112
+ ['auctioneerPubKey', getAddressDecoder()],
113
+ ]);
114
+ }
115
+
116
+ export function getCreateGuardInstructionDataCodec(): Codec<
117
+ CreateGuardInstructionDataArgs,
118
+ CreateGuardInstructionData
119
+ > {
120
+ return combineCodec(getCreateGuardInstructionDataEncoder(), getCreateGuardInstructionDataDecoder());
121
+ }
122
+
123
+ export type CreateGuardAsyncInput<
124
+ TAccountAdmin extends string = string,
125
+ TAccountGuard extends string = string,
126
+ TAccountAdminSingleton extends string = string,
127
+ TAccountSystemProgram extends string = string,
128
+ TAccountAssociatedTokenProgram extends string = string,
129
+ TAccountCollateralTokenMint extends string = string,
130
+ TAccountCollateralTokenAccount extends string = string,
131
+ TAccountCollateralTokenProgram extends string = string,
132
+ TAccountStablecoinTokenMint extends string = string,
133
+ TAccountStablecoinTokenAccount extends string = string,
134
+ TAccountStablecoinTokenProgram extends string = string,
135
+ > = {
136
+ /** Admin, creating Guard */
137
+ admin: TransactionSigner<TAccountAdmin>;
138
+ /** Account that will store guard data */
139
+ guard?: Address<TAccountGuard>;
140
+ /** Admin singleton account that allows Guard creation */
141
+ adminSingleton?: Address<TAccountAdminSingleton>;
142
+ /** Solana System program */
143
+ systemProgram?: Address<TAccountSystemProgram>;
144
+ /** Associated Token account program */
145
+ associatedTokenProgram?: Address<TAccountAssociatedTokenProgram>;
146
+ /** Token that will be used as collateral and fees */
147
+ collateralTokenMint: Address<TAccountCollateralTokenMint>;
148
+ /** Token account where fees will be collected and collateral will be locked */
149
+ collateralTokenAccount?: Address<TAccountCollateralTokenAccount>;
150
+ /** Solana token program */
151
+ collateralTokenProgram: Address<TAccountCollateralTokenProgram>;
152
+ /** Token that will be used as token OUT when swapping Token IN during order execution start */
153
+ stablecoinTokenMint: Address<TAccountStablecoinTokenMint>;
154
+ /**
155
+ * Token account where fees will be collected
156
+ * Using `init_if_needed` fot the case with same stablecoin and collateral token
157
+ */
158
+ stablecoinTokenAccount?: Address<TAccountStablecoinTokenAccount>;
159
+ /** Solana token program */
160
+ stablecoinTokenProgram: Address<TAccountStablecoinTokenProgram>;
161
+ auctioneerPubKey: CreateGuardInstructionDataArgs['auctioneerPubKey'];
162
+ };
163
+
164
+ export async function getCreateGuardInstructionAsync<
165
+ TAccountAdmin extends string,
166
+ TAccountGuard extends string,
167
+ TAccountAdminSingleton extends string,
168
+ TAccountSystemProgram extends string,
169
+ TAccountAssociatedTokenProgram extends string,
170
+ TAccountCollateralTokenMint extends string,
171
+ TAccountCollateralTokenAccount extends string,
172
+ TAccountCollateralTokenProgram extends string,
173
+ TAccountStablecoinTokenMint extends string,
174
+ TAccountStablecoinTokenAccount extends string,
175
+ TAccountStablecoinTokenProgram extends string,
176
+ TProgramAddress extends Address = typeof SOURCE_CHAIN_GUARD_PROGRAM_ADDRESS,
177
+ >(
178
+ input: CreateGuardAsyncInput<
179
+ TAccountAdmin,
180
+ TAccountGuard,
181
+ TAccountAdminSingleton,
182
+ TAccountSystemProgram,
183
+ TAccountAssociatedTokenProgram,
184
+ TAccountCollateralTokenMint,
185
+ TAccountCollateralTokenAccount,
186
+ TAccountCollateralTokenProgram,
187
+ TAccountStablecoinTokenMint,
188
+ TAccountStablecoinTokenAccount,
189
+ TAccountStablecoinTokenProgram
190
+ >,
191
+ config?: { programAddress?: TProgramAddress },
192
+ ): Promise<
193
+ CreateGuardInstruction<
194
+ TProgramAddress,
195
+ TAccountAdmin,
196
+ TAccountGuard,
197
+ TAccountAdminSingleton,
198
+ TAccountSystemProgram,
199
+ TAccountAssociatedTokenProgram,
200
+ TAccountCollateralTokenMint,
201
+ TAccountCollateralTokenAccount,
202
+ TAccountCollateralTokenProgram,
203
+ TAccountStablecoinTokenMint,
204
+ TAccountStablecoinTokenAccount,
205
+ TAccountStablecoinTokenProgram
206
+ >
207
+ > {
208
+ // Program address.
209
+ const programAddress = config?.programAddress ?? SOURCE_CHAIN_GUARD_PROGRAM_ADDRESS;
210
+
211
+ // Original accounts.
212
+ const originalAccounts = {
213
+ admin: { value: input.admin ?? null, isWritable: true },
214
+ guard: { value: input.guard ?? null, isWritable: true },
215
+ adminSingleton: { value: input.adminSingleton ?? null, isWritable: false },
216
+ systemProgram: { value: input.systemProgram ?? null, isWritable: false },
217
+ associatedTokenProgram: {
218
+ value: input.associatedTokenProgram ?? null,
219
+ isWritable: false,
220
+ },
221
+ collateralTokenMint: {
222
+ value: input.collateralTokenMint ?? null,
223
+ isWritable: false,
224
+ },
225
+ collateralTokenAccount: {
226
+ value: input.collateralTokenAccount ?? null,
227
+ isWritable: true,
228
+ },
229
+ collateralTokenProgram: {
230
+ value: input.collateralTokenProgram ?? null,
231
+ isWritable: false,
232
+ },
233
+ stablecoinTokenMint: {
234
+ value: input.stablecoinTokenMint ?? null,
235
+ isWritable: false,
236
+ },
237
+ stablecoinTokenAccount: {
238
+ value: input.stablecoinTokenAccount ?? null,
239
+ isWritable: true,
240
+ },
241
+ stablecoinTokenProgram: {
242
+ value: input.stablecoinTokenProgram ?? null,
243
+ isWritable: false,
244
+ },
245
+ };
246
+ const accounts = originalAccounts as Record<keyof typeof originalAccounts, ResolvedAccount>;
247
+
248
+ // Original args.
249
+ const args = { ...input };
250
+
251
+ // Resolve default values.
252
+ if (!accounts.guard.value) {
253
+ accounts.guard.value = await getProgramDerivedAddress({
254
+ programAddress,
255
+ seeds: [
256
+ getBytesEncoder().encode(new Uint8Array([103, 117, 97, 114, 100])),
257
+ getAddressEncoder().encode(expectAddress(accounts.collateralTokenMint.value)),
258
+ getAddressEncoder().encode(expectAddress(accounts.stablecoinTokenMint.value)),
259
+ ],
260
+ });
261
+ }
262
+ if (!accounts.adminSingleton.value) {
263
+ accounts.adminSingleton.value = await getProgramDerivedAddress({
264
+ programAddress,
265
+ seeds: [getBytesEncoder().encode(new Uint8Array([97, 100, 109, 105, 110]))],
266
+ });
267
+ }
268
+ if (!accounts.systemProgram.value) {
269
+ accounts.systemProgram.value = '11111111111111111111111111111111' as Address<'11111111111111111111111111111111'>;
270
+ }
271
+ if (!accounts.associatedTokenProgram.value) {
272
+ accounts.associatedTokenProgram.value =
273
+ 'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL' as Address<'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL'>;
274
+ }
275
+ if (!accounts.collateralTokenAccount.value) {
276
+ accounts.collateralTokenAccount.value = await getProgramDerivedAddress({
277
+ programAddress:
278
+ 'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL' as Address<'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL'>,
279
+ seeds: [
280
+ getAddressEncoder().encode(expectAddress(accounts.guard.value)),
281
+ getAddressEncoder().encode(expectAddress(accounts.collateralTokenProgram.value)),
282
+ getAddressEncoder().encode(expectAddress(accounts.collateralTokenMint.value)),
283
+ ],
284
+ });
285
+ }
286
+ if (!accounts.stablecoinTokenAccount.value) {
287
+ accounts.stablecoinTokenAccount.value = await getProgramDerivedAddress({
288
+ programAddress:
289
+ 'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL' as Address<'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL'>,
290
+ seeds: [
291
+ getAddressEncoder().encode(expectAddress(accounts.guard.value)),
292
+ getAddressEncoder().encode(expectAddress(accounts.stablecoinTokenProgram.value)),
293
+ getAddressEncoder().encode(expectAddress(accounts.stablecoinTokenMint.value)),
294
+ ],
295
+ });
296
+ }
297
+
298
+ const getAccountMeta = getAccountMetaFactory(programAddress, 'programId');
299
+ const instruction = {
300
+ accounts: [
301
+ getAccountMeta(accounts.admin),
302
+ getAccountMeta(accounts.guard),
303
+ getAccountMeta(accounts.adminSingleton),
304
+ getAccountMeta(accounts.systemProgram),
305
+ getAccountMeta(accounts.associatedTokenProgram),
306
+ getAccountMeta(accounts.collateralTokenMint),
307
+ getAccountMeta(accounts.collateralTokenAccount),
308
+ getAccountMeta(accounts.collateralTokenProgram),
309
+ getAccountMeta(accounts.stablecoinTokenMint),
310
+ getAccountMeta(accounts.stablecoinTokenAccount),
311
+ getAccountMeta(accounts.stablecoinTokenProgram),
312
+ ],
313
+ programAddress,
314
+ data: getCreateGuardInstructionDataEncoder().encode(args as CreateGuardInstructionDataArgs),
315
+ } as CreateGuardInstruction<
316
+ TProgramAddress,
317
+ TAccountAdmin,
318
+ TAccountGuard,
319
+ TAccountAdminSingleton,
320
+ TAccountSystemProgram,
321
+ TAccountAssociatedTokenProgram,
322
+ TAccountCollateralTokenMint,
323
+ TAccountCollateralTokenAccount,
324
+ TAccountCollateralTokenProgram,
325
+ TAccountStablecoinTokenMint,
326
+ TAccountStablecoinTokenAccount,
327
+ TAccountStablecoinTokenProgram
328
+ >;
329
+
330
+ return instruction;
331
+ }
332
+
333
+ export type CreateGuardInput<
334
+ TAccountAdmin extends string = string,
335
+ TAccountGuard extends string = string,
336
+ TAccountAdminSingleton extends string = string,
337
+ TAccountSystemProgram extends string = string,
338
+ TAccountAssociatedTokenProgram extends string = string,
339
+ TAccountCollateralTokenMint extends string = string,
340
+ TAccountCollateralTokenAccount extends string = string,
341
+ TAccountCollateralTokenProgram extends string = string,
342
+ TAccountStablecoinTokenMint extends string = string,
343
+ TAccountStablecoinTokenAccount extends string = string,
344
+ TAccountStablecoinTokenProgram extends string = string,
345
+ > = {
346
+ /** Admin, creating Guard */
347
+ admin: TransactionSigner<TAccountAdmin>;
348
+ /** Account that will store guard data */
349
+ guard: Address<TAccountGuard>;
350
+ /** Admin singleton account that allows Guard creation */
351
+ adminSingleton: Address<TAccountAdminSingleton>;
352
+ /** Solana System program */
353
+ systemProgram?: Address<TAccountSystemProgram>;
354
+ /** Associated Token account program */
355
+ associatedTokenProgram?: Address<TAccountAssociatedTokenProgram>;
356
+ /** Token that will be used as collateral and fees */
357
+ collateralTokenMint: Address<TAccountCollateralTokenMint>;
358
+ /** Token account where fees will be collected and collateral will be locked */
359
+ collateralTokenAccount: Address<TAccountCollateralTokenAccount>;
360
+ /** Solana token program */
361
+ collateralTokenProgram: Address<TAccountCollateralTokenProgram>;
362
+ /** Token that will be used as token OUT when swapping Token IN during order execution start */
363
+ stablecoinTokenMint: Address<TAccountStablecoinTokenMint>;
364
+ /**
365
+ * Token account where fees will be collected
366
+ * Using `init_if_needed` fot the case with same stablecoin and collateral token
367
+ */
368
+ stablecoinTokenAccount: Address<TAccountStablecoinTokenAccount>;
369
+ /** Solana token program */
370
+ stablecoinTokenProgram: Address<TAccountStablecoinTokenProgram>;
371
+ auctioneerPubKey: CreateGuardInstructionDataArgs['auctioneerPubKey'];
372
+ };
373
+
374
+ export function getCreateGuardInstruction<
375
+ TAccountAdmin extends string,
376
+ TAccountGuard extends string,
377
+ TAccountAdminSingleton extends string,
378
+ TAccountSystemProgram extends string,
379
+ TAccountAssociatedTokenProgram extends string,
380
+ TAccountCollateralTokenMint extends string,
381
+ TAccountCollateralTokenAccount extends string,
382
+ TAccountCollateralTokenProgram extends string,
383
+ TAccountStablecoinTokenMint extends string,
384
+ TAccountStablecoinTokenAccount extends string,
385
+ TAccountStablecoinTokenProgram extends string,
386
+ TProgramAddress extends Address = typeof SOURCE_CHAIN_GUARD_PROGRAM_ADDRESS,
387
+ >(
388
+ input: CreateGuardInput<
389
+ TAccountAdmin,
390
+ TAccountGuard,
391
+ TAccountAdminSingleton,
392
+ TAccountSystemProgram,
393
+ TAccountAssociatedTokenProgram,
394
+ TAccountCollateralTokenMint,
395
+ TAccountCollateralTokenAccount,
396
+ TAccountCollateralTokenProgram,
397
+ TAccountStablecoinTokenMint,
398
+ TAccountStablecoinTokenAccount,
399
+ TAccountStablecoinTokenProgram
400
+ >,
401
+ config?: { programAddress?: TProgramAddress },
402
+ ): CreateGuardInstruction<
403
+ TProgramAddress,
404
+ TAccountAdmin,
405
+ TAccountGuard,
406
+ TAccountAdminSingleton,
407
+ TAccountSystemProgram,
408
+ TAccountAssociatedTokenProgram,
409
+ TAccountCollateralTokenMint,
410
+ TAccountCollateralTokenAccount,
411
+ TAccountCollateralTokenProgram,
412
+ TAccountStablecoinTokenMint,
413
+ TAccountStablecoinTokenAccount,
414
+ TAccountStablecoinTokenProgram
415
+ > {
416
+ // Program address.
417
+ const programAddress = config?.programAddress ?? SOURCE_CHAIN_GUARD_PROGRAM_ADDRESS;
418
+
419
+ // Original accounts.
420
+ const originalAccounts = {
421
+ admin: { value: input.admin ?? null, isWritable: true },
422
+ guard: { value: input.guard ?? null, isWritable: true },
423
+ adminSingleton: { value: input.adminSingleton ?? null, isWritable: false },
424
+ systemProgram: { value: input.systemProgram ?? null, isWritable: false },
425
+ associatedTokenProgram: {
426
+ value: input.associatedTokenProgram ?? null,
427
+ isWritable: false,
428
+ },
429
+ collateralTokenMint: {
430
+ value: input.collateralTokenMint ?? null,
431
+ isWritable: false,
432
+ },
433
+ collateralTokenAccount: {
434
+ value: input.collateralTokenAccount ?? null,
435
+ isWritable: true,
436
+ },
437
+ collateralTokenProgram: {
438
+ value: input.collateralTokenProgram ?? null,
439
+ isWritable: false,
440
+ },
441
+ stablecoinTokenMint: {
442
+ value: input.stablecoinTokenMint ?? null,
443
+ isWritable: false,
444
+ },
445
+ stablecoinTokenAccount: {
446
+ value: input.stablecoinTokenAccount ?? null,
447
+ isWritable: true,
448
+ },
449
+ stablecoinTokenProgram: {
450
+ value: input.stablecoinTokenProgram ?? null,
451
+ isWritable: false,
452
+ },
453
+ };
454
+ const accounts = originalAccounts as Record<keyof typeof originalAccounts, ResolvedAccount>;
455
+
456
+ // Original args.
457
+ const args = { ...input };
458
+
459
+ // Resolve default values.
460
+ if (!accounts.systemProgram.value) {
461
+ accounts.systemProgram.value = '11111111111111111111111111111111' as Address<'11111111111111111111111111111111'>;
462
+ }
463
+ if (!accounts.associatedTokenProgram.value) {
464
+ accounts.associatedTokenProgram.value =
465
+ 'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL' as Address<'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL'>;
466
+ }
467
+
468
+ const getAccountMeta = getAccountMetaFactory(programAddress, 'programId');
469
+ const instruction = {
470
+ accounts: [
471
+ getAccountMeta(accounts.admin),
472
+ getAccountMeta(accounts.guard),
473
+ getAccountMeta(accounts.adminSingleton),
474
+ getAccountMeta(accounts.systemProgram),
475
+ getAccountMeta(accounts.associatedTokenProgram),
476
+ getAccountMeta(accounts.collateralTokenMint),
477
+ getAccountMeta(accounts.collateralTokenAccount),
478
+ getAccountMeta(accounts.collateralTokenProgram),
479
+ getAccountMeta(accounts.stablecoinTokenMint),
480
+ getAccountMeta(accounts.stablecoinTokenAccount),
481
+ getAccountMeta(accounts.stablecoinTokenProgram),
482
+ ],
483
+ programAddress,
484
+ data: getCreateGuardInstructionDataEncoder().encode(args as CreateGuardInstructionDataArgs),
485
+ } as CreateGuardInstruction<
486
+ TProgramAddress,
487
+ TAccountAdmin,
488
+ TAccountGuard,
489
+ TAccountAdminSingleton,
490
+ TAccountSystemProgram,
491
+ TAccountAssociatedTokenProgram,
492
+ TAccountCollateralTokenMint,
493
+ TAccountCollateralTokenAccount,
494
+ TAccountCollateralTokenProgram,
495
+ TAccountStablecoinTokenMint,
496
+ TAccountStablecoinTokenAccount,
497
+ TAccountStablecoinTokenProgram
498
+ >;
499
+
500
+ return instruction;
501
+ }
502
+
503
+ export type ParsedCreateGuardInstruction<
504
+ TProgram extends string = typeof SOURCE_CHAIN_GUARD_PROGRAM_ADDRESS,
505
+ TAccountMetas extends readonly IAccountMeta[] = readonly IAccountMeta[],
506
+ > = {
507
+ programAddress: Address<TProgram>;
508
+ accounts: {
509
+ /** Admin, creating Guard */
510
+ admin: TAccountMetas[0];
511
+ /** Account that will store guard data */
512
+ guard: TAccountMetas[1];
513
+ /** Admin singleton account that allows Guard creation */
514
+ adminSingleton: TAccountMetas[2];
515
+ /** Solana System program */
516
+ systemProgram: TAccountMetas[3];
517
+ /** Associated Token account program */
518
+ associatedTokenProgram: TAccountMetas[4];
519
+ /** Token that will be used as collateral and fees */
520
+ collateralTokenMint: TAccountMetas[5];
521
+ /** Token account where fees will be collected and collateral will be locked */
522
+ collateralTokenAccount: TAccountMetas[6];
523
+ /** Solana token program */
524
+ collateralTokenProgram: TAccountMetas[7];
525
+ /** Token that will be used as token OUT when swapping Token IN during order execution start */
526
+ stablecoinTokenMint: TAccountMetas[8];
527
+ /**
528
+ * Token account where fees will be collected
529
+ * Using `init_if_needed` fot the case with same stablecoin and collateral token
530
+ */
531
+
532
+ stablecoinTokenAccount: TAccountMetas[9];
533
+ /** Solana token program */
534
+ stablecoinTokenProgram: TAccountMetas[10];
535
+ };
536
+ data: CreateGuardInstructionData;
537
+ };
538
+
539
+ export function parseCreateGuardInstruction<TProgram extends string, TAccountMetas extends readonly IAccountMeta[]>(
540
+ instruction: IInstruction<TProgram> & IInstructionWithAccounts<TAccountMetas> & IInstructionWithData<Uint8Array>,
541
+ ): ParsedCreateGuardInstruction<TProgram, TAccountMetas> {
542
+ if (instruction.accounts.length < 11) {
543
+ // TODO: Coded error.
544
+ throw new Error('Not enough accounts');
545
+ }
546
+ let accountIndex = 0;
547
+ const getNextAccount = () => {
548
+ const accountMeta = instruction.accounts![accountIndex]!;
549
+ accountIndex += 1;
550
+ return accountMeta;
551
+ };
552
+ return {
553
+ programAddress: instruction.programAddress,
554
+ accounts: {
555
+ admin: getNextAccount(),
556
+ guard: getNextAccount(),
557
+ adminSingleton: getNextAccount(),
558
+ systemProgram: getNextAccount(),
559
+ associatedTokenProgram: getNextAccount(),
560
+ collateralTokenMint: getNextAccount(),
561
+ collateralTokenAccount: getNextAccount(),
562
+ collateralTokenProgram: getNextAccount(),
563
+ stablecoinTokenMint: getNextAccount(),
564
+ stablecoinTokenAccount: getNextAccount(),
565
+ stablecoinTokenProgram: getNextAccount(),
566
+ },
567
+ data: getCreateGuardInstructionDataDecoder().decode(instruction.data),
568
+ };
569
+ }