apply new ghost-connect features into lite version
Signed-off-by: Uncle Fatso <uncle.fatso@ghostchain.io>
This commit is contained in:
parent
a4203934d7
commit
3d15aff0ef
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "ghost-lite",
|
||||
"version": "0.3.0",
|
||||
"version": "0.4.0",
|
||||
"description": "Web application for Ghost and Casper chain.",
|
||||
"author": "Uncle f4ts0 <f4ts0@ghostchain.io>",
|
||||
"maintainers": [
|
||||
|
||||
@ -18,7 +18,7 @@ import {
|
||||
const chainData = [
|
||||
{
|
||||
label: "CASPER",
|
||||
value: "0x475e48fab52f3d0587b6b03101d224560c549e984d1dee197b7d8b55830e7da3",
|
||||
value: "0xcaf9c5ddccc7ba6f96149a6b8a81c26a3641742795cd5e7e0aee79bf3f4e77b7",
|
||||
chainSpec: casperDevelopment,
|
||||
}
|
||||
]
|
||||
|
||||
@ -11,14 +11,14 @@ export const chainSpec: string = `{
|
||||
"chainType": "Live",
|
||||
"forkBlocks": null,
|
||||
"genesis": {
|
||||
"stateRootHash": "0xfcb09113f5c18bb681bd0376bdb01a1d672030cf021ff24f017f9c90d6340669"
|
||||
"stateRootHash": "0xb4784a3c8f2f29ba3f191d563f1166f08f4e0337e114679c0f24ef77d06e10e4"
|
||||
},
|
||||
"id": "casper_staging_testnet",
|
||||
"lightSyncState": {
|
||||
"babeEpochChanges": "0x0486e94817613148af08d25b61d10de83b314aad94478565e9d5070ad5bf1384de181c00000164dc951100000000c4e59511000000000468c4943cf7c7ced2abbe900614a80a5e8a3029eca80186350ff93745379523007825000001c4e595110000000024ef951100000000047460d5a9745e7ac79c62165f29bfc35ca816684a91e0afe30464781ec663ffd3d82e00000124ef95110000000084f895110000000000000c68c4943cf7c7ced2abbe900614a80a5e8a3029eca80186350ff937453795230078250000010500000000000000c4e5951100000000600900000000000010daaaaab6a6e574099e24ae9bb75b543610edef9d374fa85a378edb573b47615f010000000000000074fa7381a7a74b316afb6793a00387eed9d95d46a69866cbb316b5d9c918af0e01000000000000006c4dd88b43e2011cf9a6a73d53446336ac9e04cdd4ca23587df63187ac455e4901000000000000003c944c704cae203619b9e7a5a4b6742736da6a8e76c762291bebdc7652cfec2f01000000000000000e662d4ad2b3bf5eb96ec0fade8662d2225d4717319580d1c4eb932e8bce917d01000000000000000400000000000000027460d5a9745e7ac79c62165f29bfc35ca816684a91e0afe30464781ec663ffd3d82e000001060000000000000024ef951100000000600900000000000028426ab855ba3d0eaade067c62f197989e13c28641948d018d657c13c139da9e450100000000000000daaaaab6a6e574099e24ae9bb75b543610edef9d374fa85a378edb573b47615f010000000000000074fa7381a7a74b316afb6793a00387eed9d95d46a69866cbb316b5d9c918af0e0100000000000000dee45a9f88b2829e831f26908a7769db5fd38e7c0fc0cfec3fd83cede451fc120100000000000000c66631a4b6220beb0ad83498ddd36b2cb53fc0e345edd50e6d40dcfc74cc6b7b01000000000000006c4dd88b43e2011cf9a6a73d53446336ac9e04cdd4ca23587df63187ac455e4901000000000000003c944c704cae203619b9e7a5a4b6742736da6a8e76c762291bebdc7652cfec2f01000000000000002c4d7c0e011f53f81f31a071f3d4c42f1e85ad60e50918bc841a5001b9763f4f01000000000000003a9afa87f78c79af14753c30851f66414604987dc5ba85dd568403e0963c927d01000000000000001e06092d5210b61cadd1118e3142ecafc4d53de4267c1d7ad8205d50e64c5d4601000000000000003584ab6c4870be3cb13b2b69b7569fd593d8354b202917d61a6f139f70187b24010000000000000004000000000000000286e94817613148af08d25b61d10de83b314aad94478565e9d5070ad5bf1384de181c000001040000000000000064dc951100000000600900000000000010daaaaab6a6e574099e24ae9bb75b543610edef9d374fa85a378edb573b47615f010000000000000074fa7381a7a74b316afb6793a00387eed9d95d46a69866cbb316b5d9c918af0e01000000000000006c4dd88b43e2011cf9a6a73d53446336ac9e04cdd4ca23587df63187ac455e4901000000000000003c944c704cae203619b9e7a5a4b6742736da6a8e76c762291bebdc7652cfec2f010000000000000005cfbdbd5ccbf25f2bc82b8488ef493b8ee1205d2d1e0b2a52689d8ed252c1470100000000000000040000000000000002",
|
||||
"babeFinalizedBlockWeight": 3115,
|
||||
"finalizedBlockHeader": "0x40ab762007d6e2d1dddb18a10073e637712b425bac09fe2d87e50373afa1fcb111bd1cd1b45c2547cc5123ca78564a1fe0bcaced95cf3e0c7cf305b7cb443e2c037d6a40040ac0406b97a19a74625c9a717e9a0a922e41d733a88e8ce860fce8e278080642414245b501030100000030e69511000000006279297ea7ba3278c5a8fcbd16a7fd02d14fa771983443ff8d1fc4d536c8684a00ac542d13f1b03c54f5c4e51f473d326bad1feae09b95a632aa87da9c491c0cae7d5981d364a093b341db9a0028af5540957f6a01b952d3c0ef18b52c2f490d054241424501016e1a35643f1fe6e1f08e8ef0b2165368d2ae2a576a0bb10584c58a27005e2c5b5ef4d86c1f2dd98ac498c8cb3b314def9e72aaaf1b446c36f345339091a76487",
|
||||
"grandpaAuthoritySet": "0x1055446f9a7aa99ced06b317c80ce90d56b84e56526775683af2525969e8da0b640100000000000000236d2fa03f4ed8cb65de7e514d7540159b328f1c170dd402b094ad7fbf54721801000000000000008f9ea20bf4a807a8e710f7559dece86e94672b5b361de157bdaa5c1f37849f8d01000000000000000aa3a88f6b777c95c3dfe7e997b76798413f16aa325f34824cae0c9102b281d5010000000000000000000000000000000001442f00000000"
|
||||
"babeEpochChanges": "0x042c315b655c7144df4bfdc41837eeacb84d80aee06eaba51f6941a0c7a26cb1bf5d090000015e9de408000000000ea2e40800000000049b2e88b8ce43a677c1ca90f62134800b7e510c0c353dad719cad82faf6136cfb0d0e0000010ea2e40800000000bea6e408000000000000082c315b655c7144df4bfdc41837eeacb84d80aee06eaba51f6941a0c7a26cb1bf5d0900000103000000000000005e9de40800000000b00400000000000014daaaaab6a6e574099e24ae9bb75b543610edef9d374fa85a378edb573b47615f010000000000000074fa7381a7a74b316afb6793a00387eed9d95d46a69866cbb316b5d9c918af0e0100000000000000e0f0a776ecc9fa5e1f22e2fa001fe3fba5aea52b9444bc894b45589d4213247501000000000000006c4dd88b43e2011cf9a6a73d53446336ac9e04cdd4ca23587df63187ac455e4901000000000000003c944c704cae203619b9e7a5a4b6742736da6a8e76c762291bebdc7652cfec2f01000000000000002ff7c765405e9c11a59525a08173bb1fa59e5e281090f8e4d1824469f513d0cc01000000000000000400000000000000029b2e88b8ce43a677c1ca90f62134800b7e510c0c353dad719cad82faf6136cfb0d0e00000104000000000000000ea2e40800000000b00400000000000014daaaaab6a6e574099e24ae9bb75b543610edef9d374fa85a378edb573b47615f010000000000000074fa7381a7a74b316afb6793a00387eed9d95d46a69866cbb316b5d9c918af0e0100000000000000e0f0a776ecc9fa5e1f22e2fa001fe3fba5aea52b9444bc894b45589d4213247501000000000000006c4dd88b43e2011cf9a6a73d53446336ac9e04cdd4ca23587df63187ac455e4901000000000000003c944c704cae203619b9e7a5a4b6742736da6a8e76c762291bebdc7652cfec2f0100000000000000dea465ff8bf16938cc9ead89bf9fdb5d9c495fad61fd952b2067ebdc51c4e1c10100000000000000040000000000000002",
|
||||
"babeFinalizedBlockWeight": 1039,
|
||||
"finalizedBlockHeader": "0x6ed6c2debc2e5fd4e7db0d14426d1b904e6c101f2c62a71b8e891c217ba79079f9433280c0257a860f793833bd6bed6b9f86094400aa8e5ea24a81752f0f046ff5ed560f7231760c622ae35d3968fbab033ed34d950b57a7937ae45c411d1d384748080642414245b50103000000004fa0e40800000000a2c7d71b4e1f94c0208c9730ab93955b08c8d7ac86d2fc6ec5f62cc3272a5f1ec0e28c798461372109ee3e12f03ff66ea5ad9cac5b1c37d7280d2333d0226f0865ea77a801bad79785a8ca83c87f0dbf1e36936a6f65cd7b125a41c52f38f80105424142450101caaa6fe5f9df57930e2ac08aef43b75d5477d410c73c3a8e6dea9d5503b9fd25eae1d12b6604194389e22f3f4265d581eb162d1dc5a9034247fe33765dddbe8c",
|
||||
"grandpaAuthoritySet": "0x1455446f9a7aa99ced06b317c80ce90d56b84e56526775683af2525969e8da0b640100000000000000236d2fa03f4ed8cb65de7e514d7540159b328f1c170dd402b094ad7fbf5472180100000000000000b63c5a0cf342b9b04931bc8ed74d7d0165ab99ab5f8a4514797d4b299a4501fe01000000000000008f9ea20bf4a807a8e710f7559dece86e94672b5b361de157bdaa5c1f37849f8d01000000000000000aa3a88f6b777c95c3dfe7e997b76798413f16aa325f34824cae0c9102b281d5010000000000000000000000000000000001fe1000000000"
|
||||
},
|
||||
"name": "Casper Staging Testnet",
|
||||
"properties": {
|
||||
|
||||
@ -1,15 +1,5 @@
|
||||
import React from "react"
|
||||
|
||||
import { Unstable } from "@substrate/connect-discovery"
|
||||
|
||||
import {
|
||||
Select,
|
||||
SelectValue,
|
||||
SelectTrigger,
|
||||
SelectContent,
|
||||
SelectGroup,
|
||||
SelectItem,
|
||||
} from "../components/ui/select"
|
||||
import {
|
||||
Accordion,
|
||||
AccordionContent,
|
||||
@ -23,57 +13,31 @@ import { Row } from "./Row"
|
||||
|
||||
interface SenderProps {
|
||||
account: string
|
||||
accounts: string[]
|
||||
senderAccount: SystemAccountStorage | undefined
|
||||
senderBalance: string
|
||||
tokenDecimals: number
|
||||
tokenSymbol: string
|
||||
connectAccount: (account: Unstable.Account) => void
|
||||
applyDecimals: (value: bigint, decimals: number, tokenSymbol: string) => string
|
||||
}
|
||||
|
||||
export const Sender: React.FC<SenderProps> = ({
|
||||
account,
|
||||
accounts,
|
||||
senderAccount,
|
||||
senderBalance,
|
||||
tokenDecimals,
|
||||
tokenSymbol,
|
||||
connectAccount,
|
||||
applyDecimals
|
||||
}) => {
|
||||
return (
|
||||
<>
|
||||
<Row title="Account" element={<Select
|
||||
<Row title="Account" element={<Input
|
||||
disabled
|
||||
value={account}
|
||||
disabled={!accounts || accounts.length === 0}
|
||||
onValueChange={(address) => {
|
||||
try {
|
||||
const unstableAccount: Unstable.Account = { address }
|
||||
connectAccount(unstableAccount)
|
||||
} catch (e) {
|
||||
console.log(e)
|
||||
}
|
||||
}}
|
||||
>
|
||||
<SelectTrigger
|
||||
className={"text-muted-foreground sm:w-[300px] w-full"}
|
||||
data-testid="chain-select"
|
||||
>
|
||||
<SelectValue placeholder="Select Account" />
|
||||
</SelectTrigger>
|
||||
<SelectContent>
|
||||
<SelectGroup>
|
||||
{accounts?.map((address, index) => (
|
||||
<SelectItem
|
||||
key={index}
|
||||
data-testid={`address-${address}`}
|
||||
value={address}>{address.slice(0, 10)}...{address.slice(-10)}
|
||||
</SelectItem>
|
||||
))}
|
||||
</SelectGroup>
|
||||
</SelectContent>
|
||||
</Select>} />
|
||||
aria-label="Transfer Sender"
|
||||
type="text"
|
||||
className="sm:w-[300px] w-full"
|
||||
placeholder="Waiting for acitve account address"
|
||||
/>} />
|
||||
<Row title="Balance" element={<Input
|
||||
readOnly
|
||||
aria-label="Account Balance"
|
||||
|
||||
@ -198,7 +198,7 @@ export const Nominations = () => {
|
||||
handleTransaction,
|
||||
renderStatus,
|
||||
} = useTransactionStatusProvider()
|
||||
const { account, accounts, connectAccount } = useUnstableProvider()
|
||||
const { account } = useUnstableProvider()
|
||||
|
||||
const chainSpecV1 = useChainSpecV1()
|
||||
const eraIndex = useEraIndex()
|
||||
@ -373,12 +373,10 @@ export const Nominations = () => {
|
||||
<hr />
|
||||
<Sender
|
||||
account={account?.address ?? ""}
|
||||
accounts={accounts?.map(acc => acc?.address ?? "") ?? []}
|
||||
senderAccount={senderAccount}
|
||||
senderBalance={applyDecimals(senderAccount?.data.free ?? 0n, tokenDecimals, tokenSymbol)}
|
||||
tokenDecimals={tokenDecimals}
|
||||
tokenSymbol={tokenSymbol}
|
||||
connectAccount={connectAccount}
|
||||
applyDecimals={applyDecimals}
|
||||
/>
|
||||
{ledger && ledger.total > 0n && (<Accordion type="multiple" className="w-full flex flex-col gap-4 mb-4">
|
||||
|
||||
@ -90,11 +90,7 @@ export const Transactions = () => {
|
||||
return `${days} days, ${hours} hours, ${minutes} minutes, ${seconds} seconds`
|
||||
}
|
||||
|
||||
const {
|
||||
account,
|
||||
accounts,
|
||||
connectAccount
|
||||
} = useUnstableProvider()
|
||||
const { account } = useUnstableProvider()
|
||||
|
||||
const receiverObject = useMemo(() => {
|
||||
try {
|
||||
@ -242,12 +238,10 @@ export const Transactions = () => {
|
||||
<>
|
||||
<Sender
|
||||
account={account?.address ?? ""}
|
||||
accounts={accounts?.map(acc => acc?.address ?? "") ?? []}
|
||||
senderAccount={senderAccount}
|
||||
senderBalance={applyDecimals(senderAccount?.data.free ?? 0n, tokenDecimals, tokenSymbol)}
|
||||
tokenDecimals={tokenDecimals}
|
||||
tokenSymbol={tokenSymbol}
|
||||
connectAccount={connectAccount}
|
||||
applyDecimals={applyDecimals}
|
||||
/>
|
||||
<Receiver
|
||||
|
||||
@ -5,15 +5,16 @@ import { getObservableClient, ObservableClient } from "@polkadot-api/observable-
|
||||
import { createClient as createFullClient } from "polkadot-api"
|
||||
import useSWR from "swr"
|
||||
|
||||
type ExtendedProvider = Unstable.Provider & {
|
||||
getAccount: (chainId: string) => Promise<any>;
|
||||
}
|
||||
|
||||
type Context = {
|
||||
providerDetails?: Unstable.SubstrateConnectProviderDetail[]
|
||||
providerDetail?: Unstable.SubstrateConnectProviderDetail
|
||||
connectProviderDetail(detail: Unstable.SubstrateConnectProviderDetail): void
|
||||
disconnectProviderDetail(): void
|
||||
accounts?: Unstable.Account[]
|
||||
account?: Unstable.Account
|
||||
connectAccount(account: Unstable.Account): void
|
||||
disconnectAccount(): void
|
||||
provider?: Unstable.Provider
|
||||
chainId: string
|
||||
setChainId: (chainId: string) => void
|
||||
@ -45,9 +46,13 @@ export const UnstableProviderProvider = ({
|
||||
)
|
||||
|
||||
const [chainId, setChainId_] = useState(defaultChainId)
|
||||
const { data: accounts } = useSWR(
|
||||
() => `providerDetail.${providerDetail!.info.uuid}.provider.getAccounts(${chainId})`,
|
||||
async () => (await providerDetail!.provider).getAccounts(chainId),
|
||||
const { data: account } = useSWR(
|
||||
() => `providerDetail.${providerDetail!.info.uuid}.provider.getAccount(${chainId})`,
|
||||
async () => {
|
||||
const resProvider = await providerDetail!.provider;
|
||||
return (resProvider as ExtendedProvider).getAccount(chainId);
|
||||
},
|
||||
|
||||
)
|
||||
|
||||
const client = useMemo(() => {
|
||||
@ -72,15 +77,11 @@ export const UnstableProviderProvider = ({
|
||||
return observableClient ? observableClient.chainHead$() : undefined
|
||||
}, [observableClient])
|
||||
|
||||
const [account, setAccount] = useState<Unstable.Account>()
|
||||
const disconnectAccount = () => setAccount(undefined)
|
||||
const disconnectProviderDetail = () => {
|
||||
disconnectAccount()
|
||||
setProviderDetail(undefined)
|
||||
}
|
||||
const setChainId = (chainId: string) => {
|
||||
setChainId_(chainId)
|
||||
disconnectAccount()
|
||||
}
|
||||
|
||||
return (
|
||||
@ -90,10 +91,7 @@ export const UnstableProviderProvider = ({
|
||||
providerDetail,
|
||||
connectProviderDetail: setProviderDetail,
|
||||
disconnectProviderDetail,
|
||||
accounts,
|
||||
account,
|
||||
connectAccount: setAccount,
|
||||
disconnectAccount,
|
||||
provider,
|
||||
chainId,
|
||||
setChainId,
|
||||
|
||||
@ -1 +1 @@
|
||||
export const DEFAULT_CHAIN_ID = "0x475e48fab52f3d0587b6b03101d224560c549e984d1dee197b7d8b55830e7da3"
|
||||
export const DEFAULT_CHAIN_ID = "0xcaf9c5ddccc7ba6f96149a6b8a81c26a3641742795cd5e7e0aee79bf3f4e77b7"
|
||||
|
||||
Loading…
Reference in New Issue
Block a user