@rocketh/router 0.17.9 → 0.17.11

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.
package/README.md CHANGED
@@ -1 +1,7 @@
1
- # rocketh-proxy
1
+ # @rocketh/router
2
+
3
+ Immutable Route-based proxy deployment for rocketh, enabling you to deploy contracts via a router pattern that routes calls to different implementations based on function selectors. Similar to diamond proxies, but with a simpler and more gas-efficient implementation and without introspection.
4
+
5
+ For full documentation, visit [rocketh.dev](https://rocketh.dev).
6
+
7
+ For hardhat-deploy documentation, see [rocketh.dev/hardhat-deploy/](https://rocketh.dev/hardhat-deploy/).
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rocketh/router",
3
- "version": "0.17.9",
3
+ "version": "0.17.11",
4
4
  "description": "provide router based proxy deployment for rocketh",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -18,19 +18,20 @@
18
18
  }
19
19
  },
20
20
  "files": [
21
- "dist"
21
+ "dist",
22
+ "src"
22
23
  ],
23
24
  "dependencies": {
24
25
  "abitype": "^1.2.3",
25
26
  "eip-1193": "^0.6.5",
26
27
  "named-logs": "^0.4.1",
27
28
  "solidity-proxy": "^0.4.2",
28
- "viem": "^2.44.1",
29
- "@rocketh/deploy": "0.17.7",
30
- "@rocketh/core": "0.17.7"
29
+ "viem": "^2.44.4",
30
+ "@rocketh/core": "0.17.9",
31
+ "@rocketh/deploy": "0.17.9"
31
32
  },
32
33
  "devDependencies": {
33
- "as-soon": "^0.0.11",
34
+ "as-soon": "^0.1.4",
34
35
  "rimraf": "^6.1.2",
35
36
  "typescript": "^5.9.3"
36
37
  },
package/src/index.ts ADDED
@@ -0,0 +1,142 @@
1
+ import {Abi} from 'abitype';
2
+ import type {Artifact, DeploymentConstruction, Deployment, Environment, DevDoc, UserDoc} from '@rocketh/core/types';
3
+ import '@rocketh/deploy';
4
+ import {mergeArtifacts} from '@rocketh/core/artifacts';
5
+ import {DeployContractParameters} from 'viem';
6
+ import {logs} from 'named-logs';
7
+ import {Router10X60} from 'solidity-proxy/artifacts/index.js';
8
+ import {deploy, DeployOptions, DeployResult} from '@rocketh/deploy';
9
+
10
+ const logger = logs('@rocketh/router');
11
+
12
+ export type Route<TAbi extends Abi = Abi> = Omit<
13
+ DeployContractParameters<TAbi>,
14
+ 'bytecode' | 'account' | 'abi' | 'chain'
15
+ > & {
16
+ name: string;
17
+ artifact: Artifact<TAbi>;
18
+ };
19
+
20
+ export type RouterEnhancedDeploymentConstruction = Omit<
21
+ DeploymentConstruction<typeof Router10X60.abi>,
22
+ 'artifact' | 'args'
23
+ >;
24
+
25
+ export type RouterDeployOptions = DeployOptions & {
26
+ extraABIs?: Abi[];
27
+ routerContract?: {
28
+ type: 'custom';
29
+ artifact: Artifact<typeof Router10X60.abi>;
30
+ };
31
+ };
32
+
33
+ export type DeployViaRouterFunction = <TAbi extends Abi>(
34
+ name: string,
35
+ params: RouterEnhancedDeploymentConstruction,
36
+ routes: Route<Abi>[],
37
+ options?: RouterDeployOptions,
38
+ ) => Promise<Deployment<TAbi> & {newlyDeployed: boolean}>;
39
+
40
+ export function deployViaRouter(
41
+ env: Environment,
42
+ ): <TAbi extends Abi>(
43
+ name: string,
44
+ params: RouterEnhancedDeploymentConstruction,
45
+ routes: Route<Abi>[],
46
+ options?: RouterDeployOptions,
47
+ ) => Promise<DeployResult<TAbi>> {
48
+ return async <TAbi extends Abi>(
49
+ name: string,
50
+ params: RouterEnhancedDeploymentConstruction,
51
+ routes: Route<Abi>[],
52
+ options?: RouterDeployOptions,
53
+ ) => {
54
+ let optionsForRoutes = options ? {deterministic: options.deterministic, libraries: options.libraries} : undefined;
55
+ let optionsForRouter = options
56
+ ? ((options) => {
57
+ const {extraABIs, routerContract, ...optionsForRouter} = options;
58
+ return optionsForRouter;
59
+ })(options)
60
+ : undefined;
61
+ const _deploy = deploy(env);
62
+ const implementations: `0x${string}`[] = [];
63
+
64
+ const namedAbis: {
65
+ name: string;
66
+ artifact: Partial<Artifact<Abi>> & {
67
+ abi: Abi;
68
+ };
69
+ }[] = [];
70
+ for (const route of routes) {
71
+ namedAbis.push(route);
72
+ }
73
+ if (options?.extraABIs) {
74
+ for (let i = 0; i < options.extraABIs.length; i++) {
75
+ const extra = options.extraABIs[i];
76
+ namedAbis.push({name: `extra${i}`, artifact: {abi: extra}});
77
+ }
78
+ }
79
+
80
+ const {sigJSMap, mergedABI, mergedDevDocs, mergedUserDocs} = mergeArtifacts(namedAbis);
81
+ for (const route of routes) {
82
+ const deployedRoute = await _deploy<Abi>(
83
+ `${name}_Router_${route.name}_Route`,
84
+ {
85
+ ...params,
86
+ artifact: route.artifact,
87
+ args: route.args as unknown[],
88
+ },
89
+ optionsForRoutes,
90
+ );
91
+ implementations.push(deployedRoute.address);
92
+ }
93
+
94
+ const fallbackImplementation = '0x0000000000000000000000000000000000000000' as `0x${string}`;
95
+
96
+ const unorderedSigMap: `0x${string}`[] = [];
97
+ for (const entry of sigJSMap) {
98
+ // we add +1 to index as 0 indicate no implementation
99
+ unorderedSigMap.push((entry[0] + entry[1].index.toString(16).padStart(2, '0')) as `0x${string}`);
100
+ }
101
+
102
+ const sigMap = unorderedSigMap.sort();
103
+
104
+ let existingDeployment = env.getOrNull<TAbi>(name);
105
+
106
+ const routeParams = {
107
+ fallbackImplementation,
108
+ implementations,
109
+ sigMap,
110
+ };
111
+
112
+ logger.info(`routes`, routeParams);
113
+
114
+ const router = await _deploy(
115
+ `${name}_Router`,
116
+ {
117
+ ...params,
118
+ artifact: options?.routerContract?.artifact || Router10X60,
119
+ args: [routeParams],
120
+ },
121
+ optionsForRouter,
122
+ );
123
+
124
+ logger.info(`router deployed at ${router.address}`);
125
+
126
+ if (!existingDeployment || router.newlyDeployed) {
127
+ const {newlyDeployed, ...routerWithoutDeployedFlag} = router;
128
+ existingDeployment = await env.save<TAbi>(name, {
129
+ ...routerWithoutDeployedFlag,
130
+ abi: mergedABI as unknown as TAbi,
131
+ devdoc: mergedDevDocs,
132
+ userdoc: mergedUserDocs,
133
+ });
134
+
135
+ logger.info(`save with merged ABI: ${name}`);
136
+
137
+ return {...existingDeployment, newlyDeployed: true};
138
+ }
139
+
140
+ return {...existingDeployment, newlyDeployed: false};
141
+ };
142
+ }