Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix backing and issuing contract #542

Merged
merged 1 commit into from
Oct 22, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions packages/apps/src/bridges/base.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
Expand Down
24 changes: 8 additions & 16 deletions packages/apps/src/bridges/helix-lpbridge.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand All @@ -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,
Expand All @@ -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",
Expand All @@ -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,
Expand All @@ -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
Expand All @@ -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,
Expand Down
38 changes: 17 additions & 21 deletions packages/apps/src/bridges/helixbridge-dvmdvm.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
}

Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -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 =
Expand All @@ -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,
Expand All @@ -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;
Expand All @@ -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],
Expand Down
31 changes: 14 additions & 17 deletions packages/apps/src/bridges/helixbridge-dvmevm.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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";
}

Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -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 =
Expand All @@ -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,
Expand All @@ -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;
Expand All @@ -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],
Expand Down
6 changes: 2 additions & 4 deletions packages/apps/src/bridges/l2bridge.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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: [
Expand All @@ -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;

Expand All @@ -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;
Expand Down
4 changes: 3 additions & 1 deletion packages/apps/src/components/transfer-action.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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 (
<Button kind="primary" onClick={() => switchNetwork && switchNetwork(sourceValue?.chain.id)} className="button">
Expand All @@ -35,7 +37,7 @@ export default function TransferAction({ recipient, transferValue, onTransfer }:
);
} else if (
sourceValue.token.type !== "native" &&
transferValue.formatted + (fee?.value || 0n) > (sourceAllowance?.value || 0n)
transferValue.formatted + feeValue > (sourceAllowance?.value || 0n)
) {
return (
<Button kind="primary" onClick={handleApprove} busy={busy} className="button">
Expand Down
3 changes: 2 additions & 1 deletion packages/apps/src/providers/transfer-provider.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -155,7 +155,8 @@ export default function TransferProvider({ children }: PropsWithChildren<unknown
const approve = useCallback(async () => {
if (address && bridgeClient) {
try {
const receipt = await bridgeClient.sourceApprove(transferValue.formatted + (fee?.value || 0n), address);
const feeValue = fee?.token.type === "native" ? 0n : fee?.value || 0n;
const receipt = await bridgeClient.sourceApprove(transferValue.formatted + feeValue, address);
notifyTransaction(receipt, sourceChain);

setSourceAllowance(await bridgeClient.getSourceAllowance(address));
Expand Down
Loading