From 42d4f30675eb7ec1ab7f08a5bb48454f366b7841 Mon Sep 17 00:00:00 2001 From: Wanwiset Peerapatanapokin Date: Wed, 17 Jan 2024 15:57:43 +0400 Subject: [PATCH] Fix UI confirmation status (#64) * update for confirmation status and minor refactor * simplify subnet_api and parentchain_api to xdc_api --- backend/Dockerfile.mac | 20 ++++++++++++++++++++ backend/src/client/extensions.ts | 6 +++--- backend/src/client/parentchain/index.ts | 15 ++++++++++++--- backend/src/client/subnet/index.ts | 14 +++++++------- backend/src/controllers/blocks.controller.ts | 4 ++-- 5 files changed, 44 insertions(+), 15 deletions(-) create mode 100644 backend/Dockerfile.mac diff --git a/backend/Dockerfile.mac b/backend/Dockerfile.mac new file mode 100644 index 0000000..97c1225 --- /dev/null +++ b/backend/Dockerfile.mac @@ -0,0 +1,20 @@ +# NodeJS Version 16 +FROM node:16.18-alpine + +# Copy Dir +COPY . ./app + +# Work to Dir +WORKDIR /app + +# Install Node Package +RUN apk add g++ make python3 +RUN npm install --legacy-peer-deps + +# Set Env +ENV NODE_ENV production +EXPOSE 3000 +EXPOSE 443 + +# Cmd script +CMD ["npm", "run", "start"] diff --git a/backend/src/client/extensions.ts b/backend/src/client/extensions.ts index a519988..8d16caa 100644 --- a/backend/src/client/extensions.ts +++ b/backend/src/client/extensions.ts @@ -48,9 +48,9 @@ export interface NetworkInfo { } export interface Web3WithExtension extends Web3 { - xdcSubnet: { + xdcApi: { getV2Block: (type: 'committed') => Promise; - getV2BlockByNumber: (bluckNum: string) => Promise; + getV2BlockByNumber: (blockNum: string) => Promise; getV2BlockByHash: (blockHash: string) => Promise; getMasternodesByNumber: (blockStatus: BlockStatus) => Promise; getCandidates: (param: 'latest') => Promise; @@ -58,7 +58,7 @@ export interface Web3WithExtension extends Web3 { }; } -export const networkExtensions = (extensionName = 'xdcSubnet') => { +export const xdcExtensions = (extensionName = 'xdcApi') => { return { property: extensionName, methods: [ diff --git a/backend/src/client/parentchain/index.ts b/backend/src/client/parentchain/index.ts index 3647aaa..5b48768 100644 --- a/backend/src/client/parentchain/index.ts +++ b/backend/src/client/parentchain/index.ts @@ -5,7 +5,7 @@ import { abi } from './contract'; import { logger } from '../../utils/logger'; import { CHECKPOINT_CONTRACT, PARENTNET_URL } from '../../config'; import { HttpException } from '../../exceptions/httpException'; -import { networkExtensions, Web3WithExtension } from '../extensions'; +import { xdcExtensions, Web3WithExtension } from '../extensions'; export interface SmartContractAuditedBlockInfo { smartContractHash: string; @@ -21,7 +21,7 @@ export class ParentChainClient { constructor() { const keepaliveAgent = new HttpsAgent(); const provider = new Web3.providers.HttpProvider(PARENTNET_URL, { keepAlive: true, agent: { https: keepaliveAgent } }); - this.web3 = new Web3(provider).extend(networkExtensions()); + this.web3 = new Web3(provider).extend(xdcExtensions()); this.smartContractInstance = new this.web3.eth.Contract(abi as any[], CHECKPOINT_CONTRACT); } @@ -94,7 +94,16 @@ export class ParentChainClient { */ async confirmBlock(subnetHash: string) { const { finalized, mainnet_num } = await this.smartContractInstance.methods.getHeader(subnetHash).call(); - const { Committed, Hash, Miner, Timestamp } = await this.web3.xdcSubnet.getV2BlockByNumber(Web3.utils.numberToHex(mainnet_num)); + if (!finalized){ + return{ + isCommitted: false, + parentchainHash: "0x0000000000000000000000000000000000000000000000000000000000000000", + parentChainNum: mainnet_num, + proposer: "0x0000000000000000000000000000000000000000000000000000000000000000", + timestamp: 0, + } + } + const { Committed, Hash, Miner, Timestamp } = await this.web3.xdcApi.getV2BlockByNumber(Web3.utils.numberToHex(mainnet_num)); return { isCommitted: Committed && finalized, parentchainHash: Hash, diff --git a/backend/src/client/subnet/index.ts b/backend/src/client/subnet/index.ts index 2851de2..780d1a2 100644 --- a/backend/src/client/subnet/index.ts +++ b/backend/src/client/subnet/index.ts @@ -1,6 +1,6 @@ import Web3 from 'web3'; import { HttpsAgent } from 'agentkeepalive'; -import { networkExtensions, Web3WithExtension } from '../extensions'; +import { xdcExtensions, Web3WithExtension } from '../extensions'; import { logger } from '../../utils/logger'; import { HttpException } from '../../exceptions/httpException'; import { SUBNET_URL } from '../../config'; @@ -19,12 +19,12 @@ export class SubnetClient { const keepaliveAgent = new HttpsAgent(); const provider = new Web3.providers.HttpProvider(SUBNET_URL, { keepAlive: true, agent: { https: keepaliveAgent } }); - this.web3 = new Web3(provider).extend(networkExtensions()); + this.web3 = new Web3(provider).extend(xdcExtensions()); } async getCandidates() { try { - const { candidates, success } = await this.web3.xdcSubnet.getCandidates('latest'); + const { candidates, success } = await this.web3.xdcApi.getCandidates('latest'); if (!success) { throw new Error('Failed on getting the candidates data'); } @@ -37,7 +37,7 @@ export class SubnetClient { async getNetworkInfo() { try { - const { NetworkId, XDCValidatorAddress, Denom, NetworkName } = await this.web3.xdcSubnet.getNetworkInfo(); + const { NetworkId, XDCValidatorAddress, Denom, NetworkName } = await this.web3.xdcApi.getNetworkInfo(); return { networkId: NetworkId, validatorSmartContractAddress: XDCValidatorAddress, @@ -52,7 +52,7 @@ export class SubnetClient { async getLastMasternodesInformation(): Promise { try { - const { Number, Round, Masternodes, Penalty } = await this.web3.xdcSubnet.getMasternodesByNumber('latest'); + const { Number, Round, Masternodes, Penalty } = await this.web3.xdcApi.getMasternodesByNumber('latest'); return { currentBlockNumber: Number, currentRound: Round, @@ -67,7 +67,7 @@ export class SubnetClient { async getLatestCommittedBlockInfo(): Promise<{ hash: string; number: number; round: number }> { try { - const { Hash, Number, Round } = await this.web3.xdcSubnet.getV2Block('committed'); + const { Hash, Number, Round } = await this.web3.xdcApi.getV2Block('committed'); return { hash: Hash, number: Number, @@ -80,7 +80,7 @@ export class SubnetClient { } async getBlockInfoByHash(hash: string) { - const { Hash, Number, Committed, Miner, Timestamp } = await this.web3.xdcSubnet.getV2BlockByHash(hash); + const { Hash, Number, Committed, Miner, Timestamp } = await this.web3.xdcApi.getV2BlockByHash(hash); if (!Hash || !Number) { logger.warn(`Invalid block hash or height or ParentHash received, hash: ${hash}, number: ${Number}`); throw new HttpException(404, 'No such block exit in subnet'); diff --git a/backend/src/controllers/blocks.controller.ts b/backend/src/controllers/blocks.controller.ts index cc9b6fc..ffe1f24 100644 --- a/backend/src/controllers/blocks.controller.ts +++ b/backend/src/controllers/blocks.controller.ts @@ -125,7 +125,7 @@ export class BlocksController { blockHash: parentChain.parentchainBlockHash, blockHeight: parentChain.parentchainBlockHeight, proposer: parentChain.proposer, - timestamp: subnet.timestamp.toString(), + timestamp: parentChain.timestamp.toString(), }, }; } else if (parseInt(input)) { @@ -145,7 +145,7 @@ export class BlocksController { blockHash: parentChain.parentchainBlockHash, blockHeight: parentChain.parentchainBlockHeight, proposer: parentChain.proposer, - timestamp: subnet.timestamp.toString(), + timestamp: parentChain.timestamp.toString(), }, }; } else {