Socket
Socket
Sign inDemoInstall

zksync-web3

Package Overview
Dependencies
Maintainers
5
Versions
90
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

zksync-web3 - npm Package Compare versions

Comparing version 0.15.1 to 0.15.2

2

build/src/adapters.d.ts

@@ -17,2 +17,3 @@ import { BigNumber, BigNumberish, BytesLike, ethers } from 'ethers';

erc20: import("../typechain").IL1Bridge;
weth: import("../typechain").IL1Bridge;
}>;

@@ -140,2 +141,3 @@ getBalanceL1(token?: Address, blockTag?: ethers.providers.BlockTag): Promise<BigNumber>;

erc20: import("../typechain").IL2Bridge;
weth: import("../typechain").IL2Bridge;
}>;

@@ -142,0 +144,0 @@ _fillCustomData(data: Eip712Meta): Eip712Meta;

64

build/src/adapters.js

@@ -25,3 +25,4 @@ "use strict";

return {
erc20: typechain_1.IL1BridgeFactory.connect(addresses.erc20L1, this._signerL1())
erc20: typechain_1.IL1BridgeFactory.connect(addresses.erc20L1, this._signerL1()),
weth: typechain_1.IL1BridgeFactory.connect(addresses.wethL1, this._signerL1())
};

@@ -40,4 +41,12 @@ }

async getAllowanceL1(token, bridgeAddress, blockTag) {
if (!bridgeAddress) {
const bridgeContracts = await this.getL1BridgeContracts();
const l2WethToken = await bridgeContracts.weth.l2TokenAddress(token);
// If the token is Wrapped Ether, return allowance to its own bridge, otherwise to the default ERC20 bridge.
bridgeAddress =
l2WethToken != ethers_1.ethers.constants.AddressZero
? bridgeContracts.weth.address
: bridgeContracts.erc20.address;
}
const erc20contract = typechain_1.IERC20MetadataFactory.connect(token, this._providerL1());
bridgeAddress !== null && bridgeAddress !== void 0 ? bridgeAddress : (bridgeAddress = (await this.getL1BridgeContracts()).erc20.address);
return await erc20contract.allowance(await this.getAddress(), bridgeAddress, { blockTag });

@@ -49,6 +58,9 @@ }

}
else {
const erc20Bridge = (await this.getL1BridgeContracts()).erc20;
return await erc20Bridge.l2TokenAddress(token);
const bridgeContracts = await this.getL1BridgeContracts();
const l2WethToken = await bridgeContracts.weth.l2TokenAddress(token);
// If the token is Wrapped Ether, return its L2 token address.
if (l2WethToken != ethers_1.ethers.constants.AddressZero) {
return l2WethToken;
}
return await bridgeContracts.erc20.l2TokenAddress(token);
}

@@ -62,3 +74,9 @@ async approveERC20(token, amount, overrides) {

if (bridgeAddress == null) {
bridgeAddress = (await this._providerL2().getDefaultBridgeAddresses()).erc20L1;
const bridgeContracts = await this.getL1BridgeContracts();
const l2WethToken = await bridgeContracts.weth.l2TokenAddress(token);
// If the token is Wrapped Ether, return corresponding bridge, otherwise return default ERC20 bridge
bridgeAddress =
l2WethToken != ethers_1.ethers.constants.AddressZero
? bridgeContracts.weth.address
: bridgeContracts.erc20.address;
}

@@ -93,5 +111,8 @@ else {

if (transaction.approveERC20) {
const bridgeAddress = transaction.bridgeAddress
? transaction.bridgeAddress
const l2WethToken = await bridgeContracts.weth.l2TokenAddress(transaction.token);
// If the token is Wrapped Ether, use its bridge.
const proposedBridge = l2WethToken != ethers_1.ethers.constants.AddressZero
? bridgeContracts.weth.address
: bridgeContracts.erc20.address;
const bridgeAddress = transaction.bridgeAddress ? transaction.bridgeAddress : proposedBridge;
// We only request the allowance if the current one is not enough.

@@ -136,5 +157,7 @@ const allowance = await this.getAllowanceL1(transaction.token, bridgeAddress);

if (tx.bridgeAddress != null) {
const customBridgeData = (_e = tx.customBridgeData) !== null && _e !== void 0 ? _e : (await (0, utils_1.getERC20DefaultBridgeData)(tx.token, this._providerL1()));
let bridge = typechain_1.IL1BridgeFactory.connect(tx.bridgeAddress, this._signerL1());
let l2Address = await bridge.l2Bridge();
const customBridgeData = ((_e = tx.customBridgeData) !== null && _e !== void 0 ? _e : bridgeContracts.weth.address == tx.bridgeAddress)
? '0x'
: await (0, utils_1.getERC20DefaultBridgeData)(tx.token, this._providerL1());
const bridge = typechain_1.IL1BridgeFactory.connect(tx.bridgeAddress, this._signerL1());
const l2Address = await bridge.l2Bridge();
(_f = tx.l2GasLimit) !== null && _f !== void 0 ? _f : (tx.l2GasLimit = await (0, utils_1.estimateCustomBridgeDepositL2Gas)(this._providerL2(), tx.bridgeAddress, l2Address, tx.token, tx.amount, tx.to, customBridgeData, await this.getAddress(), tx.gasPerPubdataByte));

@@ -174,3 +197,5 @@ }

await (0, utils_1.checkBaseCost)(baseCost, overrides.value);
return await bridgeContracts.erc20.populateTransaction.deposit(...args, overrides);
const l2WethToken = await bridgeContracts.weth.l2TokenAddress(tx.token);
const bridge = l2WethToken != ethers_1.ethers.constants.AddressZero ? bridgeContracts.weth : bridgeContracts.erc20;
return await bridge.populateTransaction.deposit(...args, overrides);
}

@@ -193,3 +218,6 @@ }

if (tx.bridgeAddress != null) {
const customBridgeData = (_d = tx.customBridgeData) !== null && _d !== void 0 ? _d : (await (0, utils_1.getERC20DefaultBridgeData)(tx.token, this._providerL1()));
const bridgeContracts = await this.getL1BridgeContracts();
const customBridgeData = ((_d = tx.customBridgeData) !== null && _d !== void 0 ? _d : bridgeContracts.weth.address == tx.bridgeAddress)
? '0x'
: await (0, utils_1.getERC20DefaultBridgeData)(tx.token, this._providerL1());
let bridge = typechain_1.IL1BridgeFactory.connect(tx.bridgeAddress, this._signerL1());

@@ -291,2 +319,9 @@ let l2Address = await bridge.l2Bridge();

if ((0, utils_1.isETH)(sender)) {
const withdrawTo = ethers_1.ethers.utils.hexDataSlice(message, 4, 24);
const l1Bridges = await this.getL1BridgeContracts();
// If the destination address matches the address of the L1 WETH contract,
// the withdrawal request is processed through the WETH bridge.
if (withdrawTo.toLowerCase() == l1Bridges.weth.address.toLowerCase()) {
return await l1Bridges.weth.finalizeWithdrawal(l1BatchNumber, l2MessageIndex, l2TxNumberInBlock, message, proof, overrides !== null && overrides !== void 0 ? overrides : {});
}
const contractAddress = await this._providerL2().getMainContractAddress();

@@ -388,3 +423,4 @@ const zksync = typechain_1.IZkSyncFactory.connect(contractAddress, this._signerL1());

return {
erc20: typechain_1.IL2BridgeFactory.connect(addresses.erc20L2, this._signerL2())
erc20: typechain_1.IL2BridgeFactory.connect(addresses.erc20L2, this._signerL2()),
weth: typechain_1.IL2BridgeFactory.connect(addresses.wethL2, this._signerL2())
};

@@ -391,0 +427,0 @@ }

@@ -12,2 +12,4 @@ import { ethers, BigNumber, BigNumberish, utils, providers, BytesLike } from 'ethers';

erc20BridgeL2?: Address;
wethBridgeL1?: Address;
wethBridgeL2?: Address;
};

@@ -36,2 +38,4 @@ getTransactionReceipt(transactionHash: string | Promise<string>): Promise<TransactionReceipt>;

erc20L2: string;
wethL1: string;
wethL2: string;
}>;

@@ -38,0 +42,0 @@ getConfirmedTokens(start?: number, limit?: number): Promise<Token[]>;

@@ -87,2 +87,3 @@ "use strict";

transactionHash: hash,
txIndexInL1Batch: number,
logIndex: number

@@ -123,7 +124,11 @@ };

}
else {
const erc20BridgeAddress = (await this.getDefaultBridgeAddresses()).erc20L2;
const erc20Bridge = typechain_1.IL2BridgeFactory.connect(erc20BridgeAddress, this);
return await erc20Bridge.l2TokenAddress(token);
const bridgeAddresses = await this.getDefaultBridgeAddresses();
const l2WethBridge = typechain_1.IL2BridgeFactory.connect(bridgeAddresses.wethL2, this);
const l2WethToken = await l2WethBridge.l2TokenAddress(token);
// If the token is Wrapped Ether, return its L2 token address
if (l2WethToken != ethers_1.ethers.constants.AddressZero) {
return l2WethToken;
}
const l2Erc20Bridge = typechain_1.IL2BridgeFactory.connect(bridgeAddresses.erc20L2, this);
return await l2Erc20Bridge.l2TokenAddress(token);
}

@@ -134,7 +139,11 @@ async l1TokenAddress(token) {

}
else {
const erc20BridgeAddress = (await this.getDefaultBridgeAddresses()).erc20L2;
const erc20Bridge = typechain_1.IL2BridgeFactory.connect(erc20BridgeAddress, this);
return await erc20Bridge.l1TokenAddress(token);
const bridgeAddresses = await this.getDefaultBridgeAddresses();
const l2WethBridge = typechain_1.IL2BridgeFactory.connect(bridgeAddresses.wethL2, this);
const l1WethToken = await l2WethBridge.l1TokenAddress(token);
// If the token is Wrapped Ether, return its L1 token address
if (l1WethToken != ethers_1.ethers.constants.AddressZero) {
return l1WethToken;
}
const erc20Bridge = typechain_1.IL2BridgeFactory.connect(bridgeAddresses.erc20L2, this);
return await erc20Bridge.l1TokenAddress(token);
}

@@ -263,6 +272,10 @@ // This function is used when formatting requests for

this.contractAddresses.erc20BridgeL2 = addresses.l2Erc20DefaultBridge;
this.contractAddresses.wethBridgeL1 = addresses.l1WethBridge;
this.contractAddresses.wethBridgeL2 = addresses.l2WethBridge;
}
return {
erc20L1: this.contractAddresses.erc20BridgeL1,
erc20L2: this.contractAddresses.erc20BridgeL2
erc20L2: this.contractAddresses.erc20BridgeL2,
wethL1: this.contractAddresses.wethBridgeL1,
wethL2: this.contractAddresses.wethBridgeL2
};

@@ -325,4 +338,7 @@ }

if (tx.bridgeAddress == null) {
const bridges = await this.getDefaultBridgeAddresses();
tx.bridgeAddress = bridges.erc20L2;
const bridgeAddresses = await this.getDefaultBridgeAddresses();
const l2WethBridge = typechain_1.IL2BridgeFactory.connect(bridgeAddresses.wethL2, this);
const l1WethToken = await l2WethBridge.l1TokenAddress(tx.token);
tx.bridgeAddress =
l1WethToken != ethers_1.ethers.constants.AddressZero ? bridgeAddresses.wethL2 : bridgeAddresses.erc20L2;
}

@@ -329,0 +345,0 @@ const bridge = typechain_1.IL2BridgeFactory.connect(tx.bridgeAddress, this);

@@ -41,2 +41,3 @@ import { ethers } from 'ethers';

erc20: import("../typechain").IL2Bridge;
weth: import("../typechain").IL2Bridge;
}>;

@@ -80,2 +81,3 @@ _fillCustomData(data: import("./types").Eip712Meta): import("./types").Eip712Meta;

erc20: import("../typechain").IL1Bridge;
weth: import("../typechain").IL1Bridge;
}>;

@@ -211,2 +213,3 @@ getBalanceL1(token?: string, blockTag?: ethers.providers.BlockTag): Promise<ethers.BigNumber>;

erc20: import("../typechain").IL2Bridge;
weth: import("../typechain").IL2Bridge;
}>;

@@ -250,2 +253,3 @@ _fillCustomData(data: import("./types").Eip712Meta): import("./types").Eip712Meta;

erc20: import("../typechain").IL1Bridge;
weth: import("../typechain").IL1Bridge;
}>;

@@ -252,0 +256,0 @@ getBalanceL1(token?: string, blockTag?: ethers.providers.BlockTag): Promise<ethers.BigNumber>;

@@ -88,2 +88,3 @@ import { BytesLike, BigNumberish, providers, BigNumber } from 'ethers';

transactionIndex: number;
txIndexInL1Batch: number;
shardId: number;

@@ -174,2 +175,3 @@ isService: boolean;

fee: BigNumberish;
gasPerPubdata: BigNumberish;
initiatorAddress: Address;

@@ -176,0 +178,0 @@ receivedAt: Date;

@@ -53,2 +53,2 @@ import { utils, ethers, BigNumber, BigNumberish, BytesLike } from 'ethers';

export declare function scaleGasLimit(gasLimit: BigNumber): BigNumber;
export declare function estimateCustomBridgeDepositL2Gas(providerL2: Provider, l1BridgeAddress: Address, l2BridgeAddress: Address, token: Address, amount: BigNumberish, to: Address, bridgeData: BytesLike, from?: Address, gasPerPubdataByte?: BigNumberish): Promise<BigNumber>;
export declare function estimateCustomBridgeDepositL2Gas(providerL2: Provider, l1BridgeAddress: Address, l2BridgeAddress: Address, token: Address, amount: BigNumberish, to: Address, bridgeData: BytesLike, from?: Address, gasPerPubdataByte?: BigNumberish, l2Value?: BigNumberish): Promise<BigNumber>;

@@ -428,6 +428,19 @@ "use strict";

else {
const l1ERC20BridgeAddresses = (await providerL2.getDefaultBridgeAddresses()).erc20L1;
const erc20BridgeAddress = (await providerL2.getDefaultBridgeAddresses()).erc20L2;
const bridgeData = await getERC20DefaultBridgeData(token, providerL1);
return await estimateCustomBridgeDepositL2Gas(providerL2, l1ERC20BridgeAddresses, erc20BridgeAddress, token, amount, to, bridgeData, from, gasPerPubdataByte);
let value, l1BridgeAddress, l2BridgeAddress, bridgeData;
const bridgeAddresses = await providerL2.getDefaultBridgeAddresses();
const l1WethBridge = typechain_1.IL1BridgeFactory.connect(bridgeAddresses.wethL1, providerL1);
const l2WethToken = await l1WethBridge.l2TokenAddress(token);
if (l2WethToken != ethers_1.ethers.constants.AddressZero) {
value = amount;
l1BridgeAddress = bridgeAddresses.wethL1;
l2BridgeAddress = bridgeAddresses.wethL2;
bridgeData = '0x';
}
else {
value = 0;
l1BridgeAddress = bridgeAddresses.erc20L1;
l2BridgeAddress = bridgeAddresses.erc20L2;
bridgeData = await getERC20DefaultBridgeData(token, providerL1);
}
return await estimateCustomBridgeDepositL2Gas(providerL2, l1BridgeAddress, l2BridgeAddress, token, amount, to, bridgeData, from, gasPerPubdataByte, value);
}

@@ -440,3 +453,3 @@ }

exports.scaleGasLimit = scaleGasLimit;
async function estimateCustomBridgeDepositL2Gas(providerL2, l1BridgeAddress, l2BridgeAddress, token, amount, to, bridgeData, from, gasPerPubdataByte) {
async function estimateCustomBridgeDepositL2Gas(providerL2, l1BridgeAddress, l2BridgeAddress, token, amount, to, bridgeData, from, gasPerPubdataByte, l2Value) {
const calldata = await getERC20BridgeCalldata(token, from, to, amount, bridgeData);

@@ -446,6 +459,7 @@ return await providerL2.estimateL1ToL2Execute({

contractAddress: l2BridgeAddress,
gasPerPubdataByte: gasPerPubdataByte,
calldata: calldata
gasPerPubdataByte,
calldata,
l2Value
});
}
exports.estimateCustomBridgeDepositL2Gas = estimateCustomBridgeDepositL2Gas;

@@ -14,2 +14,3 @@ import { EIP712Signer } from './signer';

erc20: import("../typechain").IL2Bridge;
weth: import("../typechain").IL2Bridge;
}>;

@@ -41,2 +42,3 @@ _fillCustomData(data: import("./types").Eip712Meta): import("./types").Eip712Meta;

erc20: import("../typechain").IL1Bridge;
weth: import("../typechain").IL1Bridge;
}>;

@@ -43,0 +45,0 @@ getBalanceL1(token?: string, blockTag?: ethers.providers.BlockTag): Promise<ethers.BigNumber>;

# Changelog
## [0.15.2](https://github.com/matter-labs/zksync-2-dev/compare/zksync-web3-v0.15.1...zksync-web3-v0.15.2) (2023-07-06)
### Features
* (DONT MERGE!) Integrate WETH bridge into server & SDK ([#1929](https://github.com/matter-labs/zksync-2-dev/issues/1929)) ([b3caf1e](https://github.com/matter-labs/zksync-2-dev/commit/b3caf1e35718c742e8d1d59427855df3b9109300))
* add tx_index_in_l1_batch field to L2ToL1Log ([#2032](https://github.com/matter-labs/zksync-2-dev/issues/2032)) ([3ce5779](https://github.com/matter-labs/zksync-2-dev/commit/3ce5779f500d5738c92e09eff13d553e20625055))
* **api:** add `gas_per_pubdata` to `zks_getTransactionDetails` ([#2085](https://github.com/matter-labs/zksync-2-dev/issues/2085)) ([dd91bb6](https://github.com/matter-labs/zksync-2-dev/commit/dd91bb673b29a17cea91e12ec95f53deba556798))
## [0.15.1](https://github.com/matter-labs/zksync-2-dev/compare/zksync-web3-v0.15.0...zksync-web3-v0.15.1) (2023-04-24)

@@ -4,0 +13,0 @@

{
"name": "zksync-web3",
"version": "0.15.1",
"version": "0.15.2",
"main": "build/src/index.js",

@@ -5,0 +5,0 @@ "types": "build/src/index.d.ts",

@@ -58,3 +58,4 @@ import { BigNumber, BigNumberish, BytesLike, ethers } from 'ethers';

return {
erc20: IL1BridgeFactory.connect(addresses.erc20L1, this._signerL1())
erc20: IL1BridgeFactory.connect(addresses.erc20L1, this._signerL1()),
weth: IL1BridgeFactory.connect(addresses.wethL1, this._signerL1())
};

@@ -78,4 +79,13 @@ }

): Promise<BigNumber> {
if (!bridgeAddress) {
const bridgeContracts = await this.getL1BridgeContracts();
const l2WethToken = await bridgeContracts.weth.l2TokenAddress(token);
// If the token is Wrapped Ether, return allowance to its own bridge, otherwise to the default ERC20 bridge.
bridgeAddress =
l2WethToken != ethers.constants.AddressZero
? bridgeContracts.weth.address
: bridgeContracts.erc20.address;
}
const erc20contract = IERC20MetadataFactory.connect(token, this._providerL1());
bridgeAddress ??= (await this.getL1BridgeContracts()).erc20.address;
return await erc20contract.allowance(await this.getAddress(), bridgeAddress, { blockTag });

@@ -87,6 +97,12 @@ }

return ETH_ADDRESS;
} else {
const erc20Bridge = (await this.getL1BridgeContracts()).erc20;
return await erc20Bridge.l2TokenAddress(token);
}
const bridgeContracts = await this.getL1BridgeContracts();
const l2WethToken = await bridgeContracts.weth.l2TokenAddress(token);
// If the token is Wrapped Ether, return its L2 token address.
if (l2WethToken != ethers.constants.AddressZero) {
return l2WethToken;
}
return await bridgeContracts.erc20.l2TokenAddress(token);
}

@@ -107,3 +123,9 @@

if (bridgeAddress == null) {
bridgeAddress = (await this._providerL2().getDefaultBridgeAddresses()).erc20L1;
const bridgeContracts = await this.getL1BridgeContracts();
const l2WethToken = await bridgeContracts.weth.l2TokenAddress(token);
// If the token is Wrapped Ether, return corresponding bridge, otherwise return default ERC20 bridge
bridgeAddress =
l2WethToken != ethers.constants.AddressZero
? bridgeContracts.weth.address
: bridgeContracts.erc20.address;
} else {

@@ -164,5 +186,9 @@ delete overrides.bridgeAddress;

if (transaction.approveERC20) {
const bridgeAddress = transaction.bridgeAddress
? transaction.bridgeAddress
: bridgeContracts.erc20.address;
const l2WethToken = await bridgeContracts.weth.l2TokenAddress(transaction.token);
// If the token is Wrapped Ether, use its bridge.
const proposedBridge =
l2WethToken != ethers.constants.AddressZero
? bridgeContracts.weth.address
: bridgeContracts.erc20.address;
const bridgeAddress = transaction.bridgeAddress ? transaction.bridgeAddress : proposedBridge;

@@ -239,5 +265,7 @@ // We only request the allowance if the current one is not enough.

const customBridgeData =
tx.customBridgeData ?? (await getERC20DefaultBridgeData(tx.token, this._providerL1()));
let bridge = IL1BridgeFactory.connect(tx.bridgeAddress, this._signerL1());
let l2Address = await bridge.l2Bridge();
tx.customBridgeData ?? bridgeContracts.weth.address == tx.bridgeAddress
? '0x'
: await getERC20DefaultBridgeData(tx.token, this._providerL1());
const bridge = IL1BridgeFactory.connect(tx.bridgeAddress, this._signerL1());
const l2Address = await bridge.l2Bridge();
tx.l2GasLimit ??= await estimateCustomBridgeDepositL2Gas(

@@ -305,3 +333,6 @@ this._providerL2(),

return await bridgeContracts.erc20.populateTransaction.deposit(...args, overrides);
const l2WethToken = await bridgeContracts.weth.l2TokenAddress(tx.token);
const bridge =
l2WethToken != ethers.constants.AddressZero ? bridgeContracts.weth : bridgeContracts.erc20;
return await bridge.populateTransaction.deposit(...args, overrides);
}

@@ -335,4 +366,7 @@ }

if (tx.bridgeAddress != null) {
const bridgeContracts = await this.getL1BridgeContracts();
const customBridgeData =
tx.customBridgeData ?? (await getERC20DefaultBridgeData(tx.token, this._providerL1()));
tx.customBridgeData ?? bridgeContracts.weth.address == tx.bridgeAddress
? '0x'
: await getERC20DefaultBridgeData(tx.token, this._providerL1());
let bridge = IL1BridgeFactory.connect(tx.bridgeAddress, this._signerL1());

@@ -480,2 +514,17 @@ let l2Address = await bridge.l2Bridge();

if (isETH(sender)) {
const withdrawTo = ethers.utils.hexDataSlice(message, 4, 24);
const l1Bridges = await this.getL1BridgeContracts();
// If the destination address matches the address of the L1 WETH contract,
// the withdrawal request is processed through the WETH bridge.
if (withdrawTo.toLowerCase() == l1Bridges.weth.address.toLowerCase()) {
return await l1Bridges.weth.finalizeWithdrawal(
l1BatchNumber,
l2MessageIndex,
l2TxNumberInBlock,
message,
proof,
overrides ?? {}
);
}
const contractAddress = await this._providerL2().getMainContractAddress();

@@ -678,3 +727,4 @@ const zksync = IZkSyncFactory.connect(contractAddress, this._signerL1());

return {
erc20: IL2BridgeFactory.connect(addresses.erc20L2, this._signerL2())
erc20: IL2BridgeFactory.connect(addresses.erc20L2, this._signerL2()),
weth: IL2BridgeFactory.connect(addresses.wethL2, this._signerL2())
};

@@ -681,0 +731,0 @@ }

@@ -47,2 +47,4 @@ import { ethers, BigNumber, BigNumberish, utils, providers, BytesLike, Contract } from 'ethers';

erc20BridgeL2?: Address;
wethBridgeL1?: Address;
wethBridgeL2?: Address;
};

@@ -139,2 +141,3 @@

transactionHash: hash,
txIndexInL1Batch: number,
logIndex: number

@@ -179,7 +182,14 @@ };

return ETH_ADDRESS;
} else {
const erc20BridgeAddress = (await this.getDefaultBridgeAddresses()).erc20L2;
const erc20Bridge = IL2BridgeFactory.connect(erc20BridgeAddress, this);
return await erc20Bridge.l2TokenAddress(token);
}
const bridgeAddresses = await this.getDefaultBridgeAddresses();
const l2WethBridge = IL2BridgeFactory.connect(bridgeAddresses.wethL2, this);
const l2WethToken = await l2WethBridge.l2TokenAddress(token);
// If the token is Wrapped Ether, return its L2 token address
if (l2WethToken != ethers.constants.AddressZero) {
return l2WethToken;
}
const l2Erc20Bridge = IL2BridgeFactory.connect(bridgeAddresses.erc20L2, this);
return await l2Erc20Bridge.l2TokenAddress(token);
}

@@ -190,7 +200,14 @@

return ETH_ADDRESS;
} else {
const erc20BridgeAddress = (await this.getDefaultBridgeAddresses()).erc20L2;
const erc20Bridge = IL2BridgeFactory.connect(erc20BridgeAddress, this);
return await erc20Bridge.l1TokenAddress(token);
}
const bridgeAddresses = await this.getDefaultBridgeAddresses();
const l2WethBridge = IL2BridgeFactory.connect(bridgeAddresses.wethL2, this);
const l1WethToken = await l2WethBridge.l1TokenAddress(token);
// If the token is Wrapped Ether, return its L1 token address
if (l1WethToken != ethers.constants.AddressZero) {
return l1WethToken;
}
const erc20Bridge = IL2BridgeFactory.connect(bridgeAddresses.erc20L2, this);
return await erc20Bridge.l1TokenAddress(token);
}

@@ -337,6 +354,10 @@

this.contractAddresses.erc20BridgeL2 = addresses.l2Erc20DefaultBridge;
this.contractAddresses.wethBridgeL1 = addresses.l1WethBridge;
this.contractAddresses.wethBridgeL2 = addresses.l2WethBridge;
}
return {
erc20L1: this.contractAddresses.erc20BridgeL1,
erc20L2: this.contractAddresses.erc20BridgeL2
erc20L2: this.contractAddresses.erc20BridgeL2,
wethL1: this.contractAddresses.wethBridgeL1,
wethL2: this.contractAddresses.wethBridgeL2
};

@@ -420,4 +441,8 @@ }

if (tx.bridgeAddress == null) {
const bridges = await this.getDefaultBridgeAddresses();
tx.bridgeAddress = bridges.erc20L2;
const bridgeAddresses = await this.getDefaultBridgeAddresses();
const l2WethBridge = IL2BridgeFactory.connect(bridgeAddresses.wethL2, this);
const l1WethToken = await l2WethBridge.l1TokenAddress(tx.token);
tx.bridgeAddress =
l1WethToken != ethers.constants.AddressZero ? bridgeAddresses.wethL2 : bridgeAddresses.erc20L2;
}

@@ -424,0 +449,0 @@

@@ -118,2 +118,3 @@ import { BytesLike, BigNumberish, providers, BigNumber } from 'ethers';

transactionIndex: number;
txIndexInL1Batch: number;
shardId: number;

@@ -216,2 +217,3 @@ isService: boolean;

fee: BigNumberish;
gasPerPubdata: BigNumberish;
initiatorAddress: Address;

@@ -218,0 +220,0 @@ receivedAt: Date;

@@ -15,3 +15,3 @@ import { utils, ethers, BigNumber, BigNumberish, BytesLike } from 'ethers';

import { EIP712Signer } from './signer';
import { IERC20MetadataFactory } from '../typechain';
import { IERC20MetadataFactory, IL1BridgeFactory } from '../typechain';
import { AbiCoder } from 'ethers/lib/utils';

@@ -536,9 +536,22 @@

} else {
const l1ERC20BridgeAddresses = (await providerL2.getDefaultBridgeAddresses()).erc20L1;
const erc20BridgeAddress = (await providerL2.getDefaultBridgeAddresses()).erc20L2;
const bridgeData = await getERC20DefaultBridgeData(token, providerL1);
let value, l1BridgeAddress, l2BridgeAddress, bridgeData;
const bridgeAddresses = await providerL2.getDefaultBridgeAddresses();
const l1WethBridge = IL1BridgeFactory.connect(bridgeAddresses.wethL1, providerL1);
const l2WethToken = await l1WethBridge.l2TokenAddress(token);
if (l2WethToken != ethers.constants.AddressZero) {
value = amount;
l1BridgeAddress = bridgeAddresses.wethL1;
l2BridgeAddress = bridgeAddresses.wethL2;
bridgeData = '0x';
} else {
value = 0;
l1BridgeAddress = bridgeAddresses.erc20L1;
l2BridgeAddress = bridgeAddresses.erc20L2;
bridgeData = await getERC20DefaultBridgeData(token, providerL1);
}
return await estimateCustomBridgeDepositL2Gas(
providerL2,
l1ERC20BridgeAddresses,
erc20BridgeAddress,
l1BridgeAddress,
l2BridgeAddress,
token,

@@ -549,3 +562,4 @@ amount,

from,
gasPerPubdataByte
gasPerPubdataByte,
value
);

@@ -568,3 +582,4 @@ }

from?: Address,
gasPerPubdataByte?: BigNumberish
gasPerPubdataByte?: BigNumberish,
l2Value?: BigNumberish
): Promise<BigNumber> {

@@ -575,5 +590,6 @@ const calldata = await getERC20BridgeCalldata(token, from, to, amount, bridgeData);

contractAddress: l2BridgeAddress,
gasPerPubdataByte: gasPerPubdataByte,
calldata: calldata
gasPerPubdataByte,
calldata,
l2Value
});
}
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc