-
Notifications
You must be signed in to change notification settings - Fork 2.2k
Open
Labels
A-compatibilityArea: compatibilityArea: compatibilityA-extensionsArea: extensionsArea: extensionsC-forgeCommand: forgeCommand: forgeT-featureType: featureType: feature
Description
Component
Forge
Describe the feature you would like
Overview
zkSync deployments use an EIP-712 style transaction for contract deployments rather than the standard EIP-1559. As far as I know this is only used by zkSync but it would be very helpful to have for deployments. Without support for this transaction type, deployment to zkSync with foundry is not possible other than deploying from L1 through the bridge.
Details
The EIP-712 transaction type defined by zkSync follows the format below:
const EIP712_TYPE = "0x71";
const data = EIP712_TYPE + RLP.encode([
nonce,
maxPriorityFeePerGas,
maxFeePerGas,
gasLimit,
to,
value,
data,
chainId,
0x,
0x,
chainId,
from,
gasPerPubData,
factoryDeps[],
customSignature, // EIP712 signature
[paymaster, paymasterInput]
]);
sendTransaction(data);
where customSignature
is a signature of the following struct:
Field name | Type |
---|---|
txType | uint256 |
from | uint256 |
to | uint256 |
gasLimit | uint256 |
gasPerPubdataByteLimit | uint256 |
maxFeePerGas | uint256 |
maxPriorityFeePerGas | uint256 |
paymaster | uint256 |
nonce | uint256 |
value | uint256 |
data | bytes |
factoryDeps | bytes32[] |
paymasterInput | bytes |
Additional context
Implementation wise it would not make sense to add support for this specific transaction type, but it may be feasible to add a cheatcode for generic sendTransaction
or any other RPC calls.
Leaving the proper implementation open to discussion.
codyx, ernestognw, bixia, dutterbutter and yonikesel1
Metadata
Metadata
Assignees
Labels
A-compatibilityArea: compatibilityArea: compatibilityA-extensionsArea: extensionsArea: extensionsC-forgeCommand: forgeCommand: forgeT-featureType: featureType: feature
Type
Projects
Status
Next Up