Skip to content

Commit

Permalink
Merge pull request #177 from luxfi/backend
Browse files Browse the repository at this point in the history
Backend
  • Loading branch information
venuswhispers authored Nov 6, 2024
2 parents b238d51 + ac4cf2e commit b90efd6
Show file tree
Hide file tree
Showing 77 changed files with 8,792 additions and 2,062 deletions.
File renamed without changes.
22 changes: 22 additions & 0 deletions .github/workflows/server.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
name: Docker Image CI for GHCR for Bridge Server
on:
push:
branches:
- main
paths:
- "apps/server**" # Only trigger the workflow for changes in the apps/server subfoler
jobs:
build_and_publish:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@main
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Log in to GitHub Container Registry
run: |
docker login --username venuswhispers --password ${{ secrets.GH_PAT }} ghcr.io
- name: Build and push Docker images
run: |
cd apps/server
docker build -f Dockerfile -t ghcr.io/luxfi/bridge/server:latest .
docker push ghcr.io/luxfi/bridge/server:latest
99 changes: 57 additions & 42 deletions apps/bridge/components/SwapHistory/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,8 @@ import fireblockNetworksMainnet from "@/components/lux/fireblocks/constants/netw
import fireblockNetworksTestnet from "@/components/lux/fireblocks/constants/networks.sandbox";
import { networks as teleportNetworksMainnet } from "@/components/lux/teleport/constants/networks.mainnets";
import { networks as teleportNetworksTestnet } from "@/components/lux/teleport/constants/networks.sandbox";
import useAsyncEffect from "use-async-effect";
import axios from "axios";

function TransactionsHistory() {
const isMainnet = process.env.NEXT_PUBLIC_API_VERSION === "mainnet";
Expand Down Expand Up @@ -73,64 +75,77 @@ function TransactionsHistory() {
});
}, [router]);

useEffect(() => {
(async () => {
const client = new BridgeApiClient(router, "/transactions");
const { data } = await client.GetSwapsAsync(
1,
SwapStatusInNumbers.Cancelled
const getSwaps = async (page: number, status?: string | number) => {
try {
const {
data: { data },
} = await axios.get(
`${process.env.NEXT_PUBLIC_BACKEND_API}/swaps?page=${page}${
status ? `&status=${status}` : ""
}&version=${BridgeApiClient.apiVersion}`
);
if (Number(data?.length) > 0) setShowToggleButton(true);
})();
return {
data: data,
error: null,
};
} catch (err) {
return {
data: null,
error: "Cannot get swaps. Please try again later.",
};
}
};

useAsyncEffect(async () => {
const { data, error } = await getSwaps(1, SwapStatusInNumbers.Cancelled);
if (Number(data?.length) > 0) setShowToggleButton(true);
}, []);

useEffect(() => {
(async () => {
setIsLastPage(false);
setLoading(true);
const client = new BridgeApiClient(router, "/transactions");
useAsyncEffect(async () => {
setIsLastPage(false);
setLoading(true);

if (showAllSwaps) {
const { data, error } = await client.GetSwapsAsync(1);
if (showAllSwaps) {
const { data, error } = await getSwaps(1);

if (error) {
toast.error(error.message);
return;
}
if (error) {
toast.error(error);
return;
}

setSwaps(data);
setPage(1);
if (Number(data?.length) < PAGE_SIZE) setIsLastPage(true);
setSwaps(data);
setPage(1);
if (Number(data?.length) < PAGE_SIZE) setIsLastPage(true);

setLoading(false);
} else {
const { data, error } = await client.GetSwapsAsync(
1,
SwapStatusInNumbers.SwapsWithoutCancelledAndExpired
);
setLoading(false);
} else {
const { data, error } = await getSwaps(
1,
SwapStatusInNumbers.SwapsWithoutCancelledAndExpired
);

if (error) {
toast.error(error.message);
return;
}
setSwaps(data);
setPage(1);
if (Number(data?.length) < PAGE_SIZE) setIsLastPage(true);
setLoading(false);
if (error) {
toast.error(error);
return;
}
})();

setSwaps(data);
setPage(1);
if (Number(data?.length) < PAGE_SIZE) setIsLastPage(true);
setLoading(false);
}
}, [router.query, showAllSwaps]);

const handleLoadMore = useCallback(async () => {
//TODO refactor page change
const nextPage = page + 1;
setLoading(true);
const client = new BridgeApiClient(router, "/transactions");

if (showAllSwaps) {
const { data, error } = await client.GetSwapsAsync(nextPage);
const { data, error } = await getSwaps(nextPage);

if (error) {
toast.error(error.message);
toast.error(error);
return;
}

Expand All @@ -140,13 +155,13 @@ function TransactionsHistory() {

setLoading(false);
} else {
const { data, error } = await client.GetSwapsAsync(
const { data, error } = await getSwaps(
nextPage,
SwapStatusInNumbers.SwapsWithoutCancelledAndExpired
);

if (error) {
toast.error(error.message);
toast.error(error);
return;
}

Expand Down
6 changes: 5 additions & 1 deletion apps/bridge/components/lux/teleport/process.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,11 @@ const Form: React.FC<IProps> = ({ swapId }) => {
try {
const {
data: { data },
} = await axios.get(`/api/swaps/${swapId}?version=mainnet`);
} = await axios.get(
`${process.env.NEXT_PUBLIC_BACKEND_API}/swaps/${swapId}?version=mainnet`
);

console.log(data);
const _sourceNetwork = networks.find(
(_n: Network) => _n.internal_name === data.source_network
) as Network;
Expand Down
25 changes: 14 additions & 11 deletions apps/bridge/components/lux/teleport/swap/Form.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -155,7 +155,7 @@ const Swap: FC = () => {
try {
const data = {
amount: Number(sourceAmount),
source_network: sourceNetwork,
source_network: sourceNetwork?.internal_name,
source_asset: sourceAsset?.asset,
source_address: "",
destination_network: destinationNetwork?.internal_name,
Expand All @@ -166,16 +166,19 @@ const Swap: FC = () => {
use_teleporter: true,
app_name: "Bridge",
};
const response = await axios.post(`/api/swaps?version=mainnet`, data);
// setSwapId(response.data?.data?.swap_id);
// window.history.pushState(
// {},
// "",
// `/swap/teleporter/${response.data?.data?.swap_id}`
// );
// setSwapStatus(SwapStatus.UserTransferPending);
// setShowSwapModal(true);
router.push(`/swap/teleporter/${response.data?.data?.swap_id}`);
const response = await axios.post(
`${process.env.NEXT_PUBLIC_BACKEND_API}/swaps?version=mainnet`,
data
);
setSwapId(response.data?.data?.swap_id);
window.history.pushState(
{},
"",
`/swap/teleporter/${response.data?.data?.swap_id}`
);
setSwapStatus(SwapStatus.UserTransferPending);
setShowSwapModal(true);
// router.push(`/swap/teleporter/${response.data?.data?.swap_id}`);
} catch (err) {
console.log(err);
setIsSubmitting(false);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -183,12 +183,15 @@ const PayoutProcessor: React.FC<IProps> = ({
}
///////////////////////////////////////////////////////////////////
setBridgeMintTransactionHash(_bridgePayoutTx.hash);
await axios.post(`/api/swaps/payout/${swapId}`, {
txHash: _bridgePayoutTx.hash,
amount: sourceAmount,
from: CONTRACTS[String(sourceNetwork?.chain_id)].teleporter,
to: destinationAddress,
});
await axios.post(
`${process.env.NEXT_PUBLIC_BACKEND_API}/swaps/payout/${swapId}`,
{
txHash: _bridgePayoutTx.hash,
amount: sourceAmount,
from: CONTRACTS[String(sourceNetwork?.chain_id)].teleporter,
to: destinationAddress,
}
);
setSwapStatus("payout_success");
} catch (err) {
console.log(err);
Expand Down Expand Up @@ -278,12 +281,15 @@ const PayoutProcessor: React.FC<IProps> = ({
);
await _bridgePayoutTx.wait();
setBridgeMintTransactionHash(_bridgePayoutTx.hash);
await axios.post(`/api/swaps/payout/${swapId}`, {
txHash: _bridgePayoutTx.hash,
amount: sourceAmount,
from: CONTRACTS[String(sourceNetwork?.chain_id)].teleporter,
to: destinationAddress,
});
await axios.post(
`${process.env.NEXT_PUBLIC_BACKEND_API}/swaps/payout/${swapId}`,
{
txHash: _bridgePayoutTx.hash,
amount: sourceAmount,
from: CONTRACTS[String(sourceNetwork?.chain_id)].teleporter,
to: destinationAddress,
}
);
setSwapStatus("payout_success");
} catch (err) {
console.log(err);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -103,22 +103,28 @@ const TeleportProcessor: React.FC<IProps> = ({
receiverAddressHash: receiverAddressHash,
};

const response = await fetch(`/api/teleport/getsig`, {
method: "POST", // Specify the method (GET is default, so it's optional here)
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify(signData),
});
const response = await fetch(
`${process.env.NEXT_PUBLIC_BACKEND_API}/swaps/getsig`,
{
method: "POST", // Specify the method (GET is default, so it's optional here)
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify(signData),
}
);
const res = await response.json();
console.log("data from mpc oracle network:::", res);
if (res.status) {
await axios.post(`/api/swaps/mpcsign/${swapId}`, {
txHash: res.data.signature,
amount: sourceAmount,
from: signer?._address,
to: CONTRACTS[String(sourceNetwork?.chain_id)].teleporter,
});
await axios.post(
`${process.env.NEXT_PUBLIC_BACKEND_API}/swaps/mpcsign/${swapId}`,
{
txHash: res.data.signature,
amount: sourceAmount,
from: signer?._address,
to: CONTRACTS[String(sourceNetwork?.chain_id)].teleporter,
}
);
setMpcSignature(res.data.signature);
setSwapStatus("user_payout_pending");
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -152,12 +152,15 @@ const UserTokenDepositor: React.FC<IProps> = ({
}
);
await _bridgeTransferTx.wait();
await axios.post(`/api/swaps/transfer/${swapId}`, {
txHash: _bridgeTransferTx.hash,
amount: sourceAmount,
from: signer?._address,
to: CONTRACTS[sourceNetwork.chain_id].teleporter,
});
await axios.post(
`${process.env.NEXT_PUBLIC_BACKEND_API}/swaps/transfer/${swapId}`,
{
txHash: _bridgeTransferTx.hash,
amount: sourceAmount,
from: signer?._address,
to: CONTRACTS[sourceNetwork.chain_id].teleporter,
}
);
setUserTransferTransaction(_bridgeTransferTx.hash);
setSwapStatus("teleport_processing_pending");
} catch (err) {
Expand Down Expand Up @@ -209,12 +212,15 @@ const UserTokenDepositor: React.FC<IProps> = ({
sourceAsset.contract_address
);
await _bridgeTransferTx.wait();
await axios.post(`/api/swaps/transfer/${swapId}`, {
txHash: _bridgeTransferTx.hash,
amount: sourceAmount,
from: signer?._address,
to: CONTRACTS[sourceNetwork.chain_id].teleporter,
});
await axios.post(
`${process.env.NEXT_PUBLIC_BACKEND_API}/swaps/transfer/${swapId}`,
{
txHash: _bridgeTransferTx.hash,
amount: sourceAmount,
from: signer?._address,
to: CONTRACTS[sourceNetwork.chain_id].teleporter,
}
);
setUserTransferTransaction(_bridgeTransferTx.hash);
setSwapStatus("teleport_processing_pending");
} catch (err) {
Expand Down
Loading

0 comments on commit b90efd6

Please sign in to comment.