@xyo-network/react-chain-blockchain 1.0.9 → 1.0.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -67,7 +67,7 @@ import { createContextEx as createContextEx2 } from "@xyo-network/react-shared";
67
67
  var ChainInfoContext = createContextEx2();
68
68
 
69
69
  // src/context/chain/Provider.tsx
70
- import React2, { useEffect, useMemo as useMemo2, useState as useState2 } from "react";
70
+ import React2, { useMemo as useMemo2, useState as useState2 } from "react";
71
71
  var ChainInfoProvider = /* @__PURE__ */ __name(({ children, chainArchivist: chainArchivistProp, chainInformation: chainInformationProp, chainIterator: chainIteratorProp }) => {
72
72
  const [chainArchivist, setChainArchivist] = useState2(chainArchivistProp);
73
73
  const [chainInformation, setChainInformation] = useState2(chainInformationProp);
@@ -81,17 +81,17 @@ var ChainInfoProvider = /* @__PURE__ */ __name(({ children, chainArchivist: chai
81
81
  const updateChainIterator = /* @__PURE__ */ __name((chainIterator2) => {
82
82
  setChainIterator(chainIterator2);
83
83
  }, "updateChainIterator");
84
- useEffect(() => {
84
+ useMemo2(() => {
85
85
  updateChainArchivist(chainArchivistProp);
86
86
  }, [
87
87
  chainArchivistProp
88
88
  ]);
89
- useEffect(() => {
89
+ useMemo2(() => {
90
90
  updateChainInformation(chainInformationProp);
91
91
  }, [
92
92
  chainInformationProp
93
93
  ]);
94
- useEffect(() => {
94
+ useMemo2(() => {
95
95
  updateChainIterator(chainIteratorProp);
96
96
  }, [
97
97
  chainIteratorProp
@@ -1112,11 +1112,11 @@ var TransactionsDialog = /* @__PURE__ */ __name((props) => {
1112
1112
  }, "TransactionsDialog");
1113
1113
 
1114
1114
  // src/components/chain/hooks/useOnBlock.ts
1115
- import { useEffect as useEffect2, useRef as useRef2 } from "react";
1115
+ import { useEffect, useRef as useRef2 } from "react";
1116
1116
  var useOnBlock = /* @__PURE__ */ __name((initialHeadNumber, onAddBlock, liveHead, pollingState) => {
1117
1117
  const blocksWhilePaused = useRef2([]);
1118
1118
  const lastLiveHead = useRef2(liveHead);
1119
- useEffect2(() => {
1119
+ useEffect(() => {
1120
1120
  if (lastLiveHead.current?.block === liveHead?.block) return;
1121
1121
  if (liveHead && onAddBlock) {
1122
1122
  lastLiveHead.current = liveHead;
@@ -1314,15 +1314,15 @@ var useChainIteratorParams = /* @__PURE__ */ __name(({ chainArchivist, chainInfo
1314
1314
 
1315
1315
  // src/hooks/chain-iterator/useChainIteratorStore.ts
1316
1316
  import { usePromise as usePromise4 } from "@xylabs/react-promise";
1317
- import { useEffect as useEffect4, useMemo as useMemo11, useRef as useRef3, useSyncExternalStore } from "react";
1317
+ import { useEffect as useEffect3, useMemo as useMemo11, useRef as useRef3, useSyncExternalStore } from "react";
1318
1318
 
1319
1319
  // src/hooks/chain-iterator/useChainIteratorUpdatingHead.ts
1320
1320
  import { toHex } from "@xylabs/hex";
1321
1321
  import { findMostRecentBlock } from "@xyo-network/chain-protocol";
1322
- import { useEffect as useEffect3, useState as useState12 } from "react";
1322
+ import { useEffect as useEffect2, useState as useState12 } from "react";
1323
1323
  var useChainIteratorUpdatingHead = /* @__PURE__ */ __name(({ chainIterator, interval = 500, maxBlocks, chainArchivist }) => {
1324
1324
  const [error, setError] = useState12();
1325
- useEffect3(() => {
1325
+ useEffect2(() => {
1326
1326
  let pollArchivistTimeout;
1327
1327
  const pollingFunction = /* @__PURE__ */ __name(async () => {
1328
1328
  if (chainIterator && chainArchivist) {
@@ -1371,7 +1371,7 @@ var useChainIteratorStore = /* @__PURE__ */ __name((chainIteratorParams) => {
1371
1371
  chainIterator,
1372
1372
  chainArchivist
1373
1373
  });
1374
- useEffect4(() => {
1374
+ useEffect3(() => {
1375
1375
  return () => {
1376
1376
  if (chainIteratorStore) {
1377
1377
  chainIteratorStore.cleanup();
@@ -1719,11 +1719,11 @@ var BlockNumberTextField = /* @__PURE__ */ __name(({ errorMessage, onBlockNumber
1719
1719
  // src/components/payload/fields/XyoAddressTextField.tsx
1720
1720
  import { FormControl as FormControl4, FormHelperText as FormHelperText3, TextField as TextField4 } from "@mui/material";
1721
1721
  import { asAddress } from "@xylabs/hex";
1722
- import React34, { useEffect as useEffect5, useState as useState15 } from "react";
1722
+ import React34, { useEffect as useEffect4, useState as useState15 } from "react";
1723
1723
  var XyoAddressTextField = /* @__PURE__ */ __name(({ onAddressChanged, onChange, resetValue, ...props }) => {
1724
1724
  const [address, setAddress] = useState15("");
1725
1725
  const [addressError, setAddressError] = useState15();
1726
- useEffect5(() => setAddress(""), [
1726
+ useEffect4(() => setAddress(""), [
1727
1727
  resetValue
1728
1728
  ]);
1729
1729
  const handleChange = /* @__PURE__ */ __name((event) => {
@@ -1831,7 +1831,7 @@ import { FormControl as FormControl6, Icon as Icon3, IconButton as IconButton5 }
1831
1831
  import { toHex as toHex2 } from "@xylabs/hex";
1832
1832
  import { FlexRow as FlexRow7 } from "@xylabs/react-flexbox";
1833
1833
  import { BigIntInput } from "@xyo-network/react-shared";
1834
- import React36, { useEffect as useEffect6, useMemo as useMemo18, useState as useState17 } from "react";
1834
+ import React36, { useEffect as useEffect5, useMemo as useMemo18, useState as useState17 } from "react";
1835
1835
  var SingleTransferBuilderFlexbox = /* @__PURE__ */ __name(({ onTransferUpdated, onRemoveTransfer, singleTransfer, ...props }) => {
1836
1836
  const [toAddress, setToAddress] = useState17();
1837
1837
  const [amount, setAmount] = useState17();
@@ -1847,7 +1847,7 @@ var SingleTransferBuilderFlexbox = /* @__PURE__ */ __name(({ onTransferUpdated,
1847
1847
  toAddress,
1848
1848
  amount
1849
1849
  ]);
1850
- useEffect6(() => {
1850
+ useEffect5(() => {
1851
1851
  if (transferAmount) onTransferUpdated?.(transferAmount);
1852
1852
  }, [
1853
1853
  transferAmount
@@ -1979,7 +1979,7 @@ import { usePromise as usePromise7 } from "@xylabs/react-promise";
1979
1979
  import { MemoryArchivist } from "@xyo-network/archivist-memory";
1980
1980
  import { ArchivistConfigSchema } from "@xyo-network/archivist-model";
1981
1981
  import { isBlockBoundWitness as isBlockBoundWitness4 } from "@xyo-network/chain-model";
1982
- import React39, { useEffect as useEffect7 } from "react";
1982
+ import React39, { useEffect as useEffect6 } from "react";
1983
1983
  var ChainArchivistDecorator = /* @__PURE__ */ __name((Story, context) => {
1984
1984
  const [randomBlockChain] = usePromise7(async () => await buildRandomBlockChain(), []);
1985
1985
  const [blockChainRenderProps, blockChainRenderPropsError] = usePromise7(async () => {
@@ -2000,7 +2000,7 @@ var ChainArchivistDecorator = /* @__PURE__ */ __name((Story, context) => {
2000
2000
  }, [
2001
2001
  randomBlockChain
2002
2002
  ]);
2003
- useEffect7(() => {
2003
+ useEffect6(() => {
2004
2004
  if (blockChainRenderPropsError) {
2005
2005
  console.error(blockChainRenderPropsError);
2006
2006
  }
@@ -2028,7 +2028,7 @@ import { usePromise as usePromise8 } from "@xylabs/react-promise";
2028
2028
  import { MemoryArchivist as MemoryArchivist2 } from "@xyo-network/archivist-memory";
2029
2029
  import { ArchivistConfigSchema as ArchivistConfigSchema2 } from "@xyo-network/archivist-model";
2030
2030
  import { isBlockBoundWitness as isBlockBoundWitness5 } from "@xyo-network/chain-model";
2031
- import React40, { useEffect as useEffect8, useState as useState19 } from "react";
2031
+ import React40, { useEffect as useEffect7, useState as useState19 } from "react";
2032
2032
  var chainArchivistRef;
2033
2033
  var ChainArchivistDelayedInsertDecorator = /* @__PURE__ */ __name((Story, context) => {
2034
2034
  const [firstBlock, setFirstBlock] = useState19();
@@ -2065,7 +2065,7 @@ var ChainArchivistDelayedInsertDecorator = /* @__PURE__ */ __name((Story, contex
2065
2065
  chainArchivist,
2066
2066
  randomBlockChain
2067
2067
  ]);
2068
- useEffect8(() => {
2068
+ useEffect7(() => {
2069
2069
  if (delayedInsertError) {
2070
2070
  console.error(delayedInsertError);
2071
2071
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components/block/BlockHeadingFlexbox.tsx","../../src/context/analyzer/context.ts","../../src/context/analyzer/Provider.tsx","../../src/context/analyzer/use.ts","../../src/context/chain/Context.ts","../../src/context/chain/Provider.tsx","../../src/context/polling/context.ts","../../src/context/polling/Provider.tsx","../../src/context/polling/use.ts","../../src/components/transactions/submit/Builder.tsx","../../src/components/transactions/submit/Network.tsx","../../src/components/transactions/submit/SubmitChain.tsx","../../src/components/transactions/TransactionCountChip.tsx","../../src/components/transactions/TransactionsQuickTipButton.tsx","../../src/components/block/hooks/useAnchorElement.ts","../../src/components/block/hooks/useBlockHeadingEvents.ts","../../src/components/block/hooks/useBlockProducer.ts","../../src/components/block/hooks/useDynamicBlockComponents.ts","../../src/components/block/helpers/blockProducer.ts","../../src/components/block/helpers/buildBlockChainRenderComponent.tsx","../../src/components/block/helpers/tsxFromBlock.ts","../../src/components/block/hooks/useStaticBlockComponents.ts","../../src/components/block/hooks/useTxsFromBlock.ts","../../src/components/block/LinkedDivider.tsx","../../src/components/block/menu/Expanded.tsx","../../src/components/block/ProducerChip.tsx","../../src/components/block/table/cell/BlockNumber.tsx","../../src/components/block/table/cell/hooks/useLinkedBlockItem.tsx","../../src/components/block/table/cell/Hash.tsx","../../src/components/block/table/cell/JsonView.tsx","../../src/components/block/table/cell/Producer.tsx","../../src/components/block/table/cell/TransactionCount.tsx","../../src/components/block/table/cell/Verification.tsx","../../src/components/block/table/Ex.tsx","../../src/components/block/table/row/TableRow.tsx","../../src/components/chain/controls/PollingControlsFlexbox.tsx","../../src/components/chain/stats/Dialog.tsx","../../src/components/chain/stats/producer/ProducerFlexbox.tsx","../../src/components/chain/stats/producer/Table.tsx","../../src/components/chain/controls/PulseSvgIcon.tsx","../../src/components/chain/dialog/Dialog.tsx","../../src/components/chain/hooks/useOnBlock.ts","../../src/components/chain/pagination/BlockChainPagination.tsx","../../src/components/chain/pagination/hooks/usePagination.tsx","../../src/components/chain/render/dynamic/flexbox/Flexbox.tsx","../../src/components/chain/list/Animated.tsx","../../src/components/chain/styled/BlockListWrapperFlexbox.tsx","../../src/components/chain/render/dynamic/hooks/useDynamicBlockRenderComponents.ts","../../src/hooks/chain-iterator/ChainIteratorStore.ts","../../src/hooks/chain-iterator/useChainIteratorParams.ts","../../src/hooks/chain-iterator/useChainIteratorStore.ts","../../src/hooks/chain-iterator/useChainIteratorUpdatingHead.ts","../../src/hooks/useIterateChain.ts","../../src/components/chain/render/dynamic/hooks/useRemoteBlockChainRenderProps.ts","../../src/lib/getChainArchivist.ts","../../src/lib/getChainInformation.ts","../../src/components/chain/render/static/flexbox/Flexbox.tsx","../../src/components/chain/render/static/hooks/useStaticBlockRenderComponents.ts","../../src/components/payload/builder/Flexbox.tsx","../../src/components/payload/builder/producer-intent/Form.tsx","../../src/components/payload/fields/BlockNumberTextField.tsx","../../src/components/payload/fields/XyoAddressTextField.tsx","../../src/components/payload/builder/transfer/Flexbox.tsx","../../src/components/payload/builder/transfer/Form.tsx","../../src/components/payload/builder/transfer/builder/SingleFlexbox.tsx","../../src/stories/buildRandomBlockchain.ts","../../src/stories/ChainArchivistDecorator.tsx","../../src/stories/ChainArchivistDelayedInsertDecorator.tsx","../../src/stories/ChainInfoContextDecorator.tsx"],"sourcesContent":["import type { Hash } from '@xylabs/hex'\nimport { FlexCol, FlexRow } from '@xylabs/react-flexbox'\nimport { BWVerification, HashHeadingPaper } from '@xyo-network/react-chain-boundwitness'\nimport { usePayloadHash } from '@xyo-network/react-shared'\nimport React from 'react'\n\nimport { useChainPollingContext } from '../../context/index.ts'\nimport type { BlockComponentWithTxsProps } from '../../types/index.ts'\nimport { TransactionCountChip } from '../transactions/index.ts'\nimport { useBlockHeadingEvents } from './hooks/index.ts'\nimport { LinkedDivider } from './LinkedDivider.tsx'\nimport { BlockMenuExpanded } from './menu/index.ts'\nimport { BlockProducerChip } from './ProducerChip.tsx'\n\nexport const BlockHeadingFlexbox: React.FC<BlockComponentWithTxsProps> = ({\n block, defaultExpanded, transactions,\n}) => {\n const hash = usePayloadHash(block)\n const [blockHeadingRef, blockHeadingListener] = useBlockHeadingEvents<HTMLDivElement>()\n const { pollingState } = useChainPollingContext()\n const expanded = (pollingState === 'paused') || defaultExpanded\n\n const handleTransactionCountClick = (event: React.MouseEvent, transactions: Hash[]) => {\n event.stopPropagation()\n blockHeadingListener('transaction-count', 'click', JSON.stringify(transactions))\n }\n\n return (\n <FlexCol className=\"block-heading-flexbox\" alignItems=\"stretch\" ref={blockHeadingRef} onClick={() => blockHeadingListener('block-hash', 'click', hash)}>\n <LinkedDivider />\n <HashHeadingPaper\n hash={hash}\n heading={block?.block === undefined ? '' : block.block.toString()}\n paperProps={{ sx: { p: 1, width: '100%' } }}\n AdornmentEnd={(\n <FlexRow gap={1}>\n <BlockProducerChip block={block} />\n <TransactionCountChip\n onClick={e => handleTransactionCountClick(e, transactions ?? [])}\n transactions={transactions}\n />\n <BWVerification iconColors boundwitness={block} />\n <span style={{\n // maxWidth is required for css animation to work and 28px is the width of the icon button\n display: 'flex', transition: 'max-width .5s', maxWidth: expanded ? '28px' : 0,\n }}\n >\n <BlockMenuExpanded block={block} />\n </span>\n </FlexRow>\n )}\n identiconProps={{ p: 0.75, size: 18 }}\n />\n </FlexCol>\n )\n}\n","import { createContextEx } from '@xyo-network/react-shared'\n\nimport type { ChainAnalyzersState } from './state.ts'\n\nexport const ChainAnalyzersContext = createContextEx<ChainAnalyzersState>()\n","import type { ReadArchivist } from '@xyo-network/archivist-model'\nimport type { BlockBoundWitness } from '@xyo-network/chain-model'\nimport { hydrateBlock } from '@xyo-network/chain-protocol'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { PropsWithChildren } from 'react'\nimport React, {\n useCallback, useMemo, useState,\n} from 'react'\n\nimport { ChainAnalyzersContext } from './context.ts'\nimport type { ChainAnalyzers, ChainAnalyzersState } from './state.ts'\n\nexport interface ChainAnalyzersProviderProps extends PropsWithChildren {\n analyzers?: ChainAnalyzers\n}\n\nexport const ChainAnalyzersProvider: React.FC<ChainAnalyzersProviderProps> = ({ analyzers: analyzersProp, children }) => {\n const [analyzersState, setAnalyzersState] = useState<ChainAnalyzers>(analyzersProp ?? {} as ChainAnalyzers)\n const [statsUpdated, setStatsUpdated] = useState(Date.now())\n\n const analyzers = useMemo(() => ({ ...analyzersProp, ...analyzersState }), [analyzersProp])\n\n const addAnalyzers: ChainAnalyzersState['addAnalyzers'] = useCallback((analyzers: ChainAnalyzersState['analyzers']) => {\n if (!analyzers) return\n setAnalyzersState(prev => ({ ...prev, ...analyzers }))\n }, [])\n\n const onBlock = useCallback(async (chainArchivist: ReadArchivist, block: BlockBoundWitness) => {\n const hash = await PayloadBuilder.hash(block)\n const hydratedBlock = await hydrateBlock(chainArchivist, hash)\n\n for (const analyzer of Object.values(analyzers)) {\n void analyzer.onBlock(hydratedBlock)\n setStatsUpdated(Date.now())\n }\n }, [analyzers])\n\n const value = useMemo(() => ({\n analyzers, addAnalyzers, onBlock, statsUpdated, provided: true,\n }), [analyzers, addAnalyzers, onBlock, statsUpdated])\n\n return (\n <ChainAnalyzersContext value={value}>{children}</ChainAnalyzersContext>\n )\n}\n","import { useContextEx } from '@xyo-network/react-shared'\n\nimport { ChainAnalyzersContext } from './context.ts'\nimport type { ChainAnalyzersState } from './state.ts'\n\nexport const useChainAnalyzersContext = (required = false) => useContextEx<ChainAnalyzersState>(ChainAnalyzersContext, 'ChainAnalyzers', required)\n","import { createContextEx } from '@xyo-network/react-shared'\n\nimport type { ChainInfoState } from './State.ts'\n\nexport const ChainInfoContext = createContextEx<ChainInfoState>()\n","import type { PropsWithChildren } from 'react'\nimport React, {\n useEffect, useMemo, useState,\n} from 'react'\n\nimport { ChainInfoContext } from './Context.ts'\nimport type { ChainInfoState } from './State.ts'\n\ninterface ChainInfoProviderProps extends PropsWithChildren, Omit<ChainInfoState, 'provided'> {\n}\n\nexport const ChainInfoProvider: React.FC<ChainInfoProviderProps> = ({\n children, chainArchivist: chainArchivistProp, chainInformation: chainInformationProp, chainIterator: chainIteratorProp,\n}) => {\n const [chainArchivist, setChainArchivist] = useState<ChainInfoState['chainArchivist']>(chainArchivistProp)\n const [chainInformation, setChainInformation] = useState<ChainInfoState['chainInformation']>(chainInformationProp)\n const [chainIterator, setChainIterator] = useState<ChainInfoState['chainIterator']>(chainIteratorProp)\n\n const updateChainArchivist = (chainArchivist: ChainInfoState['chainArchivist']) => {\n setChainArchivist(chainArchivist)\n }\n const updateChainInformation = (chainInformation: ChainInfoState['chainInformation']) => {\n setChainInformation(chainInformation)\n }\n const updateChainIterator = (chainIterator: ChainInfoState['chainIterator']) => {\n setChainIterator(chainIterator)\n }\n\n useEffect(() => {\n updateChainArchivist(chainArchivistProp)\n }, [chainArchivistProp])\n\n useEffect(() => {\n updateChainInformation(chainInformationProp)\n }, [chainInformationProp])\n\n useEffect(() => {\n updateChainIterator(chainIteratorProp)\n }, [chainIteratorProp])\n\n const chainState = useMemo(() => ({\n chainArchivist,\n chainInformation,\n chainIterator,\n updateChainArchivist,\n updateChainInformation,\n updateChainIterator,\n provided: true,\n }), [chainArchivist, chainInformation, chainIterator, updateChainArchivist, updateChainInformation, updateChainIterator])\n\n return (\n <ChainInfoContext value={chainState}>\n {children}\n </ChainInfoContext>\n )\n}\n","import { createContextEx } from '@xyo-network/react-shared'\n\nimport type { ChainPollingState } from './state.ts'\n\nexport const ChainPollingContext = createContextEx<ChainPollingState>()\n","import type { PropsWithChildren } from 'react'\nimport React, {\n useCallback, useMemo, useState,\n} from 'react'\n\nimport { ChainPollingContext } from './context.ts'\nimport type { ChainPollingState, PollingState } from './state.ts'\n\nexport interface ChainPollingProviderProps extends PropsWithChildren {\n pollingState?: PollingState\n}\n\nexport const ChainPollingProvider: React.FC<ChainPollingProviderProps> = ({ children, pollingState: pollingStateProp = 'running' }) => {\n const [pollingState, setPollingState] = useState<PollingState>(pollingStateProp)\n\n const updatePollingState = useCallback((newPollingState: PollingState) => {\n setPollingState(newPollingState)\n }, [])\n\n const value = useMemo<ChainPollingState>(() => ({\n pollingState,\n provided: true,\n updatePollingState,\n }), [pollingState, updatePollingState])\n\n return <ChainPollingContext value={value}>{children}</ChainPollingContext>\n}\n","import { useContextEx } from '@xyo-network/react-shared'\n\nimport { ChainPollingContext } from './context.ts'\n\nexport const useChainPollingContext = (required = false) => useContextEx(ChainPollingContext, 'ChainPolling', required)\n","import {\n Button, FormControl, TextField,\n} from '@mui/material'\nimport type { Address, Hex } from '@xylabs/hex'\nimport { FlexCol } from '@xylabs/react-flexbox'\nimport type { TransactionBoundWitnessFields } from '@xyo-network/chain-model'\nimport React from 'react'\n\nexport interface ChainTransactionBuilder {\n onSubmitTx?: (chainTx: TransactionBoundWitnessFields) => Promise<void>\n}\n\nexport const ChainTransactionBuilder: React.FC<ChainTransactionBuilder> = ({ onSubmitTx }) => {\n const handleSubmit = async (event: React.FormEvent<HTMLFormElement>) => {\n event.preventDefault()\n const formData = new FormData(event.currentTarget)\n\n // TODO - more field level validation\n const chainTx: TransactionBoundWitnessFields = {\n chain: formData.get('chain') as Address,\n gas: formData.get('gas') as Hex,\n nbf: Number.parseInt(formData.get('nbf') as string),\n exp: Number.parseInt(formData.get('exp') as string),\n nonce: [],\n }\n\n await onSubmitTx?.(chainTx)\n }\n\n return (\n <form onSubmit={event => void handleSubmit(event)} style={{ width: '100%' }}>\n <FlexCol gap={2}>\n <FormControl fullWidth>\n <TextField label=\"Chain Address\" name=\"chain\" required />\n </FormControl>\n <FormControl fullWidth>\n <TextField label=\"Gas\" name=\"gas\" required />\n </FormControl>\n <FormControl fullWidth>\n <TextField label=\"Not Before Block\" name=\"nbf\" required />\n </FormControl>\n <FormControl fullWidth>\n <TextField label=\"Not After Block\" name=\"exp\" required />\n </FormControl>\n\n <Button type=\"submit\" variant=\"contained\">Submit</Button>\n </FlexCol>\n </form>\n )\n}\n","import type { StandardTextFieldProps } from '@mui/material'\nimport {\n FormControl, FormHelperText,\n TextField,\n} from '@mui/material'\nimport type { ChangeEventHandler } from 'react'\nimport React, { useState } from 'react'\n\nexport interface ChainTransactionNetworkProps extends StandardTextFieldProps {\n network?: URL\n onNetworkChange?: (url: URL) => void\n}\n\nexport const ChainTransactionNetwork: React.FC<ChainTransactionNetworkProps> = ({\n network, onNetworkChange, ...props\n}) => {\n const [error, setError] = useState<Error>()\n\n const handleChange: ChangeEventHandler<HTMLInputElement> = (event) => {\n try {\n const url = new URL(event.target.value)\n setError(undefined)\n onNetworkChange?.(url)\n } catch (error) {\n console.error(error)\n setError(error as Error)\n }\n }\n\n return (\n <FormControl fullWidth>\n <TextField label=\"Network\" name=\"network\" onChange={handleChange} required value={network} {...props} />\n <FormHelperText sx={{ color: error ? 'red' : undefined }}>{error ? 'Not a valid url' : 'Enter full url of archivist'}</FormHelperText>\n </FormControl>\n )\n}\n","import {\n Alert, Grid2, Typography,\n} from '@mui/material'\nimport { axios } from '@xylabs/axios'\nimport { ErrorRender } from '@xylabs/react-error'\nimport { FlexGrowCol } from '@xylabs/react-flexbox'\nimport { Account } from '@xyo-network/account'\nimport type { ApiEnvelope } from '@xyo-network/api-models'\nimport { ArchivistInsertQuerySchema } from '@xyo-network/archivist-model'\nimport { QueryBoundWitnessBuilder } from '@xyo-network/boundwitness-builder'\nimport type { TransactionBoundWitnessFields } from '@xyo-network/chain-model'\nimport { buildTransaction } from '@xyo-network/chain-protocol'\nimport type { ModuleQueryResult } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { Payload } from '@xyo-network/payload-model'\nimport React, { useState } from 'react'\n\nimport { ChainTransactionBuilder } from './Builder.tsx'\nimport { ChainTransactionNetwork } from './Network.tsx'\n\nconst BETA_PENDING_TRANSACTIONS_ARCHIVIST = 'https://beta.api.chain.xyo.network/8050fee682a2762f504d5449d8269a6f17f0b693'\n\nexport const SubmitChainTransaction: React.FC = () => {\n const [network, setNetwork] = useState<URL>(new URL(BETA_PENDING_TRANSACTIONS_ARCHIVIST))\n const [result, setResult] = useState<ModuleQueryResult>()\n const [error, setError] = useState<Error>()\n\n const onSubmitTx = async (chainTx: TransactionBoundWitnessFields) => {\n if (!network) throw new Error('Network not set')\n const randomAccount = await Account.random()\n const [transactionBoundWitness] = await buildTransaction(\n chainTx.chain,\n [],\n BigInt(`0x${chainTx.gas}`),\n randomAccount,\n chainTx.nbf,\n chainTx.exp,\n [],\n )\n\n const insertQuery = new PayloadBuilder({ schema: ArchivistInsertQuerySchema }).build()\n const [queryBoundWitness] = await new QueryBoundWitnessBuilder()\n .payloads([transactionBoundWitness as Payload])\n .query(insertQuery)\n .signer(randomAccount)\n .build()\n\n const response = await axios.post<ApiEnvelope<ModuleQueryResult>>(network.href, [queryBoundWitness, [insertQuery, transactionBoundWitness, chainTx]])\n if (response.data.errors) {\n setError(new Error(response.data.errors.map(e => e.message).join('\\n')))\n } else {\n setResult(response.data.data)\n }\n }\n\n const onNetworkChange = (url: URL) => {\n setNetwork(url)\n }\n\n return (\n <Grid2 container>\n <Grid2 size={{\n xs: 12, sm: 6, md: 4,\n }}\n >\n <FlexGrowCol alignItems=\"start\" gap={2}>\n <ChainTransactionNetwork network={network} onNetworkChange={onNetworkChange} />\n {network ? <ChainTransactionBuilder onSubmitTx={onSubmitTx} /> : null}\n {result?.[2].length === 0 ? <Alert severity=\"success\">Success</Alert> : null}\n\n {error ? <ErrorRender error={error} /> : null}\n {result?.[2] && result?.[2].length > 0 ? <ErrorRender error={new Error('Failed insert...see result below')} /> : null}\n\n {result\n ? (\n <>\n <Typography variant=\"h6\">Result:</Typography>\n <pre>{JSON.stringify(result, null, 2)}</pre>\n </>\n )\n : null}\n </FlexGrowCol>\n </Grid2>\n </Grid2>\n )\n}\n","import { Difference } from '@mui/icons-material'\nimport type { ChipProps } from '@mui/material'\nimport { Chip, Icon } from '@mui/material'\nimport type { Hash } from '@xylabs/hex'\nimport React, { useMemo } from 'react'\n\nexport interface TransactionCountChipProps extends ChipProps {\n transactions?: Hash[]\n}\n\nexport const TransactionCountChip: React.FC<TransactionCountChipProps> = ({\n transactions, sx, ...props\n}) => {\n const label = useMemo(() => {\n if (!transactions) return '0'\n return transactions?.length > 10 ? '+10' : transactions.length\n }, [transactions])\n\n return (\n <Chip\n avatar={(\n <Icon>\n <Difference />\n </Icon>\n )}\n label={`tx: ${label}`}\n title={transactions ? `Block contains ${transactions.length} transactions` : undefined}\n sx={{\n display: 'inline-flex', alignItems: 'center', justifyContent: 'center', ...sx,\n }}\n {...props}\n />\n )\n}\n","import { ContentCopy as ContentCopyIcon, Paid } from '@mui/icons-material'\nimport {\n Alert, AlertTitle, Collapse, Snackbar, Typography,\n} from '@mui/material'\nimport type { Hash } from '@xylabs/hex'\nimport { ErrorRender } from '@xylabs/react-error'\nimport {\n FlexGrowCol, FlexGrowRow, FlexRow,\n} from '@xylabs/react-flexbox'\nimport type { QuickTipButtonProps } from '@xylabs/react-quick-tip-button'\nimport { QuickTipButton } from '@xylabs/react-quick-tip-button'\nimport type { ArchivistInstance } from '@xyo-network/archivist-model'\nimport type { BlockBoundWitness } from '@xyo-network/chain-model'\nimport React, {\n Fragment, useMemo, useState,\n} from 'react'\n\nimport { useTxsFromBlock } from '../block/index.ts'\n\nexport interface TransactionsQuickTipButtonQuickTipButtonProps extends QuickTipButtonProps {\n block?: BlockBoundWitness\n chainArchivist?: ArchivistInstance\n}\n\nexport const TransactionsQuickTipButton: React.FC<TransactionsQuickTipButtonQuickTipButtonProps> = ({\n block, chainArchivist, ...props\n}) => {\n const [transactions, transactionsError] = useTxsFromBlock(chainArchivist, block)\n\n const [copied, setCopied] = useState(false)\n const [showError, setShowError] = useState(false)\n useMemo(() => transactionsError ? setShowError(true) : setShowError(false), [transactionsError])\n\n const onCopy = async (transactionHash: Hash) => {\n await navigator.clipboard.writeText(transactionHash)\n setCopied(true)\n setTimeout(() => {\n setCopied(false)\n }, 5000)\n }\n\n return (\n <>\n <QuickTipButton\n Icon={Paid}\n disabled={transactions?.length === 0}\n hoverText={`Transaction Count: ${transactions?.length ?? 0}`}\n disableDialog={transactions?.length === 0}\n dialogProps={{ fullWidth: true, maxWidth: 'md' }}\n {...props}\n >\n {transactions?.length === 0\n ? null\n : (\n <FlexGrowCol gap={1} alignItems=\"stretch\">\n {transactions?.map(([transaction, hash]) => (\n <Fragment key={hash}>\n <FlexGrowRow gap={2} justifyContent=\"start\">\n <ContentCopyIcon sx={{ cursor: 'pointer' }} onClick={() => void onCopy(hash)} />\n <Typography sx={{\n overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap',\n }}\n >\n {transaction._hash}\n </Typography>\n </FlexGrowRow>\n <FlexRow>\n <Collapse in={copied} unmountOnExit>\n <Alert>\n <AlertTitle>Previous hash copied to clipboard</AlertTitle>\n </Alert>\n </Collapse>\n </FlexRow>\n </Fragment>\n ))}\n </FlexGrowCol>\n )}\n </QuickTipButton>\n <Snackbar open={showError} onClose={() => setShowError(false)}>\n <ErrorRender error={transactionsError} scope=\"TransactionsQuickTipButton\" />\n </Snackbar>\n </>\n )\n}\n","import { useRef, useState } from 'react'\n\nexport const useAnchorElement = () => {\n const [anchorEl, setAnchorEl] = useState<null | HTMLElement>(null)\n const anchorRef = useRef<HTMLButtonElement>(null)\n const open = Boolean(anchorEl)\n\n const handleClick = (event: React.MouseEvent<HTMLElement>) => {\n setAnchorEl(event.currentTarget)\n }\n\n const handleClose = () => {\n setAnchorEl(null)\n }\n\n return {\n anchorEl, anchorRef, open, handleClick, handleClose,\n }\n}\n","import { useEvent } from '@xyo-network/react-event'\n\nexport type BlockHeaderEventNouns = 'transaction-count' | 'block-hash' | 'block-number' | 'block-producer' | 'block-verification'\n\n// NOTE: extracting the type so compilers can easily strip it off vs inlining it withing the hook\n// which causes compilation warnings.\ntype HookArgs<TElement extends HTMLElement> = Parameters<typeof useEvent<TElement, BlockHeaderEventNouns>>\n\nexport const useBlockHeadingEvents = <TElement extends HTMLElement>(...args: HookArgs<TElement>) => {\n return useEvent<TElement, BlockHeaderEventNouns>(...args)\n}\n","import type { BlockBoundWitness } from '@xyo-network/chain-model'\nimport { useMemo } from 'react'\n\nexport const useBlockProducer = (block?: BlockBoundWitness) => {\n return useMemo(() => {\n if (block) {\n const producer = block.addresses[0]\n return producer\n }\n }, [block])\n}\n","import type { BlockBoundWitness, XyoChainIteratorParams } from '@xyo-network/chain-model'\nimport { isBlockBoundWitness } from '@xyo-network/chain-model'\nimport type { ComponentType } from 'react'\nimport { useState } from 'react'\n\nimport { useChainAnalyzersContext } from '../../../context/index.ts'\nimport type {\n BlockChainRenderComponent,\n BlockComponentProps, BlockComponentWithTxsProps,\n} from '../../../types/index.ts'\nimport { buildBlockChainRenderComponent } from '../helpers/index.ts'\n\nexport const useDynamicBlockComponents = (BlockComponent: ComponentType<BlockComponentWithTxsProps>, params?: XyoChainIteratorParams, maxBlocks?: number) => {\n const { chainArchivist } = params ?? {}\n const [blockChainRenderComponents, setBlockChainRenderComponents] = useState<BlockChainRenderComponent[]>([])\n\n const { onBlock } = useChainAnalyzersContext()\n\n const onAddBlock = async (block: BlockBoundWitness) => {\n if (!isBlockBoundWitness(block) || !chainArchivist) return\n\n const blockComponentProps: BlockComponentProps = { block }\n const newBlockComponent = await buildBlockChainRenderComponent(BlockComponent, blockComponentProps, chainArchivist)\n\n if (block.block !== blockChainRenderComponents[0]?.block.block) {\n void onBlock?.(chainArchivist, block)\n\n setBlockChainRenderComponents((blockComponents) => {\n const newBlockComponents = [newBlockComponent, ...blockComponents]\n\n if (maxBlocks && newBlockComponents.length > maxBlocks) {\n // trim the last block if we exceed the max\n newBlockComponents.pop()\n }\n\n return newBlockComponents\n })\n }\n }\n\n return { blockChainRenderComponents, onAddBlock }\n}\n","import type { BlockBoundWitness } from '@xyo-network/chain-model'\n\nexport const blockProducer = (block: BlockBoundWitness) => {\n return block.addresses[0]\n}\n","import type { ArchivistInstance } from '@xyo-network/archivist-model'\nimport type { ComponentType } from 'react'\nimport React from 'react'\n\nimport type {\n BlockChainRenderComponent,\n BlockComponentProps, BlockComponentWithTxsProps,\n} from '../../../types/index.ts'\nimport { BlockHeadingFlexbox } from '../BlockHeadingFlexbox.tsx'\nimport { txsFromBlock } from './tsxFromBlock.ts'\n\nexport const buildBlockChainRenderComponent = async (\n BlockComponent: ComponentType<BlockComponentWithTxsProps>,\n blockComponentProps: BlockComponentProps,\n chainArchivist: ArchivistInstance,\n) => {\n const { block, ...remainingProps } = blockComponentProps\n const blockTxs = await txsFromBlock(chainArchivist, block)\n const txHashes = blockTxs.map(([_, hash]) => hash)\n\n const item: BlockChainRenderComponent = {\n child: (\n <BlockComponent\n block={block}\n transactions={txHashes}\n {...remainingProps}\n />\n ),\n key: block.block.toString(),\n block,\n }\n return item\n}\n\nexport const buildBlockHeadingComponent = async (\n blockComponentProps: BlockComponentProps,\n chainArchivist: ArchivistInstance,\n) => {\n return await buildBlockChainRenderComponent(BlockHeadingFlexbox, blockComponentProps, chainArchivist)\n}\n","import type { ReadArchivist } from '@xyo-network/archivist-model'\nimport type { BlockBoundWitness } from '@xyo-network/chain-model'\nimport { isTransactionBoundWitness } from '@xyo-network/chain-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\n\nexport const txsFromBlock = async (chainArchivist: ReadArchivist, block: BlockBoundWitness) => {\n const payloads = await chainArchivist.get(block.payload_hashes)\n const transactionPayloads = payloads.filter(payload => isTransactionBoundWitness(payload))\n return await PayloadBuilder.hashPairs(transactionPayloads)\n}\n","import { usePromise } from '@xylabs/react-promise'\nimport type { BlockBoundWitness, XyoChainIteratorParams } from '@xyo-network/chain-model'\nimport type { ComponentType } from 'react'\n\nimport { useChainAnalyzersContext } from '../../../context/index.ts'\nimport type { BlockComponentProps, BlockComponentWithTxsProps } from '../../../types/index.ts'\nimport { buildBlockChainRenderComponent } from '../helpers/index.ts'\n\nexport const useStaticBlockComponents = (\n BlockComponent: ComponentType<BlockComponentWithTxsProps>,\n params?: XyoChainIteratorParams,\n blocks?: BlockBoundWitness[],\n) => {\n const { onBlock } = useChainAnalyzersContext()\n\n const [blockComponents, blockComponentsError] = usePromise(async () => {\n const resolvedBlockWithStorage = blocks ?? []\n if (!params?.chainArchivist) return []\n\n const { chainArchivist } = params\n\n return await Promise.all(resolvedBlockWithStorage?.map(async (block) => {\n if (onBlock && chainArchivist) {\n await onBlock(chainArchivist, block)\n }\n\n const blockComponentProps: BlockComponentProps = { block, defaultExpanded: true }\n return await buildBlockChainRenderComponent(BlockComponent, blockComponentProps, chainArchivist)\n }))\n }, [blocks, params, BlockComponent])\n\n return { blockComponents, errors: blockComponentsError }\n}\n","import { usePromise } from '@xylabs/react-promise'\nimport type { ReadArchivist } from '@xyo-network/archivist-model'\nimport type { BlockBoundWitness } from '@xyo-network/chain-model'\n\nimport { txsFromBlock } from '../helpers/index.ts'\n\nexport const useTxsFromBlock = (chainArchivist?: ReadArchivist, block?: BlockBoundWitness) => {\n return usePromise(async () => {\n if (block && chainArchivist) {\n return await txsFromBlock(chainArchivist, block)\n }\n }, [block, chainArchivist])\n}\n","import { Divider, Stack } from '@mui/material'\nimport React from 'react'\n\nexport const LinkedDivider: React.FC = () => {\n return (\n <>\n {/* An element to house the height of the divider...really just here to help with calculating\n the height for animation purposes and allowing for a dynamic divider height */}\n <Stack\n className=\"divider-spacer\"\n justifyContent=\"end\"\n sx={{\n width: '50%', height: 24, justifyContent: 'end',\n }}\n >\n <Divider\n className=\"divider\"\n orientation=\"vertical\"\n flexItem\n sx={{\n borderRightWidth: 2, height: 24, transition: 'height 1s',\n }}\n />\n </Stack>\n </>\n )\n}\n","import { MoreVert } from '@mui/icons-material'\nimport { IconButton, Menu } from '@mui/material'\nimport type { BlockBoundWitness } from '@xyo-network/chain-model'\nimport { BWJsonMenuItem, BWPreviousHashMenuItem } from '@xyo-network/react-chain-boundwitness'\nimport React from 'react'\n\nimport { useAnchorElement } from '../hooks/index.ts'\n\nexport interface BlockExpandedMenuProps {\n block?: BlockBoundWitness\n}\n\nexport const BlockMenuExpanded: React.FC<BlockExpandedMenuProps> = ({ block }) => {\n const {\n anchorEl, anchorRef, open, handleClick, handleClose,\n } = useAnchorElement()\n\n return (\n <>\n <IconButton ref={anchorRef} size=\"small\" onClick={handleClick}>\n <MoreVert fontSize=\"inherit\" />\n </IconButton>\n <Menu\n open={open}\n anchorEl={anchorEl}\n anchorOrigin={{ horizontal: 'left', vertical: 'bottom' }}\n onClose={handleClose}\n >\n <BWPreviousHashMenuItem boundwitness={block} dense onDialogClose={handleClose} />\n <BWJsonMenuItem boundwitness={block} dense onDialogClose={handleClose} />\n </Menu>\n </>\n )\n}\n","import type { ChipProps } from '@mui/material'\nimport { Chip } from '@mui/material'\nimport { EthAddress } from '@xylabs/eth-address'\nimport type { BlockBoundWitness } from '@xyo-network/chain-model'\nimport { BlockiesAvatar } from '@xyo-network/react-chain-blockies'\nimport React, { useMemo } from 'react'\n\nexport interface BlockProducerChipProps extends ChipProps {\n block?: BlockBoundWitness\n}\nexport const BlockProducerChip: React.FC<BlockProducerChipProps> = ({ block, ...props }) => {\n const sharedAddress = block?.addresses[0]\n const blockProducer = useMemo(() => {\n if (block) {\n const producer = block.addresses.find(address => address !== sharedAddress)\n return producer\n }\n }, [block])\n\n const shortedBlockProducer = blockProducer ? EthAddress.parse(blockProducer)?.toShortString(3) : null\n\n const avatar = useMemo(() => blockProducer === '' ? undefined : <BlockiesAvatar blockiesOptions={{ seed: blockProducer }} />, [blockProducer])\n\n return <Chip avatar={avatar} label={shortedBlockProducer ? `${shortedBlockProducer}` : null} title={`Block producer: ${blockProducer}`} {...props} />\n}\n","import {\n Link, TableCell, Tooltip,\n} from '@mui/material'\nimport React from 'react'\n\nimport { useLinkedBlockItem } from './hooks/index.ts'\nimport type { BlockTableCellProps } from './lib/index.ts'\n\nexport interface BlockNumberTableCellProps extends BlockTableCellProps {}\n\nexport const BlockNumberTableCell: React.FC<BlockNumberTableCellProps> = ({\n block, linked, ...props\n}) => {\n const [ref, handleClick] = useLinkedBlockItem('block-number', block?.block.toString())\n\n const blockNumberBigInt = block ? block.block.toString() : ''\n\n return (\n <TableCell ref={ref} {...props}>\n <Tooltip title={`Block Number: ${blockNumberBigInt}`}>\n <span>\n {linked && block\n ? (\n <Link title={block.block.toString()} onClick={handleClick} sx={{ cursor: 'pointer' }}>{block.block.toString()}</Link>\n )\n : null}\n {!linked && blockNumberBigInt}\n </span>\n </Tooltip>\n </TableCell>\n )\n}\n","import { useEvent } from '@xyo-network/react-event'\nimport type { Ref } from 'react'\n\nimport type { BlockHeaderEventNouns } from '../../../hooks/index.ts'\n\nexport const useLinkedBlockItem = (noun?: BlockHeaderEventNouns, data?: string): [Ref<HTMLElement | null>, (event: React.MouseEvent) => void] => {\n const [ref, dispatch] = useEvent<HTMLAnchorElement, BlockHeaderEventNouns>()\n\n const handleClick = (event: React.MouseEvent) => {\n event.preventDefault()\n if (!noun) {\n console.warn('useLinkedBlockItem: noun is required')\n return\n }\n dispatch(noun, 'click', data)\n }\n\n return [ref, handleClick]\n}\n","import {\n Avatar,\n Chip,\n TableCell, Tooltip,\n} from '@mui/material'\nimport type { IdenticonProps } from '@xylabs/react-identicon'\nimport { Identicon } from '@xylabs/react-identicon'\nimport { usePayloadHash } from '@xyo-network/react-shared'\nimport React from 'react'\n\nimport { useLinkedBlockItem } from './hooks/index.ts'\nimport type { BlockTableCellProps } from './lib/index.ts'\n\nexport interface BlockHashTableCellProps extends BlockTableCellProps {\n identiconProps?: IdenticonProps\n}\n\nexport const BlockHashTableCell: React.FC<BlockHashTableCellProps> = ({\n block, identiconProps, linked, ...props\n}) => {\n const hash = usePayloadHash(block)\n\n const [ref, handleClick] = useLinkedBlockItem('block-hash', hash)\n\n const shortenedHash = hash ? `${hash.slice(0, 4)}...${hash.slice(-5, -1)}` : ''\n\n return (\n <TableCell ref={ref} {...props}>\n {hash\n ? (\n <Tooltip title={`Block Hash: ${hash}`}>\n <Chip\n avatar={(\n <Avatar sx={{ background: 'white' }}>\n <Identicon\n size={16}\n value={hash}\n {...identiconProps}\n />\n </Avatar>\n )}\n label={shortenedHash}\n onClick={linked ? handleClick : undefined}\n />\n </Tooltip>\n )\n : null}\n </TableCell>\n )\n}\n","import { Code } from '@mui/icons-material'\nimport {\n Button,\n Dialog, DialogActions, DialogContent, DialogTitle, IconButton, TableCell,\n} from '@mui/material'\nimport { ellipsize } from '@xylabs/eth-address'\nimport { FlexRow } from '@xylabs/react-flexbox'\nimport { JsonViewerEx } from '@xyo-network/react-payload-raw-info'\nimport { usePayloadHash } from '@xyo-network/react-shared'\nimport React, { useState } from 'react'\n\nimport type { BlockTableCellProps } from './lib/index.ts'\n\nexport interface BlockJsonViewTableCellProps extends BlockTableCellProps {}\n\nexport const BlockJsonViewTableCell: React.FC<BlockJsonViewTableCellProps> = ({ block, ...props }) => {\n const [open, setOpen] = useState(false)\n const onClose = () => setOpen(false)\n\n const hash = usePayloadHash(block)\n const title = hash ? `JSON for ${ellipsize(hash, 5)}` : 'JSON'\n\n return (\n <TableCell {...props}>\n <FlexRow sx={{ width: '100%' }}>\n <IconButton onClick={() => setOpen(true)}>\n <Code />\n </IconButton>\n </FlexRow>\n <Dialog open={open} onClose={onClose}>\n <DialogTitle>{title}</DialogTitle>\n <DialogContent>\n <JsonViewerEx value={block} />\n </DialogContent>\n <DialogActions sx={{\n display: 'flex', flexDirection: 'row', justifyContent: 'end',\n }}\n >\n <Button variant=\"contained\" onClick={onClose}>Close</Button>\n </DialogActions>\n </Dialog>\n </TableCell>\n )\n}\n","import { TableCell, Tooltip } from '@mui/material'\nimport { FlexRow } from '@xylabs/react-flexbox'\nimport React from 'react'\n\nimport { useBlockProducer } from '../../hooks/index.ts'\nimport type { BlockProducerChipProps } from '../../ProducerChip.tsx'\nimport { BlockProducerChip } from '../../ProducerChip.tsx'\nimport { useLinkedBlockItem } from './hooks/index.ts'\nimport type { BlockTableCellProps } from './lib/index.ts'\n\nexport interface BlockProducerTableCell extends BlockTableCellProps {\n producerChipProps?: BlockProducerChipProps\n}\n\nexport const BlockProducerTableCell: React.FC<BlockProducerTableCell> = ({\n block, linked, producerChipProps, ...props\n}) => {\n const [ref, handleClick] = useLinkedBlockItem('block-producer', JSON.stringify(block))\n const producer = useBlockProducer(block)\n\n return (\n <TableCell ref={ref} {...props}>\n <Tooltip title={`Block Producer: ${producer}`}>\n <FlexRow sx={{ width: '100%' }}>\n <BlockProducerChip onClick={linked ? handleClick : undefined} block={block} {...producerChipProps} />\n </FlexRow>\n </Tooltip>\n </TableCell>\n )\n}\n","import { Error } from '@mui/icons-material'\nimport {\n Link, TableCell, Tooltip,\n} from '@mui/material'\nimport type { ReadArchivist } from '@xyo-network/archivist-model'\nimport React from 'react'\n\nimport { useTxsFromBlock } from '../../hooks/index.ts'\nimport { useLinkedBlockItem } from './hooks/index.ts'\nimport type { BlockTableCellProps } from './lib/index.ts'\n\nexport interface BlockTransactionCountTableCellProps extends BlockTableCellProps {\n chainArchivist?: ReadArchivist\n}\n\nexport const BlockTransactionCountTableCell: React.FC<BlockTransactionCountTableCellProps> = ({\n block, chainArchivist, linked, ...props\n}) => {\n const [txs, error] = useTxsFromBlock(chainArchivist, block)\n const [ref, handleClick] = useLinkedBlockItem('transaction-count', JSON.stringify(txs ?? null))\n\n return (\n <TableCell ref={ref} {...props}>\n <span>\n {error\n ? (\n <Tooltip title={error.message}>\n <Error color=\"error\" />\n </Tooltip>\n )\n : null}\n {linked ? <Link onClick={handleClick} sx={{ cursor: 'pointer' }}>{txs?.length ?? 0}</Link> : txs?.length ?? 0}\n </span>\n </TableCell>\n )\n}\n","import { TableCell } from '@mui/material'\nimport { FlexRow } from '@xylabs/react-flexbox'\nimport { BWVerification } from '@xyo-network/react-chain-boundwitness'\nimport React from 'react'\n\nimport { useLinkedBlockItem } from './hooks/index.ts'\nimport type { BlockTableCellProps } from './lib/index.ts'\n\nexport interface BlockVerificationTableCellProps extends BlockTableCellProps {}\n\nexport const BlockVerificationTableCell: React.FC<BlockVerificationTableCellProps> = ({\n block, linked, ...props\n}) => {\n const [ref, handleClick] = useLinkedBlockItem('block-verification', block?.block.toString())\n\n return (\n <TableCell ref={ref} {...props}>\n <FlexRow sx={{ width: '100%' }}>\n <BWVerification onClick={linked ? handleClick : undefined} iconColors boundwitness={block} />\n </FlexRow>\n </TableCell>\n )\n}\n","import {\n TableBody, TableCell, TableHead, TableRow,\n} from '@mui/material'\nimport type { TableExProps } from '@xyo-network/react-table'\nimport { TableEx } from '@xyo-network/react-table'\nimport React from 'react'\n\nexport const BlockchainTableEx = ({\n ref, children, ...props\n}: TableExProps & { ref?: React.Ref<HTMLTableElement | null> }) => {\n return (\n <TableEx ref={ref} {...props}>\n <TableHead>\n <TableRow>\n <TableCell>Block Hash</TableCell>\n <TableCell>Block Number</TableCell>\n <TableCell>Transaction Count</TableCell>\n <TableCell align=\"center\">Block Producer</TableCell>\n <TableCell align=\"center\">Valid</TableCell>\n <TableCell align=\"center\">JSON</TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {children}\n </TableBody>\n </TableEx>\n )\n}\n\nBlockchainTableEx.displayName = 'BlockchainTableEx'\n","import { TableRow } from '@mui/material'\nimport React, { useMemo } from 'react'\n\nimport type { BlockComponentProps } from '../../../../types/index.ts'\nimport {\n BlockHashTableCell, BlockJsonViewTableCell, BlockNumberTableCell, BlockProducerTableCell,\n BlockTransactionCountTableCell,\n BlockVerificationTableCell,\n} from '../cell/index.ts'\n\nexport interface BlockChainTableRowProps extends BlockComponentProps {\n linked?: boolean\n}\n\nexport const BlockChainTableRow: React.FC<BlockChainTableRowProps> = ({\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n block, defaultExpanded, linked, ...props\n}) => {\n const linkedTableCellProps = useMemo(() => ({ block, linked }), [block, linked])\n const defaultTableCellProps = useMemo(() => ({ block }), [block])\n return (\n <TableRow {...props}>\n <BlockHashTableCell {...defaultTableCellProps} />\n <BlockNumberTableCell {...linkedTableCellProps} />\n <BlockTransactionCountTableCell {...linkedTableCellProps} />\n <BlockProducerTableCell {...defaultTableCellProps} />\n <BlockVerificationTableCell {...defaultTableCellProps} />\n <BlockJsonViewTableCell {...defaultTableCellProps} />\n </TableRow>\n )\n}\n","import {\n Autorenew,\n Pause,\n} from '@mui/icons-material'\nimport {\n Alert,\n AlertTitle,\n Grow,\n Icon, IconButton, Tooltip,\n} from '@mui/material'\nimport type { FlexBoxProps } from '@xylabs/react-flexbox'\nimport { FlexRow } from '@xylabs/react-flexbox'\nimport React, { memo } from 'react'\n\nimport type { PollingState } from '../hooks/index.ts'\nimport { ChainAnalyzerStatsDialogFromContext } from '../stats/index.ts'\nimport { StyledPulseSvgIcon } from './PulseSvgIcon.tsx'\n\nexport interface PollingControlsFlexboxProps extends FlexBoxProps {\n blocksBehind?: number\n pollingState?: PollingState\n setPollingState?: (newState: PollingState) => void\n}\n\nexport const PollingControlsFlexbox: React.FC<PollingControlsFlexboxProps> = ({\n blocksBehind, pollingState, setPollingState,\n}) => {\n const paused = pollingState === 'paused'\n const running = pollingState === 'running'\n\n return (\n <FlexRow justifyContent=\"space-between\" width=\"100%\">\n <FlexRow gap={2}>\n {running && (\n <IconButton onClick={() => setPollingState?.('paused')} title=\"Pause Block Stream\">\n <Pause />\n </IconButton>\n )}\n {paused && (\n <IconButton onClick={() => setPollingState?.('running')} title=\"Re-Sync Block Stream\">\n <Autorenew />\n </IconButton>\n )}\n <ChainAnalyzerStatsDialogFromContext />\n </FlexRow>\n <FlexRow gap={2}>\n <Grow in={(blocksBehind ?? 0) > 0}>\n <Tooltip title=\"Click to Re-Sync\">\n <Alert\n sx={{\n py: 0, px: 1, cursor: 'pointer',\n }}\n severity=\"warning\"\n onClick={() => setPollingState?.('running')}\n >\n <AlertTitle sx={{ mb: 0 }}>\n Behind:\n {' '}\n {blocksBehind}\n </AlertTitle>\n </Alert>\n </Tooltip>\n </Grow>\n <Icon>\n <StyledPulseSvgIcon className={running ? '' : 'paused'} />\n </Icon>\n </FlexRow>\n </FlexRow>\n )\n}\n\nexport const MemoizedPollingControlsFlexbox = memo(PollingControlsFlexbox)\n","import { QueryStats } from '@mui/icons-material'\nimport type { DialogProps } from '@mui/material'\nimport {\n Dialog, DialogContent,\n DialogTitle, IconButton,\n} from '@mui/material'\nimport React, { useState } from 'react'\n\nimport { useChainAnalyzersContext } from '../../../context/index.ts'\nimport { BlockProducerStatsFlexbox } from './producer/index.ts'\n\nexport interface ChainAnalyzerStatsDialogProps extends DialogProps {}\n\nexport const ChainAnalyzerStatsDialog: React.FC<ChainAnalyzerStatsDialogProps> = (props) => {\n const { analyzers, statsUpdated } = useChainAnalyzersContext()\n\n return (\n <Dialog {...props}>\n <DialogTitle>Chain Analysis</DialogTitle>\n <DialogContent>\n {!!statsUpdated && Object.entries(analyzers).map(([id, analyzer]) => (\n <div key={id}>\n {id === 'producers' && (\n <BlockProducerStatsFlexbox payload={analyzer.result()} />\n )}\n </div>\n ))}\n </DialogContent>\n </Dialog>\n )\n}\n\nexport const ChainAnalyzerStatsDialogFromContext: React.FC = (props) => {\n const [open, setOpen] = useState(false)\n const handleClose = () => setOpen(false)\n\n return (\n <>\n <IconButton onClick={() => setOpen(true)}>\n <QueryStats />\n </IconButton>\n <ChainAnalyzerStatsDialog onClose={handleClose} open={open} {...props} />\n </>\n )\n}\n","import {\n ListItem, styled, Typography,\n} from '@mui/material'\nimport { ErrorRender } from '@xylabs/react-error'\nimport { FlexCol } from '@xylabs/react-flexbox'\nimport { isChainSummaryProducers } from '@xyo-network/chain-protocol'\nimport type { Payload } from '@xyo-network/payload-model'\nimport React, { useMemo } from 'react'\n\nimport { ChainProducerStatsTable } from './Table.tsx'\n\nexport interface BlockProducerStatsFlexboxProps {\n payload?: Payload\n}\n\nexport const BlockProducerStatsFlexbox: React.FC<BlockProducerStatsFlexboxProps> = ({ payload, ...props }) => {\n const [producer, producerError] = useMemo(() => {\n if (payload) {\n return isChainSummaryProducers(payload) ? [payload] : [undefined, new Error('Payload is not a Chain Producer')]\n } else {\n return []\n }\n }, [payload])\n\n const producersArray = useMemo(() => Object.values(producer?.producers ?? {}), [producer])\n\n return (\n <FlexCol alignItems=\"start\" gap={1} {...props}>\n <ErrorRender error={producerError} scope=\"BlockProducerStatsFlexbox\" />\n <Typography fontSize=\"1rem\">Block Producers</Typography>\n <ChainProducerStatsTable producers={producersArray} />\n </FlexCol>\n )\n}\n\nexport const StyledListItem = styled(ListItem)(() => ({\n paddingTop: 0,\n paddingBottom: 0,\n}))\n","import type { TableProps } from '@mui/material'\nimport {\n Table, TableBody, TableCell, TableHead,\n TableRow,\n useTheme,\n} from '@mui/material'\nimport type { AnalyzedProducer } from '@xyo-network/chain-protocol'\nimport { BlockiesAvatar } from '@xyo-network/react-chain-blockies'\nimport React from 'react'\n\nexport interface ChainProducerStatsTableProps extends TableProps {\n producers?: AnalyzedProducer[]\n}\n\nexport const ChainProducerStatsTable: React.FC<ChainProducerStatsTableProps> = ({ producers, ...props }) => {\n const theme = useTheme()\n return (\n <Table {...props}>\n <TableHead>\n <TableRow>\n <TableCell>Address</TableCell>\n <TableCell>Blocks Produced</TableCell>\n <TableCell>Rewards Earned Produced</TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {producers?.map(producer => (\n <TableRow key={producer.address}>\n <TableCell>\n <BlockiesAvatar blockiesOptions={{ seed: producer.address }} sx={{ height: theme.spacing(2.75), width: theme.spacing(2.75) }} />\n </TableCell>\n <TableCell>{producer.blocksProduced.toString()}</TableCell>\n <TableCell>{producer.rewardsEarned.toString()}</TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n )\n}\n","import {\n alpha, createSvgIcon, keyframes, styled,\n} from '@mui/material'\nimport React from 'react'\n\n// Adapted from - https://codepen.io/Taver/pen/PWyEqp\nexport const PulseSvgIcon = createSvgIcon(\n <svg viewBox=\"0 0 80 80\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\">\n <g transform=\"translate(34,34)\">\n <circle className=\"core\" cx=\"0\" cy=\"0\" r=\"6\"></circle>\n <circle className=\"radar\" cx=\"0\" cy=\"0\" r=\"6\"></circle>\n </g>\n </svg>,\n 'PulseSvgIcon',\n)\n\nconst pulse1 = keyframes`\n 0% {\n opacity: 0;\n transform: scale(0);\n }\n 30% {\n opacity: 1;\n transform: scale(1.5);\n }\n 60% {\n opacity: 1;\n transform: scale(2);\n }\n 100% {\n opacity: 0;\n transform: scale(2);\n }\n`\n\nconst pulse2 = keyframes`\n 0% {\n transform: scale(1, 1);\n opacity: 0;\n }\n 50% {\n opacity: 1;\n }\n 100% {\n transform: scale(6, 6);\n opacity: 0;\n }\n`\n\nexport const StyledPulseSvgIcon = styled(PulseSvgIcon)(({ theme }) => {\n return {\n '& .core': {\n animation: `${pulse1} 1.25s ease-in-out infinite`,\n fill: theme.palette.success.main,\n },\n '&.paused .core': {\n animation: 'none',\n fill: theme.palette.divider,\n transform: 'scale(2)',\n },\n '& .radar': {\n animation: `${pulse2} 1.25s ease-in-out infinite`,\n fill: alpha(theme.palette.success.main, 0.5),\n },\n '&.paused .radar': {\n animation: 'none',\n fill: theme.palette.divider,\n transform: 'scale(6)',\n },\n }\n})\n","import type { DialogProps } from '@mui/material'\nimport {\n Button, Dialog, DialogActions, DialogContent,\n} from '@mui/material'\nimport React from 'react'\n\nexport interface TransactionsDialogProps extends DialogProps {}\n\nexport const TransactionsDialog: React.FC<TransactionsDialogProps> = (props) => {\n return (\n <Dialog {...props}>\n <DialogContent>\n Transactions Dialog\n </DialogContent>\n <DialogActions>\n <Button variant=\"outlined\" onClick={e => props?.onClose?.(e, 'escapeKeyDown')}>Close</Button>\n </DialogActions>\n </Dialog>\n )\n}\n","import type { BlockBoundWitness } from '@xyo-network/chain-model'\nimport { useEffect, useRef } from 'react'\n\nexport type PollingState = 'paused' | 'running'\n\nexport const useOnBlock = (\n initialHeadNumber?: number,\n onAddBlock?: (block: BlockBoundWitness) => Promise<void>,\n liveHead?: BlockBoundWitness,\n pollingState?: PollingState,\n) => {\n /**\n * Note: blocksWhilePaused is a ref because we don't want to re-render the component when it changes.\n * But, since we get new blockComponents regardless, the hook rerenders anyway so consumers can get\n * the latest blocksWhilePaused value without having to rely on a state update.\n */\n const blocksWhilePaused = useRef<BlockBoundWitness[]>([])\n // Because the useEffect has liveHead AND pollingState, every time the polling state changes, the hook will\n // run a second time with the live head from the previous run. This is why we need to keep track of the last\n // live head so we can compare it to the current live head and prevent the hook from adding the same block twice\n const lastLiveHead = useRef<BlockBoundWitness | undefined>(liveHead)\n\n useEffect(() => {\n // use lastLiveHead to prevent the hook from adding the same block multiple times\n if (lastLiveHead.current?.block === liveHead?.block) return\n\n if (liveHead && onAddBlock) {\n // update lastLiveHead\n lastLiveHead.current = liveHead\n\n // if the polling state is paused and the block is new, add it to the blocksWhilePaused array\n const isNewBlock = initialHeadNumber !== liveHead.block && liveHead.block !== blocksWhilePaused.current[0]?.block\n if (pollingState === 'paused' && isNewBlock) {\n blocksWhilePaused.current.push(liveHead)\n } else if (pollingState === 'running') {\n // if the polling state is running, add the blocksWhilePaused\n if (blocksWhilePaused.current.length > 0) {\n for (const block of blocksWhilePaused.current) {\n void onAddBlock(block)\n }\n // clear the blocksWhilePaused array\n blocksWhilePaused.current = []\n }\n // add the liveHead block\n void onAddBlock(liveHead)\n }\n }\n }, [liveHead, pollingState])\n\n return blocksWhilePaused.current\n}\n","import type { TablePaginationActionsProps } from '@xyo-network/react-payload-table'\nimport { TablePaginationActions } from '@xyo-network/react-payload-table'\nimport React from 'react'\n\nexport interface BlockChainPaginationProps extends TablePaginationActionsProps {}\n\nexport const BlockChainPagination: React.FC<BlockChainPaginationProps> = ({\n count = 0, onPageChange, page, rowsPerPage = 10,\n}) => {\n return <TablePaginationActions count={count} onPageChange={onPageChange} page={page} rowsPerPage={rowsPerPage} />\n}\n","import type { MouseEvent } from 'react'\nimport { useMemo, useState } from 'react'\n\nimport type { BlockChainRenderComponent } from '../../../../types/index.ts'\n\nexport const useChainPagination = (pageSize: number, blockComponents?: BlockChainRenderComponent[]) => {\n const [page, setPage] = useState(0)\n\n const paginatedBlockComponents = useMemo(() => {\n const startIndex = page * pageSize\n const endIndex = startIndex + pageSize\n return blockComponents?.slice(startIndex, endIndex)\n }, [blockComponents, page, pageSize])\n\n const onPageChange = (_event: MouseEvent<HTMLButtonElement>, newPage: number) => {\n setPage(newPage)\n }\n\n return {\n onPageChange, page, paginatedBlockComponents,\n }\n}\n","import { ErrorRender } from '@xylabs/react-error'\nimport { FlexCol } from '@xylabs/react-flexbox'\nimport { ChainProducersAnalyzer } from '@xyo-network/chain-protocol'\nimport React, { useMemo } from 'react'\n\nimport type { ChainAnalyzers } from '../../../../../context/index.ts'\nimport { ChainAnalyzersProvider, ChainPollingProvider } from '../../../../../context/index.ts'\nimport type { BlockChainRenderFlexboxProps, RemoteBlockChainRenderFlexboxProps } from '../../../../../types/index.ts'\nimport { BlockHeadingFlexbox } from '../../../../block/index.ts'\nimport { MemoizedPollingControlsFlexbox } from '../../../controls/index.ts'\nimport { BlockListAnimated } from '../../../list/index.ts'\nimport { useDynamicBlockRenderComponents, useRemoteBlockChainRenderProps } from '../hooks/index.ts'\n\nconst Base: React.FC<BlockChainRenderFlexboxProps> = ({ blockChainRenderProps, ...props }) => {\n const {\n errors, blockChainRenderComponents, blocksWhilePaused, pollingState, updatePollingState,\n } = useDynamicBlockRenderComponents(BlockHeadingFlexbox, blockChainRenderProps)\n\n return (\n <FlexCol alignItems=\"start\" {...props}>\n {errors?.map((error, index) => <ErrorRender error={error} key={index} scope=\"DynamicBlockchainRenderFlexboxInner\" />)}\n <MemoizedPollingControlsFlexbox\n blocksBehind={blocksWhilePaused?.length}\n pollingState={pollingState}\n setPollingState={updatePollingState}\n />\n <BlockListAnimated blockChainRenderComponents={blockChainRenderComponents} />\n </FlexCol>\n )\n}\n\nconst WithAnalysis: React.FC<BlockChainRenderFlexboxProps> = ({ blockChainRenderProps, ...props }) => {\n const { chainInformation } = blockChainRenderProps ?? {}\n\n const analyzers = useMemo(() => {\n if (chainInformation) {\n return { producers: new ChainProducersAnalyzer() } as ChainAnalyzers\n }\n }, [chainInformation])\n\n return (\n <ChainAnalyzersProvider analyzers={analyzers}>\n <ChainPollingProvider>\n <DynamicBlockchainRenderFlexbox.Base blockChainRenderProps={blockChainRenderProps} {...props} />\n </ChainPollingProvider>\n </ChainAnalyzersProvider>\n )\n}\n\nconst WithRemote: React.FC<RemoteBlockChainRenderFlexboxProps> = ({\n url, chainArchivistModuleId, blockChainRenderProps: blockChainRenderPropsArg, ...props\n}) => {\n const { error, blockChainRenderProps } = useRemoteBlockChainRenderProps(chainArchivistModuleId, url, blockChainRenderPropsArg)\n\n return (\n <>\n <ErrorRender error={error} scope=\"RemoteChainProviderFlexbox\" />\n <DynamicBlockchainRenderFlexbox.WithAnalysis blockChainRenderProps={blockChainRenderProps} {...props} />\n </>\n )\n}\n\nexport const DynamicBlockchainRenderFlexbox = {\n Base, WithAnalysis, WithRemote,\n}\n","import { AnimatedList } from '@xylabs/react-animation'\nimport React from 'react'\n\nimport type { BlockListComponentProps } from '../../../types/index.ts'\nimport { BlockListWrapperFlexBox } from '../styled/index.ts'\n\nexport const BlockListAnimated: React.FC<BlockListComponentProps> = ({ blockChainRenderComponents }) => {\n return (\n <BlockListWrapperFlexBox\n alignItems=\"stretch\"\n width=\"100%\"\n >\n <AnimatedList\n fullWidth\n items={blockChainRenderComponents}\n />\n </BlockListWrapperFlexBox>\n )\n}\n","import { styled } from '@mui/material'\nimport { FlexCol } from '@xylabs/react-flexbox'\n\n// Target the first visible child (first actual child is a hidden div) and hide the after pseudo element that visually links blocks together\nexport const BlockListWrapperFlexBox = styled(FlexCol, { name: 'BlockListWrapperFlexbox' })(() => ({\n '& > div:nth-of-type(2) .block-heading-flexbox .divider-spacer': {\n // hide the spacer for the first element\n visibility: 'hidden',\n },\n '& > div:nth-of-type(2) .block-heading-flexbox .divider': {\n // keep the first element divider at 0 height so we can animate it to the correct height\n // when the next block comes in\n height: 0,\n },\n}))\n","import type { ComponentType } from 'react'\nimport { useMemo } from 'react'\n\nimport { useChainPollingContext } from '../../../../../context/index.ts'\nimport { useChainIteratorParams, useChainIteratorStore } from '../../../../../hooks/index.ts'\nimport type { BlockChainRenderProps, BlockComponentWithTxsProps } from '../../../../../types/index.ts'\nimport { useDynamicBlockComponents } from '../../../../block/index.ts'\nimport { useOnBlock } from '../../../hooks/index.ts'\n\n// Note: This is a hook but could easily be bundled up in a class with callbacks\nexport const useDynamicBlockRenderComponents = (\n BlockComponent: ComponentType<BlockComponentWithTxsProps>,\n blockChainRenderProps?: BlockChainRenderProps,\n) => {\n const { maxBlocks } = blockChainRenderProps ?? {}\n\n const chainIteratorParams = useMemo(() => blockChainRenderProps ?? {}, [blockChainRenderProps])\n\n const [params, paramsError] = useChainIteratorParams(chainIteratorParams)\n\n const { blockChainRenderComponents, onAddBlock } = useDynamicBlockComponents(BlockComponent, params, maxBlocks)\n\n const { head: liveHead } = useChainIteratorStore(params)\n\n const { pollingState, updatePollingState } = useChainPollingContext()\n\n const blocksWhilePaused = useOnBlock(blockChainRenderComponents[0]?.block.block, onAddBlock, liveHead, pollingState)\n\n return {\n errors: [paramsError],\n blockChainRenderComponents,\n blocksWhilePaused,\n updatePollingState,\n pollingState,\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport type {\n BlockBoundWitness, EventingChainBlockNumberIterator, HeadEventArgs,\n XyoChainIteratorParams,\n} from '@xyo-network/chain-model'\nimport { XyoChainBlockNumberIterator } from '@xyo-network/chain-services'\n\nexport type Listener = (...args: Array<unknown>) => void\n\nexport type ChainIteratorStoreValues = { chainIterator: XyoChainBlockNumberIterator; error?: Error; head: BlockBoundWitness }\n\nexport class ChainIteratorStore {\n private _chainIterator: EventingChainBlockNumberIterator | undefined\n private _externalListeners: Listener[] = []\n private _internalUnsubscribes: WeakRef<() => void>[] = []\n private _values: ChainIteratorStoreValues | undefined\n\n get chainIterator(): EventingChainBlockNumberIterator {\n return assertEx(this._chainIterator, () => 'ChainIteratorStore has not been initialized')\n }\n\n get values(): ChainIteratorStoreValues {\n return assertEx(this._values, () => 'ChainIteratorStore values have not been initialized')\n }\n\n static async create(params: XyoChainIteratorParams): Promise<ChainIteratorStore> {\n // create the classes\n const instance = new ChainIteratorStore()\n const chainIterator = await XyoChainBlockNumberIterator.create(params)\n\n // set the chainIterator\n instance._chainIterator = chainIterator\n\n // set the initial values\n instance._values = {\n chainIterator,\n head: (await chainIterator.head()),\n }\n\n // set the internal listeners\n const headUpdatedListener = ({ blocks }: HeadEventArgs) => {\n instance._values = {\n chainIterator,\n head: blocks?.[0],\n }\n instance.emitChange()\n }\n\n // Add listener to the chainIterator\n const unsubscribe = chainIterator.on('headUpdated', headUpdatedListener)\n\n // track the internal listener\n const weakRefListener = new WeakRef(unsubscribe)\n instance._internalUnsubscribes.push(weakRefListener)\n\n return instance\n }\n\n cleanup() {\n for (const unsubscribeRef of this._internalUnsubscribes) {\n const unsubscribe = unsubscribeRef.deref()\n unsubscribe?.()\n }\n }\n\n getSnapshot(): Partial<ChainIteratorStoreValues> {\n return this.values\n }\n\n subscribe(onStoreChange: Listener) {\n this._externalListeners.push(onStoreChange)\n return () => {\n this._externalListeners = this._externalListeners.filter(l => l !== onStoreChange)\n }\n }\n\n private emitChange() {\n for (const listener of this._externalListeners) {\n listener()\n }\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport type { Hash } from '@xylabs/hex'\nimport { usePromise } from '@xylabs/react-promise'\nimport type { ReadArchivist } from '@xyo-network/archivist-model'\nimport { BoundWitnessBuilder } from '@xyo-network/boundwitness-builder'\nimport type { BlockBoundWitness } from '@xyo-network/chain-model'\nimport { isBlockBoundWitness } from '@xyo-network/chain-model'\n\nimport type { BlockChainIterator } from '../../types/index.ts'\n\nexport const resolveDefinedHead = async (head: Hash, chainArchivist: ReadArchivist) => {\n // get the head from the chain archivist\n const [headPayload] = await chainArchivist.get([head])\n // if the head is undefined, we need to create a new one\n if (headPayload === undefined) {\n const [currentHead] = await new BoundWitnessBuilder<BlockBoundWitness>().build()\n return currentHead\n } else {\n // if the head is a block bound witness, we can use it\n return assertEx(isBlockBoundWitness(headPayload)\n ? headPayload\n : undefined, () => `Expected a block bound witness: ${JSON.stringify(headPayload)}`)\n }\n}\n\nexport const useChainIteratorParams = ({\n chainArchivist, chainInformation, head,\n}: BlockChainIterator) => {\n return usePromise(async () => {\n if (chainArchivist && chainInformation && head) {\n const [result] = await chainArchivist.get([head])\n const foundResult = assertEx(result, () => `Head not found: ${head}`)\n const resolvedHead = assertEx(\n isBlockBoundWitness(foundResult) ? foundResult : undefined,\n () => `Head is not a boundwitness: ${JSON.stringify(foundResult)}`,\n )\n return {\n chainArchivist, chainInformation, head: resolvedHead,\n }\n }\n }, [chainArchivist, chainInformation, head])\n}\n","import { usePromise } from '@xylabs/react-promise'\nimport type { XyoChainIteratorParams } from '@xyo-network/chain-model'\nimport {\n useEffect,\n useMemo, useRef, useSyncExternalStore,\n} from 'react'\n\nimport type { ChainIteratorStoreValues } from './ChainIteratorStore.ts'\nimport { ChainIteratorStore } from './ChainIteratorStore.ts'\nimport { useChainIteratorUpdatingHead } from './useChainIteratorUpdatingHead.ts'\n\nconst stub = {} as Partial<ChainIteratorStoreValues>\n\n// Returns the latest head every time it changes\nexport const useChainIteratorStore = (chainIteratorParams?: XyoChainIteratorParams) => {\n const [chainIteratorStore] = usePromise(async () => {\n return chainIteratorParams ? await ChainIteratorStore.create(chainIteratorParams) : undefined\n }, [chainIteratorParams])\n\n const { chainIterator } = chainIteratorStore || {}\n const chainArchivist = chainIteratorParams?.chainArchivist\n\n // Update the head of the chain iterator\n const error = useChainIteratorUpdatingHead({ chainIterator, chainArchivist })\n\n useEffect(() => {\n return () => {\n if (chainIteratorStore) {\n chainIteratorStore.cleanup()\n }\n }\n }, [chainIteratorStore])\n\n const cachedSnapshot = useRef<Partial<ChainIteratorStoreValues>>({})\n\n const { getSnapShot, subscribe } = useMemo(() => {\n if (chainIteratorStore) {\n return {\n getSnapShot: () => {\n const snapshot = chainIteratorStore.getSnapshot()\n const newValues = {\n ...snapshot,\n error,\n }\n // Only update the cached snapshot if there is no cached iterator or the head has changed\n const noCachedValue = cachedSnapshot.current.chainIterator === undefined\n const newBlock = cachedSnapshot.current?.head?.block !== newValues.head?.block\n if (noCachedValue || newBlock) {\n cachedSnapshot.current = newValues\n return newValues\n }\n return cachedSnapshot.current\n },\n subscribe: chainIteratorStore.subscribe.bind(chainIteratorStore),\n }\n }\n // Return a default implementation to satisfy the hook interface\n return {\n getSnapShot: () => stub,\n subscribe: () => () => {},\n }\n }, [chainIteratorStore])\n\n return useSyncExternalStore(subscribe, getSnapShot)\n}\n","import { toHex } from '@xylabs/hex'\nimport type { ArchivistInstance } from '@xyo-network/archivist-model'\nimport type { ChainBlockNumberIterator } from '@xyo-network/chain-model'\nimport { findMostRecentBlock } from '@xyo-network/chain-protocol'\nimport { useEffect, useState } from 'react'\n\nexport interface ChainIteratorUpdatingHeadParams {\n chainArchivist?: ArchivistInstance\n chainIterator?: ChainBlockNumberIterator\n interval?: number\n maxBlocks?: number\n}\n\n// Polls the chain archivist for new blocks and updates the chain iterator head\nexport const useChainIteratorUpdatingHead = ({\n chainIterator, interval = 500, maxBlocks, chainArchivist,\n}: ChainIteratorUpdatingHeadParams): Error | undefined => {\n const [error, setError] = useState<Error>()\n\n useEffect(() => {\n let pollArchivistTimeout: NodeJS.Timeout | undefined\n\n const pollingFunction = async () => {\n if (chainIterator && chainArchivist) {\n try {\n const currentHead = await chainIterator.head()\n const mostRecentBlock = await findMostRecentBlock(chainArchivist)\n if (currentHead && mostRecentBlock) {\n const currentBlockNumber = currentHead?.block ?? -1\n const nextBlockNumber = mostRecentBlock.block\n if (nextBlockNumber > currentBlockNumber) {\n console.debug('Found more recent head:', toHex(nextBlockNumber))\n console.debug('Updating head:', `${toHex(nextBlockNumber)}`)\n await chainIterator.updateHead(mostRecentBlock)\n console.debug('Updated head:', `${toHex(nextBlockNumber)}`)\n }\n }\n } catch (e) {\n setError(e as Error)\n console.error(e)\n }\n }\n\n // Schedule the next polling function\n pollArchivistTimeout = setTimeout(() => void pollingFunction(), interval)\n }\n\n // Start the polling function\n void pollingFunction()\n\n return () => clearInterval(pollArchivistTimeout)\n }, [interval, chainIterator, chainArchivist, maxBlocks])\n\n return error\n}\n","import { assertEx } from '@xylabs/assert'\nimport { usePromise } from '@xylabs/react-promise'\nimport type { BlockBoundWitness, XyoChainIteratorParams } from '@xyo-network/chain-model'\nimport { isBlockBoundWitness } from '@xyo-network/chain-model'\nimport { XyoChainBlockNumberIterator } from '@xyo-network/chain-services'\n\nconst iterateChain = async (chainIteratorParams?: XyoChainIteratorParams, maxDepth?: number) => {\n const { chainArchivist, head } = chainIteratorParams ?? {} as XyoChainIteratorParams\n if (chainArchivist && head) {\n const headPayload = assertEx(isBlockBoundWitness(head) ? head : null, () => 'Head is not a Block Bound Witness')\n // confirm the head is a block\n const headBlockBoundWitness = assertEx(isBlockBoundWitness(headPayload) ? headPayload : null, () => 'Invalid head block')\n // create the chain iterator\n const chainIterator = await XyoChainBlockNumberIterator.create({ head: headBlockBoundWitness, chainArchivist })\n\n // get head of the chain\n let block = await chainIterator.head()\n // create the blocks array\n const blocks: BlockBoundWitness[] = [block]\n\n // track the depth\n let depth = 1\n // iterate the chain\n while (block) {\n // get the next block\n const [, next] = await chainIterator.previous(block.block, 2)\n // if there is no next block, break\n if (!next) break\n // push the next block\n blocks.push(next)\n // set the next block as the current block\n block = next\n // increment the depth\n depth++\n // if max depth is set and we have reached it, break\n if ((maxDepth && depth >= maxDepth) || block?.block === 0) break\n }\n return blocks\n }\n}\n\nexport const useIterateChain = (\n chainIteratorParams?: XyoChainIteratorParams,\n maxDepth?: number,\n) => {\n return usePromise(async () => {\n return await iterateChain(chainIteratorParams, maxDepth)\n }, [chainIteratorParams, maxDepth])\n}\n","import { usePromise } from '@xylabs/react-promise'\nimport type { ModuleIdentifier } from '@xyo-network/module-model'\nimport { useMemo } from 'react'\n\nimport { getChainArchivistFromBridge } from '../../../../../lib/index.ts'\nimport type { BlockChainRenderBaseProps, BlockChainRenderProps } from '../../../../../types/index.ts'\n\n/** take blockChainRenderProps and remote archivist props and return with resolved chainArchivist */\nexport const useRemoteBlockChainRenderProps = (\n chainArchivistModuleId?: ModuleIdentifier,\n url?: string,\n blockChainRenderPropsArg?: BlockChainRenderProps,\n): BlockChainRenderBaseProps => {\n const [chainArchivist, chainArchivistError] = usePromise(async () => {\n if (url && chainArchivistModuleId) {\n return await getChainArchivistFromBridge({ url, chainArchivistModuleId })\n }\n }, [url, chainArchivistModuleId])\n\n const blockChainRenderProps: BlockChainRenderProps = useMemo(() => ({\n ...blockChainRenderPropsArg,\n chainArchivist,\n }), [blockChainRenderPropsArg, chainArchivist])\n\n return {\n blockChainRenderProps,\n error: chainArchivistError,\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport type { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { asArchivistInstance } from '@xyo-network/archivist-model'\nimport type { HttpBridgeConfig } from '@xyo-network/bridge-http'\nimport { HttpBridge, HttpBridgeConfigSchema } from '@xyo-network/bridge-http'\nimport type { ModuleIdentifier } from '@xyo-network/module-model'\n\nexport interface BridgedChainArchivistParams {\n chainArchivistModuleId: ModuleIdentifier\n url: string\n}\n\nexport const getChainArchivistFromBridge = async (params: BridgedChainArchivistParams): Promise<ArchivistInstance> => {\n const { url, chainArchivistModuleId } = params\n const config: HttpBridgeConfig = { schema: HttpBridgeConfigSchema, client: { url } }\n const bridge = await HttpBridge.create({ config })\n\n const resolved = await bridge.resolve(chainArchivistModuleId)\n const mod = assertEx(resolved, () => `Module ${chainArchivistModuleId} not found`)\n return assertEx(asArchivistInstance(mod), () => `Module ${chainArchivistModuleId} is not an archivist`)\n}\n","import type { Promisable } from '@xylabs/promise'\nimport type { ChainInformation } from '@xyo-network/chain-model'\n\nconst id = 'ce080bf3043a40c6c8838c7e813c00ab53df1684'\n\nexport const getChainInformation = (): Promisable<ChainInformation> => {\n const chainInformation: ChainInformation = { id }\n return chainInformation\n}\n","import { ErrorRender } from '@xylabs/react-error'\nimport { FlexCol, FlexGrowRow } from '@xylabs/react-flexbox'\nimport { ChainProducersAnalyzer } from '@xyo-network/chain-protocol'\nimport React, { useMemo } from 'react'\n\nimport type { ChainAnalyzers } from '../../../../../context/index.ts'\nimport { ChainAnalyzersProvider } from '../../../../../context/index.ts'\nimport type { BlockChainRenderFlexboxProps } from '../../../../../types/index.ts'\nimport { BlockHeadingFlexbox } from '../../../../block/index.ts'\nimport { BlockListAnimated } from '../../../list/index.ts'\nimport { BlockChainPagination } from '../../../pagination/index.ts'\nimport { ChainAnalyzerStatsDialogFromContext } from '../../../stats/index.ts'\nimport { useStaticBlockRenderComponents } from '../hooks/index.ts'\n\nconst Base: React.FC<BlockChainRenderFlexboxProps> = ({ blockChainRenderProps, ...props }) => {\n const {\n blockComponents, errors, paginatedBlockComponents, onPageChange, page, pageSize,\n } = useStaticBlockRenderComponents(BlockHeadingFlexbox, blockChainRenderProps)\n\n return (\n <FlexCol alignItems=\"start\" gap={2} width=\"100%\" {...props}>\n {errors?.map((error, index) => <ErrorRender error={error} key={index} scope=\"StaticBlockchainFlexboxInner\" />)}\n {paginatedBlockComponents?.length\n ? (\n <FlexGrowRow justifyContent=\"space-between\" width=\"100%\">\n <ChainAnalyzerStatsDialogFromContext />\n <BlockChainPagination count={blockComponents?.length ?? 0} onPageChange={onPageChange} page={page} rowsPerPage={pageSize} />\n </FlexGrowRow>\n )\n : null}\n <BlockListAnimated blockChainRenderComponents={paginatedBlockComponents} />\n </FlexCol>\n )\n}\n\nconst WithAnalysis: React.FC<BlockChainRenderFlexboxProps> = ({ blockChainRenderProps, ...props }) => {\n const { chainInformation } = blockChainRenderProps ?? {}\n\n const analyzers = useMemo(() => {\n if (chainInformation) {\n return { producers: new ChainProducersAnalyzer() } as ChainAnalyzers\n }\n }, [chainInformation])\n\n return (\n <ChainAnalyzersProvider analyzers={analyzers}>\n <StaticBlockchainRenderFlexBox.Base blockChainRenderProps={blockChainRenderProps} {...props} />\n </ChainAnalyzersProvider>\n )\n}\n\nexport const StaticBlockchainRenderFlexBox = {\n Base,\n WithAnalysis,\n}\n","import { exists } from '@xylabs/exists'\nimport type { ComponentType } from 'react'\nimport { useMemo } from 'react'\n\nimport { useChainIteratorParams, useIterateChain } from '../../../../../hooks/index.ts'\nimport type { BlockChainRenderProps, BlockComponentWithTxsProps } from '../../../../../types/index.ts'\nimport { useStaticBlockComponents } from '../../../../block/index.ts'\nimport { useChainPagination } from '../../../pagination/index.ts'\n\nconst DEFAULT_PAGE_SIZE = 25\n\n// Note: This is a hook but could easily be bundled up in a class with callbacks\nexport const useStaticBlockRenderComponents = (BlockComponent: ComponentType<BlockComponentWithTxsProps>, blockChainRenderProps?: BlockChainRenderProps) => {\n const { maxBlocks } = blockChainRenderProps ?? {}\n const pageSize = blockChainRenderProps?.pageSize ?? DEFAULT_PAGE_SIZE\n\n const chainIteratorParams = useMemo(() => blockChainRenderProps ?? {}, [blockChainRenderProps])\n\n const [params, paramsError] = useChainIteratorParams(chainIteratorParams)\n\n const [blocks, blocksError] = useIterateChain(params, maxBlocks)\n\n const { blockComponents, errors: blockComponentsError } = useStaticBlockComponents(BlockComponent, params, blocks)\n\n const {\n onPageChange, page, paginatedBlockComponents,\n } = useChainPagination(pageSize, blockComponents)\n\n return {\n paginatedBlockComponents,\n blockComponents,\n errors: [paramsError, blocksError, blockComponentsError].filter(exists),\n onPageChange,\n page,\n pageSize,\n }\n}\n","import type { FlexBoxProps } from '@xylabs/react-flexbox'\nimport { FlexCol } from '@xylabs/react-flexbox'\nimport type { Payload } from '@xyo-network/payload-model'\nimport { JsonViewerEx } from '@xyo-network/react-payload-raw-info'\nimport type { ComponentType } from 'react'\nimport React, { useState } from 'react'\n\nimport type { PayloadBuilderComponentProps } from './BuilderComponentProps.ts'\n\nexport interface PayloadBuilderFlexboxProps extends PayloadBuilderComponentProps, FlexBoxProps {\n BuilderComponent: ComponentType<PayloadBuilderComponentProps>\n}\n\nexport const PayloadBuilderFlexbox: React.FC<PayloadBuilderFlexboxProps> = ({\n BuilderComponent, onBuild, ...props\n}) => {\n const [payload, setPayload] = useState<Payload>()\n\n const onBuildLocal = (payload: Payload) => {\n onBuild?.(payload)\n setPayload(payload)\n }\n\n return (\n <FlexCol gap={2} {...props}>\n <BuilderComponent onBuild={onBuildLocal} />\n {payload && <JsonViewerEx value={payload} />}\n </FlexCol>\n )\n}\n","import { Button, FormControl } from '@mui/material'\nimport type { Address } from '@xylabs/hex'\nimport { createProducerChainStakeIntent } from '@xyo-network/chain-ethereum'\nimport type { ChainStakeIntent } from '@xyo-network/chain-model'\nimport type { MouseEventHandler } from 'react'\nimport React, { useMemo, useState } from 'react'\n\nimport { BlockNumberTextField, XyoAddressTextField } from '../../fields/index.ts'\nimport type { PayloadBuilderComponentProps } from '../BuilderComponentProps.ts'\n\nexport interface ProducerIntentBuilderFormProps extends PayloadBuilderComponentProps {}\n\nexport const ProducerIntentBuilderForm: React.FC<ProducerIntentBuilderFormProps> = ({ onBuild }) => {\n const [delegate, setDelegate] = useState<Address>()\n const [exp, setExp] = useState<number>()\n const [nbf, setNbf] = useState<number>()\n const [blockRangeError, setBlockRangeError] = useState<Error>()\n\n const intentPayload: ChainStakeIntent | undefined = useMemo(() => {\n // confirm we have values for all fields\n if (exp !== undefined && nbf !== undefined) {\n // validate that expires is greater than not before\n if (exp <= nbf) {\n setBlockRangeError(new Error('Expires must be greater than Not Before'))\n } else {\n setBlockRangeError(undefined)\n if (delegate) {\n // create the payload\n const payload = createProducerChainStakeIntent(delegate, exp, nbf)\n return payload\n }\n }\n }\n }, [delegate, exp, nbf])\n\n const onBuildLocal: MouseEventHandler<HTMLButtonElement> = () => {\n if (onBuild && intentPayload) onBuild?.(intentPayload)\n }\n\n return (\n <>\n <FormControl fullWidth>\n <XyoAddressTextField label=\"Delegate\" name=\"delegate\" onAddressChanged={setDelegate} required size=\"small\" />\n </FormControl>\n <FormControl fullWidth>\n <BlockNumberTextField\n errorMessage={blockRangeError?.message}\n label=\"Expires\"\n name=\"exp\"\n onBlockNumberChanged={setExp}\n required\n size=\"small\"\n />\n </FormControl>\n <FormControl fullWidth>\n <BlockNumberTextField\n errorMessage={blockRangeError?.message}\n label=\"Not Before\"\n name=\"nbf\"\n onBlockNumberChanged={setNbf}\n required\n size=\"small\"\n />\n </FormControl>\n <Button disabled={!intentPayload} variant=\"contained\" onClick={onBuildLocal}>Build</Button>\n </>\n )\n}\n","import type { StandardTextFieldProps, Theme } from '@mui/material'\nimport {\n FormControl, FormHelperText, TextField,\n} from '@mui/material'\nimport type { ChangeEventHandler } from 'react'\nimport React, { useState } from 'react'\n\ninterface BlockNumberTextFieldProps extends StandardTextFieldProps {\n errorMessage?: string\n onBlockNumberChanged?: (blockNumber?: number) => void\n}\n\nexport const BlockNumberTextField: React.FC<BlockNumberTextFieldProps> = ({\n errorMessage, onBlockNumberChanged, onChange, ...props\n}) => {\n const [blockNumber, setBlockNumber] = useState<number>()\n\n const handleChange: ChangeEventHandler<HTMLInputElement> = (e) => {\n const value = e.target.value.replaceAll(/\\D/g, '') // Remove non-digit characters\n setBlockNumber(value ? Number(value) : undefined)\n onBlockNumberChanged?.(Number.parseInt(value))\n onChange?.(e)\n }\n\n return (\n <FormControl fullWidth>\n <TextField\n error={!!errorMessage}\n onChange={handleChange}\n type=\"number\"\n value={blockNumber ?? ''}\n {...props}\n />\n {errorMessage && <FormHelperText sx={{ color: (theme: Theme) => theme.palette.error.main }}>{errorMessage}</FormHelperText>}\n </FormControl>\n )\n}\n","import type { StandardTextFieldProps, Theme } from '@mui/material'\nimport {\n FormControl, FormHelperText, TextField,\n} from '@mui/material'\nimport type { Address } from '@xylabs/hex'\nimport { asAddress } from '@xylabs/hex'\nimport React, { useEffect, useState } from 'react'\n\ninterface XyoAddressTextFieldProps extends Omit<StandardTextFieldProps, 'value'> {\n onAddressChanged?: (address?: Address) => void\n // increment the value to trigger rerender with empty input\n resetValue?: number\n}\n\nexport const XyoAddressTextField: React.FC<XyoAddressTextFieldProps> = ({\n onAddressChanged, onChange, resetValue, ...props\n}) => {\n const [address, setAddress] = useState<string>('')\n const [addressError, setAddressError] = useState<Error>()\n\n useEffect(() => setAddress(''), [resetValue])\n\n const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n const { value } = event.target\n onChange?.(event)\n\n const xyoAddress = asAddress(value)\n if (xyoAddress) {\n onAddressChanged?.(xyoAddress)\n }\n\n setAddressError(undefined)\n setAddress(value)\n }\n\n const handleBlur = () => {\n const xyoAddress = asAddress(address)\n if (!xyoAddress) {\n setAddressError(new Error('Invalid address'))\n onAddressChanged?.()\n }\n }\n\n return (\n <FormControl fullWidth>\n <TextField\n error={!!addressError}\n onBlur={handleBlur}\n onChange={handleChange}\n value={address}\n {...props}\n />\n {addressError && <FormHelperText sx={{ color: (theme: Theme) => theme.palette.error.main }}>{addressError.message}</FormHelperText>}\n </FormControl>\n )\n}\n","import React from 'react'\n\nimport type { PayloadBuilderComponentProps } from '../BuilderComponentProps.ts'\nimport { PayloadBuilderFlexbox } from '../Flexbox.tsx'\nimport { TransferBuilderForm } from './Form.tsx'\n\nexport const TransferBuilderFlexbox: React.FC<PayloadBuilderComponentProps> = ({ onBuild, ...props }) => (\n <PayloadBuilderFlexbox\n gap={4}\n alignItems=\"start\"\n BuilderComponent={TransferBuilderForm}\n onBuild={onBuild}\n {...props}\n />\n)\n","import { Button, FormControl } from '@mui/material'\nimport type { Address } from '@xylabs/hex'\nimport type { Elevated, Transfer } from '@xyo-network/chain-model'\nimport {\n elevate,\n TransferSchema,\n} from '@xyo-network/chain-model'\nimport type { MouseEventHandler } from 'react'\nimport React, { useMemo, useState } from 'react'\n\nimport { XyoAddressTextField } from '../../fields/index.ts'\nimport type { PayloadBuilderComponentProps } from '../BuilderComponentProps.ts'\nimport { SingleTransferBuilderFlexbox } from './builder/index.ts'\nimport type { TransferAmount } from './Transfer.ts'\n\nexport interface TransferBuilderFormProps extends PayloadBuilderComponentProps {}\n\nexport const TransferBuilderForm: React.FC<TransferBuilderFormProps> = ({ onBuild }) => {\n const [fromAddress, setFromAddress] = useState<Address>()\n const [transfers, setTransfers] = useState<TransferAmount[]>([])\n\n const transferPayload: Elevated<Transfer> | undefined = useMemo(() => {\n if (fromAddress && transfers.length > 0) {\n const transfersRecord = {} as Transfer['transfers']\n for (const transfer of transfers) {\n transfersRecord[transfer.to] = transfer.amount\n }\n\n return elevate({\n schema: TransferSchema,\n transfers: transfersRecord,\n epoch: Date.now(),\n }, fromAddress)\n }\n }, [fromAddress, transfers])\n\n const onBuildLocal: MouseEventHandler<HTMLButtonElement> = () => {\n if (onBuild && transferPayload) onBuild?.(transferPayload)\n }\n\n const onTransferAdded = () => {\n const transferAmount: TransferAmount = {\n amount: '',\n transferId: Date.now(),\n to: '',\n }\n setTransfers(prev => [...prev, transferAmount])\n }\n\n const onTransferRemoved = (transferId: number) => {\n setTransfers(prev => prev.filter(transfer => transfer.transferId !== transferId))\n }\n\n const onTransferUpdated = (singleTransfer: TransferAmount) => {\n setTransfers(prev => prev.map((transfer) => {\n if (transfer.transferId === singleTransfer.transferId) {\n return singleTransfer\n }\n return transfer\n }))\n }\n\n return (\n <>\n <FormControl fullWidth>\n <XyoAddressTextField label=\"From\" name=\"from\" onAddressChanged={setFromAddress} required size=\"small\" />\n </FormControl>\n <Button onClick={onTransferAdded} size=\"small\" variant=\"contained\">Add Transfer</Button>\n {transfers.map(transfer => (\n <SingleTransferBuilderFlexbox\n key={transfer.transferId}\n onTransferUpdated={onTransferUpdated}\n onRemoveTransfer={onTransferRemoved}\n singleTransfer={transfer}\n sx={{ width: '100%' }}\n />\n ))}\n <Button disabled={!transferPayload} variant=\"contained\" onClick={onBuildLocal}>Build</Button>\n </>\n )\n}\n","import { RemoveCircle } from '@mui/icons-material'\nimport {\n FormControl, Icon, IconButton,\n} from '@mui/material'\nimport type { Address } from '@xylabs/hex'\nimport { toHex } from '@xylabs/hex'\nimport type { FlexBoxProps } from '@xylabs/react-flexbox'\nimport { FlexRow } from '@xylabs/react-flexbox'\nimport { BigIntInput } from '@xyo-network/react-shared'\nimport React, {\n useEffect, useMemo, useState,\n} from 'react'\n\nimport { XyoAddressTextField } from '../../../fields/index.ts'\nimport type { TransferAmount } from '../Transfer.ts'\n\nexport interface SingleTransferBuilderFlexboxProps extends FlexBoxProps {\n onRemoveTransfer?: (transferId: number) => void\n onTransferUpdated?: (transferAmount: TransferAmount) => void\n singleTransfer: TransferAmount\n}\n\nexport const SingleTransferBuilderFlexbox: React.FC<SingleTransferBuilderFlexboxProps> = ({\n onTransferUpdated, onRemoveTransfer, singleTransfer, ...props\n}) => {\n const [toAddress, setToAddress] = useState<Address>()\n const [amount, setAmount] = useState<bigint>()\n\n const transferAmount = useMemo(() => {\n if (toAddress && amount) {\n return {\n ...singleTransfer,\n amount: toHex(amount),\n to: toAddress,\n }\n }\n }, [toAddress, amount])\n\n useEffect(() => {\n if (transferAmount) onTransferUpdated?.(transferAmount)\n }, [transferAmount])\n\n return (\n <FlexRow alignItems=\"start\" gap={1} {...props}>\n <FormControl fullWidth>\n <XyoAddressTextField label=\"To\" name=\"to\" onAddressChanged={setToAddress} required size=\"small\" />\n </FormControl>\n <FormControl fullWidth>\n <BigIntInput.TextField label=\"Amount\" name=\"amount\" onChangeFixedPoint={setAmount} required size=\"small\" />\n </FormControl>\n <IconButton onClick={() => onRemoveTransfer?.(singleTransfer.transferId)}><Icon><RemoveCircle /></Icon></IconButton>\n </FlexRow>\n )\n}\n","import { Account } from '@xyo-network/account'\nimport { buildRandomChain } from '@xyo-network/chain-ethereum'\nimport type { HydratedBlock } from '@xyo-network/chain-model'\nimport { flattenHydratedBlocks } from '@xyo-network/chain-protocol'\n\nexport const buildRandomBlockChain = async (blockCount = 10) => {\n // Create a producer\n const initialBlockProducer = await Account.random()\n\n // Create multiple blocks\n const blocks: HydratedBlock[] = await buildRandomChain(initialBlockProducer, blockCount)\n return flattenHydratedBlocks(blocks)\n}\n\nexport const buildRandomBlockChainBlocksOnly = async (blockCount = 10) => {\n const chain = await buildRandomChain(await Account.random(), blockCount)\n const blocks = chain.map(block => block[0])\n return blocks\n}\n","import { CircularProgress } from '@mui/material'\nimport type { Decorator } from '@storybook/react'\nimport { usePromise } from '@xylabs/react-promise'\nimport { MemoryArchivist } from '@xyo-network/archivist-memory'\nimport { ArchivistConfigSchema } from '@xyo-network/archivist-model'\nimport { isBlockBoundWitness } from '@xyo-network/chain-model'\nimport React, { useEffect } from 'react'\n\nimport { getChainInformation } from '../lib/index.ts'\nimport type { BlockChainRenderBaseProps } from '../types/index.ts'\nimport { buildRandomBlockChain } from './buildRandomBlockchain.ts'\n\nexport const ChainArchivistDecorator: Decorator = (Story, context) => {\n const [randomBlockChain] = usePromise(async () => await buildRandomBlockChain(), [])\n const [blockChainRenderProps, blockChainRenderPropsError] = usePromise(async () => {\n if (randomBlockChain) {\n const chainArchivist = await MemoryArchivist.create({ config: { schema: ArchivistConfigSchema, name: 'ChainArchivist' } })\n await chainArchivist.insert(randomBlockChain)\n const chainInformation = await getChainInformation()\n return { chainArchivist, chainInformation }\n }\n }, [randomBlockChain])\n\n useEffect(() => {\n if (blockChainRenderPropsError) {\n console.error(blockChainRenderPropsError)\n }\n }, [blockChainRenderPropsError])\n\n const props = {\n ...context,\n args: {\n ...context.args,\n blockChainRenderProps: {\n ...(context.args.blockChainRenderProps as BlockChainRenderBaseProps),\n ...blockChainRenderProps,\n head: randomBlockChain?.toReversed().find(isBlockBoundWitness)?._hash,\n },\n },\n }\n\n return blockChainRenderProps?.chainArchivist ? <Story {...props} /> : <><CircularProgress /></>\n}\n","import { CircularProgress } from '@mui/material'\nimport type { Decorator } from '@storybook/react'\nimport { delay } from '@xylabs/delay'\nimport { usePromise } from '@xylabs/react-promise'\nimport { MemoryArchivist } from '@xyo-network/archivist-memory'\nimport { ArchivistConfigSchema } from '@xyo-network/archivist-model'\nimport type { BlockBoundWitness } from '@xyo-network/chain-model'\nimport { isBlockBoundWitness } from '@xyo-network/chain-model'\nimport type { Payload } from '@xyo-network/payload-model'\nimport React, { useEffect, useState } from 'react'\n\nimport { getChainInformation } from '../lib/index.ts'\nimport type { BlockChainRenderBaseProps } from '../types/index.ts'\nimport { buildRandomBlockChain } from './buildRandomBlockchain.ts'\n\nlet chainArchivistRef: MemoryArchivist | undefined\n\nexport const ChainArchivistDelayedInsertDecorator: Decorator = (Story, context) => {\n const [firstBlock, setFirstBlock] = useState<BlockBoundWitness>()\n\n const [randomBlockChain] = usePromise(async () => await buildRandomBlockChain(), [])\n const [chainArchivist] = usePromise(async () => {\n if (chainArchivistRef) {\n return chainArchivistRef\n } else {\n chainArchivistRef = await MemoryArchivist.create({ config: { schema: ArchivistConfigSchema, name: 'ChainArchivist' } })\n return chainArchivistRef\n }\n }, [])\n\n const [, delayedInsertError] = usePromise(async () => {\n if (chainArchivist && randomBlockChain) {\n // track the next set of payloads for the next block\n const nextBlockPayloads: Payload[] = []\n\n // TODO - use buildRandomChain helper\n for (const payload of randomBlockChain) {\n if (isBlockBoundWitness(payload)) {\n // if we have a block, insert the block and subsequent payloads\n nextBlockPayloads.push(payload)\n\n // debug was we are inserting\n // console.log('pre-insert block', nextBlockPayloads.map(payload => isBlockBoundWitness(payload) ? payload.block : null).filter(Boolean))\n\n // insert the block and subsequent payloads\n await chainArchivist.insert(nextBlockPayloads)\n\n // confirm the first block was inserted and set state so the story can load\n setFirstBlock(prev => prev || payload)\n\n // clear the array\n nextBlockPayloads.length = 0\n\n // we know we are gonna get a new block, so simulate the delay\n await delay(1000)\n } else {\n nextBlockPayloads.push(payload)\n }\n }\n }\n }, [chainArchivist, randomBlockChain])\n\n useEffect(() => {\n if (delayedInsertError) {\n console.error(delayedInsertError)\n }\n }, [delayedInsertError])\n\n const [blockChainRenderProps] = usePromise(async () => {\n const chainInformation = await getChainInformation()\n return { chainArchivist, chainInformation }\n }, [chainArchivist])\n\n const props = {\n ...context,\n args: {\n ...context.args,\n blockChainRenderProps: {\n ...(context.args.blockChainRenderProps as BlockChainRenderBaseProps),\n ...blockChainRenderProps,\n head: randomBlockChain?.find(isBlockBoundWitness)?._hash,\n },\n },\n }\n\n return firstBlock ? <Story {...props} /> : <CircularProgress />\n}\n","import type { Decorator } from '@storybook/react'\nimport { assertEx } from '@xylabs/assert'\nimport { usePromise } from '@xylabs/react-promise'\nimport { isBlockBoundWitness } from '@xyo-network/chain-model'\nimport { XyoChainBlockNumberIterator } from '@xyo-network/chain-services'\nimport { findFirstMatching } from '@xyo-network/chain-utils'\nimport React from 'react'\n\nimport { ChainInfoProvider } from '../context/index.ts'\nimport type { BridgedChainArchivistParams } from '../lib/index.ts'\nimport { getChainArchivistFromBridge, getChainInformation } from '../lib/index.ts'\n\nconst archivistConfig: BridgedChainArchivistParams = {\n url: 'http://localhost:8080',\n chainArchivistModuleId: 'XYOPublic:XYOChain:Chain',\n}\n\nexport const ChainInfoContextDecorator: Decorator = (Story, context) => {\n const [chainInformationResponse] = usePromise(async () => {\n return await getChainInformation()\n }, [])\n\n const chainInformation = chainInformationResponse\n\n const [chainArchivist] = usePromise(async () => {\n return await getChainArchivistFromBridge(archivistConfig)\n }, [])\n\n const [chainIterator] = usePromise(async () => {\n if (chainArchivist && chainInformation) {\n const firstMatch = assertEx(await findFirstMatching(chainArchivist), () => `No head found in archivist: ${chainArchivist.id} `)\n const head = assertEx(isBlockBoundWitness(firstMatch) ? firstMatch : undefined, () => `Expected a block bound witness: ${JSON.stringify(firstMatch)}`)\n return await XyoChainBlockNumberIterator.create({ chainArchivist, head })\n }\n }, [chainArchivist, chainInformation])\n\n return (\n <ChainInfoProvider chainArchivist={chainArchivist} chainInformation={chainInformation} chainIterator={chainIterator}>\n <Story {...context} />\n </ChainInfoProvider>\n )\n}\n"],"mappings":"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","names":["FlexCol","FlexRow","BWVerification","HashHeadingPaper","usePayloadHash","React","createContextEx","ChainAnalyzersContext","hydrateBlock","PayloadBuilder","React","useCallback","useMemo","useState","ChainAnalyzersProvider","analyzers","analyzersProp","children","analyzersState","setAnalyzersState","useState","statsUpdated","setStatsUpdated","Date","now","useMemo","addAnalyzers","useCallback","prev","onBlock","chainArchivist","block","hash","PayloadBuilder","hydratedBlock","hydrateBlock","analyzer","Object","values","value","provided","ChainAnalyzersContext","useContextEx","useChainAnalyzersContext","required","useContextEx","ChainAnalyzersContext","createContextEx","ChainInfoContext","React","useEffect","useMemo","useState","ChainInfoProvider","children","chainArchivist","chainArchivistProp","chainInformation","chainInformationProp","chainIterator","chainIteratorProp","setChainArchivist","useState","setChainInformation","setChainIterator","updateChainArchivist","updateChainInformation","updateChainIterator","useEffect","chainState","useMemo","provided","React","ChainInfoContext","value","createContextEx","ChainPollingContext","React","useCallback","useMemo","useState","ChainPollingProvider","children","pollingState","pollingStateProp","setPollingState","useState","updatePollingState","useCallback","newPollingState","value","useMemo","provided","React","ChainPollingContext","useContextEx","useChainPollingContext","required","useContextEx","ChainPollingContext","Button","FormControl","TextField","FlexCol","React","ChainTransactionBuilder","onSubmitTx","handleSubmit","event","preventDefault","formData","FormData","currentTarget","chainTx","chain","get","gas","nbf","Number","parseInt","exp","nonce","React","form","onSubmit","style","width","FlexCol","gap","FormControl","fullWidth","TextField","label","name","required","Button","type","variant","FormControl","FormHelperText","TextField","React","useState","ChainTransactionNetwork","network","onNetworkChange","props","error","setError","useState","handleChange","event","url","URL","target","value","undefined","console","React","FormControl","fullWidth","TextField","label","name","onChange","required","FormHelperText","sx","color","Alert","Grid2","Typography","axios","ErrorRender","FlexGrowCol","Account","ArchivistInsertQuerySchema","QueryBoundWitnessBuilder","buildTransaction","PayloadBuilder","React","useState","BETA_PENDING_TRANSACTIONS_ARCHIVIST","SubmitChainTransaction","network","setNetwork","useState","URL","result","setResult","error","setError","onSubmitTx","chainTx","Error","randomAccount","Account","random","transactionBoundWitness","buildTransaction","chain","BigInt","gas","nbf","exp","insertQuery","PayloadBuilder","schema","ArchivistInsertQuerySchema","build","queryBoundWitness","QueryBoundWitnessBuilder","payloads","query","signer","response","axios","post","href","data","errors","map","e","message","join","onNetworkChange","url","React","Grid2","container","size","xs","sm","md","FlexGrowCol","alignItems","gap","ChainTransactionNetwork","ChainTransactionBuilder","length","Alert","severity","ErrorRender","Typography","variant","pre","JSON","stringify","Difference","Chip","Icon","React","useMemo","TransactionCountChip","transactions","sx","props","label","useMemo","length","React","Chip","avatar","Icon","Difference","title","undefined","display","alignItems","justifyContent","ContentCopy","ContentCopyIcon","Paid","Alert","AlertTitle","Collapse","Snackbar","Typography","ErrorRender","FlexGrowCol","FlexGrowRow","FlexRow","QuickTipButton","React","Fragment","useMemo","useState","TransactionsQuickTipButton","block","chainArchivist","props","transactions","transactionsError","useTxsFromBlock","copied","setCopied","useState","showError","setShowError","useMemo","onCopy","transactionHash","navigator","clipboard","writeText","setTimeout","React","QuickTipButton","Icon","Paid","disabled","length","hoverText","disableDialog","dialogProps","fullWidth","maxWidth","FlexGrowCol","gap","alignItems","map","transaction","hash","Fragment","key","FlexGrowRow","justifyContent","ContentCopyIcon","sx","cursor","onClick","Typography","overflow","textOverflow","whiteSpace","_hash","FlexRow","Collapse","in","unmountOnExit","Alert","AlertTitle","Snackbar","open","onClose","ErrorRender","error","scope","useRef","useState","useAnchorElement","anchorEl","setAnchorEl","useState","anchorRef","useRef","open","Boolean","handleClick","event","currentTarget","handleClose","useEvent","useBlockHeadingEvents","args","useEvent","useMemo","useBlockProducer","block","useMemo","producer","addresses","isBlockBoundWitness","useState","blockProducer","block","addresses","React","isTransactionBoundWitness","PayloadBuilder","txsFromBlock","chainArchivist","block","payloads","get","payload_hashes","transactionPayloads","filter","payload","isTransactionBoundWitness","PayloadBuilder","hashPairs","buildBlockChainRenderComponent","BlockComponent","blockComponentProps","chainArchivist","block","remainingProps","blockTxs","txsFromBlock","txHashes","map","_","hash","item","child","React","transactions","key","toString","buildBlockHeadingComponent","BlockHeadingFlexbox","useDynamicBlockComponents","BlockComponent","params","maxBlocks","chainArchivist","blockChainRenderComponents","setBlockChainRenderComponents","useState","onBlock","useChainAnalyzersContext","onAddBlock","block","isBlockBoundWitness","blockComponentProps","newBlockComponent","buildBlockChainRenderComponent","blockComponents","newBlockComponents","length","pop","usePromise","useStaticBlockComponents","BlockComponent","params","blocks","onBlock","useChainAnalyzersContext","blockComponents","blockComponentsError","usePromise","resolvedBlockWithStorage","chainArchivist","Promise","all","map","block","blockComponentProps","defaultExpanded","buildBlockChainRenderComponent","errors","usePromise","useTxsFromBlock","chainArchivist","block","usePromise","txsFromBlock","Divider","Stack","React","LinkedDivider","React","Stack","className","justifyContent","sx","width","height","Divider","orientation","flexItem","borderRightWidth","transition","MoreVert","IconButton","Menu","BWJsonMenuItem","BWPreviousHashMenuItem","React","BlockMenuExpanded","block","anchorEl","anchorRef","open","handleClick","handleClose","useAnchorElement","React","IconButton","ref","size","onClick","MoreVert","fontSize","Menu","anchorOrigin","horizontal","vertical","onClose","BWPreviousHashMenuItem","boundwitness","dense","onDialogClose","BWJsonMenuItem","Chip","EthAddress","BlockiesAvatar","React","useMemo","BlockProducerChip","block","props","sharedAddress","addresses","blockProducer","useMemo","producer","find","address","shortedBlockProducer","EthAddress","parse","toShortString","avatar","undefined","React","BlockiesAvatar","blockiesOptions","seed","Chip","label","title","BlockHeadingFlexbox","block","defaultExpanded","transactions","hash","usePayloadHash","blockHeadingRef","blockHeadingListener","useBlockHeadingEvents","pollingState","useChainPollingContext","expanded","handleTransactionCountClick","event","stopPropagation","JSON","stringify","React","FlexCol","className","alignItems","ref","onClick","LinkedDivider","HashHeadingPaper","heading","undefined","toString","paperProps","sx","p","width","AdornmentEnd","FlexRow","gap","BlockProducerChip","TransactionCountChip","e","BWVerification","iconColors","boundwitness","span","style","display","transition","maxWidth","BlockMenuExpanded","identiconProps","size","Link","TableCell","Tooltip","React","useEvent","useLinkedBlockItem","noun","data","ref","dispatch","useEvent","handleClick","event","preventDefault","console","warn","BlockNumberTableCell","block","linked","props","ref","handleClick","useLinkedBlockItem","toString","blockNumberBigInt","React","TableCell","Tooltip","title","span","Link","onClick","sx","cursor","Avatar","Chip","TableCell","Tooltip","Identicon","usePayloadHash","React","BlockHashTableCell","block","identiconProps","linked","props","hash","usePayloadHash","ref","handleClick","useLinkedBlockItem","shortenedHash","slice","React","TableCell","Tooltip","title","Chip","avatar","Avatar","sx","background","Identicon","size","value","label","onClick","undefined","Code","Button","Dialog","DialogActions","DialogContent","DialogTitle","IconButton","TableCell","ellipsize","FlexRow","JsonViewerEx","usePayloadHash","React","useState","BlockJsonViewTableCell","block","props","open","setOpen","useState","onClose","hash","usePayloadHash","title","ellipsize","React","TableCell","FlexRow","sx","width","IconButton","onClick","Code","Dialog","DialogTitle","DialogContent","JsonViewerEx","value","DialogActions","display","flexDirection","justifyContent","Button","variant","TableCell","Tooltip","FlexRow","React","BlockProducerTableCell","block","linked","producerChipProps","props","ref","handleClick","useLinkedBlockItem","JSON","stringify","producer","useBlockProducer","React","TableCell","Tooltip","title","FlexRow","sx","width","BlockProducerChip","onClick","undefined","Error","Link","TableCell","Tooltip","React","BlockTransactionCountTableCell","block","chainArchivist","linked","props","txs","error","useTxsFromBlock","ref","handleClick","useLinkedBlockItem","JSON","stringify","React","TableCell","span","Tooltip","title","message","Error","color","Link","onClick","sx","cursor","length","TableCell","FlexRow","BWVerification","React","BlockVerificationTableCell","block","linked","props","ref","handleClick","useLinkedBlockItem","toString","React","TableCell","FlexRow","sx","width","BWVerification","onClick","undefined","iconColors","boundwitness","TableBody","TableCell","TableHead","TableRow","TableEx","React","BlockchainTableEx","ref","children","props","React","TableEx","TableHead","TableRow","TableCell","align","TableBody","displayName","TableRow","React","useMemo","BlockChainTableRow","block","defaultExpanded","linked","props","linkedTableCellProps","useMemo","defaultTableCellProps","React","TableRow","BlockHashTableCell","BlockNumberTableCell","BlockTransactionCountTableCell","BlockProducerTableCell","BlockVerificationTableCell","BlockJsonViewTableCell","Autorenew","Pause","Alert","AlertTitle","Grow","Icon","IconButton","Tooltip","FlexRow","React","memo","QueryStats","Dialog","DialogContent","DialogTitle","IconButton","React","useState","ListItem","styled","Typography","ErrorRender","FlexCol","isChainSummaryProducers","React","useMemo","Table","TableBody","TableCell","TableHead","TableRow","useTheme","BlockiesAvatar","React","ChainProducerStatsTable","producers","props","theme","useTheme","React","Table","TableHead","TableRow","TableCell","TableBody","map","producer","key","address","BlockiesAvatar","blockiesOptions","seed","sx","height","spacing","width","blocksProduced","toString","rewardsEarned","BlockProducerStatsFlexbox","payload","props","producer","producerError","useMemo","isChainSummaryProducers","undefined","Error","producersArray","Object","values","producers","React","FlexCol","alignItems","gap","ErrorRender","error","scope","Typography","fontSize","ChainProducerStatsTable","StyledListItem","styled","ListItem","paddingTop","paddingBottom","ChainAnalyzerStatsDialog","props","analyzers","statsUpdated","useChainAnalyzersContext","React","Dialog","DialogTitle","DialogContent","Object","entries","map","id","analyzer","div","key","BlockProducerStatsFlexbox","payload","result","ChainAnalyzerStatsDialogFromContext","open","setOpen","useState","handleClose","IconButton","onClick","QueryStats","onClose","alpha","createSvgIcon","keyframes","styled","React","PulseSvgIcon","svg","viewBox","version","xmlns","g","transform","circle","className","cx","cy","r","pulse1","pulse2","StyledPulseSvgIcon","theme","animation","fill","palette","success","main","divider","PollingControlsFlexbox","blocksBehind","pollingState","setPollingState","paused","running","React","FlexRow","justifyContent","width","gap","IconButton","onClick","title","Pause","Autorenew","ChainAnalyzerStatsDialogFromContext","Grow","in","Tooltip","Alert","sx","py","px","cursor","severity","AlertTitle","mb","Icon","StyledPulseSvgIcon","className","MemoizedPollingControlsFlexbox","memo","Button","Dialog","DialogActions","DialogContent","React","TransactionsDialog","props","React","Dialog","DialogContent","DialogActions","Button","variant","onClick","e","onClose","useEffect","useRef","useOnBlock","initialHeadNumber","onAddBlock","liveHead","pollingState","blocksWhilePaused","useRef","lastLiveHead","useEffect","current","block","isNewBlock","push","length","TablePaginationActions","React","BlockChainPagination","count","onPageChange","page","rowsPerPage","React","TablePaginationActions","useMemo","useState","useChainPagination","pageSize","blockComponents","page","setPage","useState","paginatedBlockComponents","useMemo","startIndex","endIndex","slice","onPageChange","_event","newPage","ErrorRender","FlexCol","ChainProducersAnalyzer","React","useMemo","AnimatedList","React","styled","FlexCol","BlockListWrapperFlexBox","name","visibility","height","BlockListAnimated","blockChainRenderComponents","React","BlockListWrapperFlexBox","alignItems","width","AnimatedList","fullWidth","items","useMemo","assertEx","XyoChainBlockNumberIterator","ChainIteratorStore","_chainIterator","_externalListeners","_internalUnsubscribes","_values","chainIterator","assertEx","values","create","params","instance","XyoChainBlockNumberIterator","head","headUpdatedListener","blocks","emitChange","unsubscribe","on","weakRefListener","WeakRef","push","cleanup","unsubscribeRef","deref","getSnapshot","subscribe","onStoreChange","filter","l","listener","assertEx","usePromise","BoundWitnessBuilder","isBlockBoundWitness","resolveDefinedHead","head","chainArchivist","headPayload","get","undefined","currentHead","BoundWitnessBuilder","build","assertEx","isBlockBoundWitness","JSON","stringify","useChainIteratorParams","chainInformation","usePromise","result","foundResult","resolvedHead","usePromise","useEffect","useMemo","useRef","useSyncExternalStore","toHex","findMostRecentBlock","useEffect","useState","useChainIteratorUpdatingHead","chainIterator","interval","maxBlocks","chainArchivist","error","setError","useState","useEffect","pollArchivistTimeout","pollingFunction","currentHead","head","mostRecentBlock","findMostRecentBlock","currentBlockNumber","block","nextBlockNumber","console","debug","toHex","updateHead","e","setTimeout","clearInterval","stub","useChainIteratorStore","chainIteratorParams","chainIteratorStore","usePromise","ChainIteratorStore","create","undefined","chainIterator","chainArchivist","error","useChainIteratorUpdatingHead","useEffect","cleanup","cachedSnapshot","useRef","getSnapShot","subscribe","useMemo","snapshot","getSnapshot","newValues","noCachedValue","current","newBlock","head","block","bind","useSyncExternalStore","assertEx","usePromise","isBlockBoundWitness","XyoChainBlockNumberIterator","iterateChain","chainIteratorParams","maxDepth","chainArchivist","head","headPayload","assertEx","isBlockBoundWitness","headBlockBoundWitness","chainIterator","XyoChainBlockNumberIterator","create","block","blocks","depth","next","previous","push","useIterateChain","usePromise","useDynamicBlockRenderComponents","BlockComponent","blockChainRenderProps","maxBlocks","chainIteratorParams","useMemo","params","paramsError","useChainIteratorParams","blockChainRenderComponents","onAddBlock","useDynamicBlockComponents","head","liveHead","useChainIteratorStore","pollingState","updatePollingState","useChainPollingContext","blocksWhilePaused","useOnBlock","block","errors","usePromise","useMemo","assertEx","asArchivistInstance","HttpBridge","HttpBridgeConfigSchema","getChainArchivistFromBridge","params","url","chainArchivistModuleId","config","schema","HttpBridgeConfigSchema","client","bridge","HttpBridge","create","resolved","resolve","mod","assertEx","asArchivistInstance","id","getChainInformation","chainInformation","useRemoteBlockChainRenderProps","chainArchivistModuleId","url","blockChainRenderPropsArg","chainArchivist","chainArchivistError","usePromise","getChainArchivistFromBridge","blockChainRenderProps","useMemo","error","Base","blockChainRenderProps","props","errors","blockChainRenderComponents","blocksWhilePaused","pollingState","updatePollingState","useDynamicBlockRenderComponents","BlockHeadingFlexbox","React","FlexCol","alignItems","map","error","index","ErrorRender","key","scope","MemoizedPollingControlsFlexbox","blocksBehind","length","setPollingState","BlockListAnimated","WithAnalysis","chainInformation","analyzers","useMemo","producers","ChainProducersAnalyzer","ChainAnalyzersProvider","ChainPollingProvider","DynamicBlockchainRenderFlexbox","WithRemote","url","chainArchivistModuleId","blockChainRenderPropsArg","useRemoteBlockChainRenderProps","ErrorRender","FlexCol","FlexGrowRow","ChainProducersAnalyzer","React","useMemo","exists","useMemo","DEFAULT_PAGE_SIZE","useStaticBlockRenderComponents","BlockComponent","blockChainRenderProps","maxBlocks","pageSize","chainIteratorParams","useMemo","params","paramsError","useChainIteratorParams","blocks","blocksError","useIterateChain","blockComponents","errors","blockComponentsError","useStaticBlockComponents","onPageChange","page","paginatedBlockComponents","useChainPagination","filter","exists","Base","blockChainRenderProps","props","blockComponents","errors","paginatedBlockComponents","onPageChange","page","pageSize","useStaticBlockRenderComponents","BlockHeadingFlexbox","React","FlexCol","alignItems","gap","width","map","error","index","ErrorRender","key","scope","length","FlexGrowRow","justifyContent","ChainAnalyzerStatsDialogFromContext","BlockChainPagination","count","rowsPerPage","BlockListAnimated","blockChainRenderComponents","WithAnalysis","chainInformation","analyzers","useMemo","producers","ChainProducersAnalyzer","ChainAnalyzersProvider","StaticBlockchainRenderFlexBox","FlexCol","JsonViewerEx","React","useState","PayloadBuilderFlexbox","BuilderComponent","onBuild","props","payload","setPayload","useState","onBuildLocal","React","FlexCol","gap","JsonViewerEx","value","Button","FormControl","createProducerChainStakeIntent","React","useMemo","useState","FormControl","FormHelperText","TextField","React","useState","BlockNumberTextField","errorMessage","onBlockNumberChanged","onChange","props","blockNumber","setBlockNumber","useState","handleChange","e","value","target","replaceAll","Number","undefined","parseInt","React","FormControl","fullWidth","TextField","error","type","FormHelperText","sx","color","theme","palette","main","FormControl","FormHelperText","TextField","asAddress","React","useEffect","useState","XyoAddressTextField","onAddressChanged","onChange","resetValue","props","address","setAddress","useState","addressError","setAddressError","useEffect","handleChange","event","value","target","xyoAddress","asAddress","undefined","handleBlur","Error","React","FormControl","fullWidth","TextField","error","onBlur","FormHelperText","sx","color","theme","palette","main","message","ProducerIntentBuilderForm","onBuild","delegate","setDelegate","useState","exp","setExp","nbf","setNbf","blockRangeError","setBlockRangeError","intentPayload","useMemo","undefined","Error","payload","createProducerChainStakeIntent","onBuildLocal","React","FormControl","fullWidth","XyoAddressTextField","label","name","onAddressChanged","required","size","BlockNumberTextField","errorMessage","message","onBlockNumberChanged","Button","disabled","variant","onClick","React","Button","FormControl","elevate","TransferSchema","React","useMemo","useState","RemoveCircle","FormControl","Icon","IconButton","toHex","FlexRow","BigIntInput","React","useEffect","useMemo","useState","SingleTransferBuilderFlexbox","onTransferUpdated","onRemoveTransfer","singleTransfer","props","toAddress","setToAddress","useState","amount","setAmount","transferAmount","useMemo","toHex","to","useEffect","React","FlexRow","alignItems","gap","FormControl","fullWidth","XyoAddressTextField","label","name","onAddressChanged","required","size","BigIntInput","TextField","onChangeFixedPoint","IconButton","onClick","transferId","Icon","RemoveCircle","TransferBuilderForm","onBuild","fromAddress","setFromAddress","useState","transfers","setTransfers","transferPayload","useMemo","length","transfersRecord","transfer","to","amount","elevate","schema","TransferSchema","epoch","Date","now","onBuildLocal","onTransferAdded","transferAmount","transferId","prev","onTransferRemoved","filter","onTransferUpdated","singleTransfer","map","React","FormControl","fullWidth","XyoAddressTextField","label","name","onAddressChanged","required","size","Button","onClick","variant","SingleTransferBuilderFlexbox","key","onRemoveTransfer","sx","width","disabled","TransferBuilderFlexbox","onBuild","props","React","PayloadBuilderFlexbox","gap","alignItems","BuilderComponent","TransferBuilderForm","Account","buildRandomChain","flattenHydratedBlocks","buildRandomBlockChain","blockCount","initialBlockProducer","Account","random","blocks","buildRandomChain","flattenHydratedBlocks","buildRandomBlockChainBlocksOnly","chain","map","block","CircularProgress","usePromise","MemoryArchivist","ArchivistConfigSchema","isBlockBoundWitness","React","useEffect","ChainArchivistDecorator","Story","context","randomBlockChain","usePromise","buildRandomBlockChain","blockChainRenderProps","blockChainRenderPropsError","chainArchivist","MemoryArchivist","create","config","schema","ArchivistConfigSchema","name","insert","chainInformation","getChainInformation","useEffect","console","error","props","args","head","toReversed","find","isBlockBoundWitness","_hash","React","CircularProgress","CircularProgress","delay","usePromise","MemoryArchivist","ArchivistConfigSchema","isBlockBoundWitness","React","useEffect","useState","chainArchivistRef","ChainArchivistDelayedInsertDecorator","Story","context","firstBlock","setFirstBlock","useState","randomBlockChain","usePromise","buildRandomBlockChain","chainArchivist","MemoryArchivist","create","config","schema","ArchivistConfigSchema","name","delayedInsertError","nextBlockPayloads","payload","isBlockBoundWitness","push","insert","prev","length","delay","useEffect","console","error","blockChainRenderProps","chainInformation","getChainInformation","props","args","head","find","_hash","React","CircularProgress","assertEx","usePromise","isBlockBoundWitness","XyoChainBlockNumberIterator","findFirstMatching","React","archivistConfig","url","chainArchivistModuleId","ChainInfoContextDecorator","Story","context","chainInformationResponse","usePromise","getChainInformation","chainInformation","chainArchivist","getChainArchivistFromBridge","chainIterator","firstMatch","assertEx","findFirstMatching","id","head","isBlockBoundWitness","undefined","JSON","stringify","XyoChainBlockNumberIterator","create","React","ChainInfoProvider"]}
1
+ {"version":3,"sources":["../../src/components/block/BlockHeadingFlexbox.tsx","../../src/context/analyzer/context.ts","../../src/context/analyzer/Provider.tsx","../../src/context/analyzer/use.ts","../../src/context/chain/Context.ts","../../src/context/chain/Provider.tsx","../../src/context/polling/context.ts","../../src/context/polling/Provider.tsx","../../src/context/polling/use.ts","../../src/components/transactions/submit/Builder.tsx","../../src/components/transactions/submit/Network.tsx","../../src/components/transactions/submit/SubmitChain.tsx","../../src/components/transactions/TransactionCountChip.tsx","../../src/components/transactions/TransactionsQuickTipButton.tsx","../../src/components/block/hooks/useAnchorElement.ts","../../src/components/block/hooks/useBlockHeadingEvents.ts","../../src/components/block/hooks/useBlockProducer.ts","../../src/components/block/hooks/useDynamicBlockComponents.ts","../../src/components/block/helpers/blockProducer.ts","../../src/components/block/helpers/buildBlockChainRenderComponent.tsx","../../src/components/block/helpers/tsxFromBlock.ts","../../src/components/block/hooks/useStaticBlockComponents.ts","../../src/components/block/hooks/useTxsFromBlock.ts","../../src/components/block/LinkedDivider.tsx","../../src/components/block/menu/Expanded.tsx","../../src/components/block/ProducerChip.tsx","../../src/components/block/table/cell/BlockNumber.tsx","../../src/components/block/table/cell/hooks/useLinkedBlockItem.tsx","../../src/components/block/table/cell/Hash.tsx","../../src/components/block/table/cell/JsonView.tsx","../../src/components/block/table/cell/Producer.tsx","../../src/components/block/table/cell/TransactionCount.tsx","../../src/components/block/table/cell/Verification.tsx","../../src/components/block/table/Ex.tsx","../../src/components/block/table/row/TableRow.tsx","../../src/components/chain/controls/PollingControlsFlexbox.tsx","../../src/components/chain/stats/Dialog.tsx","../../src/components/chain/stats/producer/ProducerFlexbox.tsx","../../src/components/chain/stats/producer/Table.tsx","../../src/components/chain/controls/PulseSvgIcon.tsx","../../src/components/chain/dialog/Dialog.tsx","../../src/components/chain/hooks/useOnBlock.ts","../../src/components/chain/pagination/BlockChainPagination.tsx","../../src/components/chain/pagination/hooks/usePagination.tsx","../../src/components/chain/render/dynamic/flexbox/Flexbox.tsx","../../src/components/chain/list/Animated.tsx","../../src/components/chain/styled/BlockListWrapperFlexbox.tsx","../../src/components/chain/render/dynamic/hooks/useDynamicBlockRenderComponents.ts","../../src/hooks/chain-iterator/ChainIteratorStore.ts","../../src/hooks/chain-iterator/useChainIteratorParams.ts","../../src/hooks/chain-iterator/useChainIteratorStore.ts","../../src/hooks/chain-iterator/useChainIteratorUpdatingHead.ts","../../src/hooks/useIterateChain.ts","../../src/components/chain/render/dynamic/hooks/useRemoteBlockChainRenderProps.ts","../../src/lib/getChainArchivist.ts","../../src/lib/getChainInformation.ts","../../src/components/chain/render/static/flexbox/Flexbox.tsx","../../src/components/chain/render/static/hooks/useStaticBlockRenderComponents.ts","../../src/components/payload/builder/Flexbox.tsx","../../src/components/payload/builder/producer-intent/Form.tsx","../../src/components/payload/fields/BlockNumberTextField.tsx","../../src/components/payload/fields/XyoAddressTextField.tsx","../../src/components/payload/builder/transfer/Flexbox.tsx","../../src/components/payload/builder/transfer/Form.tsx","../../src/components/payload/builder/transfer/builder/SingleFlexbox.tsx","../../src/stories/buildRandomBlockchain.ts","../../src/stories/ChainArchivistDecorator.tsx","../../src/stories/ChainArchivistDelayedInsertDecorator.tsx","../../src/stories/ChainInfoContextDecorator.tsx"],"sourcesContent":["import type { Hash } from '@xylabs/hex'\nimport { FlexCol, FlexRow } from '@xylabs/react-flexbox'\nimport { BWVerification, HashHeadingPaper } from '@xyo-network/react-chain-boundwitness'\nimport { usePayloadHash } from '@xyo-network/react-shared'\nimport React from 'react'\n\nimport { useChainPollingContext } from '../../context/index.ts'\nimport type { BlockComponentWithTxsProps } from '../../types/index.ts'\nimport { TransactionCountChip } from '../transactions/index.ts'\nimport { useBlockHeadingEvents } from './hooks/index.ts'\nimport { LinkedDivider } from './LinkedDivider.tsx'\nimport { BlockMenuExpanded } from './menu/index.ts'\nimport { BlockProducerChip } from './ProducerChip.tsx'\n\nexport const BlockHeadingFlexbox: React.FC<BlockComponentWithTxsProps> = ({\n block, defaultExpanded, transactions,\n}) => {\n const hash = usePayloadHash(block)\n const [blockHeadingRef, blockHeadingListener] = useBlockHeadingEvents<HTMLDivElement>()\n const { pollingState } = useChainPollingContext()\n const expanded = (pollingState === 'paused') || defaultExpanded\n\n const handleTransactionCountClick = (event: React.MouseEvent, transactions: Hash[]) => {\n event.stopPropagation()\n blockHeadingListener('transaction-count', 'click', JSON.stringify(transactions))\n }\n\n return (\n <FlexCol className=\"block-heading-flexbox\" alignItems=\"stretch\" ref={blockHeadingRef} onClick={() => blockHeadingListener('block-hash', 'click', hash)}>\n <LinkedDivider />\n <HashHeadingPaper\n hash={hash}\n heading={block?.block === undefined ? '' : block.block.toString()}\n paperProps={{ sx: { p: 1, width: '100%' } }}\n AdornmentEnd={(\n <FlexRow gap={1}>\n <BlockProducerChip block={block} />\n <TransactionCountChip\n onClick={e => handleTransactionCountClick(e, transactions ?? [])}\n transactions={transactions}\n />\n <BWVerification iconColors boundwitness={block} />\n <span style={{\n // maxWidth is required for css animation to work and 28px is the width of the icon button\n display: 'flex', transition: 'max-width .5s', maxWidth: expanded ? '28px' : 0,\n }}\n >\n <BlockMenuExpanded block={block} />\n </span>\n </FlexRow>\n )}\n identiconProps={{ p: 0.75, size: 18 }}\n />\n </FlexCol>\n )\n}\n","import { createContextEx } from '@xyo-network/react-shared'\n\nimport type { ChainAnalyzersState } from './state.ts'\n\nexport const ChainAnalyzersContext = createContextEx<ChainAnalyzersState>()\n","import type { ReadArchivist } from '@xyo-network/archivist-model'\nimport type { BlockBoundWitness } from '@xyo-network/chain-model'\nimport { hydrateBlock } from '@xyo-network/chain-protocol'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { PropsWithChildren } from 'react'\nimport React, {\n useCallback, useMemo, useState,\n} from 'react'\n\nimport { ChainAnalyzersContext } from './context.ts'\nimport type { ChainAnalyzers, ChainAnalyzersState } from './state.ts'\n\nexport interface ChainAnalyzersProviderProps extends PropsWithChildren {\n analyzers?: ChainAnalyzers\n}\n\nexport const ChainAnalyzersProvider: React.FC<ChainAnalyzersProviderProps> = ({ analyzers: analyzersProp, children }) => {\n const [analyzersState, setAnalyzersState] = useState<ChainAnalyzers>(analyzersProp ?? {} as ChainAnalyzers)\n const [statsUpdated, setStatsUpdated] = useState(Date.now())\n\n const analyzers = useMemo(() => ({ ...analyzersProp, ...analyzersState }), [analyzersProp])\n\n const addAnalyzers: ChainAnalyzersState['addAnalyzers'] = useCallback((analyzers: ChainAnalyzersState['analyzers']) => {\n if (!analyzers) return\n setAnalyzersState(prev => ({ ...prev, ...analyzers }))\n }, [])\n\n const onBlock = useCallback(async (chainArchivist: ReadArchivist, block: BlockBoundWitness) => {\n const hash = await PayloadBuilder.hash(block)\n const hydratedBlock = await hydrateBlock(chainArchivist, hash)\n\n for (const analyzer of Object.values(analyzers)) {\n void analyzer.onBlock(hydratedBlock)\n setStatsUpdated(Date.now())\n }\n }, [analyzers])\n\n const value = useMemo(() => ({\n analyzers, addAnalyzers, onBlock, statsUpdated, provided: true,\n }), [analyzers, addAnalyzers, onBlock, statsUpdated])\n\n return (\n <ChainAnalyzersContext value={value}>{children}</ChainAnalyzersContext>\n )\n}\n","import { useContextEx } from '@xyo-network/react-shared'\n\nimport { ChainAnalyzersContext } from './context.ts'\nimport type { ChainAnalyzersState } from './state.ts'\n\nexport const useChainAnalyzersContext = (required = false) => useContextEx<ChainAnalyzersState>(ChainAnalyzersContext, 'ChainAnalyzers', required)\n","import { createContextEx } from '@xyo-network/react-shared'\n\nimport type { ChainInfoState } from './State.ts'\n\nexport const ChainInfoContext = createContextEx<ChainInfoState>()\n","import type { PropsWithChildren } from 'react'\nimport React, { useMemo, useState } from 'react'\n\nimport { ChainInfoContext } from './Context.ts'\nimport type { ChainInfoState } from './State.ts'\n\ninterface ChainInfoProviderProps extends PropsWithChildren, Omit<ChainInfoState, 'provided'> {\n}\n\nexport const ChainInfoProvider: React.FC<ChainInfoProviderProps> = ({\n children, chainArchivist: chainArchivistProp, chainInformation: chainInformationProp, chainIterator: chainIteratorProp,\n}) => {\n const [chainArchivist, setChainArchivist] = useState<ChainInfoState['chainArchivist']>(chainArchivistProp)\n const [chainInformation, setChainInformation] = useState<ChainInfoState['chainInformation']>(chainInformationProp)\n const [chainIterator, setChainIterator] = useState<ChainInfoState['chainIterator']>(chainIteratorProp)\n\n const updateChainArchivist = (chainArchivist: ChainInfoState['chainArchivist']) => {\n setChainArchivist(chainArchivist)\n }\n const updateChainInformation = (chainInformation: ChainInfoState['chainInformation']) => {\n setChainInformation(chainInformation)\n }\n const updateChainIterator = (chainIterator: ChainInfoState['chainIterator']) => {\n setChainIterator(chainIterator)\n }\n\n useMemo(() => {\n updateChainArchivist(chainArchivistProp)\n }, [chainArchivistProp])\n\n useMemo(() => {\n updateChainInformation(chainInformationProp)\n }, [chainInformationProp])\n\n useMemo(() => {\n updateChainIterator(chainIteratorProp)\n }, [chainIteratorProp])\n\n const chainState = useMemo(() => ({\n chainArchivist,\n chainInformation,\n chainIterator,\n updateChainArchivist,\n updateChainInformation,\n updateChainIterator,\n provided: true,\n }), [chainArchivist, chainInformation, chainIterator, updateChainArchivist, updateChainInformation, updateChainIterator])\n\n return (\n <ChainInfoContext value={chainState}>\n {children}\n </ChainInfoContext>\n )\n}\n","import { createContextEx } from '@xyo-network/react-shared'\n\nimport type { ChainPollingState } from './state.ts'\n\nexport const ChainPollingContext = createContextEx<ChainPollingState>()\n","import type { PropsWithChildren } from 'react'\nimport React, {\n useCallback, useMemo, useState,\n} from 'react'\n\nimport { ChainPollingContext } from './context.ts'\nimport type { ChainPollingState, PollingState } from './state.ts'\n\nexport interface ChainPollingProviderProps extends PropsWithChildren {\n pollingState?: PollingState\n}\n\nexport const ChainPollingProvider: React.FC<ChainPollingProviderProps> = ({ children, pollingState: pollingStateProp = 'running' }) => {\n const [pollingState, setPollingState] = useState<PollingState>(pollingStateProp)\n\n const updatePollingState = useCallback((newPollingState: PollingState) => {\n setPollingState(newPollingState)\n }, [])\n\n const value = useMemo<ChainPollingState>(() => ({\n pollingState,\n provided: true,\n updatePollingState,\n }), [pollingState, updatePollingState])\n\n return <ChainPollingContext value={value}>{children}</ChainPollingContext>\n}\n","import { useContextEx } from '@xyo-network/react-shared'\n\nimport { ChainPollingContext } from './context.ts'\n\nexport const useChainPollingContext = (required = false) => useContextEx(ChainPollingContext, 'ChainPolling', required)\n","import {\n Button, FormControl, TextField,\n} from '@mui/material'\nimport type { Address, Hex } from '@xylabs/hex'\nimport { FlexCol } from '@xylabs/react-flexbox'\nimport type { TransactionBoundWitnessFields } from '@xyo-network/chain-model'\nimport React from 'react'\n\nexport interface ChainTransactionBuilder {\n onSubmitTx?: (chainTx: TransactionBoundWitnessFields) => Promise<void>\n}\n\nexport const ChainTransactionBuilder: React.FC<ChainTransactionBuilder> = ({ onSubmitTx }) => {\n const handleSubmit = async (event: React.FormEvent<HTMLFormElement>) => {\n event.preventDefault()\n const formData = new FormData(event.currentTarget)\n\n // TODO - more field level validation\n const chainTx: TransactionBoundWitnessFields = {\n chain: formData.get('chain') as Address,\n gas: formData.get('gas') as Hex,\n nbf: Number.parseInt(formData.get('nbf') as string),\n exp: Number.parseInt(formData.get('exp') as string),\n nonce: [],\n }\n\n await onSubmitTx?.(chainTx)\n }\n\n return (\n <form onSubmit={event => void handleSubmit(event)} style={{ width: '100%' }}>\n <FlexCol gap={2}>\n <FormControl fullWidth>\n <TextField label=\"Chain Address\" name=\"chain\" required />\n </FormControl>\n <FormControl fullWidth>\n <TextField label=\"Gas\" name=\"gas\" required />\n </FormControl>\n <FormControl fullWidth>\n <TextField label=\"Not Before Block\" name=\"nbf\" required />\n </FormControl>\n <FormControl fullWidth>\n <TextField label=\"Not After Block\" name=\"exp\" required />\n </FormControl>\n\n <Button type=\"submit\" variant=\"contained\">Submit</Button>\n </FlexCol>\n </form>\n )\n}\n","import type { StandardTextFieldProps } from '@mui/material'\nimport {\n FormControl, FormHelperText,\n TextField,\n} from '@mui/material'\nimport type { ChangeEventHandler } from 'react'\nimport React, { useState } from 'react'\n\nexport interface ChainTransactionNetworkProps extends StandardTextFieldProps {\n network?: URL\n onNetworkChange?: (url: URL) => void\n}\n\nexport const ChainTransactionNetwork: React.FC<ChainTransactionNetworkProps> = ({\n network, onNetworkChange, ...props\n}) => {\n const [error, setError] = useState<Error>()\n\n const handleChange: ChangeEventHandler<HTMLInputElement> = (event) => {\n try {\n const url = new URL(event.target.value)\n setError(undefined)\n onNetworkChange?.(url)\n } catch (error) {\n console.error(error)\n setError(error as Error)\n }\n }\n\n return (\n <FormControl fullWidth>\n <TextField label=\"Network\" name=\"network\" onChange={handleChange} required value={network} {...props} />\n <FormHelperText sx={{ color: error ? 'red' : undefined }}>{error ? 'Not a valid url' : 'Enter full url of archivist'}</FormHelperText>\n </FormControl>\n )\n}\n","import {\n Alert, Grid2, Typography,\n} from '@mui/material'\nimport { axios } from '@xylabs/axios'\nimport { ErrorRender } from '@xylabs/react-error'\nimport { FlexGrowCol } from '@xylabs/react-flexbox'\nimport { Account } from '@xyo-network/account'\nimport type { ApiEnvelope } from '@xyo-network/api-models'\nimport { ArchivistInsertQuerySchema } from '@xyo-network/archivist-model'\nimport { QueryBoundWitnessBuilder } from '@xyo-network/boundwitness-builder'\nimport type { TransactionBoundWitnessFields } from '@xyo-network/chain-model'\nimport { buildTransaction } from '@xyo-network/chain-protocol'\nimport type { ModuleQueryResult } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { Payload } from '@xyo-network/payload-model'\nimport React, { useState } from 'react'\n\nimport { ChainTransactionBuilder } from './Builder.tsx'\nimport { ChainTransactionNetwork } from './Network.tsx'\n\nconst BETA_PENDING_TRANSACTIONS_ARCHIVIST = 'https://beta.api.chain.xyo.network/8050fee682a2762f504d5449d8269a6f17f0b693'\n\nexport const SubmitChainTransaction: React.FC = () => {\n const [network, setNetwork] = useState<URL>(new URL(BETA_PENDING_TRANSACTIONS_ARCHIVIST))\n const [result, setResult] = useState<ModuleQueryResult>()\n const [error, setError] = useState<Error>()\n\n const onSubmitTx = async (chainTx: TransactionBoundWitnessFields) => {\n if (!network) throw new Error('Network not set')\n const randomAccount = await Account.random()\n const [transactionBoundWitness] = await buildTransaction(\n chainTx.chain,\n [],\n BigInt(`0x${chainTx.gas}`),\n randomAccount,\n chainTx.nbf,\n chainTx.exp,\n [],\n )\n\n const insertQuery = new PayloadBuilder({ schema: ArchivistInsertQuerySchema }).build()\n const [queryBoundWitness] = await new QueryBoundWitnessBuilder()\n .payloads([transactionBoundWitness as Payload])\n .query(insertQuery)\n .signer(randomAccount)\n .build()\n\n const response = await axios.post<ApiEnvelope<ModuleQueryResult>>(network.href, [queryBoundWitness, [insertQuery, transactionBoundWitness, chainTx]])\n if (response.data.errors) {\n setError(new Error(response.data.errors.map(e => e.message).join('\\n')))\n } else {\n setResult(response.data.data)\n }\n }\n\n const onNetworkChange = (url: URL) => {\n setNetwork(url)\n }\n\n return (\n <Grid2 container>\n <Grid2 size={{\n xs: 12, sm: 6, md: 4,\n }}\n >\n <FlexGrowCol alignItems=\"start\" gap={2}>\n <ChainTransactionNetwork network={network} onNetworkChange={onNetworkChange} />\n {network ? <ChainTransactionBuilder onSubmitTx={onSubmitTx} /> : null}\n {result?.[2].length === 0 ? <Alert severity=\"success\">Success</Alert> : null}\n\n {error ? <ErrorRender error={error} /> : null}\n {result?.[2] && result?.[2].length > 0 ? <ErrorRender error={new Error('Failed insert...see result below')} /> : null}\n\n {result\n ? (\n <>\n <Typography variant=\"h6\">Result:</Typography>\n <pre>{JSON.stringify(result, null, 2)}</pre>\n </>\n )\n : null}\n </FlexGrowCol>\n </Grid2>\n </Grid2>\n )\n}\n","import { Difference } from '@mui/icons-material'\nimport type { ChipProps } from '@mui/material'\nimport { Chip, Icon } from '@mui/material'\nimport type { Hash } from '@xylabs/hex'\nimport React, { useMemo } from 'react'\n\nexport interface TransactionCountChipProps extends ChipProps {\n transactions?: Hash[]\n}\n\nexport const TransactionCountChip: React.FC<TransactionCountChipProps> = ({\n transactions, sx, ...props\n}) => {\n const label = useMemo(() => {\n if (!transactions) return '0'\n return transactions?.length > 10 ? '+10' : transactions.length\n }, [transactions])\n\n return (\n <Chip\n avatar={(\n <Icon>\n <Difference />\n </Icon>\n )}\n label={`tx: ${label}`}\n title={transactions ? `Block contains ${transactions.length} transactions` : undefined}\n sx={{\n display: 'inline-flex', alignItems: 'center', justifyContent: 'center', ...sx,\n }}\n {...props}\n />\n )\n}\n","import { ContentCopy as ContentCopyIcon, Paid } from '@mui/icons-material'\nimport {\n Alert, AlertTitle, Collapse, Snackbar, Typography,\n} from '@mui/material'\nimport type { Hash } from '@xylabs/hex'\nimport { ErrorRender } from '@xylabs/react-error'\nimport {\n FlexGrowCol, FlexGrowRow, FlexRow,\n} from '@xylabs/react-flexbox'\nimport type { QuickTipButtonProps } from '@xylabs/react-quick-tip-button'\nimport { QuickTipButton } from '@xylabs/react-quick-tip-button'\nimport type { ArchivistInstance } from '@xyo-network/archivist-model'\nimport type { BlockBoundWitness } from '@xyo-network/chain-model'\nimport React, {\n Fragment, useMemo, useState,\n} from 'react'\n\nimport { useTxsFromBlock } from '../block/index.ts'\n\nexport interface TransactionsQuickTipButtonQuickTipButtonProps extends QuickTipButtonProps {\n block?: BlockBoundWitness\n chainArchivist?: ArchivistInstance\n}\n\nexport const TransactionsQuickTipButton: React.FC<TransactionsQuickTipButtonQuickTipButtonProps> = ({\n block, chainArchivist, ...props\n}) => {\n const [transactions, transactionsError] = useTxsFromBlock(chainArchivist, block)\n\n const [copied, setCopied] = useState(false)\n const [showError, setShowError] = useState(false)\n useMemo(() => transactionsError ? setShowError(true) : setShowError(false), [transactionsError])\n\n const onCopy = async (transactionHash: Hash) => {\n await navigator.clipboard.writeText(transactionHash)\n setCopied(true)\n setTimeout(() => {\n setCopied(false)\n }, 5000)\n }\n\n return (\n <>\n <QuickTipButton\n Icon={Paid}\n disabled={transactions?.length === 0}\n hoverText={`Transaction Count: ${transactions?.length ?? 0}`}\n disableDialog={transactions?.length === 0}\n dialogProps={{ fullWidth: true, maxWidth: 'md' }}\n {...props}\n >\n {transactions?.length === 0\n ? null\n : (\n <FlexGrowCol gap={1} alignItems=\"stretch\">\n {transactions?.map(([transaction, hash]) => (\n <Fragment key={hash}>\n <FlexGrowRow gap={2} justifyContent=\"start\">\n <ContentCopyIcon sx={{ cursor: 'pointer' }} onClick={() => void onCopy(hash)} />\n <Typography sx={{\n overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap',\n }}\n >\n {transaction._hash}\n </Typography>\n </FlexGrowRow>\n <FlexRow>\n <Collapse in={copied} unmountOnExit>\n <Alert>\n <AlertTitle>Previous hash copied to clipboard</AlertTitle>\n </Alert>\n </Collapse>\n </FlexRow>\n </Fragment>\n ))}\n </FlexGrowCol>\n )}\n </QuickTipButton>\n <Snackbar open={showError} onClose={() => setShowError(false)}>\n <ErrorRender error={transactionsError} scope=\"TransactionsQuickTipButton\" />\n </Snackbar>\n </>\n )\n}\n","import { useRef, useState } from 'react'\n\nexport const useAnchorElement = () => {\n const [anchorEl, setAnchorEl] = useState<null | HTMLElement>(null)\n const anchorRef = useRef<HTMLButtonElement>(null)\n const open = Boolean(anchorEl)\n\n const handleClick = (event: React.MouseEvent<HTMLElement>) => {\n setAnchorEl(event.currentTarget)\n }\n\n const handleClose = () => {\n setAnchorEl(null)\n }\n\n return {\n anchorEl, anchorRef, open, handleClick, handleClose,\n }\n}\n","import { useEvent } from '@xyo-network/react-event'\n\nexport type BlockHeaderEventNouns = 'transaction-count' | 'block-hash' | 'block-number' | 'block-producer' | 'block-verification'\n\n// NOTE: extracting the type so compilers can easily strip it off vs inlining it withing the hook\n// which causes compilation warnings.\ntype HookArgs<TElement extends HTMLElement> = Parameters<typeof useEvent<TElement, BlockHeaderEventNouns>>\n\nexport const useBlockHeadingEvents = <TElement extends HTMLElement>(...args: HookArgs<TElement>) => {\n return useEvent<TElement, BlockHeaderEventNouns>(...args)\n}\n","import type { BlockBoundWitness } from '@xyo-network/chain-model'\nimport { useMemo } from 'react'\n\nexport const useBlockProducer = (block?: BlockBoundWitness) => {\n return useMemo(() => {\n if (block) {\n const producer = block.addresses[0]\n return producer\n }\n }, [block])\n}\n","import type { BlockBoundWitness, XyoChainIteratorParams } from '@xyo-network/chain-model'\nimport { isBlockBoundWitness } from '@xyo-network/chain-model'\nimport type { ComponentType } from 'react'\nimport { useState } from 'react'\n\nimport { useChainAnalyzersContext } from '../../../context/index.ts'\nimport type {\n BlockChainRenderComponent,\n BlockComponentProps, BlockComponentWithTxsProps,\n} from '../../../types/index.ts'\nimport { buildBlockChainRenderComponent } from '../helpers/index.ts'\n\nexport const useDynamicBlockComponents = (BlockComponent: ComponentType<BlockComponentWithTxsProps>, params?: XyoChainIteratorParams, maxBlocks?: number) => {\n const { chainArchivist } = params ?? {}\n const [blockChainRenderComponents, setBlockChainRenderComponents] = useState<BlockChainRenderComponent[]>([])\n\n const { onBlock } = useChainAnalyzersContext()\n\n const onAddBlock = async (block: BlockBoundWitness) => {\n if (!isBlockBoundWitness(block) || !chainArchivist) return\n\n const blockComponentProps: BlockComponentProps = { block }\n const newBlockComponent = await buildBlockChainRenderComponent(BlockComponent, blockComponentProps, chainArchivist)\n\n if (block.block !== blockChainRenderComponents[0]?.block.block) {\n void onBlock?.(chainArchivist, block)\n\n setBlockChainRenderComponents((blockComponents) => {\n const newBlockComponents = [newBlockComponent, ...blockComponents]\n\n if (maxBlocks && newBlockComponents.length > maxBlocks) {\n // trim the last block if we exceed the max\n newBlockComponents.pop()\n }\n\n return newBlockComponents\n })\n }\n }\n\n return { blockChainRenderComponents, onAddBlock }\n}\n","import type { BlockBoundWitness } from '@xyo-network/chain-model'\n\nexport const blockProducer = (block: BlockBoundWitness) => {\n return block.addresses[0]\n}\n","import type { ArchivistInstance } from '@xyo-network/archivist-model'\nimport type { ComponentType } from 'react'\nimport React from 'react'\n\nimport type {\n BlockChainRenderComponent,\n BlockComponentProps, BlockComponentWithTxsProps,\n} from '../../../types/index.ts'\nimport { BlockHeadingFlexbox } from '../BlockHeadingFlexbox.tsx'\nimport { txsFromBlock } from './tsxFromBlock.ts'\n\nexport const buildBlockChainRenderComponent = async (\n BlockComponent: ComponentType<BlockComponentWithTxsProps>,\n blockComponentProps: BlockComponentProps,\n chainArchivist: ArchivistInstance,\n) => {\n const { block, ...remainingProps } = blockComponentProps\n const blockTxs = await txsFromBlock(chainArchivist, block)\n const txHashes = blockTxs.map(([_, hash]) => hash)\n\n const item: BlockChainRenderComponent = {\n child: (\n <BlockComponent\n block={block}\n transactions={txHashes}\n {...remainingProps}\n />\n ),\n key: block.block.toString(),\n block,\n }\n return item\n}\n\nexport const buildBlockHeadingComponent = async (\n blockComponentProps: BlockComponentProps,\n chainArchivist: ArchivistInstance,\n) => {\n return await buildBlockChainRenderComponent(BlockHeadingFlexbox, blockComponentProps, chainArchivist)\n}\n","import type { ReadArchivist } from '@xyo-network/archivist-model'\nimport type { BlockBoundWitness } from '@xyo-network/chain-model'\nimport { isTransactionBoundWitness } from '@xyo-network/chain-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\n\nexport const txsFromBlock = async (chainArchivist: ReadArchivist, block: BlockBoundWitness) => {\n const payloads = await chainArchivist.get(block.payload_hashes)\n const transactionPayloads = payloads.filter(payload => isTransactionBoundWitness(payload))\n return await PayloadBuilder.hashPairs(transactionPayloads)\n}\n","import { usePromise } from '@xylabs/react-promise'\nimport type { BlockBoundWitness, XyoChainIteratorParams } from '@xyo-network/chain-model'\nimport type { ComponentType } from 'react'\n\nimport { useChainAnalyzersContext } from '../../../context/index.ts'\nimport type { BlockComponentProps, BlockComponentWithTxsProps } from '../../../types/index.ts'\nimport { buildBlockChainRenderComponent } from '../helpers/index.ts'\n\nexport const useStaticBlockComponents = (\n BlockComponent: ComponentType<BlockComponentWithTxsProps>,\n params?: XyoChainIteratorParams,\n blocks?: BlockBoundWitness[],\n) => {\n const { onBlock } = useChainAnalyzersContext()\n\n const [blockComponents, blockComponentsError] = usePromise(async () => {\n const resolvedBlockWithStorage = blocks ?? []\n if (!params?.chainArchivist) return []\n\n const { chainArchivist } = params\n\n return await Promise.all(resolvedBlockWithStorage?.map(async (block) => {\n if (onBlock && chainArchivist) {\n await onBlock(chainArchivist, block)\n }\n\n const blockComponentProps: BlockComponentProps = { block, defaultExpanded: true }\n return await buildBlockChainRenderComponent(BlockComponent, blockComponentProps, chainArchivist)\n }))\n }, [blocks, params, BlockComponent])\n\n return { blockComponents, errors: blockComponentsError }\n}\n","import { usePromise } from '@xylabs/react-promise'\nimport type { ReadArchivist } from '@xyo-network/archivist-model'\nimport type { BlockBoundWitness } from '@xyo-network/chain-model'\n\nimport { txsFromBlock } from '../helpers/index.ts'\n\nexport const useTxsFromBlock = (chainArchivist?: ReadArchivist, block?: BlockBoundWitness) => {\n return usePromise(async () => {\n if (block && chainArchivist) {\n return await txsFromBlock(chainArchivist, block)\n }\n }, [block, chainArchivist])\n}\n","import { Divider, Stack } from '@mui/material'\nimport React from 'react'\n\nexport const LinkedDivider: React.FC = () => {\n return (\n <>\n {/* An element to house the height of the divider...really just here to help with calculating\n the height for animation purposes and allowing for a dynamic divider height */}\n <Stack\n className=\"divider-spacer\"\n justifyContent=\"end\"\n sx={{\n width: '50%', height: 24, justifyContent: 'end',\n }}\n >\n <Divider\n className=\"divider\"\n orientation=\"vertical\"\n flexItem\n sx={{\n borderRightWidth: 2, height: 24, transition: 'height 1s',\n }}\n />\n </Stack>\n </>\n )\n}\n","import { MoreVert } from '@mui/icons-material'\nimport { IconButton, Menu } from '@mui/material'\nimport type { BlockBoundWitness } from '@xyo-network/chain-model'\nimport { BWJsonMenuItem, BWPreviousHashMenuItem } from '@xyo-network/react-chain-boundwitness'\nimport React from 'react'\n\nimport { useAnchorElement } from '../hooks/index.ts'\n\nexport interface BlockExpandedMenuProps {\n block?: BlockBoundWitness\n}\n\nexport const BlockMenuExpanded: React.FC<BlockExpandedMenuProps> = ({ block }) => {\n const {\n anchorEl, anchorRef, open, handleClick, handleClose,\n } = useAnchorElement()\n\n return (\n <>\n <IconButton ref={anchorRef} size=\"small\" onClick={handleClick}>\n <MoreVert fontSize=\"inherit\" />\n </IconButton>\n <Menu\n open={open}\n anchorEl={anchorEl}\n anchorOrigin={{ horizontal: 'left', vertical: 'bottom' }}\n onClose={handleClose}\n >\n <BWPreviousHashMenuItem boundwitness={block} dense onDialogClose={handleClose} />\n <BWJsonMenuItem boundwitness={block} dense onDialogClose={handleClose} />\n </Menu>\n </>\n )\n}\n","import type { ChipProps } from '@mui/material'\nimport { Chip } from '@mui/material'\nimport { EthAddress } from '@xylabs/eth-address'\nimport type { BlockBoundWitness } from '@xyo-network/chain-model'\nimport { BlockiesAvatar } from '@xyo-network/react-chain-blockies'\nimport React, { useMemo } from 'react'\n\nexport interface BlockProducerChipProps extends ChipProps {\n block?: BlockBoundWitness\n}\nexport const BlockProducerChip: React.FC<BlockProducerChipProps> = ({ block, ...props }) => {\n const sharedAddress = block?.addresses[0]\n const blockProducer = useMemo(() => {\n if (block) {\n const producer = block.addresses.find(address => address !== sharedAddress)\n return producer\n }\n }, [block])\n\n const shortedBlockProducer = blockProducer ? EthAddress.parse(blockProducer)?.toShortString(3) : null\n\n const avatar = useMemo(() => blockProducer === '' ? undefined : <BlockiesAvatar blockiesOptions={{ seed: blockProducer }} />, [blockProducer])\n\n return <Chip avatar={avatar} label={shortedBlockProducer ? `${shortedBlockProducer}` : null} title={`Block producer: ${blockProducer}`} {...props} />\n}\n","import {\n Link, TableCell, Tooltip,\n} from '@mui/material'\nimport React from 'react'\n\nimport { useLinkedBlockItem } from './hooks/index.ts'\nimport type { BlockTableCellProps } from './lib/index.ts'\n\nexport interface BlockNumberTableCellProps extends BlockTableCellProps {}\n\nexport const BlockNumberTableCell: React.FC<BlockNumberTableCellProps> = ({\n block, linked, ...props\n}) => {\n const [ref, handleClick] = useLinkedBlockItem('block-number', block?.block.toString())\n\n const blockNumberBigInt = block ? block.block.toString() : ''\n\n return (\n <TableCell ref={ref} {...props}>\n <Tooltip title={`Block Number: ${blockNumberBigInt}`}>\n <span>\n {linked && block\n ? (\n <Link title={block.block.toString()} onClick={handleClick} sx={{ cursor: 'pointer' }}>{block.block.toString()}</Link>\n )\n : null}\n {!linked && blockNumberBigInt}\n </span>\n </Tooltip>\n </TableCell>\n )\n}\n","import { useEvent } from '@xyo-network/react-event'\nimport type { Ref } from 'react'\n\nimport type { BlockHeaderEventNouns } from '../../../hooks/index.ts'\n\nexport const useLinkedBlockItem = (noun?: BlockHeaderEventNouns, data?: string): [Ref<HTMLElement | null>, (event: React.MouseEvent) => void] => {\n const [ref, dispatch] = useEvent<HTMLAnchorElement, BlockHeaderEventNouns>()\n\n const handleClick = (event: React.MouseEvent) => {\n event.preventDefault()\n if (!noun) {\n console.warn('useLinkedBlockItem: noun is required')\n return\n }\n dispatch(noun, 'click', data)\n }\n\n return [ref, handleClick]\n}\n","import {\n Avatar,\n Chip,\n TableCell, Tooltip,\n} from '@mui/material'\nimport type { IdenticonProps } from '@xylabs/react-identicon'\nimport { Identicon } from '@xylabs/react-identicon'\nimport { usePayloadHash } from '@xyo-network/react-shared'\nimport React from 'react'\n\nimport { useLinkedBlockItem } from './hooks/index.ts'\nimport type { BlockTableCellProps } from './lib/index.ts'\n\nexport interface BlockHashTableCellProps extends BlockTableCellProps {\n identiconProps?: IdenticonProps\n}\n\nexport const BlockHashTableCell: React.FC<BlockHashTableCellProps> = ({\n block, identiconProps, linked, ...props\n}) => {\n const hash = usePayloadHash(block)\n\n const [ref, handleClick] = useLinkedBlockItem('block-hash', hash)\n\n const shortenedHash = hash ? `${hash.slice(0, 4)}...${hash.slice(-5, -1)}` : ''\n\n return (\n <TableCell ref={ref} {...props}>\n {hash\n ? (\n <Tooltip title={`Block Hash: ${hash}`}>\n <Chip\n avatar={(\n <Avatar sx={{ background: 'white' }}>\n <Identicon\n size={16}\n value={hash}\n {...identiconProps}\n />\n </Avatar>\n )}\n label={shortenedHash}\n onClick={linked ? handleClick : undefined}\n />\n </Tooltip>\n )\n : null}\n </TableCell>\n )\n}\n","import { Code } from '@mui/icons-material'\nimport {\n Button,\n Dialog, DialogActions, DialogContent, DialogTitle, IconButton, TableCell,\n} from '@mui/material'\nimport { ellipsize } from '@xylabs/eth-address'\nimport { FlexRow } from '@xylabs/react-flexbox'\nimport { JsonViewerEx } from '@xyo-network/react-payload-raw-info'\nimport { usePayloadHash } from '@xyo-network/react-shared'\nimport React, { useState } from 'react'\n\nimport type { BlockTableCellProps } from './lib/index.ts'\n\nexport interface BlockJsonViewTableCellProps extends BlockTableCellProps {}\n\nexport const BlockJsonViewTableCell: React.FC<BlockJsonViewTableCellProps> = ({ block, ...props }) => {\n const [open, setOpen] = useState(false)\n const onClose = () => setOpen(false)\n\n const hash = usePayloadHash(block)\n const title = hash ? `JSON for ${ellipsize(hash, 5)}` : 'JSON'\n\n return (\n <TableCell {...props}>\n <FlexRow sx={{ width: '100%' }}>\n <IconButton onClick={() => setOpen(true)}>\n <Code />\n </IconButton>\n </FlexRow>\n <Dialog open={open} onClose={onClose}>\n <DialogTitle>{title}</DialogTitle>\n <DialogContent>\n <JsonViewerEx value={block} />\n </DialogContent>\n <DialogActions sx={{\n display: 'flex', flexDirection: 'row', justifyContent: 'end',\n }}\n >\n <Button variant=\"contained\" onClick={onClose}>Close</Button>\n </DialogActions>\n </Dialog>\n </TableCell>\n )\n}\n","import { TableCell, Tooltip } from '@mui/material'\nimport { FlexRow } from '@xylabs/react-flexbox'\nimport React from 'react'\n\nimport { useBlockProducer } from '../../hooks/index.ts'\nimport type { BlockProducerChipProps } from '../../ProducerChip.tsx'\nimport { BlockProducerChip } from '../../ProducerChip.tsx'\nimport { useLinkedBlockItem } from './hooks/index.ts'\nimport type { BlockTableCellProps } from './lib/index.ts'\n\nexport interface BlockProducerTableCell extends BlockTableCellProps {\n producerChipProps?: BlockProducerChipProps\n}\n\nexport const BlockProducerTableCell: React.FC<BlockProducerTableCell> = ({\n block, linked, producerChipProps, ...props\n}) => {\n const [ref, handleClick] = useLinkedBlockItem('block-producer', JSON.stringify(block))\n const producer = useBlockProducer(block)\n\n return (\n <TableCell ref={ref} {...props}>\n <Tooltip title={`Block Producer: ${producer}`}>\n <FlexRow sx={{ width: '100%' }}>\n <BlockProducerChip onClick={linked ? handleClick : undefined} block={block} {...producerChipProps} />\n </FlexRow>\n </Tooltip>\n </TableCell>\n )\n}\n","import { Error } from '@mui/icons-material'\nimport {\n Link, TableCell, Tooltip,\n} from '@mui/material'\nimport type { ReadArchivist } from '@xyo-network/archivist-model'\nimport React from 'react'\n\nimport { useTxsFromBlock } from '../../hooks/index.ts'\nimport { useLinkedBlockItem } from './hooks/index.ts'\nimport type { BlockTableCellProps } from './lib/index.ts'\n\nexport interface BlockTransactionCountTableCellProps extends BlockTableCellProps {\n chainArchivist?: ReadArchivist\n}\n\nexport const BlockTransactionCountTableCell: React.FC<BlockTransactionCountTableCellProps> = ({\n block, chainArchivist, linked, ...props\n}) => {\n const [txs, error] = useTxsFromBlock(chainArchivist, block)\n const [ref, handleClick] = useLinkedBlockItem('transaction-count', JSON.stringify(txs ?? null))\n\n return (\n <TableCell ref={ref} {...props}>\n <span>\n {error\n ? (\n <Tooltip title={error.message}>\n <Error color=\"error\" />\n </Tooltip>\n )\n : null}\n {linked ? <Link onClick={handleClick} sx={{ cursor: 'pointer' }}>{txs?.length ?? 0}</Link> : txs?.length ?? 0}\n </span>\n </TableCell>\n )\n}\n","import { TableCell } from '@mui/material'\nimport { FlexRow } from '@xylabs/react-flexbox'\nimport { BWVerification } from '@xyo-network/react-chain-boundwitness'\nimport React from 'react'\n\nimport { useLinkedBlockItem } from './hooks/index.ts'\nimport type { BlockTableCellProps } from './lib/index.ts'\n\nexport interface BlockVerificationTableCellProps extends BlockTableCellProps {}\n\nexport const BlockVerificationTableCell: React.FC<BlockVerificationTableCellProps> = ({\n block, linked, ...props\n}) => {\n const [ref, handleClick] = useLinkedBlockItem('block-verification', block?.block.toString())\n\n return (\n <TableCell ref={ref} {...props}>\n <FlexRow sx={{ width: '100%' }}>\n <BWVerification onClick={linked ? handleClick : undefined} iconColors boundwitness={block} />\n </FlexRow>\n </TableCell>\n )\n}\n","import {\n TableBody, TableCell, TableHead, TableRow,\n} from '@mui/material'\nimport type { TableExProps } from '@xyo-network/react-table'\nimport { TableEx } from '@xyo-network/react-table'\nimport React from 'react'\n\nexport const BlockchainTableEx = ({\n ref, children, ...props\n}: TableExProps & { ref?: React.Ref<HTMLTableElement | null> }) => {\n return (\n <TableEx ref={ref} {...props}>\n <TableHead>\n <TableRow>\n <TableCell>Block Hash</TableCell>\n <TableCell>Block Number</TableCell>\n <TableCell>Transaction Count</TableCell>\n <TableCell align=\"center\">Block Producer</TableCell>\n <TableCell align=\"center\">Valid</TableCell>\n <TableCell align=\"center\">JSON</TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {children}\n </TableBody>\n </TableEx>\n )\n}\n\nBlockchainTableEx.displayName = 'BlockchainTableEx'\n","import { TableRow } from '@mui/material'\nimport React, { useMemo } from 'react'\n\nimport type { BlockComponentProps } from '../../../../types/index.ts'\nimport {\n BlockHashTableCell, BlockJsonViewTableCell, BlockNumberTableCell, BlockProducerTableCell,\n BlockTransactionCountTableCell,\n BlockVerificationTableCell,\n} from '../cell/index.ts'\n\nexport interface BlockChainTableRowProps extends BlockComponentProps {\n linked?: boolean\n}\n\nexport const BlockChainTableRow: React.FC<BlockChainTableRowProps> = ({\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n block, defaultExpanded, linked, ...props\n}) => {\n const linkedTableCellProps = useMemo(() => ({ block, linked }), [block, linked])\n const defaultTableCellProps = useMemo(() => ({ block }), [block])\n return (\n <TableRow {...props}>\n <BlockHashTableCell {...defaultTableCellProps} />\n <BlockNumberTableCell {...linkedTableCellProps} />\n <BlockTransactionCountTableCell {...linkedTableCellProps} />\n <BlockProducerTableCell {...defaultTableCellProps} />\n <BlockVerificationTableCell {...defaultTableCellProps} />\n <BlockJsonViewTableCell {...defaultTableCellProps} />\n </TableRow>\n )\n}\n","import {\n Autorenew,\n Pause,\n} from '@mui/icons-material'\nimport {\n Alert,\n AlertTitle,\n Grow,\n Icon, IconButton, Tooltip,\n} from '@mui/material'\nimport type { FlexBoxProps } from '@xylabs/react-flexbox'\nimport { FlexRow } from '@xylabs/react-flexbox'\nimport React, { memo } from 'react'\n\nimport type { PollingState } from '../hooks/index.ts'\nimport { ChainAnalyzerStatsDialogFromContext } from '../stats/index.ts'\nimport { StyledPulseSvgIcon } from './PulseSvgIcon.tsx'\n\nexport interface PollingControlsFlexboxProps extends FlexBoxProps {\n blocksBehind?: number\n pollingState?: PollingState\n setPollingState?: (newState: PollingState) => void\n}\n\nexport const PollingControlsFlexbox: React.FC<PollingControlsFlexboxProps> = ({\n blocksBehind, pollingState, setPollingState,\n}) => {\n const paused = pollingState === 'paused'\n const running = pollingState === 'running'\n\n return (\n <FlexRow justifyContent=\"space-between\" width=\"100%\">\n <FlexRow gap={2}>\n {running && (\n <IconButton onClick={() => setPollingState?.('paused')} title=\"Pause Block Stream\">\n <Pause />\n </IconButton>\n )}\n {paused && (\n <IconButton onClick={() => setPollingState?.('running')} title=\"Re-Sync Block Stream\">\n <Autorenew />\n </IconButton>\n )}\n <ChainAnalyzerStatsDialogFromContext />\n </FlexRow>\n <FlexRow gap={2}>\n <Grow in={(blocksBehind ?? 0) > 0}>\n <Tooltip title=\"Click to Re-Sync\">\n <Alert\n sx={{\n py: 0, px: 1, cursor: 'pointer',\n }}\n severity=\"warning\"\n onClick={() => setPollingState?.('running')}\n >\n <AlertTitle sx={{ mb: 0 }}>\n Behind:\n {' '}\n {blocksBehind}\n </AlertTitle>\n </Alert>\n </Tooltip>\n </Grow>\n <Icon>\n <StyledPulseSvgIcon className={running ? '' : 'paused'} />\n </Icon>\n </FlexRow>\n </FlexRow>\n )\n}\n\nexport const MemoizedPollingControlsFlexbox = memo(PollingControlsFlexbox)\n","import { QueryStats } from '@mui/icons-material'\nimport type { DialogProps } from '@mui/material'\nimport {\n Dialog, DialogContent,\n DialogTitle, IconButton,\n} from '@mui/material'\nimport React, { useState } from 'react'\n\nimport { useChainAnalyzersContext } from '../../../context/index.ts'\nimport { BlockProducerStatsFlexbox } from './producer/index.ts'\n\nexport interface ChainAnalyzerStatsDialogProps extends DialogProps {}\n\nexport const ChainAnalyzerStatsDialog: React.FC<ChainAnalyzerStatsDialogProps> = (props) => {\n const { analyzers, statsUpdated } = useChainAnalyzersContext()\n\n return (\n <Dialog {...props}>\n <DialogTitle>Chain Analysis</DialogTitle>\n <DialogContent>\n {!!statsUpdated && Object.entries(analyzers).map(([id, analyzer]) => (\n <div key={id}>\n {id === 'producers' && (\n <BlockProducerStatsFlexbox payload={analyzer.result()} />\n )}\n </div>\n ))}\n </DialogContent>\n </Dialog>\n )\n}\n\nexport const ChainAnalyzerStatsDialogFromContext: React.FC = (props) => {\n const [open, setOpen] = useState(false)\n const handleClose = () => setOpen(false)\n\n return (\n <>\n <IconButton onClick={() => setOpen(true)}>\n <QueryStats />\n </IconButton>\n <ChainAnalyzerStatsDialog onClose={handleClose} open={open} {...props} />\n </>\n )\n}\n","import {\n ListItem, styled, Typography,\n} from '@mui/material'\nimport { ErrorRender } from '@xylabs/react-error'\nimport { FlexCol } from '@xylabs/react-flexbox'\nimport { isChainSummaryProducers } from '@xyo-network/chain-protocol'\nimport type { Payload } from '@xyo-network/payload-model'\nimport React, { useMemo } from 'react'\n\nimport { ChainProducerStatsTable } from './Table.tsx'\n\nexport interface BlockProducerStatsFlexboxProps {\n payload?: Payload\n}\n\nexport const BlockProducerStatsFlexbox: React.FC<BlockProducerStatsFlexboxProps> = ({ payload, ...props }) => {\n const [producer, producerError] = useMemo(() => {\n if (payload) {\n return isChainSummaryProducers(payload) ? [payload] : [undefined, new Error('Payload is not a Chain Producer')]\n } else {\n return []\n }\n }, [payload])\n\n const producersArray = useMemo(() => Object.values(producer?.producers ?? {}), [producer])\n\n return (\n <FlexCol alignItems=\"start\" gap={1} {...props}>\n <ErrorRender error={producerError} scope=\"BlockProducerStatsFlexbox\" />\n <Typography fontSize=\"1rem\">Block Producers</Typography>\n <ChainProducerStatsTable producers={producersArray} />\n </FlexCol>\n )\n}\n\nexport const StyledListItem = styled(ListItem)(() => ({\n paddingTop: 0,\n paddingBottom: 0,\n}))\n","import type { TableProps } from '@mui/material'\nimport {\n Table, TableBody, TableCell, TableHead,\n TableRow,\n useTheme,\n} from '@mui/material'\nimport type { AnalyzedProducer } from '@xyo-network/chain-protocol'\nimport { BlockiesAvatar } from '@xyo-network/react-chain-blockies'\nimport React from 'react'\n\nexport interface ChainProducerStatsTableProps extends TableProps {\n producers?: AnalyzedProducer[]\n}\n\nexport const ChainProducerStatsTable: React.FC<ChainProducerStatsTableProps> = ({ producers, ...props }) => {\n const theme = useTheme()\n return (\n <Table {...props}>\n <TableHead>\n <TableRow>\n <TableCell>Address</TableCell>\n <TableCell>Blocks Produced</TableCell>\n <TableCell>Rewards Earned Produced</TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {producers?.map(producer => (\n <TableRow key={producer.address}>\n <TableCell>\n <BlockiesAvatar blockiesOptions={{ seed: producer.address }} sx={{ height: theme.spacing(2.75), width: theme.spacing(2.75) }} />\n </TableCell>\n <TableCell>{producer.blocksProduced.toString()}</TableCell>\n <TableCell>{producer.rewardsEarned.toString()}</TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n )\n}\n","import {\n alpha, createSvgIcon, keyframes, styled,\n} from '@mui/material'\nimport React from 'react'\n\n// Adapted from - https://codepen.io/Taver/pen/PWyEqp\nexport const PulseSvgIcon = createSvgIcon(\n <svg viewBox=\"0 0 80 80\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\">\n <g transform=\"translate(34,34)\">\n <circle className=\"core\" cx=\"0\" cy=\"0\" r=\"6\"></circle>\n <circle className=\"radar\" cx=\"0\" cy=\"0\" r=\"6\"></circle>\n </g>\n </svg>,\n 'PulseSvgIcon',\n)\n\nconst pulse1 = keyframes`\n 0% {\n opacity: 0;\n transform: scale(0);\n }\n 30% {\n opacity: 1;\n transform: scale(1.5);\n }\n 60% {\n opacity: 1;\n transform: scale(2);\n }\n 100% {\n opacity: 0;\n transform: scale(2);\n }\n`\n\nconst pulse2 = keyframes`\n 0% {\n transform: scale(1, 1);\n opacity: 0;\n }\n 50% {\n opacity: 1;\n }\n 100% {\n transform: scale(6, 6);\n opacity: 0;\n }\n`\n\nexport const StyledPulseSvgIcon = styled(PulseSvgIcon)(({ theme }) => {\n return {\n '& .core': {\n animation: `${pulse1} 1.25s ease-in-out infinite`,\n fill: theme.palette.success.main,\n },\n '&.paused .core': {\n animation: 'none',\n fill: theme.palette.divider,\n transform: 'scale(2)',\n },\n '& .radar': {\n animation: `${pulse2} 1.25s ease-in-out infinite`,\n fill: alpha(theme.palette.success.main, 0.5),\n },\n '&.paused .radar': {\n animation: 'none',\n fill: theme.palette.divider,\n transform: 'scale(6)',\n },\n }\n})\n","import type { DialogProps } from '@mui/material'\nimport {\n Button, Dialog, DialogActions, DialogContent,\n} from '@mui/material'\nimport React from 'react'\n\nexport interface TransactionsDialogProps extends DialogProps {}\n\nexport const TransactionsDialog: React.FC<TransactionsDialogProps> = (props) => {\n return (\n <Dialog {...props}>\n <DialogContent>\n Transactions Dialog\n </DialogContent>\n <DialogActions>\n <Button variant=\"outlined\" onClick={e => props?.onClose?.(e, 'escapeKeyDown')}>Close</Button>\n </DialogActions>\n </Dialog>\n )\n}\n","import type { BlockBoundWitness } from '@xyo-network/chain-model'\nimport { useEffect, useRef } from 'react'\n\nexport type PollingState = 'paused' | 'running'\n\nexport const useOnBlock = (\n initialHeadNumber?: number,\n onAddBlock?: (block: BlockBoundWitness) => Promise<void>,\n liveHead?: BlockBoundWitness,\n pollingState?: PollingState,\n) => {\n /**\n * Note: blocksWhilePaused is a ref because we don't want to re-render the component when it changes.\n * But, since we get new blockComponents regardless, the hook rerenders anyway so consumers can get\n * the latest blocksWhilePaused value without having to rely on a state update.\n */\n const blocksWhilePaused = useRef<BlockBoundWitness[]>([])\n // Because the useEffect has liveHead AND pollingState, every time the polling state changes, the hook will\n // run a second time with the live head from the previous run. This is why we need to keep track of the last\n // live head so we can compare it to the current live head and prevent the hook from adding the same block twice\n const lastLiveHead = useRef<BlockBoundWitness | undefined>(liveHead)\n\n useEffect(() => {\n // use lastLiveHead to prevent the hook from adding the same block multiple times\n if (lastLiveHead.current?.block === liveHead?.block) return\n\n if (liveHead && onAddBlock) {\n // update lastLiveHead\n lastLiveHead.current = liveHead\n\n // if the polling state is paused and the block is new, add it to the blocksWhilePaused array\n const isNewBlock = initialHeadNumber !== liveHead.block && liveHead.block !== blocksWhilePaused.current[0]?.block\n if (pollingState === 'paused' && isNewBlock) {\n blocksWhilePaused.current.push(liveHead)\n } else if (pollingState === 'running') {\n // if the polling state is running, add the blocksWhilePaused\n if (blocksWhilePaused.current.length > 0) {\n for (const block of blocksWhilePaused.current) {\n void onAddBlock(block)\n }\n // clear the blocksWhilePaused array\n blocksWhilePaused.current = []\n }\n // add the liveHead block\n void onAddBlock(liveHead)\n }\n }\n }, [liveHead, pollingState])\n\n return blocksWhilePaused.current\n}\n","import type { TablePaginationActionsProps } from '@xyo-network/react-payload-table'\nimport { TablePaginationActions } from '@xyo-network/react-payload-table'\nimport React from 'react'\n\nexport interface BlockChainPaginationProps extends TablePaginationActionsProps {}\n\nexport const BlockChainPagination: React.FC<BlockChainPaginationProps> = ({\n count = 0, onPageChange, page, rowsPerPage = 10,\n}) => {\n return <TablePaginationActions count={count} onPageChange={onPageChange} page={page} rowsPerPage={rowsPerPage} />\n}\n","import type { MouseEvent } from 'react'\nimport { useMemo, useState } from 'react'\n\nimport type { BlockChainRenderComponent } from '../../../../types/index.ts'\n\nexport const useChainPagination = (pageSize: number, blockComponents?: BlockChainRenderComponent[]) => {\n const [page, setPage] = useState(0)\n\n const paginatedBlockComponents = useMemo(() => {\n const startIndex = page * pageSize\n const endIndex = startIndex + pageSize\n return blockComponents?.slice(startIndex, endIndex)\n }, [blockComponents, page, pageSize])\n\n const onPageChange = (_event: MouseEvent<HTMLButtonElement>, newPage: number) => {\n setPage(newPage)\n }\n\n return {\n onPageChange, page, paginatedBlockComponents,\n }\n}\n","import { ErrorRender } from '@xylabs/react-error'\nimport { FlexCol } from '@xylabs/react-flexbox'\nimport { ChainProducersAnalyzer } from '@xyo-network/chain-protocol'\nimport React, { useMemo } from 'react'\n\nimport type { ChainAnalyzers } from '../../../../../context/index.ts'\nimport { ChainAnalyzersProvider, ChainPollingProvider } from '../../../../../context/index.ts'\nimport type { BlockChainRenderFlexboxProps, RemoteBlockChainRenderFlexboxProps } from '../../../../../types/index.ts'\nimport { BlockHeadingFlexbox } from '../../../../block/index.ts'\nimport { MemoizedPollingControlsFlexbox } from '../../../controls/index.ts'\nimport { BlockListAnimated } from '../../../list/index.ts'\nimport { useDynamicBlockRenderComponents, useRemoteBlockChainRenderProps } from '../hooks/index.ts'\n\nconst Base: React.FC<BlockChainRenderFlexboxProps> = ({ blockChainRenderProps, ...props }) => {\n const {\n errors, blockChainRenderComponents, blocksWhilePaused, pollingState, updatePollingState,\n } = useDynamicBlockRenderComponents(BlockHeadingFlexbox, blockChainRenderProps)\n\n return (\n <FlexCol alignItems=\"start\" {...props}>\n {errors?.map((error, index) => <ErrorRender error={error} key={index} scope=\"DynamicBlockchainRenderFlexboxInner\" />)}\n <MemoizedPollingControlsFlexbox\n blocksBehind={blocksWhilePaused?.length}\n pollingState={pollingState}\n setPollingState={updatePollingState}\n />\n <BlockListAnimated blockChainRenderComponents={blockChainRenderComponents} />\n </FlexCol>\n )\n}\n\nconst WithAnalysis: React.FC<BlockChainRenderFlexboxProps> = ({ blockChainRenderProps, ...props }) => {\n const { chainInformation } = blockChainRenderProps ?? {}\n\n const analyzers = useMemo(() => {\n if (chainInformation) {\n return { producers: new ChainProducersAnalyzer() } as ChainAnalyzers\n }\n }, [chainInformation])\n\n return (\n <ChainAnalyzersProvider analyzers={analyzers}>\n <ChainPollingProvider>\n <DynamicBlockchainRenderFlexbox.Base blockChainRenderProps={blockChainRenderProps} {...props} />\n </ChainPollingProvider>\n </ChainAnalyzersProvider>\n )\n}\n\nconst WithRemote: React.FC<RemoteBlockChainRenderFlexboxProps> = ({\n url, chainArchivistModuleId, blockChainRenderProps: blockChainRenderPropsArg, ...props\n}) => {\n const { error, blockChainRenderProps } = useRemoteBlockChainRenderProps(chainArchivistModuleId, url, blockChainRenderPropsArg)\n\n return (\n <>\n <ErrorRender error={error} scope=\"RemoteChainProviderFlexbox\" />\n <DynamicBlockchainRenderFlexbox.WithAnalysis blockChainRenderProps={blockChainRenderProps} {...props} />\n </>\n )\n}\n\nexport const DynamicBlockchainRenderFlexbox = {\n Base, WithAnalysis, WithRemote,\n}\n","import { AnimatedList } from '@xylabs/react-animation'\nimport React from 'react'\n\nimport type { BlockListComponentProps } from '../../../types/index.ts'\nimport { BlockListWrapperFlexBox } from '../styled/index.ts'\n\nexport const BlockListAnimated: React.FC<BlockListComponentProps> = ({ blockChainRenderComponents }) => {\n return (\n <BlockListWrapperFlexBox\n alignItems=\"stretch\"\n width=\"100%\"\n >\n <AnimatedList\n fullWidth\n items={blockChainRenderComponents}\n />\n </BlockListWrapperFlexBox>\n )\n}\n","import { styled } from '@mui/material'\nimport { FlexCol } from '@xylabs/react-flexbox'\n\n// Target the first visible child (first actual child is a hidden div) and hide the after pseudo element that visually links blocks together\nexport const BlockListWrapperFlexBox = styled(FlexCol, { name: 'BlockListWrapperFlexbox' })(() => ({\n '& > div:nth-of-type(2) .block-heading-flexbox .divider-spacer': {\n // hide the spacer for the first element\n visibility: 'hidden',\n },\n '& > div:nth-of-type(2) .block-heading-flexbox .divider': {\n // keep the first element divider at 0 height so we can animate it to the correct height\n // when the next block comes in\n height: 0,\n },\n}))\n","import type { ComponentType } from 'react'\nimport { useMemo } from 'react'\n\nimport { useChainPollingContext } from '../../../../../context/index.ts'\nimport { useChainIteratorParams, useChainIteratorStore } from '../../../../../hooks/index.ts'\nimport type { BlockChainRenderProps, BlockComponentWithTxsProps } from '../../../../../types/index.ts'\nimport { useDynamicBlockComponents } from '../../../../block/index.ts'\nimport { useOnBlock } from '../../../hooks/index.ts'\n\n// Note: This is a hook but could easily be bundled up in a class with callbacks\nexport const useDynamicBlockRenderComponents = (\n BlockComponent: ComponentType<BlockComponentWithTxsProps>,\n blockChainRenderProps?: BlockChainRenderProps,\n) => {\n const { maxBlocks } = blockChainRenderProps ?? {}\n\n const chainIteratorParams = useMemo(() => blockChainRenderProps ?? {}, [blockChainRenderProps])\n\n const [params, paramsError] = useChainIteratorParams(chainIteratorParams)\n\n const { blockChainRenderComponents, onAddBlock } = useDynamicBlockComponents(BlockComponent, params, maxBlocks)\n\n const { head: liveHead } = useChainIteratorStore(params)\n\n const { pollingState, updatePollingState } = useChainPollingContext()\n\n const blocksWhilePaused = useOnBlock(blockChainRenderComponents[0]?.block.block, onAddBlock, liveHead, pollingState)\n\n return {\n errors: [paramsError],\n blockChainRenderComponents,\n blocksWhilePaused,\n updatePollingState,\n pollingState,\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport type {\n BlockBoundWitness, EventingChainBlockNumberIterator, HeadEventArgs,\n XyoChainIteratorParams,\n} from '@xyo-network/chain-model'\nimport { XyoChainBlockNumberIterator } from '@xyo-network/chain-services'\n\nexport type Listener = (...args: Array<unknown>) => void\n\nexport type ChainIteratorStoreValues = { chainIterator: XyoChainBlockNumberIterator; error?: Error; head: BlockBoundWitness }\n\nexport class ChainIteratorStore {\n private _chainIterator: EventingChainBlockNumberIterator | undefined\n private _externalListeners: Listener[] = []\n private _internalUnsubscribes: WeakRef<() => void>[] = []\n private _values: ChainIteratorStoreValues | undefined\n\n get chainIterator(): EventingChainBlockNumberIterator {\n return assertEx(this._chainIterator, () => 'ChainIteratorStore has not been initialized')\n }\n\n get values(): ChainIteratorStoreValues {\n return assertEx(this._values, () => 'ChainIteratorStore values have not been initialized')\n }\n\n static async create(params: XyoChainIteratorParams): Promise<ChainIteratorStore> {\n // create the classes\n const instance = new ChainIteratorStore()\n const chainIterator = await XyoChainBlockNumberIterator.create(params)\n\n // set the chainIterator\n instance._chainIterator = chainIterator\n\n // set the initial values\n instance._values = {\n chainIterator,\n head: (await chainIterator.head()),\n }\n\n // set the internal listeners\n const headUpdatedListener = ({ blocks }: HeadEventArgs) => {\n instance._values = {\n chainIterator,\n head: blocks?.[0],\n }\n instance.emitChange()\n }\n\n // Add listener to the chainIterator\n const unsubscribe = chainIterator.on('headUpdated', headUpdatedListener)\n\n // track the internal listener\n const weakRefListener = new WeakRef(unsubscribe)\n instance._internalUnsubscribes.push(weakRefListener)\n\n return instance\n }\n\n cleanup() {\n for (const unsubscribeRef of this._internalUnsubscribes) {\n const unsubscribe = unsubscribeRef.deref()\n unsubscribe?.()\n }\n }\n\n getSnapshot(): Partial<ChainIteratorStoreValues> {\n return this.values\n }\n\n subscribe(onStoreChange: Listener) {\n this._externalListeners.push(onStoreChange)\n return () => {\n this._externalListeners = this._externalListeners.filter(l => l !== onStoreChange)\n }\n }\n\n private emitChange() {\n for (const listener of this._externalListeners) {\n listener()\n }\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport type { Hash } from '@xylabs/hex'\nimport { usePromise } from '@xylabs/react-promise'\nimport type { ReadArchivist } from '@xyo-network/archivist-model'\nimport { BoundWitnessBuilder } from '@xyo-network/boundwitness-builder'\nimport type { BlockBoundWitness } from '@xyo-network/chain-model'\nimport { isBlockBoundWitness } from '@xyo-network/chain-model'\n\nimport type { BlockChainIterator } from '../../types/index.ts'\n\nexport const resolveDefinedHead = async (head: Hash, chainArchivist: ReadArchivist) => {\n // get the head from the chain archivist\n const [headPayload] = await chainArchivist.get([head])\n // if the head is undefined, we need to create a new one\n if (headPayload === undefined) {\n const [currentHead] = await new BoundWitnessBuilder<BlockBoundWitness>().build()\n return currentHead\n } else {\n // if the head is a block bound witness, we can use it\n return assertEx(isBlockBoundWitness(headPayload)\n ? headPayload\n : undefined, () => `Expected a block bound witness: ${JSON.stringify(headPayload)}`)\n }\n}\n\nexport const useChainIteratorParams = ({\n chainArchivist, chainInformation, head,\n}: BlockChainIterator) => {\n return usePromise(async () => {\n if (chainArchivist && chainInformation && head) {\n const [result] = await chainArchivist.get([head])\n const foundResult = assertEx(result, () => `Head not found: ${head}`)\n const resolvedHead = assertEx(\n isBlockBoundWitness(foundResult) ? foundResult : undefined,\n () => `Head is not a boundwitness: ${JSON.stringify(foundResult)}`,\n )\n return {\n chainArchivist, chainInformation, head: resolvedHead,\n }\n }\n }, [chainArchivist, chainInformation, head])\n}\n","import { usePromise } from '@xylabs/react-promise'\nimport type { XyoChainIteratorParams } from '@xyo-network/chain-model'\nimport {\n useEffect,\n useMemo, useRef, useSyncExternalStore,\n} from 'react'\n\nimport type { ChainIteratorStoreValues } from './ChainIteratorStore.ts'\nimport { ChainIteratorStore } from './ChainIteratorStore.ts'\nimport { useChainIteratorUpdatingHead } from './useChainIteratorUpdatingHead.ts'\n\nconst stub = {} as Partial<ChainIteratorStoreValues>\n\n// Returns the latest head every time it changes\nexport const useChainIteratorStore = (chainIteratorParams?: XyoChainIteratorParams) => {\n const [chainIteratorStore] = usePromise(async () => {\n return chainIteratorParams ? await ChainIteratorStore.create(chainIteratorParams) : undefined\n }, [chainIteratorParams])\n\n const { chainIterator } = chainIteratorStore || {}\n const chainArchivist = chainIteratorParams?.chainArchivist\n\n // Update the head of the chain iterator\n const error = useChainIteratorUpdatingHead({ chainIterator, chainArchivist })\n\n useEffect(() => {\n return () => {\n if (chainIteratorStore) {\n chainIteratorStore.cleanup()\n }\n }\n }, [chainIteratorStore])\n\n const cachedSnapshot = useRef<Partial<ChainIteratorStoreValues>>({})\n\n const { getSnapShot, subscribe } = useMemo(() => {\n if (chainIteratorStore) {\n return {\n getSnapShot: () => {\n const snapshot = chainIteratorStore.getSnapshot()\n const newValues = {\n ...snapshot,\n error,\n }\n // Only update the cached snapshot if there is no cached iterator or the head has changed\n const noCachedValue = cachedSnapshot.current.chainIterator === undefined\n const newBlock = cachedSnapshot.current?.head?.block !== newValues.head?.block\n if (noCachedValue || newBlock) {\n cachedSnapshot.current = newValues\n return newValues\n }\n return cachedSnapshot.current\n },\n subscribe: chainIteratorStore.subscribe.bind(chainIteratorStore),\n }\n }\n // Return a default implementation to satisfy the hook interface\n return {\n getSnapShot: () => stub,\n subscribe: () => () => {},\n }\n }, [chainIteratorStore])\n\n return useSyncExternalStore(subscribe, getSnapShot)\n}\n","import { toHex } from '@xylabs/hex'\nimport type { ArchivistInstance } from '@xyo-network/archivist-model'\nimport type { ChainBlockNumberIterator } from '@xyo-network/chain-model'\nimport { findMostRecentBlock } from '@xyo-network/chain-protocol'\nimport { useEffect, useState } from 'react'\n\nexport interface ChainIteratorUpdatingHeadParams {\n chainArchivist?: ArchivistInstance\n chainIterator?: ChainBlockNumberIterator\n interval?: number\n maxBlocks?: number\n}\n\n// Polls the chain archivist for new blocks and updates the chain iterator head\nexport const useChainIteratorUpdatingHead = ({\n chainIterator, interval = 500, maxBlocks, chainArchivist,\n}: ChainIteratorUpdatingHeadParams): Error | undefined => {\n const [error, setError] = useState<Error>()\n\n useEffect(() => {\n let pollArchivistTimeout: NodeJS.Timeout | undefined\n\n const pollingFunction = async () => {\n if (chainIterator && chainArchivist) {\n try {\n const currentHead = await chainIterator.head()\n const mostRecentBlock = await findMostRecentBlock(chainArchivist)\n if (currentHead && mostRecentBlock) {\n const currentBlockNumber = currentHead?.block ?? -1\n const nextBlockNumber = mostRecentBlock.block\n if (nextBlockNumber > currentBlockNumber) {\n console.debug('Found more recent head:', toHex(nextBlockNumber))\n console.debug('Updating head:', `${toHex(nextBlockNumber)}`)\n await chainIterator.updateHead(mostRecentBlock)\n console.debug('Updated head:', `${toHex(nextBlockNumber)}`)\n }\n }\n } catch (e) {\n setError(e as Error)\n console.error(e)\n }\n }\n\n // Schedule the next polling function\n pollArchivistTimeout = setTimeout(() => void pollingFunction(), interval)\n }\n\n // Start the polling function\n void pollingFunction()\n\n return () => clearInterval(pollArchivistTimeout)\n }, [interval, chainIterator, chainArchivist, maxBlocks])\n\n return error\n}\n","import { assertEx } from '@xylabs/assert'\nimport { usePromise } from '@xylabs/react-promise'\nimport type { BlockBoundWitness, XyoChainIteratorParams } from '@xyo-network/chain-model'\nimport { isBlockBoundWitness } from '@xyo-network/chain-model'\nimport { XyoChainBlockNumberIterator } from '@xyo-network/chain-services'\n\nconst iterateChain = async (chainIteratorParams?: XyoChainIteratorParams, maxDepth?: number) => {\n const { chainArchivist, head } = chainIteratorParams ?? {} as XyoChainIteratorParams\n if (chainArchivist && head) {\n const headPayload = assertEx(isBlockBoundWitness(head) ? head : null, () => 'Head is not a Block Bound Witness')\n // confirm the head is a block\n const headBlockBoundWitness = assertEx(isBlockBoundWitness(headPayload) ? headPayload : null, () => 'Invalid head block')\n // create the chain iterator\n const chainIterator = await XyoChainBlockNumberIterator.create({ head: headBlockBoundWitness, chainArchivist })\n\n // get head of the chain\n let block = await chainIterator.head()\n // create the blocks array\n const blocks: BlockBoundWitness[] = [block]\n\n // track the depth\n let depth = 1\n // iterate the chain\n while (block) {\n // get the next block\n const [, next] = await chainIterator.previous(block.block, 2)\n // if there is no next block, break\n if (!next) break\n // push the next block\n blocks.push(next)\n // set the next block as the current block\n block = next\n // increment the depth\n depth++\n // if max depth is set and we have reached it, break\n if ((maxDepth && depth >= maxDepth) || block?.block === 0) break\n }\n return blocks\n }\n}\n\nexport const useIterateChain = (\n chainIteratorParams?: XyoChainIteratorParams,\n maxDepth?: number,\n) => {\n return usePromise(async () => {\n return await iterateChain(chainIteratorParams, maxDepth)\n }, [chainIteratorParams, maxDepth])\n}\n","import { usePromise } from '@xylabs/react-promise'\nimport type { ModuleIdentifier } from '@xyo-network/module-model'\nimport { useMemo } from 'react'\n\nimport { getChainArchivistFromBridge } from '../../../../../lib/index.ts'\nimport type { BlockChainRenderBaseProps, BlockChainRenderProps } from '../../../../../types/index.ts'\n\n/** take blockChainRenderProps and remote archivist props and return with resolved chainArchivist */\nexport const useRemoteBlockChainRenderProps = (\n chainArchivistModuleId?: ModuleIdentifier,\n url?: string,\n blockChainRenderPropsArg?: BlockChainRenderProps,\n): BlockChainRenderBaseProps => {\n const [chainArchivist, chainArchivistError] = usePromise(async () => {\n if (url && chainArchivistModuleId) {\n return await getChainArchivistFromBridge({ url, chainArchivistModuleId })\n }\n }, [url, chainArchivistModuleId])\n\n const blockChainRenderProps: BlockChainRenderProps = useMemo(() => ({\n ...blockChainRenderPropsArg,\n chainArchivist,\n }), [blockChainRenderPropsArg, chainArchivist])\n\n return {\n blockChainRenderProps,\n error: chainArchivistError,\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport type { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { asArchivistInstance } from '@xyo-network/archivist-model'\nimport type { HttpBridgeConfig } from '@xyo-network/bridge-http'\nimport { HttpBridge, HttpBridgeConfigSchema } from '@xyo-network/bridge-http'\nimport type { ModuleIdentifier } from '@xyo-network/module-model'\n\nexport interface BridgedChainArchivistParams {\n chainArchivistModuleId: ModuleIdentifier\n url: string\n}\n\nexport const getChainArchivistFromBridge = async (params: BridgedChainArchivistParams): Promise<ArchivistInstance> => {\n const { url, chainArchivistModuleId } = params\n const config: HttpBridgeConfig = { schema: HttpBridgeConfigSchema, client: { url } }\n const bridge = await HttpBridge.create({ config })\n\n const resolved = await bridge.resolve(chainArchivistModuleId)\n const mod = assertEx(resolved, () => `Module ${chainArchivistModuleId} not found`)\n return assertEx(asArchivistInstance(mod), () => `Module ${chainArchivistModuleId} is not an archivist`)\n}\n","import type { Promisable } from '@xylabs/promise'\nimport type { ChainInformation } from '@xyo-network/chain-model'\n\nconst id = 'ce080bf3043a40c6c8838c7e813c00ab53df1684'\n\nexport const getChainInformation = (): Promisable<ChainInformation> => {\n const chainInformation: ChainInformation = { id }\n return chainInformation\n}\n","import { ErrorRender } from '@xylabs/react-error'\nimport { FlexCol, FlexGrowRow } from '@xylabs/react-flexbox'\nimport { ChainProducersAnalyzer } from '@xyo-network/chain-protocol'\nimport React, { useMemo } from 'react'\n\nimport type { ChainAnalyzers } from '../../../../../context/index.ts'\nimport { ChainAnalyzersProvider } from '../../../../../context/index.ts'\nimport type { BlockChainRenderFlexboxProps } from '../../../../../types/index.ts'\nimport { BlockHeadingFlexbox } from '../../../../block/index.ts'\nimport { BlockListAnimated } from '../../../list/index.ts'\nimport { BlockChainPagination } from '../../../pagination/index.ts'\nimport { ChainAnalyzerStatsDialogFromContext } from '../../../stats/index.ts'\nimport { useStaticBlockRenderComponents } from '../hooks/index.ts'\n\nconst Base: React.FC<BlockChainRenderFlexboxProps> = ({ blockChainRenderProps, ...props }) => {\n const {\n blockComponents, errors, paginatedBlockComponents, onPageChange, page, pageSize,\n } = useStaticBlockRenderComponents(BlockHeadingFlexbox, blockChainRenderProps)\n\n return (\n <FlexCol alignItems=\"start\" gap={2} width=\"100%\" {...props}>\n {errors?.map((error, index) => <ErrorRender error={error} key={index} scope=\"StaticBlockchainFlexboxInner\" />)}\n {paginatedBlockComponents?.length\n ? (\n <FlexGrowRow justifyContent=\"space-between\" width=\"100%\">\n <ChainAnalyzerStatsDialogFromContext />\n <BlockChainPagination count={blockComponents?.length ?? 0} onPageChange={onPageChange} page={page} rowsPerPage={pageSize} />\n </FlexGrowRow>\n )\n : null}\n <BlockListAnimated blockChainRenderComponents={paginatedBlockComponents} />\n </FlexCol>\n )\n}\n\nconst WithAnalysis: React.FC<BlockChainRenderFlexboxProps> = ({ blockChainRenderProps, ...props }) => {\n const { chainInformation } = blockChainRenderProps ?? {}\n\n const analyzers = useMemo(() => {\n if (chainInformation) {\n return { producers: new ChainProducersAnalyzer() } as ChainAnalyzers\n }\n }, [chainInformation])\n\n return (\n <ChainAnalyzersProvider analyzers={analyzers}>\n <StaticBlockchainRenderFlexBox.Base blockChainRenderProps={blockChainRenderProps} {...props} />\n </ChainAnalyzersProvider>\n )\n}\n\nexport const StaticBlockchainRenderFlexBox = {\n Base,\n WithAnalysis,\n}\n","import { exists } from '@xylabs/exists'\nimport type { ComponentType } from 'react'\nimport { useMemo } from 'react'\n\nimport { useChainIteratorParams, useIterateChain } from '../../../../../hooks/index.ts'\nimport type { BlockChainRenderProps, BlockComponentWithTxsProps } from '../../../../../types/index.ts'\nimport { useStaticBlockComponents } from '../../../../block/index.ts'\nimport { useChainPagination } from '../../../pagination/index.ts'\n\nconst DEFAULT_PAGE_SIZE = 25\n\n// Note: This is a hook but could easily be bundled up in a class with callbacks\nexport const useStaticBlockRenderComponents = (BlockComponent: ComponentType<BlockComponentWithTxsProps>, blockChainRenderProps?: BlockChainRenderProps) => {\n const { maxBlocks } = blockChainRenderProps ?? {}\n const pageSize = blockChainRenderProps?.pageSize ?? DEFAULT_PAGE_SIZE\n\n const chainIteratorParams = useMemo(() => blockChainRenderProps ?? {}, [blockChainRenderProps])\n\n const [params, paramsError] = useChainIteratorParams(chainIteratorParams)\n\n const [blocks, blocksError] = useIterateChain(params, maxBlocks)\n\n const { blockComponents, errors: blockComponentsError } = useStaticBlockComponents(BlockComponent, params, blocks)\n\n const {\n onPageChange, page, paginatedBlockComponents,\n } = useChainPagination(pageSize, blockComponents)\n\n return {\n paginatedBlockComponents,\n blockComponents,\n errors: [paramsError, blocksError, blockComponentsError].filter(exists),\n onPageChange,\n page,\n pageSize,\n }\n}\n","import type { FlexBoxProps } from '@xylabs/react-flexbox'\nimport { FlexCol } from '@xylabs/react-flexbox'\nimport type { Payload } from '@xyo-network/payload-model'\nimport { JsonViewerEx } from '@xyo-network/react-payload-raw-info'\nimport type { ComponentType } from 'react'\nimport React, { useState } from 'react'\n\nimport type { PayloadBuilderComponentProps } from './BuilderComponentProps.ts'\n\nexport interface PayloadBuilderFlexboxProps extends PayloadBuilderComponentProps, FlexBoxProps {\n BuilderComponent: ComponentType<PayloadBuilderComponentProps>\n}\n\nexport const PayloadBuilderFlexbox: React.FC<PayloadBuilderFlexboxProps> = ({\n BuilderComponent, onBuild, ...props\n}) => {\n const [payload, setPayload] = useState<Payload>()\n\n const onBuildLocal = (payload: Payload) => {\n onBuild?.(payload)\n setPayload(payload)\n }\n\n return (\n <FlexCol gap={2} {...props}>\n <BuilderComponent onBuild={onBuildLocal} />\n {payload && <JsonViewerEx value={payload} />}\n </FlexCol>\n )\n}\n","import { Button, FormControl } from '@mui/material'\nimport type { Address } from '@xylabs/hex'\nimport { createProducerChainStakeIntent } from '@xyo-network/chain-ethereum'\nimport type { ChainStakeIntent } from '@xyo-network/chain-model'\nimport type { MouseEventHandler } from 'react'\nimport React, { useMemo, useState } from 'react'\n\nimport { BlockNumberTextField, XyoAddressTextField } from '../../fields/index.ts'\nimport type { PayloadBuilderComponentProps } from '../BuilderComponentProps.ts'\n\nexport interface ProducerIntentBuilderFormProps extends PayloadBuilderComponentProps {}\n\nexport const ProducerIntentBuilderForm: React.FC<ProducerIntentBuilderFormProps> = ({ onBuild }) => {\n const [delegate, setDelegate] = useState<Address>()\n const [exp, setExp] = useState<number>()\n const [nbf, setNbf] = useState<number>()\n const [blockRangeError, setBlockRangeError] = useState<Error>()\n\n const intentPayload: ChainStakeIntent | undefined = useMemo(() => {\n // confirm we have values for all fields\n if (exp !== undefined && nbf !== undefined) {\n // validate that expires is greater than not before\n if (exp <= nbf) {\n setBlockRangeError(new Error('Expires must be greater than Not Before'))\n } else {\n setBlockRangeError(undefined)\n if (delegate) {\n // create the payload\n const payload = createProducerChainStakeIntent(delegate, exp, nbf)\n return payload\n }\n }\n }\n }, [delegate, exp, nbf])\n\n const onBuildLocal: MouseEventHandler<HTMLButtonElement> = () => {\n if (onBuild && intentPayload) onBuild?.(intentPayload)\n }\n\n return (\n <>\n <FormControl fullWidth>\n <XyoAddressTextField label=\"Delegate\" name=\"delegate\" onAddressChanged={setDelegate} required size=\"small\" />\n </FormControl>\n <FormControl fullWidth>\n <BlockNumberTextField\n errorMessage={blockRangeError?.message}\n label=\"Expires\"\n name=\"exp\"\n onBlockNumberChanged={setExp}\n required\n size=\"small\"\n />\n </FormControl>\n <FormControl fullWidth>\n <BlockNumberTextField\n errorMessage={blockRangeError?.message}\n label=\"Not Before\"\n name=\"nbf\"\n onBlockNumberChanged={setNbf}\n required\n size=\"small\"\n />\n </FormControl>\n <Button disabled={!intentPayload} variant=\"contained\" onClick={onBuildLocal}>Build</Button>\n </>\n )\n}\n","import type { StandardTextFieldProps, Theme } from '@mui/material'\nimport {\n FormControl, FormHelperText, TextField,\n} from '@mui/material'\nimport type { ChangeEventHandler } from 'react'\nimport React, { useState } from 'react'\n\ninterface BlockNumberTextFieldProps extends StandardTextFieldProps {\n errorMessage?: string\n onBlockNumberChanged?: (blockNumber?: number) => void\n}\n\nexport const BlockNumberTextField: React.FC<BlockNumberTextFieldProps> = ({\n errorMessage, onBlockNumberChanged, onChange, ...props\n}) => {\n const [blockNumber, setBlockNumber] = useState<number>()\n\n const handleChange: ChangeEventHandler<HTMLInputElement> = (e) => {\n const value = e.target.value.replaceAll(/\\D/g, '') // Remove non-digit characters\n setBlockNumber(value ? Number(value) : undefined)\n onBlockNumberChanged?.(Number.parseInt(value))\n onChange?.(e)\n }\n\n return (\n <FormControl fullWidth>\n <TextField\n error={!!errorMessage}\n onChange={handleChange}\n type=\"number\"\n value={blockNumber ?? ''}\n {...props}\n />\n {errorMessage && <FormHelperText sx={{ color: (theme: Theme) => theme.palette.error.main }}>{errorMessage}</FormHelperText>}\n </FormControl>\n )\n}\n","import type { StandardTextFieldProps, Theme } from '@mui/material'\nimport {\n FormControl, FormHelperText, TextField,\n} from '@mui/material'\nimport type { Address } from '@xylabs/hex'\nimport { asAddress } from '@xylabs/hex'\nimport React, { useEffect, useState } from 'react'\n\ninterface XyoAddressTextFieldProps extends Omit<StandardTextFieldProps, 'value'> {\n onAddressChanged?: (address?: Address) => void\n // increment the value to trigger rerender with empty input\n resetValue?: number\n}\n\nexport const XyoAddressTextField: React.FC<XyoAddressTextFieldProps> = ({\n onAddressChanged, onChange, resetValue, ...props\n}) => {\n const [address, setAddress] = useState<string>('')\n const [addressError, setAddressError] = useState<Error>()\n\n useEffect(() => setAddress(''), [resetValue])\n\n const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n const { value } = event.target\n onChange?.(event)\n\n const xyoAddress = asAddress(value)\n if (xyoAddress) {\n onAddressChanged?.(xyoAddress)\n }\n\n setAddressError(undefined)\n setAddress(value)\n }\n\n const handleBlur = () => {\n const xyoAddress = asAddress(address)\n if (!xyoAddress) {\n setAddressError(new Error('Invalid address'))\n onAddressChanged?.()\n }\n }\n\n return (\n <FormControl fullWidth>\n <TextField\n error={!!addressError}\n onBlur={handleBlur}\n onChange={handleChange}\n value={address}\n {...props}\n />\n {addressError && <FormHelperText sx={{ color: (theme: Theme) => theme.palette.error.main }}>{addressError.message}</FormHelperText>}\n </FormControl>\n )\n}\n","import React from 'react'\n\nimport type { PayloadBuilderComponentProps } from '../BuilderComponentProps.ts'\nimport { PayloadBuilderFlexbox } from '../Flexbox.tsx'\nimport { TransferBuilderForm } from './Form.tsx'\n\nexport const TransferBuilderFlexbox: React.FC<PayloadBuilderComponentProps> = ({ onBuild, ...props }) => (\n <PayloadBuilderFlexbox\n gap={4}\n alignItems=\"start\"\n BuilderComponent={TransferBuilderForm}\n onBuild={onBuild}\n {...props}\n />\n)\n","import { Button, FormControl } from '@mui/material'\nimport type { Address } from '@xylabs/hex'\nimport type { Elevated, Transfer } from '@xyo-network/chain-model'\nimport {\n elevate,\n TransferSchema,\n} from '@xyo-network/chain-model'\nimport type { MouseEventHandler } from 'react'\nimport React, { useMemo, useState } from 'react'\n\nimport { XyoAddressTextField } from '../../fields/index.ts'\nimport type { PayloadBuilderComponentProps } from '../BuilderComponentProps.ts'\nimport { SingleTransferBuilderFlexbox } from './builder/index.ts'\nimport type { TransferAmount } from './Transfer.ts'\n\nexport interface TransferBuilderFormProps extends PayloadBuilderComponentProps {}\n\nexport const TransferBuilderForm: React.FC<TransferBuilderFormProps> = ({ onBuild }) => {\n const [fromAddress, setFromAddress] = useState<Address>()\n const [transfers, setTransfers] = useState<TransferAmount[]>([])\n\n const transferPayload: Elevated<Transfer> | undefined = useMemo(() => {\n if (fromAddress && transfers.length > 0) {\n const transfersRecord = {} as Transfer['transfers']\n for (const transfer of transfers) {\n transfersRecord[transfer.to] = transfer.amount\n }\n\n return elevate({\n schema: TransferSchema,\n transfers: transfersRecord,\n epoch: Date.now(),\n }, fromAddress)\n }\n }, [fromAddress, transfers])\n\n const onBuildLocal: MouseEventHandler<HTMLButtonElement> = () => {\n if (onBuild && transferPayload) onBuild?.(transferPayload)\n }\n\n const onTransferAdded = () => {\n const transferAmount: TransferAmount = {\n amount: '',\n transferId: Date.now(),\n to: '',\n }\n setTransfers(prev => [...prev, transferAmount])\n }\n\n const onTransferRemoved = (transferId: number) => {\n setTransfers(prev => prev.filter(transfer => transfer.transferId !== transferId))\n }\n\n const onTransferUpdated = (singleTransfer: TransferAmount) => {\n setTransfers(prev => prev.map((transfer) => {\n if (transfer.transferId === singleTransfer.transferId) {\n return singleTransfer\n }\n return transfer\n }))\n }\n\n return (\n <>\n <FormControl fullWidth>\n <XyoAddressTextField label=\"From\" name=\"from\" onAddressChanged={setFromAddress} required size=\"small\" />\n </FormControl>\n <Button onClick={onTransferAdded} size=\"small\" variant=\"contained\">Add Transfer</Button>\n {transfers.map(transfer => (\n <SingleTransferBuilderFlexbox\n key={transfer.transferId}\n onTransferUpdated={onTransferUpdated}\n onRemoveTransfer={onTransferRemoved}\n singleTransfer={transfer}\n sx={{ width: '100%' }}\n />\n ))}\n <Button disabled={!transferPayload} variant=\"contained\" onClick={onBuildLocal}>Build</Button>\n </>\n )\n}\n","import { RemoveCircle } from '@mui/icons-material'\nimport {\n FormControl, Icon, IconButton,\n} from '@mui/material'\nimport type { Address } from '@xylabs/hex'\nimport { toHex } from '@xylabs/hex'\nimport type { FlexBoxProps } from '@xylabs/react-flexbox'\nimport { FlexRow } from '@xylabs/react-flexbox'\nimport { BigIntInput } from '@xyo-network/react-shared'\nimport React, {\n useEffect, useMemo, useState,\n} from 'react'\n\nimport { XyoAddressTextField } from '../../../fields/index.ts'\nimport type { TransferAmount } from '../Transfer.ts'\n\nexport interface SingleTransferBuilderFlexboxProps extends FlexBoxProps {\n onRemoveTransfer?: (transferId: number) => void\n onTransferUpdated?: (transferAmount: TransferAmount) => void\n singleTransfer: TransferAmount\n}\n\nexport const SingleTransferBuilderFlexbox: React.FC<SingleTransferBuilderFlexboxProps> = ({\n onTransferUpdated, onRemoveTransfer, singleTransfer, ...props\n}) => {\n const [toAddress, setToAddress] = useState<Address>()\n const [amount, setAmount] = useState<bigint>()\n\n const transferAmount = useMemo(() => {\n if (toAddress && amount) {\n return {\n ...singleTransfer,\n amount: toHex(amount),\n to: toAddress,\n }\n }\n }, [toAddress, amount])\n\n useEffect(() => {\n if (transferAmount) onTransferUpdated?.(transferAmount)\n }, [transferAmount])\n\n return (\n <FlexRow alignItems=\"start\" gap={1} {...props}>\n <FormControl fullWidth>\n <XyoAddressTextField label=\"To\" name=\"to\" onAddressChanged={setToAddress} required size=\"small\" />\n </FormControl>\n <FormControl fullWidth>\n <BigIntInput.TextField label=\"Amount\" name=\"amount\" onChangeFixedPoint={setAmount} required size=\"small\" />\n </FormControl>\n <IconButton onClick={() => onRemoveTransfer?.(singleTransfer.transferId)}><Icon><RemoveCircle /></Icon></IconButton>\n </FlexRow>\n )\n}\n","import { Account } from '@xyo-network/account'\nimport { buildRandomChain } from '@xyo-network/chain-ethereum'\nimport type { HydratedBlock } from '@xyo-network/chain-model'\nimport { flattenHydratedBlocks } from '@xyo-network/chain-protocol'\n\nexport const buildRandomBlockChain = async (blockCount = 10) => {\n // Create a producer\n const initialBlockProducer = await Account.random()\n\n // Create multiple blocks\n const blocks: HydratedBlock[] = await buildRandomChain(initialBlockProducer, blockCount)\n return flattenHydratedBlocks(blocks)\n}\n\nexport const buildRandomBlockChainBlocksOnly = async (blockCount = 10) => {\n const chain = await buildRandomChain(await Account.random(), blockCount)\n const blocks = chain.map(block => block[0])\n return blocks\n}\n","import { CircularProgress } from '@mui/material'\nimport type { Decorator } from '@storybook/react'\nimport { usePromise } from '@xylabs/react-promise'\nimport { MemoryArchivist } from '@xyo-network/archivist-memory'\nimport { ArchivistConfigSchema } from '@xyo-network/archivist-model'\nimport { isBlockBoundWitness } from '@xyo-network/chain-model'\nimport React, { useEffect } from 'react'\n\nimport { getChainInformation } from '../lib/index.ts'\nimport type { BlockChainRenderBaseProps } from '../types/index.ts'\nimport { buildRandomBlockChain } from './buildRandomBlockchain.ts'\n\nexport const ChainArchivistDecorator: Decorator = (Story, context) => {\n const [randomBlockChain] = usePromise(async () => await buildRandomBlockChain(), [])\n const [blockChainRenderProps, blockChainRenderPropsError] = usePromise(async () => {\n if (randomBlockChain) {\n const chainArchivist = await MemoryArchivist.create({ config: { schema: ArchivistConfigSchema, name: 'ChainArchivist' } })\n await chainArchivist.insert(randomBlockChain)\n const chainInformation = await getChainInformation()\n return { chainArchivist, chainInformation }\n }\n }, [randomBlockChain])\n\n useEffect(() => {\n if (blockChainRenderPropsError) {\n console.error(blockChainRenderPropsError)\n }\n }, [blockChainRenderPropsError])\n\n const props = {\n ...context,\n args: {\n ...context.args,\n blockChainRenderProps: {\n ...(context.args.blockChainRenderProps as BlockChainRenderBaseProps),\n ...blockChainRenderProps,\n head: randomBlockChain?.toReversed().find(isBlockBoundWitness)?._hash,\n },\n },\n }\n\n return blockChainRenderProps?.chainArchivist ? <Story {...props} /> : <><CircularProgress /></>\n}\n","import { CircularProgress } from '@mui/material'\nimport type { Decorator } from '@storybook/react'\nimport { delay } from '@xylabs/delay'\nimport { usePromise } from '@xylabs/react-promise'\nimport { MemoryArchivist } from '@xyo-network/archivist-memory'\nimport { ArchivistConfigSchema } from '@xyo-network/archivist-model'\nimport type { BlockBoundWitness } from '@xyo-network/chain-model'\nimport { isBlockBoundWitness } from '@xyo-network/chain-model'\nimport type { Payload } from '@xyo-network/payload-model'\nimport React, { useEffect, useState } from 'react'\n\nimport { getChainInformation } from '../lib/index.ts'\nimport type { BlockChainRenderBaseProps } from '../types/index.ts'\nimport { buildRandomBlockChain } from './buildRandomBlockchain.ts'\n\nlet chainArchivistRef: MemoryArchivist | undefined\n\nexport const ChainArchivistDelayedInsertDecorator: Decorator = (Story, context) => {\n const [firstBlock, setFirstBlock] = useState<BlockBoundWitness>()\n\n const [randomBlockChain] = usePromise(async () => await buildRandomBlockChain(), [])\n const [chainArchivist] = usePromise(async () => {\n if (chainArchivistRef) {\n return chainArchivistRef\n } else {\n chainArchivistRef = await MemoryArchivist.create({ config: { schema: ArchivistConfigSchema, name: 'ChainArchivist' } })\n return chainArchivistRef\n }\n }, [])\n\n const [, delayedInsertError] = usePromise(async () => {\n if (chainArchivist && randomBlockChain) {\n // track the next set of payloads for the next block\n const nextBlockPayloads: Payload[] = []\n\n // TODO - use buildRandomChain helper\n for (const payload of randomBlockChain) {\n if (isBlockBoundWitness(payload)) {\n // if we have a block, insert the block and subsequent payloads\n nextBlockPayloads.push(payload)\n\n // debug was we are inserting\n // console.log('pre-insert block', nextBlockPayloads.map(payload => isBlockBoundWitness(payload) ? payload.block : null).filter(Boolean))\n\n // insert the block and subsequent payloads\n await chainArchivist.insert(nextBlockPayloads)\n\n // confirm the first block was inserted and set state so the story can load\n setFirstBlock(prev => prev || payload)\n\n // clear the array\n nextBlockPayloads.length = 0\n\n // we know we are gonna get a new block, so simulate the delay\n await delay(1000)\n } else {\n nextBlockPayloads.push(payload)\n }\n }\n }\n }, [chainArchivist, randomBlockChain])\n\n useEffect(() => {\n if (delayedInsertError) {\n console.error(delayedInsertError)\n }\n }, [delayedInsertError])\n\n const [blockChainRenderProps] = usePromise(async () => {\n const chainInformation = await getChainInformation()\n return { chainArchivist, chainInformation }\n }, [chainArchivist])\n\n const props = {\n ...context,\n args: {\n ...context.args,\n blockChainRenderProps: {\n ...(context.args.blockChainRenderProps as BlockChainRenderBaseProps),\n ...blockChainRenderProps,\n head: randomBlockChain?.find(isBlockBoundWitness)?._hash,\n },\n },\n }\n\n return firstBlock ? <Story {...props} /> : <CircularProgress />\n}\n","import type { Decorator } from '@storybook/react'\nimport { assertEx } from '@xylabs/assert'\nimport { usePromise } from '@xylabs/react-promise'\nimport { isBlockBoundWitness } from '@xyo-network/chain-model'\nimport { XyoChainBlockNumberIterator } from '@xyo-network/chain-services'\nimport { findFirstMatching } from '@xyo-network/chain-utils'\nimport React from 'react'\n\nimport { ChainInfoProvider } from '../context/index.ts'\nimport type { BridgedChainArchivistParams } from '../lib/index.ts'\nimport { getChainArchivistFromBridge, getChainInformation } from '../lib/index.ts'\n\nconst archivistConfig: BridgedChainArchivistParams = {\n url: 'http://localhost:8080',\n chainArchivistModuleId: 'XYOPublic:XYOChain:Chain',\n}\n\nexport const ChainInfoContextDecorator: Decorator = (Story, context) => {\n const [chainInformationResponse] = usePromise(async () => {\n return await getChainInformation()\n }, [])\n\n const chainInformation = chainInformationResponse\n\n const [chainArchivist] = usePromise(async () => {\n return await getChainArchivistFromBridge(archivistConfig)\n }, [])\n\n const [chainIterator] = usePromise(async () => {\n if (chainArchivist && chainInformation) {\n const firstMatch = assertEx(await findFirstMatching(chainArchivist), () => `No head found in archivist: ${chainArchivist.id} `)\n const head = assertEx(isBlockBoundWitness(firstMatch) ? firstMatch : undefined, () => `Expected a block bound witness: ${JSON.stringify(firstMatch)}`)\n return await XyoChainBlockNumberIterator.create({ chainArchivist, head })\n }\n }, [chainArchivist, chainInformation])\n\n return (\n <ChainInfoProvider chainArchivist={chainArchivist} chainInformation={chainInformation} chainIterator={chainIterator}>\n <Story {...context} />\n </ChainInfoProvider>\n )\n}\n"],"mappings":"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","names":["FlexCol","FlexRow","BWVerification","HashHeadingPaper","usePayloadHash","React","createContextEx","ChainAnalyzersContext","hydrateBlock","PayloadBuilder","React","useCallback","useMemo","useState","ChainAnalyzersProvider","analyzers","analyzersProp","children","analyzersState","setAnalyzersState","useState","statsUpdated","setStatsUpdated","Date","now","useMemo","addAnalyzers","useCallback","prev","onBlock","chainArchivist","block","hash","PayloadBuilder","hydratedBlock","hydrateBlock","analyzer","Object","values","value","provided","ChainAnalyzersContext","useContextEx","useChainAnalyzersContext","required","useContextEx","ChainAnalyzersContext","createContextEx","ChainInfoContext","React","useMemo","useState","ChainInfoProvider","children","chainArchivist","chainArchivistProp","chainInformation","chainInformationProp","chainIterator","chainIteratorProp","setChainArchivist","useState","setChainInformation","setChainIterator","updateChainArchivist","updateChainInformation","updateChainIterator","useMemo","chainState","provided","React","ChainInfoContext","value","createContextEx","ChainPollingContext","React","useCallback","useMemo","useState","ChainPollingProvider","children","pollingState","pollingStateProp","setPollingState","useState","updatePollingState","useCallback","newPollingState","value","useMemo","provided","React","ChainPollingContext","useContextEx","useChainPollingContext","required","useContextEx","ChainPollingContext","Button","FormControl","TextField","FlexCol","React","ChainTransactionBuilder","onSubmitTx","handleSubmit","event","preventDefault","formData","FormData","currentTarget","chainTx","chain","get","gas","nbf","Number","parseInt","exp","nonce","React","form","onSubmit","style","width","FlexCol","gap","FormControl","fullWidth","TextField","label","name","required","Button","type","variant","FormControl","FormHelperText","TextField","React","useState","ChainTransactionNetwork","network","onNetworkChange","props","error","setError","useState","handleChange","event","url","URL","target","value","undefined","console","React","FormControl","fullWidth","TextField","label","name","onChange","required","FormHelperText","sx","color","Alert","Grid2","Typography","axios","ErrorRender","FlexGrowCol","Account","ArchivistInsertQuerySchema","QueryBoundWitnessBuilder","buildTransaction","PayloadBuilder","React","useState","BETA_PENDING_TRANSACTIONS_ARCHIVIST","SubmitChainTransaction","network","setNetwork","useState","URL","result","setResult","error","setError","onSubmitTx","chainTx","Error","randomAccount","Account","random","transactionBoundWitness","buildTransaction","chain","BigInt","gas","nbf","exp","insertQuery","PayloadBuilder","schema","ArchivistInsertQuerySchema","build","queryBoundWitness","QueryBoundWitnessBuilder","payloads","query","signer","response","axios","post","href","data","errors","map","e","message","join","onNetworkChange","url","React","Grid2","container","size","xs","sm","md","FlexGrowCol","alignItems","gap","ChainTransactionNetwork","ChainTransactionBuilder","length","Alert","severity","ErrorRender","Typography","variant","pre","JSON","stringify","Difference","Chip","Icon","React","useMemo","TransactionCountChip","transactions","sx","props","label","useMemo","length","React","Chip","avatar","Icon","Difference","title","undefined","display","alignItems","justifyContent","ContentCopy","ContentCopyIcon","Paid","Alert","AlertTitle","Collapse","Snackbar","Typography","ErrorRender","FlexGrowCol","FlexGrowRow","FlexRow","QuickTipButton","React","Fragment","useMemo","useState","TransactionsQuickTipButton","block","chainArchivist","props","transactions","transactionsError","useTxsFromBlock","copied","setCopied","useState","showError","setShowError","useMemo","onCopy","transactionHash","navigator","clipboard","writeText","setTimeout","React","QuickTipButton","Icon","Paid","disabled","length","hoverText","disableDialog","dialogProps","fullWidth","maxWidth","FlexGrowCol","gap","alignItems","map","transaction","hash","Fragment","key","FlexGrowRow","justifyContent","ContentCopyIcon","sx","cursor","onClick","Typography","overflow","textOverflow","whiteSpace","_hash","FlexRow","Collapse","in","unmountOnExit","Alert","AlertTitle","Snackbar","open","onClose","ErrorRender","error","scope","useRef","useState","useAnchorElement","anchorEl","setAnchorEl","useState","anchorRef","useRef","open","Boolean","handleClick","event","currentTarget","handleClose","useEvent","useBlockHeadingEvents","args","useEvent","useMemo","useBlockProducer","block","useMemo","producer","addresses","isBlockBoundWitness","useState","blockProducer","block","addresses","React","isTransactionBoundWitness","PayloadBuilder","txsFromBlock","chainArchivist","block","payloads","get","payload_hashes","transactionPayloads","filter","payload","isTransactionBoundWitness","PayloadBuilder","hashPairs","buildBlockChainRenderComponent","BlockComponent","blockComponentProps","chainArchivist","block","remainingProps","blockTxs","txsFromBlock","txHashes","map","_","hash","item","child","React","transactions","key","toString","buildBlockHeadingComponent","BlockHeadingFlexbox","useDynamicBlockComponents","BlockComponent","params","maxBlocks","chainArchivist","blockChainRenderComponents","setBlockChainRenderComponents","useState","onBlock","useChainAnalyzersContext","onAddBlock","block","isBlockBoundWitness","blockComponentProps","newBlockComponent","buildBlockChainRenderComponent","blockComponents","newBlockComponents","length","pop","usePromise","useStaticBlockComponents","BlockComponent","params","blocks","onBlock","useChainAnalyzersContext","blockComponents","blockComponentsError","usePromise","resolvedBlockWithStorage","chainArchivist","Promise","all","map","block","blockComponentProps","defaultExpanded","buildBlockChainRenderComponent","errors","usePromise","useTxsFromBlock","chainArchivist","block","usePromise","txsFromBlock","Divider","Stack","React","LinkedDivider","React","Stack","className","justifyContent","sx","width","height","Divider","orientation","flexItem","borderRightWidth","transition","MoreVert","IconButton","Menu","BWJsonMenuItem","BWPreviousHashMenuItem","React","BlockMenuExpanded","block","anchorEl","anchorRef","open","handleClick","handleClose","useAnchorElement","React","IconButton","ref","size","onClick","MoreVert","fontSize","Menu","anchorOrigin","horizontal","vertical","onClose","BWPreviousHashMenuItem","boundwitness","dense","onDialogClose","BWJsonMenuItem","Chip","EthAddress","BlockiesAvatar","React","useMemo","BlockProducerChip","block","props","sharedAddress","addresses","blockProducer","useMemo","producer","find","address","shortedBlockProducer","EthAddress","parse","toShortString","avatar","undefined","React","BlockiesAvatar","blockiesOptions","seed","Chip","label","title","BlockHeadingFlexbox","block","defaultExpanded","transactions","hash","usePayloadHash","blockHeadingRef","blockHeadingListener","useBlockHeadingEvents","pollingState","useChainPollingContext","expanded","handleTransactionCountClick","event","stopPropagation","JSON","stringify","React","FlexCol","className","alignItems","ref","onClick","LinkedDivider","HashHeadingPaper","heading","undefined","toString","paperProps","sx","p","width","AdornmentEnd","FlexRow","gap","BlockProducerChip","TransactionCountChip","e","BWVerification","iconColors","boundwitness","span","style","display","transition","maxWidth","BlockMenuExpanded","identiconProps","size","Link","TableCell","Tooltip","React","useEvent","useLinkedBlockItem","noun","data","ref","dispatch","useEvent","handleClick","event","preventDefault","console","warn","BlockNumberTableCell","block","linked","props","ref","handleClick","useLinkedBlockItem","toString","blockNumberBigInt","React","TableCell","Tooltip","title","span","Link","onClick","sx","cursor","Avatar","Chip","TableCell","Tooltip","Identicon","usePayloadHash","React","BlockHashTableCell","block","identiconProps","linked","props","hash","usePayloadHash","ref","handleClick","useLinkedBlockItem","shortenedHash","slice","React","TableCell","Tooltip","title","Chip","avatar","Avatar","sx","background","Identicon","size","value","label","onClick","undefined","Code","Button","Dialog","DialogActions","DialogContent","DialogTitle","IconButton","TableCell","ellipsize","FlexRow","JsonViewerEx","usePayloadHash","React","useState","BlockJsonViewTableCell","block","props","open","setOpen","useState","onClose","hash","usePayloadHash","title","ellipsize","React","TableCell","FlexRow","sx","width","IconButton","onClick","Code","Dialog","DialogTitle","DialogContent","JsonViewerEx","value","DialogActions","display","flexDirection","justifyContent","Button","variant","TableCell","Tooltip","FlexRow","React","BlockProducerTableCell","block","linked","producerChipProps","props","ref","handleClick","useLinkedBlockItem","JSON","stringify","producer","useBlockProducer","React","TableCell","Tooltip","title","FlexRow","sx","width","BlockProducerChip","onClick","undefined","Error","Link","TableCell","Tooltip","React","BlockTransactionCountTableCell","block","chainArchivist","linked","props","txs","error","useTxsFromBlock","ref","handleClick","useLinkedBlockItem","JSON","stringify","React","TableCell","span","Tooltip","title","message","Error","color","Link","onClick","sx","cursor","length","TableCell","FlexRow","BWVerification","React","BlockVerificationTableCell","block","linked","props","ref","handleClick","useLinkedBlockItem","toString","React","TableCell","FlexRow","sx","width","BWVerification","onClick","undefined","iconColors","boundwitness","TableBody","TableCell","TableHead","TableRow","TableEx","React","BlockchainTableEx","ref","children","props","React","TableEx","TableHead","TableRow","TableCell","align","TableBody","displayName","TableRow","React","useMemo","BlockChainTableRow","block","defaultExpanded","linked","props","linkedTableCellProps","useMemo","defaultTableCellProps","React","TableRow","BlockHashTableCell","BlockNumberTableCell","BlockTransactionCountTableCell","BlockProducerTableCell","BlockVerificationTableCell","BlockJsonViewTableCell","Autorenew","Pause","Alert","AlertTitle","Grow","Icon","IconButton","Tooltip","FlexRow","React","memo","QueryStats","Dialog","DialogContent","DialogTitle","IconButton","React","useState","ListItem","styled","Typography","ErrorRender","FlexCol","isChainSummaryProducers","React","useMemo","Table","TableBody","TableCell","TableHead","TableRow","useTheme","BlockiesAvatar","React","ChainProducerStatsTable","producers","props","theme","useTheme","React","Table","TableHead","TableRow","TableCell","TableBody","map","producer","key","address","BlockiesAvatar","blockiesOptions","seed","sx","height","spacing","width","blocksProduced","toString","rewardsEarned","BlockProducerStatsFlexbox","payload","props","producer","producerError","useMemo","isChainSummaryProducers","undefined","Error","producersArray","Object","values","producers","React","FlexCol","alignItems","gap","ErrorRender","error","scope","Typography","fontSize","ChainProducerStatsTable","StyledListItem","styled","ListItem","paddingTop","paddingBottom","ChainAnalyzerStatsDialog","props","analyzers","statsUpdated","useChainAnalyzersContext","React","Dialog","DialogTitle","DialogContent","Object","entries","map","id","analyzer","div","key","BlockProducerStatsFlexbox","payload","result","ChainAnalyzerStatsDialogFromContext","open","setOpen","useState","handleClose","IconButton","onClick","QueryStats","onClose","alpha","createSvgIcon","keyframes","styled","React","PulseSvgIcon","svg","viewBox","version","xmlns","g","transform","circle","className","cx","cy","r","pulse1","pulse2","StyledPulseSvgIcon","theme","animation","fill","palette","success","main","divider","PollingControlsFlexbox","blocksBehind","pollingState","setPollingState","paused","running","React","FlexRow","justifyContent","width","gap","IconButton","onClick","title","Pause","Autorenew","ChainAnalyzerStatsDialogFromContext","Grow","in","Tooltip","Alert","sx","py","px","cursor","severity","AlertTitle","mb","Icon","StyledPulseSvgIcon","className","MemoizedPollingControlsFlexbox","memo","Button","Dialog","DialogActions","DialogContent","React","TransactionsDialog","props","React","Dialog","DialogContent","DialogActions","Button","variant","onClick","e","onClose","useEffect","useRef","useOnBlock","initialHeadNumber","onAddBlock","liveHead","pollingState","blocksWhilePaused","useRef","lastLiveHead","useEffect","current","block","isNewBlock","push","length","TablePaginationActions","React","BlockChainPagination","count","onPageChange","page","rowsPerPage","React","TablePaginationActions","useMemo","useState","useChainPagination","pageSize","blockComponents","page","setPage","useState","paginatedBlockComponents","useMemo","startIndex","endIndex","slice","onPageChange","_event","newPage","ErrorRender","FlexCol","ChainProducersAnalyzer","React","useMemo","AnimatedList","React","styled","FlexCol","BlockListWrapperFlexBox","name","visibility","height","BlockListAnimated","blockChainRenderComponents","React","BlockListWrapperFlexBox","alignItems","width","AnimatedList","fullWidth","items","useMemo","assertEx","XyoChainBlockNumberIterator","ChainIteratorStore","_chainIterator","_externalListeners","_internalUnsubscribes","_values","chainIterator","assertEx","values","create","params","instance","XyoChainBlockNumberIterator","head","headUpdatedListener","blocks","emitChange","unsubscribe","on","weakRefListener","WeakRef","push","cleanup","unsubscribeRef","deref","getSnapshot","subscribe","onStoreChange","filter","l","listener","assertEx","usePromise","BoundWitnessBuilder","isBlockBoundWitness","resolveDefinedHead","head","chainArchivist","headPayload","get","undefined","currentHead","BoundWitnessBuilder","build","assertEx","isBlockBoundWitness","JSON","stringify","useChainIteratorParams","chainInformation","usePromise","result","foundResult","resolvedHead","usePromise","useEffect","useMemo","useRef","useSyncExternalStore","toHex","findMostRecentBlock","useEffect","useState","useChainIteratorUpdatingHead","chainIterator","interval","maxBlocks","chainArchivist","error","setError","useState","useEffect","pollArchivistTimeout","pollingFunction","currentHead","head","mostRecentBlock","findMostRecentBlock","currentBlockNumber","block","nextBlockNumber","console","debug","toHex","updateHead","e","setTimeout","clearInterval","stub","useChainIteratorStore","chainIteratorParams","chainIteratorStore","usePromise","ChainIteratorStore","create","undefined","chainIterator","chainArchivist","error","useChainIteratorUpdatingHead","useEffect","cleanup","cachedSnapshot","useRef","getSnapShot","subscribe","useMemo","snapshot","getSnapshot","newValues","noCachedValue","current","newBlock","head","block","bind","useSyncExternalStore","assertEx","usePromise","isBlockBoundWitness","XyoChainBlockNumberIterator","iterateChain","chainIteratorParams","maxDepth","chainArchivist","head","headPayload","assertEx","isBlockBoundWitness","headBlockBoundWitness","chainIterator","XyoChainBlockNumberIterator","create","block","blocks","depth","next","previous","push","useIterateChain","usePromise","useDynamicBlockRenderComponents","BlockComponent","blockChainRenderProps","maxBlocks","chainIteratorParams","useMemo","params","paramsError","useChainIteratorParams","blockChainRenderComponents","onAddBlock","useDynamicBlockComponents","head","liveHead","useChainIteratorStore","pollingState","updatePollingState","useChainPollingContext","blocksWhilePaused","useOnBlock","block","errors","usePromise","useMemo","assertEx","asArchivistInstance","HttpBridge","HttpBridgeConfigSchema","getChainArchivistFromBridge","params","url","chainArchivistModuleId","config","schema","HttpBridgeConfigSchema","client","bridge","HttpBridge","create","resolved","resolve","mod","assertEx","asArchivistInstance","id","getChainInformation","chainInformation","useRemoteBlockChainRenderProps","chainArchivistModuleId","url","blockChainRenderPropsArg","chainArchivist","chainArchivistError","usePromise","getChainArchivistFromBridge","blockChainRenderProps","useMemo","error","Base","blockChainRenderProps","props","errors","blockChainRenderComponents","blocksWhilePaused","pollingState","updatePollingState","useDynamicBlockRenderComponents","BlockHeadingFlexbox","React","FlexCol","alignItems","map","error","index","ErrorRender","key","scope","MemoizedPollingControlsFlexbox","blocksBehind","length","setPollingState","BlockListAnimated","WithAnalysis","chainInformation","analyzers","useMemo","producers","ChainProducersAnalyzer","ChainAnalyzersProvider","ChainPollingProvider","DynamicBlockchainRenderFlexbox","WithRemote","url","chainArchivistModuleId","blockChainRenderPropsArg","useRemoteBlockChainRenderProps","ErrorRender","FlexCol","FlexGrowRow","ChainProducersAnalyzer","React","useMemo","exists","useMemo","DEFAULT_PAGE_SIZE","useStaticBlockRenderComponents","BlockComponent","blockChainRenderProps","maxBlocks","pageSize","chainIteratorParams","useMemo","params","paramsError","useChainIteratorParams","blocks","blocksError","useIterateChain","blockComponents","errors","blockComponentsError","useStaticBlockComponents","onPageChange","page","paginatedBlockComponents","useChainPagination","filter","exists","Base","blockChainRenderProps","props","blockComponents","errors","paginatedBlockComponents","onPageChange","page","pageSize","useStaticBlockRenderComponents","BlockHeadingFlexbox","React","FlexCol","alignItems","gap","width","map","error","index","ErrorRender","key","scope","length","FlexGrowRow","justifyContent","ChainAnalyzerStatsDialogFromContext","BlockChainPagination","count","rowsPerPage","BlockListAnimated","blockChainRenderComponents","WithAnalysis","chainInformation","analyzers","useMemo","producers","ChainProducersAnalyzer","ChainAnalyzersProvider","StaticBlockchainRenderFlexBox","FlexCol","JsonViewerEx","React","useState","PayloadBuilderFlexbox","BuilderComponent","onBuild","props","payload","setPayload","useState","onBuildLocal","React","FlexCol","gap","JsonViewerEx","value","Button","FormControl","createProducerChainStakeIntent","React","useMemo","useState","FormControl","FormHelperText","TextField","React","useState","BlockNumberTextField","errorMessage","onBlockNumberChanged","onChange","props","blockNumber","setBlockNumber","useState","handleChange","e","value","target","replaceAll","Number","undefined","parseInt","React","FormControl","fullWidth","TextField","error","type","FormHelperText","sx","color","theme","palette","main","FormControl","FormHelperText","TextField","asAddress","React","useEffect","useState","XyoAddressTextField","onAddressChanged","onChange","resetValue","props","address","setAddress","useState","addressError","setAddressError","useEffect","handleChange","event","value","target","xyoAddress","asAddress","undefined","handleBlur","Error","React","FormControl","fullWidth","TextField","error","onBlur","FormHelperText","sx","color","theme","palette","main","message","ProducerIntentBuilderForm","onBuild","delegate","setDelegate","useState","exp","setExp","nbf","setNbf","blockRangeError","setBlockRangeError","intentPayload","useMemo","undefined","Error","payload","createProducerChainStakeIntent","onBuildLocal","React","FormControl","fullWidth","XyoAddressTextField","label","name","onAddressChanged","required","size","BlockNumberTextField","errorMessage","message","onBlockNumberChanged","Button","disabled","variant","onClick","React","Button","FormControl","elevate","TransferSchema","React","useMemo","useState","RemoveCircle","FormControl","Icon","IconButton","toHex","FlexRow","BigIntInput","React","useEffect","useMemo","useState","SingleTransferBuilderFlexbox","onTransferUpdated","onRemoveTransfer","singleTransfer","props","toAddress","setToAddress","useState","amount","setAmount","transferAmount","useMemo","toHex","to","useEffect","React","FlexRow","alignItems","gap","FormControl","fullWidth","XyoAddressTextField","label","name","onAddressChanged","required","size","BigIntInput","TextField","onChangeFixedPoint","IconButton","onClick","transferId","Icon","RemoveCircle","TransferBuilderForm","onBuild","fromAddress","setFromAddress","useState","transfers","setTransfers","transferPayload","useMemo","length","transfersRecord","transfer","to","amount","elevate","schema","TransferSchema","epoch","Date","now","onBuildLocal","onTransferAdded","transferAmount","transferId","prev","onTransferRemoved","filter","onTransferUpdated","singleTransfer","map","React","FormControl","fullWidth","XyoAddressTextField","label","name","onAddressChanged","required","size","Button","onClick","variant","SingleTransferBuilderFlexbox","key","onRemoveTransfer","sx","width","disabled","TransferBuilderFlexbox","onBuild","props","React","PayloadBuilderFlexbox","gap","alignItems","BuilderComponent","TransferBuilderForm","Account","buildRandomChain","flattenHydratedBlocks","buildRandomBlockChain","blockCount","initialBlockProducer","Account","random","blocks","buildRandomChain","flattenHydratedBlocks","buildRandomBlockChainBlocksOnly","chain","map","block","CircularProgress","usePromise","MemoryArchivist","ArchivistConfigSchema","isBlockBoundWitness","React","useEffect","ChainArchivistDecorator","Story","context","randomBlockChain","usePromise","buildRandomBlockChain","blockChainRenderProps","blockChainRenderPropsError","chainArchivist","MemoryArchivist","create","config","schema","ArchivistConfigSchema","name","insert","chainInformation","getChainInformation","useEffect","console","error","props","args","head","toReversed","find","isBlockBoundWitness","_hash","React","CircularProgress","CircularProgress","delay","usePromise","MemoryArchivist","ArchivistConfigSchema","isBlockBoundWitness","React","useEffect","useState","chainArchivistRef","ChainArchivistDelayedInsertDecorator","Story","context","firstBlock","setFirstBlock","useState","randomBlockChain","usePromise","buildRandomBlockChain","chainArchivist","MemoryArchivist","create","config","schema","ArchivistConfigSchema","name","delayedInsertError","nextBlockPayloads","payload","isBlockBoundWitness","push","insert","prev","length","delay","useEffect","console","error","blockChainRenderProps","chainInformation","getChainInformation","props","args","head","find","_hash","React","CircularProgress","assertEx","usePromise","isBlockBoundWitness","XyoChainBlockNumberIterator","findFirstMatching","React","archivistConfig","url","chainArchivistModuleId","ChainInfoContextDecorator","Story","context","chainInformationResponse","usePromise","getChainInformation","chainInformation","chainArchivist","getChainArchivistFromBridge","chainIterator","firstMatch","assertEx","findFirstMatching","id","head","isBlockBoundWitness","undefined","JSON","stringify","XyoChainBlockNumberIterator","create","React","ChainInfoProvider"]}
@@ -1 +1 @@
1
- {"version":3,"file":"Provider.d.ts","sourceRoot":"","sources":["../../../../src/context/chain/Provider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAA;AAC9C,OAAO,KAEN,MAAM,OAAO,CAAA;AAGd,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAEhD,UAAU,sBAAuB,SAAQ,iBAAiB,EAAE,IAAI,CAAC,cAAc,EAAE,UAAU,CAAC;CAC3F;AAED,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC,sBAAsB,CA4C9D,CAAA"}
1
+ {"version":3,"file":"Provider.d.ts","sourceRoot":"","sources":["../../../../src/context/chain/Provider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAA;AAC9C,OAAO,KAA4B,MAAM,OAAO,CAAA;AAGhD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAEhD,UAAU,sBAAuB,SAAQ,iBAAiB,EAAE,IAAI,CAAC,cAAc,EAAE,UAAU,CAAC;CAC3F;AAED,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC,sBAAsB,CA4C9D,CAAA"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "http://json.schemastore.org/package.json",
3
3
  "name": "@xyo-network/react-chain-blockchain",
4
- "version": "1.0.9",
4
+ "version": "1.0.10",
5
5
  "description": "XYO Layer One React SDK Blockchain",
6
6
  "homepage": "https://xylabs.com",
7
7
  "bugs": {
@@ -51,15 +51,15 @@
51
51
  "@xyo-network/archivist-model": "^3.10.4",
52
52
  "@xyo-network/boundwitness-builder": "^3.10.4",
53
53
  "@xyo-network/bridge-http": "^3.10.4",
54
- "@xyo-network/chain-ethereum": "^1.0.9",
55
- "@xyo-network/chain-model": "^1.0.9",
56
- "@xyo-network/chain-protocol": "^1.0.9",
57
- "@xyo-network/chain-services": "^1.0.9",
54
+ "@xyo-network/chain-ethereum": "^1.0.10",
55
+ "@xyo-network/chain-model": "^1.0.10",
56
+ "@xyo-network/chain-protocol": "^1.0.10",
57
+ "@xyo-network/chain-services": "^1.0.10",
58
58
  "@xyo-network/module-model": "^3.10.4",
59
59
  "@xyo-network/payload-builder": "^3.10.4",
60
60
  "@xyo-network/payload-model": "^3.10.4",
61
- "@xyo-network/react-chain-blockies": "^1.0.9",
62
- "@xyo-network/react-chain-boundwitness": "^1.0.9",
61
+ "@xyo-network/react-chain-blockies": "^1.0.10",
62
+ "@xyo-network/react-chain-boundwitness": "^1.0.10",
63
63
  "@xyo-network/react-event": "^5.0.7",
64
64
  "@xyo-network/react-payload-raw-info": "^5.0.7",
65
65
  "@xyo-network/react-payload-table": "^5.0.7",
@@ -79,7 +79,7 @@
79
79
  "@xylabs/ts-scripts-yarn3": "^6.1.4",
80
80
  "@xylabs/tsconfig-react": "^6.1.4",
81
81
  "@xyo-network/archivist-memory": "^3.10.4",
82
- "@xyo-network/chain-utils": "^1.0.9",
82
+ "@xyo-network/chain-utils": "^1.0.10",
83
83
  "eslint": "^9.22.0",
84
84
  "react": "^19.0.0",
85
85
  "react-dom": "^19.0.0",
@@ -1,7 +1,5 @@
1
1
  import type { PropsWithChildren } from 'react'
2
- import React, {
3
- useEffect, useMemo, useState,
4
- } from 'react'
2
+ import React, { useMemo, useState } from 'react'
5
3
 
6
4
  import { ChainInfoContext } from './Context.ts'
7
5
  import type { ChainInfoState } from './State.ts'
@@ -26,15 +24,15 @@ export const ChainInfoProvider: React.FC<ChainInfoProviderProps> = ({
26
24
  setChainIterator(chainIterator)
27
25
  }
28
26
 
29
- useEffect(() => {
27
+ useMemo(() => {
30
28
  updateChainArchivist(chainArchivistProp)
31
29
  }, [chainArchivistProp])
32
30
 
33
- useEffect(() => {
31
+ useMemo(() => {
34
32
  updateChainInformation(chainInformationProp)
35
33
  }, [chainInformationProp])
36
34
 
37
- useEffect(() => {
35
+ useMemo(() => {
38
36
  updateChainIterator(chainIteratorProp)
39
37
  }, [chainIteratorProp])
40
38