@wormhole-foundation/sdk-solana-core 0.5.0-beta.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 (261) hide show
  1. package/dist/cjs/anchor-idl/wormhole.json +611 -0
  2. package/dist/cjs/core.d.ts +26 -0
  3. package/dist/cjs/core.d.ts.map +1 -0
  4. package/dist/cjs/core.js +181 -0
  5. package/dist/cjs/core.js.map +1 -0
  6. package/dist/cjs/index.d.ts +4 -0
  7. package/dist/cjs/index.d.ts.map +1 -0
  8. package/dist/cjs/index.js +37 -0
  9. package/dist/cjs/index.js.map +1 -0
  10. package/dist/cjs/types.d.ts +612 -0
  11. package/dist/cjs/types.d.ts.map +1 -0
  12. package/dist/cjs/types.js +3 -0
  13. package/dist/cjs/types.js.map +1 -0
  14. package/dist/cjs/utils/accounts/claim.d.ts +5 -0
  15. package/dist/cjs/utils/accounts/claim.d.ts.map +1 -0
  16. package/dist/cjs/utils/accounts/claim.js +31 -0
  17. package/dist/cjs/utils/accounts/claim.js.map +1 -0
  18. package/dist/cjs/utils/accounts/config.d.ts +18 -0
  19. package/dist/cjs/utils/accounts/config.d.ts.map +1 -0
  20. package/dist/cjs/utils/accounts/config.js +52 -0
  21. package/dist/cjs/utils/accounts/config.js.map +1 -0
  22. package/dist/cjs/utils/accounts/emitter.d.ts +10 -0
  23. package/dist/cjs/utils/accounts/emitter.d.ts.map +1 -0
  24. package/dist/cjs/utils/accounts/emitter.js +22 -0
  25. package/dist/cjs/utils/accounts/emitter.js.map +1 -0
  26. package/dist/cjs/utils/accounts/feeCollector.d.ts +3 -0
  27. package/dist/cjs/utils/accounts/feeCollector.d.ts.map +1 -0
  28. package/dist/cjs/utils/accounts/feeCollector.js +9 -0
  29. package/dist/cjs/utils/accounts/feeCollector.js.map +1 -0
  30. package/dist/cjs/utils/accounts/guardianSet.d.ts +13 -0
  31. package/dist/cjs/utils/accounts/guardianSet.d.ts.map +1 -0
  32. package/dist/cjs/utils/accounts/guardianSet.js +49 -0
  33. package/dist/cjs/utils/accounts/guardianSet.js.map +1 -0
  34. package/dist/cjs/utils/accounts/index.d.ts +10 -0
  35. package/dist/cjs/utils/accounts/index.d.ts.map +1 -0
  36. package/dist/cjs/utils/accounts/index.js +26 -0
  37. package/dist/cjs/utils/accounts/index.js.map +1 -0
  38. package/dist/cjs/utils/accounts/postedVaa.d.ts +4 -0
  39. package/dist/cjs/utils/accounts/postedVaa.d.ts.map +1 -0
  40. package/dist/cjs/utils/accounts/postedVaa.js +9 -0
  41. package/dist/cjs/utils/accounts/postedVaa.js.map +1 -0
  42. package/dist/cjs/utils/accounts/sequence.d.ts +13 -0
  43. package/dist/cjs/utils/accounts/sequence.d.ts.map +1 -0
  44. package/dist/cjs/utils/accounts/sequence.js +42 -0
  45. package/dist/cjs/utils/accounts/sequence.js.map +1 -0
  46. package/dist/cjs/utils/accounts/signatureSet.d.ts +11 -0
  47. package/dist/cjs/utils/accounts/signatureSet.d.ts.map +1 -0
  48. package/dist/cjs/utils/accounts/signatureSet.js +31 -0
  49. package/dist/cjs/utils/accounts/signatureSet.js.map +1 -0
  50. package/dist/cjs/utils/accounts/upgrade.d.ts +3 -0
  51. package/dist/cjs/utils/accounts/upgrade.d.ts.map +1 -0
  52. package/dist/cjs/utils/accounts/upgrade.js +9 -0
  53. package/dist/cjs/utils/accounts/upgrade.js.map +1 -0
  54. package/dist/cjs/utils/coder/accounts.d.ts +26 -0
  55. package/dist/cjs/utils/coder/accounts.d.ts.map +1 -0
  56. package/dist/cjs/utils/coder/accounts.js +64 -0
  57. package/dist/cjs/utils/coder/accounts.js.map +1 -0
  58. package/dist/cjs/utils/coder/events.d.ts +7 -0
  59. package/dist/cjs/utils/coder/events.d.ts.map +1 -0
  60. package/dist/cjs/utils/coder/events.js +11 -0
  61. package/dist/cjs/utils/coder/events.js.map +1 -0
  62. package/dist/cjs/utils/coder/idl.d.ts +8 -0
  63. package/dist/cjs/utils/coder/idl.d.ts.map +1 -0
  64. package/dist/cjs/utils/coder/idl.js +114 -0
  65. package/dist/cjs/utils/coder/idl.js.map +1 -0
  66. package/dist/cjs/utils/coder/index.d.ts +16 -0
  67. package/dist/cjs/utils/coder/index.d.ts.map +1 -0
  68. package/dist/cjs/utils/coder/index.js +26 -0
  69. package/dist/cjs/utils/coder/index.js.map +1 -0
  70. package/dist/cjs/utils/coder/instruction.d.ts +26 -0
  71. package/dist/cjs/utils/coder/instruction.d.ts.map +1 -0
  72. package/dist/cjs/utils/coder/instruction.js +110 -0
  73. package/dist/cjs/utils/coder/instruction.js.map +1 -0
  74. package/dist/cjs/utils/coder/state.d.ts +8 -0
  75. package/dist/cjs/utils/coder/state.d.ts.map +1 -0
  76. package/dist/cjs/utils/coder/state.js +14 -0
  77. package/dist/cjs/utils/coder/state.js.map +1 -0
  78. package/dist/cjs/utils/coder/types.d.ts +8 -0
  79. package/dist/cjs/utils/coder/types.d.ts.map +1 -0
  80. package/dist/cjs/utils/coder/types.js +14 -0
  81. package/dist/cjs/utils/coder/types.js.map +1 -0
  82. package/dist/cjs/utils/cpi.d.ts +52 -0
  83. package/dist/cjs/utils/cpi.d.ts.map +1 -0
  84. package/dist/cjs/utils/cpi.js +48 -0
  85. package/dist/cjs/utils/cpi.js.map +1 -0
  86. package/dist/cjs/utils/index.d.ts +5 -0
  87. package/dist/cjs/utils/index.d.ts.map +1 -0
  88. package/dist/cjs/utils/index.js +21 -0
  89. package/dist/cjs/utils/index.js.map +1 -0
  90. package/dist/cjs/utils/instructions/bpfLoaderUpgradeable.d.ts +6 -0
  91. package/dist/cjs/utils/instructions/bpfLoaderUpgradeable.d.ts.map +1 -0
  92. package/dist/cjs/utils/instructions/bpfLoaderUpgradeable.js +14 -0
  93. package/dist/cjs/utils/instructions/bpfLoaderUpgradeable.js.map +1 -0
  94. package/dist/cjs/utils/instructions/feeTransfer.d.ts +3 -0
  95. package/dist/cjs/utils/instructions/feeTransfer.d.ts.map +1 -0
  96. package/dist/cjs/utils/instructions/feeTransfer.js +14 -0
  97. package/dist/cjs/utils/instructions/feeTransfer.js.map +1 -0
  98. package/dist/cjs/utils/instructions/governance.d.ts +52 -0
  99. package/dist/cjs/utils/instructions/governance.d.ts.map +1 -0
  100. package/dist/cjs/utils/instructions/governance.js +111 -0
  101. package/dist/cjs/utils/instructions/governance.js.map +1 -0
  102. package/dist/cjs/utils/instructions/index.d.ts +7 -0
  103. package/dist/cjs/utils/instructions/index.d.ts.map +1 -0
  104. package/dist/cjs/utils/instructions/index.js +23 -0
  105. package/dist/cjs/utils/instructions/index.js.map +1 -0
  106. package/dist/cjs/utils/instructions/initialize.d.ts +14 -0
  107. package/dist/cjs/utils/instructions/initialize.d.ts.map +1 -0
  108. package/dist/cjs/utils/instructions/initialize.js +37 -0
  109. package/dist/cjs/utils/instructions/initialize.js.map +1 -0
  110. package/dist/cjs/utils/instructions/postMessage.d.ts +16 -0
  111. package/dist/cjs/utils/instructions/postMessage.d.ts.map +1 -0
  112. package/dist/cjs/utils/instructions/postMessage.js +41 -0
  113. package/dist/cjs/utils/instructions/postMessage.js.map +1 -0
  114. package/dist/cjs/utils/instructions/postVaa.d.ts +28 -0
  115. package/dist/cjs/utils/instructions/postVaa.d.ts.map +1 -0
  116. package/dist/cjs/utils/instructions/postVaa.js +53 -0
  117. package/dist/cjs/utils/instructions/postVaa.js.map +1 -0
  118. package/dist/cjs/utils/instructions/secp256k1.d.ts +30 -0
  119. package/dist/cjs/utils/instructions/secp256k1.d.ts.map +1 -0
  120. package/dist/cjs/utils/instructions/secp256k1.js +111 -0
  121. package/dist/cjs/utils/instructions/secp256k1.js.map +1 -0
  122. package/dist/cjs/utils/instructions/verifySignature.d.ts +32 -0
  123. package/dist/cjs/utils/instructions/verifySignature.d.ts.map +1 -0
  124. package/dist/cjs/utils/instructions/verifySignature.js +94 -0
  125. package/dist/cjs/utils/instructions/verifySignature.js.map +1 -0
  126. package/dist/cjs/utils/program.d.ts +8 -0
  127. package/dist/cjs/utils/program.d.ts.map +1 -0
  128. package/dist/cjs/utils/program.js +24 -0
  129. package/dist/cjs/utils/program.js.map +1 -0
  130. package/dist/esm/anchor-idl/wormhole.json +611 -0
  131. package/dist/esm/core.d.ts +26 -0
  132. package/dist/esm/core.d.ts.map +1 -0
  133. package/dist/esm/core.js +177 -0
  134. package/dist/esm/core.js.map +1 -0
  135. package/dist/esm/index.d.ts +4 -0
  136. package/dist/esm/index.d.ts.map +1 -0
  137. package/dist/esm/index.js +8 -0
  138. package/dist/esm/index.js.map +1 -0
  139. package/dist/esm/types.d.ts +612 -0
  140. package/dist/esm/types.d.ts.map +1 -0
  141. package/dist/esm/types.js +2 -0
  142. package/dist/esm/types.js.map +1 -0
  143. package/dist/esm/utils/accounts/claim.d.ts +5 -0
  144. package/dist/esm/utils/accounts/claim.d.ts.map +1 -0
  145. package/dist/esm/utils/accounts/claim.js +26 -0
  146. package/dist/esm/utils/accounts/claim.js.map +1 -0
  147. package/dist/esm/utils/accounts/config.d.ts +18 -0
  148. package/dist/esm/utils/accounts/config.d.ts.map +1 -0
  149. package/dist/esm/utils/accounts/config.js +45 -0
  150. package/dist/esm/utils/accounts/config.js.map +1 -0
  151. package/dist/esm/utils/accounts/emitter.d.ts +10 -0
  152. package/dist/esm/utils/accounts/emitter.d.ts.map +1 -0
  153. package/dist/esm/utils/accounts/emitter.js +16 -0
  154. package/dist/esm/utils/accounts/emitter.js.map +1 -0
  155. package/dist/esm/utils/accounts/feeCollector.d.ts +3 -0
  156. package/dist/esm/utils/accounts/feeCollector.d.ts.map +1 -0
  157. package/dist/esm/utils/accounts/feeCollector.js +5 -0
  158. package/dist/esm/utils/accounts/feeCollector.js.map +1 -0
  159. package/dist/esm/utils/accounts/guardianSet.d.ts +13 -0
  160. package/dist/esm/utils/accounts/guardianSet.d.ts.map +1 -0
  161. package/dist/esm/utils/accounts/guardianSet.js +43 -0
  162. package/dist/esm/utils/accounts/guardianSet.js.map +1 -0
  163. package/dist/esm/utils/accounts/index.d.ts +10 -0
  164. package/dist/esm/utils/accounts/index.d.ts.map +1 -0
  165. package/dist/esm/utils/accounts/index.js +10 -0
  166. package/dist/esm/utils/accounts/index.js.map +1 -0
  167. package/dist/esm/utils/accounts/postedVaa.d.ts +4 -0
  168. package/dist/esm/utils/accounts/postedVaa.d.ts.map +1 -0
  169. package/dist/esm/utils/accounts/postedVaa.js +5 -0
  170. package/dist/esm/utils/accounts/postedVaa.js.map +1 -0
  171. package/dist/esm/utils/accounts/sequence.d.ts +13 -0
  172. package/dist/esm/utils/accounts/sequence.d.ts.map +1 -0
  173. package/dist/esm/utils/accounts/sequence.js +36 -0
  174. package/dist/esm/utils/accounts/sequence.js.map +1 -0
  175. package/dist/esm/utils/accounts/signatureSet.d.ts +11 -0
  176. package/dist/esm/utils/accounts/signatureSet.d.ts.map +1 -0
  177. package/dist/esm/utils/accounts/signatureSet.js +26 -0
  178. package/dist/esm/utils/accounts/signatureSet.js.map +1 -0
  179. package/dist/esm/utils/accounts/upgrade.d.ts +3 -0
  180. package/dist/esm/utils/accounts/upgrade.d.ts.map +1 -0
  181. package/dist/esm/utils/accounts/upgrade.js +5 -0
  182. package/dist/esm/utils/accounts/upgrade.js.map +1 -0
  183. package/dist/esm/utils/coder/accounts.d.ts +26 -0
  184. package/dist/esm/utils/coder/accounts.d.ts.map +1 -0
  185. package/dist/esm/utils/coder/accounts.js +58 -0
  186. package/dist/esm/utils/coder/accounts.js.map +1 -0
  187. package/dist/esm/utils/coder/events.d.ts +7 -0
  188. package/dist/esm/utils/coder/events.d.ts.map +1 -0
  189. package/dist/esm/utils/coder/events.js +7 -0
  190. package/dist/esm/utils/coder/events.js.map +1 -0
  191. package/dist/esm/utils/coder/idl.d.ts +8 -0
  192. package/dist/esm/utils/coder/idl.d.ts.map +1 -0
  193. package/dist/esm/utils/coder/idl.js +87 -0
  194. package/dist/esm/utils/coder/idl.js.map +1 -0
  195. package/dist/esm/utils/coder/index.d.ts +16 -0
  196. package/dist/esm/utils/coder/index.d.ts.map +1 -0
  197. package/dist/esm/utils/coder/index.js +21 -0
  198. package/dist/esm/utils/coder/index.js.map +1 -0
  199. package/dist/esm/utils/coder/instruction.d.ts +26 -0
  200. package/dist/esm/utils/coder/instruction.d.ts.map +1 -0
  201. package/dist/esm/utils/coder/instruction.js +83 -0
  202. package/dist/esm/utils/coder/instruction.js.map +1 -0
  203. package/dist/esm/utils/coder/state.d.ts +8 -0
  204. package/dist/esm/utils/coder/state.d.ts.map +1 -0
  205. package/dist/esm/utils/coder/state.js +10 -0
  206. package/dist/esm/utils/coder/state.js.map +1 -0
  207. package/dist/esm/utils/coder/types.d.ts +8 -0
  208. package/dist/esm/utils/coder/types.d.ts.map +1 -0
  209. package/dist/esm/utils/coder/types.js +10 -0
  210. package/dist/esm/utils/coder/types.js.map +1 -0
  211. package/dist/esm/utils/cpi.d.ts +52 -0
  212. package/dist/esm/utils/cpi.d.ts.map +1 -0
  213. package/dist/esm/utils/cpi.js +43 -0
  214. package/dist/esm/utils/cpi.js.map +1 -0
  215. package/dist/esm/utils/index.d.ts +5 -0
  216. package/dist/esm/utils/index.d.ts.map +1 -0
  217. package/dist/esm/utils/index.js +5 -0
  218. package/dist/esm/utils/index.js.map +1 -0
  219. package/dist/esm/utils/instructions/bpfLoaderUpgradeable.d.ts +6 -0
  220. package/dist/esm/utils/instructions/bpfLoaderUpgradeable.d.ts.map +1 -0
  221. package/dist/esm/utils/instructions/bpfLoaderUpgradeable.js +9 -0
  222. package/dist/esm/utils/instructions/bpfLoaderUpgradeable.js.map +1 -0
  223. package/dist/esm/utils/instructions/feeTransfer.d.ts +3 -0
  224. package/dist/esm/utils/instructions/feeTransfer.d.ts.map +1 -0
  225. package/dist/esm/utils/instructions/feeTransfer.js +10 -0
  226. package/dist/esm/utils/instructions/feeTransfer.js.map +1 -0
  227. package/dist/esm/utils/instructions/governance.d.ts +52 -0
  228. package/dist/esm/utils/instructions/governance.d.ts.map +1 -0
  229. package/dist/esm/utils/instructions/governance.js +100 -0
  230. package/dist/esm/utils/instructions/governance.js.map +1 -0
  231. package/dist/esm/utils/instructions/index.d.ts +7 -0
  232. package/dist/esm/utils/instructions/index.d.ts.map +1 -0
  233. package/dist/esm/utils/instructions/index.js +7 -0
  234. package/dist/esm/utils/instructions/index.js.map +1 -0
  235. package/dist/esm/utils/instructions/initialize.d.ts +14 -0
  236. package/dist/esm/utils/instructions/initialize.d.ts.map +1 -0
  237. package/dist/esm/utils/instructions/initialize.js +29 -0
  238. package/dist/esm/utils/instructions/initialize.js.map +1 -0
  239. package/dist/esm/utils/instructions/postMessage.d.ts +16 -0
  240. package/dist/esm/utils/instructions/postMessage.d.ts.map +1 -0
  241. package/dist/esm/utils/instructions/postMessage.js +36 -0
  242. package/dist/esm/utils/instructions/postMessage.js.map +1 -0
  243. package/dist/esm/utils/instructions/postVaa.d.ts +28 -0
  244. package/dist/esm/utils/instructions/postVaa.d.ts.map +1 -0
  245. package/dist/esm/utils/instructions/postVaa.js +45 -0
  246. package/dist/esm/utils/instructions/postVaa.js.map +1 -0
  247. package/dist/esm/utils/instructions/secp256k1.d.ts +30 -0
  248. package/dist/esm/utils/instructions/secp256k1.d.ts.map +1 -0
  249. package/dist/esm/utils/instructions/secp256k1.js +106 -0
  250. package/dist/esm/utils/instructions/secp256k1.js.map +1 -0
  251. package/dist/esm/utils/instructions/verifySignature.d.ts +32 -0
  252. package/dist/esm/utils/instructions/verifySignature.d.ts.map +1 -0
  253. package/dist/esm/utils/instructions/verifySignature.js +89 -0
  254. package/dist/esm/utils/instructions/verifySignature.js.map +1 -0
  255. package/dist/esm/utils/program.d.ts +8 -0
  256. package/dist/esm/utils/program.d.ts.map +1 -0
  257. package/dist/esm/utils/program.js +15 -0
  258. package/dist/esm/utils/program.js.map +1 -0
  259. package/dist/tsconfig.cjs.tsbuildinfo +1 -0
  260. package/dist/tsconfig.esm.tsbuildinfo +1 -0
  261. package/package.json +57 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"initialize.d.ts","sourceRoot":"","sources":["../../../../src/utils/instructions/initialize.ts"],"names":[],"mappings":";AAAA,OAAO,EACL,UAAU,EACV,SAAS,EACT,iBAAiB,EAIjB,sBAAsB,EACvB,MAAM,iBAAiB,CAAC;AASzB,wBAAgB,2BAA2B,CACzC,UAAU,EAAE,UAAU,EACtB,iBAAiB,EAAE,iBAAiB,EACpC,KAAK,EAAE,iBAAiB,EACxB,yBAAyB,EAAE,MAAM,EACjC,GAAG,EAAE,MAAM,EACX,gBAAgB,EAAE,MAAM,EAAE,GACzB,sBAAsB,CAgBxB;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,SAAS,CAAC;IAClB,WAAW,EAAE,SAAS,CAAC;IACvB,YAAY,EAAE,SAAS,CAAC;IACxB,KAAK,EAAE,SAAS,CAAC;IACjB,KAAK,EAAE,SAAS,CAAC;IACjB,IAAI,EAAE,SAAS,CAAC;IAChB,aAAa,EAAE,SAAS,CAAC;CAC1B;AAED,wBAAgB,qBAAqB,CACnC,iBAAiB,EAAE,iBAAiB,EACpC,KAAK,EAAE,iBAAiB,GACvB,kBAAkB,CAUpB"}
@@ -0,0 +1,29 @@
1
+ import { PublicKey, SystemProgram, SYSVAR_CLOCK_PUBKEY, SYSVAR_RENT_PUBKEY, } from '@solana/web3.js';
2
+ import { createReadOnlyWormholeProgramInterface } from '../program';
3
+ import { deriveFeeCollectorKey, deriveGuardianSetKey, deriveWormholeBridgeDataKey, } from '../accounts';
4
+ import BN from 'bn.js';
5
+ export function createInitializeInstruction(connection, wormholeProgramId, payer, guardianSetExpirationTime, fee, initialGuardians) {
6
+ const methods = createReadOnlyWormholeProgramInterface(wormholeProgramId, connection).methods.initialize(guardianSetExpirationTime, new BN(fee.toString()), [
7
+ ...initialGuardians,
8
+ ]);
9
+ // @ts-ignore
10
+ return methods._ixFn(...methods._args, {
11
+ accounts: getInitializeAccounts(wormholeProgramId, payer),
12
+ signers: undefined,
13
+ remainingAccounts: undefined,
14
+ preInstructions: undefined,
15
+ postInstructions: undefined,
16
+ });
17
+ }
18
+ export function getInitializeAccounts(wormholeProgramId, payer) {
19
+ return {
20
+ bridge: deriveWormholeBridgeDataKey(wormholeProgramId),
21
+ guardianSet: deriveGuardianSetKey(wormholeProgramId, 0),
22
+ feeCollector: deriveFeeCollectorKey(wormholeProgramId),
23
+ payer: new PublicKey(payer),
24
+ clock: SYSVAR_CLOCK_PUBKEY,
25
+ rent: SYSVAR_RENT_PUBKEY,
26
+ systemProgram: SystemProgram.programId,
27
+ };
28
+ }
29
+ //# sourceMappingURL=initialize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"initialize.js","sourceRoot":"","sources":["../../../../src/utils/instructions/initialize.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,SAAS,EAET,aAAa,EACb,mBAAmB,EACnB,kBAAkB,GAEnB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,sCAAsC,EAAE,MAAM,YAAY,CAAC;AACpE,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,2BAA2B,GAC5B,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,MAAM,OAAO,CAAC;AAEvB,MAAM,UAAU,2BAA2B,CACzC,UAAsB,EACtB,iBAAoC,EACpC,KAAwB,EACxB,yBAAiC,EACjC,GAAW,EACX,gBAA0B;IAE1B,MAAM,OAAO,GAAG,sCAAsC,CACpD,iBAAiB,EACjB,UAAU,CACX,CAAC,OAAO,CAAC,UAAU,CAAC,yBAAyB,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,EAAE;QACtE,GAAG,gBAAgB;KACpB,CAAC,CAAC;IAEH,aAAa;IACb,OAAO,OAAO,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,KAAK,EAAE;QACrC,QAAQ,EAAE,qBAAqB,CAAC,iBAAiB,EAAE,KAAK,CAAQ;QAChE,OAAO,EAAE,SAAS;QAClB,iBAAiB,EAAE,SAAS;QAC5B,eAAe,EAAE,SAAS;QAC1B,gBAAgB,EAAE,SAAS;KAC5B,CAAC,CAAC;AACL,CAAC;AAYD,MAAM,UAAU,qBAAqB,CACnC,iBAAoC,EACpC,KAAwB;IAExB,OAAO;QACL,MAAM,EAAE,2BAA2B,CAAC,iBAAiB,CAAC;QACtD,WAAW,EAAE,oBAAoB,CAAC,iBAAiB,EAAE,CAAC,CAAC;QACvD,YAAY,EAAE,qBAAqB,CAAC,iBAAiB,CAAC;QACtD,KAAK,EAAE,IAAI,SAAS,CAAC,KAAK,CAAC;QAC3B,KAAK,EAAE,mBAAmB;QAC1B,IAAI,EAAE,kBAAkB;QACxB,aAAa,EAAE,aAAa,CAAC,SAAS;KACvC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { Connection, PublicKey, PublicKeyInitData, TransactionInstruction } from '@solana/web3.js';
2
+ /** All accounts required to make a cross-program invocation with the Core Bridge program */
3
+ export interface PostMessageAccounts {
4
+ bridge: PublicKey;
5
+ message: PublicKey;
6
+ emitter: PublicKey;
7
+ sequence: PublicKey;
8
+ payer: PublicKey;
9
+ feeCollector: PublicKey;
10
+ clock: PublicKey;
11
+ rent: PublicKey;
12
+ systemProgram: PublicKey;
13
+ }
14
+ export declare function createPostMessageInstruction(connection: Connection, wormholeProgramId: PublicKeyInitData, payer: PublicKeyInitData, messageAccount: PublicKeyInitData, payload: Uint8Array, nonce: number, consistencyLevel: number): TransactionInstruction;
15
+ export declare function getPostMessageAccounts(wormholeProgramId: PublicKeyInitData, payer: PublicKeyInitData, message: PublicKeyInitData, emitter?: PublicKeyInitData): PostMessageAccounts;
16
+ //# sourceMappingURL=postMessage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postMessage.d.ts","sourceRoot":"","sources":["../../../../src/utils/instructions/postMessage.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,SAAS,EACT,iBAAiB,EAIjB,sBAAsB,EACvB,MAAM,iBAAiB,CAAC;AASzB,4FAA4F;AAC5F,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,SAAS,CAAC;IAClB,OAAO,EAAE,SAAS,CAAC;IACnB,OAAO,EAAE,SAAS,CAAC;IACnB,QAAQ,EAAE,SAAS,CAAC;IACpB,KAAK,EAAE,SAAS,CAAC;IACjB,YAAY,EAAE,SAAS,CAAC;IACxB,KAAK,EAAE,SAAS,CAAC;IACjB,IAAI,EAAE,SAAS,CAAC;IAChB,aAAa,EAAE,SAAS,CAAC;CAC1B;AAED,wBAAgB,4BAA4B,CAC1C,UAAU,EAAE,UAAU,EACtB,iBAAiB,EAAE,iBAAiB,EACpC,KAAK,EAAE,iBAAiB,EACxB,cAAc,EAAE,iBAAiB,EACjC,OAAO,EAAE,UAAU,EACnB,KAAK,EAAE,MAAM,EACb,gBAAgB,EAAE,MAAM,GACvB,sBAAsB,CAcxB;AAED,wBAAgB,sBAAsB,CACpC,iBAAiB,EAAE,iBAAiB,EACpC,KAAK,EAAE,iBAAiB,EACxB,OAAO,EAAE,iBAAiB,EAC1B,OAAO,CAAC,EAAE,iBAAiB,GAC1B,mBAAmB,CAmBrB"}
@@ -0,0 +1,36 @@
1
+ import { PublicKey, SYSVAR_CLOCK_PUBKEY, SYSVAR_RENT_PUBKEY, SystemProgram, } from '@solana/web3.js';
2
+ import { deriveWormholeBridgeDataKey, deriveFeeCollectorKey, deriveEmitterSequenceKey, getEmitterKeys, } from '../accounts';
3
+ import { createReadOnlyWormholeProgramInterface } from '../program';
4
+ export function createPostMessageInstruction(connection, wormholeProgramId, payer, messageAccount, payload, nonce, consistencyLevel) {
5
+ const methods = createReadOnlyWormholeProgramInterface(wormholeProgramId, connection).methods.postMessage(nonce, Buffer.from(payload), consistencyLevel);
6
+ // @ts-ignore
7
+ return methods._ixFn(...methods._args, {
8
+ accounts: getPostMessageAccounts(wormholeProgramId, payer, messageAccount),
9
+ signers: undefined,
10
+ remainingAccounts: undefined,
11
+ preInstructions: undefined,
12
+ postInstructions: undefined,
13
+ });
14
+ }
15
+ export function getPostMessageAccounts(wormholeProgramId, payer, message, emitter) {
16
+ let sequence;
17
+ if (emitter) {
18
+ ({ emitter, sequence } = getEmitterKeys(emitter, wormholeProgramId));
19
+ }
20
+ else {
21
+ emitter = payer;
22
+ sequence = deriveEmitterSequenceKey(emitter, wormholeProgramId);
23
+ }
24
+ return {
25
+ bridge: deriveWormholeBridgeDataKey(wormholeProgramId),
26
+ message: new PublicKey(message),
27
+ emitter: new PublicKey(emitter),
28
+ sequence,
29
+ payer: new PublicKey(payer),
30
+ feeCollector: deriveFeeCollectorKey(wormholeProgramId),
31
+ clock: SYSVAR_CLOCK_PUBKEY,
32
+ rent: SYSVAR_RENT_PUBKEY,
33
+ systemProgram: SystemProgram.programId,
34
+ };
35
+ }
36
+ //# sourceMappingURL=postMessage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postMessage.js","sourceRoot":"","sources":["../../../../src/utils/instructions/postMessage.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,SAAS,EAET,mBAAmB,EACnB,kBAAkB,EAClB,aAAa,GAEd,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,2BAA2B,EAC3B,qBAAqB,EACrB,wBAAwB,EACxB,cAAc,GACf,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,sCAAsC,EAAE,MAAM,YAAY,CAAC;AAepE,MAAM,UAAU,4BAA4B,CAC1C,UAAsB,EACtB,iBAAoC,EACpC,KAAwB,EACxB,cAAiC,EACjC,OAAmB,EACnB,KAAa,EACb,gBAAwB;IAExB,MAAM,OAAO,GAAG,sCAAsC,CACpD,iBAAiB,EACjB,UAAU,CACX,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,gBAAgB,CAAC,CAAC;IAErE,aAAa;IACb,OAAO,OAAO,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,KAAK,EAAE;QACrC,QAAQ,EAAE,sBAAsB,CAAC,iBAAiB,EAAE,KAAK,EAAE,cAAc,CAAC;QAC1E,OAAO,EAAE,SAAS;QAClB,iBAAiB,EAAE,SAAS;QAC5B,eAAe,EAAE,SAAS;QAC1B,gBAAgB,EAAE,SAAS;KAC5B,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,iBAAoC,EACpC,KAAwB,EACxB,OAA0B,EAC1B,OAA2B;IAE3B,IAAI,QAAQ,CAAC;IACb,IAAI,OAAO,EAAE;QACX,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,cAAc,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAC;KACtE;SAAM;QACL,OAAO,GAAG,KAAK,CAAC;QAChB,QAAQ,GAAG,wBAAwB,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;KACjE;IACD,OAAO;QACL,MAAM,EAAE,2BAA2B,CAAC,iBAAiB,CAAC;QACtD,OAAO,EAAE,IAAI,SAAS,CAAC,OAAO,CAAC;QAC/B,OAAO,EAAE,IAAI,SAAS,CAAC,OAAO,CAAC;QAC/B,QAAQ;QACR,KAAK,EAAE,IAAI,SAAS,CAAC,KAAK,CAAC;QAC3B,YAAY,EAAE,qBAAqB,CAAC,iBAAiB,CAAC;QACtD,KAAK,EAAE,mBAAmB;QAC1B,IAAI,EAAE,kBAAkB;QACxB,aAAa,EAAE,aAAa,CAAC,SAAS;KACvC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,28 @@
1
+ import { PublicKey, PublicKeyInitData, TransactionInstruction, Connection } from '@solana/web3.js';
2
+ import { VAA } from '@wormhole-foundation/sdk-connect';
3
+ /**
4
+ * Make {@link TransactionInstruction} for `post_vaa` instruction.
5
+ *
6
+ * `signatureSet` is a {@link @solana/web3.Keypair} generated outside of this method, which was used
7
+ * to write signatures and the message hash to.
8
+ *
9
+ * https://github.com/certusone/wormhole/blob/main/solana/bridge/program/src/api/post_vaa.rs
10
+ *
11
+ * @param {PublicKeyInitData} wormholeProgramId - wormhole program address
12
+ * @param {PublicKeyInitData} payer - transaction signer address
13
+ * @param {SignedVaa | ParsedVaa} vaa - either signed VAA bytes or parsed VAA
14
+ * @param {PublicKeyInitData} signatureSet - key for signature set account
15
+ */
16
+ export declare function createPostVaaInstruction(connection: Connection, wormholeProgramId: PublicKeyInitData, payer: PublicKeyInitData, vaa: VAA, signatureSet: PublicKeyInitData): TransactionInstruction;
17
+ export interface PostVaaAccounts {
18
+ guardianSet: PublicKey;
19
+ bridge: PublicKey;
20
+ signatureSet: PublicKey;
21
+ vaa: PublicKey;
22
+ payer: PublicKey;
23
+ clock: PublicKey;
24
+ rent: PublicKey;
25
+ systemProgram: PublicKey;
26
+ }
27
+ export declare function getPostVaaAccounts(wormholeProgramId: PublicKeyInitData, payer: PublicKeyInitData, signatureSet: PublicKeyInitData, vaa: VAA): PostVaaAccounts;
28
+ //# sourceMappingURL=postVaa.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postVaa.d.ts","sourceRoot":"","sources":["../../../../src/utils/instructions/postVaa.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,iBAAiB,EACjB,sBAAsB,EAItB,UAAU,EACX,MAAM,iBAAiB,CAAC;AAOzB,OAAO,EACL,GAAG,EAGJ,MAAM,kCAAkC,CAAC;AAG1C;;;;;;;;;;;;GAYG;AACH,wBAAgB,wBAAwB,CACtC,UAAU,EAAE,UAAU,EACtB,iBAAiB,EAAE,iBAAiB,EACpC,KAAK,EAAE,iBAAiB,EACxB,GAAG,EAAE,GAAG,EACR,YAAY,EAAE,iBAAiB,GAC9B,sBAAsB,CAyBxB;AAED,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,SAAS,CAAC;IACvB,MAAM,EAAE,SAAS,CAAC;IAClB,YAAY,EAAE,SAAS,CAAC;IACxB,GAAG,EAAE,SAAS,CAAC;IACf,KAAK,EAAE,SAAS,CAAC;IACjB,KAAK,EAAE,SAAS,CAAC;IACjB,IAAI,EAAE,SAAS,CAAC;IAChB,aAAa,EAAE,SAAS,CAAC;CAC1B;AAED,wBAAgB,kBAAkB,CAChC,iBAAiB,EAAE,iBAAiB,EACpC,KAAK,EAAE,iBAAiB,EACxB,YAAY,EAAE,iBAAiB,EAC/B,GAAG,EAAE,GAAG,GACP,eAAe,CAWjB"}
@@ -0,0 +1,45 @@
1
+ import { PublicKey, SYSVAR_CLOCK_PUBKEY, SYSVAR_RENT_PUBKEY, SystemProgram, } from '@solana/web3.js';
2
+ import { createReadOnlyWormholeProgramInterface } from '../program';
3
+ import { deriveWormholeBridgeDataKey, deriveGuardianSetKey, derivePostedVaaKey, } from '../accounts';
4
+ import { serializePayload, toChainId, } from '@wormhole-foundation/sdk-connect';
5
+ import BN from 'bn.js';
6
+ /**
7
+ * Make {@link TransactionInstruction} for `post_vaa` instruction.
8
+ *
9
+ * `signatureSet` is a {@link @solana/web3.Keypair} generated outside of this method, which was used
10
+ * to write signatures and the message hash to.
11
+ *
12
+ * https://github.com/certusone/wormhole/blob/main/solana/bridge/program/src/api/post_vaa.rs
13
+ *
14
+ * @param {PublicKeyInitData} wormholeProgramId - wormhole program address
15
+ * @param {PublicKeyInitData} payer - transaction signer address
16
+ * @param {SignedVaa | ParsedVaa} vaa - either signed VAA bytes or parsed VAA
17
+ * @param {PublicKeyInitData} signatureSet - key for signature set account
18
+ */
19
+ export function createPostVaaInstruction(connection, wormholeProgramId, payer, vaa, signatureSet) {
20
+ const methods = createReadOnlyWormholeProgramInterface(wormholeProgramId, connection).methods.postVaa(1, // TODO: hardcoded VAA version
21
+ vaa.guardianSet, vaa.timestamp, vaa.nonce, toChainId(vaa.emitterChain), [...vaa.emitterAddress.toUint8Array()], new BN(vaa.sequence.toString()), vaa.consistencyLevel,
22
+ // Note: This _must_ be a Buffer, a Uint8Array does not work
23
+ Buffer.from(serializePayload(vaa.payloadLiteral, vaa.payload)));
24
+ // @ts-ignore
25
+ return methods._ixFn(...methods._args, {
26
+ accounts: getPostVaaAccounts(wormholeProgramId, payer, signatureSet, vaa),
27
+ signers: undefined,
28
+ remainingAccounts: undefined,
29
+ preInstructions: undefined,
30
+ postInstructions: undefined,
31
+ });
32
+ }
33
+ export function getPostVaaAccounts(wormholeProgramId, payer, signatureSet, vaa) {
34
+ return {
35
+ guardianSet: deriveGuardianSetKey(wormholeProgramId, vaa.guardianSet),
36
+ bridge: deriveWormholeBridgeDataKey(wormholeProgramId),
37
+ signatureSet: new PublicKey(signatureSet),
38
+ vaa: derivePostedVaaKey(wormholeProgramId, Buffer.from(vaa.hash)),
39
+ payer: new PublicKey(payer),
40
+ clock: SYSVAR_CLOCK_PUBKEY,
41
+ rent: SYSVAR_RENT_PUBKEY,
42
+ systemProgram: SystemProgram.programId,
43
+ };
44
+ }
45
+ //# sourceMappingURL=postVaa.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postVaa.js","sourceRoot":"","sources":["../../../../src/utils/instructions/postVaa.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EAGT,mBAAmB,EACnB,kBAAkB,EAClB,aAAa,GAEd,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,sCAAsC,EAAE,MAAM,YAAY,CAAC;AACpE,OAAO,EACL,2BAA2B,EAC3B,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,aAAa,CAAC;AACrB,OAAO,EAEL,gBAAgB,EAChB,SAAS,GACV,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,MAAM,OAAO,CAAC;AAEvB;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,wBAAwB,CACtC,UAAsB,EACtB,iBAAoC,EACpC,KAAwB,EACxB,GAAQ,EACR,YAA+B;IAE/B,MAAM,OAAO,GAAG,sCAAsC,CACpD,iBAAiB,EACjB,UAAU,CACX,CAAC,OAAO,CAAC,OAAO,CACf,CAAC,EAAE,8BAA8B;IACjC,GAAG,CAAC,WAAW,EACf,GAAG,CAAC,SAAS,EACb,GAAG,CAAC,KAAK,EACT,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,EAC3B,CAAC,GAAG,GAAG,CAAC,cAAc,CAAC,YAAY,EAAE,CAAC,EACtC,IAAI,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,EAC/B,GAAG,CAAC,gBAAgB;IACpB,4DAA4D;IAC5D,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,cAAc,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAC/D,CAAC;IAEF,aAAa;IACb,OAAO,OAAO,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,KAAK,EAAE;QACrC,QAAQ,EAAE,kBAAkB,CAAC,iBAAiB,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,CAAC;QACzE,OAAO,EAAE,SAAS;QAClB,iBAAiB,EAAE,SAAS;QAC5B,eAAe,EAAE,SAAS;QAC1B,gBAAgB,EAAE,SAAS;KAC5B,CAAC,CAAC;AACL,CAAC;AAaD,MAAM,UAAU,kBAAkB,CAChC,iBAAoC,EACpC,KAAwB,EACxB,YAA+B,EAC/B,GAAQ;IAER,OAAO;QACL,WAAW,EAAE,oBAAoB,CAAC,iBAAiB,EAAE,GAAG,CAAC,WAAW,CAAC;QACrE,MAAM,EAAE,2BAA2B,CAAC,iBAAiB,CAAC;QACtD,YAAY,EAAE,IAAI,SAAS,CAAC,YAAY,CAAC;QACzC,GAAG,EAAE,kBAAkB,CAAC,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACjE,KAAK,EAAE,IAAI,SAAS,CAAC,KAAK,CAAC;QAC3B,KAAK,EAAE,mBAAmB;QAC1B,IAAI,EAAE,kBAAkB;QACxB,aAAa,EAAE,aAAa,CAAC,SAAS;KACvC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,30 @@
1
+ /// <reference types="node" />
2
+ import { TransactionInstruction } from '@solana/web3.js';
3
+ export declare const SIGNATURE_LENGTH = 65;
4
+ export declare const ETHEREUM_KEY_LENGTH = 20;
5
+ /**
6
+ * Create {@link TransactionInstruction} for {@link Secp256k1Program}.
7
+ *
8
+ * @param {Buffer[]} signatures - 65-byte signatures (64 bytes + 1 byte recovery id)
9
+ * @param {Buffer[]} keys - 20-byte ethereum public keys
10
+ * @param {Buffer} message - 32-byte hash
11
+ * @returns Solana instruction for Secp256k1 program
12
+ */
13
+ export declare function createSecp256k1Instruction(signatures: Buffer[], keys: Buffer[], message: Buffer): TransactionInstruction;
14
+ /**
15
+ * Secp256k1SignatureOffsets serializer
16
+ *
17
+ * See {@link https://docs.solana.com/developing/runtime-facilities/programs#secp256k1-program} for more info.
18
+ */
19
+ export declare class Secp256k1SignatureOffsets {
20
+ /**
21
+ * Serialize multiple signatures, ethereum public keys and message as Secp256k1 instruction data.
22
+ *
23
+ * @param {Buffer[]} signatures - 65-byte signatures (64 + 1 recovery id)
24
+ * @param {Buffer[]} keys - ethereum public keys
25
+ * @param {Buffer} message - 32-byte hash
26
+ * @returns serialized Secp256k1 instruction data
27
+ */
28
+ static serialize(signatures: Buffer[], keys: Buffer[], message: Buffer): Buffer;
29
+ }
30
+ //# sourceMappingURL=secp256k1.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secp256k1.d.ts","sourceRoot":"","sources":["../../../../src/utils/instructions/secp256k1.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,sBAAsB,EAAoB,MAAM,iBAAiB,CAAC;AAE3E,eAAO,MAAM,gBAAgB,KAAK,CAAC;AACnC,eAAO,MAAM,mBAAmB,KAAK,CAAC;AAEtC;;;;;;;GAOG;AACH,wBAAgB,0BAA0B,CACxC,UAAU,EAAE,MAAM,EAAE,EACpB,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,EAAE,MAAM,GACd,sBAAsB,CAMxB;AAED;;;;GAIG;AACH,qBAAa,yBAAyB;IAgCpC;;;;;;;OAOG;IACH,MAAM,CAAC,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM;CAqDvE"}
@@ -0,0 +1,106 @@
1
+ import { TransactionInstruction, Secp256k1Program } from '@solana/web3.js';
2
+ export const SIGNATURE_LENGTH = 65;
3
+ export const ETHEREUM_KEY_LENGTH = 20;
4
+ /**
5
+ * Create {@link TransactionInstruction} for {@link Secp256k1Program}.
6
+ *
7
+ * @param {Buffer[]} signatures - 65-byte signatures (64 bytes + 1 byte recovery id)
8
+ * @param {Buffer[]} keys - 20-byte ethereum public keys
9
+ * @param {Buffer} message - 32-byte hash
10
+ * @returns Solana instruction for Secp256k1 program
11
+ */
12
+ export function createSecp256k1Instruction(signatures, keys, message) {
13
+ return new TransactionInstruction({
14
+ keys: [],
15
+ programId: Secp256k1Program.programId,
16
+ data: Secp256k1SignatureOffsets.serialize(signatures, keys, message),
17
+ });
18
+ }
19
+ /**
20
+ * Secp256k1SignatureOffsets serializer
21
+ *
22
+ * See {@link https://docs.solana.com/developing/runtime-facilities/programs#secp256k1-program} for more info.
23
+ */
24
+ export class Secp256k1SignatureOffsets {
25
+ // https://docs.solana.com/developing/runtime-facilities/programs#secp256k1-program
26
+ //
27
+ // struct Secp256k1SignatureOffsets {
28
+ // secp_signature_key_offset: u16, // offset to [signature,recovery_id,etherum_address] of 64+1+20 bytes
29
+ // secp_signature_instruction_index: u8, // instruction index to find data
30
+ // secp_pubkey_offset: u16, // offset to [signature,recovery_id] of 64+1 bytes
31
+ // secp_signature_instruction_index: u8, // instruction index to find data
32
+ // secp_message_data_offset: u16, // offset to start of message data
33
+ // secp_message_data_size: u16, // size of message data
34
+ // secp_message_instruction_index: u8, // index of instruction data to get message data
35
+ // }
36
+ //
37
+ // Pseudo code of the operation:
38
+ //
39
+ // process_instruction() {
40
+ // for i in 0..count {
41
+ // // i'th index values referenced:
42
+ // instructions = &transaction.message().instructions
43
+ // signature = instructions[secp_signature_instruction_index].data[secp_signature_offset..secp_signature_offset + 64]
44
+ // recovery_id = instructions[secp_signature_instruction_index].data[secp_signature_offset + 64]
45
+ // ref_eth_pubkey = instructions[secp_pubkey_instruction_index].data[secp_pubkey_offset..secp_pubkey_offset + 32]
46
+ // message_hash = keccak256(instructions[secp_message_instruction_index].data[secp_message_data_offset..secp_message_data_offset + secp_message_data_size])
47
+ // pubkey = ecrecover(signature, recovery_id, message_hash)
48
+ // eth_pubkey = keccak256(pubkey[1..])[12..]
49
+ // if eth_pubkey != ref_eth_pubkey {
50
+ // return Error
51
+ // }
52
+ // }
53
+ // return Success
54
+ // }
55
+ /**
56
+ * Serialize multiple signatures, ethereum public keys and message as Secp256k1 instruction data.
57
+ *
58
+ * @param {Buffer[]} signatures - 65-byte signatures (64 + 1 recovery id)
59
+ * @param {Buffer[]} keys - ethereum public keys
60
+ * @param {Buffer} message - 32-byte hash
61
+ * @returns serialized Secp256k1 instruction data
62
+ */
63
+ static serialize(signatures, keys, message) {
64
+ if (signatures.length == 0) {
65
+ throw Error('signatures.length == 0');
66
+ }
67
+ if (signatures.length != keys.length) {
68
+ throw Error('signatures.length != keys.length');
69
+ }
70
+ if (message.length != 32) {
71
+ throw Error('message.length != 32');
72
+ }
73
+ const numSignatures = signatures.length;
74
+ const offsetSpan = 11;
75
+ const dataLoc = 1 + numSignatures * offsetSpan;
76
+ const dataLen = SIGNATURE_LENGTH + ETHEREUM_KEY_LENGTH; // 65 signature size + 20 eth pubkey size
77
+ const messageDataOffset = dataLoc + numSignatures * dataLen;
78
+ const messageDataSize = 32;
79
+ const serialized = Buffer.alloc(messageDataOffset + messageDataSize);
80
+ serialized.writeUInt8(numSignatures, 0);
81
+ serialized.write(message.toString('hex'), messageDataOffset, 'hex');
82
+ for (let i = 0; i < numSignatures; ++i) {
83
+ const signature = signatures.at(i);
84
+ if (signature?.length != SIGNATURE_LENGTH) {
85
+ throw Error(`signatures[${i}].length != 65`);
86
+ }
87
+ const key = keys.at(i);
88
+ if (key?.length != ETHEREUM_KEY_LENGTH) {
89
+ throw Error(`keys[${i}].length != 20`);
90
+ }
91
+ const signatureOffset = dataLoc + dataLen * i;
92
+ const ethAddressOffset = signatureOffset + 65;
93
+ serialized.writeUInt16LE(signatureOffset, 1 + i * offsetSpan);
94
+ serialized.writeUInt8(0, 3 + i * offsetSpan);
95
+ serialized.writeUInt16LE(ethAddressOffset, 4 + i * offsetSpan);
96
+ serialized.writeUInt8(0, 6 + i * offsetSpan);
97
+ serialized.writeUInt16LE(messageDataOffset, 7 + i * offsetSpan);
98
+ serialized.writeUInt16LE(messageDataSize, 9 + i * offsetSpan);
99
+ serialized.writeUInt8(0, 10 + i * offsetSpan);
100
+ serialized.write(signature.toString('hex'), signatureOffset, 'hex');
101
+ serialized.write(key.toString('hex'), ethAddressOffset, 'hex');
102
+ }
103
+ return serialized;
104
+ }
105
+ }
106
+ //# sourceMappingURL=secp256k1.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secp256k1.js","sourceRoot":"","sources":["../../../../src/utils/instructions/secp256k1.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import { Commitment, Connection, PublicKey, PublicKeyInitData, TransactionInstruction } from '@solana/web3.js';
2
+ import { VAA } from '@wormhole-foundation/sdk-connect';
3
+ /**
4
+ * Signatures are batched in groups of 7 due to instruction
5
+ * data limits. These signatures are passed through to the Secp256k1
6
+ * program to verify that the guardian public keys can be recovered.
7
+ * This instruction is paired with `verify_signatures` to validate the
8
+ * pubkey recovery.
9
+ *
10
+ * There are at most three pairs of instructions created.
11
+ *
12
+ * https://github.com/certusone/wormhole/blob/main/solana/bridge/program/src/api/verify_signature.rs
13
+ *
14
+ *
15
+ * @param {Connection} connection - Solana web3 connection
16
+ * @param {PublicKeyInitData} wormholeProgramId - wormhole program address
17
+ * @param {PublicKeyInitData} payer - transaction signer address
18
+ * @param {SignedVaa | ParsedVaa} vaa - either signed VAA bytes or parsed VAA
19
+ * @param {PublicKeyInitData} signatureSet - address to account of verified signatures
20
+ * @param {web3.ConfirmOptions} [options] - Solana confirmation options
21
+ */
22
+ export declare function createVerifySignaturesInstructions(connection: Connection, wormholeProgramId: PublicKeyInitData, payer: PublicKeyInitData, vaa: VAA<any>, signatureSet: PublicKeyInitData, commitment?: Commitment): Promise<TransactionInstruction[]>;
23
+ export interface VerifySignatureAccounts {
24
+ payer: PublicKey;
25
+ guardianSet: PublicKey;
26
+ signatureSet: PublicKey;
27
+ instructions: PublicKey;
28
+ rent: PublicKey;
29
+ systemProgram: PublicKey;
30
+ }
31
+ export declare function getVerifySignatureAccounts(wormholeProgramId: PublicKeyInitData, payer: PublicKeyInitData, signatureSet: PublicKeyInitData, vaa: VAA): VerifySignatureAccounts;
32
+ //# sourceMappingURL=verifySignature.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verifySignature.d.ts","sourceRoot":"","sources":["../../../../src/utils/instructions/verifySignature.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,UAAU,EACV,SAAS,EACT,iBAAiB,EAIjB,sBAAsB,EACvB,MAAM,iBAAiB,CAAC;AAOzB,OAAO,EAAE,GAAG,EAAE,MAAM,kCAAkC,CAAC;AAKvD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,kCAAkC,CACtD,UAAU,EAAE,UAAU,EACtB,iBAAiB,EAAE,iBAAiB,EACpC,KAAK,EAAE,iBAAiB,EACxB,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,EACb,YAAY,EAAE,iBAAiB,EAC/B,UAAU,CAAC,EAAE,UAAU,GACtB,OAAO,CAAC,sBAAsB,EAAE,CAAC,CAmDnC;AA8CD,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,SAAS,CAAC;IACjB,WAAW,EAAE,SAAS,CAAC;IACvB,YAAY,EAAE,SAAS,CAAC;IACxB,YAAY,EAAE,SAAS,CAAC;IACxB,IAAI,EAAE,SAAS,CAAC;IAChB,aAAa,EAAE,SAAS,CAAC;CAC1B;AAED,wBAAgB,0BAA0B,CACxC,iBAAiB,EAAE,iBAAiB,EACpC,KAAK,EAAE,iBAAiB,EACxB,YAAY,EAAE,iBAAiB,EAC/B,GAAG,EAAE,GAAG,GACP,uBAAuB,CASzB"}
@@ -0,0 +1,89 @@
1
+ import { PublicKey, SystemProgram, SYSVAR_INSTRUCTIONS_PUBKEY, SYSVAR_RENT_PUBKEY, } from '@solana/web3.js';
2
+ import { getGuardianSet, deriveGuardianSetKey, getWormholeBridgeData, } from '../accounts';
3
+ import { createReadOnlyWormholeProgramInterface } from '../program';
4
+ import { createSecp256k1Instruction } from './secp256k1';
5
+ const MAX_LEN_GUARDIAN_KEYS = 19;
6
+ /**
7
+ * Signatures are batched in groups of 7 due to instruction
8
+ * data limits. These signatures are passed through to the Secp256k1
9
+ * program to verify that the guardian public keys can be recovered.
10
+ * This instruction is paired with `verify_signatures` to validate the
11
+ * pubkey recovery.
12
+ *
13
+ * There are at most three pairs of instructions created.
14
+ *
15
+ * https://github.com/certusone/wormhole/blob/main/solana/bridge/program/src/api/verify_signature.rs
16
+ *
17
+ *
18
+ * @param {Connection} connection - Solana web3 connection
19
+ * @param {PublicKeyInitData} wormholeProgramId - wormhole program address
20
+ * @param {PublicKeyInitData} payer - transaction signer address
21
+ * @param {SignedVaa | ParsedVaa} vaa - either signed VAA bytes or parsed VAA
22
+ * @param {PublicKeyInitData} signatureSet - address to account of verified signatures
23
+ * @param {web3.ConfirmOptions} [options] - Solana confirmation options
24
+ */
25
+ export async function createVerifySignaturesInstructions(connection, wormholeProgramId, payer, vaa, signatureSet, commitment) {
26
+ const guardianSetIndex = vaa.guardianSet;
27
+ const info = await getWormholeBridgeData(connection, wormholeProgramId);
28
+ if (guardianSetIndex != info.guardianSetIndex)
29
+ throw new Error('guardianSetIndex != config.guardianSetIndex');
30
+ const guardianSetData = await getGuardianSet(connection, wormholeProgramId, guardianSetIndex, commitment);
31
+ const guardianSignatures = vaa.signatures;
32
+ const guardianKeys = guardianSetData.keys;
33
+ const batchSize = 7;
34
+ const instructions = [];
35
+ for (let i = 0; i < Math.ceil(guardianSignatures.length / batchSize); ++i) {
36
+ const start = i * batchSize;
37
+ const end = Math.min(guardianSignatures.length, (i + 1) * batchSize);
38
+ const signatureStatus = new Array(MAX_LEN_GUARDIAN_KEYS).fill(-1);
39
+ const signatures = [];
40
+ const keys = [];
41
+ for (let j = 0; j < end - start; ++j) {
42
+ const item = guardianSignatures.at(j + start);
43
+ signatures.push(Buffer.from(item.signature.encode()));
44
+ keys.push(guardianKeys.at(item.guardianIndex));
45
+ signatureStatus[item.guardianIndex] = j;
46
+ }
47
+ instructions.push(createSecp256k1Instruction(signatures, keys, Buffer.from(vaa.hash)));
48
+ instructions.push(createVerifySignaturesInstruction(connection, wormholeProgramId, payer, vaa, signatureSet, signatureStatus));
49
+ }
50
+ return instructions;
51
+ }
52
+ /**
53
+ * Make {@link TransactionInstruction} for `verify_signatures` instruction.
54
+ *
55
+ * This is used in {@link createVerifySignaturesInstructions} for each batch of signatures being verified.
56
+ * `signatureSet` is a {@link @solana/web3.Keypair} generated outside of this method, used
57
+ * for writing signatures and the message hash to.
58
+ *
59
+ * https://github.com/certusone/wormhole/blob/main/solana/bridge/program/src/api/verify_signature.rs
60
+ *
61
+ * @param {PublicKeyInitData} wormholeProgramId - wormhole program address
62
+ * @param {PublicKeyInitData} payer - transaction signer address
63
+ * @param {SignedVaa | ParsedVaa} vaa - either signed VAA (Buffer) or parsed VAA
64
+ * @param {PublicKeyInitData} signatureSet - key for signature set account
65
+ * @param {Buffer} signatureStatus - array of guardian indices
66
+ *
67
+ */
68
+ function createVerifySignaturesInstruction(connection, wormholeProgramId, payer, vaa, signatureSet, signatureStatus) {
69
+ const methods = createReadOnlyWormholeProgramInterface(wormholeProgramId, connection).methods.verifySignatures(signatureStatus);
70
+ // @ts-ignore
71
+ return methods._ixFn(...methods._args, {
72
+ accounts: getVerifySignatureAccounts(wormholeProgramId, payer, signatureSet, vaa),
73
+ signers: undefined,
74
+ remainingAccounts: undefined,
75
+ preInstructions: undefined,
76
+ postInstructions: undefined,
77
+ });
78
+ }
79
+ export function getVerifySignatureAccounts(wormholeProgramId, payer, signatureSet, vaa) {
80
+ return {
81
+ payer: new PublicKey(payer),
82
+ guardianSet: deriveGuardianSetKey(wormholeProgramId, vaa.guardianSet),
83
+ signatureSet: new PublicKey(signatureSet),
84
+ instructions: SYSVAR_INSTRUCTIONS_PUBKEY,
85
+ rent: SYSVAR_RENT_PUBKEY,
86
+ systemProgram: SystemProgram.programId,
87
+ };
88
+ }
89
+ //# sourceMappingURL=verifySignature.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verifySignature.js","sourceRoot":"","sources":["../../../../src/utils/instructions/verifySignature.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { Connection, PublicKeyInitData } from '@solana/web3.js';
2
+ import { Program, Provider } from '@project-serum/anchor';
3
+ import { WormholeCoder } from './coder';
4
+ import { Wormhole } from '../types';
5
+ export declare function createWormholeProgramInterface(programId: PublicKeyInitData, provider?: Provider): Program<Wormhole>;
6
+ export declare function createReadOnlyWormholeProgramInterface(programId: PublicKeyInitData, connection?: Connection): Program<Wormhole>;
7
+ export declare function coder(): WormholeCoder;
8
+ //# sourceMappingURL=program.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"program.d.ts","sourceRoot":"","sources":["../../../src/utils/program.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAa,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAC3E,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAE1D,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAIpC,wBAAgB,8BAA8B,CAC5C,SAAS,EAAE,iBAAiB,EAC5B,QAAQ,CAAC,EAAE,QAAQ,GAClB,OAAO,CAAC,QAAQ,CAAC,CAOnB;AAED,wBAAgB,sCAAsC,CACpD,SAAS,EAAE,iBAAiB,EAC5B,UAAU,CAAC,EAAE,UAAU,GACtB,OAAO,CAAC,QAAQ,CAAC,CAKnB;AAED,wBAAgB,KAAK,IAAI,aAAa,CAErC"}
@@ -0,0 +1,15 @@
1
+ import { PublicKey } from '@solana/web3.js';
2
+ import { Program } from '@project-serum/anchor';
3
+ import { utils } from '@wormhole-foundation/sdk-solana';
4
+ import { WormholeCoder } from './coder';
5
+ import IDL from '../anchor-idl/wormhole.json';
6
+ export function createWormholeProgramInterface(programId, provider) {
7
+ return new Program(IDL, new PublicKey(programId), provider === undefined ? { connection: null } : provider, coder());
8
+ }
9
+ export function createReadOnlyWormholeProgramInterface(programId, connection) {
10
+ return createWormholeProgramInterface(programId, utils.createReadOnlyProvider(connection));
11
+ }
12
+ export function coder() {
13
+ return new WormholeCoder(IDL);
14
+ }
15
+ //# sourceMappingURL=program.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"program.js","sourceRoot":"","sources":["../../../src/utils/program.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,SAAS,EAAqB,MAAM,iBAAiB,CAAC;AAC3E,OAAO,EAAE,OAAO,EAAY,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,KAAK,EAAE,MAAM,iCAAiC,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAGxC,OAAO,GAAG,MAAM,6BAA6B,CAAC;AAE9C,MAAM,UAAU,8BAA8B,CAC5C,SAA4B,EAC5B,QAAmB;IAEnB,OAAO,IAAI,OAAO,CAChB,GAAe,EACf,IAAI,SAAS,CAAC,SAAS,CAAC,EACxB,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAE,EAAE,UAAU,EAAE,IAAI,EAAU,CAAC,CAAC,CAAC,QAAQ,EACjE,KAAK,EAAE,CACR,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,sCAAsC,CACpD,SAA4B,EAC5B,UAAuB;IAEvB,OAAO,8BAA8B,CACnC,SAAS,EACT,KAAK,CAAC,sBAAsB,CAAC,UAAU,CAAC,CACzC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,KAAK;IACnB,OAAO,IAAI,aAAa,CAAC,GAAe,CAAC,CAAC;AAC5C,CAAC"}