Skip to content

Commit b7a965e

Browse files
committed
Revert "Revert "feat(bridge-ui-v2): L2 <-> L2 bridging with multi-hops (#15393)""
This reverts commit 5dbe398.
1 parent 5dbe398 commit b7a965e

25 files changed

+288
-182
lines changed

packages/bridge-ui-v2/.env.example

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ export PUBLIC_WALLETCONNECT_PROJECT_ID=""
99

1010
# Enable NFT Bridge ("true" or "false")
1111
export PUBLIC_NFT_BRIDGE_ENABLED=""
12-
PUBLIC_NFT_BATCH_TRANSFERS_ENABLED=""
12+
export PUBLIC_NFT_BATCH_TRANSFERS_ENABLED=""
1313

1414
# Sentry
1515
export PUBLIC_SENTRY_DSN=https://

packages/bridge-ui-v2/config/sample/configuredBridges.example

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
"erc20VaultAddress": "",
99
"erc721VaultAddress": "",
1010
"erc1155VaultAddress": "",
11-
"crossChainSyncAddress": "",
11+
"taikoAddress": "",
1212
"signalServiceAddress": ""
1313
}
1414
},
@@ -20,7 +20,7 @@
2020
"erc20VaultAddress": "",
2121
"erc721VaultAddress": "",
2222
"erc1155VaultAddress": "",
23-
"crossChainSyncAddress": "",
23+
"taikoAddress": "",
2424
"signalServiceAddress": ""
2525
}
2626
},
@@ -32,7 +32,7 @@
3232
"erc20VaultAddress": "",
3333
"erc721VaultAddress": "",
3434
"erc1155VaultAddress": "",
35-
"crossChainSyncAddress": "",
35+
"taikoAddress": "",
3636
"signalServiceAddress": ""
3737
}
3838
},
@@ -44,7 +44,7 @@
4444
"erc20VaultAddress": "",
4545
"erc721VaultAddress": "",
4646
"erc1155VaultAddress": "",
47-
"crossChainSyncAddress": "",
47+
"taikoAddress": "",
4848
"signalServiceAddress": ""
4949
}
5050
}

packages/bridge-ui-v2/config/schemas/configuredBridges.schema.json

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,20 +31,39 @@
3131
"erc1155VaultAddress": {
3232
"type": "string"
3333
},
34-
"crossChainSyncAddress": {
34+
"taikoAddress": {
3535
"type": "string"
3636
},
3737
"signalServiceAddress": {
3838
"type": "string"
39+
},
40+
"hops": {
41+
"type": "array",
42+
"default": [],
43+
"items": {
44+
"type": "object",
45+
"properties": {
46+
"chainId": {
47+
"type": "number"
48+
},
49+
"taikoAddress": {
50+
"type": "string"
51+
},
52+
"signalServiceAddress": {
53+
"type": "string"
54+
}
55+
}
56+
}
3957
}
4058
},
4159
"required": [
4260
"bridgeAddress",
4361
"erc20VaultAddress",
4462
"erc721VaultAddress",
4563
"erc1155VaultAddress",
46-
"crossChainSyncAddress",
47-
"signalServiceAddress"
64+
"taikoAddress",
65+
"signalServiceAddress",
66+
"hops"
4867
],
4968
"additionalProperties": false
5069
}

packages/bridge-ui-v2/scripts/vite-plugins/generateBridgeConfig.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,9 @@ const _formatObjectToTsLiteral = (obj: RoutingMap): string => {
140140
if (typeof value === 'string') {
141141
return `"${value}"`;
142142
}
143+
if (typeof value === 'object') {
144+
return JSON.stringify(value);
145+
}
143146
return String(value);
144147
};
145148

packages/bridge-ui-v2/scripts/vite-plugins/generateChainConfig.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ export function generateChainConfig() {
3939
const isValid = validateJsonAgainstSchema(configuredChainsConfigFile, configuredChainsSchema);
4040

4141
if (!isValid) {
42-
throw new Error('encoded configuredBridges.json is not valid.');
42+
throw new Error('encoded configuredChains.json is not valid.');
4343
}
4444
} else {
4545
configuredChainsConfigFile = '';

packages/bridge-ui-v2/scripts/vite-plugins/generateCustomTokenConfig.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ export function generateCustomTokenConfig() {
4343
const isValid = validateJsonAgainstSchema(configuredTokenConfigFile, configuredChainsSchema);
4444

4545
if (!isValid) {
46-
throw new Error('encoded configuredBridges.json is not valid.');
46+
throw new Error('encoded configuredRelayer.json is not valid.');
4747
}
4848
}
4949
const tsFilePath = path.resolve(outputPath);

packages/bridge-ui-v2/scripts/vite-plugins/generateEventIndexerConfig.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ export function generateEventIndexerConfig() {
4444
// Valide JSON against schema
4545
const isValid = validateJsonAgainstSchema(configuredEventIndexerConfigFile, configuredEventIndexerSchema);
4646
if (!isValid) {
47-
throw new Error('encoded configuredBridges.json is not valid.');
47+
throw new Error('encoded configuredEventIndexer.json is not valid.');
4848
}
4949
}
5050
// Path to where you want to save the generated Typ eScript file

packages/bridge-ui-v2/scripts/vite-plugins/generateRelayerConfig.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ export function generateRelayerConfig() {
4444
// Valide JSON against schema
4545
const isValid = validateJsonAgainstSchema(configuredRelayerConfigFile, configuredRelayerSchema);
4646
if (!isValid) {
47-
throw new Error('encoded configuredBridges.json is not valid.');
47+
throw new Error('encoded configuredRelayer.json is not valid.');
4848
}
4949
}
5050
// Path to where you want to save the generated Typ eScript file

packages/bridge-ui-v2/src/components/Transactions/Status.svelte

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@
8787
loading = LoadingState.CLAIMING;
8888
8989
try {
90-
const { msgHash, message } = bridgeTx;
90+
const { msgHash, message, receipt } = bridgeTx;
9191
9292
if (!msgHash || !message) {
9393
throw new Error('Missing msgHash or message');
@@ -109,7 +109,7 @@
109109
log(`Claiming ${bridgeTx.tokenType} for transaction`, bridgeTx);
110110
111111
// Step 5: Call claim() method on the bridge
112-
const txHash = await bridge.claim({ msgHash, message, wallet });
112+
const txHash = await bridge.claim({ msgHash, message, receipt, wallet });
113113
114114
const { explorer } = chainConfig[Number(bridgeTx.destChainId)].urls;
115115

packages/bridge-ui-v2/src/libs/bridge/ERC1155Bridge.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -210,8 +210,8 @@ export class ERC1155Bridge extends Bridge {
210210
const gasLimit = !isTokenAlreadyDeployed
211211
? BigInt(bridgeService.noERC1155TokenDeployedGasLimit)
212212
: fee > 0
213-
? bridgeService.noOwnerGasLimit
214-
: BigInt(0);
213+
? bridgeService.noOwnerGasLimit
214+
: BigInt(0);
215215

216216
const sendERC1155Args: NFTBridgeTransferOp = {
217217
destChainId: BigInt(destChainId),

packages/bridge-ui-v2/src/libs/bridge/ERC20Bridge.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,8 @@ export class ERC20Bridge extends Bridge {
4545
const gasLimit = !isTokenAlreadyDeployed
4646
? BigInt(bridgeService.noERC20TokenDeployedGasLimit)
4747
: fee > 0
48-
? bridgeService.noOwnerGasLimit
49-
: BigInt(0);
48+
? bridgeService.noOwnerGasLimit
49+
: BigInt(0);
5050

5151
const sendERC20Args: BridgeTransferOp = {
5252
destChainId: BigInt(destChainId),

packages/bridge-ui-v2/src/libs/bridge/ERC721Bridge.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -216,8 +216,8 @@ export class ERC721Bridge extends Bridge {
216216
const gasLimit = !isTokenAlreadyDeployed
217217
? BigInt(bridgeService.noERC721TokenDeployedGasLimit)
218218
: fee > 0
219-
? bridgeService.noOwnerGasLimit
220-
: BigInt(0);
219+
? bridgeService.noOwnerGasLimit
220+
: BigInt(0);
221221

222222
const sendERC721Args: NFTBridgeTransferOp = {
223223
destChainId: BigInt(destChainId),

packages/bridge-ui-v2/src/libs/bridge/ETHBridge.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -109,12 +109,19 @@ export class ETHBridge extends Bridge {
109109
const { messageStatus, destBridgeContract } = await super.beforeClaiming(args);
110110

111111
let txHash: Hash;
112-
const { msgHash, message } = args;
112+
const { msgHash, message, receipt } = args;
113113
const srcChainId = Number(message.srcChainId);
114114
const destChainId = Number(message.destChainId);
115115

116116
if (messageStatus === MessageStatus.NEW) {
117-
const proof = await this._prover.encodedSignalProof(msgHash, srcChainId, destChainId);
117+
const hops = routingContractsMap[srcChainId][destChainId].hops;
118+
119+
let proof;
120+
if (hops.length > 0) {
121+
proof = await this._prover.encodedSignalProofWithHops(msgHash, receipt, srcChainId, destChainId);
122+
} else {
123+
proof = await this._prover.encodedSignalProof(msgHash, srcChainId, destChainId);
124+
}
118125

119126
try {
120127
txHash = await destBridgeContract.write.processMessage([message, proof]);

packages/bridge-ui-v2/src/libs/bridge/getContractAddressByType.test.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ vi.mock('$bridgeConfig', () => ({
1717
bridgeAddress: '0x00002',
1818
erc721VaultAddress: '0x00003',
1919
erc1155VaultAddress: '0x00004',
20-
crossChainSyncAddress: '0x00005',
20+
taikoAddress: '0x00005',
2121
signalServiceAddress: '0x00006',
2222
},
2323
},
@@ -27,7 +27,7 @@ vi.mock('$bridgeConfig', () => ({
2727
bridgeAddress: '0x00008',
2828
erc721VaultAddress: '0x00009',
2929
erc1155VaultAddress: '0x00010',
30-
crossChainSyncAddress: '0x00011',
30+
taikoAddress: '0x00011',
3131
signalServiceAddress: '0x00012',
3232
},
3333
},
@@ -120,7 +120,7 @@ describe('getContractAddressBasedOnType', () => {
120120
tokenType: TokenType.ERC20,
121121
};
122122

123-
const expectedAddress = routingContractsMap[SRC_CHAIN_ID][DEST_CHAIN_ID].crossChainSyncAddress;
123+
const expectedAddress = routingContractsMap[SRC_CHAIN_ID][DEST_CHAIN_ID].taikoAddress;
124124

125125
// When
126126
const address = getContractAddressByType(args);

packages/bridge-ui-v2/src/libs/bridge/getContractAddressByType.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ export const getContractAddressByType = (args: GetContractAddressType): Address
3535
case ContractType.SIGNALSERVICE:
3636
return addressConfig.signalServiceAddress;
3737
case ContractType.CROSSCHAINSYNC:
38-
return addressConfig.crossChainSyncAddress;
38+
return addressConfig.taikoAddress;
3939
default:
4040
throw new Error('Invalid contract type');
4141
}

packages/bridge-ui-v2/src/libs/bridge/isTransactionProcessable.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ export async function isTransactionProcessable(bridgeTx: BridgeTransaction) {
1919
// TODO: do better job here as this is to make the UI happy
2020
if (status !== MessageStatus.NEW) return true;
2121

22-
const destCrossChainSyncAddress = routingContractsMap[Number(destChainId)][Number(srcChainId)].crossChainSyncAddress;
22+
const destCrossChainSyncAddress = routingContractsMap[Number(destChainId)][Number(srcChainId)].taikoAddress;
2323

2424
try {
2525
const destCrossChainSyncContract = getContract({

packages/bridge-ui-v2/src/libs/bridge/types.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,7 @@ export type RequireApprovalArgs = {
171171
export type ClaimArgs = {
172172
msgHash: Hash;
173173
message: Message;
174+
receipt?: TransactionReceipt;
174175
wallet: WalletClient;
175176
};
176177

@@ -198,7 +199,14 @@ export type AddressConfig = {
198199
etherVaultAddress?: Address;
199200
erc721VaultAddress: Address;
200201
erc1155VaultAddress: Address;
201-
crossChainSyncAddress: Address;
202+
taikoAddress: Address;
203+
signalServiceAddress: Address;
204+
hops: Array<HopAddressConfig>;
205+
};
206+
207+
export type HopAddressConfig = {
208+
chainId: number;
209+
taikoAddress: Address;
202210
signalServiceAddress: Address;
203211
};
204212

0 commit comments

Comments
 (0)