Skip to content

Commit 810e64e

Browse files
authored
fix: add mint sysx add log (#49)
1 parent 6ceda4a commit 810e64e

File tree

5 files changed

+119
-0
lines changed

5 files changed

+119
-0
lines changed

api/services/admin-transfer/constants.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { utils as syscoinUtils } from "syscoinjs-lib";
44
export const CONFIRM_UTXO_TRANSACTION = "Confirm UTXO Transaction";
55
export const BURN_SYS_TOKEN_TYPE = "SPTSyscoinBurnToAssetAllocation";
66
export const BURN_SYSX_TOKEN_TYPE = "SPTAssetAllocationBurnToNEVM";
7+
export const MINT_SYSX_TOKEN_TYPE = "SPTAssetAllocationMint";
78

89
export const verifyTxTokenTransfer = async (
910
txId: string,
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
import { AddMintSysxLogRequestPayload } from "api/types/admin/transfer/add-log";
2+
import dbConnect from "lib/mongodb";
3+
import { NextApiRequest, NextApiResponse } from "next";
4+
import TransferModel from "models/transfer";
5+
import {
6+
ETH_TO_SYS_TRANSFER_STATUS,
7+
ITransferLog,
8+
} from "@contexts/Transfer/types";
9+
import { verifySignature } from "utils/api/verify-signature";
10+
import {
11+
CONFIRM_UTXO_TRANSACTION,
12+
MINT_SYSX_TOKEN_TYPE,
13+
verifyTxTokenTransfer,
14+
} from "./constants";
15+
16+
export const handleMintSysx = async (
17+
transferId: string,
18+
payload: AddMintSysxLogRequestPayload,
19+
req: NextApiRequest,
20+
res: NextApiResponse
21+
) => {
22+
await dbConnect();
23+
const { address } = req.session.user!;
24+
const transfer = await TransferModel.findOne({ id: transferId });
25+
if (!transfer) {
26+
return res.status(404).json({ message: "Transfer not found" });
27+
}
28+
const { txId, clearAll, operation, signedMessage } = payload;
29+
const data = {
30+
operation,
31+
txId,
32+
clearAll,
33+
};
34+
const message = JSON.stringify(data);
35+
36+
if (!verifySignature(message, signedMessage, address)) {
37+
return res.status(401).json({ message: "Unauthorized" });
38+
}
39+
40+
const verifiedTransaction = await verifyTxTokenTransfer(
41+
txId,
42+
MINT_SYSX_TOKEN_TYPE
43+
);
44+
45+
if (!verifiedTransaction) {
46+
return res.status(400).json({ message: "Invalid transaction type" });
47+
}
48+
49+
if (clearAll) {
50+
transfer.logs = transfer.logs.filter(
51+
(log) => !(log.status === ETH_TO_SYS_TRANSFER_STATUS.MINT_SYSX)
52+
);
53+
}
54+
55+
const burnSysxLog: ITransferLog = {
56+
status: ETH_TO_SYS_TRANSFER_STATUS.MINT_SYSX,
57+
payload: {
58+
data: {
59+
tx: txId,
60+
},
61+
message: "Mint SYSX to Utxo",
62+
previousStatus: ETH_TO_SYS_TRANSFER_STATUS.CONFIRM_FREEZE_BURN_SYS,
63+
},
64+
date: Date.now(),
65+
};
66+
67+
transfer.logs.push(burnSysxLog);
68+
69+
const confirmLog: ITransferLog = {
70+
status: ETH_TO_SYS_TRANSFER_STATUS.CONFIRM_MINT_SYSX,
71+
payload: {
72+
data: verifiedTransaction,
73+
message: CONFIRM_UTXO_TRANSACTION,
74+
previousStatus: ETH_TO_SYS_TRANSFER_STATUS.MINT_SYSX,
75+
},
76+
date: Date.now(),
77+
};
78+
79+
transfer.logs.push(confirmLog);
80+
81+
await transfer.save();
82+
83+
res.status(200).json({ success: true });
84+
};
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import AddUTXOTransactionModal from "./AddUTXOTransactionModal";
2+
3+
type Props = {
4+
onClose: (refetch?: boolean) => void;
5+
transferId: string;
6+
};
7+
8+
type FormValues = {
9+
txId: string;
10+
clearAll: boolean;
11+
};
12+
13+
const AddMintSysxTransaction: React.FC<Props> = ({ onClose, transferId }) => {
14+
return (
15+
<AddUTXOTransactionModal
16+
onClose={onClose}
17+
operation="mint-sysx"
18+
tokenType="SPTAssetAllocationMint"
19+
transferId={transferId}
20+
/>
21+
);
22+
};
23+
24+
export default AddMintSysxTransaction;

pages/admin/transfer/[id].tsx

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import AdminTransferLogAccordion from "components/Admin/Transfer/LogAccordion";
2323
import AddSubmitProofsTransaction from "components/Admin/Transfer/AddLogModals/AddSubmitProofsTransaction";
2424
import { Web3Provider } from "components/Bridge/context/Web";
2525
import AddFreezeBurnTransactionModal from "components/Admin/Transfer/AddLogModals/AddFreezeBurnTransactionModal";
26+
import AddMintSysxTransaction from "components/Admin/Transfer/AddLogModals/AddMintSysxTransaction";
2627

2728
type Props = {
2829
initialTransfer: ITransfer;
@@ -199,6 +200,12 @@ const TransferDetailsPage: NextPage<Props> = ({ initialTransfer }) => {
199200
transferId={transfer.id}
200201
/>
201202
)}
203+
{addLogModal === "mint-sysx" && (
204+
<AddMintSysxTransaction
205+
onClose={closeAddLogModal}
206+
transferId={transfer.id}
207+
/>
208+
)}
202209
{addLogModal === "freeze-burn-sys" && (
203210
<AddFreezeBurnTransactionModal
204211
onClose={closeAddLogModal}

pages/api/admin/transfer/[id]/add-log.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { handleBurnSys } from "api/services/admin-transfer/handle-burn-sys";
55
import { handleBurnSysx } from "api/services/admin-transfer/handle-burn-sysx";
66
import { handleSubmitProofs } from "api/services/admin-transfer/handle-submit-proofs";
77
import { handleFreezeBurn } from "api/services/admin-transfer/handle-freeze-burn";
8+
import { handleMintSysx } from "api/services/admin-transfer/handle-mint-sysx";
89

910
const AdminTransferAddLog: NextApiHandler = adminSessionGuard(
1011
async (req: NextApiRequest, res: NextApiResponse) => {
@@ -18,6 +19,8 @@ const AdminTransferAddLog: NextApiHandler = adminSessionGuard(
1819
return handleSubmitProofs(transferId, body, req, res);
1920
} else if (body.operation === "freeze-burn-sys") {
2021
return handleFreezeBurn(transferId, body, req, res);
22+
} else if (body.operation === "mint-sysx") {
23+
return handleMintSysx(transferId, body, req, res);
2124
}
2225
// Unsupported operation
2326
return res.status(400).json({ message: "Bad request" });

0 commit comments

Comments
 (0)