@xyo-network/react-chain-boundwitness 1.5.29 → 1.5.30

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.
Files changed (29) hide show
  1. package/dist/browser/index.mjs +111 -47
  2. package/dist/browser/index.mjs.map +1 -1
  3. package/dist/types/components/{BwPayloadTable.d.ts → PayloadTable.d.ts} +3 -2
  4. package/dist/types/components/PayloadTable.d.ts.map +1 -0
  5. package/dist/types/components/block/card/hooks/useDetails.d.ts.map +1 -1
  6. package/dist/types/components/index.d.ts +1 -1
  7. package/dist/types/components/index.d.ts.map +1 -1
  8. package/dist/types/components/transactions/{TransactionDetails.d.ts → TransactionBoundWitnessDetails.d.ts} +1 -1
  9. package/dist/types/components/transactions/TransactionBoundWitnessDetails.d.ts.map +1 -0
  10. package/dist/types/components/transactions/card/hooks/useDetails.d.ts.map +1 -1
  11. package/dist/types/components/transactions/hooks/index.d.ts +2 -0
  12. package/dist/types/components/transactions/hooks/index.d.ts.map +1 -0
  13. package/dist/types/components/transactions/hooks/usePayloadTypes.d.ts +12 -0
  14. package/dist/types/components/transactions/hooks/usePayloadTypes.d.ts.map +1 -0
  15. package/dist/types/components/transactions/index.d.ts +1 -1
  16. package/dist/types/components/transactions/index.d.ts.map +1 -1
  17. package/package.json +24 -25
  18. package/src/components/{BwPayloadTable.tsx → PayloadTable.tsx} +17 -2
  19. package/src/components/block/BlockBoundWitnessDetails.tsx +3 -3
  20. package/src/components/block/card/hooks/useDetails.ts +0 -2
  21. package/src/components/index.ts +1 -1
  22. package/src/components/transactions/{TransactionDetails.stories.tsx → TransactionBoundWitnessDetails.stories.tsx} +1 -1
  23. package/src/components/transactions/{TransactionDetails.tsx → TransactionBoundWitnessDetails.tsx} +30 -42
  24. package/src/components/transactions/card/hooks/useDetails.ts +3 -2
  25. package/src/components/transactions/hooks/index.ts +1 -0
  26. package/src/components/transactions/hooks/usePayloadTypes.ts +67 -0
  27. package/src/components/transactions/index.ts +1 -1
  28. package/dist/types/components/BwPayloadTable.d.ts.map +0 -1
  29. package/dist/types/components/transactions/TransactionDetails.d.ts.map +0 -1
@@ -60,8 +60,11 @@ var formatResults = /* @__PURE__ */ __name((results) => {
60
60
  return result;
61
61
  }, "formatResults");
62
62
 
63
- // src/components/BwPayloadTable.tsx
63
+ // src/components/PayloadTable.tsx
64
+ import { InfoOutline } from "@mui/icons-material";
65
+ import { Tooltip } from "@mui/material";
64
66
  import { FlexCol } from "@xylabs/react-flexbox";
67
+ import { isDefined } from "@xylabs/typeof";
65
68
  import { BoundWitnessPayloadTableBody, BoundWitnessPayloadTableHead, HeadingPaper } from "@xyo-network/react-boundwitness-plugin";
66
69
  import { TableEx } from "@xyo-network/react-table";
67
70
  import React from "react";
@@ -69,13 +72,22 @@ import { VscSymbolMethod } from "react-icons/vsc";
69
72
  var defaultClickableFields = [
70
73
  "hash"
71
74
  ];
72
- var BWPayloadTableFlexbox = /* @__PURE__ */ __name(({ IconComponent, eventNoun, hashes, schemas, headingTitle, clickableFields = defaultClickableFields, ...props }) => {
75
+ var PayloadTableFlexbox = /* @__PURE__ */ __name(({ IconComponent, eventNoun, hashes, schemas, headingTitle, clickableFields = defaultClickableFields, tooltip, ...props }) => {
73
76
  const resolvedIconComponent = IconComponent ?? /* @__PURE__ */ React.createElement(VscSymbolMethod, null);
74
77
  return /* @__PURE__ */ React.createElement(FlexCol, {
75
78
  alignItems: "stretch",
76
79
  rowGap: 1,
77
80
  ...props
78
81
  }, /* @__PURE__ */ React.createElement(HeadingPaper, {
82
+ AdornmentEnd: isDefined(tooltip) ? /* @__PURE__ */ React.createElement(Tooltip, {
83
+ title: tooltip
84
+ }, /* @__PURE__ */ React.createElement(InfoOutline, {
85
+ fontSize: "small",
86
+ sx: {
87
+ py: 2,
88
+ px: 1
89
+ }
90
+ })) : null,
79
91
  IconComponent: resolvedIconComponent,
80
92
  heading: headingTitle
81
93
  }), /* @__PURE__ */ React.createElement(TableEx, null, /* @__PURE__ */ React.createElement(BoundWitnessPayloadTableHead, null), /* @__PURE__ */ React.createElement(BoundWitnessPayloadTableBody, {
@@ -84,7 +96,7 @@ var BWPayloadTableFlexbox = /* @__PURE__ */ __name(({ IconComponent, eventNoun,
84
96
  eventNoun,
85
97
  clickableFields
86
98
  })));
87
- }, "BWPayloadTableFlexbox");
99
+ }, "PayloadTableFlexbox");
88
100
 
89
101
  // src/components/block/card/Card.tsx
90
102
  import { Card, CardContent, Grid, Skeleton, Stack } from "@mui/material";
@@ -96,7 +108,7 @@ import { IoStatsChartOutline } from "react-icons/io5";
96
108
  import { VscSymbolNamespace } from "react-icons/vsc";
97
109
 
98
110
  // src/components/block/card/CardHeader.tsx
99
- import { CardHeader, Link, Tooltip, Typography } from "@mui/material";
111
+ import { CardHeader, Link, Tooltip as Tooltip2, Typography } from "@mui/material";
100
112
  import { BlockiesAvatarAddress } from "@xyo-network/react-chain-blockies";
101
113
  import { useEvent } from "@xyo-network/react-event";
102
114
  import React2 from "react";
@@ -118,7 +130,7 @@ var BlockBoundWitnessCardHeader = /* @__PURE__ */ __name(({ linked = true, addre
118
130
  cursor: "pointer"
119
131
  }
120
132
  }, address) : address),
121
- avatar: /* @__PURE__ */ React2.createElement(Tooltip, {
133
+ avatar: /* @__PURE__ */ React2.createElement(Tooltip2, {
122
134
  title: `Address - ${address}`
123
135
  }, /* @__PURE__ */ React2.createElement(BlockiesAvatarAddress, {
124
136
  address,
@@ -159,8 +171,6 @@ var useBlockDetails = /* @__PURE__ */ __name((wrapper, viewer) => {
159
171
  const payloads = useMemo(() => {
160
172
  const payloads2 = {
161
173
  "Transactions": formatNumber(wrapper.transactionCount),
162
- "Public Payloads": formatNumber(wrapper.publicPayloadCount),
163
- "Private Payloads": formatNumber(wrapper.privatePayloadCount),
164
174
  "Total Payloads": formatNumber(wrapper.payloadCount)
165
175
  };
166
176
  return formatResults(payloads2);
@@ -337,7 +347,7 @@ var BlockBoundWitnessDetails = /* @__PURE__ */ __name(({ block, paper, viewer, c
337
347
  elevation: 4,
338
348
  viewer,
339
349
  wrapper
340
- }), (transactions?.length ?? 0) > 0 && /* @__PURE__ */ React4.createElement(BWPayloadTableFlexbox, {
350
+ }), (transactions?.length ?? 0) > 0 && /* @__PURE__ */ React4.createElement(PayloadTableFlexbox, {
341
351
  IconComponent: /* @__PURE__ */ React4.createElement(GrTransaction, null),
342
352
  eventNoun: "transaction",
343
353
  hashes: txHashes,
@@ -355,7 +365,7 @@ var BlockBoundWitnessDetails = /* @__PURE__ */ __name(({ block, paper, viewer, c
355
365
  heading: "Payloads"
356
366
  }), /* @__PURE__ */ React4.createElement(BoundWitnessPayloadsTable, {
357
367
  boundwitness: boundWitness
358
- })), hasNonTxBoundWitnesses ? /* @__PURE__ */ React4.createElement(BWPayloadTableFlexbox, {
368
+ })), hasNonTxBoundWitnesses ? /* @__PURE__ */ React4.createElement(PayloadTableFlexbox, {
359
369
  IconComponent: /* @__PURE__ */ React4.createElement(VscSymbolMethod2, null),
360
370
  eventNoun: "boundwitness",
361
371
  hashes: nonTxBwHashes,
@@ -377,7 +387,7 @@ var BlockBoundWitnessDetails = /* @__PURE__ */ __name(({ block, paper, viewer, c
377
387
  }, "BlockBoundWitnessDetails");
378
388
 
379
389
  // src/components/transactions/card/Card.tsx
380
- import { Card as Card2, CardContent as CardContent2, CardHeader as CardHeader2, Grid as Grid2, Link as Link2, Tooltip as Tooltip2, Typography as Typography2 } from "@mui/material";
390
+ import { Card as Card2, CardContent as CardContent2, CardHeader as CardHeader2, Grid as Grid2, Link as Link2, Tooltip as Tooltip3, Typography as Typography2 } from "@mui/material";
381
391
  import { BlockiesAvatarAddress as BlockiesAvatarAddress2 } from "@xyo-network/react-chain-blockies";
382
392
  import { DetailsStack as DetailsStack2, LabelValueStack as LabelValueStack2 } from "@xyo-network/react-chain-shared";
383
393
  import { useEvent as useEvent2 } from "@xyo-network/react-event";
@@ -391,8 +401,9 @@ var useTransactionDetails = /* @__PURE__ */ __name((wrapper) => {
391
401
  const stats = useMemo3(() => {
392
402
  const stats2 = {
393
403
  "Reward": formatNumber(wrapper.reward()),
394
- "Elevated Payloads": formatNumber(wrapper.elevatedPayloadCount),
395
- "Total Payloads": formatNumber(wrapper.payloadCount),
404
+ "On Chain Payloads": formatNumber(wrapper.elevatedPayloadCount),
405
+ "Public Payloads": formatNumber(Object.values(wrapper.publicExternalPayloads).length),
406
+ "Referenced Payloads": formatNumber(Object.entries(wrapper.privateExternalPayloads).length),
396
407
  "Signatures": formatNumber(wrapper.signatureCount)
397
408
  };
398
409
  return formatResults(stats2);
@@ -449,7 +460,7 @@ var TransactionBoundWitnessCard = /* @__PURE__ */ __name(({ linkedAddress = true
449
460
  cursor: "pointer"
450
461
  }
451
462
  }, wrapper?.boundWitness.from) : wrapper?.boundWitness.from),
452
- avatar: /* @__PURE__ */ React5.createElement(Tooltip2, {
463
+ avatar: /* @__PURE__ */ React5.createElement(Tooltip3, {
453
464
  title: `From Address - ${wrapper?.boundWitness.from}`
454
465
  }, /* @__PURE__ */ React5.createElement(BlockiesAvatarAddress2, {
455
466
  address: wrapper?.boundWitness.from,
@@ -507,28 +518,26 @@ var TransactionBoundWitnessCard = /* @__PURE__ */ __name(({ linkedAddress = true
507
518
  }))))));
508
519
  }, "TransactionBoundWitnessCard");
509
520
 
510
- // src/components/transactions/TransactionDetails.tsx
521
+ // src/components/transactions/TransactionBoundWitnessDetails.tsx
511
522
  import { ErrorRender as ErrorRender3 } from "@xylabs/react-error";
512
523
  import { FlexCol as FlexCol3 } from "@xylabs/react-flexbox";
513
- import { usePromise as usePromise3 } from "@xylabs/react-promise";
514
- import { isDefined } from "@xylabs/typeof";
524
+ import { usePromise as usePromise4 } from "@xylabs/react-promise";
515
525
  import { SignedHydratedTransactionWrapper } from "@xyo-network/chain-wrappers";
516
- import { PayloadBuilder as PayloadBuilder2 } from "@xyo-network/payload-builder";
517
526
  import { BoundWitnessSignatureTable as BoundWitnessSignatureTable2, BWActions as BWActions2, HashHeadingPaper as HashHeadingPaper2, HeadingPaper as HeadingPaper3 } from "@xyo-network/react-boundwitness-plugin";
518
527
  import React6 from "react";
519
528
  import { FaSignature as FaSignature2 } from "react-icons/fa";
520
- import { VscSymbolMethod as VscSymbolMethod3, VscSymbolNamespace as VscSymbolNamespace3 } from "react-icons/vsc";
521
- var nonClickableFields = [];
522
- var TransactionBoundWitnessDetails = /* @__PURE__ */ __name(({ transaction, ...props }) => {
523
- const [wrapper, wrapperError] = usePromise3(async () => {
524
- if (transaction) {
525
- return await SignedHydratedTransactionWrapper.parse(transaction);
526
- }
527
- }, [
528
- transaction
529
- ]);
529
+ import { VscSymbolNamespace as VscSymbolNamespace3 } from "react-icons/vsc";
530
+
531
+ // src/components/transactions/hooks/usePayloadTypes.ts
532
+ import { isHash } from "@xylabs/hex";
533
+ import { usePromise as usePromise3 } from "@xylabs/react-promise";
534
+ import { isDefined as isDefined2 } from "@xylabs/typeof";
535
+ import { PayloadBuilder as PayloadBuilder2 } from "@xyo-network/payload-builder";
536
+ import { isSchema } from "@xyo-network/payload-model";
537
+ import { useMemo as useMemo4 } from "react";
538
+ var useTransactionPayloadTypes = /* @__PURE__ */ __name((wrapper) => {
530
539
  const [elevatedPayloadSets, elevatedPayloadSetsError] = usePromise3(async () => {
531
- if (isDefined(wrapper)) {
540
+ if (isDefined2(wrapper)) {
532
541
  const elevatedPayloads = wrapper.elevatedPayloads;
533
542
  const pairs = await PayloadBuilder2.hashPairs(elevatedPayloads);
534
543
  return formatPayloadsForTable(pairs);
@@ -541,14 +550,10 @@ var TransactionBoundWitnessDetails = /* @__PURE__ */ __name(({ transaction, ...p
541
550
  }, [
542
551
  wrapper
543
552
  ]);
544
- const [nonElevatedPayloadSets, nonElevatedPayloadSetsError] = usePromise3(async () => {
545
- if (isDefined(wrapper)) {
546
- const elevatedPayloads = wrapper.elevatedPayloads;
547
- const payloads = wrapper.payloads;
548
- const nonElevatedPayloads = payloads.filter((payload) => {
549
- return elevatedPayloads.every((elevated) => elevated._hash !== payload._hash);
550
- });
551
- const pairs = await PayloadBuilder2.hashPairs(nonElevatedPayloads);
553
+ const [publicPayloads, publicPayloadsError] = usePromise3(async () => {
554
+ if (isDefined2(wrapper)) {
555
+ const publicPayloads2 = wrapper.publicExternalPayloads;
556
+ const pairs = await PayloadBuilder2.hashPairs(publicPayloads2);
552
557
  return formatPayloadsForTable(pairs);
553
558
  } else {
554
559
  return {
@@ -559,8 +564,56 @@ var TransactionBoundWitnessDetails = /* @__PURE__ */ __name(({ transaction, ...p
559
564
  }, [
560
565
  wrapper
561
566
  ]);
567
+ const referencedPayloads = useMemo4(() => {
568
+ const ret = {
569
+ hashes: [],
570
+ schemas: []
571
+ };
572
+ if (isDefined2(wrapper)) {
573
+ const referencedPayloads2 = wrapper.privateExternalPayloads;
574
+ for (const [hash, payloadOrSchema] of Object.entries(referencedPayloads2)) {
575
+ if (isHash(hash)) {
576
+ ret.hashes.push(hash);
577
+ }
578
+ if (isSchema(payloadOrSchema)) {
579
+ ret.schemas.push(hash);
580
+ }
581
+ throw new Error(`Unexpected payload or schema type for hash ${hash}: ${payloadOrSchema}`);
582
+ }
583
+ return ret;
584
+ } else {
585
+ return ret;
586
+ }
587
+ }, [
588
+ wrapper,
589
+ elevatedPayloadSets
590
+ ]);
562
591
  const { hashes: elevatedPayloadHashes, schemas: elevatedPayloadSchemas } = elevatedPayloadSets ?? {};
563
- const { hashes: nonElevatedPayloadHashes, schemas: nonElevatedPayloadSchemas } = nonElevatedPayloadSets ?? {};
592
+ const { hashes: publicPayloadHashes, schemas: publicPayloadSchemas } = publicPayloads ?? {};
593
+ const { hashes: referencedPayloadHashes, schemas: referencedPayloadSchemas } = referencedPayloads ?? {};
594
+ return {
595
+ elevatedPayloadHashes,
596
+ elevatedPayloadSchemas,
597
+ elevatedPayloadSetsError,
598
+ publicPayloadHashes,
599
+ publicPayloadSchemas,
600
+ publicPayloadsError,
601
+ referencedPayloadHashes,
602
+ referencedPayloadSchemas
603
+ };
604
+ }, "useTransactionPayloadTypes");
605
+
606
+ // src/components/transactions/TransactionBoundWitnessDetails.tsx
607
+ var nonClickableFields = [];
608
+ var TransactionBoundWitnessDetails = /* @__PURE__ */ __name(({ transaction, ...props }) => {
609
+ const [wrapper, wrapperError] = usePromise4(async () => {
610
+ if (transaction) {
611
+ return await SignedHydratedTransactionWrapper.parse(transaction);
612
+ }
613
+ }, [
614
+ transaction
615
+ ]);
616
+ const { elevatedPayloadHashes, elevatedPayloadSchemas, elevatedPayloadSetsError, publicPayloadHashes, publicPayloadSchemas, publicPayloadsError, referencedPayloadHashes, referencedPayloadSchemas } = useTransactionPayloadTypes(wrapper);
564
617
  return /* @__PURE__ */ React6.createElement(FlexCol3, {
565
618
  alignItems: "stretch",
566
619
  rowGap: 2,
@@ -586,25 +639,36 @@ var TransactionBoundWitnessDetails = /* @__PURE__ */ __name(({ transaction, ...p
586
639
  error: elevatedPayloadSetsError,
587
640
  scope: "elevatedPayloadSetsError:TransactionBoundWitnessDetails.tsx"
588
641
  }), /* @__PURE__ */ React6.createElement(ErrorRender3, {
589
- error: nonElevatedPayloadSetsError,
590
- scope: "nonElevatedPayloadSetsError:TransactionBoundWitnessDetails.tsx"
642
+ error: publicPayloadsError,
643
+ scope: "publicPayloadsError:TransactionBoundWitnessDetails.tsx"
591
644
  }), /* @__PURE__ */ React6.createElement(TransactionBoundWitnessCard, {
592
645
  elevation: 4,
593
646
  wrapper
594
- }), /* @__PURE__ */ React6.createElement(BWPayloadTableFlexbox, {
647
+ }), /* @__PURE__ */ React6.createElement(PayloadTableFlexbox, {
648
+ tooltip: "Payloads included in the transaction that are elevated and validated.",
595
649
  IconComponent: /* @__PURE__ */ React6.createElement(VscSymbolNamespace3, null),
596
650
  hashes: elevatedPayloadHashes,
597
- headingTitle: "Elevated Payloads",
651
+ headingTitle: "On Chain Payloads",
598
652
  schemas: elevatedPayloadSchemas,
599
653
  sx: {
600
654
  mb: 1
601
655
  }
602
- }), (nonElevatedPayloadHashes?.length ?? 0) > 0 && /* @__PURE__ */ React6.createElement(BWPayloadTableFlexbox, {
603
- IconComponent: /* @__PURE__ */ React6.createElement(VscSymbolMethod3, null),
656
+ }), (publicPayloadHashes?.length ?? 0) > 0 && /* @__PURE__ */ React6.createElement(PayloadTableFlexbox, {
657
+ tooltip: "Public payloads included in the transaction.",
658
+ IconComponent: /* @__PURE__ */ React6.createElement(VscSymbolNamespace3, null),
659
+ hashes: publicPayloadHashes,
660
+ headingTitle: "Public Payloads",
661
+ schemas: publicPayloadSchemas,
662
+ sx: {
663
+ mb: 1
664
+ }
665
+ }), (referencedPayloadHashes?.length ?? 0) > 0 && /* @__PURE__ */ React6.createElement(PayloadTableFlexbox, {
666
+ tooltip: "Payload hashes referenced by the transaction but not included.",
667
+ IconComponent: /* @__PURE__ */ React6.createElement(VscSymbolNamespace3, null),
604
668
  clickableFields: nonClickableFields,
605
- hashes: nonElevatedPayloadHashes,
606
- headingTitle: "Non-Elevated Payloads",
607
- schemas: nonElevatedPayloadSchemas,
669
+ hashes: referencedPayloadHashes,
670
+ headingTitle: "Referenced Payloads",
671
+ schemas: referencedPayloadSchemas,
608
672
  sx: {
609
673
  mb: 1
610
674
  }
@@ -620,8 +684,8 @@ var TransactionBoundWitnessDetails = /* @__PURE__ */ __name(({ transaction, ...p
620
684
  })));
621
685
  }, "TransactionBoundWitnessDetails");
622
686
  export {
623
- BWPayloadTableFlexbox,
624
687
  BlockBoundWitnessDetails,
688
+ PayloadTableFlexbox,
625
689
  TransactionBoundWitnessCard,
626
690
  TransactionBoundWitnessDetails
627
691
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components/block/BlockBoundWitnessDetails.tsx","../../src/lib/formatFees.ts","../../src/lib/formatNumber.ts","../../src/lib/formatPayloadsForTable.ts","../../src/lib/formatResults.ts","../../src/components/BwPayloadTable.tsx","../../src/components/block/card/Card.tsx","../../src/components/block/card/CardHeader.tsx","../../src/components/block/card/hooks/useDetails.ts","../../src/components/transactions/card/Card.tsx","../../src/components/transactions/card/hooks/useDetails.ts","../../src/components/transactions/TransactionDetails.tsx"],"sourcesContent":["import { filterAs } from '@xylabs/array'\nimport { ErrorRender } from '@xylabs/react-error'\nimport type { FlexBoxProps } from '@xylabs/react-flexbox'\nimport { FlexCol } from '@xylabs/react-flexbox'\nimport { usePromise } from '@xylabs/react-promise'\nimport { isBoundWitness } from '@xyo-network/boundwitness-model'\nimport { SignedHydratedBlockWrapper } from '@xyo-network/chain-wrappers'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport {\n BoundWitnessPayloadsTable,\n BoundWitnessSignatureTable,\n BWActions,\n HashHeadingPaper,\n HeadingPaper,\n} from '@xyo-network/react-boundwitness-plugin'\nimport { useTxsFromBlock } from '@xyo-network/react-chain-blockchain'\nimport { usePayloadHash } from '@xyo-network/react-shared'\nimport type { SignedHydratedBlock, XyoViewer } from '@xyo-network/xl1-protocol'\nimport { isTransactionBoundWitness } from '@xyo-network/xl1-protocol'\nimport React, { useMemo } from 'react'\nimport { FaSignature } from 'react-icons/fa'\nimport { GrTransaction } from 'react-icons/gr'\nimport { VscSymbolMethod, VscSymbolNamespace } from 'react-icons/vsc'\n\nimport { formatPayloadsForTable } from '../../lib/index.ts'\nimport type { TransactionBoundWitnessEvents } from '../../types/index.ts'\nimport { BWPayloadTableFlexbox } from '../BwPayloadTable.tsx'\nimport { BlockBoundWitnessCard } from './card/Card.tsx'\n\nexport interface BoundWitnessDetailsProps extends FlexBoxProps {\n block?: SignedHydratedBlock\n viewer?: XyoViewer\n}\n\nexport const BlockBoundWitnessDetails = ({\n block, paper, viewer, children, ...props\n}: BoundWitnessDetailsProps) => {\n const [wrapper, wrapperError] = usePromise(async () => {\n if (block) {\n return await SignedHydratedBlockWrapper.parse(block)\n }\n }, [block])\n\n const boundWitness = block?.[0]\n const payloads = block?.[1]\n\n const hash = usePayloadHash(boundWitness)\n\n const [transactions, txFromBlockError] = useTxsFromBlock(block)\n\n const { hashes: txHashes, schemas: txSchemas } = useMemo(() => formatPayloadsForTable(transactions ?? []), [transactions])\n\n const [nonTxBoundWitnesses, bwsFromBlockError] = usePromise(async () => {\n const bws = filterAs(payloads ?? [], payload =>\n (!isTransactionBoundWitness(payload) && isBoundWitness(payload)) ? payload : undefined)\n return await PayloadBuilder.hashPairs(bws)\n }, [payloads])\n\n const { hashes: nonTxBwHashes, schemas: nonTxBwSchemas } = useMemo(() => formatPayloadsForTable(nonTxBoundWitnesses ?? []), [nonTxBoundWitnesses])\n const hasNonTxBoundWitnesses = (nonTxBoundWitnesses?.length ?? 0) > 0\n\n return (\n <FlexCol alignItems=\"stretch\" rowGap={4} {...props}>\n <ErrorRender error={txFromBlockError ?? bwsFromBlockError} scope=\"BlockBoundWitnessDetails.tsx\" />\n <ErrorRender error={wrapperError} scope=\"BlockBoundWitnessDetails.tsx:wrapperError\" />\n <HashHeadingPaper\n hash={hash}\n paperProps={{ sx: { p: 2 } }}\n AdornmentEnd={<BWActions boundwitness={boundWitness} />}\n identiconProps={{ p: 0.75, size: 24 }}\n />\n <BlockBoundWitnessCard elevation={4} viewer={viewer} wrapper={wrapper} />\n {(transactions?.length ?? 0) > 0 && (\n <BWPayloadTableFlexbox<TransactionBoundWitnessEvents>\n IconComponent={<GrTransaction />}\n eventNoun=\"transaction\"\n hashes={txHashes}\n headingTitle=\"Transactions\"\n schemas={txSchemas}\n sx={{ mb: 1 }}\n />\n )}\n <FlexCol alignItems=\"stretch\" rowGap={1} mb={1}>\n <HeadingPaper IconComponent={<VscSymbolNamespace />} heading=\"Payloads\" />\n <BoundWitnessPayloadsTable boundwitness={boundWitness} />\n </FlexCol>\n {hasNonTxBoundWitnesses\n ? (\n <BWPayloadTableFlexbox<TransactionBoundWitnessEvents>\n IconComponent={<VscSymbolMethod />}\n eventNoun=\"boundwitness\"\n hashes={nonTxBwHashes}\n headingTitle=\"Bound Witnesses\"\n schemas={nonTxBwSchemas}\n sx={{ mb: 1 }}\n />\n )\n : null}\n <FlexCol alignItems=\"stretch\" rowGap={1} mb={1}>\n <HeadingPaper IconComponent={<FaSignature />} heading=\"Signatures\" />\n <BoundWitnessSignatureTable block={boundWitness} />\n </FlexCol>\n </FlexCol>\n )\n}\n","import { isUndefined } from '@xylabs/typeof'\nimport { bigIntToFixedPointString } from '@xyo-network/chain-utils'\n\nexport const formatFee = (fee?: bigint) => {\n if (isUndefined(fee)) return 'N/A'\n const stringValue = bigIntToFixedPointString(fee, 12)\n if (stringValue === '0') return stringValue\n return stringValue\n}\n","export const formatNumber = (num: number | bigint): string => {\n return num.toLocaleString(navigator.language ?? 'en-US')\n}\n","import type { Hash } from '@xylabs/hex'\nimport type { Payload } from '@xyo-network/payload-model'\n\nexport const formatPayloadsForTable = (pairs: [Payload, Hash][]) => {\n let hashes: Hash[] = []\n let schemas: string[] = []\n for (const [bw, hash] of pairs ?? []) {\n hashes.push(hash)\n schemas.push(bw?.schema ?? '')\n }\n return { hashes, schemas }\n}\n","export const formatResults = (results: Record<string, string>) => {\n const result = { labels: [] as string[], values: [] as string[] }\n for (const [label, value] of Object.entries(results)) {\n result.labels.push(label)\n result.values.push(value)\n }\n return result\n}\n","import type { Hash } from '@xylabs/hex'\nimport type { FlexBoxProps } from '@xylabs/react-flexbox'\nimport { FlexCol } from '@xylabs/react-flexbox'\nimport {\n BoundWitnessPayloadTableBody, BoundWitnessPayloadTableHead, HeadingPaper,\n} from '@xyo-network/react-boundwitness-plugin'\nimport type { EventNoun, ExtendEventNoun } from '@xyo-network/react-event'\nimport { TableEx } from '@xyo-network/react-table'\nimport React from 'react'\nimport { VscSymbolMethod } from 'react-icons/vsc'\n\nexport type ClickableFields = 'hash'\nconst defaultClickableFields: ClickableFields[] = ['hash']\n\nexport interface BWPayloadTableFlexboxProps<TNoun extends ExtendEventNoun = EventNoun> extends FlexBoxProps {\n IconComponent?: React.ReactNode\n clickableFields?: ClickableFields[]\n eventNoun?: TNoun\n hashes?: Hash[]\n headingTitle?: string\n schemas?: string[]\n}\n\nexport const BWPayloadTableFlexbox = <TNoun extends ExtendEventNoun = EventNoun>({\n IconComponent,\n eventNoun,\n hashes,\n schemas,\n headingTitle,\n clickableFields = defaultClickableFields,\n ...props\n}: BWPayloadTableFlexboxProps<TNoun>) => {\n const resolvedIconComponent = IconComponent ?? <VscSymbolMethod />\n return (\n <FlexCol alignItems=\"stretch\" rowGap={1} {...props}>\n <HeadingPaper IconComponent={resolvedIconComponent} heading={headingTitle} />\n <TableEx>\n <BoundWitnessPayloadTableHead />\n <BoundWitnessPayloadTableBody<TNoun> payloadHashes={hashes} payloadSchemas={schemas} eventNoun={eventNoun} clickableFields={clickableFields} />\n </TableEx>\n </FlexCol>\n )\n}\n","import type { CardProps } from '@mui/material'\nimport {\n Card, CardContent, Grid,\n Skeleton,\n Stack,\n} from '@mui/material'\nimport { ErrorRender } from '@xylabs/react-error'\nimport { DetailsStack, LabelValueStack } from '@xyo-network/react-chain-shared'\nimport type { XyoViewer } from '@xyo-network/xl1-protocol'\nimport type { SignedHydratedBlockInstance } from '@xyo-network/xl1-protocol-sdk'\nimport React from 'react'\nimport { GrSteps } from 'react-icons/gr'\nimport { IoStatsChartOutline } from 'react-icons/io5'\nimport { VscSymbolNamespace } from 'react-icons/vsc'\n\nimport { BlockBoundWitnessCardHeader } from './CardHeader.tsx'\nimport { useBlockDetails } from './hooks/index.ts'\n\nexport interface BlockBoundWitnessCardProps extends CardProps {\n linkedAddress?: boolean\n viewer?: XyoViewer\n wrapper?: SignedHydratedBlockInstance\n}\n\nexport const BlockBoundWitnessCard: React.FC<BlockBoundWitnessCardProps> = ({\n linkedAddress = true, viewer, wrapper, ...props\n}) => {\n if (!wrapper) return null\n\n const {\n stats, payloads, stepHashes, stepHashesError, stepHashesLoading,\n } = useBlockDetails(wrapper, viewer)\n\n return (\n <Card {...props}>\n {wrapper?.boundWitness.addresses.map(address => <BlockBoundWitnessCardHeader key={address} address={address} linked={linkedAddress} />)}\n <ErrorRender error={stepHashesError} scope=\"BlockBoundWitnessCard.tsx:stepHashesError\" />\n <CardContent>\n <Grid container spacing={6} sx={{ width: '100%' }}>\n <Grid size={{\n xs: 12, sm: 6, md: 4,\n }}\n >\n <DetailsStack IconComponent={IoStatsChartOutline} heading=\"Stats\" tooltipTitle=\"Transaction Statistics\">\n <LabelValueStack labels={stats.labels} values={stats.values} />\n </DetailsStack>\n </Grid>\n <Grid size={{\n xs: 12, sm: 6, md: 4,\n }}\n >\n <DetailsStack IconComponent={VscSymbolNamespace} heading=\"Payloads\" tooltipTitle=\"Payloads within the Block\">\n <LabelValueStack labels={payloads.labels} values={payloads.values} />\n </DetailsStack>\n </Grid>\n <Grid size={{\n xs: 12, sm: 6, md: 4,\n }}\n >\n <DetailsStack IconComponent={GrSteps} heading=\"Step Hashes\" tooltipTitle=\"Step Hashes for the Block\">\n {stepHashesLoading === 'pending'\n ? (\n <Stack gap={0.25}>\n <Skeleton variant=\"text\" width=\"100%\" height={20} />\n <Skeleton variant=\"text\" width=\"100%\" height={20} />\n <Skeleton variant=\"text\" width=\"100%\" height={20} />\n <Skeleton variant=\"text\" width=\"100%\" height={20} />\n </Stack>\n )\n : null}\n <LabelValueStack labels={stepHashes?.labels ?? []} values={stepHashes?.values ?? []} />\n </DetailsStack>\n </Grid>\n </Grid>\n </CardContent>\n </Card>\n )\n}\n","import type { CardHeaderProps } from '@mui/material'\nimport {\n CardHeader, Link,\n Tooltip, Typography,\n} from '@mui/material'\nimport type { Address } from '@xylabs/hex'\nimport { BlockiesAvatarAddress } from '@xyo-network/react-chain-blockies'\nimport { useEvent } from '@xyo-network/react-event'\nimport React from 'react'\n\nexport interface BlockBoundWitnessCardHeaderProps extends CardHeaderProps {\n address?: Address\n linked?: boolean\n}\n\nexport const BlockBoundWitnessCardHeader: React.FC<BlockBoundWitnessCardHeaderProps> = ({ linked = true, address }) => {\n const [ref, dispatch] = useEvent<HTMLDivElement>()\n\n return (\n <CardHeader\n ref={ref}\n title={(\n <Typography\n onClick={() => linked && dispatch('address', 'click', address)}\n variant=\"body2\"\n sx={{\n maxWidth: '100%', textOverflow: 'ellipsis', overflow: 'hidden', fontFamily: 'monospace',\n }}\n >\n {linked\n ? (\n <Link sx={{ cursor: 'pointer' }}>{address}</Link>\n )\n : address}\n </Typography>\n )}\n avatar={(\n <Tooltip title={`Address - ${address}`}>\n <BlockiesAvatarAddress\n address={address}\n onClick={() => dispatch('address', 'click', address)}\n size={21}\n sx={{ cursor: 'pointer' }}\n />\n </Tooltip>\n )}\n />\n )\n}\n","import { usePromise } from '@xylabs/react-promise'\nimport { StepSizes, type XyoViewer } from '@xyo-network/xl1-protocol'\nimport type { SignedHydratedBlockInstance } from '@xyo-network/xl1-protocol-sdk'\nimport { useMemo } from 'react'\n\nimport { formatNumber, formatResults } from '../../../../lib/index.ts'\n\nconst generateStepHashText = (blockNumber: number, stepHashIndex: number): [string, string] => {\n const stepSize = StepSizes[stepHashIndex]\n const stepStart = blockNumber - stepSize + 1\n const stepStop = blockNumber\n\n return [`Step ${stepHashIndex} (${stepSize})`, `${formatNumber(stepStart)} - ${formatNumber(stepStop)}`]\n}\n\nexport const useBlockDetails = (wrapper: SignedHydratedBlockInstance, viewer?: XyoViewer) => {\n const stats = useMemo(() => {\n const stats = {\n Height: formatNumber(wrapper.boundWitness.block),\n Protocol: wrapper.boundWitness.protocol.toString(),\n Signatures: formatNumber(wrapper.signatureCount),\n $epoch: wrapper.boundWitness.$epoch.toString(),\n }\n\n return formatResults(stats)\n }, [wrapper])\n\n const payloads = useMemo(() => {\n const payloads = {\n 'Transactions': formatNumber(wrapper.transactionCount),\n 'Public Payloads': formatNumber(wrapper.publicPayloadCount),\n 'Private Payloads': formatNumber(wrapper.privatePayloadCount),\n 'Total Payloads': formatNumber(wrapper.payloadCount),\n }\n\n return formatResults(payloads)\n }, [wrapper])\n\n const [stepHashes, stepHashesError, stepHashesLoading] = usePromise(async () => {\n if (viewer) {\n const stepHashes: Record<string, string> = {}\n for (const [index, hash] of wrapper.boundWitness.step_hashes.entries()) {\n try {\n const block = await viewer.blockByHash(hash)\n if (block === null) {\n console.warn(`Block not found for step hash ${hash}`)\n stepHashes[`Step ${index}`] = 'N/A'\n continue\n }\n\n const blockNumber = block[0].block\n const [label, value] = generateStepHashText(blockNumber, index)\n stepHashes[label] = value\n } catch (e) {\n console.error(`Error fetching block for step hash ${hash}:`, e)\n stepHashes[`Step ${index}`] = 'N/A'\n }\n }\n\n return formatResults(stepHashes)\n }\n }, [wrapper, viewer], { defaultValue: { labels: [], values: [] } })\n\n return {\n stats, payloads, stepHashes, stepHashesError, stepHashesLoading,\n }\n}\n","import type { CardProps } from '@mui/material'\nimport {\n Card, CardContent, CardHeader, Grid, Link, Tooltip, Typography,\n} from '@mui/material'\nimport { BlockiesAvatarAddress } from '@xyo-network/react-chain-blockies'\nimport { DetailsStack, LabelValueStack } from '@xyo-network/react-chain-shared'\nimport { useEvent } from '@xyo-network/react-event'\nimport type { SignedHydratedTransactionInstance } from '@xyo-network/xl1-protocol-sdk'\nimport React from 'react'\nimport { GiReceiveMoney, GiSandsOfTime } from 'react-icons/gi'\nimport { IoStatsChartOutline } from 'react-icons/io5'\n\nimport { useTransactionDetails } from './hooks/index.ts'\n\nexport interface TransactionBoundWitnessCardProps extends CardProps {\n linkedAddress?: boolean\n wrapper?: SignedHydratedTransactionInstance\n}\n\nexport const TransactionBoundWitnessCard: React.FC<TransactionBoundWitnessCardProps> = ({\n linkedAddress = true, wrapper, ...props\n}) => {\n if (!wrapper) return null\n\n const {\n stats, fees, blockDuration,\n } = useTransactionDetails(wrapper)\n\n const [ref, dispatch] = useEvent<HTMLDivElement>()\n\n return (\n <Card ref={ref} {...props}>\n <CardHeader\n title={(\n <Typography\n onClick={() => linkedAddress && dispatch('address', 'click', wrapper.boundWitness.from)}\n variant=\"body2\"\n sx={{\n maxWidth: '100%', textOverflow: 'ellipsis', overflow: 'hidden', fontFamily: 'monospace',\n }}\n >\n {linkedAddress\n ? (\n <Link sx={{ cursor: 'pointer' }}>{wrapper?.boundWitness.from}</Link>\n )\n : wrapper?.boundWitness.from}\n </Typography>\n )}\n avatar={(\n <Tooltip title={`From Address - ${wrapper?.boundWitness.from}`}>\n <BlockiesAvatarAddress\n address={wrapper?.boundWitness.from}\n onClick={() => dispatch('address', 'click', wrapper.boundWitness.from)}\n size={21}\n sx={{ cursor: 'pointer' }}\n />\n </Tooltip>\n )}\n />\n <CardContent>\n <Grid container spacing={6} sx={{ width: '100%' }}>\n <Grid size={{\n xs: 12, sm: 6, md: 4,\n }}\n >\n <DetailsStack IconComponent={IoStatsChartOutline} heading=\"Stats\" tooltipTitle=\"Transaction Statistics\">\n <LabelValueStack labels={stats.labels} values={stats.values} />\n </DetailsStack>\n </Grid>\n <Grid size={{\n xs: 12, sm: 6, md: 4,\n }}\n >\n <DetailsStack IconComponent={GiReceiveMoney} heading=\"Fees\" tooltipTitle=\"Fees offered to the producer\">\n <LabelValueStack labels={fees.labels} values={fees.values} />\n </DetailsStack>\n </Grid>\n <Grid size={{\n xs: 12, sm: 6, md: 4,\n }}\n >\n <DetailsStack IconComponent={GiSandsOfTime} heading=\"Block Duration\" tooltipTitle=\"Block window for the transaction to be valid\">\n <LabelValueStack labels={blockDuration.labels} values={blockDuration.values} />\n </DetailsStack>\n </Grid>\n </Grid>\n </CardContent>\n </Card>\n )\n}\n","import type { SignedHydratedTransactionInstance } from '@xyo-network/xl1-protocol-sdk'\nimport { useMemo } from 'react'\n\nimport {\n formatFee, formatNumber, formatResults,\n} from '../../../../lib/index.ts'\n\nexport const useTransactionDetails = (wrapper: SignedHydratedTransactionInstance) => {\n const stats = useMemo(() => {\n const stats = {\n 'Reward': formatNumber(wrapper.reward()),\n 'Elevated Payloads': formatNumber(wrapper.elevatedPayloadCount),\n 'Total Payloads': formatNumber(wrapper.payloadCount),\n 'Signatures': formatNumber(wrapper.signatureCount),\n }\n\n return formatResults(stats)\n }, [wrapper])\n\n const fees = useMemo(() => {\n const fees = {\n 'Base': formatFee(wrapper.fees.base),\n 'Gas': formatFee(wrapper.fees.gasPrice),\n 'Priority': formatFee(wrapper.fees.priority),\n 'Gas Limit': formatFee(wrapper.fees.gasLimit),\n }\n\n return formatResults(fees)\n }, [wrapper])\n\n const blockDuration = useMemo(() => {\n const blockDuration = {\n 'Expiration': wrapper.boundWitness.exp.toLocaleString(navigator.language ?? 'en-US'),\n 'Not Before': wrapper.boundWitness.nbf.toLocaleString(navigator.language ?? 'en-US'),\n }\n\n return formatResults(blockDuration)\n }, [wrapper])\n\n return {\n stats, fees, blockDuration,\n }\n}\n","import { ErrorRender } from '@xylabs/react-error'\nimport { type FlexBoxProps, FlexCol } from '@xylabs/react-flexbox'\nimport { usePromise } from '@xylabs/react-promise'\nimport { isDefined } from '@xylabs/typeof'\nimport { SignedHydratedTransactionWrapper } from '@xyo-network/chain-wrappers'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport {\n BoundWitnessSignatureTable, BWActions, HashHeadingPaper, HeadingPaper,\n} from '@xyo-network/react-boundwitness-plugin'\nimport type { SignedHydratedTransaction } from '@xyo-network/xl1-protocol'\nimport React from 'react'\nimport { FaSignature } from 'react-icons/fa'\nimport { VscSymbolMethod, VscSymbolNamespace } from 'react-icons/vsc'\n\nimport { formatPayloadsForTable } from '../../lib/index.ts'\nimport type { ClickableFields } from '../BwPayloadTable.tsx'\nimport { BWPayloadTableFlexbox } from '../BwPayloadTable.tsx'\nimport { TransactionBoundWitnessCard } from './card/index.ts'\n\nconst nonClickableFields: ClickableFields[] = []\n\nexport interface TransactionBoundWitnessDetailsProps extends FlexBoxProps {\n transaction?: SignedHydratedTransaction | null\n}\n\nexport const TransactionBoundWitnessDetails: React.FC<TransactionBoundWitnessDetailsProps> = ({ transaction, ...props }) => {\n const [wrapper, wrapperError] = usePromise(async () => {\n if (transaction) {\n return await SignedHydratedTransactionWrapper.parse(transaction)\n }\n }, [transaction])\n\n const [elevatedPayloadSets, elevatedPayloadSetsError] = usePromise(async () => {\n if (isDefined(wrapper)) {\n const elevatedPayloads = wrapper.elevatedPayloads\n const pairs = await PayloadBuilder.hashPairs(elevatedPayloads)\n return formatPayloadsForTable(pairs)\n } else {\n return { hashes: [], schemas: [] }\n }\n }, [wrapper])\n\n // TODO - use forthcoming wrapper method since hydrated transactions don't include non-elevated payloads\n const [nonElevatedPayloadSets, nonElevatedPayloadSetsError] = usePromise(async () => {\n if (isDefined(wrapper)) {\n const elevatedPayloads = wrapper.elevatedPayloads\n const payloads = wrapper.payloads\n const nonElevatedPayloads = payloads.filter((payload) => {\n return elevatedPayloads.every(elevated => elevated._hash !== payload._hash)\n })\n const pairs = await PayloadBuilder.hashPairs(nonElevatedPayloads)\n return formatPayloadsForTable(pairs)\n } else {\n return { hashes: [], schemas: [] }\n }\n }, [wrapper])\n\n const { hashes: elevatedPayloadHashes, schemas: elevatedPayloadSchemas } = elevatedPayloadSets ?? {}\n const { hashes: nonElevatedPayloadHashes, schemas: nonElevatedPayloadSchemas } = nonElevatedPayloadSets ?? {}\n\n return (\n <FlexCol alignItems=\"stretch\" rowGap={2} {...props}>\n <HashHeadingPaper\n hash={wrapper?.boundWitness?._hash}\n paperProps={{ sx: { p: 2 } }}\n AdornmentEnd={<BWActions boundwitness={wrapper?.boundWitness} />}\n identiconProps={{ p: 0.75, size: 24 }}\n />\n <ErrorRender error={wrapperError} scope=\"wrapperError:TransactionBoundWitnessDetails.tsx\" />\n <ErrorRender error={elevatedPayloadSetsError} scope=\"elevatedPayloadSetsError:TransactionBoundWitnessDetails.tsx\" />\n <ErrorRender error={nonElevatedPayloadSetsError} scope=\"nonElevatedPayloadSetsError:TransactionBoundWitnessDetails.tsx\" />\n <TransactionBoundWitnessCard elevation={4} wrapper={wrapper} />\n <BWPayloadTableFlexbox\n IconComponent={<VscSymbolNamespace />}\n hashes={elevatedPayloadHashes}\n headingTitle=\"Elevated Payloads\"\n schemas={elevatedPayloadSchemas}\n sx={{ mb: 1 }}\n />\n {(nonElevatedPayloadHashes?.length ?? 0) > 0 && (\n <BWPayloadTableFlexbox\n IconComponent={<VscSymbolMethod />}\n clickableFields={nonClickableFields}\n hashes={nonElevatedPayloadHashes}\n headingTitle=\"Non-Elevated Payloads\"\n schemas={nonElevatedPayloadSchemas}\n sx={{ mb: 1 }}\n />\n )}\n <FlexCol alignItems=\"stretch\" rowGap={1} mb={1}>\n <HeadingPaper IconComponent={<FaSignature />} heading=\"Signatures\" />\n <BoundWitnessSignatureTable block={wrapper?.boundWitness} />\n </FlexCol>\n </FlexCol>\n )\n}\n"],"mappings":"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","names":["filterAs","ErrorRender","FlexCol","usePromise","isBoundWitness","SignedHydratedBlockWrapper","PayloadBuilder","BoundWitnessPayloadsTable","BoundWitnessSignatureTable","BWActions","HashHeadingPaper","HeadingPaper","useTxsFromBlock","usePayloadHash","isTransactionBoundWitness","React","useMemo","FaSignature","GrTransaction","VscSymbolMethod","VscSymbolNamespace","isUndefined","bigIntToFixedPointString","formatFee","fee","isUndefined","stringValue","bigIntToFixedPointString","formatNumber","num","toLocaleString","navigator","language","formatPayloadsForTable","pairs","hashes","schemas","bw","hash","push","schema","formatResults","results","result","labels","values","label","value","Object","entries","push","FlexCol","BoundWitnessPayloadTableBody","BoundWitnessPayloadTableHead","HeadingPaper","TableEx","React","VscSymbolMethod","defaultClickableFields","BWPayloadTableFlexbox","IconComponent","eventNoun","hashes","schemas","headingTitle","clickableFields","props","resolvedIconComponent","VscSymbolMethod","FlexCol","alignItems","rowGap","HeadingPaper","heading","TableEx","BoundWitnessPayloadTableHead","BoundWitnessPayloadTableBody","payloadHashes","payloadSchemas","Card","CardContent","Grid","Skeleton","Stack","ErrorRender","DetailsStack","LabelValueStack","React","GrSteps","IoStatsChartOutline","VscSymbolNamespace","CardHeader","Link","Tooltip","Typography","BlockiesAvatarAddress","useEvent","React","BlockBoundWitnessCardHeader","linked","address","ref","dispatch","useEvent","React","CardHeader","title","Typography","onClick","variant","sx","maxWidth","textOverflow","overflow","fontFamily","Link","cursor","avatar","Tooltip","BlockiesAvatarAddress","size","usePromise","StepSizes","useMemo","generateStepHashText","blockNumber","stepHashIndex","stepSize","StepSizes","stepStart","stepStop","formatNumber","useBlockDetails","wrapper","viewer","stats","useMemo","Height","boundWitness","block","Protocol","protocol","toString","Signatures","signatureCount","$epoch","formatResults","payloads","transactionCount","publicPayloadCount","privatePayloadCount","payloadCount","stepHashes","stepHashesError","stepHashesLoading","usePromise","index","hash","step_hashes","entries","blockByHash","console","warn","label","value","e","error","defaultValue","labels","values","BlockBoundWitnessCard","linkedAddress","viewer","wrapper","props","stats","payloads","stepHashes","stepHashesError","stepHashesLoading","useBlockDetails","React","Card","boundWitness","addresses","map","address","BlockBoundWitnessCardHeader","key","linked","ErrorRender","error","scope","CardContent","Grid","container","spacing","sx","width","size","xs","sm","md","DetailsStack","IconComponent","IoStatsChartOutline","heading","tooltipTitle","LabelValueStack","labels","values","VscSymbolNamespace","GrSteps","Stack","gap","Skeleton","variant","height","BlockBoundWitnessDetails","block","paper","viewer","children","props","wrapper","wrapperError","usePromise","SignedHydratedBlockWrapper","parse","boundWitness","payloads","hash","usePayloadHash","transactions","txFromBlockError","useTxsFromBlock","hashes","txHashes","schemas","txSchemas","useMemo","formatPayloadsForTable","nonTxBoundWitnesses","bwsFromBlockError","bws","filterAs","payload","isTransactionBoundWitness","isBoundWitness","undefined","PayloadBuilder","hashPairs","nonTxBwHashes","nonTxBwSchemas","hasNonTxBoundWitnesses","length","React","FlexCol","alignItems","rowGap","ErrorRender","error","scope","HashHeadingPaper","paperProps","sx","p","AdornmentEnd","BWActions","boundwitness","identiconProps","size","BlockBoundWitnessCard","elevation","BWPayloadTableFlexbox","IconComponent","GrTransaction","eventNoun","headingTitle","mb","HeadingPaper","VscSymbolNamespace","heading","BoundWitnessPayloadsTable","VscSymbolMethod","FaSignature","BoundWitnessSignatureTable","Card","CardContent","CardHeader","Grid","Link","Tooltip","Typography","BlockiesAvatarAddress","DetailsStack","LabelValueStack","useEvent","React","GiReceiveMoney","GiSandsOfTime","IoStatsChartOutline","useMemo","useTransactionDetails","wrapper","stats","useMemo","formatNumber","reward","elevatedPayloadCount","payloadCount","signatureCount","formatResults","fees","formatFee","base","gasPrice","priority","gasLimit","blockDuration","boundWitness","exp","toLocaleString","navigator","language","nbf","TransactionBoundWitnessCard","linkedAddress","wrapper","props","stats","fees","blockDuration","useTransactionDetails","ref","dispatch","useEvent","React","Card","CardHeader","title","Typography","onClick","boundWitness","from","variant","sx","maxWidth","textOverflow","overflow","fontFamily","Link","cursor","avatar","Tooltip","BlockiesAvatarAddress","address","size","CardContent","Grid","container","spacing","width","xs","sm","md","DetailsStack","IconComponent","IoStatsChartOutline","heading","tooltipTitle","LabelValueStack","labels","values","GiReceiveMoney","GiSandsOfTime","ErrorRender","FlexCol","usePromise","isDefined","SignedHydratedTransactionWrapper","PayloadBuilder","BoundWitnessSignatureTable","BWActions","HashHeadingPaper","HeadingPaper","React","FaSignature","VscSymbolMethod","VscSymbolNamespace","nonClickableFields","TransactionBoundWitnessDetails","transaction","props","wrapper","wrapperError","usePromise","SignedHydratedTransactionWrapper","parse","elevatedPayloadSets","elevatedPayloadSetsError","isDefined","elevatedPayloads","pairs","PayloadBuilder","hashPairs","formatPayloadsForTable","hashes","schemas","nonElevatedPayloadSets","nonElevatedPayloadSetsError","payloads","nonElevatedPayloads","filter","payload","every","elevated","_hash","elevatedPayloadHashes","elevatedPayloadSchemas","nonElevatedPayloadHashes","nonElevatedPayloadSchemas","React","FlexCol","alignItems","rowGap","HashHeadingPaper","hash","boundWitness","paperProps","sx","p","AdornmentEnd","BWActions","boundwitness","identiconProps","size","ErrorRender","error","scope","TransactionBoundWitnessCard","elevation","BWPayloadTableFlexbox","IconComponent","VscSymbolNamespace","headingTitle","mb","length","VscSymbolMethod","clickableFields","HeadingPaper","FaSignature","heading","BoundWitnessSignatureTable","block"]}
1
+ {"version":3,"sources":["../../src/components/block/BlockBoundWitnessDetails.tsx","../../src/lib/formatFees.ts","../../src/lib/formatNumber.ts","../../src/lib/formatPayloadsForTable.ts","../../src/lib/formatResults.ts","../../src/components/PayloadTable.tsx","../../src/components/block/card/Card.tsx","../../src/components/block/card/CardHeader.tsx","../../src/components/block/card/hooks/useDetails.ts","../../src/components/transactions/card/Card.tsx","../../src/components/transactions/card/hooks/useDetails.ts","../../src/components/transactions/TransactionBoundWitnessDetails.tsx","../../src/components/transactions/hooks/usePayloadTypes.ts"],"sourcesContent":["import { filterAs } from '@xylabs/array'\nimport { ErrorRender } from '@xylabs/react-error'\nimport type { FlexBoxProps } from '@xylabs/react-flexbox'\nimport { FlexCol } from '@xylabs/react-flexbox'\nimport { usePromise } from '@xylabs/react-promise'\nimport { isBoundWitness } from '@xyo-network/boundwitness-model'\nimport { SignedHydratedBlockWrapper } from '@xyo-network/chain-wrappers'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport {\n BoundWitnessPayloadsTable,\n BoundWitnessSignatureTable,\n BWActions,\n HashHeadingPaper,\n HeadingPaper,\n} from '@xyo-network/react-boundwitness-plugin'\nimport { useTxsFromBlock } from '@xyo-network/react-chain-blockchain'\nimport { usePayloadHash } from '@xyo-network/react-shared'\nimport type { SignedHydratedBlock, XyoViewer } from '@xyo-network/xl1-protocol'\nimport { isTransactionBoundWitness } from '@xyo-network/xl1-protocol'\nimport React, { useMemo } from 'react'\nimport { FaSignature } from 'react-icons/fa'\nimport { GrTransaction } from 'react-icons/gr'\nimport { VscSymbolMethod, VscSymbolNamespace } from 'react-icons/vsc'\n\nimport { formatPayloadsForTable } from '../../lib/index.ts'\nimport type { TransactionBoundWitnessEvents } from '../../types/index.ts'\nimport { PayloadTableFlexbox } from '../PayloadTable.tsx'\nimport { BlockBoundWitnessCard } from './card/Card.tsx'\n\nexport interface BoundWitnessDetailsProps extends FlexBoxProps {\n block?: SignedHydratedBlock\n viewer?: XyoViewer\n}\n\nexport const BlockBoundWitnessDetails = ({\n block, paper, viewer, children, ...props\n}: BoundWitnessDetailsProps) => {\n const [wrapper, wrapperError] = usePromise(async () => {\n if (block) {\n return await SignedHydratedBlockWrapper.parse(block)\n }\n }, [block])\n\n const boundWitness = block?.[0]\n const payloads = block?.[1]\n\n const hash = usePayloadHash(boundWitness)\n\n const [transactions, txFromBlockError] = useTxsFromBlock(block)\n\n const { hashes: txHashes, schemas: txSchemas } = useMemo(() => formatPayloadsForTable(transactions ?? []), [transactions])\n\n const [nonTxBoundWitnesses, bwsFromBlockError] = usePromise(async () => {\n const bws = filterAs(payloads ?? [], payload =>\n (!isTransactionBoundWitness(payload) && isBoundWitness(payload)) ? payload : undefined)\n return await PayloadBuilder.hashPairs(bws)\n }, [payloads])\n\n const { hashes: nonTxBwHashes, schemas: nonTxBwSchemas } = useMemo(() => formatPayloadsForTable(nonTxBoundWitnesses ?? []), [nonTxBoundWitnesses])\n const hasNonTxBoundWitnesses = (nonTxBoundWitnesses?.length ?? 0) > 0\n\n return (\n <FlexCol alignItems=\"stretch\" rowGap={4} {...props}>\n <ErrorRender error={txFromBlockError ?? bwsFromBlockError} scope=\"BlockBoundWitnessDetails.tsx\" />\n <ErrorRender error={wrapperError} scope=\"BlockBoundWitnessDetails.tsx:wrapperError\" />\n <HashHeadingPaper\n hash={hash}\n paperProps={{ sx: { p: 2 } }}\n AdornmentEnd={<BWActions boundwitness={boundWitness} />}\n identiconProps={{ p: 0.75, size: 24 }}\n />\n <BlockBoundWitnessCard elevation={4} viewer={viewer} wrapper={wrapper} />\n {(transactions?.length ?? 0) > 0 && (\n <PayloadTableFlexbox<TransactionBoundWitnessEvents>\n IconComponent={<GrTransaction />}\n eventNoun=\"transaction\"\n hashes={txHashes}\n headingTitle=\"Transactions\"\n schemas={txSchemas}\n sx={{ mb: 1 }}\n />\n )}\n <FlexCol alignItems=\"stretch\" rowGap={1} mb={1}>\n <HeadingPaper IconComponent={<VscSymbolNamespace />} heading=\"Payloads\" />\n <BoundWitnessPayloadsTable boundwitness={boundWitness} />\n </FlexCol>\n {hasNonTxBoundWitnesses\n ? (\n <PayloadTableFlexbox<TransactionBoundWitnessEvents>\n IconComponent={<VscSymbolMethod />}\n eventNoun=\"boundwitness\"\n hashes={nonTxBwHashes}\n headingTitle=\"Bound Witnesses\"\n schemas={nonTxBwSchemas}\n sx={{ mb: 1 }}\n />\n )\n : null}\n <FlexCol alignItems=\"stretch\" rowGap={1} mb={1}>\n <HeadingPaper IconComponent={<FaSignature />} heading=\"Signatures\" />\n <BoundWitnessSignatureTable block={boundWitness} />\n </FlexCol>\n </FlexCol>\n )\n}\n","import { isUndefined } from '@xylabs/typeof'\nimport { bigIntToFixedPointString } from '@xyo-network/chain-utils'\n\nexport const formatFee = (fee?: bigint) => {\n if (isUndefined(fee)) return 'N/A'\n const stringValue = bigIntToFixedPointString(fee, 12)\n if (stringValue === '0') return stringValue\n return stringValue\n}\n","export const formatNumber = (num: number | bigint): string => {\n return num.toLocaleString(navigator.language ?? 'en-US')\n}\n","import type { Hash } from '@xylabs/hex'\nimport type { Payload } from '@xyo-network/payload-model'\n\nexport const formatPayloadsForTable = (pairs: [Payload, Hash][]) => {\n let hashes: Hash[] = []\n let schemas: string[] = []\n for (const [bw, hash] of pairs ?? []) {\n hashes.push(hash)\n schemas.push(bw?.schema ?? '')\n }\n return { hashes, schemas }\n}\n","export const formatResults = (results: Record<string, string>) => {\n const result = { labels: [] as string[], values: [] as string[] }\n for (const [label, value] of Object.entries(results)) {\n result.labels.push(label)\n result.values.push(value)\n }\n return result\n}\n","import { InfoOutline } from '@mui/icons-material'\nimport { Tooltip } from '@mui/material'\nimport type { Hash } from '@xylabs/hex'\nimport type { FlexBoxProps } from '@xylabs/react-flexbox'\nimport { FlexCol } from '@xylabs/react-flexbox'\nimport { isDefined } from '@xylabs/typeof'\nimport {\n BoundWitnessPayloadTableBody, BoundWitnessPayloadTableHead, HeadingPaper,\n} from '@xyo-network/react-boundwitness-plugin'\nimport type { EventNoun, ExtendEventNoun } from '@xyo-network/react-event'\nimport { TableEx } from '@xyo-network/react-table'\nimport React from 'react'\nimport { VscSymbolMethod } from 'react-icons/vsc'\n\nexport type ClickableFields = 'hash'\nconst defaultClickableFields: ClickableFields[] = ['hash']\n\nexport interface BWPayloadTableFlexboxProps<TNoun extends ExtendEventNoun = EventNoun> extends FlexBoxProps {\n IconComponent?: React.ReactNode\n clickableFields?: ClickableFields[]\n eventNoun?: TNoun\n hashes?: Hash[]\n headingTitle?: string\n schemas?: string[]\n tooltip?: string\n}\n\nexport const PayloadTableFlexbox = <TNoun extends ExtendEventNoun = EventNoun>({\n IconComponent,\n eventNoun,\n hashes,\n schemas,\n headingTitle,\n clickableFields = defaultClickableFields,\n tooltip,\n ...props\n}: BWPayloadTableFlexboxProps<TNoun>) => {\n const resolvedIconComponent = IconComponent ?? <VscSymbolMethod />\n return (\n <FlexCol alignItems=\"stretch\" rowGap={1} {...props}>\n <HeadingPaper\n AdornmentEnd={isDefined(tooltip)\n ? (\n <Tooltip title={tooltip}>\n <InfoOutline fontSize=\"small\" sx={{ py: 2, px: 1 }} />\n </Tooltip>\n )\n : null}\n IconComponent={resolvedIconComponent}\n heading={headingTitle}\n />\n <TableEx>\n <BoundWitnessPayloadTableHead />\n <BoundWitnessPayloadTableBody<TNoun> payloadHashes={hashes} payloadSchemas={schemas} eventNoun={eventNoun} clickableFields={clickableFields} />\n </TableEx>\n </FlexCol>\n )\n}\n","import type { CardProps } from '@mui/material'\nimport {\n Card, CardContent, Grid,\n Skeleton,\n Stack,\n} from '@mui/material'\nimport { ErrorRender } from '@xylabs/react-error'\nimport { DetailsStack, LabelValueStack } from '@xyo-network/react-chain-shared'\nimport type { XyoViewer } from '@xyo-network/xl1-protocol'\nimport type { SignedHydratedBlockInstance } from '@xyo-network/xl1-protocol-sdk'\nimport React from 'react'\nimport { GrSteps } from 'react-icons/gr'\nimport { IoStatsChartOutline } from 'react-icons/io5'\nimport { VscSymbolNamespace } from 'react-icons/vsc'\n\nimport { BlockBoundWitnessCardHeader } from './CardHeader.tsx'\nimport { useBlockDetails } from './hooks/index.ts'\n\nexport interface BlockBoundWitnessCardProps extends CardProps {\n linkedAddress?: boolean\n viewer?: XyoViewer\n wrapper?: SignedHydratedBlockInstance\n}\n\nexport const BlockBoundWitnessCard: React.FC<BlockBoundWitnessCardProps> = ({\n linkedAddress = true, viewer, wrapper, ...props\n}) => {\n if (!wrapper) return null\n\n const {\n stats, payloads, stepHashes, stepHashesError, stepHashesLoading,\n } = useBlockDetails(wrapper, viewer)\n\n return (\n <Card {...props}>\n {wrapper?.boundWitness.addresses.map(address => <BlockBoundWitnessCardHeader key={address} address={address} linked={linkedAddress} />)}\n <ErrorRender error={stepHashesError} scope=\"BlockBoundWitnessCard.tsx:stepHashesError\" />\n <CardContent>\n <Grid container spacing={6} sx={{ width: '100%' }}>\n <Grid size={{\n xs: 12, sm: 6, md: 4,\n }}\n >\n <DetailsStack IconComponent={IoStatsChartOutline} heading=\"Stats\" tooltipTitle=\"Transaction Statistics\">\n <LabelValueStack labels={stats.labels} values={stats.values} />\n </DetailsStack>\n </Grid>\n <Grid size={{\n xs: 12, sm: 6, md: 4,\n }}\n >\n <DetailsStack IconComponent={VscSymbolNamespace} heading=\"Payloads\" tooltipTitle=\"Payloads within the Block\">\n <LabelValueStack labels={payloads.labels} values={payloads.values} />\n </DetailsStack>\n </Grid>\n <Grid size={{\n xs: 12, sm: 6, md: 4,\n }}\n >\n <DetailsStack IconComponent={GrSteps} heading=\"Step Hashes\" tooltipTitle=\"Step Hashes for the Block\">\n {stepHashesLoading === 'pending'\n ? (\n <Stack gap={0.25}>\n <Skeleton variant=\"text\" width=\"100%\" height={20} />\n <Skeleton variant=\"text\" width=\"100%\" height={20} />\n <Skeleton variant=\"text\" width=\"100%\" height={20} />\n <Skeleton variant=\"text\" width=\"100%\" height={20} />\n </Stack>\n )\n : null}\n <LabelValueStack labels={stepHashes?.labels ?? []} values={stepHashes?.values ?? []} />\n </DetailsStack>\n </Grid>\n </Grid>\n </CardContent>\n </Card>\n )\n}\n","import type { CardHeaderProps } from '@mui/material'\nimport {\n CardHeader, Link,\n Tooltip, Typography,\n} from '@mui/material'\nimport type { Address } from '@xylabs/hex'\nimport { BlockiesAvatarAddress } from '@xyo-network/react-chain-blockies'\nimport { useEvent } from '@xyo-network/react-event'\nimport React from 'react'\n\nexport interface BlockBoundWitnessCardHeaderProps extends CardHeaderProps {\n address?: Address\n linked?: boolean\n}\n\nexport const BlockBoundWitnessCardHeader: React.FC<BlockBoundWitnessCardHeaderProps> = ({ linked = true, address }) => {\n const [ref, dispatch] = useEvent<HTMLDivElement>()\n\n return (\n <CardHeader\n ref={ref}\n title={(\n <Typography\n onClick={() => linked && dispatch('address', 'click', address)}\n variant=\"body2\"\n sx={{\n maxWidth: '100%', textOverflow: 'ellipsis', overflow: 'hidden', fontFamily: 'monospace',\n }}\n >\n {linked\n ? (\n <Link sx={{ cursor: 'pointer' }}>{address}</Link>\n )\n : address}\n </Typography>\n )}\n avatar={(\n <Tooltip title={`Address - ${address}`}>\n <BlockiesAvatarAddress\n address={address}\n onClick={() => dispatch('address', 'click', address)}\n size={21}\n sx={{ cursor: 'pointer' }}\n />\n </Tooltip>\n )}\n />\n )\n}\n","import { usePromise } from '@xylabs/react-promise'\nimport { StepSizes, type XyoViewer } from '@xyo-network/xl1-protocol'\nimport type { SignedHydratedBlockInstance } from '@xyo-network/xl1-protocol-sdk'\nimport { useMemo } from 'react'\n\nimport { formatNumber, formatResults } from '../../../../lib/index.ts'\n\nconst generateStepHashText = (blockNumber: number, stepHashIndex: number): [string, string] => {\n const stepSize = StepSizes[stepHashIndex]\n const stepStart = blockNumber - stepSize + 1\n const stepStop = blockNumber\n\n return [`Step ${stepHashIndex} (${stepSize})`, `${formatNumber(stepStart)} - ${formatNumber(stepStop)}`]\n}\n\nexport const useBlockDetails = (wrapper: SignedHydratedBlockInstance, viewer?: XyoViewer) => {\n const stats = useMemo(() => {\n const stats = {\n Height: formatNumber(wrapper.boundWitness.block),\n Protocol: wrapper.boundWitness.protocol.toString(),\n Signatures: formatNumber(wrapper.signatureCount),\n $epoch: wrapper.boundWitness.$epoch.toString(),\n }\n\n return formatResults(stats)\n }, [wrapper])\n\n const payloads = useMemo(() => {\n const payloads = {\n 'Transactions': formatNumber(wrapper.transactionCount),\n 'Total Payloads': formatNumber(wrapper.payloadCount),\n }\n\n return formatResults(payloads)\n }, [wrapper])\n\n const [stepHashes, stepHashesError, stepHashesLoading] = usePromise(async () => {\n if (viewer) {\n const stepHashes: Record<string, string> = {}\n for (const [index, hash] of wrapper.boundWitness.step_hashes.entries()) {\n try {\n const block = await viewer.blockByHash(hash)\n if (block === null) {\n console.warn(`Block not found for step hash ${hash}`)\n stepHashes[`Step ${index}`] = 'N/A'\n continue\n }\n\n const blockNumber = block[0].block\n const [label, value] = generateStepHashText(blockNumber, index)\n stepHashes[label] = value\n } catch (e) {\n console.error(`Error fetching block for step hash ${hash}:`, e)\n stepHashes[`Step ${index}`] = 'N/A'\n }\n }\n\n return formatResults(stepHashes)\n }\n }, [wrapper, viewer], { defaultValue: { labels: [], values: [] } })\n\n return {\n stats, payloads, stepHashes, stepHashesError, stepHashesLoading,\n }\n}\n","import type { CardProps } from '@mui/material'\nimport {\n Card, CardContent, CardHeader, Grid, Link, Tooltip, Typography,\n} from '@mui/material'\nimport { BlockiesAvatarAddress } from '@xyo-network/react-chain-blockies'\nimport { DetailsStack, LabelValueStack } from '@xyo-network/react-chain-shared'\nimport { useEvent } from '@xyo-network/react-event'\nimport type { SignedHydratedTransactionInstance } from '@xyo-network/xl1-protocol-sdk'\nimport React from 'react'\nimport { GiReceiveMoney, GiSandsOfTime } from 'react-icons/gi'\nimport { IoStatsChartOutline } from 'react-icons/io5'\n\nimport { useTransactionDetails } from './hooks/index.ts'\n\nexport interface TransactionBoundWitnessCardProps extends CardProps {\n linkedAddress?: boolean\n wrapper?: SignedHydratedTransactionInstance\n}\n\nexport const TransactionBoundWitnessCard: React.FC<TransactionBoundWitnessCardProps> = ({\n linkedAddress = true, wrapper, ...props\n}) => {\n if (!wrapper) return null\n\n const {\n stats, fees, blockDuration,\n } = useTransactionDetails(wrapper)\n\n const [ref, dispatch] = useEvent<HTMLDivElement>()\n\n return (\n <Card ref={ref} {...props}>\n <CardHeader\n title={(\n <Typography\n onClick={() => linkedAddress && dispatch('address', 'click', wrapper.boundWitness.from)}\n variant=\"body2\"\n sx={{\n maxWidth: '100%', textOverflow: 'ellipsis', overflow: 'hidden', fontFamily: 'monospace',\n }}\n >\n {linkedAddress\n ? (\n <Link sx={{ cursor: 'pointer' }}>{wrapper?.boundWitness.from}</Link>\n )\n : wrapper?.boundWitness.from}\n </Typography>\n )}\n avatar={(\n <Tooltip title={`From Address - ${wrapper?.boundWitness.from}`}>\n <BlockiesAvatarAddress\n address={wrapper?.boundWitness.from}\n onClick={() => dispatch('address', 'click', wrapper.boundWitness.from)}\n size={21}\n sx={{ cursor: 'pointer' }}\n />\n </Tooltip>\n )}\n />\n <CardContent>\n <Grid container spacing={6} sx={{ width: '100%' }}>\n <Grid size={{\n xs: 12, sm: 6, md: 4,\n }}\n >\n <DetailsStack IconComponent={IoStatsChartOutline} heading=\"Stats\" tooltipTitle=\"Transaction Statistics\">\n <LabelValueStack labels={stats.labels} values={stats.values} />\n </DetailsStack>\n </Grid>\n <Grid size={{\n xs: 12, sm: 6, md: 4,\n }}\n >\n <DetailsStack IconComponent={GiReceiveMoney} heading=\"Fees\" tooltipTitle=\"Fees offered to the producer\">\n <LabelValueStack labels={fees.labels} values={fees.values} />\n </DetailsStack>\n </Grid>\n <Grid size={{\n xs: 12, sm: 6, md: 4,\n }}\n >\n <DetailsStack IconComponent={GiSandsOfTime} heading=\"Block Duration\" tooltipTitle=\"Block window for the transaction to be valid\">\n <LabelValueStack labels={blockDuration.labels} values={blockDuration.values} />\n </DetailsStack>\n </Grid>\n </Grid>\n </CardContent>\n </Card>\n )\n}\n","import type { SignedHydratedTransactionInstance } from '@xyo-network/xl1-protocol-sdk'\nimport { useMemo } from 'react'\n\nimport {\n formatFee, formatNumber, formatResults,\n} from '../../../../lib/index.ts'\n\nexport const useTransactionDetails = (wrapper: SignedHydratedTransactionInstance) => {\n const stats = useMemo(() => {\n const stats = {\n 'Reward': formatNumber(wrapper.reward()),\n 'On Chain Payloads': formatNumber(wrapper.elevatedPayloadCount),\n 'Public Payloads': formatNumber(Object.values(wrapper.publicExternalPayloads).length),\n 'Referenced Payloads': formatNumber(Object.entries(wrapper.privateExternalPayloads).length),\n 'Signatures': formatNumber(wrapper.signatureCount),\n }\n\n return formatResults(stats)\n }, [wrapper])\n\n const fees = useMemo(() => {\n const fees = {\n 'Base': formatFee(wrapper.fees.base),\n 'Gas': formatFee(wrapper.fees.gasPrice),\n 'Priority': formatFee(wrapper.fees.priority),\n 'Gas Limit': formatFee(wrapper.fees.gasLimit),\n }\n\n return formatResults(fees)\n }, [wrapper])\n\n const blockDuration = useMemo(() => {\n const blockDuration = {\n 'Expiration': wrapper.boundWitness.exp.toLocaleString(navigator.language ?? 'en-US'),\n 'Not Before': wrapper.boundWitness.nbf.toLocaleString(navigator.language ?? 'en-US'),\n }\n\n return formatResults(blockDuration)\n }, [wrapper])\n\n return {\n stats, fees, blockDuration,\n }\n}\n","import { ErrorRender } from '@xylabs/react-error'\nimport { type FlexBoxProps, FlexCol } from '@xylabs/react-flexbox'\nimport { usePromise } from '@xylabs/react-promise'\nimport { SignedHydratedTransactionWrapper } from '@xyo-network/chain-wrappers'\nimport {\n BoundWitnessSignatureTable, BWActions, HashHeadingPaper, HeadingPaper,\n} from '@xyo-network/react-boundwitness-plugin'\nimport type { SignedHydratedTransaction } from '@xyo-network/xl1-protocol'\nimport React from 'react'\nimport { FaSignature } from 'react-icons/fa'\nimport { VscSymbolNamespace } from 'react-icons/vsc'\n\nimport type { ClickableFields } from '../PayloadTable.tsx'\nimport { PayloadTableFlexbox } from '../PayloadTable.tsx'\nimport { TransactionBoundWitnessCard } from './card/index.ts'\nimport { useTransactionPayloadTypes } from './hooks/index.ts'\n\nconst nonClickableFields: ClickableFields[] = []\n\nexport interface TransactionBoundWitnessDetailsProps extends FlexBoxProps {\n transaction?: SignedHydratedTransaction | null\n}\n\nexport const TransactionBoundWitnessDetails: React.FC<TransactionBoundWitnessDetailsProps> = ({ transaction, ...props }) => {\n const [wrapper, wrapperError] = usePromise(async () => {\n if (transaction) {\n return await SignedHydratedTransactionWrapper.parse(transaction)\n }\n }, [transaction])\n\n const {\n elevatedPayloadHashes, elevatedPayloadSchemas, elevatedPayloadSetsError,\n publicPayloadHashes, publicPayloadSchemas, publicPayloadsError,\n referencedPayloadHashes, referencedPayloadSchemas,\n } = useTransactionPayloadTypes(wrapper)\n\n return (\n <FlexCol alignItems=\"stretch\" rowGap={2} {...props}>\n <HashHeadingPaper\n hash={wrapper?.boundWitness?._hash}\n paperProps={{ sx: { p: 2 } }}\n AdornmentEnd={<BWActions boundwitness={wrapper?.boundWitness} />}\n identiconProps={{ p: 0.75, size: 24 }}\n />\n <ErrorRender error={wrapperError} scope=\"wrapperError:TransactionBoundWitnessDetails.tsx\" />\n <ErrorRender error={elevatedPayloadSetsError} scope=\"elevatedPayloadSetsError:TransactionBoundWitnessDetails.tsx\" />\n <ErrorRender error={publicPayloadsError} scope=\"publicPayloadsError:TransactionBoundWitnessDetails.tsx\" />\n <TransactionBoundWitnessCard elevation={4} wrapper={wrapper} />\n <PayloadTableFlexbox\n tooltip=\"Payloads included in the transaction that are elevated and validated.\"\n IconComponent={<VscSymbolNamespace />}\n hashes={elevatedPayloadHashes}\n headingTitle=\"On Chain Payloads\"\n schemas={elevatedPayloadSchemas}\n sx={{ mb: 1 }}\n />\n {(publicPayloadHashes?.length ?? 0) > 0 && (\n <PayloadTableFlexbox\n tooltip=\"Public payloads included in the transaction.\"\n IconComponent={<VscSymbolNamespace />}\n hashes={publicPayloadHashes}\n headingTitle=\"Public Payloads\"\n schemas={publicPayloadSchemas}\n sx={{ mb: 1 }}\n />\n )}\n {(referencedPayloadHashes?.length ?? 0) > 0 && (\n <PayloadTableFlexbox\n tooltip=\"Payload hashes referenced by the transaction but not included.\"\n IconComponent={<VscSymbolNamespace />}\n clickableFields={nonClickableFields}\n hashes={referencedPayloadHashes}\n headingTitle=\"Referenced Payloads\"\n schemas={referencedPayloadSchemas}\n sx={{ mb: 1 }}\n />\n )}\n <FlexCol alignItems=\"stretch\" rowGap={1} mb={1}>\n <HeadingPaper IconComponent={<FaSignature />} heading=\"Signatures\" />\n <BoundWitnessSignatureTable block={wrapper?.boundWitness} />\n </FlexCol>\n </FlexCol>\n )\n}\n","import type { Hash } from '@xylabs/hex'\nimport { isHash } from '@xylabs/hex'\nimport { usePromise } from '@xylabs/react-promise'\nimport { isDefined } from '@xylabs/typeof'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { Schema } from '@xyo-network/payload-model'\nimport { isSchema } from '@xyo-network/payload-model'\nimport type { SignedHydratedTransactionInstance } from '@xyo-network/xl1-protocol-sdk'\nimport { useMemo } from 'react'\n\nimport { formatPayloadsForTable } from '../../../lib/index.ts'\n\nexport const useTransactionPayloadTypes = (wrapper?: SignedHydratedTransactionInstance) => {\n const [elevatedPayloadSets, elevatedPayloadSetsError] = usePromise(async () => {\n if (isDefined(wrapper)) {\n const elevatedPayloads = wrapper.elevatedPayloads\n const pairs = await PayloadBuilder.hashPairs(elevatedPayloads)\n return formatPayloadsForTable(pairs)\n } else {\n return { hashes: [], schemas: [] }\n }\n }, [wrapper])\n\n const [publicPayloads, publicPayloadsError] = usePromise(async () => {\n if (isDefined(wrapper)) {\n const publicPayloads = wrapper.publicExternalPayloads\n const pairs = await PayloadBuilder.hashPairs(publicPayloads)\n return formatPayloadsForTable(pairs)\n } else {\n return { hashes: [], schemas: [] }\n }\n }, [wrapper])\n\n const referencedPayloads = useMemo(() => {\n const ret = { hashes: [] as Hash[], schemas: [] as Schema[] }\n if (isDefined(wrapper)) {\n const referencedPayloads = wrapper.privateExternalPayloads\n for (const [hash, payloadOrSchema] of Object.entries(referencedPayloads)) {\n if (isHash(hash)) {\n ret.hashes.push(hash)\n }\n if (isSchema(payloadOrSchema)) {\n ret.schemas.push(hash)\n }\n throw new Error(`Unexpected payload or schema type for hash ${hash}: ${payloadOrSchema}`)\n }\n return ret\n } else {\n return ret\n }\n }, [wrapper, elevatedPayloadSets])\n\n const { hashes: elevatedPayloadHashes, schemas: elevatedPayloadSchemas } = elevatedPayloadSets ?? {}\n const { hashes: publicPayloadHashes, schemas: publicPayloadSchemas } = publicPayloads ?? {}\n const { hashes: referencedPayloadHashes, schemas: referencedPayloadSchemas } = referencedPayloads ?? {}\n\n return {\n elevatedPayloadHashes,\n elevatedPayloadSchemas,\n elevatedPayloadSetsError,\n publicPayloadHashes,\n publicPayloadSchemas,\n publicPayloadsError,\n referencedPayloadHashes,\n referencedPayloadSchemas,\n }\n}\n"],"mappings":"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","names":["filterAs","ErrorRender","FlexCol","usePromise","isBoundWitness","SignedHydratedBlockWrapper","PayloadBuilder","BoundWitnessPayloadsTable","BoundWitnessSignatureTable","BWActions","HashHeadingPaper","HeadingPaper","useTxsFromBlock","usePayloadHash","isTransactionBoundWitness","React","useMemo","FaSignature","GrTransaction","VscSymbolMethod","VscSymbolNamespace","isUndefined","bigIntToFixedPointString","formatFee","fee","isUndefined","stringValue","bigIntToFixedPointString","formatNumber","num","toLocaleString","navigator","language","formatPayloadsForTable","pairs","hashes","schemas","bw","hash","push","schema","formatResults","results","result","labels","values","label","value","Object","entries","push","InfoOutline","Tooltip","FlexCol","isDefined","BoundWitnessPayloadTableBody","BoundWitnessPayloadTableHead","HeadingPaper","TableEx","React","VscSymbolMethod","defaultClickableFields","PayloadTableFlexbox","IconComponent","eventNoun","hashes","schemas","headingTitle","clickableFields","tooltip","props","resolvedIconComponent","VscSymbolMethod","FlexCol","alignItems","rowGap","HeadingPaper","AdornmentEnd","isDefined","Tooltip","title","InfoOutline","fontSize","sx","py","px","heading","TableEx","BoundWitnessPayloadTableHead","BoundWitnessPayloadTableBody","payloadHashes","payloadSchemas","Card","CardContent","Grid","Skeleton","Stack","ErrorRender","DetailsStack","LabelValueStack","React","GrSteps","IoStatsChartOutline","VscSymbolNamespace","CardHeader","Link","Tooltip","Typography","BlockiesAvatarAddress","useEvent","React","BlockBoundWitnessCardHeader","linked","address","ref","dispatch","useEvent","React","CardHeader","title","Typography","onClick","variant","sx","maxWidth","textOverflow","overflow","fontFamily","Link","cursor","avatar","Tooltip","BlockiesAvatarAddress","size","usePromise","StepSizes","useMemo","generateStepHashText","blockNumber","stepHashIndex","stepSize","StepSizes","stepStart","stepStop","formatNumber","useBlockDetails","wrapper","viewer","stats","useMemo","Height","boundWitness","block","Protocol","protocol","toString","Signatures","signatureCount","$epoch","formatResults","payloads","transactionCount","payloadCount","stepHashes","stepHashesError","stepHashesLoading","usePromise","index","hash","step_hashes","entries","blockByHash","console","warn","label","value","e","error","defaultValue","labels","values","BlockBoundWitnessCard","linkedAddress","viewer","wrapper","props","stats","payloads","stepHashes","stepHashesError","stepHashesLoading","useBlockDetails","React","Card","boundWitness","addresses","map","address","BlockBoundWitnessCardHeader","key","linked","ErrorRender","error","scope","CardContent","Grid","container","spacing","sx","width","size","xs","sm","md","DetailsStack","IconComponent","IoStatsChartOutline","heading","tooltipTitle","LabelValueStack","labels","values","VscSymbolNamespace","GrSteps","Stack","gap","Skeleton","variant","height","BlockBoundWitnessDetails","block","paper","viewer","children","props","wrapper","wrapperError","usePromise","SignedHydratedBlockWrapper","parse","boundWitness","payloads","hash","usePayloadHash","transactions","txFromBlockError","useTxsFromBlock","hashes","txHashes","schemas","txSchemas","useMemo","formatPayloadsForTable","nonTxBoundWitnesses","bwsFromBlockError","bws","filterAs","payload","isTransactionBoundWitness","isBoundWitness","undefined","PayloadBuilder","hashPairs","nonTxBwHashes","nonTxBwSchemas","hasNonTxBoundWitnesses","length","React","FlexCol","alignItems","rowGap","ErrorRender","error","scope","HashHeadingPaper","paperProps","sx","p","AdornmentEnd","BWActions","boundwitness","identiconProps","size","BlockBoundWitnessCard","elevation","PayloadTableFlexbox","IconComponent","GrTransaction","eventNoun","headingTitle","mb","HeadingPaper","VscSymbolNamespace","heading","BoundWitnessPayloadsTable","VscSymbolMethod","FaSignature","BoundWitnessSignatureTable","Card","CardContent","CardHeader","Grid","Link","Tooltip","Typography","BlockiesAvatarAddress","DetailsStack","LabelValueStack","useEvent","React","GiReceiveMoney","GiSandsOfTime","IoStatsChartOutline","useMemo","useTransactionDetails","wrapper","stats","useMemo","formatNumber","reward","elevatedPayloadCount","Object","values","publicExternalPayloads","length","entries","privateExternalPayloads","signatureCount","formatResults","fees","formatFee","base","gasPrice","priority","gasLimit","blockDuration","boundWitness","exp","toLocaleString","navigator","language","nbf","TransactionBoundWitnessCard","linkedAddress","wrapper","props","stats","fees","blockDuration","useTransactionDetails","ref","dispatch","useEvent","React","Card","CardHeader","title","Typography","onClick","boundWitness","from","variant","sx","maxWidth","textOverflow","overflow","fontFamily","Link","cursor","avatar","Tooltip","BlockiesAvatarAddress","address","size","CardContent","Grid","container","spacing","width","xs","sm","md","DetailsStack","IconComponent","IoStatsChartOutline","heading","tooltipTitle","LabelValueStack","labels","values","GiReceiveMoney","GiSandsOfTime","ErrorRender","FlexCol","usePromise","SignedHydratedTransactionWrapper","BoundWitnessSignatureTable","BWActions","HashHeadingPaper","HeadingPaper","React","FaSignature","VscSymbolNamespace","isHash","usePromise","isDefined","PayloadBuilder","isSchema","useMemo","useTransactionPayloadTypes","wrapper","elevatedPayloadSets","elevatedPayloadSetsError","usePromise","isDefined","elevatedPayloads","pairs","PayloadBuilder","hashPairs","formatPayloadsForTable","hashes","schemas","publicPayloads","publicPayloadsError","publicExternalPayloads","referencedPayloads","useMemo","ret","privateExternalPayloads","hash","payloadOrSchema","Object","entries","isHash","push","isSchema","Error","elevatedPayloadHashes","elevatedPayloadSchemas","publicPayloadHashes","publicPayloadSchemas","referencedPayloadHashes","referencedPayloadSchemas","nonClickableFields","TransactionBoundWitnessDetails","transaction","props","wrapper","wrapperError","usePromise","SignedHydratedTransactionWrapper","parse","elevatedPayloadHashes","elevatedPayloadSchemas","elevatedPayloadSetsError","publicPayloadHashes","publicPayloadSchemas","publicPayloadsError","referencedPayloadHashes","referencedPayloadSchemas","useTransactionPayloadTypes","React","FlexCol","alignItems","rowGap","HashHeadingPaper","hash","boundWitness","_hash","paperProps","sx","p","AdornmentEnd","BWActions","boundwitness","identiconProps","size","ErrorRender","error","scope","TransactionBoundWitnessCard","elevation","PayloadTableFlexbox","tooltip","IconComponent","VscSymbolNamespace","hashes","headingTitle","schemas","mb","length","clickableFields","HeadingPaper","FaSignature","heading","BoundWitnessSignatureTable","block"]}
@@ -10,6 +10,7 @@ export interface BWPayloadTableFlexboxProps<TNoun extends ExtendEventNoun = Even
10
10
  hashes?: Hash[];
11
11
  headingTitle?: string;
12
12
  schemas?: string[];
13
+ tooltip?: string;
13
14
  }
14
- export declare const BWPayloadTableFlexbox: <TNoun extends ExtendEventNoun = EventNoun>({ IconComponent, eventNoun, hashes, schemas, headingTitle, clickableFields, ...props }: BWPayloadTableFlexboxProps<TNoun>) => import("react/jsx-runtime").JSX.Element;
15
- //# sourceMappingURL=BwPayloadTable.d.ts.map
15
+ export declare const PayloadTableFlexbox: <TNoun extends ExtendEventNoun = EventNoun>({ IconComponent, eventNoun, hashes, schemas, headingTitle, clickableFields, tooltip, ...props }: BWPayloadTableFlexboxProps<TNoun>) => import("react/jsx-runtime").JSX.Element;
16
+ //# sourceMappingURL=PayloadTable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PayloadTable.d.ts","sourceRoot":"","sources":["../../../src/components/PayloadTable.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAMzD,OAAO,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAE1E,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,MAAM,MAAM,eAAe,GAAG,MAAM,CAAA;AAGpC,MAAM,WAAW,0BAA0B,CAAC,KAAK,SAAS,eAAe,GAAG,SAAS,CAAE,SAAQ,YAAY;IACzG,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC/B,eAAe,CAAC,EAAE,eAAe,EAAE,CAAA;IACnC,SAAS,CAAC,EAAE,KAAK,CAAA;IACjB,MAAM,CAAC,EAAE,IAAI,EAAE,CAAA;IACf,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAClB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,eAAO,MAAM,mBAAmB,GAAI,KAAK,SAAS,eAAe,GAAG,SAAS,EAAE,iGAS5E,0BAA0B,CAAC,KAAK,CAAC,4CAqBnC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"useDetails.d.ts","sourceRoot":"","sources":["../../../../../../src/components/block/card/hooks/useDetails.ts"],"names":[],"mappings":"AACA,OAAO,EAAa,KAAK,SAAS,EAAE,MAAM,2BAA2B,CAAA;AACrE,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAA;AAahF,eAAO,MAAM,eAAe,GAAI,SAAS,2BAA2B,EAAE,SAAS,SAAS;;;;;;;;;;;;;;;CAmDvF,CAAA"}
1
+ {"version":3,"file":"useDetails.d.ts","sourceRoot":"","sources":["../../../../../../src/components/block/card/hooks/useDetails.ts"],"names":[],"mappings":"AACA,OAAO,EAAa,KAAK,SAAS,EAAE,MAAM,2BAA2B,CAAA;AACrE,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAA;AAahF,eAAO,MAAM,eAAe,GAAI,SAAS,2BAA2B,EAAE,SAAS,SAAS;;;;;;;;;;;;;;;CAiDvF,CAAA"}
@@ -1,4 +1,4 @@
1
1
  export * from './block/index.ts';
2
- export * from './BwPayloadTable.tsx';
2
+ export * from './PayloadTable.tsx';
3
3
  export * from './transactions/index.ts';
4
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAA;AAChC,cAAc,sBAAsB,CAAA;AACpC,cAAc,yBAAyB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAA;AAChC,cAAc,oBAAoB,CAAA;AAClC,cAAc,yBAAyB,CAAA"}
@@ -5,4 +5,4 @@ export interface TransactionBoundWitnessDetailsProps extends FlexBoxProps {
5
5
  transaction?: SignedHydratedTransaction | null;
6
6
  }
7
7
  export declare const TransactionBoundWitnessDetails: React.FC<TransactionBoundWitnessDetailsProps>;
8
- //# sourceMappingURL=TransactionDetails.d.ts.map
8
+ //# sourceMappingURL=TransactionBoundWitnessDetails.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TransactionBoundWitnessDetails.d.ts","sourceRoot":"","sources":["../../../../src/components/transactions/TransactionBoundWitnessDetails.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,YAAY,EAAW,MAAM,uBAAuB,CAAA;AAMlE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAA;AAC1E,OAAO,KAAK,MAAM,OAAO,CAAA;AAWzB,MAAM,WAAW,mCAAoC,SAAQ,YAAY;IACvE,WAAW,CAAC,EAAE,yBAAyB,GAAG,IAAI,CAAA;CAC/C;AAED,eAAO,MAAM,8BAA8B,EAAE,KAAK,CAAC,EAAE,CAAC,mCAAmC,CA4DxF,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"useDetails.d.ts","sourceRoot":"","sources":["../../../../../../src/components/transactions/card/hooks/useDetails.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iCAAiC,EAAE,MAAM,+BAA+B,CAAA;AAOtF,eAAO,MAAM,qBAAqB,GAAI,SAAS,iCAAiC;;;;;;;;;;;;;CAmC/E,CAAA"}
1
+ {"version":3,"file":"useDetails.d.ts","sourceRoot":"","sources":["../../../../../../src/components/transactions/card/hooks/useDetails.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iCAAiC,EAAE,MAAM,+BAA+B,CAAA;AAOtF,eAAO,MAAM,qBAAqB,GAAI,SAAS,iCAAiC;;;;;;;;;;;;;CAoC/E,CAAA"}
@@ -0,0 +1,2 @@
1
+ export * from './usePayloadTypes.ts';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/transactions/hooks/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAA"}
@@ -0,0 +1,12 @@
1
+ import type { SignedHydratedTransactionInstance } from '@xyo-network/xl1-protocol-sdk';
2
+ export declare const useTransactionPayloadTypes: (wrapper?: SignedHydratedTransactionInstance) => {
3
+ elevatedPayloadHashes: Lowercase<string>[] | undefined;
4
+ elevatedPayloadSchemas: string[] | undefined;
5
+ elevatedPayloadSetsError: Error | undefined;
6
+ publicPayloadHashes: Lowercase<string>[] | undefined;
7
+ publicPayloadSchemas: string[] | undefined;
8
+ publicPayloadsError: Error | undefined;
9
+ referencedPayloadHashes: Lowercase<string>[];
10
+ referencedPayloadSchemas: string[];
11
+ };
12
+ //# sourceMappingURL=usePayloadTypes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePayloadTypes.d.ts","sourceRoot":"","sources":["../../../../../src/components/transactions/hooks/usePayloadTypes.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,iCAAiC,EAAE,MAAM,+BAA+B,CAAA;AAKtF,eAAO,MAAM,0BAA0B,GAAI,UAAU,iCAAiC;;;;;;;;;CAsDrF,CAAA"}
@@ -1,3 +1,3 @@
1
1
  export * from './card/index.ts';
2
- export * from './TransactionDetails.tsx';
2
+ export * from './TransactionBoundWitnessDetails.tsx';
3
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/transactions/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAA;AAC/B,cAAc,0BAA0B,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/transactions/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAA;AAC/B,cAAc,sCAAsC,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-boundwitness",
4
- "version": "1.5.29",
4
+ "version": "1.5.30",
5
5
  "description": "XYO Layer One React SDK BoundWitness",
6
6
  "homepage": "https://xylabs.com",
7
7
  "bugs": {
@@ -34,28 +34,26 @@
34
34
  "module": "dist/browser/index.mjs",
35
35
  "types": "dist/types/index.d.ts",
36
36
  "dependencies": {
37
- "@xylabs/array": "^4.11.16",
38
- "@xylabs/eth-address": "^4.11.16",
39
- "@xylabs/hex": "^4.11.16",
37
+ "@xylabs/array": "^4.11.20",
38
+ "@xylabs/hex": "^4.11.20",
40
39
  "@xylabs/react-error": "^6.3.4",
41
40
  "@xylabs/react-flexbox": "^6.3.4",
42
41
  "@xylabs/react-promise": "^6.3.4",
43
- "@xylabs/typeof": "^4.11.16",
44
- "@xyo-network/boundwitness-model": "^3.18.5",
45
- "@xyo-network/chain-utils": "^1.5.29",
46
- "@xyo-network/chain-wrappers": "^1.5.29",
47
- "@xyo-network/payload-builder": "^3.18.5",
48
- "@xyo-network/payload-model": "^3.18.5",
49
- "@xyo-network/react-boundwitness-plugin": "^5.3.7",
50
- "@xyo-network/react-chain-blockchain": "^1.5.29",
51
- "@xyo-network/react-chain-blockies": "^1.5.29",
52
- "@xyo-network/react-chain-provider": "^1.5.29",
53
- "@xyo-network/react-chain-shared": "^1.5.29",
54
- "@xyo-network/react-event": "^5.3.7",
55
- "@xyo-network/react-shared": "^5.3.7",
56
- "@xyo-network/react-table": "^5.3.7",
57
- "@xyo-network/xl1-protocol": "^1.4.19",
58
- "@xyo-network/xl1-protocol-sdk": "^1.5.29",
42
+ "@xylabs/typeof": "^4.11.20",
43
+ "@xyo-network/boundwitness-model": "^3.18.8",
44
+ "@xyo-network/chain-utils": "^1.5.30",
45
+ "@xyo-network/chain-wrappers": "^1.5.30",
46
+ "@xyo-network/payload-builder": "^3.18.8",
47
+ "@xyo-network/payload-model": "^3.18.8",
48
+ "@xyo-network/react-boundwitness-plugin": "^5.3.8",
49
+ "@xyo-network/react-chain-blockchain": "^1.5.30",
50
+ "@xyo-network/react-chain-blockies": "^1.5.30",
51
+ "@xyo-network/react-chain-shared": "^1.5.30",
52
+ "@xyo-network/react-event": "^5.3.8",
53
+ "@xyo-network/react-shared": "^5.3.8",
54
+ "@xyo-network/react-table": "^5.3.8",
55
+ "@xyo-network/xl1-protocol": "^1.4.25",
56
+ "@xyo-network/xl1-protocol-sdk": "^1.5.30",
59
57
  "react-icons": "^5.5.0"
60
58
  },
61
59
  "devDependencies": {
@@ -63,13 +61,14 @@
63
61
  "@emotion/styled": "^11.14.0",
64
62
  "@mui/icons-material": "^7.1.1",
65
63
  "@mui/material": "^7.1.1",
66
- "@storybook/react-vite": "^9.0.6",
64
+ "@storybook/react-vite": "^9.0.9",
67
65
  "@xylabs/ts-scripts-yarn3": "^6.5.8",
68
66
  "@xylabs/tsconfig-react": "^6.5.8",
69
- "@xyo-network/chain-protocol": "^1.5.29",
70
- "@xyo-network/react-chain-network": "^1.5.29",
71
- "@xyo-network/react-chain-shared": "^1.5.29",
72
- "knip": "^5.60.2",
67
+ "@xyo-network/chain-protocol": "^1.5.30",
68
+ "@xyo-network/react-chain-network": "^1.5.30",
69
+ "@xyo-network/react-chain-provider": "^1.5.30",
70
+ "@xyo-network/react-chain-shared": "^1.5.30",
71
+ "knip": "^5.61.0",
73
72
  "react": "^19.1.0",
74
73
  "react-dom": "^19.1.0",
75
74
  "react-router-dom": "^7.6.2",
@@ -1,6 +1,9 @@
1
+ import { InfoOutline } from '@mui/icons-material'
2
+ import { Tooltip } from '@mui/material'
1
3
  import type { Hash } from '@xylabs/hex'
2
4
  import type { FlexBoxProps } from '@xylabs/react-flexbox'
3
5
  import { FlexCol } from '@xylabs/react-flexbox'
6
+ import { isDefined } from '@xylabs/typeof'
4
7
  import {
5
8
  BoundWitnessPayloadTableBody, BoundWitnessPayloadTableHead, HeadingPaper,
6
9
  } from '@xyo-network/react-boundwitness-plugin'
@@ -19,21 +22,33 @@ export interface BWPayloadTableFlexboxProps<TNoun extends ExtendEventNoun = Even
19
22
  hashes?: Hash[]
20
23
  headingTitle?: string
21
24
  schemas?: string[]
25
+ tooltip?: string
22
26
  }
23
27
 
24
- export const BWPayloadTableFlexbox = <TNoun extends ExtendEventNoun = EventNoun>({
28
+ export const PayloadTableFlexbox = <TNoun extends ExtendEventNoun = EventNoun>({
25
29
  IconComponent,
26
30
  eventNoun,
27
31
  hashes,
28
32
  schemas,
29
33
  headingTitle,
30
34
  clickableFields = defaultClickableFields,
35
+ tooltip,
31
36
  ...props
32
37
  }: BWPayloadTableFlexboxProps<TNoun>) => {
33
38
  const resolvedIconComponent = IconComponent ?? <VscSymbolMethod />
34
39
  return (
35
40
  <FlexCol alignItems="stretch" rowGap={1} {...props}>
36
- <HeadingPaper IconComponent={resolvedIconComponent} heading={headingTitle} />
41
+ <HeadingPaper
42
+ AdornmentEnd={isDefined(tooltip)
43
+ ? (
44
+ <Tooltip title={tooltip}>
45
+ <InfoOutline fontSize="small" sx={{ py: 2, px: 1 }} />
46
+ </Tooltip>
47
+ )
48
+ : null}
49
+ IconComponent={resolvedIconComponent}
50
+ heading={headingTitle}
51
+ />
37
52
  <TableEx>
38
53
  <BoundWitnessPayloadTableHead />
39
54
  <BoundWitnessPayloadTableBody<TNoun> payloadHashes={hashes} payloadSchemas={schemas} eventNoun={eventNoun} clickableFields={clickableFields} />
@@ -24,7 +24,7 @@ import { VscSymbolMethod, VscSymbolNamespace } from 'react-icons/vsc'
24
24
 
25
25
  import { formatPayloadsForTable } from '../../lib/index.ts'
26
26
  import type { TransactionBoundWitnessEvents } from '../../types/index.ts'
27
- import { BWPayloadTableFlexbox } from '../BwPayloadTable.tsx'
27
+ import { PayloadTableFlexbox } from '../PayloadTable.tsx'
28
28
  import { BlockBoundWitnessCard } from './card/Card.tsx'
29
29
 
30
30
  export interface BoundWitnessDetailsProps extends FlexBoxProps {
@@ -71,7 +71,7 @@ export const BlockBoundWitnessDetails = ({
71
71
  />
72
72
  <BlockBoundWitnessCard elevation={4} viewer={viewer} wrapper={wrapper} />
73
73
  {(transactions?.length ?? 0) > 0 && (
74
- <BWPayloadTableFlexbox<TransactionBoundWitnessEvents>
74
+ <PayloadTableFlexbox<TransactionBoundWitnessEvents>
75
75
  IconComponent={<GrTransaction />}
76
76
  eventNoun="transaction"
77
77
  hashes={txHashes}
@@ -86,7 +86,7 @@ export const BlockBoundWitnessDetails = ({
86
86
  </FlexCol>
87
87
  {hasNonTxBoundWitnesses
88
88
  ? (
89
- <BWPayloadTableFlexbox<TransactionBoundWitnessEvents>
89
+ <PayloadTableFlexbox<TransactionBoundWitnessEvents>
90
90
  IconComponent={<VscSymbolMethod />}
91
91
  eventNoun="boundwitness"
92
92
  hashes={nonTxBwHashes}
@@ -28,8 +28,6 @@ export const useBlockDetails = (wrapper: SignedHydratedBlockInstance, viewer?: X
28
28
  const payloads = useMemo(() => {
29
29
  const payloads = {
30
30
  'Transactions': formatNumber(wrapper.transactionCount),
31
- 'Public Payloads': formatNumber(wrapper.publicPayloadCount),
32
- 'Private Payloads': formatNumber(wrapper.privatePayloadCount),
33
31
  'Total Payloads': formatNumber(wrapper.payloadCount),
34
32
  }
35
33
 
@@ -1,3 +1,3 @@
1
1
  export * from './block/index.ts'
2
- export * from './BwPayloadTable.tsx'
2
+ export * from './PayloadTable.tsx'
3
3
  export * from './transactions/index.ts'
@@ -2,7 +2,7 @@ import type { Meta, StoryFn } from '@storybook/react-vite'
2
2
  import { buildRandomTransaction } from '@xyo-network/chain-protocol'
3
3
  import React from 'react'
4
4
 
5
- import { TransactionBoundWitnessDetails } from './TransactionDetails.tsx'
5
+ import { TransactionBoundWitnessDetails } from './TransactionBoundWitnessDetails.tsx'
6
6
 
7
7
  export default {
8
8
  title: 'BoundWitness/Transaction/Details/Flexbox',
@@ -1,21 +1,19 @@
1
1
  import { ErrorRender } from '@xylabs/react-error'
2
2
  import { type FlexBoxProps, FlexCol } from '@xylabs/react-flexbox'
3
3
  import { usePromise } from '@xylabs/react-promise'
4
- import { isDefined } from '@xylabs/typeof'
5
4
  import { SignedHydratedTransactionWrapper } from '@xyo-network/chain-wrappers'
6
- import { PayloadBuilder } from '@xyo-network/payload-builder'
7
5
  import {
8
6
  BoundWitnessSignatureTable, BWActions, HashHeadingPaper, HeadingPaper,
9
7
  } from '@xyo-network/react-boundwitness-plugin'
10
8
  import type { SignedHydratedTransaction } from '@xyo-network/xl1-protocol'
11
9
  import React from 'react'
12
10
  import { FaSignature } from 'react-icons/fa'
13
- import { VscSymbolMethod, VscSymbolNamespace } from 'react-icons/vsc'
11
+ import { VscSymbolNamespace } from 'react-icons/vsc'
14
12
 
15
- import { formatPayloadsForTable } from '../../lib/index.ts'
16
- import type { ClickableFields } from '../BwPayloadTable.tsx'
17
- import { BWPayloadTableFlexbox } from '../BwPayloadTable.tsx'
13
+ import type { ClickableFields } from '../PayloadTable.tsx'
14
+ import { PayloadTableFlexbox } from '../PayloadTable.tsx'
18
15
  import { TransactionBoundWitnessCard } from './card/index.ts'
16
+ import { useTransactionPayloadTypes } from './hooks/index.ts'
19
17
 
20
18
  const nonClickableFields: ClickableFields[] = []
21
19
 
@@ -30,33 +28,11 @@ export const TransactionBoundWitnessDetails: React.FC<TransactionBoundWitnessDet
30
28
  }
31
29
  }, [transaction])
32
30
 
33
- const [elevatedPayloadSets, elevatedPayloadSetsError] = usePromise(async () => {
34
- if (isDefined(wrapper)) {
35
- const elevatedPayloads = wrapper.elevatedPayloads
36
- const pairs = await PayloadBuilder.hashPairs(elevatedPayloads)
37
- return formatPayloadsForTable(pairs)
38
- } else {
39
- return { hashes: [], schemas: [] }
40
- }
41
- }, [wrapper])
42
-
43
- // TODO - use forthcoming wrapper method since hydrated transactions don't include non-elevated payloads
44
- const [nonElevatedPayloadSets, nonElevatedPayloadSetsError] = usePromise(async () => {
45
- if (isDefined(wrapper)) {
46
- const elevatedPayloads = wrapper.elevatedPayloads
47
- const payloads = wrapper.payloads
48
- const nonElevatedPayloads = payloads.filter((payload) => {
49
- return elevatedPayloads.every(elevated => elevated._hash !== payload._hash)
50
- })
51
- const pairs = await PayloadBuilder.hashPairs(nonElevatedPayloads)
52
- return formatPayloadsForTable(pairs)
53
- } else {
54
- return { hashes: [], schemas: [] }
55
- }
56
- }, [wrapper])
57
-
58
- const { hashes: elevatedPayloadHashes, schemas: elevatedPayloadSchemas } = elevatedPayloadSets ?? {}
59
- const { hashes: nonElevatedPayloadHashes, schemas: nonElevatedPayloadSchemas } = nonElevatedPayloadSets ?? {}
31
+ const {
32
+ elevatedPayloadHashes, elevatedPayloadSchemas, elevatedPayloadSetsError,
33
+ publicPayloadHashes, publicPayloadSchemas, publicPayloadsError,
34
+ referencedPayloadHashes, referencedPayloadSchemas,
35
+ } = useTransactionPayloadTypes(wrapper)
60
36
 
61
37
  return (
62
38
  <FlexCol alignItems="stretch" rowGap={2} {...props}>
@@ -68,22 +44,34 @@ export const TransactionBoundWitnessDetails: React.FC<TransactionBoundWitnessDet
68
44
  />
69
45
  <ErrorRender error={wrapperError} scope="wrapperError:TransactionBoundWitnessDetails.tsx" />
70
46
  <ErrorRender error={elevatedPayloadSetsError} scope="elevatedPayloadSetsError:TransactionBoundWitnessDetails.tsx" />
71
- <ErrorRender error={nonElevatedPayloadSetsError} scope="nonElevatedPayloadSetsError:TransactionBoundWitnessDetails.tsx" />
47
+ <ErrorRender error={publicPayloadsError} scope="publicPayloadsError:TransactionBoundWitnessDetails.tsx" />
72
48
  <TransactionBoundWitnessCard elevation={4} wrapper={wrapper} />
73
- <BWPayloadTableFlexbox
49
+ <PayloadTableFlexbox
50
+ tooltip="Payloads included in the transaction that are elevated and validated."
74
51
  IconComponent={<VscSymbolNamespace />}
75
52
  hashes={elevatedPayloadHashes}
76
- headingTitle="Elevated Payloads"
53
+ headingTitle="On Chain Payloads"
77
54
  schemas={elevatedPayloadSchemas}
78
55
  sx={{ mb: 1 }}
79
56
  />
80
- {(nonElevatedPayloadHashes?.length ?? 0) > 0 && (
81
- <BWPayloadTableFlexbox
82
- IconComponent={<VscSymbolMethod />}
57
+ {(publicPayloadHashes?.length ?? 0) > 0 && (
58
+ <PayloadTableFlexbox
59
+ tooltip="Public payloads included in the transaction."
60
+ IconComponent={<VscSymbolNamespace />}
61
+ hashes={publicPayloadHashes}
62
+ headingTitle="Public Payloads"
63
+ schemas={publicPayloadSchemas}
64
+ sx={{ mb: 1 }}
65
+ />
66
+ )}
67
+ {(referencedPayloadHashes?.length ?? 0) > 0 && (
68
+ <PayloadTableFlexbox
69
+ tooltip="Payload hashes referenced by the transaction but not included."
70
+ IconComponent={<VscSymbolNamespace />}
83
71
  clickableFields={nonClickableFields}
84
- hashes={nonElevatedPayloadHashes}
85
- headingTitle="Non-Elevated Payloads"
86
- schemas={nonElevatedPayloadSchemas}
72
+ hashes={referencedPayloadHashes}
73
+ headingTitle="Referenced Payloads"
74
+ schemas={referencedPayloadSchemas}
87
75
  sx={{ mb: 1 }}
88
76
  />
89
77
  )}
@@ -9,8 +9,9 @@ export const useTransactionDetails = (wrapper: SignedHydratedTransactionInstance
9
9
  const stats = useMemo(() => {
10
10
  const stats = {
11
11
  'Reward': formatNumber(wrapper.reward()),
12
- 'Elevated Payloads': formatNumber(wrapper.elevatedPayloadCount),
13
- 'Total Payloads': formatNumber(wrapper.payloadCount),
12
+ 'On Chain Payloads': formatNumber(wrapper.elevatedPayloadCount),
13
+ 'Public Payloads': formatNumber(Object.values(wrapper.publicExternalPayloads).length),
14
+ 'Referenced Payloads': formatNumber(Object.entries(wrapper.privateExternalPayloads).length),
14
15
  'Signatures': formatNumber(wrapper.signatureCount),
15
16
  }
16
17
 
@@ -0,0 +1 @@
1
+ export * from './usePayloadTypes.ts'
@@ -0,0 +1,67 @@
1
+ import type { Hash } from '@xylabs/hex'
2
+ import { isHash } from '@xylabs/hex'
3
+ import { usePromise } from '@xylabs/react-promise'
4
+ import { isDefined } from '@xylabs/typeof'
5
+ import { PayloadBuilder } from '@xyo-network/payload-builder'
6
+ import type { Schema } from '@xyo-network/payload-model'
7
+ import { isSchema } from '@xyo-network/payload-model'
8
+ import type { SignedHydratedTransactionInstance } from '@xyo-network/xl1-protocol-sdk'
9
+ import { useMemo } from 'react'
10
+
11
+ import { formatPayloadsForTable } from '../../../lib/index.ts'
12
+
13
+ export const useTransactionPayloadTypes = (wrapper?: SignedHydratedTransactionInstance) => {
14
+ const [elevatedPayloadSets, elevatedPayloadSetsError] = usePromise(async () => {
15
+ if (isDefined(wrapper)) {
16
+ const elevatedPayloads = wrapper.elevatedPayloads
17
+ const pairs = await PayloadBuilder.hashPairs(elevatedPayloads)
18
+ return formatPayloadsForTable(pairs)
19
+ } else {
20
+ return { hashes: [], schemas: [] }
21
+ }
22
+ }, [wrapper])
23
+
24
+ const [publicPayloads, publicPayloadsError] = usePromise(async () => {
25
+ if (isDefined(wrapper)) {
26
+ const publicPayloads = wrapper.publicExternalPayloads
27
+ const pairs = await PayloadBuilder.hashPairs(publicPayloads)
28
+ return formatPayloadsForTable(pairs)
29
+ } else {
30
+ return { hashes: [], schemas: [] }
31
+ }
32
+ }, [wrapper])
33
+
34
+ const referencedPayloads = useMemo(() => {
35
+ const ret = { hashes: [] as Hash[], schemas: [] as Schema[] }
36
+ if (isDefined(wrapper)) {
37
+ const referencedPayloads = wrapper.privateExternalPayloads
38
+ for (const [hash, payloadOrSchema] of Object.entries(referencedPayloads)) {
39
+ if (isHash(hash)) {
40
+ ret.hashes.push(hash)
41
+ }
42
+ if (isSchema(payloadOrSchema)) {
43
+ ret.schemas.push(hash)
44
+ }
45
+ throw new Error(`Unexpected payload or schema type for hash ${hash}: ${payloadOrSchema}`)
46
+ }
47
+ return ret
48
+ } else {
49
+ return ret
50
+ }
51
+ }, [wrapper, elevatedPayloadSets])
52
+
53
+ const { hashes: elevatedPayloadHashes, schemas: elevatedPayloadSchemas } = elevatedPayloadSets ?? {}
54
+ const { hashes: publicPayloadHashes, schemas: publicPayloadSchemas } = publicPayloads ?? {}
55
+ const { hashes: referencedPayloadHashes, schemas: referencedPayloadSchemas } = referencedPayloads ?? {}
56
+
57
+ return {
58
+ elevatedPayloadHashes,
59
+ elevatedPayloadSchemas,
60
+ elevatedPayloadSetsError,
61
+ publicPayloadHashes,
62
+ publicPayloadSchemas,
63
+ publicPayloadsError,
64
+ referencedPayloadHashes,
65
+ referencedPayloadSchemas,
66
+ }
67
+ }
@@ -1,2 +1,2 @@
1
1
  export * from './card/index.ts'
2
- export * from './TransactionDetails.tsx'
2
+ export * from './TransactionBoundWitnessDetails.tsx'
@@ -1 +0,0 @@
1
- {"version":3,"file":"BwPayloadTable.d.ts","sourceRoot":"","sources":["../../../src/components/BwPayloadTable.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAKzD,OAAO,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAE1E,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,MAAM,MAAM,eAAe,GAAG,MAAM,CAAA;AAGpC,MAAM,WAAW,0BAA0B,CAAC,KAAK,SAAS,eAAe,GAAG,SAAS,CAAE,SAAQ,YAAY;IACzG,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC/B,eAAe,CAAC,EAAE,eAAe,EAAE,CAAA;IACnC,SAAS,CAAC,EAAE,KAAK,CAAA;IACjB,MAAM,CAAC,EAAE,IAAI,EAAE,CAAA;IACf,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;CACnB;AAED,eAAO,MAAM,qBAAqB,GAAI,KAAK,SAAS,eAAe,GAAG,SAAS,EAAE,wFAQ9E,0BAA0B,CAAC,KAAK,CAAC,4CAWnC,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"TransactionDetails.d.ts","sourceRoot":"","sources":["../../../../src/components/transactions/TransactionDetails.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,YAAY,EAAW,MAAM,uBAAuB,CAAA;AAQlE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAA;AAC1E,OAAO,KAAK,MAAM,OAAO,CAAA;AAWzB,MAAM,WAAW,mCAAoC,SAAQ,YAAY;IACvE,WAAW,CAAC,EAAE,yBAAyB,GAAG,IAAI,CAAA;CAC/C;AAED,eAAO,MAAM,8BAA8B,EAAE,KAAK,CAAC,EAAE,CAAC,mCAAmC,CAsExF,CAAA"}