@@ -72,6 +72,7 @@
:max-amount="maxAmount"
:approve-required="!enoughAllowance"
:loading="tokensRequestInProgress || balanceInProgress"
+ :merge-limit-exceeds="mergeLimitExceeds"
class="mb-block-padding-1/2 sm:mb-block-gap"
>
@@ -134,6 +135,13 @@
+
Receive funds
+
+
+ Merge Token
+
+
+
+ Merge
+
+
+
+
Checking allowance error: {{ allowanceRequestError.message }}
@@ -374,6 +402,7 @@ import { storeToRefs } from "pinia";
import EthereumTransactionFooter from "@/components/transaction/EthereumTransactionFooter.vue";
import useAllowance from "@/composables/transaction/useAllowance";
+import useMergeToken from "@/composables/transaction/useMergeToken";
import useInterval from "@/composables/useInterval";
import useNetworks from "@/composables/useNetworks";
import useEcosystemBanner from "@/composables/zksync/deposit/useEcosystemBanner";
@@ -387,6 +416,7 @@ import type { BigNumberish } from "ethers";
import { useRoute, useRouter } from "#app";
import { customBridgeTokens } from "@/data/customBridgeTokens";
+import { getWaitTime } from "@/data/networks";
import { useDestinationsStore } from "@/store/destinations";
import { useNetworkStore } from "@/store/network";
import { useOnboardStore } from "@/store/onboard";
@@ -403,13 +433,14 @@ import { silentRouterChange } from "@/utils/helpers";
import { TransitionAlertScaleInOutTransition, TransitionOpacity } from "@/utils/transitions";
import DepositSubmitted from "@/views/transactions/DepositSubmitted.vue";
import { ETH_ADDRESS } from "~/zksync-web3-nova/src/utils";
-import { getWaitTime } from "@/data/networks";
+import { Switch } from "@headlessui/vue";
+
+const okxIcon = "/img/okx-cryptopedia.svg";
+const launchIcon = "/img/launch.svg";
const route = useRoute();
const router = useRouter();
-console.log("route", route.query);
-
const onboardStore = useOnboardStore();
const tokensStore = useZkSyncTokensStore();
const providerStore = useZkSyncProviderStore();
@@ -431,6 +462,7 @@ const fromNetworkSelected = (networkKey?: string) => {
}
};
const step = ref<"form" | "confirm" | "submitted">("form");
+const isMerge = ref(true);
const destination = computed(() => destinations.value.nova);
const availableTokens = computed(() => {
if (balance.value) return balance.value;
@@ -497,6 +529,9 @@ const amountInputTokenAddress = computed({
const tokenBalance = computed(() => {
return balance.value?.find((e) => e.address === selectedToken.value?.address)?.amount;
});
+const { result: mergeTokenInfo, inProgress: mergeTokenInfoInProgress } = useMergeToken(
+ computed(() => selectedToken.value?.l2Address)
+);
const {
result: allowance,
@@ -599,11 +634,28 @@ const totalComputeAmount = computed(() => {
});
const enoughBalanceForTransaction = computed(() => !amountError.value);
+const mergeSupported = computed(() => {
+ return mergeTokenInfo.value?.isSupported && !mergeTokenInfo.value?.isLocked;
+});
+
+const mergeLimitExceeds = computed(() => {
+ if (!selectedToken.value || !mergeTokenInfo.value || !amount.value) return false;
+ try {
+ const amountVal = decimalToBigNumber(amount.value, selectedToken.value.decimals);
+ const exceeds = amountVal.add(mergeTokenInfo.value?.balance).gt(mergeTokenInfo.value?.depositLimit);
+ console.log("exceeds: ", exceeds);
+ return mergeSupported.value && isMerge.value && exceeds;
+ } catch (e) { // may throw exception when amount exceeds decimals
+ return false;
+}
+});
+
const transaction = computed<
| {
token: TokenAmount;
from: { address: string; destination: TransactionDestinfonboardStoreation };
to: { address: string; destination: TransactionDestination };
+ toMerge?: boolean;
}
| undefined
>(() => {
@@ -624,6 +676,7 @@ const transaction = computed<
address: toAddress,
destination: destination.value,
},
+ toMerge: isMerge.value,
};
});
const transactionHasGateway = ref();
@@ -689,6 +742,7 @@ const continueButtonDisabled = computed(() => {
if (!enoughAllowance.value) return false; // When allowance approval is required we can proceed to approve stage even if deposit fee is not loaded
if (!isAddressInputValid.value) return true;
if (feeLoading.value || !fee.value) return true;
+ if (mergeLimitExceeds.value) return true;
return false;
});
@@ -730,6 +784,7 @@ const makeTransaction = async () => {
to: transaction.value!.to.address,
tokenAddress: transaction.value!.token.address,
amount: transaction.value!.token.amount,
+ toMerge: transaction.value!.toMerge,
},
feeValues.value!
);
@@ -773,7 +828,7 @@ const makeTransaction = async () => {
transactionInfo.value = completedTransaction;
setTimeout(() => {
transfersHistoryStore.reloadRecentTransfers().catch(() => undefined);
- eraWalletStore.requestBalance({ force: true }).catch(() => undefined);
+ fetchBalances(true).catch(() => undefined);
}, 2000);
})
.catch((err) => {
@@ -912,4 +967,31 @@ onboardStore.subscribeOnNetworkChange((newchainId) => {
}
}
}
+.merge {
+ border-radius: 16px;
+ background: rgba(3, 212, 152, 0.5) !important;
+}
+.notMerge {
+ border-radius: 16px;
+ background: rgba(23, 85, 244, 0.25) !important;
+}
+.showTip:hover{
+ .tooltip{
+ display: block;
+ z-index: 100;
+ }
+}
+.tooltip{
+ display: none;
+ position: absolute;
+ padding: 12px 20px 12px 24px;
+ top: -4.5rem;
+ width: 35rem;
+ left: -10rem;
+ border-radius: 8px;
+ background: #1F2127;
+ a{
+ color: #1755F4;
+ }
+}
diff --git a/zksync-web3-nova/abi/IL1Bridge.json b/zksync-web3-nova/abi/IL1Bridge.json
index f0cb57599..ac6c1c7ee 100644
--- a/zksync-web3-nova/abi/IL1Bridge.json
+++ b/zksync-web3-nova/abi/IL1Bridge.json
@@ -1,5 +1,13 @@
{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "IL1Bridge",
+ "sourceName": "cache/solpp-generated-contracts/bridge/interfaces/IL1Bridge.sol",
"abi": [
+ {
+ "inputs": [],
+ "name": "FunctionNotSupported",
+ "type": "error"
+ },
{
"anonymous": false,
"inputs": [
@@ -28,6 +36,12 @@
{
"anonymous": false,
"inputs": [
+ {
+ "indexed": true,
+ "internalType": "bytes32",
+ "name": "l2DepositTxHash",
+ "type": "bytes32"
+ },
{
"indexed": true,
"internalType": "address",
@@ -41,7 +55,7 @@
"type": "address"
},
{
- "indexed": true,
+ "indexed": false,
"internalType": "address",
"name": "l1Token",
"type": "address"
@@ -56,6 +70,49 @@
"name": "DepositInitiated",
"type": "event"
},
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "bytes32",
+ "name": "l2DepositTxHash",
+ "type": "bytes32"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "address",
+ "name": "l1Token",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "bool",
+ "name": "toMerge",
+ "type": "bool"
+ }
+ ],
+ "name": "DepositToMergeInitiated",
+ "type": "event"
+ },
{
"anonymous": false,
"inputs": [
@@ -100,7 +157,7 @@
},
{
"internalType": "uint256",
- "name": "_l2BlockNumber",
+ "name": "_l2BatchNumber",
"type": "uint256"
},
{
@@ -110,7 +167,7 @@
},
{
"internalType": "uint16",
- "name": "_l2TxNumberInBlock",
+ "name": "_l2TxNumberInBatch",
"type": "uint16"
},
{
@@ -150,6 +207,11 @@
"internalType": "uint256",
"name": "_l2TxGasPerPubdataByte",
"type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "_refundRecipient",
+ "type": "address"
}
],
"name": "deposit",
@@ -165,9 +227,53 @@
},
{
"inputs": [
+ {
+ "internalType": "address",
+ "name": "_l2Receiver",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_l1Token",
+ "type": "address"
+ },
{
"internalType": "uint256",
- "name": "_l2BlockNumber",
+ "name": "_amount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_l2TxGasLimit",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_l2TxGasPerPubdataByte",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "_refundRecipient",
+ "type": "address"
+ }
+ ],
+ "name": "depositToMerge",
+ "outputs": [
+ {
+ "internalType": "bytes32",
+ "name": "txHash",
+ "type": "bytes32"
+ }
+ ],
+ "stateMutability": "payable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_l2BatchNumber",
"type": "uint256"
},
{
@@ -177,7 +283,7 @@
},
{
"internalType": "uint16",
- "name": "_l2TxNumberInBlock",
+ "name": "_l2TxNumberInBatch",
"type": "uint16"
},
{
@@ -200,7 +306,7 @@
"inputs": [
{
"internalType": "uint256",
- "name": "_l2BlockNumber",
+ "name": "_l2BatchNumber",
"type": "uint256"
},
{
@@ -220,6 +326,19 @@
"stateMutability": "view",
"type": "function"
},
+ {
+ "inputs": [],
+ "name": "l2Bridge",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
{
"inputs": [
{
@@ -239,5 +358,9 @@
"stateMutability": "view",
"type": "function"
}
- ]
+ ],
+ "bytecode": "0x",
+ "deployedBytecode": "0x",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
}
diff --git a/zksync-web3-nova/abi/IL2Bridge.json b/zksync-web3-nova/abi/IL2Bridge.json
index e62a099dc..f1b9d3ca1 100644
--- a/zksync-web3-nova/abi/IL2Bridge.json
+++ b/zksync-web3-nova/abi/IL2Bridge.json
@@ -1,5 +1,13 @@
{
+ "_format": "hh-zksolc-artifact-1",
+ "contractName": "IL2Bridge",
+ "sourceName": "cache-zk/solpp-generated-contracts/bridge/interfaces/IL2Bridge.sol",
"abi": [
+ {
+ "inputs": [],
+ "name": "FunctionNotSupported",
+ "type": "error"
+ },
{
"anonymous": false,
"inputs": [
@@ -31,6 +39,43 @@
"name": "FinalizeDeposit",
"type": "event"
},
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "l1Sender",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "l2Receiver",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "l2Token",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "address",
+ "name": "mergeToken",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "FinalizeDepositToMerge",
+ "type": "event"
+ },
{
"anonymous": false,
"inputs": [
@@ -92,7 +137,40 @@
],
"name": "finalizeDeposit",
"outputs": [],
- "stateMutability": "nonpayable",
+ "stateMutability": "payable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_l1Sender",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_l2Receiver",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_l1Token",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_amount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "_data",
+ "type": "bytes"
+ }
+ ],
+ "name": "finalizeDepositToMerge",
+ "outputs": [],
+ "stateMutability": "payable",
"type": "function"
},
{
@@ -169,5 +247,10 @@
"stateMutability": "nonpayable",
"type": "function"
}
- ]
+ ],
+ "bytecode": "0x",
+ "deployedBytecode": "0x",
+ "linkReferences": {},
+ "deployedLinkReferences": {},
+ "factoryDeps": {}
}
diff --git a/zksync-web3-nova/abi/MergeTokenPortal.json b/zksync-web3-nova/abi/MergeTokenPortal.json
new file mode 100644
index 000000000..e0d29118b
--- /dev/null
+++ b/zksync-web3-nova/abi/MergeTokenPortal.json
@@ -0,0 +1,522 @@
+[
+ {
+ "inputs": [],
+ "stateMutability": "nonpayable",
+ "type": "constructor"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "address",
+ "name": "previousAdmin",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "address",
+ "name": "newAdmin",
+ "type": "address"
+ }
+ ],
+ "name": "AdminChanged",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "beacon",
+ "type": "address"
+ }
+ ],
+ "name": "BeaconUpgraded",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "sourceToken",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "depositLimit",
+ "type": "uint256"
+ }
+ ],
+ "name": "DepositLimitUpdated",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "sourceToken",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "address",
+ "name": "mergeToken",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "address",
+ "name": "sender",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "address",
+ "name": "receiver",
+ "type": "address"
+ }
+ ],
+ "name": "DepositToMerge",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "uint8",
+ "name": "version",
+ "type": "uint8"
+ }
+ ],
+ "name": "Initialized",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "previousOwner",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "newOwner",
+ "type": "address"
+ }
+ ],
+ "name": "OwnershipTransferred",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "sourceToken",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "address",
+ "name": "mergeToken",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "depositLimit",
+ "type": "uint256"
+ }
+ ],
+ "name": "SourceTokenAdded",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "sourceToken",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "bool",
+ "name": "isLocked",
+ "type": "bool"
+ }
+ ],
+ "name": "SourceTokenLocked",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "sourceToken",
+ "type": "address"
+ }
+ ],
+ "name": "SourceTokenRemoved",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "implementation",
+ "type": "address"
+ }
+ ],
+ "name": "Upgraded",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "sourceToken",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "address",
+ "name": "mergeToken",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "address",
+ "name": "sender",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "address",
+ "name": "receiver",
+ "type": "address"
+ }
+ ],
+ "name": "WithdrawFromMerge",
+ "type": "event"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_sourceToken",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_mergeToken",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_depositLimit",
+ "type": "uint256"
+ }
+ ],
+ "name": "addSourceToken",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_sourceToken",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_amount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "_receiver",
+ "type": "address"
+ }
+ ],
+ "name": "deposit",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_sourceToken",
+ "type": "address"
+ }
+ ],
+ "name": "getSourceTokenInfos",
+ "outputs": [
+ {
+ "components": [
+ {
+ "internalType": "bool",
+ "name": "isSupported",
+ "type": "bool"
+ },
+ {
+ "internalType": "bool",
+ "name": "isLocked",
+ "type": "bool"
+ },
+ {
+ "internalType": "address",
+ "name": "mergeToken",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "balance",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "depositLimit",
+ "type": "uint256"
+ }
+ ],
+ "internalType": "struct IMergeTokenPortal.SourceTokenInfo",
+ "name": "",
+ "type": "tuple"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "initialize",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "owner",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "proxiableUUID",
+ "outputs": [
+ {
+ "internalType": "bytes32",
+ "name": "",
+ "type": "bytes32"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_sourceToken",
+ "type": "address"
+ }
+ ],
+ "name": "removeSourceToken",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "renounceOwnership",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_sourceToken",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_limit",
+ "type": "uint256"
+ }
+ ],
+ "name": "setDepositLimit",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "sourceToken",
+ "type": "address"
+ }
+ ],
+ "name": "sourceTokenInfoMap",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "isSupported",
+ "type": "bool"
+ },
+ {
+ "internalType": "bool",
+ "name": "isLocked",
+ "type": "bool"
+ },
+ {
+ "internalType": "address",
+ "name": "mergeToken",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "balance",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "depositLimit",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "newOwner",
+ "type": "address"
+ }
+ ],
+ "name": "transferOwnership",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_sourceToken",
+ "type": "address"
+ },
+ {
+ "internalType": "bool",
+ "name": "_isLocked",
+ "type": "bool"
+ }
+ ],
+ "name": "updateDepositStatus",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "newImplementation",
+ "type": "address"
+ }
+ ],
+ "name": "upgradeTo",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "newImplementation",
+ "type": "address"
+ },
+ {
+ "internalType": "bytes",
+ "name": "data",
+ "type": "bytes"
+ }
+ ],
+ "name": "upgradeToAndCall",
+ "outputs": [],
+ "stateMutability": "payable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_sourceToken",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_amount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "_receiver",
+ "type": "address"
+ }
+ ],
+ "name": "withdraw",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ]
+
\ No newline at end of file
diff --git a/zksync-web3-nova/src/adapters.ts b/zksync-web3-nova/src/adapters.ts
index 842e68b27..fc77a34be 100644
--- a/zksync-web3-nova/src/adapters.ts
+++ b/zksync-web3-nova/src/adapters.ts
@@ -179,6 +179,7 @@ export function AdapterL1>(Base: TBase) {
async deposit(transaction: {
token: Address;
amount: BigNumberish;
+ toMerge?: boolean;
to?: Address;
operatorTip?: BigNumberish;
bridgeAddress?: Address;
@@ -333,6 +334,7 @@ export function AdapterL1>(Base: TBase) {
async getDepositTx(transaction: {
token: Address;
amount: BigNumberish;
+ toMerge?: boolean;
to?: Address;
operatorTip?: BigNumberish;
bridgeAddress?: Address;
@@ -357,7 +359,8 @@ export function AdapterL1>(Base: TBase) {
tx.amount,
tx.to,
await this.getAddress(),
- tx.gasPerPubdataByte
+ tx.gasPerPubdataByte,
+ tx.toMerge
);
const { to, token, amount, operatorTip, overrides } = tx;
@@ -387,18 +390,21 @@ export function AdapterL1>(Base: TBase) {
...tx,
};
} else {
- const args: [Address, Address, BigNumberish, BigNumberish, BigNumberish] = [
+ const args: [Address, Address, BigNumberish, BigNumberish, BigNumberish, Address] = [
to,
token,
amount,
tx.l2GasLimit,
tx.gasPerPubdataByte,
+ to,
];
-
+ debugger;
overrides.value ??= baseCost.add(operatorTip);
await checkBaseCost(baseCost, overrides.value);
- return await bridgeContracts.erc20.populateTransaction.deposit(...args, overrides);
+ return tx.toMerge
+ ? await bridgeContracts.erc20.populateTransaction.depositToMerge(...args, overrides)
+ : await bridgeContracts.erc20.populateTransaction.deposit(...args, overrides);
}
}
diff --git a/zksync-web3-nova/src/utils.ts b/zksync-web3-nova/src/utils.ts
index 988336e02..18de9d1eb 100644
--- a/zksync-web3-nova/src/utils.ts
+++ b/zksync-web3-nova/src/utils.ts
@@ -427,10 +427,11 @@ export async function getERC20BridgeCalldata(
l1Sender: string,
l2Receiver: string,
amount: BigNumberish,
- provider: ethers.providers.Provider
+ provider: ethers.providers.Provider,
+ toMerge?: boolean
): Promise {
const gettersData = await getERC20GettersData(l1TokenAddress, provider);
- return L2_BRIDGE_ABI.encodeFunctionData("finalizeDeposit", [
+ return L2_BRIDGE_ABI.encodeFunctionData(toMerge ? "finalizeDepositToMerge" : "finalizeDeposit", [
l1Sender,
l2Receiver,
l1TokenAddress,
@@ -524,7 +525,8 @@ export async function estimateDefaultBridgeDepositL2Gas(
amount: BigNumberish,
to: Address,
from?: Address,
- gasPerPubdataByte?: BigNumberish
+ gasPerPubdataByte?: BigNumberish,
+ toMerge?: boolean
): Promise {
// If the `from` address is not provided, we use a random address, because
// due to storage slot aggregation, the gas estimation will depend on the address
@@ -543,7 +545,7 @@ export async function estimateDefaultBridgeDepositL2Gas(
const l1ERC20BridgeAddresses = (await providerL2.getDefaultBridgeAddresses()).erc20L1;
const erc20BridgeAddress = (await providerL2.getDefaultBridgeAddresses()).erc20L2;
- const calldata = await getERC20BridgeCalldata(token, from, to, amount, providerL1);
+ const calldata = await getERC20BridgeCalldata(token, from, to, amount, providerL1, toMerge);
return await providerL2.estimateL1ToL2Execute({
caller: applyL1ToL2Alias(l1ERC20BridgeAddresses!),
diff --git a/zksync-web3-nova/typechain/IL1Bridge.d.ts b/zksync-web3-nova/typechain/IL1Bridge.d.ts
index e770ca819..5e56608f9 100644
--- a/zksync-web3-nova/typechain/IL1Bridge.d.ts
+++ b/zksync-web3-nova/typechain/IL1Bridge.d.ts
@@ -24,9 +24,11 @@ import { FunctionFragment, EventFragment, Result } from "@ethersproject/abi";
interface IL1BridgeInterface extends ethers.utils.Interface {
functions: {
"claimFailedDeposit(address,address,bytes32,uint256,uint256,uint16,bytes32[])": FunctionFragment;
- "deposit(address,address,uint256,uint256,uint256)": FunctionFragment;
+ "deposit(address,address,uint256,uint256,uint256,address)": FunctionFragment;
+ "depositToMerge(address,address,uint256,uint256,uint256,address)": FunctionFragment;
"finalizeWithdrawal(uint256,uint256,uint16,bytes,bytes32[])": FunctionFragment;
"isWithdrawalFinalized(uint256,uint256)": FunctionFragment;
+ "l2Bridge()": FunctionFragment;
"l2TokenAddress(address)": FunctionFragment;
};
@@ -44,7 +46,11 @@ interface IL1BridgeInterface extends ethers.utils.Interface {
): string;
encodeFunctionData(
functionFragment: "deposit",
- values: [string, string, BigNumberish, BigNumberish, BigNumberish]
+ values: [string, string, BigNumberish, BigNumberish, BigNumberish, string]
+ ): string;
+ encodeFunctionData(
+ functionFragment: "depositToMerge",
+ values: [string, string, BigNumberish, BigNumberish, BigNumberish, string]
): string;
encodeFunctionData(
functionFragment: "finalizeWithdrawal",
@@ -54,6 +60,7 @@ interface IL1BridgeInterface extends ethers.utils.Interface {
functionFragment: "isWithdrawalFinalized",
values: [BigNumberish, BigNumberish]
): string;
+ encodeFunctionData(functionFragment: "l2Bridge", values?: undefined): string;
encodeFunctionData(
functionFragment: "l2TokenAddress",
values: [string]
@@ -64,6 +71,10 @@ interface IL1BridgeInterface extends ethers.utils.Interface {
data: BytesLike
): Result;
decodeFunctionResult(functionFragment: "deposit", data: BytesLike): Result;
+ decodeFunctionResult(
+ functionFragment: "depositToMerge",
+ data: BytesLike
+ ): Result;
decodeFunctionResult(
functionFragment: "finalizeWithdrawal",
data: BytesLike
@@ -72,6 +83,7 @@ interface IL1BridgeInterface extends ethers.utils.Interface {
functionFragment: "isWithdrawalFinalized",
data: BytesLike
): Result;
+ decodeFunctionResult(functionFragment: "l2Bridge", data: BytesLike): Result;
decodeFunctionResult(
functionFragment: "l2TokenAddress",
data: BytesLike
@@ -79,12 +91,14 @@ interface IL1BridgeInterface extends ethers.utils.Interface {
events: {
"ClaimedFailedDeposit(address,address,uint256)": EventFragment;
- "DepositInitiated(address,address,address,uint256)": EventFragment;
+ "DepositInitiated(bytes32,address,address,address,uint256)": EventFragment;
+ "DepositToMergeInitiated(bytes32,address,address,address,uint256,bool)": EventFragment;
"WithdrawalFinalized(address,address,uint256)": EventFragment;
};
getEvent(nameOrSignatureOrTopic: "ClaimedFailedDeposit"): EventFragment;
getEvent(nameOrSignatureOrTopic: "DepositInitiated"): EventFragment;
+ getEvent(nameOrSignatureOrTopic: "DepositToMergeInitiated"): EventFragment;
getEvent(nameOrSignatureOrTopic: "WithdrawalFinalized"): EventFragment;
}
@@ -106,9 +120,9 @@ export class IL1Bridge extends Contract {
_depositSender: string,
_l1Token: string,
_l2TxHash: BytesLike,
- _l2BlockNumber: BigNumberish,
+ _l2BatchNumber: BigNumberish,
_l2MessageIndex: BigNumberish,
- _l2TxNumberInBlock: BigNumberish,
+ _l2TxNumberInBatch: BigNumberish,
_merkleProof: BytesLike[],
overrides?: Overrides
): Promise;
@@ -117,9 +131,9 @@ export class IL1Bridge extends Contract {
_depositSender: string,
_l1Token: string,
_l2TxHash: BytesLike,
- _l2BlockNumber: BigNumberish,
+ _l2BatchNumber: BigNumberish,
_l2MessageIndex: BigNumberish,
- _l2TxNumberInBlock: BigNumberish,
+ _l2TxNumberInBatch: BigNumberish,
_merkleProof: BytesLike[],
overrides?: Overrides
): Promise;
@@ -130,38 +144,60 @@ export class IL1Bridge extends Contract {
_amount: BigNumberish,
_l2TxGasLimit: BigNumberish,
_l2TxGasPerPubdataByte: BigNumberish,
+ _refundRecipient: string,
+ overrides?: PayableOverrides
+ ): Promise;
+
+ "deposit(address,address,uint256,uint256,uint256,address)"(
+ _l2Receiver: string,
+ _l1Token: string,
+ _amount: BigNumberish,
+ _l2TxGasLimit: BigNumberish,
+ _l2TxGasPerPubdataByte: BigNumberish,
+ _refundRecipient: string,
overrides?: PayableOverrides
): Promise;
- "deposit(address,address,uint256,uint256,uint256)"(
+ depositToMerge(
_l2Receiver: string,
_l1Token: string,
_amount: BigNumberish,
_l2TxGasLimit: BigNumberish,
_l2TxGasPerPubdataByte: BigNumberish,
+ _refundRecipient: string,
+ overrides?: PayableOverrides
+ ): Promise;
+
+ "depositToMerge(address,address,uint256,uint256,uint256,address)"(
+ _l2Receiver: string,
+ _l1Token: string,
+ _amount: BigNumberish,
+ _l2TxGasLimit: BigNumberish,
+ _l2TxGasPerPubdataByte: BigNumberish,
+ _refundRecipient: string,
overrides?: PayableOverrides
): Promise;
finalizeWithdrawal(
- _l2BlockNumber: BigNumberish,
+ _l2BatchNumber: BigNumberish,
_l2MessageIndex: BigNumberish,
- _l2TxNumberInBlock: BigNumberish,
+ _l2TxNumberInBatch: BigNumberish,
_message: BytesLike,
_merkleProof: BytesLike[],
overrides?: Overrides
): Promise;
"finalizeWithdrawal(uint256,uint256,uint16,bytes,bytes32[])"(
- _l2BlockNumber: BigNumberish,
+ _l2BatchNumber: BigNumberish,
_l2MessageIndex: BigNumberish,
- _l2TxNumberInBlock: BigNumberish,
+ _l2TxNumberInBatch: BigNumberish,
_message: BytesLike,
_merkleProof: BytesLike[],
overrides?: Overrides
): Promise;
isWithdrawalFinalized(
- _l2BlockNumber: BigNumberish,
+ _l2BatchNumber: BigNumberish,
_l2MessageIndex: BigNumberish,
overrides?: CallOverrides
): Promise<{
@@ -169,13 +205,21 @@ export class IL1Bridge extends Contract {
}>;
"isWithdrawalFinalized(uint256,uint256)"(
- _l2BlockNumber: BigNumberish,
+ _l2BatchNumber: BigNumberish,
_l2MessageIndex: BigNumberish,
overrides?: CallOverrides
): Promise<{
0: boolean;
}>;
+ l2Bridge(overrides?: CallOverrides): Promise<{
+ 0: string;
+ }>;
+
+ "l2Bridge()"(overrides?: CallOverrides): Promise<{
+ 0: string;
+ }>;
+
l2TokenAddress(
_l1Token: string,
overrides?: CallOverrides
@@ -195,9 +239,9 @@ export class IL1Bridge extends Contract {
_depositSender: string,
_l1Token: string,
_l2TxHash: BytesLike,
- _l2BlockNumber: BigNumberish,
+ _l2BatchNumber: BigNumberish,
_l2MessageIndex: BigNumberish,
- _l2TxNumberInBlock: BigNumberish,
+ _l2TxNumberInBatch: BigNumberish,
_merkleProof: BytesLike[],
overrides?: Overrides
): Promise;
@@ -206,9 +250,9 @@ export class IL1Bridge extends Contract {
_depositSender: string,
_l1Token: string,
_l2TxHash: BytesLike,
- _l2BlockNumber: BigNumberish,
+ _l2BatchNumber: BigNumberish,
_l2MessageIndex: BigNumberish,
- _l2TxNumberInBlock: BigNumberish,
+ _l2TxNumberInBatch: BigNumberish,
_merkleProof: BytesLike[],
overrides?: Overrides
): Promise;
@@ -219,48 +263,74 @@ export class IL1Bridge extends Contract {
_amount: BigNumberish,
_l2TxGasLimit: BigNumberish,
_l2TxGasPerPubdataByte: BigNumberish,
+ _refundRecipient: string,
overrides?: PayableOverrides
): Promise;
- "deposit(address,address,uint256,uint256,uint256)"(
+ "deposit(address,address,uint256,uint256,uint256,address)"(
_l2Receiver: string,
_l1Token: string,
_amount: BigNumberish,
_l2TxGasLimit: BigNumberish,
_l2TxGasPerPubdataByte: BigNumberish,
+ _refundRecipient: string,
+ overrides?: PayableOverrides
+ ): Promise;
+
+ depositToMerge(
+ _l2Receiver: string,
+ _l1Token: string,
+ _amount: BigNumberish,
+ _l2TxGasLimit: BigNumberish,
+ _l2TxGasPerPubdataByte: BigNumberish,
+ _refundRecipient: string,
+ overrides?: PayableOverrides
+ ): Promise;
+
+ "depositToMerge(address,address,uint256,uint256,uint256,address)"(
+ _l2Receiver: string,
+ _l1Token: string,
+ _amount: BigNumberish,
+ _l2TxGasLimit: BigNumberish,
+ _l2TxGasPerPubdataByte: BigNumberish,
+ _refundRecipient: string,
overrides?: PayableOverrides
): Promise;
finalizeWithdrawal(
- _l2BlockNumber: BigNumberish,
+ _l2BatchNumber: BigNumberish,
_l2MessageIndex: BigNumberish,
- _l2TxNumberInBlock: BigNumberish,
+ _l2TxNumberInBatch: BigNumberish,
_message: BytesLike,
_merkleProof: BytesLike[],
overrides?: Overrides
): Promise;
"finalizeWithdrawal(uint256,uint256,uint16,bytes,bytes32[])"(
- _l2BlockNumber: BigNumberish,
+ _l2BatchNumber: BigNumberish,
_l2MessageIndex: BigNumberish,
- _l2TxNumberInBlock: BigNumberish,
+ _l2TxNumberInBatch: BigNumberish,
_message: BytesLike,
_merkleProof: BytesLike[],
overrides?: Overrides
): Promise;
isWithdrawalFinalized(
- _l2BlockNumber: BigNumberish,
+ _l2BatchNumber: BigNumberish,
_l2MessageIndex: BigNumberish,
overrides?: CallOverrides
): Promise;
"isWithdrawalFinalized(uint256,uint256)"(
- _l2BlockNumber: BigNumberish,
+ _l2BatchNumber: BigNumberish,
_l2MessageIndex: BigNumberish,
overrides?: CallOverrides
): Promise;
+ l2Bridge(overrides?: CallOverrides): Promise;
+
+ "l2Bridge()"(overrides?: CallOverrides): Promise;
+
l2TokenAddress(_l1Token: string, overrides?: CallOverrides): Promise;
"l2TokenAddress(address)"(
@@ -273,9 +343,9 @@ export class IL1Bridge extends Contract {
_depositSender: string,
_l1Token: string,
_l2TxHash: BytesLike,
- _l2BlockNumber: BigNumberish,
+ _l2BatchNumber: BigNumberish,
_l2MessageIndex: BigNumberish,
- _l2TxNumberInBlock: BigNumberish,
+ _l2TxNumberInBatch: BigNumberish,
_merkleProof: BytesLike[],
overrides?: CallOverrides
): Promise;
@@ -284,9 +354,9 @@ export class IL1Bridge extends Contract {
_depositSender: string,
_l1Token: string,
_l2TxHash: BytesLike,
- _l2BlockNumber: BigNumberish,
+ _l2BatchNumber: BigNumberish,
_l2MessageIndex: BigNumberish,
- _l2TxNumberInBlock: BigNumberish,
+ _l2TxNumberInBatch: BigNumberish,
_merkleProof: BytesLike[],
overrides?: CallOverrides
): Promise;
@@ -297,48 +367,74 @@ export class IL1Bridge extends Contract {
_amount: BigNumberish,
_l2TxGasLimit: BigNumberish,
_l2TxGasPerPubdataByte: BigNumberish,
+ _refundRecipient: string,
+ overrides?: CallOverrides
+ ): Promise;
+
+ "deposit(address,address,uint256,uint256,uint256,address)"(
+ _l2Receiver: string,
+ _l1Token: string,
+ _amount: BigNumberish,
+ _l2TxGasLimit: BigNumberish,
+ _l2TxGasPerPubdataByte: BigNumberish,
+ _refundRecipient: string,
overrides?: CallOverrides
): Promise;
- "deposit(address,address,uint256,uint256,uint256)"(
+ depositToMerge(
_l2Receiver: string,
_l1Token: string,
_amount: BigNumberish,
_l2TxGasLimit: BigNumberish,
_l2TxGasPerPubdataByte: BigNumberish,
+ _refundRecipient: string,
+ overrides?: CallOverrides
+ ): Promise;
+
+ "depositToMerge(address,address,uint256,uint256,uint256,address)"(
+ _l2Receiver: string,
+ _l1Token: string,
+ _amount: BigNumberish,
+ _l2TxGasLimit: BigNumberish,
+ _l2TxGasPerPubdataByte: BigNumberish,
+ _refundRecipient: string,
overrides?: CallOverrides
): Promise;
finalizeWithdrawal(
- _l2BlockNumber: BigNumberish,
+ _l2BatchNumber: BigNumberish,
_l2MessageIndex: BigNumberish,
- _l2TxNumberInBlock: BigNumberish,
+ _l2TxNumberInBatch: BigNumberish,
_message: BytesLike,
_merkleProof: BytesLike[],
overrides?: CallOverrides
): Promise;
"finalizeWithdrawal(uint256,uint256,uint16,bytes,bytes32[])"(
- _l2BlockNumber: BigNumberish,
+ _l2BatchNumber: BigNumberish,
_l2MessageIndex: BigNumberish,
- _l2TxNumberInBlock: BigNumberish,
+ _l2TxNumberInBatch: BigNumberish,
_message: BytesLike,
_merkleProof: BytesLike[],
overrides?: CallOverrides
): Promise;
isWithdrawalFinalized(
- _l2BlockNumber: BigNumberish,
+ _l2BatchNumber: BigNumberish,
_l2MessageIndex: BigNumberish,
overrides?: CallOverrides
): Promise;
"isWithdrawalFinalized(uint256,uint256)"(
- _l2BlockNumber: BigNumberish,
+ _l2BatchNumber: BigNumberish,
_l2MessageIndex: BigNumberish,
overrides?: CallOverrides
): Promise;
+ l2Bridge(overrides?: CallOverrides): Promise;
+
+ "l2Bridge()"(overrides?: CallOverrides): Promise;
+
l2TokenAddress(
_l1Token: string,
overrides?: CallOverrides
@@ -358,12 +454,22 @@ export class IL1Bridge extends Contract {
): EventFilter;
DepositInitiated(
+ l2DepositTxHash: BytesLike | null,
from: string | null,
to: string | null,
- l1Token: string | null,
+ l1Token: null,
amount: null
): EventFilter;
+ DepositToMergeInitiated(
+ l2DepositTxHash: BytesLike | null,
+ from: string | null,
+ to: string | null,
+ l1Token: null,
+ amount: null,
+ toMerge: null
+ ): EventFilter;
+
WithdrawalFinalized(
to: string | null,
l1Token: string | null,
@@ -376,9 +482,9 @@ export class IL1Bridge extends Contract {
_depositSender: string,
_l1Token: string,
_l2TxHash: BytesLike,
- _l2BlockNumber: BigNumberish,
+ _l2BatchNumber: BigNumberish,
_l2MessageIndex: BigNumberish,
- _l2TxNumberInBlock: BigNumberish,
+ _l2TxNumberInBatch: BigNumberish,
_merkleProof: BytesLike[],
overrides?: Overrides
): Promise;
@@ -387,9 +493,9 @@ export class IL1Bridge extends Contract {
_depositSender: string,
_l1Token: string,
_l2TxHash: BytesLike,
- _l2BlockNumber: BigNumberish,
+ _l2BatchNumber: BigNumberish,
_l2MessageIndex: BigNumberish,
- _l2TxNumberInBlock: BigNumberish,
+ _l2TxNumberInBatch: BigNumberish,
_merkleProof: BytesLike[],
overrides?: Overrides
): Promise;
@@ -400,48 +506,74 @@ export class IL1Bridge extends Contract {
_amount: BigNumberish,
_l2TxGasLimit: BigNumberish,
_l2TxGasPerPubdataByte: BigNumberish,
+ _refundRecipient: string,
+ overrides?: PayableOverrides
+ ): Promise;
+
+ "deposit(address,address,uint256,uint256,uint256,address)"(
+ _l2Receiver: string,
+ _l1Token: string,
+ _amount: BigNumberish,
+ _l2TxGasLimit: BigNumberish,
+ _l2TxGasPerPubdataByte: BigNumberish,
+ _refundRecipient: string,
+ overrides?: PayableOverrides
+ ): Promise;
+
+ depositToMerge(
+ _l2Receiver: string,
+ _l1Token: string,
+ _amount: BigNumberish,
+ _l2TxGasLimit: BigNumberish,
+ _l2TxGasPerPubdataByte: BigNumberish,
+ _refundRecipient: string,
overrides?: PayableOverrides
): Promise;
- "deposit(address,address,uint256,uint256,uint256)"(
+ "depositToMerge(address,address,uint256,uint256,uint256,address)"(
_l2Receiver: string,
_l1Token: string,
_amount: BigNumberish,
_l2TxGasLimit: BigNumberish,
_l2TxGasPerPubdataByte: BigNumberish,
+ _refundRecipient: string,
overrides?: PayableOverrides
): Promise;
finalizeWithdrawal(
- _l2BlockNumber: BigNumberish,
+ _l2BatchNumber: BigNumberish,
_l2MessageIndex: BigNumberish,
- _l2TxNumberInBlock: BigNumberish,
+ _l2TxNumberInBatch: BigNumberish,
_message: BytesLike,
_merkleProof: BytesLike[],
overrides?: Overrides
): Promise;
"finalizeWithdrawal(uint256,uint256,uint16,bytes,bytes32[])"(
- _l2BlockNumber: BigNumberish,
+ _l2BatchNumber: BigNumberish,
_l2MessageIndex: BigNumberish,
- _l2TxNumberInBlock: BigNumberish,
+ _l2TxNumberInBatch: BigNumberish,
_message: BytesLike,
_merkleProof: BytesLike[],
overrides?: Overrides
): Promise;
isWithdrawalFinalized(
- _l2BlockNumber: BigNumberish,
+ _l2BatchNumber: BigNumberish,
_l2MessageIndex: BigNumberish,
overrides?: CallOverrides
): Promise;
"isWithdrawalFinalized(uint256,uint256)"(
- _l2BlockNumber: BigNumberish,
+ _l2BatchNumber: BigNumberish,
_l2MessageIndex: BigNumberish,
overrides?: CallOverrides
): Promise;
+ l2Bridge(overrides?: CallOverrides): Promise;
+
+ "l2Bridge()"(overrides?: CallOverrides): Promise;
+
l2TokenAddress(
_l1Token: string,
overrides?: CallOverrides
@@ -458,9 +590,9 @@ export class IL1Bridge extends Contract {
_depositSender: string,
_l1Token: string,
_l2TxHash: BytesLike,
- _l2BlockNumber: BigNumberish,
+ _l2BatchNumber: BigNumberish,
_l2MessageIndex: BigNumberish,
- _l2TxNumberInBlock: BigNumberish,
+ _l2TxNumberInBatch: BigNumberish,
_merkleProof: BytesLike[],
overrides?: Overrides
): Promise;
@@ -469,9 +601,9 @@ export class IL1Bridge extends Contract {
_depositSender: string,
_l1Token: string,
_l2TxHash: BytesLike,
- _l2BlockNumber: BigNumberish,
+ _l2BatchNumber: BigNumberish,
_l2MessageIndex: BigNumberish,
- _l2TxNumberInBlock: BigNumberish,
+ _l2TxNumberInBatch: BigNumberish,
_merkleProof: BytesLike[],
overrides?: Overrides
): Promise;
@@ -482,48 +614,74 @@ export class IL1Bridge extends Contract {
_amount: BigNumberish,
_l2TxGasLimit: BigNumberish,
_l2TxGasPerPubdataByte: BigNumberish,
+ _refundRecipient: string,
+ overrides?: PayableOverrides
+ ): Promise;
+
+ "deposit(address,address,uint256,uint256,uint256,address)"(
+ _l2Receiver: string,
+ _l1Token: string,
+ _amount: BigNumberish,
+ _l2TxGasLimit: BigNumberish,
+ _l2TxGasPerPubdataByte: BigNumberish,
+ _refundRecipient: string,
overrides?: PayableOverrides
): Promise;
- "deposit(address,address,uint256,uint256,uint256)"(
+ depositToMerge(
_l2Receiver: string,
_l1Token: string,
_amount: BigNumberish,
_l2TxGasLimit: BigNumberish,
_l2TxGasPerPubdataByte: BigNumberish,
+ _refundRecipient: string,
+ overrides?: PayableOverrides
+ ): Promise;
+
+ "depositToMerge(address,address,uint256,uint256,uint256,address)"(
+ _l2Receiver: string,
+ _l1Token: string,
+ _amount: BigNumberish,
+ _l2TxGasLimit: BigNumberish,
+ _l2TxGasPerPubdataByte: BigNumberish,
+ _refundRecipient: string,
overrides?: PayableOverrides
): Promise;
finalizeWithdrawal(
- _l2BlockNumber: BigNumberish,
+ _l2BatchNumber: BigNumberish,
_l2MessageIndex: BigNumberish,
- _l2TxNumberInBlock: BigNumberish,
+ _l2TxNumberInBatch: BigNumberish,
_message: BytesLike,
_merkleProof: BytesLike[],
overrides?: Overrides
): Promise;
"finalizeWithdrawal(uint256,uint256,uint16,bytes,bytes32[])"(
- _l2BlockNumber: BigNumberish,
+ _l2BatchNumber: BigNumberish,
_l2MessageIndex: BigNumberish,
- _l2TxNumberInBlock: BigNumberish,
+ _l2TxNumberInBatch: BigNumberish,
_message: BytesLike,
_merkleProof: BytesLike[],
overrides?: Overrides
): Promise;
isWithdrawalFinalized(
- _l2BlockNumber: BigNumberish,
+ _l2BatchNumber: BigNumberish,
_l2MessageIndex: BigNumberish,
overrides?: CallOverrides
): Promise;
"isWithdrawalFinalized(uint256,uint256)"(
- _l2BlockNumber: BigNumberish,
+ _l2BatchNumber: BigNumberish,
_l2MessageIndex: BigNumberish,
overrides?: CallOverrides
): Promise;
+ l2Bridge(overrides?: CallOverrides): Promise;
+
+ "l2Bridge()"(overrides?: CallOverrides): Promise;
+
l2TokenAddress(
_l1Token: string,
overrides?: CallOverrides
@@ -534,4 +692,4 @@ export class IL1Bridge extends Contract {
overrides?: CallOverrides
): Promise;
};
-}
\ No newline at end of file
+}
diff --git a/zksync-web3-nova/typechain/IL1BridgeFactory.ts b/zksync-web3-nova/typechain/IL1BridgeFactory.ts
index 425118662..d789df84d 100644
--- a/zksync-web3-nova/typechain/IL1BridgeFactory.ts
+++ b/zksync-web3-nova/typechain/IL1BridgeFactory.ts
@@ -8,15 +8,17 @@ import { Provider } from "@ethersproject/providers";
import type { IL1Bridge } from "./IL1Bridge";
export class IL1BridgeFactory {
- static connect(
- address: string,
- signerOrProvider: Signer | Provider
- ): IL1Bridge {
+ static connect(address: string, signerOrProvider: Signer | Provider): IL1Bridge {
return new Contract(address, _abi, signerOrProvider) as IL1Bridge;
}
}
const _abi = [
+ {
+ inputs: [],
+ name: "FunctionNotSupported",
+ type: "error",
+ },
{
anonymous: false,
inputs: [
@@ -45,6 +47,12 @@ const _abi = [
{
anonymous: false,
inputs: [
+ {
+ indexed: true,
+ internalType: "bytes32",
+ name: "l2DepositTxHash",
+ type: "bytes32",
+ },
{
indexed: true,
internalType: "address",
@@ -58,7 +66,7 @@ const _abi = [
type: "address",
},
{
- indexed: true,
+ indexed: false,
internalType: "address",
name: "l1Token",
type: "address",
@@ -73,6 +81,49 @@ const _abi = [
name: "DepositInitiated",
type: "event",
},
+ {
+ anonymous: false,
+ inputs: [
+ {
+ indexed: true,
+ internalType: "bytes32",
+ name: "l2DepositTxHash",
+ type: "bytes32",
+ },
+ {
+ indexed: true,
+ internalType: "address",
+ name: "from",
+ type: "address",
+ },
+ {
+ indexed: true,
+ internalType: "address",
+ name: "to",
+ type: "address",
+ },
+ {
+ indexed: false,
+ internalType: "address",
+ name: "l1Token",
+ type: "address",
+ },
+ {
+ indexed: false,
+ internalType: "uint256",
+ name: "amount",
+ type: "uint256",
+ },
+ {
+ indexed: false,
+ internalType: "bool",
+ name: "toMerge",
+ type: "bool",
+ },
+ ],
+ name: "DepositToMergeInitiated",
+ type: "event",
+ },
{
anonymous: false,
inputs: [
@@ -117,7 +168,7 @@ const _abi = [
},
{
internalType: "uint256",
- name: "_l2BlockNumber",
+ name: "_l2BatchNumber",
type: "uint256",
},
{
@@ -127,7 +178,7 @@ const _abi = [
},
{
internalType: "uint16",
- name: "_l2TxNumberInBlock",
+ name: "_l2TxNumberInBatch",
type: "uint16",
},
{
@@ -168,6 +219,11 @@ const _abi = [
name: "_l2TxGasPerPubdataByte",
type: "uint256",
},
+ {
+ internalType: "address",
+ name: "_refundRecipient",
+ type: "address",
+ },
],
name: "deposit",
outputs: [
@@ -182,9 +238,53 @@ const _abi = [
},
{
inputs: [
+ {
+ internalType: "address",
+ name: "_l2Receiver",
+ type: "address",
+ },
+ {
+ internalType: "address",
+ name: "_l1Token",
+ type: "address",
+ },
{
internalType: "uint256",
- name: "_l2BlockNumber",
+ name: "_amount",
+ type: "uint256",
+ },
+ {
+ internalType: "uint256",
+ name: "_l2TxGasLimit",
+ type: "uint256",
+ },
+ {
+ internalType: "uint256",
+ name: "_l2TxGasPerPubdataByte",
+ type: "uint256",
+ },
+ {
+ internalType: "address",
+ name: "_refundRecipient",
+ type: "address",
+ },
+ ],
+ name: "depositToMerge",
+ outputs: [
+ {
+ internalType: "bytes32",
+ name: "txHash",
+ type: "bytes32",
+ },
+ ],
+ stateMutability: "payable",
+ type: "function",
+ },
+ {
+ inputs: [
+ {
+ internalType: "uint256",
+ name: "_l2BatchNumber",
type: "uint256",
},
{
@@ -194,7 +294,7 @@ const _abi = [
},
{
internalType: "uint16",
- name: "_l2TxNumberInBlock",
+ name: "_l2TxNumberInBatch",
type: "uint16",
},
{
@@ -217,7 +317,7 @@ const _abi = [
inputs: [
{
internalType: "uint256",
- name: "_l2BlockNumber",
+ name: "_l2BatchNumber",
type: "uint256",
},
{
@@ -237,6 +337,19 @@ const _abi = [
stateMutability: "view",
type: "function",
},
+ {
+ inputs: [],
+ name: "l2Bridge",
+ outputs: [
+ {
+ internalType: "address",
+ name: "",
+ type: "address",
+ },
+ ],
+ stateMutability: "view",
+ type: "function",
+ },
{
inputs: [
{
@@ -256,4 +369,4 @@ const _abi = [
stateMutability: "view",
type: "function",
},
-];
\ No newline at end of file
+];
diff --git a/zksync-web3-nova/typechain/IL2Bridge.d.ts b/zksync-web3-nova/typechain/IL2Bridge.d.ts
index 7e3e33ea2..6e920fcfd 100644
--- a/zksync-web3-nova/typechain/IL2Bridge.d.ts
+++ b/zksync-web3-nova/typechain/IL2Bridge.d.ts
@@ -14,6 +14,7 @@ import {
Contract,
ContractTransaction,
Overrides,
+ PayableOverrides,
CallOverrides,
} from "@ethersproject/contracts";
import { BytesLike } from "@ethersproject/bytes";
@@ -23,7 +24,7 @@ import { FunctionFragment, EventFragment, Result } from "@ethersproject/abi";
interface IL2BridgeInterface extends ethers.utils.Interface {
functions: {
"finalizeDeposit(address,address,address,uint256,bytes)": FunctionFragment;
- "initialize(address,bytes32,address)": FunctionFragment;
+ "finalizeDepositToMerge(address,address,address,uint256,bytes)": FunctionFragment;
"l1Bridge()": FunctionFragment;
"l1TokenAddress(address)": FunctionFragment;
"l2TokenAddress(address)": FunctionFragment;
@@ -35,8 +36,8 @@ interface IL2BridgeInterface extends ethers.utils.Interface {
values: [string, string, string, BigNumberish, BytesLike]
): string;
encodeFunctionData(
- functionFragment: "initialize",
- values: [string, BytesLike, string]
+ functionFragment: "finalizeDepositToMerge",
+ values: [string, string, string, BigNumberish, BytesLike]
): string;
encodeFunctionData(functionFragment: "l1Bridge", values?: undefined): string;
encodeFunctionData(
@@ -56,7 +57,10 @@ interface IL2BridgeInterface extends ethers.utils.Interface {
functionFragment: "finalizeDeposit",
data: BytesLike
): Result;
- decodeFunctionResult(functionFragment: "initialize", data: BytesLike): Result;
+ decodeFunctionResult(
+ functionFragment: "finalizeDepositToMerge",
+ data: BytesLike
+ ): Result;
decodeFunctionResult(functionFragment: "l1Bridge", data: BytesLike): Result;
decodeFunctionResult(
functionFragment: "l1TokenAddress",
@@ -68,7 +72,15 @@ interface IL2BridgeInterface extends ethers.utils.Interface {
): Result;
decodeFunctionResult(functionFragment: "withdraw", data: BytesLike): Result;
- events: {};
+ events: {
+ "FinalizeDeposit(address,address,address,uint256)": EventFragment;
+ "FinalizeDepositToMerge(address,address,address,address,uint256)": EventFragment;
+ "WithdrawalInitiated(address,address,address,uint256)": EventFragment;
+ };
+
+ getEvent(nameOrSignatureOrTopic: "FinalizeDeposit"): EventFragment;
+ getEvent(nameOrSignatureOrTopic: "FinalizeDepositToMerge"): EventFragment;
+ getEvent(nameOrSignatureOrTopic: "WithdrawalInitiated"): EventFragment;
}
export class IL2Bridge extends Contract {
@@ -91,7 +103,7 @@ export class IL2Bridge extends Contract {
_l1Token: string,
_amount: BigNumberish,
_data: BytesLike,
- overrides?: Overrides
+ overrides?: PayableOverrides
): Promise;
"finalizeDeposit(address,address,address,uint256,bytes)"(
@@ -100,21 +112,25 @@ export class IL2Bridge extends Contract {
_l1Token: string,
_amount: BigNumberish,
_data: BytesLike,
- overrides?: Overrides
+ overrides?: PayableOverrides
): Promise;
- initialize(
- _l1Bridge: string,
- _l2TokenProxyBytecodeHash: BytesLike,
- _governor: string,
- overrides?: Overrides
+ finalizeDepositToMerge(
+ _l1Sender: string,
+ _l2Receiver: string,
+ _l1Token: string,
+ _amount: BigNumberish,
+ _data: BytesLike,
+ overrides?: PayableOverrides
): Promise;
- "initialize(address,bytes32,address)"(
- _l1Bridge: string,
- _l2TokenProxyBytecodeHash: BytesLike,
- _governor: string,
- overrides?: Overrides
+ "finalizeDepositToMerge(address,address,address,uint256,bytes)"(
+ _l1Sender: string,
+ _l2Receiver: string,
+ _l1Token: string,
+ _amount: BigNumberish,
+ _data: BytesLike,
+ overrides?: PayableOverrides
): Promise;
l1Bridge(overrides?: CallOverrides): Promise<{
@@ -174,7 +190,7 @@ export class IL2Bridge extends Contract {
_l1Token: string,
_amount: BigNumberish,
_data: BytesLike,
- overrides?: Overrides
+ overrides?: PayableOverrides
): Promise;
"finalizeDeposit(address,address,address,uint256,bytes)"(
@@ -183,21 +199,25 @@ export class IL2Bridge extends Contract {
_l1Token: string,
_amount: BigNumberish,
_data: BytesLike,
- overrides?: Overrides
+ overrides?: PayableOverrides
): Promise;
- initialize(
- _l1Bridge: string,
- _l2TokenProxyBytecodeHash: BytesLike,
- _governor: string,
- overrides?: Overrides
+ finalizeDepositToMerge(
+ _l1Sender: string,
+ _l2Receiver: string,
+ _l1Token: string,
+ _amount: BigNumberish,
+ _data: BytesLike,
+ overrides?: PayableOverrides
): Promise;
- "initialize(address,bytes32,address)"(
- _l1Bridge: string,
- _l2TokenProxyBytecodeHash: BytesLike,
- _governor: string,
- overrides?: Overrides
+ "finalizeDepositToMerge(address,address,address,uint256,bytes)"(
+ _l1Sender: string,
+ _l2Receiver: string,
+ _l1Token: string,
+ _amount: BigNumberish,
+ _data: BytesLike,
+ overrides?: PayableOverrides
): Promise;
l1Bridge(overrides?: CallOverrides): Promise;
@@ -251,17 +271,21 @@ export class IL2Bridge extends Contract {
overrides?: CallOverrides
): Promise;
- initialize(
- _l1Bridge: string,
- _l2TokenProxyBytecodeHash: BytesLike,
- _governor: string,
+ finalizeDepositToMerge(
+ _l1Sender: string,
+ _l2Receiver: string,
+ _l1Token: string,
+ _amount: BigNumberish,
+ _data: BytesLike,
overrides?: CallOverrides
): Promise;
- "initialize(address,bytes32,address)"(
- _l1Bridge: string,
- _l2TokenProxyBytecodeHash: BytesLike,
- _governor: string,
+ "finalizeDepositToMerge(address,address,address,uint256,bytes)"(
+ _l1Sender: string,
+ _l2Receiver: string,
+ _l1Token: string,
+ _amount: BigNumberish,
+ _data: BytesLike,
overrides?: CallOverrides
): Promise;
@@ -304,7 +328,29 @@ export class IL2Bridge extends Contract {
): Promise;
};
- filters: {};
+ filters: {
+ FinalizeDeposit(
+ l1Sender: string | null,
+ l2Receiver: string | null,
+ l2Token: string | null,
+ amount: null
+ ): EventFilter;
+
+ FinalizeDepositToMerge(
+ l1Sender: string | null,
+ l2Receiver: string | null,
+ l2Token: string | null,
+ mergeToken: null,
+ amount: null
+ ): EventFilter;
+
+ WithdrawalInitiated(
+ l2Sender: string | null,
+ l1Receiver: string | null,
+ l2Token: string | null,
+ amount: null
+ ): EventFilter;
+ };
estimateGas: {
finalizeDeposit(
@@ -313,7 +359,7 @@ export class IL2Bridge extends Contract {
_l1Token: string,
_amount: BigNumberish,
_data: BytesLike,
- overrides?: Overrides
+ overrides?: PayableOverrides
): Promise;
"finalizeDeposit(address,address,address,uint256,bytes)"(
@@ -322,21 +368,25 @@ export class IL2Bridge extends Contract {
_l1Token: string,
_amount: BigNumberish,
_data: BytesLike,
- overrides?: Overrides
+ overrides?: PayableOverrides
): Promise;
- initialize(
- _l1Bridge: string,
- _l2TokenProxyBytecodeHash: BytesLike,
- _governor: string,
- overrides?: Overrides
+ finalizeDepositToMerge(
+ _l1Sender: string,
+ _l2Receiver: string,
+ _l1Token: string,
+ _amount: BigNumberish,
+ _data: BytesLike,
+ overrides?: PayableOverrides
): Promise;
- "initialize(address,bytes32,address)"(
- _l1Bridge: string,
- _l2TokenProxyBytecodeHash: BytesLike,
- _governor: string,
- overrides?: Overrides
+ "finalizeDepositToMerge(address,address,address,uint256,bytes)"(
+ _l1Sender: string,
+ _l2Receiver: string,
+ _l1Token: string,
+ _amount: BigNumberish,
+ _data: BytesLike,
+ overrides?: PayableOverrides
): Promise;
l1Bridge(overrides?: CallOverrides): Promise;
@@ -385,7 +435,7 @@ export class IL2Bridge extends Contract {
_l1Token: string,
_amount: BigNumberish,
_data: BytesLike,
- overrides?: Overrides
+ overrides?: PayableOverrides
): Promise;
"finalizeDeposit(address,address,address,uint256,bytes)"(
@@ -394,21 +444,25 @@ export class IL2Bridge extends Contract {
_l1Token: string,
_amount: BigNumberish,
_data: BytesLike,
- overrides?: Overrides
+ overrides?: PayableOverrides
): Promise;
- initialize(
- _l1Bridge: string,
- _l2TokenProxyBytecodeHash: BytesLike,
- _governor: string,
- overrides?: Overrides
+ finalizeDepositToMerge(
+ _l1Sender: string,
+ _l2Receiver: string,
+ _l1Token: string,
+ _amount: BigNumberish,
+ _data: BytesLike,
+ overrides?: PayableOverrides
): Promise;
- "initialize(address,bytes32,address)"(
- _l1Bridge: string,
- _l2TokenProxyBytecodeHash: BytesLike,
- _governor: string,
- overrides?: Overrides
+ "finalizeDepositToMerge(address,address,address,uint256,bytes)"(
+ _l1Sender: string,
+ _l2Receiver: string,
+ _l1Token: string,
+ _amount: BigNumberish,
+ _data: BytesLike,
+ overrides?: PayableOverrides
): Promise;
l1Bridge(overrides?: CallOverrides): Promise;