@recoillink/starknet-sdk 0.0.0-stage → 30.0.4

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 (223) hide show
  1. package/LICENSE.md +193 -0
  2. package/dist/clients/protocol.d.ts +26 -0
  3. package/dist/clients/protocol.d.ts.map +1 -0
  4. package/dist/clients/protocol.js +56 -0
  5. package/dist/clients/protocol.js.map +1 -0
  6. package/dist/clients/protocol.test.d.ts +2 -0
  7. package/dist/clients/protocol.test.d.ts.map +1 -0
  8. package/dist/clients/protocol.test.js +36 -0
  9. package/dist/clients/protocol.test.js.map +1 -0
  10. package/dist/clients/provider.d.ts +55 -0
  11. package/dist/clients/provider.d.ts.map +1 -0
  12. package/dist/clients/provider.js +432 -0
  13. package/dist/clients/provider.js.map +1 -0
  14. package/dist/clients/provider.test.d.ts +2 -0
  15. package/dist/clients/provider.test.d.ts.map +1 -0
  16. package/dist/clients/provider.test.js +271 -0
  17. package/dist/clients/provider.test.js.map +1 -0
  18. package/dist/clients/signer.d.ts +24 -0
  19. package/dist/clients/signer.d.ts.map +1 -0
  20. package/dist/clients/signer.js +200 -0
  21. package/dist/clients/signer.js.map +1 -0
  22. package/dist/clients/signer.test.d.ts +2 -0
  23. package/dist/clients/signer.test.d.ts.map +1 -0
  24. package/dist/clients/signer.test.js +232 -0
  25. package/dist/clients/signer.test.js.map +1 -0
  26. package/dist/contracts.d.ts +46 -0
  27. package/dist/contracts.d.ts.map +1 -0
  28. package/dist/contracts.js +334 -0
  29. package/dist/contracts.js.map +1 -0
  30. package/dist/contracts.test.d.ts +2 -0
  31. package/dist/contracts.test.d.ts.map +1 -0
  32. package/dist/contracts.test.js +80 -0
  33. package/dist/contracts.test.js.map +1 -0
  34. package/dist/hook/hook-artifact-manager.d.ts +18 -0
  35. package/dist/hook/hook-artifact-manager.d.ts.map +1 -0
  36. package/dist/hook/hook-artifact-manager.js +69 -0
  37. package/dist/hook/hook-artifact-manager.js.map +1 -0
  38. package/dist/hook/hook-artifact-manager.test.d.ts +2 -0
  39. package/dist/hook/hook-artifact-manager.test.d.ts.map +1 -0
  40. package/dist/hook/hook-artifact-manager.test.js +157 -0
  41. package/dist/hook/hook-artifact-manager.test.js.map +1 -0
  42. package/dist/hook/hook-query.d.ts +7 -0
  43. package/dist/hook/hook-query.d.ts.map +1 -0
  44. package/dist/hook/hook-query.js +29 -0
  45. package/dist/hook/hook-query.js.map +1 -0
  46. package/dist/hook/hook-tx.d.ts +4 -0
  47. package/dist/hook/hook-tx.d.ts.map +1 -0
  48. package/dist/hook/hook-tx.js +19 -0
  49. package/dist/hook/hook-tx.js.map +1 -0
  50. package/dist/hook/interchain-gas-paymaster-hook-artifact-manager.d.ts +5 -0
  51. package/dist/hook/interchain-gas-paymaster-hook-artifact-manager.d.ts.map +1 -0
  52. package/dist/hook/interchain-gas-paymaster-hook-artifact-manager.js +23 -0
  53. package/dist/hook/interchain-gas-paymaster-hook-artifact-manager.js.map +1 -0
  54. package/dist/hook/merkle-tree-hook-artifact-manager.d.ts +18 -0
  55. package/dist/hook/merkle-tree-hook-artifact-manager.d.ts.map +1 -0
  56. package/dist/hook/merkle-tree-hook-artifact-manager.js +41 -0
  57. package/dist/hook/merkle-tree-hook-artifact-manager.js.map +1 -0
  58. package/dist/hook/protocol-fee-hook-artifact-manager.d.ts +22 -0
  59. package/dist/hook/protocol-fee-hook-artifact-manager.d.ts.map +1 -0
  60. package/dist/hook/protocol-fee-hook-artifact-manager.js +169 -0
  61. package/dist/hook/protocol-fee-hook-artifact-manager.js.map +1 -0
  62. package/dist/hook/unknown-hook-artifact-manager.d.ts +14 -0
  63. package/dist/hook/unknown-hook-artifact-manager.d.ts.map +1 -0
  64. package/dist/hook/unknown-hook-artifact-manager.js +20 -0
  65. package/dist/hook/unknown-hook-artifact-manager.js.map +1 -0
  66. package/dist/index.d.ts +9 -0
  67. package/dist/index.d.ts.map +1 -0
  68. package/dist/index.js +9 -0
  69. package/dist/index.js.map +1 -0
  70. package/dist/ism/aggregation-ism-artifact-reader.d.ts +14 -0
  71. package/dist/ism/aggregation-ism-artifact-reader.d.ts.map +1 -0
  72. package/dist/ism/aggregation-ism-artifact-reader.js +42 -0
  73. package/dist/ism/aggregation-ism-artifact-reader.js.map +1 -0
  74. package/dist/ism/domain-routing-ism-artifact-manager.d.ts +20 -0
  75. package/dist/ism/domain-routing-ism-artifact-manager.d.ts.map +1 -0
  76. package/dist/ism/domain-routing-ism-artifact-manager.js +130 -0
  77. package/dist/ism/domain-routing-ism-artifact-manager.js.map +1 -0
  78. package/dist/ism/ism-artifact-manager.d.ts +14 -0
  79. package/dist/ism/ism-artifact-manager.d.ts.map +1 -0
  80. package/dist/ism/ism-artifact-manager.js +53 -0
  81. package/dist/ism/ism-artifact-manager.js.map +1 -0
  82. package/dist/ism/ism-artifact-manager.test.d.ts +2 -0
  83. package/dist/ism/ism-artifact-manager.test.d.ts.map +1 -0
  84. package/dist/ism/ism-artifact-manager.test.js +77 -0
  85. package/dist/ism/ism-artifact-manager.test.js.map +1 -0
  86. package/dist/ism/ism-query.d.ts +33 -0
  87. package/dist/ism/ism-query.d.ts.map +1 -0
  88. package/dist/ism/ism-query.js +118 -0
  89. package/dist/ism/ism-query.js.map +1 -0
  90. package/dist/ism/ism-reader.test.d.ts +2 -0
  91. package/dist/ism/ism-reader.test.d.ts.map +1 -0
  92. package/dist/ism/ism-reader.test.js +121 -0
  93. package/dist/ism/ism-reader.test.js.map +1 -0
  94. package/dist/ism/ism-tx.d.ts +28 -0
  95. package/dist/ism/ism-tx.d.ts.map +1 -0
  96. package/dist/ism/ism-tx.js +56 -0
  97. package/dist/ism/ism-tx.js.map +1 -0
  98. package/dist/ism/merkle-root-multisig-ism-artifact-manager.d.ts +20 -0
  99. package/dist/ism/merkle-root-multisig-ism-artifact-manager.d.ts.map +1 -0
  100. package/dist/ism/merkle-root-multisig-ism-artifact-manager.js +51 -0
  101. package/dist/ism/merkle-root-multisig-ism-artifact-manager.js.map +1 -0
  102. package/dist/ism/message-id-multisig-ism-artifact-manager.d.ts +20 -0
  103. package/dist/ism/message-id-multisig-ism-artifact-manager.d.ts.map +1 -0
  104. package/dist/ism/message-id-multisig-ism-artifact-manager.js +51 -0
  105. package/dist/ism/message-id-multisig-ism-artifact-manager.js.map +1 -0
  106. package/dist/ism/test-ism-artifact-manager.d.ts +20 -0
  107. package/dist/ism/test-ism-artifact-manager.d.ts.map +1 -0
  108. package/dist/ism/test-ism-artifact-manager.js +46 -0
  109. package/dist/ism/test-ism-artifact-manager.js.map +1 -0
  110. package/dist/mailbox/mailbox-artifact-manager.d.ts +15 -0
  111. package/dist/mailbox/mailbox-artifact-manager.d.ts.map +1 -0
  112. package/dist/mailbox/mailbox-artifact-manager.js +179 -0
  113. package/dist/mailbox/mailbox-artifact-manager.js.map +1 -0
  114. package/dist/mailbox/mailbox-artifact-manager.test.d.ts +2 -0
  115. package/dist/mailbox/mailbox-artifact-manager.test.d.ts.map +1 -0
  116. package/dist/mailbox/mailbox-artifact-manager.test.js +100 -0
  117. package/dist/mailbox/mailbox-artifact-manager.test.js.map +1 -0
  118. package/dist/mailbox/mailbox-query.d.ts +13 -0
  119. package/dist/mailbox/mailbox-query.d.ts.map +1 -0
  120. package/dist/mailbox/mailbox-query.js +29 -0
  121. package/dist/mailbox/mailbox-query.js.map +1 -0
  122. package/dist/mailbox/mailbox-tx.d.ts +25 -0
  123. package/dist/mailbox/mailbox-tx.d.ts.map +1 -0
  124. package/dist/mailbox/mailbox-tx.js +40 -0
  125. package/dist/mailbox/mailbox-tx.js.map +1 -0
  126. package/dist/runtime.d.ts +4 -0
  127. package/dist/runtime.d.ts.map +1 -0
  128. package/dist/runtime.js +4 -0
  129. package/dist/runtime.js.map +1 -0
  130. package/dist/testing/constants.d.ts +8 -0
  131. package/dist/testing/constants.d.ts.map +1 -0
  132. package/dist/testing/constants.js +27 -0
  133. package/dist/testing/constants.js.map +1 -0
  134. package/dist/testing/index.d.ts +4 -0
  135. package/dist/testing/index.d.ts.map +1 -0
  136. package/dist/testing/index.js +4 -0
  137. package/dist/testing/index.js.map +1 -0
  138. package/dist/testing/node.d.ts +4 -0
  139. package/dist/testing/node.d.ts.map +1 -0
  140. package/dist/testing/node.js +78 -0
  141. package/dist/testing/node.js.map +1 -0
  142. package/dist/testing/utils.d.ts +6 -0
  143. package/dist/testing/utils.d.ts.map +1 -0
  144. package/dist/testing/utils.js +15 -0
  145. package/dist/testing/utils.js.map +1 -0
  146. package/dist/tests/e2e-test.setup.d.ts +2 -0
  147. package/dist/tests/e2e-test.setup.d.ts.map +1 -0
  148. package/dist/tests/e2e-test.setup.js +24 -0
  149. package/dist/tests/e2e-test.setup.js.map +1 -0
  150. package/dist/tests/hook.e2e-test.d.ts +2 -0
  151. package/dist/tests/hook.e2e-test.d.ts.map +1 -0
  152. package/dist/tests/hook.e2e-test.js +100 -0
  153. package/dist/tests/hook.e2e-test.js.map +1 -0
  154. package/dist/tests/ism.e2e-test.d.ts +2 -0
  155. package/dist/tests/ism.e2e-test.d.ts.map +1 -0
  156. package/dist/tests/ism.e2e-test.js +123 -0
  157. package/dist/tests/ism.e2e-test.js.map +1 -0
  158. package/dist/tests/mailbox.e2e-test.d.ts +2 -0
  159. package/dist/tests/mailbox.e2e-test.d.ts.map +1 -0
  160. package/dist/tests/mailbox.e2e-test.js +115 -0
  161. package/dist/tests/mailbox.e2e-test.js.map +1 -0
  162. package/dist/tests/read-warp-token.e2e-test.d.ts +2 -0
  163. package/dist/tests/read-warp-token.e2e-test.d.ts.map +1 -0
  164. package/dist/tests/read-warp-token.e2e-test.js +67 -0
  165. package/dist/tests/read-warp-token.e2e-test.js.map +1 -0
  166. package/dist/tests/validator_announce.e2e-test.d.ts +2 -0
  167. package/dist/tests/validator_announce.e2e-test.d.ts.map +1 -0
  168. package/dist/tests/validator_announce.e2e-test.js +74 -0
  169. package/dist/tests/validator_announce.e2e-test.js.map +1 -0
  170. package/dist/tests/warp_core.e2e-test.d.ts +2 -0
  171. package/dist/tests/warp_core.e2e-test.d.ts.map +1 -0
  172. package/dist/tests/warp_core.e2e-test.js +217 -0
  173. package/dist/tests/warp_core.e2e-test.js.map +1 -0
  174. package/dist/tests/warp_transfer.e2e-test.d.ts +2 -0
  175. package/dist/tests/warp_transfer.e2e-test.d.ts.map +1 -0
  176. package/dist/tests/warp_transfer.e2e-test.js +149 -0
  177. package/dist/tests/warp_transfer.e2e-test.js.map +1 -0
  178. package/dist/types.d.ts +26 -0
  179. package/dist/types.d.ts.map +1 -0
  180. package/dist/types.js +2 -0
  181. package/dist/types.js.map +1 -0
  182. package/dist/validator-announce/validator-announce-artifact-manager.d.ts +14 -0
  183. package/dist/validator-announce/validator-announce-artifact-manager.d.ts.map +1 -0
  184. package/dist/validator-announce/validator-announce-artifact-manager.js +125 -0
  185. package/dist/validator-announce/validator-announce-artifact-manager.js.map +1 -0
  186. package/dist/validator-announce/validator-announce-artifact-manager.test.d.ts +2 -0
  187. package/dist/validator-announce/validator-announce-artifact-manager.test.d.ts.map +1 -0
  188. package/dist/validator-announce/validator-announce-artifact-manager.test.js +66 -0
  189. package/dist/validator-announce/validator-announce-artifact-manager.test.js.map +1 -0
  190. package/dist/validator-announce/validator-announce-tx.d.ts +3 -0
  191. package/dist/validator-announce/validator-announce-tx.d.ts.map +1 -0
  192. package/dist/validator-announce/validator-announce-tx.js +12 -0
  193. package/dist/validator-announce/validator-announce-tx.js.map +1 -0
  194. package/dist/warp/collateral-token-artifact-manager.d.ts +14 -0
  195. package/dist/warp/collateral-token-artifact-manager.d.ts.map +1 -0
  196. package/dist/warp/collateral-token-artifact-manager.js +47 -0
  197. package/dist/warp/collateral-token-artifact-manager.js.map +1 -0
  198. package/dist/warp/native-token-artifact-manager.d.ts +13 -0
  199. package/dist/warp/native-token-artifact-manager.d.ts.map +1 -0
  200. package/dist/warp/native-token-artifact-manager.js +33 -0
  201. package/dist/warp/native-token-artifact-manager.js.map +1 -0
  202. package/dist/warp/synthetic-token-artifact-manager.d.ts +15 -0
  203. package/dist/warp/synthetic-token-artifact-manager.d.ts.map +1 -0
  204. package/dist/warp/synthetic-token-artifact-manager.js +53 -0
  205. package/dist/warp/synthetic-token-artifact-manager.js.map +1 -0
  206. package/dist/warp/token-artifact-manager.d.ts +43 -0
  207. package/dist/warp/token-artifact-manager.d.ts.map +1 -0
  208. package/dist/warp/token-artifact-manager.js +233 -0
  209. package/dist/warp/token-artifact-manager.js.map +1 -0
  210. package/dist/warp/warp-artifact-manager.d.ts +14 -0
  211. package/dist/warp/warp-artifact-manager.d.ts.map +1 -0
  212. package/dist/warp/warp-artifact-manager.js +54 -0
  213. package/dist/warp/warp-artifact-manager.js.map +1 -0
  214. package/dist/warp/warp-artifact-manager.test.d.ts +2 -0
  215. package/dist/warp/warp-artifact-manager.test.d.ts.map +1 -0
  216. package/dist/warp/warp-artifact-manager.test.js +93 -0
  217. package/dist/warp/warp-artifact-manager.test.js.map +1 -0
  218. package/dist/warp/warp-tx.d.ts +47 -0
  219. package/dist/warp/warp-tx.d.ts.map +1 -0
  220. package/dist/warp/warp-tx.js +110 -0
  221. package/dist/warp/warp-tx.js.map +1 -0
  222. package/package.json +63 -3
  223. package/README.md +0 -3
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contracts.test.d.ts","sourceRoot":"","sources":["../src/contracts.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,80 @@
1
+ import { expect } from 'chai';
2
+ import { CallData, hash } from 'starknet';
3
+ import { getCompiledClassHash, getCompiledContract, } from '@recoillink/starknet-core';
4
+ import { ContractType, getContractAbi, getContractClassHash, getRuntimeContractNames, } from '@recoillink/starknet-core/runtime';
5
+ import { ZERO_ADDRESS_HEX_32 } from '@recoillink/utils';
6
+ import { StarknetContractName, callContract, extractEnumVariant, getFeeTokenAddress, normalizeStarknetAddressSafe, populateInvokeTx, toNumber, } from './contracts.js';
7
+ describe('starknet-sdk contracts helpers', () => {
8
+ it('normalizes zeroish addresses to 32-byte zero address', () => {
9
+ expect(normalizeStarknetAddressSafe('0x0')).to.equal(ZERO_ADDRESS_HEX_32);
10
+ });
11
+ it('uses native denom as fee token when provided', () => {
12
+ const nativeDenom = '0x1234';
13
+ expect(getFeeTokenAddress({ chainName: 'starknetsepolia', nativeDenom })).to.equal('0x0000000000000000000000000000000000000000000000000000000000001234');
14
+ });
15
+ it('falls back to known fee token by chain name', () => {
16
+ expect(getFeeTokenAddress({ chainName: 'starknetsepolia' })).to.equal('0x04718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d');
17
+ });
18
+ it('extracts enum variant key from starknet-like object', () => {
19
+ expect(extractEnumVariant({ MERKLE_TREE: {} })).to.equal('MERKLE_TREE');
20
+ });
21
+ it('preserves single-key enum variants with undefined payloads', () => {
22
+ expect(extractEnumVariant({ NOOP: undefined })).to.equal('NOOP');
23
+ expect(extractEnumVariant({ NOOP: null })).to.equal('NOOP');
24
+ });
25
+ it('preserves zero-like enum values instead of treating them as empty', () => {
26
+ expect(extractEnumVariant(0)).to.equal('0');
27
+ expect(extractEnumVariant(0n)).to.equal('0');
28
+ expect(extractEnumVariant({ MERKLE_TREE: 0 })).to.equal('MERKLE_TREE');
29
+ });
30
+ it('preserves contract context in callContract fallback path', async () => {
31
+ const contract = {
32
+ address: '0x1234',
33
+ abi: [{ type: 'function', name: 'balance_of' }],
34
+ call(method, args) {
35
+ return `${this.address}:${method}:${args.length}`;
36
+ },
37
+ };
38
+ const result = await callContract(contract, 'balance_of', ['0x1']);
39
+ expect(result).to.equal('0x1234:balance_of:1');
40
+ });
41
+ it('compiles calldata when populateTransaction helper is unavailable', async () => {
42
+ const abi = getContractAbi(StarknetContractName.HYP_ERC20, ContractType.TOKEN);
43
+ const contract = {
44
+ address: '0x1234',
45
+ abi,
46
+ };
47
+ const tx = await populateInvokeTx(contract, 'owner');
48
+ expect(tx.kind).to.equal('invoke');
49
+ expect(tx.contractAddress).to.equal('0x0000000000000000000000000000000000000000000000000000000000001234');
50
+ expect(tx.entrypoint).to.equal('owner');
51
+ expect(tx.calldata).to.deep.equal(new CallData(abi).compile('owner', []));
52
+ });
53
+ it('publishes runtime data matching deployment artifacts in every group', function () {
54
+ // starknet.js v8's computeContractClassHash is ~2-4s per artifact (~130s total).
55
+ this.timeout(300_000);
56
+ for (const contractType of Object.values(ContractType)) {
57
+ const contractNames = getRuntimeContractNames(contractType);
58
+ expect(contractNames).not.to.be.empty;
59
+ for (const name of contractNames) {
60
+ const compiledContract = getCompiledContract(name, contractType);
61
+ expect(getContractAbi(name, contractType)).to.deep.equal(compiledContract.abi);
62
+ expect(getContractClassHash(name, contractType)).to.equal(hash.computeContractClassHash(compiledContract));
63
+ }
64
+ }
65
+ });
66
+ it('computes compiled class hashes for both Starknet hash eras', function () {
67
+ this.timeout(30_000);
68
+ expect(getCompiledClassHash('mailbox')).to.equal('0x188e5a5af7c6e8805709a50e5266abd92d99130ef21f1df948fe81d1afffde');
69
+ expect(getCompiledClassHash('mailbox', ContractType.CONTRACT, '0.14.1')).to.equal('0x434b65e8120a34ab8b2e7c5940636b45ede0d6fcaa15af741c52569496fa168');
70
+ });
71
+ it('throws when runtime data does not own the requested contract', () => {
72
+ for (const name of ['missing-contract', 'toString']) {
73
+ expect(() => getContractAbi(name)).to.throw('CONTRACT_NOT_FOUND');
74
+ }
75
+ });
76
+ it('throws when coercing bigint values above the safe integer range', () => {
77
+ expect(() => toNumber(BigInt(Number.MAX_SAFE_INTEGER) + 1n)).to.throw(/safe integer/i);
78
+ });
79
+ });
80
+ //# sourceMappingURL=contracts.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contracts.test.js","sourceRoot":"","sources":["../src/contracts.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import { type ChainMetadataForAltVM } from '@recoillink/provider-sdk';
2
+ import { type ISigner } from '@recoillink/provider-sdk/altvm';
3
+ import { type ArtifactReader, type ArtifactWriter } from '@recoillink/provider-sdk/artifact';
4
+ import { type DeployedHookAddress, type DeployedHookArtifact, type HookType, type IRawHookArtifactManager, type RawHookArtifactConfigs } from '@recoillink/provider-sdk/hook';
5
+ import { type AnnotatedTx, type TxReceipt } from '@recoillink/provider-sdk/module';
6
+ export declare class StarknetHookArtifactManager implements IRawHookArtifactManager {
7
+ private readonly chainMetadata;
8
+ private readonly provider;
9
+ private readonly mailboxAddress;
10
+ constructor(chainMetadata: ChainMetadataForAltVM, context?: {
11
+ mailbox?: string;
12
+ });
13
+ private requireStarknetSigner;
14
+ readHook(address: string): Promise<DeployedHookArtifact>;
15
+ createReader<T extends HookType>(type: T): ArtifactReader<RawHookArtifactConfigs[T], DeployedHookAddress>;
16
+ createWriter<T extends HookType>(type: T, signer: ISigner<AnnotatedTx, TxReceipt>): ArtifactWriter<RawHookArtifactConfigs[T], DeployedHookAddress>;
17
+ }
18
+ //# sourceMappingURL=hook-artifact-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hook-artifact-manager.d.ts","sourceRoot":"","sources":["../../src/hook/hook-artifact-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,KAAK,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAC7E,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,gCAAgC,CAAC;AAC9D,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,cAAc,EACpB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,KAAK,QAAQ,EACb,KAAK,uBAAuB,EAC5B,KAAK,sBAAsB,EAE5B,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,SAAS,EACf,MAAM,iCAAiC,CAAC;AAwBzC,qBAAa,2BAA4B,YAAW,uBAAuB;IAKvE,OAAO,CAAC,QAAQ,CAAC,aAAa;IAJhC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmB;IAC5C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IAExC,YACmB,aAAa,EAAE,qBAAqB,EACrD,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,EAM/B;IAED,OAAO,CAAC,qBAAqB;IAOvB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAa7D;IAED,YAAY,CAAC,CAAC,SAAS,QAAQ,EAC7B,IAAI,EAAE,CAAC,GACN,cAAc,CAAC,sBAAsB,CAAC,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAmBhE;IAED,YAAY,CAAC,CAAC,SAAS,QAAQ,EAC7B,IAAI,EAAE,CAAC,EACP,MAAM,EAAE,OAAO,CAAC,WAAW,EAAE,SAAS,CAAC,GACtC,cAAc,CAAC,sBAAsB,CAAC,CAAC,CAAC,EAAE,mBAAmB,CAAC,CA8BhE;CACF"}
@@ -0,0 +1,69 @@
1
+ import { AltVM } from '@recoillink/provider-sdk';
2
+ import { throwUnsupportedHookType, } from '@recoillink/provider-sdk/hook';
3
+ import { assert } from '@recoillink/utils';
4
+ import { StarknetProvider } from '../clients/provider.js';
5
+ import { StarknetSigner } from '../clients/signer.js';
6
+ import { normalizeStarknetAddressSafe } from '../contracts.js';
7
+ import { getHookType } from './hook-query.js';
8
+ import { createStarknetInterchainGasPaymasterHookReader, createStarknetInterchainGasPaymasterHookWriter, } from './interchain-gas-paymaster-hook-artifact-manager.js';
9
+ import { StarknetMerkleTreeHookReader, StarknetMerkleTreeHookWriter, } from './merkle-tree-hook-artifact-manager.js';
10
+ import { StarknetProtocolFeeHookReader, StarknetProtocolFeeHookWriter, } from './protocol-fee-hook-artifact-manager.js';
11
+ import { StarknetUnknownHookReader, StarknetUnknownHookWriter, } from './unknown-hook-artifact-manager.js';
12
+ export class StarknetHookArtifactManager {
13
+ chainMetadata;
14
+ provider;
15
+ mailboxAddress;
16
+ constructor(chainMetadata, context) {
17
+ this.chainMetadata = chainMetadata;
18
+ this.provider = StarknetProvider.connect(chainMetadata);
19
+ this.mailboxAddress = context?.mailbox
20
+ ? normalizeStarknetAddressSafe(context.mailbox)
21
+ : '';
22
+ }
23
+ requireStarknetSigner(signer) {
24
+ assert(signer instanceof StarknetSigner, 'Expected StarknetSigner');
25
+ return signer;
26
+ }
27
+ async readHook(address) {
28
+ const hookType = await getHookType(this.provider.getRawProvider(), address);
29
+ switch (hookType) {
30
+ case AltVM.HookType.CUSTOM:
31
+ return this.createReader('unknownHook').read(address);
32
+ case AltVM.HookType.MERKLE_TREE:
33
+ return this.createReader(AltVM.HookType.MERKLE_TREE).read(address);
34
+ case AltVM.HookType.PROTOCOL_FEE:
35
+ return this.createReader(AltVM.HookType.PROTOCOL_FEE).read(address);
36
+ default:
37
+ return throwUnsupportedHookType(hookType, 'Starknet');
38
+ }
39
+ }
40
+ createReader(type) {
41
+ const readers = {
42
+ merkleTreeHook: () => new StarknetMerkleTreeHookReader(),
43
+ interchainGasPaymaster: () => createStarknetInterchainGasPaymasterHookReader(),
44
+ protocolFee: () => new StarknetProtocolFeeHookReader(this.chainMetadata, this.provider),
45
+ unknownHook: () => new StarknetUnknownHookReader(),
46
+ };
47
+ const readerFactory = readers[type];
48
+ if (!readerFactory) {
49
+ return throwUnsupportedHookType(type, 'Starknet');
50
+ }
51
+ return readerFactory();
52
+ }
53
+ createWriter(type, signer) {
54
+ const starknetSigner = this.requireStarknetSigner(signer);
55
+ assert(this.mailboxAddress || type !== AltVM.HookType.MERKLE_TREE, 'mailbox address required for Starknet merkle tree hook deployment');
56
+ const writers = {
57
+ merkleTreeHook: () => new StarknetMerkleTreeHookWriter(starknetSigner, this.mailboxAddress),
58
+ interchainGasPaymaster: () => createStarknetInterchainGasPaymasterHookWriter(),
59
+ protocolFee: () => new StarknetProtocolFeeHookWriter(this.chainMetadata, this.provider, starknetSigner),
60
+ unknownHook: () => new StarknetUnknownHookWriter(),
61
+ };
62
+ const writerFactory = writers[type];
63
+ if (!writerFactory) {
64
+ return throwUnsupportedHookType(type, 'Starknet');
65
+ }
66
+ return writerFactory();
67
+ }
68
+ }
69
+ //# sourceMappingURL=hook-artifact-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hook-artifact-manager.js","sourceRoot":"","sources":["../../src/hook/hook-artifact-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=hook-artifact-manager.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hook-artifact-manager.test.d.ts","sourceRoot":"","sources":["../../src/hook/hook-artifact-manager.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,157 @@
1
+ import { expect } from 'chai';
2
+ import { RpcProvider } from 'starknet';
3
+ import { ProtocolType } from '@recoillink/provider-sdk';
4
+ import { ArtifactState } from '@recoillink/provider-sdk/artifact';
5
+ import { StarknetSigner } from '../clients/signer.js';
6
+ import { StarknetHookArtifactManager } from './hook-artifact-manager.js';
7
+ describe('StarknetHookArtifactManager', () => {
8
+ const chainMetadata = {
9
+ name: 'starknetsepolia',
10
+ protocol: ProtocolType.Starknet,
11
+ chainId: 'SN_SEPOLIA',
12
+ domainId: 421614,
13
+ rpcUrls: [{ http: 'http://localhost:9545' }],
14
+ nativeToken: {
15
+ name: 'Ether',
16
+ symbol: 'ETH',
17
+ decimals: 18,
18
+ denom: '0x04718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d',
19
+ },
20
+ };
21
+ class MockStarknetSigner extends StarknetSigner {
22
+ capturedTx;
23
+ capturedTxs = [];
24
+ constructor() {
25
+ super(new RpcProvider({ nodeUrl: 'http://localhost:9545' }), chainMetadata, ['http://localhost:9545'], '0x1', '0x1111111111111111111111111111111111111111111111111111111111111111');
26
+ }
27
+ async sendAndConfirmTransaction(tx) {
28
+ this.capturedTx = tx;
29
+ this.capturedTxs.push(tx);
30
+ return {
31
+ transactionHash: '0x123',
32
+ contractAddress: '0xabc',
33
+ };
34
+ }
35
+ }
36
+ it('rejects interchainGasPaymaster hook operations on Starknet', async () => {
37
+ const manager = new StarknetHookArtifactManager(chainMetadata);
38
+ const signer = new MockStarknetSigner();
39
+ const reader = manager.createReader('interchainGasPaymaster');
40
+ const writer = manager.createWriter('interchainGasPaymaster', signer);
41
+ let readerError;
42
+ try {
43
+ await reader.read('0x1');
44
+ }
45
+ catch (error) {
46
+ readerError = error;
47
+ }
48
+ expect(String(readerError)).to.match(/Unsupported hook artifact type .* for protocol Starknet/i);
49
+ let writerError;
50
+ try {
51
+ await writer.create({
52
+ artifactState: ArtifactState.NEW,
53
+ // @ts-expect-error runtime unsupported path; config shape is irrelevant
54
+ config: {},
55
+ });
56
+ }
57
+ catch (error) {
58
+ writerError = error;
59
+ }
60
+ expect(String(writerError)).to.match(/Unsupported hook artifact type .* for protocol Starknet/i);
61
+ });
62
+ it('deploys protocolFee hook with maxProtocolFee and protocolFee args', async () => {
63
+ const manager = new StarknetHookArtifactManager(chainMetadata);
64
+ const signer = new MockStarknetSigner();
65
+ const writer = manager.createWriter('protocolFee', signer);
66
+ const [artifact] = await writer.create({
67
+ artifactState: ArtifactState.NEW,
68
+ config: {
69
+ type: 'protocolFee',
70
+ owner: '0x1',
71
+ beneficiary: '0x2',
72
+ maxProtocolFee: '20',
73
+ protocolFee: '10',
74
+ },
75
+ });
76
+ expect(signer.capturedTx).to.not.equal(undefined);
77
+ expect(signer.capturedTx?.kind).to.equal('deploy');
78
+ if (signer.capturedTx?.kind !== 'deploy') {
79
+ throw new Error('Expected deploy transaction');
80
+ }
81
+ expect(Array.isArray(signer.capturedTx.constructorArgs)).to.equal(true);
82
+ if (!Array.isArray(signer.capturedTx.constructorArgs)) {
83
+ throw new Error('Expected constructorArgs to be an array');
84
+ }
85
+ expect(signer.capturedTx.constructorArgs[0]).to.equal('20');
86
+ expect(signer.capturedTx.constructorArgs[1]).to.equal('10');
87
+ expect(artifact.config.maxProtocolFee).to.equal('20');
88
+ expect(artifact.config.protocolFee).to.equal('10');
89
+ });
90
+ it('returns merkleTree hook deployment receipts', async () => {
91
+ const manager = new StarknetHookArtifactManager(chainMetadata, {
92
+ mailbox: '0x111',
93
+ });
94
+ const signer = new MockStarknetSigner();
95
+ const writer = manager.createWriter('merkleTreeHook', signer);
96
+ const [, receipts] = await writer.create({
97
+ artifactState: ArtifactState.NEW,
98
+ config: { type: 'merkleTreeHook' },
99
+ });
100
+ expect(receipts).to.have.length(1);
101
+ expect(signer.capturedTxs).to.have.length(1);
102
+ expect(signer.capturedTxs[0]?.kind).to.equal('deploy');
103
+ });
104
+ it('rejects creating unknownHook artifacts on Starknet', async () => {
105
+ const manager = new StarknetHookArtifactManager(chainMetadata);
106
+ const signer = new MockStarknetSigner();
107
+ const writer = manager.createWriter('unknownHook', signer);
108
+ let error;
109
+ try {
110
+ await writer.create({
111
+ artifactState: ArtifactState.NEW,
112
+ config: { type: 'unknownHook' },
113
+ });
114
+ }
115
+ catch (caughtError) {
116
+ error = caughtError;
117
+ }
118
+ expect(String(error)).to.match(/unknownHook artifacts are read-only on Starknet/i);
119
+ });
120
+ it('rejects protocolFee in-place updates when maxProtocolFee changes', async () => {
121
+ const manager = new StarknetHookArtifactManager(chainMetadata);
122
+ const signer = new MockStarknetSigner();
123
+ const writer = manager.createWriter('protocolFee', signer);
124
+ Object.assign(writer, {
125
+ read: async () => ({
126
+ artifactState: ArtifactState.DEPLOYED,
127
+ config: {
128
+ type: 'protocolFee',
129
+ owner: '0x1',
130
+ beneficiary: '0x2',
131
+ maxProtocolFee: '20',
132
+ protocolFee: '10',
133
+ },
134
+ deployed: { address: '0xabc' },
135
+ }),
136
+ });
137
+ let error;
138
+ try {
139
+ await writer.update({
140
+ artifactState: ArtifactState.DEPLOYED,
141
+ config: {
142
+ type: 'protocolFee',
143
+ owner: '0x1',
144
+ beneficiary: '0x2',
145
+ maxProtocolFee: '30',
146
+ protocolFee: '10',
147
+ },
148
+ deployed: { address: '0xabc' },
149
+ });
150
+ }
151
+ catch (caughtError) {
152
+ error = caughtError;
153
+ }
154
+ expect(String(error)).to.match(/Changing maxProtocolFee requires redeploying/i);
155
+ });
156
+ });
157
+ //# sourceMappingURL=hook-artifact-manager.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hook-artifact-manager.test.js","sourceRoot":"","sources":["../../src/hook/hook-artifact-manager.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAEvC,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAGlE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAGtD,OAAO,EAAE,2BAA2B,EAAE,MAAM,4BAA4B,CAAC;AAEzE,QAAQ,CAAC,6BAA6B,EAAE,GAAG,EAAE;IAC3C,MAAM,aAAa,GAA0B;QAC3C,IAAI,EAAE,iBAAiB;QACvB,QAAQ,EAAE,YAAY,CAAC,QAAQ;QAC/B,OAAO,EAAE,YAAY;QACrB,QAAQ,EAAE,MAAM;QAChB,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,uBAAuB,EAAE,CAAC;QAC5C,WAAW,EAAE;YACX,IAAI,EAAE,OAAO;YACb,MAAM,EAAE,KAAK;YACb,QAAQ,EAAE,EAAE;YACZ,KAAK,EACH,oEAAoE;SACvE;KACF,CAAC;IAEF,MAAM,kBAAmB,SAAQ,cAAc;QAC7C,UAAU,CAAuB;QACjC,WAAW,GAA0B,EAAE,CAAC;QAExC;YACE,KAAK,CACH,IAAI,WAAW,CAAC,EAAE,OAAO,EAAE,uBAAuB,EAAE,CAAC,EACrD,aAAa,EACb,CAAC,uBAAuB,CAAC,EACzB,KAAK,EACL,oEAAoE,CACrE,CAAC;QACJ,CAAC;QAEQ,KAAK,CAAC,yBAAyB,CACtC,EAAuB;YAEvB,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;YACrB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC1B,OAAO;gBACL,eAAe,EAAE,OAAO;gBACxB,eAAe,EAAE,OAAO;aACzB,CAAC;QACJ,CAAC;KACF;IAED,EAAE,CAAC,4DAA4D,EAAE,KAAK,IAAI,EAAE;QAC1E,MAAM,OAAO,GAAG,IAAI,2BAA2B,CAAC,aAAa,CAAC,CAAC;QAC/D,MAAM,MAAM,GAAG,IAAI,kBAAkB,EAAE,CAAC;QACxC,MAAM,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,wBAAwB,CAAC,CAAC;QAC9D,MAAM,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,wBAAwB,EAAE,MAAM,CAAC,CAAC;QAEtE,IAAI,WAAoB,CAAC;QACzB,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC3B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,WAAW,GAAG,KAAK,CAAC;QACtB,CAAC;QACD,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAClC,0DAA0D,CAC3D,CAAC;QAEF,IAAI,WAAoB,CAAC;QACzB,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,MAAM,CAAC;gBAClB,aAAa,EAAE,aAAa,CAAC,GAAG;gBAChC,wEAAwE;gBACxE,MAAM,EAAE,EAAE;aACX,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,WAAW,GAAG,KAAK,CAAC;QACtB,CAAC;QACD,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAClC,0DAA0D,CAC3D,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mEAAmE,EAAE,KAAK,IAAI,EAAE;QACjF,MAAM,OAAO,GAAG,IAAI,2BAA2B,CAAC,aAAa,CAAC,CAAC;QAC/D,MAAM,MAAM,GAAG,IAAI,kBAAkB,EAAE,CAAC;QACxC,MAAM,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;QAE3D,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC;YACrC,aAAa,EAAE,aAAa,CAAC,GAAG;YAChC,MAAM,EAAE;gBACN,IAAI,EAAE,aAAa;gBACnB,KAAK,EAAE,KAAK;gBACZ,WAAW,EAAE,KAAK;gBAClB,cAAc,EAAE,IAAI;gBACpB,WAAW,EAAE,IAAI;aAClB;SACF,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAClD,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACnD,IAAI,MAAM,CAAC,UAAU,EAAE,IAAI,KAAK,QAAQ,EAAE,CAAC;YACzC,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;QACjD,CAAC;QACD,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACxE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;YACtD,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;QAC7D,CAAC;QACD,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC5D,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC5D,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACtD,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;QAC3D,MAAM,OAAO,GAAG,IAAI,2BAA2B,CAAC,aAAa,EAAE;YAC7D,OAAO,EAAE,OAAO;SACjB,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,kBAAkB,EAAE,CAAC;QACxC,MAAM,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;QAE9D,MAAM,CAAC,EAAE,QAAQ,CAAC,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC;YACvC,aAAa,EAAE,aAAa,CAAC,GAAG;YAChC,MAAM,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE;SACnC,CAAC,CAAC;QAEH,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACnC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAC7C,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;QAClE,MAAM,OAAO,GAAG,IAAI,2BAA2B,CAAC,aAAa,CAAC,CAAC;QAC/D,MAAM,MAAM,GAAG,IAAI,kBAAkB,EAAE,CAAC;QACxC,MAAM,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;QAE3D,IAAI,KAAc,CAAC;QACnB,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,MAAM,CAAC;gBAClB,aAAa,EAAE,aAAa,CAAC,GAAG;gBAChC,MAAM,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE;aAChC,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,WAAW,EAAE,CAAC;YACrB,KAAK,GAAG,WAAW,CAAC;QACtB,CAAC;QAED,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAC5B,kDAAkD,CACnD,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kEAAkE,EAAE,KAAK,IAAI,EAAE;QAChF,MAAM,OAAO,GAAG,IAAI,2BAA2B,CAAC,aAAa,CAAC,CAAC;QAC/D,MAAM,MAAM,GAAG,IAAI,kBAAkB,EAAE,CAAC;QACxC,MAAM,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;QAC3D,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE;YACpB,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;gBACjB,aAAa,EAAE,aAAa,CAAC,QAAQ;gBACrC,MAAM,EAAE;oBACN,IAAI,EAAE,aAAsB;oBAC5B,KAAK,EAAE,KAAK;oBACZ,WAAW,EAAE,KAAK;oBAClB,cAAc,EAAE,IAAI;oBACpB,WAAW,EAAE,IAAI;iBAClB;gBACD,QAAQ,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE;aAC/B,CAAC;SACH,CAAC,CAAC;QAEH,IAAI,KAAc,CAAC;QACnB,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,MAAM,CAAC;gBAClB,aAAa,EAAE,aAAa,CAAC,QAAQ;gBACrC,MAAM,EAAE;oBACN,IAAI,EAAE,aAAa;oBACnB,KAAK,EAAE,KAAK;oBACZ,WAAW,EAAE,KAAK;oBAClB,cAAc,EAAE,IAAI;oBACpB,WAAW,EAAE,IAAI;iBAClB;gBACD,QAAQ,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE;aAC/B,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,WAAW,EAAE,CAAC;YACrB,KAAK,GAAG,WAAW,CAAC;QACtB,CAAC;QAED,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAC5B,+CAA+C,CAChD,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { type RpcProvider } from 'starknet';
2
+ import { AltVM } from '@recoillink/provider-sdk';
3
+ export declare function getHookType(provider: RpcProvider, hookAddress: string): Promise<AltVM.HookType>;
4
+ export declare function getMerkleTreeHookConfig(hookAddress: string): {
5
+ address: string;
6
+ };
7
+ //# sourceMappingURL=hook-query.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hook-query.d.ts","sourceRoot":"","sources":["../../src/hook/hook-query.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,UAAU,CAAC;AAE5C,OAAO,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AAqBjD,wBAAsB,WAAW,CAC/B,QAAQ,EAAE,WAAW,EACrB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAazB;AAED,wBAAgB,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG;IAC5D,OAAO,EAAE,MAAM,CAAC;CACjB,CAEA"}
@@ -0,0 +1,29 @@
1
+ import { AltVM } from '@recoillink/provider-sdk';
2
+ import { StarknetContractName, callContract, extractEnumVariant, getStarknetContract, isProbeMiss, normalizeStarknetAddressSafe, } from '../contracts.js';
3
+ function parseHookVariant(variant) {
4
+ const upper = variant.toUpperCase();
5
+ if (upper.includes('MERKLE_TREE'))
6
+ return AltVM.HookType.MERKLE_TREE;
7
+ if (upper.includes('PROTOCOL_FEE'))
8
+ return AltVM.HookType.PROTOCOL_FEE;
9
+ if (upper.includes('INTERCHAIN_GAS_PAYMASTER')) {
10
+ return AltVM.HookType.INTERCHAIN_GAS_PAYMASTER;
11
+ }
12
+ return AltVM.HookType.CUSTOM;
13
+ }
14
+ export async function getHookType(provider, hookAddress) {
15
+ try {
16
+ const hook = getStarknetContract(StarknetContractName.HOOK, hookAddress, provider);
17
+ const hookType = await callContract(hook, 'hook_type');
18
+ return parseHookVariant(extractEnumVariant(hookType));
19
+ }
20
+ catch (error) {
21
+ if (!isProbeMiss(error))
22
+ throw error;
23
+ return AltVM.HookType.CUSTOM;
24
+ }
25
+ }
26
+ export function getMerkleTreeHookConfig(hookAddress) {
27
+ return { address: normalizeStarknetAddressSafe(hookAddress) };
28
+ }
29
+ //# sourceMappingURL=hook-query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hook-query.js","sourceRoot":"","sources":["../../src/hook/hook-query.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AAEjD,OAAO,EACL,oBAAoB,EACpB,YAAY,EACZ,kBAAkB,EAClB,mBAAmB,EACnB,WAAW,EACX,4BAA4B,GAC7B,MAAM,iBAAiB,CAAC;AAEzB,SAAS,gBAAgB,CAAC,OAAe;IACvC,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IACpC,IAAI,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC;QAAE,OAAO,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC;IACrE,IAAI,KAAK,CAAC,QAAQ,CAAC,cAAc,CAAC;QAAE,OAAO,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC;IACvE,IAAI,KAAK,CAAC,QAAQ,CAAC,0BAA0B,CAAC,EAAE,CAAC;QAC/C,OAAO,KAAK,CAAC,QAAQ,CAAC,wBAAwB,CAAC;IACjD,CAAC;IACD,OAAO,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC/B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,QAAqB,EACrB,WAAmB;IAEnB,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,mBAAmB,CAC9B,oBAAoB,CAAC,IAAI,EACzB,WAAW,EACX,QAAQ,CACT,CAAC;QACF,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QACvD,OAAO,gBAAgB,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAC;IACxD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;YAAE,MAAM,KAAK,CAAC;QACrC,OAAO,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;IAC/B,CAAC;AACH,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,WAAmB;IAGzD,OAAO,EAAE,OAAO,EAAE,4BAA4B,CAAC,WAAW,CAAC,EAAE,CAAC;AAChE,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { type StarknetAnnotatedTx } from '../types.js';
2
+ export declare function getCreateMerkleTreeHookTx(signer: string, mailboxAddress: string): StarknetAnnotatedTx;
3
+ export declare function getCreateNoopHookTx(): StarknetAnnotatedTx;
4
+ //# sourceMappingURL=hook-tx.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hook-tx.d.ts","sourceRoot":"","sources":["../../src/hook/hook-tx.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAEvD,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,MAAM,GACrB,mBAAmB,CASrB;AAED,wBAAgB,mBAAmB,IAAI,mBAAmB,CAMzD"}
@@ -0,0 +1,19 @@
1
+ import { StarknetContractName, normalizeStarknetAddressSafe, } from '../contracts.js';
2
+ export function getCreateMerkleTreeHookTx(signer, mailboxAddress) {
3
+ return {
4
+ kind: 'deploy',
5
+ contractName: StarknetContractName.MERKLE_TREE_HOOK,
6
+ constructorArgs: [
7
+ normalizeStarknetAddressSafe(mailboxAddress),
8
+ normalizeStarknetAddressSafe(signer),
9
+ ],
10
+ };
11
+ }
12
+ export function getCreateNoopHookTx() {
13
+ return {
14
+ kind: 'deploy',
15
+ contractName: StarknetContractName.HOOK,
16
+ constructorArgs: [],
17
+ };
18
+ }
19
+ //# sourceMappingURL=hook-tx.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hook-tx.js","sourceRoot":"","sources":["../../src/hook/hook-tx.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,4BAA4B,GAC7B,MAAM,iBAAiB,CAAC;AAGzB,MAAM,UAAU,yBAAyB,CACvC,MAAc,EACd,cAAsB;IAEtB,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,YAAY,EAAE,oBAAoB,CAAC,gBAAgB;QACnD,eAAe,EAAE;YACf,4BAA4B,CAAC,cAAc,CAAC;YAC5C,4BAA4B,CAAC,MAAM,CAAC;SACrC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB;IACjC,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,YAAY,EAAE,oBAAoB,CAAC,IAAI;QACvC,eAAe,EAAE,EAAE;KACpB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { type ArtifactReader, type ArtifactWriter } from '@recoillink/provider-sdk/artifact';
2
+ import { type DeployedHookAddress, type RawHookArtifactConfigs } from '@recoillink/provider-sdk/hook';
3
+ export declare function createStarknetInterchainGasPaymasterHookReader(): ArtifactReader<RawHookArtifactConfigs['interchainGasPaymaster'], DeployedHookAddress>;
4
+ export declare function createStarknetInterchainGasPaymasterHookWriter(): ArtifactWriter<RawHookArtifactConfigs['interchainGasPaymaster'], DeployedHookAddress>;
5
+ //# sourceMappingURL=interchain-gas-paymaster-hook-artifact-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interchain-gas-paymaster-hook-artifact-manager.d.ts","sourceRoot":"","sources":["../../src/hook/interchain-gas-paymaster-hook-artifact-manager.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,cAAc,EACpB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,sBAAsB,EAE5B,MAAM,+BAA+B,CAAC;AAEvC,wBAAgB,8CAA8C,IAAI,cAAc,CAC9E,sBAAsB,CAAC,wBAAwB,CAAC,EAChD,mBAAmB,CACpB,CASA;AAED,wBAAgB,8CAA8C,IAAI,cAAc,CAC9E,sBAAsB,CAAC,wBAAwB,CAAC,EAChD,mBAAmB,CACpB,CAqBA"}
@@ -0,0 +1,23 @@
1
+ import { AltVM } from '@recoillink/provider-sdk';
2
+ import { throwUnsupportedHookType, } from '@recoillink/provider-sdk/hook';
3
+ export function createStarknetInterchainGasPaymasterHookReader() {
4
+ return {
5
+ read: async () => {
6
+ return throwUnsupportedHookType(AltVM.HookType.INTERCHAIN_GAS_PAYMASTER, 'Starknet');
7
+ },
8
+ };
9
+ }
10
+ export function createStarknetInterchainGasPaymasterHookWriter() {
11
+ return {
12
+ read: async () => {
13
+ return throwUnsupportedHookType(AltVM.HookType.INTERCHAIN_GAS_PAYMASTER, 'Starknet');
14
+ },
15
+ create: async () => {
16
+ return throwUnsupportedHookType(AltVM.HookType.INTERCHAIN_GAS_PAYMASTER, 'Starknet');
17
+ },
18
+ update: async () => {
19
+ return throwUnsupportedHookType(AltVM.HookType.INTERCHAIN_GAS_PAYMASTER, 'Starknet');
20
+ },
21
+ };
22
+ }
23
+ //# sourceMappingURL=interchain-gas-paymaster-hook-artifact-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interchain-gas-paymaster-hook-artifact-manager.js","sourceRoot":"","sources":["../../src/hook/interchain-gas-paymaster-hook-artifact-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AAKjD,OAAO,EAGL,wBAAwB,GACzB,MAAM,+BAA+B,CAAC;AAEvC,MAAM,UAAU,8CAA8C;IAI5D,OAAO;QACL,IAAI,EAAE,KAAK,IAAI,EAAE;YACf,OAAO,wBAAwB,CAC7B,KAAK,CAAC,QAAQ,CAAC,wBAAwB,EACvC,UAAU,CACX,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,8CAA8C;IAI5D,OAAO;QACL,IAAI,EAAE,KAAK,IAAI,EAAE;YACf,OAAO,wBAAwB,CAC7B,KAAK,CAAC,QAAQ,CAAC,wBAAwB,EACvC,UAAU,CACX,CAAC;QACJ,CAAC;QACD,MAAM,EAAE,KAAK,IAAI,EAAE;YACjB,OAAO,wBAAwB,CAC7B,KAAK,CAAC,QAAQ,CAAC,wBAAwB,EACvC,UAAU,CACX,CAAC;QACJ,CAAC;QACD,MAAM,EAAE,KAAK,IAAI,EAAE;YACjB,OAAO,wBAAwB,CAC7B,KAAK,CAAC,QAAQ,CAAC,wBAAwB,EACvC,UAAU,CACX,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { type ArtifactDeployed, type ArtifactNew, type ArtifactReader, type ArtifactWriter } from '@recoillink/provider-sdk/artifact';
2
+ import { type DeployedHookAddress, type RawHookArtifactConfigs } from '@recoillink/provider-sdk/hook';
3
+ import { type AnnotatedTx, type TxReceipt } from '@recoillink/provider-sdk/module';
4
+ import { StarknetSigner } from '../clients/signer.js';
5
+ export declare class StarknetMerkleTreeHookReader implements ArtifactReader<RawHookArtifactConfigs['merkleTreeHook'], DeployedHookAddress> {
6
+ read(address: string): Promise<ArtifactDeployed<RawHookArtifactConfigs['merkleTreeHook'], DeployedHookAddress>>;
7
+ }
8
+ export declare class StarknetMerkleTreeHookWriter extends StarknetMerkleTreeHookReader implements ArtifactWriter<RawHookArtifactConfigs['merkleTreeHook'], DeployedHookAddress> {
9
+ private readonly signer;
10
+ private readonly mailboxAddress;
11
+ constructor(signer: StarknetSigner, mailboxAddress: string);
12
+ create(artifact: ArtifactNew<RawHookArtifactConfigs['merkleTreeHook']>): Promise<[
13
+ ArtifactDeployed<RawHookArtifactConfigs['merkleTreeHook'], DeployedHookAddress>,
14
+ TxReceipt[]
15
+ ]>;
16
+ update(_artifact: ArtifactDeployed<RawHookArtifactConfigs['merkleTreeHook'], DeployedHookAddress>): Promise<AnnotatedTx[]>;
17
+ }
18
+ //# sourceMappingURL=merkle-tree-hook-artifact-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merkle-tree-hook-artifact-manager.d.ts","sourceRoot":"","sources":["../../src/hook/merkle-tree-hook-artifact-manager.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,WAAW,EAChB,KAAK,cAAc,EAEnB,KAAK,cAAc,EACpB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,sBAAsB,EAC5B,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,SAAS,EACf,MAAM,iCAAiC,CAAC;AAGzC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAItD,qBAAa,4BAA6B,YAAW,cAAc,CACjE,sBAAsB,CAAC,gBAAgB,CAAC,EACxC,mBAAmB,CACpB;IACO,IAAI,CACR,OAAO,EAAE,MAAM,GACd,OAAO,CACR,gBAAgB,CACd,sBAAsB,CAAC,gBAAgB,CAAC,EACxC,mBAAmB,CACpB,CACF,CAMA;CACF;AAED,qBAAa,4BACX,SAAQ,4BACR,YACE,cAAc,CACZ,sBAAsB,CAAC,gBAAgB,CAAC,EACxC,mBAAmB,CACpB;IAGD,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,cAAc;IAFjC,YACmB,MAAM,EAAE,cAAc,EACtB,cAAc,EAAE,MAAM,EAGxC;IAEK,MAAM,CACV,QAAQ,EAAE,WAAW,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,CAAC,GAC9D,OAAO,CACR;QACE,gBAAgB,CACd,sBAAsB,CAAC,gBAAgB,CAAC,EACxC,mBAAmB,CACpB;QACD,SAAS,EAAE;KACZ,CACF,CAiBA;IAEK,MAAM,CACV,SAAS,EAAE,gBAAgB,CACzB,sBAAsB,CAAC,gBAAgB,CAAC,EACxC,mBAAmB,CACpB,GACA,OAAO,CAAC,WAAW,EAAE,CAAC,CAExB;CACF"}
@@ -0,0 +1,41 @@
1
+ import { AltVM } from '@recoillink/provider-sdk';
2
+ import { ArtifactState, } from '@recoillink/provider-sdk/artifact';
3
+ import { assert } from '@recoillink/utils';
4
+ import { normalizeStarknetAddressSafe } from '../contracts.js';
5
+ import { getCreateMerkleTreeHookTx } from './hook-tx.js';
6
+ export class StarknetMerkleTreeHookReader {
7
+ async read(address) {
8
+ return {
9
+ artifactState: ArtifactState.DEPLOYED,
10
+ config: { type: AltVM.HookType.MERKLE_TREE },
11
+ deployed: { address: normalizeStarknetAddressSafe(address) },
12
+ };
13
+ }
14
+ }
15
+ export class StarknetMerkleTreeHookWriter extends StarknetMerkleTreeHookReader {
16
+ signer;
17
+ mailboxAddress;
18
+ constructor(signer, mailboxAddress) {
19
+ super();
20
+ this.signer = signer;
21
+ this.mailboxAddress = mailboxAddress;
22
+ }
23
+ async create(artifact) {
24
+ const tx = getCreateMerkleTreeHookTx(this.signer.getSignerAddress(), this.mailboxAddress);
25
+ const receipt = await this.signer.sendAndConfirmTransaction(tx);
26
+ const hookAddress = receipt.contractAddress;
27
+ assert(hookAddress, 'failed to deploy Starknet merkle tree hook');
28
+ return [
29
+ {
30
+ artifactState: ArtifactState.DEPLOYED,
31
+ config: artifact.config,
32
+ deployed: { address: hookAddress },
33
+ },
34
+ [receipt],
35
+ ];
36
+ }
37
+ async update(_artifact) {
38
+ return [];
39
+ }
40
+ }
41
+ //# sourceMappingURL=merkle-tree-hook-artifact-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merkle-tree-hook-artifact-manager.js","sourceRoot":"","sources":["../../src/hook/merkle-tree-hook-artifact-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AACjD,OAAO,EAIL,aAAa,GAEd,MAAM,mCAAmC,CAAC;AAS3C,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAG3C,OAAO,EAAE,4BAA4B,EAAE,MAAM,iBAAiB,CAAC;AAC/D,OAAO,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AAEzD,MAAM,OAAO,4BAA4B;IAIvC,KAAK,CAAC,IAAI,CACR,OAAe;QAOf,OAAO;YACL,aAAa,EAAE,aAAa,CAAC,QAAQ;YACrC,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,WAAW,EAAE;YAC5C,QAAQ,EAAE,EAAE,OAAO,EAAE,4BAA4B,CAAC,OAAO,CAAC,EAAE;SAC7D,CAAC;IACJ,CAAC;CACF;AAED,MAAM,OAAO,4BACX,SAAQ,4BAA4B;IAQjB,MAAM;IACN,cAAc;IAFjC,YACmB,MAAsB,EACtB,cAAsB;QAEvC,KAAK,EAAE,CAAC;sBAHS,MAAM;8BACN,cAAc;IAGjC,CAAC;IAED,KAAK,CAAC,MAAM,CACV,QAA+D;QAU/D,MAAM,EAAE,GAAG,yBAAyB,CAClC,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,EAC9B,IAAI,CAAC,cAAc,CACpB,CAAC;QACF,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,yBAAyB,CAAC,EAAE,CAAC,CAAC;QAChE,MAAM,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC;QAC5C,MAAM,CAAC,WAAW,EAAE,4CAA4C,CAAC,CAAC;QAElE,OAAO;YACL;gBACE,aAAa,EAAE,aAAa,CAAC,QAAQ;gBACrC,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,QAAQ,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE;aACnC;YACD,CAAC,OAAO,CAAC;SACV,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,MAAM,CACV,SAGC;QAED,OAAO,EAAE,CAAC;IACZ,CAAC;CACF"}
@@ -0,0 +1,22 @@
1
+ import { type ChainMetadataForAltVM } from '@recoillink/provider-sdk';
2
+ import { type ArtifactDeployed, type ArtifactNew, type ArtifactReader, type ArtifactWriter } from '@recoillink/provider-sdk/artifact';
3
+ import { type DeployedHookAddress, type RawHookArtifactConfigs } from '@recoillink/provider-sdk/hook';
4
+ import { type AnnotatedTx, type TxReceipt } from '@recoillink/provider-sdk/module';
5
+ import { StarknetProvider } from '../clients/provider.js';
6
+ import { StarknetSigner } from '../clients/signer.js';
7
+ export declare class StarknetProtocolFeeHookReader implements ArtifactReader<RawHookArtifactConfigs['protocolFee'], DeployedHookAddress> {
8
+ protected readonly chainMetadata: ChainMetadataForAltVM;
9
+ protected readonly provider: StarknetProvider;
10
+ constructor(chainMetadata: ChainMetadataForAltVM, provider: StarknetProvider);
11
+ read(address: string): Promise<ArtifactDeployed<RawHookArtifactConfigs['protocolFee'], DeployedHookAddress>>;
12
+ }
13
+ export declare class StarknetProtocolFeeHookWriter extends StarknetProtocolFeeHookReader implements ArtifactWriter<RawHookArtifactConfigs['protocolFee'], DeployedHookAddress> {
14
+ private readonly signer;
15
+ constructor(chainMetadata: ChainMetadataForAltVM, provider: StarknetProvider, signer: StarknetSigner);
16
+ create(artifact: ArtifactNew<RawHookArtifactConfigs['protocolFee']>): Promise<[
17
+ ArtifactDeployed<RawHookArtifactConfigs['protocolFee'], DeployedHookAddress>,
18
+ TxReceipt[]
19
+ ]>;
20
+ update(artifact: ArtifactDeployed<RawHookArtifactConfigs['protocolFee'], DeployedHookAddress>): Promise<AnnotatedTx[]>;
21
+ }
22
+ //# sourceMappingURL=protocol-fee-hook-artifact-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol-fee-hook-artifact-manager.d.ts","sourceRoot":"","sources":["../../src/hook/protocol-fee-hook-artifact-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,WAAW,EAChB,KAAK,cAAc,EAEnB,KAAK,cAAc,EACpB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,sBAAsB,EAC5B,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,SAAS,EACf,MAAM,iCAAiC,CAAC;AASzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AA2FtD,qBAAa,6BAA8B,YAAW,cAAc,CAClE,sBAAsB,CAAC,aAAa,CAAC,EACrC,mBAAmB,CACpB;IAEG,SAAS,CAAC,QAAQ,CAAC,aAAa,EAAE,qBAAqB;IACvD,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,gBAAgB;IAF/C,YACqB,aAAa,EAAE,qBAAqB,EACpC,QAAQ,EAAE,gBAAgB,EAC3C;IAEE,IAAI,CACR,OAAO,EAAE,MAAM,GACd,OAAO,CACR,gBAAgB,CAAC,sBAAsB,CAAC,aAAa,CAAC,EAAE,mBAAmB,CAAC,CAC7E,CA6CA;CACF;AAED,qBAAa,6BACX,SAAQ,6BACR,YACE,cAAc,CAAC,sBAAsB,CAAC,aAAa,CAAC,EAAE,mBAAmB,CAAC;IAK1E,OAAO,CAAC,QAAQ,CAAC,MAAM;IAHzB,YACE,aAAa,EAAE,qBAAqB,EACpC,QAAQ,EAAE,gBAAgB,EACT,MAAM,EAAE,cAAc,EAGxC;IAEK,MAAM,CACV,QAAQ,EAAE,WAAW,CAAC,sBAAsB,CAAC,aAAa,CAAC,CAAC,GAC3D,OAAO,CACR;QACE,gBAAgB,CACd,sBAAsB,CAAC,aAAa,CAAC,EACrC,mBAAmB,CACpB;QACD,SAAS,EAAE;KACZ,CACF,CAkCA;IAEK,MAAM,CACV,QAAQ,EAAE,gBAAgB,CACxB,sBAAsB,CAAC,aAAa,CAAC,EACrC,mBAAmB,CACpB,GACA,OAAO,CAAC,WAAW,EAAE,CAAC,CAsDxB;CACF"}