viem 2.22.5 → 2.22.7

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 (98) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/README.md +8 -2
  3. package/_cjs/chains/definitions/huddle01Mainnet.js +29 -0
  4. package/_cjs/chains/definitions/huddle01Mainnet.js.map +1 -0
  5. package/_cjs/chains/definitions/huddle01Testnet.js +29 -0
  6. package/_cjs/chains/definitions/huddle01Testnet.js.map +1 -0
  7. package/_cjs/chains/definitions/kroma.js +6 -0
  8. package/_cjs/chains/definitions/kroma.js.map +1 -1
  9. package/_cjs/chains/definitions/kromaSepolia.js +6 -0
  10. package/_cjs/chains/definitions/kromaSepolia.js.map +1 -1
  11. package/_cjs/chains/index.js +11 -7
  12. package/_cjs/chains/index.js.map +1 -1
  13. package/_cjs/errors/version.js +1 -1
  14. package/_cjs/experimental/eip7702/actions/prepareAuthorization.js +9 -8
  15. package/_cjs/experimental/eip7702/actions/prepareAuthorization.js.map +1 -1
  16. package/_cjs/zksync/actions/requestExecute.js +112 -0
  17. package/_cjs/zksync/actions/requestExecute.js.map +1 -0
  18. package/_cjs/zksync/constants/abis.js +3039 -1
  19. package/_cjs/zksync/constants/abis.js.map +1 -1
  20. package/_cjs/zksync/constants/number.js +2 -1
  21. package/_cjs/zksync/constants/number.js.map +1 -1
  22. package/_cjs/zksync/decorators/walletL1.js +10 -0
  23. package/_cjs/zksync/decorators/walletL1.js.map +1 -0
  24. package/_cjs/zksync/errors/bridge.js +24 -0
  25. package/_cjs/zksync/errors/bridge.js.map +1 -0
  26. package/_cjs/zksync/index.js +8 -1
  27. package/_cjs/zksync/index.js.map +1 -1
  28. package/_cjs/zksync/utils/bridge/getL2HashFromPriorityOp.js +28 -0
  29. package/_cjs/zksync/utils/bridge/getL2HashFromPriorityOp.js.map +1 -0
  30. package/_esm/chains/definitions/huddle01Mainnet.js +26 -0
  31. package/_esm/chains/definitions/huddle01Mainnet.js.map +1 -0
  32. package/_esm/chains/definitions/huddle01Testnet.js +26 -0
  33. package/_esm/chains/definitions/huddle01Testnet.js.map +1 -0
  34. package/_esm/chains/definitions/kroma.js +6 -0
  35. package/_esm/chains/definitions/kroma.js.map +1 -1
  36. package/_esm/chains/definitions/kromaSepolia.js +6 -0
  37. package/_esm/chains/definitions/kromaSepolia.js.map +1 -1
  38. package/_esm/chains/index.js +4 -1
  39. package/_esm/chains/index.js.map +1 -1
  40. package/_esm/errors/version.js +1 -1
  41. package/_esm/experimental/eip7702/actions/prepareAuthorization.js +9 -8
  42. package/_esm/experimental/eip7702/actions/prepareAuthorization.js.map +1 -1
  43. package/_esm/zksync/actions/requestExecute.js +167 -0
  44. package/_esm/zksync/actions/requestExecute.js.map +1 -0
  45. package/_esm/zksync/constants/abis.js +3038 -0
  46. package/_esm/zksync/constants/abis.js.map +1 -1
  47. package/_esm/zksync/constants/number.js +1 -0
  48. package/_esm/zksync/constants/number.js.map +1 -1
  49. package/_esm/zksync/decorators/walletL1.js +7 -0
  50. package/_esm/zksync/decorators/walletL1.js.map +1 -0
  51. package/_esm/zksync/errors/bridge.js +19 -0
  52. package/_esm/zksync/errors/bridge.js.map +1 -0
  53. package/_esm/zksync/index.js +3 -0
  54. package/_esm/zksync/index.js.map +1 -1
  55. package/_esm/zksync/utils/bridge/getL2HashFromPriorityOp.js +53 -0
  56. package/_esm/zksync/utils/bridge/getL2HashFromPriorityOp.js.map +1 -0
  57. package/_types/chains/definitions/huddle01Mainnet.d.ts +39 -0
  58. package/_types/chains/definitions/huddle01Mainnet.d.ts.map +1 -0
  59. package/_types/chains/definitions/huddle01Testnet.d.ts +39 -0
  60. package/_types/chains/definitions/huddle01Testnet.d.ts.map +1 -0
  61. package/_types/chains/definitions/kroma.d.ts +6 -10
  62. package/_types/chains/definitions/kroma.d.ts.map +1 -1
  63. package/_types/chains/definitions/kromaSepolia.d.ts +6 -10
  64. package/_types/chains/definitions/kromaSepolia.d.ts.map +1 -1
  65. package/_types/chains/index.d.ts +4 -1
  66. package/_types/chains/index.d.ts.map +1 -1
  67. package/_types/errors/version.d.ts +1 -1
  68. package/_types/experimental/eip7702/actions/prepareAuthorization.d.ts +5 -1
  69. package/_types/experimental/eip7702/actions/prepareAuthorization.d.ts.map +1 -1
  70. package/_types/zksync/actions/requestExecute.d.ts +95 -0
  71. package/_types/zksync/actions/requestExecute.d.ts.map +1 -0
  72. package/_types/zksync/constants/abis.d.ts +2356 -0
  73. package/_types/zksync/constants/abis.d.ts.map +1 -1
  74. package/_types/zksync/constants/number.d.ts +1 -0
  75. package/_types/zksync/constants/number.d.ts.map +1 -1
  76. package/_types/zksync/decorators/walletL1.d.ts +41 -0
  77. package/_types/zksync/decorators/walletL1.d.ts.map +1 -0
  78. package/_types/zksync/errors/bridge.d.ts +14 -0
  79. package/_types/zksync/errors/bridge.d.ts.map +1 -0
  80. package/_types/zksync/index.d.ts +3 -0
  81. package/_types/zksync/index.d.ts.map +1 -1
  82. package/_types/zksync/utils/bridge/getL2HashFromPriorityOp.d.ts +34 -0
  83. package/_types/zksync/utils/bridge/getL2HashFromPriorityOp.d.ts.map +1 -0
  84. package/chains/definitions/huddle01Mainnet.ts +27 -0
  85. package/chains/definitions/huddle01Testnet.ts +27 -0
  86. package/chains/definitions/kroma.ts +6 -0
  87. package/chains/definitions/kromaSepolia.ts +6 -0
  88. package/chains/index.ts +4 -1
  89. package/errors/version.ts +1 -1
  90. package/experimental/eip7702/actions/prepareAuthorization.ts +11 -7
  91. package/package.json +1 -1
  92. package/zksync/actions/requestExecute.ts +282 -0
  93. package/zksync/constants/abis.ts +3040 -0
  94. package/zksync/constants/number.ts +1 -0
  95. package/zksync/decorators/walletL1.ts +71 -0
  96. package/zksync/errors/bridge.ts +29 -0
  97. package/zksync/index.ts +15 -0
  98. package/zksync/utils/bridge/getL2HashFromPriorityOp.ts +63 -0
@@ -0,0 +1,167 @@
1
+ import { generatePrivateKey } from '../../accounts/generatePrivateKey.js';
2
+ import { privateKeyToAddress } from '../../accounts/utils/privateKeyToAddress.js';
3
+ import { readContract } from '../../actions/public/readContract.js';
4
+ import { sendTransaction, } from '../../actions/wallet/sendTransaction.js';
5
+ import { publicActions } from '../../clients/decorators/public.js';
6
+ import { AccountNotFoundError } from '../../errors/account.js';
7
+ import { ClientChainNotConfiguredError } from '../../errors/chain.js';
8
+ import { encodeFunctionData, isAddressEqual, parseAccount, } from '../../utils/index.js';
9
+ import { bridgehubAbi } from '../constants/abis.js';
10
+ import { ethAddressInContracts } from '../constants/address.js';
11
+ import { requiredL1ToL2GasPerPubdataLimit } from '../constants/number.js';
12
+ import { BaseFeeHigherThanValueError, } from '../errors/bridge.js';
13
+ import { estimateGasL1ToL2 } from './estimateGasL1ToL2.js';
14
+ import { getBridgehubContractAddress } from './getBridgehubContractAddress.js';
15
+ /**
16
+ * Requests execution of a L2 transaction from L1.
17
+ *
18
+ * @param client - Client to use
19
+ * @param parameters - {@link RequestExecuteParameters}
20
+ * @returns hash - The [Transaction](https://viem.sh/docs/glossary/terms#transaction) hash. {@link RequestExecuteReturnType}
21
+ *
22
+ * @example
23
+ * import { createPublicClient, http } from 'viem'
24
+ * import { privateKeyToAccount } from 'viem/accounts'
25
+ * import { zksync, mainnet } from 'viem/chains'
26
+ * import { requestExecute, publicActionsL2 } from 'viem/zksync'
27
+ *
28
+ * const client = createPublicClient({
29
+ * chain: mainnet,
30
+ * transport: http(),
31
+ * })
32
+ *
33
+ * const clientL2 = createPublicClient({
34
+ * chain: zksync,
35
+ * transport: http(),
36
+ * }).extend(publicActionsL2())
37
+ *
38
+ * const hash = await requestExecute(client, {
39
+ * client: clientL2,
40
+ * account: privateKeyToAccount('0x…'),
41
+ * contractAddress: '0x43020e6e11cef7dce8e37baa09d9a996ac722057'
42
+ * calldata: '0x',
43
+ * l2Value: 1_000_000_000_000_000_000n,
44
+ * })
45
+ *
46
+ * @example Account Hoisting
47
+ * import { createPublicClient, createWalletClient, http } from 'viem'
48
+ * import { privateKeyToAccount } from 'viem/accounts'
49
+ * import { zksync, mainnet } from 'viem/chains'
50
+ * import { requestExecute, publicActionsL2 } from 'viem/zksync'
51
+ *
52
+ * const client = createWalletClient({
53
+ * account: privateKeyToAccount('0x…'),
54
+ * chain: mainnet,
55
+ * transport: http(),
56
+ * })
57
+ *
58
+ * const clientL2 = createPublicClient({
59
+ * chain: zksync,
60
+ * transport: http(),
61
+ * }).extend(publicActionsL2())
62
+ *
63
+ * const hash = await requestExecute(client, {
64
+ * client: clientL2,
65
+ * contractAddress: '0x43020e6e11cef7dce8e37baa09d9a996ac722057'
66
+ * calldata: '0x',
67
+ * l2Value: 1_000_000_000_000_000_000n,
68
+ * })
69
+ */
70
+ export async function requestExecute(client, parameters) {
71
+ let { account: account_ = client.account, chain: chain_ = client.chain, client: l2Client, contractAddress, calldata, l2Value = 0n, mintValue = 0n, operatorTip = 0n, factoryDeps = [], gasPerPubdataByte = requiredL1ToL2GasPerPubdataLimit, refundRecipient, l2GasLimit, value, gasPrice, maxFeePerGas, maxPriorityFeePerGas, ...rest } = parameters;
72
+ const account = account_ ? parseAccount(account_) : client.account;
73
+ if (!account)
74
+ throw new AccountNotFoundError({
75
+ docsPath: '/docs/actions/wallet/sendTransaction',
76
+ });
77
+ if (!l2Client.chain)
78
+ throw new ClientChainNotConfiguredError();
79
+ const bridgehub = await getBridgehubContractAddress(l2Client);
80
+ const baseToken = await readContract(client, {
81
+ address: bridgehub,
82
+ abi: bridgehubAbi,
83
+ functionName: 'baseToken',
84
+ args: [BigInt(l2Client.chain.id)],
85
+ });
86
+ const isETHBasedChain = isAddressEqual(baseToken, ethAddressInContracts);
87
+ refundRecipient ??= account.address;
88
+ l2GasLimit ??= await estimateGasL1ToL2(l2Client, {
89
+ chain: l2Client.chain,
90
+ // If the `from` address is not provided, we use a random address, because
91
+ // due to storage slot aggregation, the gas estimation will depend on the address
92
+ // and so estimation for the zero address may be smaller than for the sender.
93
+ account: l2Client.account ??
94
+ parseAccount(privateKeyToAddress(generatePrivateKey())),
95
+ data: calldata,
96
+ to: contractAddress,
97
+ value: l2Value,
98
+ gasPerPubdata: gasPerPubdataByte,
99
+ factoryDeps,
100
+ });
101
+ let gasPriceForEstimation = maxFeePerGas || gasPrice;
102
+ if (!gasPriceForEstimation) {
103
+ const estimatedFee = await getFeePrice(client);
104
+ gasPriceForEstimation = estimatedFee.maxFeePerGas;
105
+ maxFeePerGas = estimatedFee.maxFeePerGas;
106
+ maxPriorityFeePerGas ??= estimatedFee.maxPriorityFeePerGas;
107
+ }
108
+ const baseCost = await readContract(client, {
109
+ address: bridgehub,
110
+ abi: bridgehubAbi,
111
+ functionName: 'l2TransactionBaseCost',
112
+ args: [
113
+ BigInt(l2Client.chain.id),
114
+ gasPriceForEstimation,
115
+ l2GasLimit,
116
+ gasPerPubdataByte,
117
+ ],
118
+ });
119
+ const l2Costs = baseCost + operatorTip + l2Value;
120
+ let providedValue = isETHBasedChain ? value : mintValue;
121
+ if (!providedValue || providedValue === 0n) {
122
+ providedValue = l2Costs;
123
+ }
124
+ if (baseCost > providedValue)
125
+ throw new BaseFeeHigherThanValueError(baseCost, providedValue);
126
+ const data = encodeFunctionData({
127
+ abi: bridgehubAbi,
128
+ functionName: 'requestL2TransactionDirect',
129
+ args: [
130
+ {
131
+ chainId: BigInt(l2Client.chain.id),
132
+ mintValue: providedValue,
133
+ l2Contract: contractAddress,
134
+ l2Value: l2Value,
135
+ l2Calldata: calldata,
136
+ l2GasLimit: l2GasLimit,
137
+ l2GasPerPubdataByteLimit: gasPerPubdataByte,
138
+ factoryDeps: factoryDeps,
139
+ refundRecipient: refundRecipient,
140
+ },
141
+ ],
142
+ });
143
+ return await sendTransaction(client, {
144
+ chain: chain_,
145
+ account: account,
146
+ to: bridgehub,
147
+ value: isETHBasedChain ? providedValue : value,
148
+ data,
149
+ gasPrice,
150
+ maxFeePerGas,
151
+ maxPriorityFeePerGas,
152
+ ...rest,
153
+ });
154
+ }
155
+ async function getFeePrice(client) {
156
+ const client_ = client.extend(publicActions);
157
+ const block = await client_.getBlock();
158
+ const baseFee = typeof block.baseFeePerGas !== 'bigint'
159
+ ? await client_.getGasPrice()
160
+ : block.baseFeePerGas;
161
+ const maxPriorityFeePerGas = await client_.estimateMaxPriorityFeePerGas();
162
+ return {
163
+ maxFeePerGas: (baseFee * 3n) / 2n + maxPriorityFeePerGas,
164
+ maxPriorityFeePerGas: maxPriorityFeePerGas,
165
+ };
166
+ }
167
+ //# sourceMappingURL=requestExecute.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"requestExecute.js","sourceRoot":"","sources":["../../../zksync/actions/requestExecute.ts"],"names":[],"mappings":"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"}