From 1d48889731b9b26da7a4f81d7ac7790c5c52e5b6 Mon Sep 17 00:00:00 2001 From: JayJay1024 Date: Sun, 22 Oct 2023 19:26:12 +0800 Subject: [PATCH] fix backing and issuing contract --- packages/apps/src/bridges/base.ts | 8 ++++ packages/apps/src/bridges/helix-lpbridge.ts | 24 ++++-------- .../apps/src/bridges/helixbridge-dvmdvm.ts | 38 +++++++++---------- .../apps/src/bridges/helixbridge-dvmevm.ts | 31 +++++++-------- packages/apps/src/bridges/l2bridge.ts | 6 +-- .../apps/src/components/transfer-action.tsx | 4 +- .../apps/src/providers/transfer-provider.tsx | 3 +- 7 files changed, 54 insertions(+), 60 deletions(-) diff --git a/packages/apps/src/bridges/base.ts b/packages/apps/src/bridges/base.ts index a5cbdb28b..74102b1ca 100644 --- a/packages/apps/src/bridges/base.ts +++ b/packages/apps/src/bridges/base.ts @@ -66,6 +66,14 @@ export abstract class BaseBridge { } } + protected initContractFromBackingIssuing(backing: Address, issuing: Address) { + if (this.crossInfo?.action === "issue") { + this.contract = { sourceAddress: backing, targetAddress: issuing }; + } else if (this.crossInfo?.action === "redeem") { + this.contract = { sourceAddress: issuing, targetAddress: backing }; + } + } + isLnBridge() { return false; } diff --git a/packages/apps/src/bridges/helix-lpbridge.ts b/packages/apps/src/bridges/helix-lpbridge.ts index e6815efaf..f701c71c0 100644 --- a/packages/apps/src/bridges/helix-lpbridge.ts +++ b/packages/apps/src/bridges/helix-lpbridge.ts @@ -34,10 +34,9 @@ export class HelixLpBridge extends BaseBridge { } private initContract() { - this.contract = { - sourceAddress: "0x84f7a56483C100ECb12CbB4A31b7873dAE0d8E9B", - targetAddress: "0x5F8D4232367759bCe5d9488D3ade77FCFF6B9b6B", - }; + const backing = "0x84f7a56483C100ECb12CbB4A31b7873dAE0d8E9B"; + const issuing = "0x5F8D4232367759bCe5d9488D3ade77FCFF6B9b6B"; + this.initContractFromBackingIssuing(backing, issuing); } async transfer( @@ -63,16 +62,15 @@ export class HelixLpBridge extends BaseBridge { recipient, amount, options.totalFee, - this.crossInfo?.index, + this.crossInfo.index, this.targetToken?.type === "native", ], value: undefined, }; - const address = this.crossInfo.action === "issue" ? this.contract.sourceAddress : this.contract.targetAddress; const abi = (await import("@/abi/lpbridge.json")).default; const hash = await this.walletClient.writeContract({ - address, + address: this.contract.sourceAddress, abi, functionName, args, @@ -90,10 +88,6 @@ export class HelixLpBridge extends BaseBridge { await this.validateNetwork("target"); if (this.contract && this.publicClient && this.walletClient) { - const { address } = - this.crossInfo?.action === "issue" - ? { address: this.contract.targetAddress } - : { address: this.contract.sourceAddress }; const args = [ record.messageNonce, this.targetToken?.type === "native", @@ -108,7 +102,7 @@ export class HelixLpBridge extends BaseBridge { const abi = (await import("@/abi/lpbridge-sub2eth.json")).default; const hash = await this.walletClient.writeContract({ - address, + address: this.contract.targetAddress, abi, functionName: "requestCancelIssuing", args, @@ -121,10 +115,9 @@ export class HelixLpBridge extends BaseBridge { private async getBridgeFee() { if (this.contract && this.sourcePublicClient) { - const address = this.crossInfo?.action === "issue" ? this.contract.sourceAddress : this.contract.targetAddress; const abi = (await import("@/abi/lpbridge.json")).default; return this.sourcePublicClient.readContract({ - address, + address: this.contract.sourceAddress, abi, functionName: "fee", }) as unknown as bigint; // Native token @@ -147,11 +140,10 @@ export class HelixLpBridge extends BaseBridge { args: [transferId, fee], value: undefined, }; - const address = this.crossInfo?.action === "issue" ? this.contract.sourceAddress : this.contract.targetAddress; const abi = (await import("@/abi/lpbridge.json")).default; const hash = await this.walletClient.writeContract({ - address, + address: this.contract.sourceAddress, abi, functionName, args, diff --git a/packages/apps/src/bridges/helixbridge-dvmdvm.ts b/packages/apps/src/bridges/helixbridge-dvmdvm.ts index 904cf4bd8..712d049fd 100644 --- a/packages/apps/src/bridges/helixbridge-dvmdvm.ts +++ b/packages/apps/src/bridges/helixbridge-dvmdvm.ts @@ -40,15 +40,13 @@ export class HelixBridgeDVMDVM extends BaseBridge { private initContract() { if (this.sourceToken?.symbol === "RING" || this.sourceToken?.symbol === "xWRING") { - this.contract = { - sourceAddress: "0xF3c1444CD449bD66Ef6DA7CA6c3E7884840A3995", - targetAddress: "0x8738A64392b71617aF4C685d0E827855c741fDF7", - }; + const backing = "0xF3c1444CD449bD66Ef6DA7CA6c3E7884840A3995"; + const issuing = "0x8738A64392b71617aF4C685d0E827855c741fDF7"; + this.initContractFromBackingIssuing(backing, issuing); } else if (this.sourceToken?.symbol === "CRAB" || this.sourceToken?.symbol === "xWCRAB") { - this.contract = { - sourceAddress: "0xCF8923ebF4244cedC647936a0281dd10bDFCBF18", - targetAddress: "0x8c585F9791EE5b4B23fe82888cE576DBB69607eB", - }; + const backing = "0xCF8923ebF4244cedC647936a0281dd10bDFCBF18"; + const issuing = "0x8c585F9791EE5b4B23fe82888cE576DBB69607eB"; + this.initContractFromBackingIssuing(backing, issuing); } } @@ -119,7 +117,7 @@ export class HelixBridgeDVMDVM extends BaseBridge { const abi = (await import("@/abi/mappingtoken-dvmdvm.json")).default; const hash = await this.walletClient.writeContract({ - address: this.contract.targetAddress, + address: this.contract.sourceAddress, abi, functionName, args, @@ -149,16 +147,14 @@ export class HelixBridgeDVMDVM extends BaseBridge { await this.validateNetwork("target"); if (this.contract && this.specVersion && this.publicClient && this.walletClient) { - const { abi, address, functionName } = + const { abi, functionName } = this.crossInfo?.action === "issue" ? { abi: (await import("@/abi/mappingtoken-dvmdvm.json")).default, - address: this.contract.targetAddress, functionName: "remoteIssuingFailure", } : { abi: (await import("@/abi/backing-dvmdvm.json")).default, - address: this.contract.sourceAddress, functionName: this.sourceToken?.type === "native" ? "remoteUnlockFailureNative" : "remoteUnlockFailure", }; const args = @@ -175,7 +171,7 @@ export class HelixBridgeDVMDVM extends BaseBridge { const value = (await this.getFee())?.value; const hash = await this.walletClient.writeContract({ - address, + address: this.contract.targetAddress, abi, functionName, args, @@ -188,13 +184,13 @@ export class HelixBridgeDVMDVM extends BaseBridge { async getFee() { if (this.contract && this.sourceNativeToken && this.sourcePublicClient) { - const { abi, address } = + const { abi } = this.crossInfo?.action === "issue" - ? { abi: (await import("@/abi/backing-dvmdvm.json")).default, address: this.contract.sourceAddress } - : { abi: (await import("@/abi/mappingtoken-dvmdvm.json")).default, address: this.contract.targetAddress }; + ? { abi: (await import("@/abi/backing-dvmdvm.json")).default } + : { abi: (await import("@/abi/mappingtoken-dvmdvm.json")).default }; const value = (await this.sourcePublicClient.readContract({ - address, + address: this.contract.sourceAddress, abi, functionName: "fee", })) as unknown as bigint; @@ -204,13 +200,13 @@ export class HelixBridgeDVMDVM extends BaseBridge { async getDailyLimit() { if (this.contract && this.sourceToken && this.targetToken && this.targetPublicClient) { - const { abi, address } = + const { abi } = this.crossInfo?.action === "redeem" - ? { abi: (await import("@/abi/backing-dvmdvm.json")).default, address: this.contract.sourceAddress } - : { abi: (await import("@/abi/mappingtoken-dvmdvm.json")).default, address: this.contract.targetAddress }; + ? { abi: (await import("@/abi/backing-dvmdvm.json")).default } + : { abi: (await import("@/abi/mappingtoken-dvmdvm.json")).default }; const limit = (await this.targetPublicClient.readContract({ - address, + address: this.contract.targetAddress, abi, functionName: "calcMaxWithdraw", args: [this.targetToken.address], diff --git a/packages/apps/src/bridges/helixbridge-dvmevm.ts b/packages/apps/src/bridges/helixbridge-dvmevm.ts index a9ccd44dd..23541ed34 100644 --- a/packages/apps/src/bridges/helixbridge-dvmevm.ts +++ b/packages/apps/src/bridges/helixbridge-dvmevm.ts @@ -35,10 +35,9 @@ export class HelixBridgeDVMEVM extends BaseBridge { } private initContract() { - this.contract = { - sourceAddress: "0xD1B10B114f1975d8BCc6cb6FC43519160e2AA978", - targetAddress: "0xFBAD806Bdf9cEC2943be281FB355Da05068DE925", - }; + const backing = "0xD1B10B114f1975d8BCc6cb6FC43519160e2AA978"; + const issuing = "0xFBAD806Bdf9cEC2943be281FB355Da05068DE925"; + this.initContractFromBackingIssuing(backing, issuing); this.guard = "0x61B6B8c7C00aA7F060a2BEDeE6b11927CC9c3eF1"; } @@ -86,7 +85,7 @@ export class HelixBridgeDVMEVM extends BaseBridge { const value = options.totalFee; const hash = await this.walletClient.writeContract({ - address: this.contract.targetAddress, + address: this.contract.sourceAddress, abi, functionName, args, @@ -140,16 +139,14 @@ export class HelixBridgeDVMEVM extends BaseBridge { await this.validateNetwork("target"); if (this.contract && this.publicClient && this.walletClient) { - const { abi, address, functionName } = + const { abi, functionName } = this.crossInfo?.action === "issue" ? { abi: (await import("@/abi/mappingtoken-dvmevm.json")).default, - address: this.contract.targetAddress, functionName: this.sourceToken?.type === "native" ? "remoteUnlockFailureNative" : "remoteUnlockFailure", } : { abi: (await import("@/abi/backing-dvmevm.json")).default, - address: this.contract.sourceAddress, functionName: "remoteIssuingFailure", }; const args = @@ -159,7 +156,7 @@ export class HelixBridgeDVMEVM extends BaseBridge { const value = (await this.getFee())?.value; const hash = await this.walletClient.writeContract({ - address, + address: this.contract.targetAddress, abi, functionName, args, @@ -172,12 +169,12 @@ export class HelixBridgeDVMEVM extends BaseBridge { async getFee() { if (this.contract && this.sourceNativeToken && this.sourcePublicClient) { - const { abi, address } = + const { abi } = this.crossInfo?.action === "issue" - ? { abi: (await import("@/abi/backing-dvmevm.json")).default, address: this.contract.sourceAddress } - : { abi: (await import("@/abi/mappingtoken-dvmevm.json")).default, address: this.contract.targetAddress }; + ? { abi: (await import("@/abi/backing-dvmevm.json")).default } + : { abi: (await import("@/abi/mappingtoken-dvmevm.json")).default }; const value = (await this.sourcePublicClient.readContract({ - address, + address: this.contract.sourceAddress, abi, functionName: "currentFee", })) as unknown as bigint; @@ -187,13 +184,13 @@ export class HelixBridgeDVMEVM extends BaseBridge { async getDailyLimit() { if (this.contract && this.sourceToken && this.targetToken && this.targetPublicClient) { - const { abi, address } = + const { abi } = this.crossInfo?.action === "issue" - ? { abi: (await import("@/abi/mappingtoken-dvmevm.json")).default, address: this.contract.targetAddress } - : { abi: (await import("@/abi/backing-dvmevm.json")).default, address: this.contract.sourceAddress }; + ? { abi: (await import("@/abi/mappingtoken-dvmevm.json")).default } + : { abi: (await import("@/abi/backing-dvmevm.json")).default }; const limit = (await this.targetPublicClient.readContract({ - address, + address: this.contract.targetAddress, abi, functionName: "calcMaxWithdraw", args: [this.targetToken.address], diff --git a/packages/apps/src/bridges/l2bridge.ts b/packages/apps/src/bridges/l2bridge.ts index 74618cea2..0aa48a2b2 100644 --- a/packages/apps/src/bridges/l2bridge.ts +++ b/packages/apps/src/bridges/l2bridge.ts @@ -70,11 +70,10 @@ export class L2ArbitrumBridge extends BaseBridge { ], [params.maxSubmissionCost, "0x"], ); - const address = this.crossInfo?.action === "issue" ? this.contract.sourceAddress : this.contract.targetAddress; const abi = (await import("@/abi/l1-gateway-router.json")).default; const hash = await this.walletClient.writeContract({ - address, + address: this.contract.sourceAddress, abi, functionName: "outboundTransferCustomRefund", args: [ @@ -95,7 +94,6 @@ export class L2ArbitrumBridge extends BaseBridge { private async getL1toL2Params() { if (this.contract && this.sourcePublicClient && this.targetPublicClient) { - const address = this.crossInfo?.action === "issue" ? this.contract.sourceAddress : this.contract.targetAddress; const l1Client = this.sourcePublicClient; const l2Client = this.targetPublicClient; @@ -105,7 +103,7 @@ export class L2ArbitrumBridge extends BaseBridge { const scaleL2GasPrice = l2GasPrice * this.l2GasPriceScaler; const inboxAddress = (await l1Client.readContract({ - address, + address: this.contract.sourceAddress, abi: (await import("@/abi/l1-gateway-router.json")).default, functionName: "inbox", })) as unknown as Address; diff --git a/packages/apps/src/components/transfer-action.tsx b/packages/apps/src/components/transfer-action.tsx index b5b6273e7..4ab557c95 100644 --- a/packages/apps/src/components/transfer-action.tsx +++ b/packages/apps/src/components/transfer-action.tsx @@ -27,6 +27,8 @@ export default function TransferAction({ recipient, transferValue, onTransfer }: }, [approve]); if (chain) { + const feeValue = fee?.token.type === "native" ? 0n : fee?.value || 0n; + if (sourceValue?.chain.id !== chain.id) { return (