Skip to content

Commit 370bfca

Browse files
committed
Add withUpgradeExecutor file
1 parent 1a5cc7c commit 370bfca

File tree

1 file changed

+56
-0
lines changed

1 file changed

+56
-0
lines changed

src/withUpgradeExecutor.ts

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
import {
2+
Address,
3+
encodeFunctionData as viemEncodeFunctionData,
4+
EncodeFunctionDataParameters as ViemEncodeFunctionDataParameters,
5+
} from 'viem';
6+
import { GetFunctionName } from './types/utils';
7+
import { arbOwner, sequencerInbox } from './contracts';
8+
import { upgradeExecutorEncodeFunctionData } from './upgradeExecutorEncodeFunctionData';
9+
10+
type ABIs = typeof sequencerInbox.abi | typeof arbOwner.abi;
11+
type FunctionName<TAbi extends ABIs> = GetFunctionName<TAbi>;
12+
13+
type EncodeFunctionDataParameters<
14+
TAbi extends ABIs,
15+
TFunctionName extends FunctionName<TAbi>,
16+
> = ViemEncodeFunctionDataParameters<TAbi, TFunctionName>;
17+
18+
function encodeFunctionData<TAbi extends ABIs, TFunctionName extends GetFunctionName<TAbi>>({
19+
abi,
20+
functionName,
21+
args,
22+
}: EncodeFunctionDataParameters<TAbi, TFunctionName>) {
23+
return viemEncodeFunctionData({
24+
abi,
25+
functionName,
26+
args,
27+
} as unknown as ViemEncodeFunctionDataParameters<TAbi, TFunctionName>);
28+
}
29+
30+
export function withUpgradeExecutor<TAbi extends ABIs, TFunctionName extends FunctionName<TAbi>>(
31+
params: EncodeFunctionDataParameters<TAbi, TFunctionName> & {
32+
to: Address;
33+
upgradeExecutor: false | Address;
34+
},
35+
) {
36+
const { upgradeExecutor } = params;
37+
if (!upgradeExecutor) {
38+
return {
39+
to: params.to,
40+
data: encodeFunctionData(params),
41+
value: BigInt(0),
42+
};
43+
}
44+
45+
return {
46+
to: upgradeExecutor,
47+
data: upgradeExecutorEncodeFunctionData({
48+
functionName: 'executeCall',
49+
args: [
50+
params.to, // target
51+
encodeFunctionData(params), // targetCallData
52+
],
53+
}),
54+
value: BigInt(0),
55+
};
56+
}

0 commit comments

Comments
 (0)