@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,218 @@
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 {
10
+ type Account,
11
+ assertAccountExists,
12
+ assertAccountsExist,
13
+ decodeAccount,
14
+ type EncodedAccount,
15
+ type FetchAccountConfig,
16
+ type FetchAccountsConfig,
17
+ fetchEncodedAccount,
18
+ fetchEncodedAccounts,
19
+ type MaybeAccount,
20
+ type MaybeEncodedAccount,
21
+ } from '@solana/kit';
22
+ import { type Address, getAddressDecoder, getAddressEncoder } from '@solana/kit';
23
+ import {
24
+ type Codec,
25
+ combineCodec,
26
+ type Decoder,
27
+ type Encoder,
28
+ fixDecoderSize,
29
+ fixEncoderSize,
30
+ getBooleanDecoder,
31
+ getBooleanEncoder,
32
+ getBytesDecoder,
33
+ getBytesEncoder,
34
+ getStructDecoder,
35
+ getStructEncoder,
36
+ getU32Decoder,
37
+ getU32Encoder,
38
+ getU64Decoder,
39
+ getU64Encoder,
40
+ type ReadonlyUint8Array,
41
+ transformEncoder,
42
+ } from '@solana/kit';
43
+
44
+ export const ORDER_DISCRIMINATOR = new Uint8Array([134, 173, 223, 185, 77, 86, 28, 51]);
45
+
46
+ export function getOrderDiscriminatorBytes() {
47
+ return fixEncoderSize(getBytesEncoder(), 8).encode(ORDER_DISCRIMINATOR);
48
+ }
49
+
50
+ export type Order = {
51
+ discriminator: ReadonlyUint8Array;
52
+ /** User address, that created this order */
53
+ user: Address;
54
+ /** Guard address, that will protect this order execution */
55
+ guard: Address;
56
+ /** Token IN that user wants to spend */
57
+ tokenInMint: Address;
58
+ /** Amount of tokens In locked */
59
+ amountIn: bigint;
60
+ /** Min amount of stablecoins to receive if token IN will be swapped */
61
+ minStablecoinsAmount: bigint;
62
+ /** Deadline for the operation, in Unix timestamp format, in SECONDS */
63
+ deadline: number;
64
+ /** 32 bytes SHA-256 hash of execution details JSON string. Everything that's not used in smart contract */
65
+ executionDetailsHash: ReadonlyUint8Array;
66
+ /** `true` if tokens IN were taken for swap during `pre_swap` instruction */
67
+ tokensInWereSwapped: boolean;
68
+ /** Amount of stablecoins, locked after swap */
69
+ lockedStablecoins: bigint;
70
+ /** Collateral amount, locked during order execution */
71
+ lockedCollateral: bigint;
72
+ /**
73
+ * Collateral amount, taken after solver failed to fulfill the order in time.
74
+ * Transferred to the user on order fulfillment or cancellation
75
+ */
76
+ takenCollateral: bigint;
77
+ /** Active solver which is currently executing this order */
78
+ activeSolver: Address;
79
+ /**
80
+ * Timestamp, until which `active_solver` MUST execute the order and claim tokens
81
+ * Order is locked for everyone but `active_solver` until this deadline
82
+ */
83
+ executionDeadline: number;
84
+ };
85
+
86
+ export type OrderArgs = {
87
+ /** User address, that created this order */
88
+ user: Address;
89
+ /** Guard address, that will protect this order execution */
90
+ guard: Address;
91
+ /** Token IN that user wants to spend */
92
+ tokenInMint: Address;
93
+ /** Amount of tokens In locked */
94
+ amountIn: number | bigint;
95
+ /** Min amount of stablecoins to receive if token IN will be swapped */
96
+ minStablecoinsAmount: number | bigint;
97
+ /** Deadline for the operation, in Unix timestamp format, in SECONDS */
98
+ deadline: number;
99
+ /** 32 bytes SHA-256 hash of execution details JSON string. Everything that's not used in smart contract */
100
+ executionDetailsHash: ReadonlyUint8Array;
101
+ /** `true` if tokens IN were taken for swap during `pre_swap` instruction */
102
+ tokensInWereSwapped: boolean;
103
+ /** Amount of stablecoins, locked after swap */
104
+ lockedStablecoins: number | bigint;
105
+ /** Collateral amount, locked during order execution */
106
+ lockedCollateral: number | bigint;
107
+ /**
108
+ * Collateral amount, taken after solver failed to fulfill the order in time.
109
+ * Transferred to the user on order fulfillment or cancellation
110
+ */
111
+ takenCollateral: number | bigint;
112
+ /** Active solver which is currently executing this order */
113
+ activeSolver: Address;
114
+ /**
115
+ * Timestamp, until which `active_solver` MUST execute the order and claim tokens
116
+ * Order is locked for everyone but `active_solver` until this deadline
117
+ */
118
+ executionDeadline: number;
119
+ };
120
+
121
+ export function getOrderEncoder(): Encoder<OrderArgs> {
122
+ return transformEncoder(
123
+ getStructEncoder([
124
+ ['discriminator', fixEncoderSize(getBytesEncoder(), 8)],
125
+ ['user', getAddressEncoder()],
126
+ ['guard', getAddressEncoder()],
127
+ ['tokenInMint', getAddressEncoder()],
128
+ ['amountIn', getU64Encoder()],
129
+ ['minStablecoinsAmount', getU64Encoder()],
130
+ ['deadline', getU32Encoder()],
131
+ ['executionDetailsHash', fixEncoderSize(getBytesEncoder(), 32)],
132
+ ['tokensInWereSwapped', getBooleanEncoder()],
133
+ ['lockedStablecoins', getU64Encoder()],
134
+ ['lockedCollateral', getU64Encoder()],
135
+ ['takenCollateral', getU64Encoder()],
136
+ ['activeSolver', getAddressEncoder()],
137
+ ['executionDeadline', getU32Encoder()],
138
+ ]),
139
+ (value) => ({ ...value, discriminator: ORDER_DISCRIMINATOR }),
140
+ );
141
+ }
142
+
143
+ export function getOrderDecoder(): Decoder<Order> {
144
+ return getStructDecoder([
145
+ ['discriminator', fixDecoderSize(getBytesDecoder(), 8)],
146
+ ['user', getAddressDecoder()],
147
+ ['guard', getAddressDecoder()],
148
+ ['tokenInMint', getAddressDecoder()],
149
+ ['amountIn', getU64Decoder()],
150
+ ['minStablecoinsAmount', getU64Decoder()],
151
+ ['deadline', getU32Decoder()],
152
+ ['executionDetailsHash', fixDecoderSize(getBytesDecoder(), 32)],
153
+ ['tokensInWereSwapped', getBooleanDecoder()],
154
+ ['lockedStablecoins', getU64Decoder()],
155
+ ['lockedCollateral', getU64Decoder()],
156
+ ['takenCollateral', getU64Decoder()],
157
+ ['activeSolver', getAddressDecoder()],
158
+ ['executionDeadline', getU32Decoder()],
159
+ ]);
160
+ }
161
+
162
+ export function getOrderCodec(): Codec<OrderArgs, Order> {
163
+ return combineCodec(getOrderEncoder(), getOrderDecoder());
164
+ }
165
+
166
+ export function decodeOrder<TAddress extends string = string>(
167
+ encodedAccount: EncodedAccount<TAddress>,
168
+ ): Account<Order, TAddress>;
169
+ export function decodeOrder<TAddress extends string = string>(
170
+ encodedAccount: MaybeEncodedAccount<TAddress>,
171
+ ): MaybeAccount<Order, TAddress>;
172
+ export function decodeOrder<TAddress extends string = string>(
173
+ encodedAccount: EncodedAccount<TAddress> | MaybeEncodedAccount<TAddress>,
174
+ ): Account<Order, TAddress> | MaybeAccount<Order, TAddress> {
175
+ return decodeAccount(encodedAccount as MaybeEncodedAccount<TAddress>, getOrderDecoder());
176
+ }
177
+
178
+ export async function fetchOrder<TAddress extends string = string>(
179
+ rpc: Parameters<typeof fetchEncodedAccount>[0],
180
+ address: Address<TAddress>,
181
+ config?: FetchAccountConfig,
182
+ ): Promise<Account<Order, TAddress>> {
183
+ const maybeAccount = await fetchMaybeOrder(rpc, address, config);
184
+ assertAccountExists(maybeAccount);
185
+ return maybeAccount;
186
+ }
187
+
188
+ export async function fetchMaybeOrder<TAddress extends string = string>(
189
+ rpc: Parameters<typeof fetchEncodedAccount>[0],
190
+ address: Address<TAddress>,
191
+ config?: FetchAccountConfig,
192
+ ): Promise<MaybeAccount<Order, TAddress>> {
193
+ const maybeAccount = await fetchEncodedAccount(rpc, address, config);
194
+ return decodeOrder(maybeAccount);
195
+ }
196
+
197
+ export async function fetchAllOrder(
198
+ rpc: Parameters<typeof fetchEncodedAccounts>[0],
199
+ addresses: Array<Address>,
200
+ config?: FetchAccountsConfig,
201
+ ): Promise<Account<Order>[]> {
202
+ const maybeAccounts = await fetchAllMaybeOrder(rpc, addresses, config);
203
+ assertAccountsExist(maybeAccounts);
204
+ return maybeAccounts;
205
+ }
206
+
207
+ export async function fetchAllMaybeOrder(
208
+ rpc: Parameters<typeof fetchEncodedAccounts>[0],
209
+ addresses: Array<Address>,
210
+ config?: FetchAccountsConfig,
211
+ ): Promise<MaybeAccount<Order>[]> {
212
+ const maybeAccounts = await fetchEncodedAccounts(rpc, addresses, config);
213
+ return maybeAccounts.map((maybeAccount) => decodeOrder(maybeAccount));
214
+ }
215
+
216
+ export function getOrderSize(): number {
217
+ return 217;
218
+ }
@@ -0,0 +1,9 @@
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
+ export * from './sourceChainGuard.js';
@@ -0,0 +1,52 @@
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 } from '@solana/kit';
10
+ import { type SOLANA_ERROR__INSTRUCTION_ERROR__CUSTOM, type SolanaError } from '@solana/kit';
11
+ import { isProgramError } from '@solana/kit';
12
+ import { SOURCE_CHAIN_GUARD_PROGRAM_ADDRESS } from '../programs/index.js';
13
+
14
+ /** InstructionNotFound: Ed25519Program instruction */
15
+ export const SOURCE_CHAIN_GUARD_ERROR__INSTRUCTION_NOT_FOUND = 0x1770; // 6000
16
+ /** SigVerificationFailed: Signature verification failed */
17
+ export const SOURCE_CHAIN_GUARD_ERROR__SIG_VERIFICATION_FAILED = 0x1771; // 6001
18
+ /** InvalidSigner: Invalid signer */
19
+ export const SOURCE_CHAIN_GUARD_ERROR__INVALID_SIGNER = 0x1772; // 6002
20
+
21
+ export type SourceChainGuardError =
22
+ | typeof SOURCE_CHAIN_GUARD_ERROR__INSTRUCTION_NOT_FOUND
23
+ | typeof SOURCE_CHAIN_GUARD_ERROR__INVALID_SIGNER
24
+ | typeof SOURCE_CHAIN_GUARD_ERROR__SIG_VERIFICATION_FAILED;
25
+
26
+ let sourceChainGuardErrorMessages: Record<SourceChainGuardError, string> | undefined;
27
+ if (process.env.NODE_ENV !== 'production') {
28
+ sourceChainGuardErrorMessages = {
29
+ [SOURCE_CHAIN_GUARD_ERROR__INSTRUCTION_NOT_FOUND]: `Ed25519Program instruction`,
30
+ [SOURCE_CHAIN_GUARD_ERROR__INVALID_SIGNER]: `Invalid signer`,
31
+ [SOURCE_CHAIN_GUARD_ERROR__SIG_VERIFICATION_FAILED]: `Signature verification failed`,
32
+ };
33
+ }
34
+
35
+ export function getSourceChainGuardErrorMessage(code: SourceChainGuardError): string {
36
+ if (process.env.NODE_ENV !== 'production') {
37
+ return (sourceChainGuardErrorMessages as Record<SourceChainGuardError, string>)[code];
38
+ }
39
+
40
+ return 'Error message not available in production bundles.';
41
+ }
42
+
43
+ export function isSourceChainGuardError<TProgramErrorCode extends SourceChainGuardError>(
44
+ error: unknown,
45
+ transactionMessage: {
46
+ instructions: Record<number, { programAddress: Address }>;
47
+ },
48
+ code?: TProgramErrorCode,
49
+ ): error is SolanaError<typeof SOLANA_ERROR__INSTRUCTION_ERROR__CUSTOM> &
50
+ Readonly<{ context: Readonly<{ code: TProgramErrorCode }> }> {
51
+ return isProgramError<TProgramErrorCode>(error, transactionMessage, SOURCE_CHAIN_GUARD_PROGRAM_ADDRESS, code);
52
+ }
@@ -0,0 +1,13 @@
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
+ export * from './accounts/index.js';
10
+ export * from './errors/index.js';
11
+ export * from './instructions/index.js';
12
+ export * from './programs/index.js';
13
+ export * from './types/index.js';
@@ -0,0 +1,357 @@
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 } 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 { getAccountMetaFactory, type ResolvedAccount } from '../shared/index.js';
36
+
37
+ export const CANCEL_ORDER_DISCRIMINATOR = new Uint8Array([95, 129, 237, 240, 8, 49, 223, 132]);
38
+
39
+ export function getCancelOrderDiscriminatorBytes() {
40
+ return fixEncoderSize(getBytesEncoder(), 8).encode(CANCEL_ORDER_DISCRIMINATOR);
41
+ }
42
+
43
+ export type CancelOrderInstruction<
44
+ TProgram extends string = typeof SOURCE_CHAIN_GUARD_PROGRAM_ADDRESS,
45
+ TAccountUser extends string | IAccountMeta<string> = string,
46
+ TAccountOrder extends string | IAccountMeta<string> = string,
47
+ TAccountGuard extends string | IAccountMeta<string> = string,
48
+ TAccountRecoveredTokenMint extends string | IAccountMeta<string> = string,
49
+ TAccountUserRecoveredTokenAccount extends string | IAccountMeta<string> = string,
50
+ TAccountGuardRecoveredTokenAccount extends string | IAccountMeta<string> = string,
51
+ TAccountRecoveredTokenProgram extends string | IAccountMeta<string> = string,
52
+ TAccountCollateralTokenMint extends string | IAccountMeta<string> = string,
53
+ TAccountUserCollateralTokenAccount extends string | IAccountMeta<string> = string,
54
+ TAccountGuardCollateralTokenAccount extends string | IAccountMeta<string> = string,
55
+ TAccountCollateralTokenProgram extends string | IAccountMeta<string> = string,
56
+ TRemainingAccounts extends readonly IAccountMeta<string>[] = [],
57
+ > = IInstruction<TProgram> &
58
+ IInstructionWithData<Uint8Array> &
59
+ IInstructionWithAccounts<
60
+ [
61
+ TAccountUser extends string
62
+ ? WritableSignerAccount<TAccountUser> & IAccountSignerMeta<TAccountUser>
63
+ : TAccountUser,
64
+ TAccountOrder extends string ? WritableAccount<TAccountOrder> : TAccountOrder,
65
+ TAccountGuard extends string ? ReadonlyAccount<TAccountGuard> : TAccountGuard,
66
+ TAccountRecoveredTokenMint extends string
67
+ ? ReadonlyAccount<TAccountRecoveredTokenMint>
68
+ : TAccountRecoveredTokenMint,
69
+ TAccountUserRecoveredTokenAccount extends string
70
+ ? WritableAccount<TAccountUserRecoveredTokenAccount>
71
+ : TAccountUserRecoveredTokenAccount,
72
+ TAccountGuardRecoveredTokenAccount extends string
73
+ ? WritableAccount<TAccountGuardRecoveredTokenAccount>
74
+ : TAccountGuardRecoveredTokenAccount,
75
+ TAccountRecoveredTokenProgram extends string
76
+ ? ReadonlyAccount<TAccountRecoveredTokenProgram>
77
+ : TAccountRecoveredTokenProgram,
78
+ TAccountCollateralTokenMint extends string
79
+ ? ReadonlyAccount<TAccountCollateralTokenMint>
80
+ : TAccountCollateralTokenMint,
81
+ TAccountUserCollateralTokenAccount extends string
82
+ ? WritableAccount<TAccountUserCollateralTokenAccount>
83
+ : TAccountUserCollateralTokenAccount,
84
+ TAccountGuardCollateralTokenAccount extends string
85
+ ? WritableAccount<TAccountGuardCollateralTokenAccount>
86
+ : TAccountGuardCollateralTokenAccount,
87
+ TAccountCollateralTokenProgram extends string
88
+ ? ReadonlyAccount<TAccountCollateralTokenProgram>
89
+ : TAccountCollateralTokenProgram,
90
+ ...TRemainingAccounts,
91
+ ]
92
+ >;
93
+
94
+ export type CancelOrderInstructionData = { discriminator: ReadonlyUint8Array };
95
+
96
+ export type CancelOrderInstructionDataArgs = {};
97
+
98
+ export function getCancelOrderInstructionDataEncoder(): Encoder<CancelOrderInstructionDataArgs> {
99
+ return transformEncoder(getStructEncoder([['discriminator', fixEncoderSize(getBytesEncoder(), 8)]]), (value) => ({
100
+ ...value,
101
+ discriminator: CANCEL_ORDER_DISCRIMINATOR,
102
+ }));
103
+ }
104
+
105
+ export function getCancelOrderInstructionDataDecoder(): Decoder<CancelOrderInstructionData> {
106
+ return getStructDecoder([['discriminator', fixDecoderSize(getBytesDecoder(), 8)]]);
107
+ }
108
+
109
+ export function getCancelOrderInstructionDataCodec(): Codec<
110
+ CancelOrderInstructionDataArgs,
111
+ CancelOrderInstructionData
112
+ > {
113
+ return combineCodec(getCancelOrderInstructionDataEncoder(), getCancelOrderInstructionDataDecoder());
114
+ }
115
+
116
+ export type CancelOrderInput<
117
+ TAccountUser extends string = string,
118
+ TAccountOrder extends string = string,
119
+ TAccountGuard extends string = string,
120
+ TAccountRecoveredTokenMint extends string = string,
121
+ TAccountUserRecoveredTokenAccount extends string = string,
122
+ TAccountGuardRecoveredTokenAccount extends string = string,
123
+ TAccountRecoveredTokenProgram extends string = string,
124
+ TAccountCollateralTokenMint extends string = string,
125
+ TAccountUserCollateralTokenAccount extends string = string,
126
+ TAccountGuardCollateralTokenAccount extends string = string,
127
+ TAccountCollateralTokenProgram extends string = string,
128
+ > = {
129
+ /** User that is order creator which wants to cancel the order */
130
+ user: TransactionSigner<TAccountUser>;
131
+ /** Order data */
132
+ order: Address<TAccountOrder>;
133
+ /** Guard address, that protects this order execution */
134
+ guard: Address<TAccountGuard>;
135
+ /** Recovered token mint */
136
+ recoveredTokenMint: Address<TAccountRecoveredTokenMint>;
137
+ /**
138
+ * User token account to which tokens IN or stablecoins will be sent.
139
+ * - Must be either Token IN account or stablecoin account
140
+ * - Must be same token as Guard token account
141
+ */
142
+ userRecoveredTokenAccount: Address<TAccountUserRecoveredTokenAccount>;
143
+ /**
144
+ * Guard token account from which tokens IN or stablecoins will be sent to the user
145
+ * - Must be either Token IN account or stablecoin account
146
+ * - Must be same token as Guard token account
147
+ */
148
+ guardRecoveredTokenAccount: Address<TAccountGuardRecoveredTokenAccount>;
149
+ /** Recovered token program */
150
+ recoveredTokenProgram: Address<TAccountRecoveredTokenProgram>;
151
+ /** Recovered token mint */
152
+ collateralTokenMint: Address<TAccountCollateralTokenMint>;
153
+ /** User collateral token account to which taken collateral (if any) will be sent. */
154
+ userCollateralTokenAccount?: Address<TAccountUserCollateralTokenAccount>;
155
+ /** Guard collateral token account to which taken collateral (if any) will be sent. */
156
+ guardCollateralTokenAccount: Address<TAccountGuardCollateralTokenAccount>;
157
+ /** Solana token program */
158
+ collateralTokenProgram: Address<TAccountCollateralTokenProgram>;
159
+ };
160
+
161
+ export function getCancelOrderInstruction<
162
+ TAccountUser extends string,
163
+ TAccountOrder extends string,
164
+ TAccountGuard extends string,
165
+ TAccountRecoveredTokenMint extends string,
166
+ TAccountUserRecoveredTokenAccount extends string,
167
+ TAccountGuardRecoveredTokenAccount extends string,
168
+ TAccountRecoveredTokenProgram extends string,
169
+ TAccountCollateralTokenMint extends string,
170
+ TAccountUserCollateralTokenAccount extends string,
171
+ TAccountGuardCollateralTokenAccount extends string,
172
+ TAccountCollateralTokenProgram extends string,
173
+ TProgramAddress extends Address = typeof SOURCE_CHAIN_GUARD_PROGRAM_ADDRESS,
174
+ >(
175
+ input: CancelOrderInput<
176
+ TAccountUser,
177
+ TAccountOrder,
178
+ TAccountGuard,
179
+ TAccountRecoveredTokenMint,
180
+ TAccountUserRecoveredTokenAccount,
181
+ TAccountGuardRecoveredTokenAccount,
182
+ TAccountRecoveredTokenProgram,
183
+ TAccountCollateralTokenMint,
184
+ TAccountUserCollateralTokenAccount,
185
+ TAccountGuardCollateralTokenAccount,
186
+ TAccountCollateralTokenProgram
187
+ >,
188
+ config?: { programAddress?: TProgramAddress },
189
+ ): CancelOrderInstruction<
190
+ TProgramAddress,
191
+ TAccountUser,
192
+ TAccountOrder,
193
+ TAccountGuard,
194
+ TAccountRecoveredTokenMint,
195
+ TAccountUserRecoveredTokenAccount,
196
+ TAccountGuardRecoveredTokenAccount,
197
+ TAccountRecoveredTokenProgram,
198
+ TAccountCollateralTokenMint,
199
+ TAccountUserCollateralTokenAccount,
200
+ TAccountGuardCollateralTokenAccount,
201
+ TAccountCollateralTokenProgram
202
+ > {
203
+ // Program address.
204
+ const programAddress = config?.programAddress ?? SOURCE_CHAIN_GUARD_PROGRAM_ADDRESS;
205
+
206
+ // Original accounts.
207
+ const originalAccounts = {
208
+ user: { value: input.user ?? null, isWritable: true },
209
+ order: { value: input.order ?? null, isWritable: true },
210
+ guard: { value: input.guard ?? null, isWritable: false },
211
+ recoveredTokenMint: {
212
+ value: input.recoveredTokenMint ?? null,
213
+ isWritable: false,
214
+ },
215
+ userRecoveredTokenAccount: {
216
+ value: input.userRecoveredTokenAccount ?? null,
217
+ isWritable: true,
218
+ },
219
+ guardRecoveredTokenAccount: {
220
+ value: input.guardRecoveredTokenAccount ?? null,
221
+ isWritable: true,
222
+ },
223
+ recoveredTokenProgram: {
224
+ value: input.recoveredTokenProgram ?? null,
225
+ isWritable: false,
226
+ },
227
+ collateralTokenMint: {
228
+ value: input.collateralTokenMint ?? null,
229
+ isWritable: false,
230
+ },
231
+ userCollateralTokenAccount: {
232
+ value: input.userCollateralTokenAccount ?? null,
233
+ isWritable: true,
234
+ },
235
+ guardCollateralTokenAccount: {
236
+ value: input.guardCollateralTokenAccount ?? null,
237
+ isWritable: true,
238
+ },
239
+ collateralTokenProgram: {
240
+ value: input.collateralTokenProgram ?? null,
241
+ isWritable: false,
242
+ },
243
+ };
244
+ const accounts = originalAccounts as Record<keyof typeof originalAccounts, ResolvedAccount>;
245
+
246
+ const getAccountMeta = getAccountMetaFactory(programAddress, 'programId');
247
+ const instruction = {
248
+ accounts: [
249
+ getAccountMeta(accounts.user),
250
+ getAccountMeta(accounts.order),
251
+ getAccountMeta(accounts.guard),
252
+ getAccountMeta(accounts.recoveredTokenMint),
253
+ getAccountMeta(accounts.userRecoveredTokenAccount),
254
+ getAccountMeta(accounts.guardRecoveredTokenAccount),
255
+ getAccountMeta(accounts.recoveredTokenProgram),
256
+ getAccountMeta(accounts.collateralTokenMint),
257
+ getAccountMeta(accounts.userCollateralTokenAccount),
258
+ getAccountMeta(accounts.guardCollateralTokenAccount),
259
+ getAccountMeta(accounts.collateralTokenProgram),
260
+ ],
261
+ programAddress,
262
+ data: getCancelOrderInstructionDataEncoder().encode({}),
263
+ } as CancelOrderInstruction<
264
+ TProgramAddress,
265
+ TAccountUser,
266
+ TAccountOrder,
267
+ TAccountGuard,
268
+ TAccountRecoveredTokenMint,
269
+ TAccountUserRecoveredTokenAccount,
270
+ TAccountGuardRecoveredTokenAccount,
271
+ TAccountRecoveredTokenProgram,
272
+ TAccountCollateralTokenMint,
273
+ TAccountUserCollateralTokenAccount,
274
+ TAccountGuardCollateralTokenAccount,
275
+ TAccountCollateralTokenProgram
276
+ >;
277
+
278
+ return instruction;
279
+ }
280
+
281
+ export type ParsedCancelOrderInstruction<
282
+ TProgram extends string = typeof SOURCE_CHAIN_GUARD_PROGRAM_ADDRESS,
283
+ TAccountMetas extends readonly IAccountMeta[] = readonly IAccountMeta[],
284
+ > = {
285
+ programAddress: Address<TProgram>;
286
+ accounts: {
287
+ /** User that is order creator which wants to cancel the order */
288
+ user: TAccountMetas[0];
289
+ /** Order data */
290
+ order: TAccountMetas[1];
291
+ /** Guard address, that protects this order execution */
292
+ guard: TAccountMetas[2];
293
+ /** Recovered token mint */
294
+ recoveredTokenMint: TAccountMetas[3];
295
+ /**
296
+ * User token account to which tokens IN or stablecoins will be sent.
297
+ * - Must be either Token IN account or stablecoin account
298
+ * - Must be same token as Guard token account
299
+ */
300
+
301
+ userRecoveredTokenAccount: TAccountMetas[4];
302
+ /**
303
+ * Guard token account from which tokens IN or stablecoins will be sent to the user
304
+ * - Must be either Token IN account or stablecoin account
305
+ * - Must be same token as Guard token account
306
+ */
307
+
308
+ guardRecoveredTokenAccount: TAccountMetas[5];
309
+ /** Recovered token program */
310
+ recoveredTokenProgram: TAccountMetas[6];
311
+ /** Recovered token mint */
312
+ collateralTokenMint: TAccountMetas[7];
313
+ /** User collateral token account to which taken collateral (if any) will be sent. */
314
+ userCollateralTokenAccount?: TAccountMetas[8] | undefined;
315
+ /** Guard collateral token account to which taken collateral (if any) will be sent. */
316
+ guardCollateralTokenAccount: TAccountMetas[9];
317
+ /** Solana token program */
318
+ collateralTokenProgram: TAccountMetas[10];
319
+ };
320
+ data: CancelOrderInstructionData;
321
+ };
322
+
323
+ export function parseCancelOrderInstruction<TProgram extends string, TAccountMetas extends readonly IAccountMeta[]>(
324
+ instruction: IInstruction<TProgram> & IInstructionWithAccounts<TAccountMetas> & IInstructionWithData<Uint8Array>,
325
+ ): ParsedCancelOrderInstruction<TProgram, TAccountMetas> {
326
+ if (instruction.accounts.length < 11) {
327
+ // TODO: Coded error.
328
+ throw new Error('Not enough accounts');
329
+ }
330
+ let accountIndex = 0;
331
+ const getNextAccount = () => {
332
+ const accountMeta = instruction.accounts![accountIndex]!;
333
+ accountIndex += 1;
334
+ return accountMeta;
335
+ };
336
+ const getNextOptionalAccount = () => {
337
+ const accountMeta = getNextAccount();
338
+ return accountMeta.address === SOURCE_CHAIN_GUARD_PROGRAM_ADDRESS ? undefined : accountMeta;
339
+ };
340
+ return {
341
+ programAddress: instruction.programAddress,
342
+ accounts: {
343
+ user: getNextAccount(),
344
+ order: getNextAccount(),
345
+ guard: getNextAccount(),
346
+ recoveredTokenMint: getNextAccount(),
347
+ userRecoveredTokenAccount: getNextAccount(),
348
+ guardRecoveredTokenAccount: getNextAccount(),
349
+ recoveredTokenProgram: getNextAccount(),
350
+ collateralTokenMint: getNextAccount(),
351
+ userCollateralTokenAccount: getNextOptionalAccount(),
352
+ guardCollateralTokenAccount: getNextAccount(),
353
+ collateralTokenProgram: getNextAccount(),
354
+ },
355
+ data: getCancelOrderInstructionDataDecoder().decode(instruction.data),
356
+ };
357
+ }