Skip to content

Commit 70fc20a

Browse files
authored
Merge pull request #179 from LasticXYZ/paraid
Paraid
2 parents 553ab2d + 94060db commit 70fc20a

29 files changed

+1262
-228
lines changed

src/app/[network]/(App)/bulkcore1/CoreUtilisation.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ type DataSetKey = 'priceOnePeriod' | 'price' | 'cores' | 'pastAuctions' // Add m
1717
const CoreUtilisation: React.FC = () => {
1818
const pathname = usePathname()
1919
const network = getChainFromPath(pathname)
20-
const decimalPoints = network_list[network].decimalPoints
20+
const decimalPoints = network_list[network].tokenDecimals
2121

2222
const [activeDataSet, setActiveDataSet] = useState<DataSetKey>('priceOnePeriod') // Change to string to accommodate multiple datasets
2323
const client = useMemo(() => getClient(), [])

src/app/[network]/(App)/bulkcore1/TimeSection.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ export default function BrokerSaleInfo() {
3232
const configuration = network_list[network].configuration
3333
const brokerConstants = network_list[network].constants
3434
const tokenSymbol = network_list[network].tokenSymbol
35-
const decimalPoints = network_list[network].decimalPoints
35+
const decimalPoints = network_list[network].tokenDecimals
3636

3737
const currentSaleRegion = useSaleRegion(network, client)
3838

src/app/[network]/(App)/core/[number]/[regionId]/[mask]/Core.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
import Border from '@/components/border/Border'
2-
import AssignModal from '@/components/broker/extrinsics/AssignModal'
3-
import InterlaceCoreModal from '@/components/broker/extrinsics/InterlaceCoreModal'
4-
import PartitionCoreModal from '@/components/broker/extrinsics/PartitionCoreModal'
5-
import TransferModal from '@/components/broker/extrinsics/TransferModal'
62
import SecondaryButton from '@/components/button/SecondaryButton'
73
import CoreItemExtensive from '@/components/cores/CoreItemExtensive'
84
import CountDown from '@/components/countDown/CountDown'
5+
import AssignModal from '@/components/extrinsics/broker/AssignModal'
6+
import InterlaceCoreModal from '@/components/extrinsics/broker/InterlaceCoreModal'
7+
import PartitionCoreModal from '@/components/extrinsics/broker/PartitionCoreModal'
8+
import TransferModal from '@/components/extrinsics/broker/TransferModal'
99
import ListingsModal from '@/components/listings/AddListingsModal'
1010
import TimelineComponent from '@/components/timelineComp/TimelineComp'
1111
import TimelineUtilizeCore from '@/components/timelineComp/TimelineUtilizeCore'

src/app/[network]/(App)/instacore/BuyCores.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
'use client'
22
import Border from '@/components/border/Border'
3-
import PurchaseCreditsModal from '@/components/broker/extrinsics/PurchaseCreditsModal'
43
import SecondaryButton from '@/components/button/SecondaryButton'
4+
import PurchaseCreditsModal from '@/components/extrinsics/broker/PurchaseCreditsModal'
55
import WalletStatus from '@/components/walletStatus/WalletStatus'
66
import { useInkathon } from '@poppyseed/lastic-sdk'
77

Lines changed: 133 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,133 @@
1+
import Border from '@/components/border/Border'
2+
import NumberField from '@/components/inputField/NumberField'
3+
import GeneralTableWithButtons from '@/components/table/GeneralTableWithButtons'
4+
import WalletStatus from '@/components/walletStatus/WalletStatus'
5+
import { network_list } from '@/config/network'
6+
import { ParachainInfo, ParachainState } from '@/hooks/useParachainInfo'
7+
import { useCurrentRelayBlockNumber } from '@/hooks/useSubstrateQuery'
8+
import { blocksToTimeFormat } from '@/utils/broker/blockTime'
9+
import { useInkathon } from '@poppyseed/lastic-sdk'
10+
import { ChangeEvent, useState } from 'react'
11+
12+
const statusColors = {
13+
'System Chain': 'bg-blue-200',
14+
'Currently Active': 'bg-green-200',
15+
'Idle Chain': 'bg-yellow-200',
16+
Reserved: 'bg-red-200',
17+
Onboarding: 'bg-purple-200',
18+
Parathread: 'bg-indigo-200',
19+
'Idle - In workplan': 'bg-pink-200',
20+
'Holding Slot': 'bg-orange-200',
21+
}
22+
23+
const statusDescriptions = {
24+
'System Chain':
25+
'A system chain is the main chain of a blockchain network, responsible for its core functionality.',
26+
'Currently Active':
27+
'An active parachain is currently producing blocks and participating in the relay chain.',
28+
'Idle Chain': 'An idle chain is not currently active or producing blocks.',
29+
Reserved: 'Reserved parachains have slots that are reserved but not yet active.',
30+
Onboarding: 'Parachains that are currently in the process of onboarding to the network.',
31+
Parathread:
32+
'Parathreads are parachains that are not continuously active but can participate in the network on demand.',
33+
'Idle - In workplan':
34+
'Idle parachains that are included in a work plan but are not currently active.',
35+
'Holding Slot': 'Parachains that hold a slot but are not actively producing blocks.',
36+
}
37+
38+
const ParaIdFetch = ({ parachains }: { parachains: ParachainInfo[] }) => {
39+
const { activeChain, relayApi } = useInkathon()
40+
const [filter, setFilter] = useState<string>('all')
41+
const [paraIdSET, setParaId] = useState<number | null>(null)
42+
const currentBlockNumber = useCurrentRelayBlockNumber(relayApi)
43+
44+
if (!activeChain) {
45+
return (
46+
<Border className="h-full flex flex-row justify-center items-center">
47+
<WalletStatus />
48+
</Border>
49+
)
50+
}
51+
52+
const handleParaIdChange = (e: ChangeEvent<HTMLInputElement>) => {
53+
const value = e.target.value
54+
setParaId(value ? parseFloat(value) : null)
55+
}
56+
57+
const filteredParachains = parachains.filter((parachain) => {
58+
const matchesFilter = filter === 'all' || parachain.state === filter
59+
const matchesParaId = paraIdSET === null || parachain.paraId === paraIdSET
60+
return matchesFilter && matchesParaId
61+
})
62+
63+
return (
64+
<Border className="h-full flex flex-row justify-center items-center">
65+
<div className="h-full w-full flex flex-col justify-start items-start p-10">
66+
<h1 className="text-xl font-bold uppercase mb-5">Status of {filter} cores</h1>
67+
<div className="grid grid-cols-3 gap-10 items-start">
68+
<NumberField
69+
label="ParaId"
70+
value={paraIdSET !== null ? paraIdSET.toString() : ''}
71+
onChange={handleParaIdChange}
72+
className="mb-5"
73+
/>
74+
<div className="flex flex-wrap col-span-2 gap-3 mb-5">
75+
<button
76+
onClick={() => setFilter('all')}
77+
className={`px-4 py-2 rounded-full text-black dark:text-white ${filter === 'all' ? 'font-bold' : ''}`}
78+
title="Show all parachains"
79+
>
80+
All
81+
</button>
82+
{Object.entries(ParachainState).map(([stateKey, stateValue]) => (
83+
<button
84+
key={stateKey}
85+
onClick={() => setFilter(stateValue)}
86+
className={`px-4 py-2 rounded-full text-black ${statusColors[stateValue]} ${filter === stateValue ? 'font-bold' : ''}`}
87+
title={statusDescriptions[stateValue]}
88+
>
89+
{stateValue}
90+
</button>
91+
))}
92+
</div>
93+
</div>
94+
{filteredParachains.length > 0 ? (
95+
<div className="w-full overflow-x-auto">
96+
<GeneralTableWithButtons
97+
tableData={filteredParachains.map(({ paraId, state, network }, idx) => {
98+
const leaseEndBlock = network_list[network]?.paraId[paraId.toString()]?.lease
99+
const remainingBlocks =
100+
leaseEndBlock !== null && currentBlockNumber !== null
101+
? leaseEndBlock - currentBlockNumber
102+
: null
103+
return {
104+
data: [
105+
paraId.toString(),
106+
network_list[network]?.paraId[paraId.toString()]?.name,
107+
network_list[network]?.paraId[paraId.toString()]?.description,
108+
<span key={idx} className={`${statusColors[state]} px-4 py-1 rounded-full`}>
109+
{state}
110+
</span>,
111+
blocksToTimeFormat(remainingBlocks, 'RELAY'),
112+
],
113+
}
114+
})}
115+
tableHeader={[
116+
{ title: 'ParaId' },
117+
{ title: 'Name' },
118+
{ title: 'Description' },
119+
{ title: 'Status' },
120+
{ title: 'Lease Period' },
121+
]}
122+
colClass="grid-cols-5"
123+
/>
124+
</div>
125+
) : (
126+
<p>No data available.</p>
127+
)}
128+
</div>
129+
</Border>
130+
)
131+
}
132+
133+
export default ParaIdFetch

src/app/[network]/(App)/paraId/ParaIdRelay.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,7 @@ const ParaIdRelay = () => {
146146
data.parachain.toString(),
147147
)
148148
? network_list[network as PossibleNetworks].paraId[data.parachain.toString()]
149+
.name
149150
: null,
150151
data.head.toString(),
151152
data.para.toString(),

src/app/[network]/(App)/paraId/ParachainsSubscanInfo.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ const ParachainInfo: React.FC = () => {
7070
network_list[network as PossibleNetworks].paraId.hasOwnProperty(
7171
paraInfo.para_id.toString(),
7272
)
73-
? network_list[network as PossibleNetworks].paraId[paraInfo.para_id.toString()]
73+
? network_list[network as PossibleNetworks].paraId[paraInfo.para_id.toString()]?.name
7474
: null,
7575
paraInfo.status,
7676
toShortAddress(paraInfo.manager_display?.address),

src/app/[network]/(App)/paraId/page.tsx

Lines changed: 43 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,58 @@
11
'use client'
22

3-
import { useInkathon } from '@poppyseed/lastic-sdk'
4-
import SubTitle from '../samesections/SubTitle'
5-
import ParaIdFetch from './ParaIdFetch'
6-
import ParaIdRelay from './ParaIdRelay'
7-
import ParachainsSubscanInfo from './ParachainsSubscanInfo'
3+
import PrimaryButton from '@/components/button/PrimaryButton'
4+
import SecondaryButton from '@/components/button/SecondaryButton'
5+
import RegisterParaIDModal from '@/components/extrinsics/registrar/RegisterParaIDModal'
6+
import ReserveParaIDModal from '@/components/extrinsics/registrar/ReserveParaIDModal'
7+
import { useParachainInfo } from '@/hooks/useParachainInfo'
8+
import { getChainFromPath } from '@/utils/common/chainPath'
9+
import { usePathname } from 'next/navigation'
10+
import { useState } from 'react'
11+
import ParaIdFetch2 from './ParaIdFetch2'
812

913
const InstaCore = () => {
10-
const { activeRelayChain } = useInkathon()
14+
const pathname = usePathname()
15+
const network = getChainFromPath(pathname)
16+
const [isParaReserveOpen, setIsParaReserveOpen] = useState(false)
17+
const [isParaRegisterOpen, setIsParaRegisterOpen] = useState(false)
18+
19+
const { parachains, nextParaId, reservationCost, dataDepositPerByte, maxCodeSize } =
20+
useParachainInfo()
1121

1222
return (
1323
<>
14-
<SubTitle subtitle={`Para Id Execution on ${activeRelayChain?.name}`} />{' '}
1524
<section className="mx-auto max-w-9xl px-4 sm:px-6 lg:px-8 flex flex-col items-stretch mt-5">
25+
<div className="flex flex-row items-start justify-between m">
26+
<h2 className="font-unbounded uppercase font-bold py-2 px-5 text-xl md:text-1xl xl:text-2xl">
27+
Execution on {network}
28+
</h2>
29+
<div className="flex flex-row justify-center items-center">
30+
<PrimaryButton title="Create New ParaId" onClick={() => setIsParaReserveOpen(true)} />
31+
<SecondaryButton title="Register ParaId" onClick={() => setIsParaRegisterOpen(true)} />
32+
</div>
33+
</div>
34+
</section>
35+
<section className="mx-auto max-w-9xl px-4 sm:px-6 lg:px-8 flex flex-col items-stretch mt-5">
36+
<ParaIdFetch2 parachains={parachains} />
37+
</section>
38+
{/* <section className="mx-auto max-w-9xl px-4 sm:px-6 lg:px-8 flex flex-col items-stretch mt-5">
1639
<ParaIdFetch />
1740
</section>
18-
<ParachainsSubscanInfo />
1941
<section className="mx-auto max-w-9xl px-4 sm:px-6 lg:px-8 flex flex-col items-stretch mt-5">
2042
<ParaIdRelay />
21-
</section>
43+
</section> */}
44+
<ReserveParaIDModal
45+
isOpen={isParaReserveOpen}
46+
nextParaId={nextParaId}
47+
reservationCost={reservationCost}
48+
onClose={() => setIsParaReserveOpen(false)}
49+
/>
50+
<RegisterParaIDModal
51+
isOpen={isParaRegisterOpen}
52+
dataDepositPerByte={dataDepositPerByte}
53+
maxCodeSize={maxCodeSize}
54+
onClose={() => setIsParaRegisterOpen(false)}
55+
/>
2256
</>
2357
)
2458
}

src/app/[network]/(App)/renewal/RenewFetch.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import Border from '@/components/border/Border'
2-
import RenewModal from '@/components/broker/extrinsics/RenewModal'
32
import SecondaryButton from '@/components/button/SecondaryButton'
3+
import RenewModal from '@/components/extrinsics/broker/RenewModal'
44
import GeneralTable from '@/components/table/GeneralTable'
55
import WalletStatus from '@/components/walletStatus/WalletStatus'
66
import { PossibleNetworks, network_list } from '@/config/network'
@@ -146,7 +146,7 @@ const RenewalsData = () => {
146146
network_list[network as PossibleNetworks].paraId.hasOwnProperty(
147147
task ? task : '',
148148
)
149-
? network_list[network as PossibleNetworks].paraId[task]
149+
? network_list[network as PossibleNetworks].paraId[task].name
150150
: null,
151151
coreInfo[0].when,
152152
coreInfo[0].core,
File renamed without changes.

0 commit comments

Comments
 (0)