From c4f650ce516801a14377ed7fb72d0255761cfb74 Mon Sep 17 00:00:00 2001 From: solidsnakedev Date: Fri, 21 Nov 2025 10:05:47 -0700 Subject: [PATCH] feat(docs): improve CBOR decoder tool UI and add data decoder option --- .../tools/tx-decoder/transaction-decoder.tsx | 131 +++++++++++++----- docs/content/docs/modules/core/CBOR.mdx | 22 +++ docs/content/docs/modules/core/Data.mdx | 37 +++-- docs/content/docs/modules/core/TSchema.mdx | 73 +++++++++- docs/next-env.d.ts | 2 +- .../evolution/docs/modules/core/TSchema.ts.md | 16 ++- packages/evolution/src/core/index.ts | 1 + 7 files changed, 218 insertions(+), 64 deletions(-) diff --git a/docs/app/tools/tx-decoder/transaction-decoder.tsx b/docs/app/tools/tx-decoder/transaction-decoder.tsx index c6242661..c3b4bc0e 100644 --- a/docs/app/tools/tx-decoder/transaction-decoder.tsx +++ b/docs/app/tools/tx-decoder/transaction-decoder.tsx @@ -1,12 +1,15 @@ 'use client' import { useState } from 'react' -import { Core } from "@evolution-sdk/evolution" +import { Core, Schema } from "@evolution-sdk/evolution" + +type DecodeType = 'transaction' | 'witnessSet' | 'data' export function TransactionDecoder() { const [txHex, setTxHex] = useState("") const [decodedJson, setDecodedJson] = useState("") const [error, setError] = useState(null) + const [decodeType, setDecodeType] = useState('transaction') const decodeTx = async () => { setError(null) @@ -16,60 +19,114 @@ export function TransactionDecoder() { const cleanHex = txHex.trim().replace(/\s+/g, '') if (!cleanHex) { - setError("Please enter a transaction CBOR hex string") + setError(`Please enter a ${decodeType === 'transaction' ? 'transaction' : decodeType === 'witnessSet' ? 'transaction witness set' : 'plutus data'} CBOR hex string`) return } - const tx = Core.Transaction.fromCBORHex(cleanHex) - const json = JSON.stringify(tx.toJSON(), (key, value) => - typeof value === 'bigint' ? value.toString() : value - , 2) - setDecodedJson(json) + if (decodeType === 'transaction') { + const tx = Core.Transaction.fromCBORHex(cleanHex) + const json = Schema.encodeSync(Schema.parseJson(Core.Transaction.Transaction, {space: 2}))(tx) + setDecodedJson(json) + } else if (decodeType === 'witnessSet') { + const witnessSet = Core.TransactionWitnessSet.fromCBORHex(cleanHex) + const json = Schema.encodeSync(Schema.parseJson(Core.TransactionWitnessSet.TransactionWitnessSet, {space: 2}))(witnessSet) + setDecodedJson(json) + } else { + const data = Core.Data.fromCBORHex(cleanHex) + const json = Schema.encodeSync(Schema.parseJson(Core.Data.DataSchema, {space: 2}))(data) + setDecodedJson(json) + } } catch (err) { console.error('Decode error:', err) - setError(err instanceof Error ? err.message : "Failed to decode transaction") + setError(err instanceof Error ? err.message : `Failed to decode ${decodeType === 'transaction' ? 'transaction' : decodeType === 'witnessSet' ? 'witness set' : 'data'}`) } } return ( -
-
- - -
- -