diff --git a/examples/ts/BIP322_CLAIMS_README.md b/examples/ts/BIP322_CLAIMS_README.md new file mode 100644 index 0000000000..390e38b0b4 --- /dev/null +++ b/examples/ts/BIP322_CLAIMS_README.md @@ -0,0 +1,132 @@ +# BIP322 Broadcastable Message Processor + +This TypeScript script processes JSON files containing claims with BIP322 broadcastable messages. It demonstrates how to: + +1. Parse JSON structure containing claims data +2. Extract `broadcastableMessage` fields from claims +3. Use `deserializeBIP322BroadcastableMessage()` to deserialize each message +4. Use `generateBIP322MessageListAndVerifyFromMessageBroadcastable()` to verify and process messages + +## Usage + +```bash +npx tsx process-bip322-claims.ts +``` + +### Arguments + +- `json-file`: Path to JSON file containing claims data +- `coin-name`: Coin name (supported: "btc", "tbtc4") + +### Example + +```bash +npx tsx process-bip322-claims.ts sample-claims.json btc +``` + +## Input JSON Format + +The script expects JSON files with the following structure: + +```json +{ + "status": "success", + "claims": [ + { + "id": "claim-001", + "broadcastableMessage": "7b227478486578223a22303130323033222c226d657373616765496e666f223a5b7b2261646472657373223a22736f6d6541646472657373222c226d657373616765223a22736f6d654d657373616765222c227075626b657973223a5b227075626b657931222c227075626b657932225d2c2273637269707454797065223a2270327368227d5d7d", + ... + } + ], + "count": 1, + "pagination": { + "limit": 100, + "hasNext": false + } +} +``` + +### Required Fields + +- `claims`: Array of claim objects +- `claims[].id`: Unique identifier for the claim +- `claims[].broadcastableMessage`: Hex-encoded BIP322 broadcastable message (optional) + +## Sample Data + +The repository includes `sample-claims.json` with test data that demonstrates the script functionality. Note that the test data contains mock transaction hex values that will fail verification, but this is expected and demonstrates how the script handles both success and failure cases. + +## Functions Used + +### `deserializeBIP322BroadcastableMessage(hex: string)` + +- **Purpose**: Deserializes a hex-encoded BIP322 broadcastable message +- **Input**: Hex string containing serialized BIP322 message +- **Output**: `BIP322MessageBroadcastable` object containing transaction hex and message info + +### `generateBIP322MessageListAndVerifyFromMessageBroadcastable(messages: BIP322MessageBroadcastable[], coinName: string)` + +- **Purpose**: Verifies BIP322 messages and extracts address/message pairs +- **Input**: Array of deserialized BIP322 messages and coin name +- **Output**: Array of `{address: string, message: string}` objects +- **Supported Coins**: "btc", "tbtc4" + +## Output + +The script provides detailed output showing: + +1. JSON file parsing results +2. Claims processing summary +3. Message extraction details +4. Deserialization results for each message +5. Verification results or detailed error information +6. Final summary with counts and extracted message information + +## Error Handling + +The script handles various error conditions: + +- **File not found**: Clear error message with file path +- **Invalid JSON**: Parse error indication +- **Deserialization failures**: Per-message error reporting +- **Verification failures**: Detailed error messages with fallback to show extracted data +- **Unsupported coin names**: Clear error about supported values + +## Development Notes + +This script is designed as a usage example for BitGo's BIP322 utilities. In production environments: + +1. Use actual BIP322 transaction data with valid Bitcoin transaction hex +2. Ensure broadcastable messages are properly formatted +3. Handle network-specific addresses and script types appropriately +4. Implement proper error recovery and logging + +## Example Output + +``` +Processing BIP322 claims from: sample-claims.json +Coin: btc + +Status: success +Total claims: 3 + +Extracting broadcastable messages... + Claim 1 (ID: claim-001): Found broadcastable message + Claim 2 (ID: claim-002): Found broadcastable message + Claim 3 (ID: claim-003): No broadcastable message found + +Found 2 broadcastable message(s) + +Deserializing BIP322 broadcastable messages... + Deserializing message 1... + ✓ Successfully deserialized message 1 + Transaction hex length: 6 + Message info count: 1 + Message 1: Address: someAddress, Script type: p2sh + +=== SUMMARY === +Total claims processed: 3 +Broadcastable messages found: 2 +Successfully deserialized: 2 +Message info extracted: 2 +``` \ No newline at end of file diff --git a/examples/ts/process-bip322-claims.ts b/examples/ts/process-bip322-claims.ts new file mode 100644 index 0000000000..fc010c1c82 --- /dev/null +++ b/examples/ts/process-bip322-claims.ts @@ -0,0 +1,238 @@ +/** + * Process BIP322 broadcastable messages from JSON claims data + * + * This script reads a JSON file containing an array of claims, each with a + * broadcastableMessage string. It extracts and deserializes the messages, + * then verifies them using BitGo's BIP322 utilities. + * + * Usage: + * npx tsx process-bip322-claims.ts [path-to-json-file] [coin-name] + * + * Example: + * npx tsx process-bip322-claims.ts sample-claims.json btc + * + * Copyright 2025, BitGo, Inc. All Rights Reserved. + */ + +import * as fs from 'fs'; +import * as path from 'path'; +import { + BIP322MessageBroadcastable, + deserializeBIP322BroadcastableMessage, + generateBIP322MessageListAndVerifyFromMessageBroadcastable +} from "@bitgo/abstract-utxo/dist/src/transaction/bip322"; + +interface ClaimData { + id: string; + broadcastableMessage: string; + [key: string]: any; +} + +interface ClaimsResponse { + status: string; + claims: ClaimData[]; + count: number; + pagination?: { + limit: number; + hasNext: boolean; + }; +} + +/** + * Process BIP322 broadcastable messages from a JSON file + * @param filePath - Path to the JSON file containing claims data + * @param coinName - The coin name (e.g., 'btc', 'tbtc4') + */ +async function processBIP322Claims(filePath: string, coinName: string): Promise { + try { + console.log(`Processing BIP322 claims from: ${filePath}`); + console.log(`Coin: ${coinName}`); + console.log(''); + + // Read and parse the JSON file + const jsonData = fs.readFileSync(filePath, 'utf8'); + const claimsData: ClaimsResponse = JSON.parse(jsonData); + + console.log(`Status: ${claimsData.status}`); + console.log(`Total claims: ${claimsData.count}`); + console.log(''); + + if (!claimsData.claims || claimsData.claims.length === 0) { + console.log('No claims found in the data.'); + return; + } + + // Extract broadcastable messages from claims + const broadcastableMessages: string[] = []; + + console.log('Extracting broadcastable messages...'); + claimsData.claims.forEach((claim, index) => { + if (claim.broadcastableMessage) { + broadcastableMessages.push(claim.broadcastableMessage); + console.log(` Claim ${index + 1} (ID: ${claim.id}): Found broadcastable message`); + } else { + console.log(` Claim ${index + 1} (ID: ${claim.id}): No broadcastable message found`); + } + }); + + if (broadcastableMessages.length === 0) { + console.log('No broadcastable messages found in any claims.'); + return; + } + + console.log(`\nFound ${broadcastableMessages.length} broadcastable message(s)`); + console.log(''); + + // Deserialize each broadcastable message + console.log('Deserializing BIP322 broadcastable messages...'); + const deserializedMessages: BIP322MessageBroadcastable[] = []; + + for (let i = 0; i < broadcastableMessages.length; i++) { + try { + const message = broadcastableMessages[i]; + console.log(` Deserializing message ${i + 1}...`); + + const deserializedMessage = deserializeBIP322BroadcastableMessage(message); + deserializedMessages.push(deserializedMessage); + + console.log(` ✓ Successfully deserialized message ${i + 1}`); + console.log(` Transaction hex length: ${deserializedMessage.txHex.length}`); + console.log(` Message info count: ${deserializedMessage.messageInfo.length}`); + + // Log details of each message info + deserializedMessage.messageInfo.forEach((info, infoIndex) => { + console.log(` Message ${infoIndex + 1}: Address: ${info.address}, Script type: ${info.scriptType}`); + }); + } catch (error) { + console.error(` ✗ Failed to deserialize message ${i + 1}:`, error.message); + } + } + + if (deserializedMessages.length === 0) { + console.log('No messages were successfully deserialized.'); + return; + } + + console.log(`\nSuccessfully deserialized ${deserializedMessages.length} message(s)`); + console.log(''); + + // Process deserialized messages with BIP322 verification + console.log('Verifying and generating message list...'); + console.log('Note: Verification may fail with test data if transaction hex is not valid Bitcoin data'); + console.log(''); + + try { + const verifiedResults = generateBIP322MessageListAndVerifyFromMessageBroadcastable( + deserializedMessages, + coinName + ); + + console.log(`✓ Successfully verified and processed all messages`); + console.log(`\nResults (${verifiedResults.length} verified message(s)):`); + console.log(''); + + verifiedResults.forEach((result, index) => { + console.log(`${index + 1}. Address: ${result.address}`); + console.log(` Message: ${result.message}`); + console.log(''); + }); + + // Summary + console.log('=== SUMMARY ==='); + console.log(`Total claims processed: ${claimsData.claims.length}`); + console.log(`Broadcastable messages found: ${broadcastableMessages.length}`); + console.log(`Successfully deserialized: ${deserializedMessages.length}`); + console.log(`Successfully verified: ${verifiedResults.length}`); + } catch (error) { + console.error('✗ Failed to verify messages:', error.message); + console.log(''); + console.log('This is expected when using test data with invalid transaction hex.'); + console.log('In production, you would use actual BIP322 transaction data.'); + console.log(''); + + // Show what would have been extracted from the messages + console.log('However, we can still show the extracted message information:'); + console.log(''); + + interface ExtractedInfo { + address: string; + message: string; + scriptType: string; + pubkeys: string[]; + source: string; + } + + const extractedInfo: ExtractedInfo[] = []; + deserializedMessages.forEach((message, msgIndex) => { + message.messageInfo.forEach((info, infoIndex) => { + extractedInfo.push({ + address: info.address, + message: info.message, + scriptType: info.scriptType, + pubkeys: info.pubkeys, + source: `Message ${msgIndex + 1}, Info ${infoIndex + 1}`, + }); + }); + }); + + extractedInfo.forEach((info, index) => { + console.log(`${index + 1}. Address: ${info.address}`); + console.log(` Message: ${info.message}`); + console.log(` Script Type: ${info.scriptType}`); + console.log(` Public Keys: ${info.pubkeys.join(', ')}`); + console.log(` Source: ${info.source}`); + console.log(''); + }); + + // Summary + console.log('=== SUMMARY ==='); + console.log(`Total claims processed: ${claimsData.claims.length}`); + console.log(`Broadcastable messages found: ${broadcastableMessages.length}`); + console.log(`Successfully deserialized: ${deserializedMessages.length}`); + console.log(`Verification failed (expected with test data): ${deserializedMessages.length}`); + console.log(`Message info extracted: ${extractedInfo.length}`); + } + } catch (error) { + console.error('Error processing BIP322 claims:', error.message); + + if (error.code === 'ENOENT') { + console.error(`File not found: ${filePath}`); + } else if (error instanceof SyntaxError) { + console.error('Invalid JSON format in file'); + } + + process.exit(1); + } +} + +/** + * Main function to handle command line arguments and run the processor + */ +async function main(): Promise { + const args = process.argv.slice(2); + + if (args.length !== 2) { + console.log('Usage: npx tsx process-bip322-claims.ts '); + console.log(''); + console.log('Arguments:'); + console.log(' json-file Path to JSON file containing claims data'); + console.log(' coin-name Coin name (e.g., "btc", "tbtc4")'); + console.log(''); + console.log('Example:'); + console.log(' npx tsx process-bip322-claims.ts sample-claims.json btc'); + process.exit(1); + } + + const [filePath, coinName] = args; + + // Resolve file path relative to current working directory + const resolvedPath = path.resolve(filePath); + + await processBIP322Claims(resolvedPath, coinName); +} + +// Run the main function +main().catch((error) => { + console.error('Unexpected error:', error); + process.exit(1); +}); diff --git a/examples/ts/sample-claims.json b/examples/ts/sample-claims.json new file mode 100644 index 0000000000..b70ddb0b2f --- /dev/null +++ b/examples/ts/sample-claims.json @@ -0,0 +1,52 @@ +{ + "status": "success", + "claims": [ + { + "id": "68ba922674c244802fe1dfa4", + "originWalletId": "68ba8ac42d5fb2e70bf8838b5c2160ba", + "enterpriseId": "671b54a59d6b9fca9873ad1f8f62f932", + "coin": "tbtc4", + "originAddress": "bip322-transaction-68ba9225f047bf778e5493ff", + "allocationAmount": "0", + "broadcastableMessage": "7b227478486578223a223030303030303030303030313033633762333166656638663038326135383239633162666365616136626363633239363732623837616534336431376531326135646163353636376438613366333030303030303030303030303030303030303666303730333766323363373164373933346266613539386139306633633539323638336536396330613538663762303762623162316531626539316639303030303030303030303030303030303030303031303664636538633537613633366565653664353134393763636635383434636164663764626463616333626363333662396131336636346632313231353734303030303030303030303030303030303030303130303030303030303030303030303030303136613034303034383330343530323231303062356262366131363066353938396535633365353133343363313135666530323239376364653935643463343965393862373364313336363139396332393338303232303532303561633865653061333637313466393139386634636161393234623738343663363464346362313161323933396232346530366632363539633132616530313438333034353032323130306366356136363464316562623335616361383838396665396637646461393064633534386632656338666239613137333962333964666565646164333034646430323230363233643665613234663939633161636539343661303730633165613634393836353035353463326363323465636361333036353934303230313938306237633031363935323231303332393234343639383636633833656433653338666337616165336338633539623737323432663234613230363463323436646637383264336465303062373964323130336432303937356465303365303837306432633139633736313831393864636439346633616165353861333235626664393037633636666162663461616461653432313033623162353861346130616338313639303966613465626364353635363536383138373831336264353664643864343266323938343236313631386461333134623533616530343030343733303434303232303632343666373137336564656238636361643362363465646636336163646637633865613031616139643237393863333664626336393864343338623035643430323230303563656639643462633732376231376435393739663437663563303830626165353838623531333932303438326137643230383836646636306439376464333031343833303435303232313030626630313735323439643439303238323630666333383231313062626635633261316338363165333833666663336638363865346436613664666364323139393032323030623233343635656165666139313564356263366533623438353534326431663337366535343630623665383865653137346438373861303062633133646662303136393532323130323161333933363165306336346263626362636562333531663034383962633136363565613231353465363430313334323965323361363737383861333739343632313033373138656431366538353631653061623663613433353063323366353662356138383235376365333531393363653533633237386561366565343935316466613231303338656365323038303433616464643432653636623033333832633032346132386239643465623834306565636430626431623734326639333963633331383332353361653034303034373330343430323230316133383333343438653863663939663333346537323236303961313865653734326337663330633037336264316665343164663737383438373131653538303032323031353561313661306632303430313637383864656536663239313735326233393033366666336231373763376135363635373732373935386639653338396565303134373330343430323230366566303563376636373036633539316666333232306661616163366134643064376361326536303139663535613734373537656665636438663838343961363032323031306238653330333166393332383665663864346133323037303166636435333565633464633764343265616261353835356561376163626135303737323063303136393532323130333434323330653731303637636136306334373037383566653561663164353632326262643738363539313265343036383165306164383566623662356437333932313032386434316639306635396561356661306638386466656432613134623830353536336435643465383262626566633333393936646532306163323834343230383231303235343433366532373935663438393166343338356630626436623866396335666163666232383837393434643233313539626132323862373930643235313833353361653030303030303030222c226d657373616765496e666f223a5b7b2261646472657373223a227462317170367437373561326a647a3733376c376e6d763834306871717935323776753071346633643965646e3264336d787470797a337337766867666c222c226d657373616765223a2253544152203132333435363720746f20616464725f746573743171726e6d666c6b767476647a3670326e76666b61757064703632737672613836633263767836367178716c33343538386b6e6c76636b633639357a3478636e646d637a36723534716338363034733473636434357176706c727467717a6a767879742033316136626162353061383462383433396164636662373836626232303230663638303765366538666461363239623432343131306663376262316336623862222c227075626b657973223a5b22303332393234343639383636633833656433653338666337616165336338633539623737323432663234613230363463323436646637383264336465303062373964222c22303364323039373564653033653038373064326331396337363138313938646364393466336161653538613332356266643930376336366661626634616164616534222c22303362316235386134613061633831363930396661346562636435363536353638313837383133626435366464386434326632393834323631363138646133313462225d2c2273637269707454797065223a227032777368227d2c7b2261646472657373223a227462317166756e7072337978737779683834376c753276707771753832666d717076376430686d3475646d74786771736678776b677463737a797333736a222c226d657373616765223a2253544152203132333435363020746f20616464725f746573743171726e6d666c6b767476647a3670326e76666b61757064703632737672613836633263767836367178716c33343538386b6e6c76636b633639357a3478636e646d637a36723534716338363034733473636434357176706c727467717a6a767879742033316136626162353061383462383433396164636662373836626232303230663638303765366538666461363239623432343131306663376262316336623862222c227075626b657973223a5b22303231613339333631653063363462636263626365623335316630343839626331363635656132313534653634303133343239653233613637373838613337393436222c22303337313865643136653835363165306162366361343335306332336635366235613838323537636533353139336365353363323738656136656534393531646661222c22303338656365323038303433616464643432653636623033333832633032346132386239643465623834306565636430626431623734326639333963633331383332225d2c2273637269707454797065223a227032777368227d2c7b2261646472657373223a22746231713571717a6c686637676a7067633835306d366466306e727576336b6761326c736c397878336d716d647a73676d61757634796173397378783336222c226d657373616765223a22535441522031323334353620746f20616464725f746573743171726e6d666c6b767476647a3670326e76666b61757064703632737672613836633263767836367178716c33343538386b6e6c76636b633639357a3478636e646d637a36723534716338363034733473636434357176706c727467717a6a767879742033316136626162353061383462383433396164636662373836626232303230663638303765366538666461363239623432343131306663376262316336623862222c227075626b657973223a5b22303334343233306537313036376361363063343730373835666535616631643536323262626437383635393132653430363831653061643835666236623564373339222c22303238643431663930663539656135666130663838646665643261313462383035353633643564346538326262656663333339393664653230616332383434323038222c22303235343433366532373935663438393166343338356630626436623866396335666163666232383837393434643233313539626132323862373930643235313833225d2c2273637269707454797065223a227032777368227d5d7d", + "txRequestId": "68ba9225f047bf778e5493ff", + "status": "SIGNED", + "createdAt": "2025-09-05T07:32:54.679Z", + "updatedAt": "2025-09-05T07:32:54.680Z", + "tag": "transaction" + }, + { + "id": "68ba922374c244802fe1df98", + "originWalletId": "68ba8ac42d5fb2e70bf8838b5c2160ba", + "enterpriseId": "671b54a59d6b9fca9873ad1f8f62f932", + "coin": "tbtc4", + "originAddress": "bip322-transaction-68ba9221d8ed08c79c7036ea", + "allocationAmount": "0", + "broadcastableMessage": "7b227478486578223a223030303030303030303030313034666331333263386332333661356133356131316266396466666261633561363066366134313734633365646265663434333732613264353638373136393664393030303030303030303030303030303030303965343935656466656362636630363263313631383764623238326332613539663165656263393736336635656232373933343936316239326630323131653230303030303030303030303030303030303031353437303665643065613130663665313837663565643037643336656634366566356237303165653931316635653530616234353861353735653632306435303030303030303030303030303030303030613064333034313936363066646530356264313234323936656436303665393066393937663465303637623533623162613462316665666363356636346339303030303030303030303030303030303030303031303030303030303030303030303030303031366130343030343733303434303232303333656233393539663634623039643766626133613062623961663033653430366539306565643731386235326630633630613137383633353232306136303830323230366564376134633064616464616132356536303431343837383835633563323665626538366662353139303163386232306563626635323063306536626338343031343733303434303232303633393065363433386533636639356463633838663638663533333937373230666138636261633638663531386161363263373638393737663264633366353630323230363538363430306330613431636464323334376566666632353733396463343034613230306131656364316334663037313864613161353263323733316532653031363935323231303230356262653764356533623735633738383630396264623135383163323766626464373863383637323765656564313535626530326165316236396332306239323130326262656434656566656433656539343731383261333931643363643732323661393733643466656366376534656433643535663662633163633435326631626232313032303134356436616565303132363364376562366463666465616334336231623962353466353430346334386236303765613937336431636233333561356666393533616530343030343733303434303232303763303539323630326430393237383839663732616339303239653664636335663234306237316261373533313032306565623563663563333933623465306630323230363739393363383863326366653038613538363733633366653639653464633733653839376261386233353434376637346365336130366362353339643338383031343733303434303232303562626166306430343938633835303537653632646439663133303938313039313830313334633138333939323130666530643462376436313933663537626630323230363831616435623463636466653864373737623530636337366133343164643162663530666333666632376637353764613037386164363961333239346336303031363935323231303364316535343534633739383866626166356366343262613430666438636437663462306261363439386664626163363532343431316237336638303237616633323130336566366362306338643636356563643633336162393230633164666232376563636336326565363832333034373339656230343066646666346239306239366532313032626265353961383061396163386139666662363438313664643666633833393730626231653036393632346639393237663763376631353031643331626538303533616530343030343733303434303232303330353333653531323234663635306434313430613233383135613136303039353061383863313666336235333434376434616466343861356163323634396230323230366638333135656432656261646535363962343733383766396533633534656561613931633362353433356439663366653932303833353765643532643861383031343833303435303232313030663962616564366130303961653835633730383634613230353230356637346532353135363338656135356334623339636536313030346262353031366436623032323032613262613764633765393434633463363235363163313863393035326536643463393431326532303765633035636366663563356536666665313030633631303136393532323130333235356633383230343930306237343865653265396365353664396639303534383161313961323238643132366362623337646636343835363230313262653532313033643164616632366432353238386362333263343762386664643563393963626361663335333862613463323932663862333537643134363262646463623234303231303266326332623238623835626135616433643033376136653465646261303838643332333066333764626561373131636365353430343534666336653737393638353361653034303034373330343430323230316665633963643735633566363330316362306235376663303363613838646535366564363737393765393331336433343930616264636663333665343734343032323030336664343135373461653533316135393362623065643032656532343763663235303936316433383734356535363636663331636339323263336666633163303134373330343430323230303664326236663266333561313430316564616666346662383664643664656230663638643963646563383335353135303232646164666636333766646232383032323036393931626131643739613037623130643932616238633864333364623933336633643962396364366232313634323163396136323630303465383063333831303136393532323130333533376566643230393363613337323564393739623666363663363264393233623665636338383637666137633533653962356564666634396264386333346432313033326231316437303966323365353230653231326438386163613832366336626366636163366339666331373430386232623165626630626336333662656631663231303334666231393564663430613639386336363331393335383733346664643037613862313264613033653363663134303636313739626239303733373962386166353361653030303030303030222c226d657373616765496e666f223a5b7b2261646472657373223a227462317135616c716d67713464356766717036706e66777174336a6b7337653336716c7a7834793634396e6b7a307768327a7233737064736a6b736a3374222c226d657373616765223a22535441522031323334353637383920746f20616464725f746573743171726e6d666c6b767476647a3670326e76666b61757064703632737672613836633263767836367178716c33343538386b6e6c76636b633639357a3478636e646d637a36723534716338363034733473636434357176706c727467717a6a767879742033316136626162353061383462383433396164636662373836626232303230663638303765366538666461363239623432343131306663376262316336623862222c227075626b657973223a5b22303230356262653764356533623735633738383630396264623135383163323766626464373863383637323765656564313535626530326165316236396332306239222c22303262626564346565666564336565393437313832613339316433636437323236613937336434666563663765346564336435356636626331636334353266316262222c22303230313435643661656530313236336437656236646366646561633433623162396235346635343034633438623630376561393733643163623333356135666639225d2c2273637269707454797065223a227032777368227d2c7b2261646472657373223a2274623171336e786665647436777a6c32717136656e75397936756d706770776a61733571636339773675737871726e7a78733365766c617174663874796c222c226d657373616765223a22535441522031323334353630313220746f20616464725f746573743171726e6d666c6b767476647a3670326e76666b61757064703632737672613836633263767836367178716c33343538386b6e6c76636b633639357a3478636e646d637a36723534716338363034733473636434357176706c727467717a6a767879742033316136626162353061383462383433396164636662373836626232303230663638303765366538666461363239623432343131306663376262316336623862222c227075626b657973223a5b22303364316535343534633739383866626166356366343262613430666438636437663462306261363439386664626163363532343431316237336638303237616633222c22303365663663623063386436363565636436333361623932306331646662323765636363363265653638323330343733396562303430666466663462393062393665222c22303262626535396138306139616338613966666236343831366464366663383339373062623165303639363234663939323766376337663135303164333162653830225d2c2273637269707454797065223a227032777368227d2c7b2261646472657373223a2274623171796b6161786c3464376a7233643671736e796b64387478743834326d6465786472666736376b783334786d7865356c6333646471356b68783978222c226d657373616765223a225354415220313233343536373820746f20616464725f746573743171726e6d666c6b767476647a3670326e76666b61757064703632737672613836633263767836367178716c33343538386b6e6c76636b633639357a3478636e646d637a36723534716338363034733473636434357176706c727467717a6a767879742033316136626162353061383462383433396164636662373836626232303230663638303765366538666461363239623432343131306663376262316336623862222c227075626b657973223a5b22303332353566333832303439303062373438656532653963653536643966393035343831613139613232386431323663626233376466363438353632303132626535222c22303364316461663236643235323838636233326334376238666464356339396362636166333533386261346332393266386233353764313436326264646362323430222c22303266326332623238623835626135616433643033376136653465646261303838643332333066333764626561373131636365353430343534666336653737393638225d2c2273637269707454797065223a227032777368227d2c7b2261646472657373223a22746231716d30646a38783565346e7661373672717567323766326437747a6b6477356a38307a79707164766575347679767a72776e706771376737326e34222c226d657373616765223a225354415220313233343536303120746f20616464725f746573743171726e6d666c6b767476647a3670326e76666b61757064703632737672613836633263767836367178716c33343538386b6e6c76636b633639357a3478636e646d637a36723534716338363034733473636434357176706c727467717a6a767879742033316136626162353061383462383433396164636662373836626232303230663638303765366538666461363239623432343131306663376262316336623862222c227075626b657973223a5b22303335333765666432303933636133373235643937396236663636633632643932336236656363383836376661376335336539623565646666343962643863333464222c22303332623131643730396632336535323065323132643838616361383236633662636663616336633966633137343038623262316562663062633633366265663166222c22303334666231393564663430613639386336363331393335383733346664643037613862313264613033653363663134303636313739626239303733373962386166225d2c2273637269707454797065223a227032777368227d5d7d", + "txRequestId": "68ba9221d8ed08c79c7036ea", + "status": "SIGNED", + "createdAt": "2025-09-05T07:32:51.191Z", + "updatedAt": "2025-09-05T07:32:51.191Z", + "tag": "transaction" + }, + { + "id": "68ba921e74c244802fe1df8a", + "originWalletId": "68ba8ac42d5fb2e70bf8838b5c2160ba", + "enterpriseId": "671b54a59d6b9fca9873ad1f8f62f932", + "coin": "tbtc4", + "originAddress": "bip322-transaction-68ba921d3de97fb983359d1c", + "allocationAmount": "0", + "broadcastableMessage": "7b227478486578223a2230303030303030303030303130346566353131306336643038376166363638323334356231383237306463303362353936396437636536626234623538313839306437363334623434663830643730303030303030303030303030303030303039373530336566333935393464613665313837353236333862343433633936633531633863306533663738376534616365333830386430303639306433666361303030303030303030303030303030303030653636323334653537376432633036316432613235663563326131636136363530643235656636656533623834353332306361636332656663336638633737343030303030303030303030303030303030303364343262663531383139343361393133623035623061663166636562353761623862656133633739666165353830623534376464313033666634633734356230303030303030303030303030303030303030313030303030303030303030303030303030313661303430303438333034353032323130306262393135643163633833383835313135363362336531346636386139633037373065326366346534373334373964626364333363363635313162383233633030323230333035333834386433613433353765393438366437313862316364356237633964393365623263643534663038323163623433623132333539656238353537323031343733303434303232303732643233623463323231306138363565313062636663396131653566613138316532323066336661313065643338663334633632373566613131643436663330323230373634333030303561323036373934373738336436383038656537373962633366663732303833666131653634313866326231646633396338343930316636373031363935323231303262666664613362633464336432316465376562306664343762366463306436306164633430656433343432353431656533623334663435633237306237643632323130333764393237643139666130656133366633653538336535326131666133333266373231343436346634333631663665323761633639383138373032396237346232313033343231313334373732333030656662306237393030376636323838326435356134376230636232626334353731323538316337656262616161336439633763393533616530343030343833303435303232313030386565326236326462306139323461323337653037653861383337643034363136663066383432316164393535633763613436323561656163616630346232363032323033646165663231326239396331346464396633656130336532333739346666323366333564306339303035623466383639343436326538356139316463306364303134383330343530323231303038356438653364353836636634666563306339653033613866613461626138363266333130343639646630366233363866656164396230353238323231346235303232303532323866363162366535363839643539656262643131333333633139666439343266313764656334366161656637633261303634306365646332663538616630313639353232313032663235656138333761323039306238643564336133366634386164623064613164643666666336656366333064646462343566306461633532393831643939393231303337373635666633656536386431376265313238616566643333613063663436633062623837356539323932623239633431636430316334396466373737656262323130333862386132613532333161653834636161376561613935626534633330373737333530653265356532373366623064653633396162356666613236646235643735336165303430303437333034343032323035666562663037383238643364366666313037316135336566643465373731353634306635373539376132313439366537313835393036326231316138626166303232303665346163646263316637373465346639343836313937663163313462363462666365643165636236613566613863643230656339613236356364323163396230313438333034353032323130306431386366626466636534646461613764313663613864363330653339373165623263613835393664306139366564623765613931623635376434383263326430323230306666633462373863353165313861616237623536343337366535633333363139613235333265363337393234313365616666623239633433656436356163663031363935323231303266613263626636656134636432636363613538663362653238386632393038633932623166306334333334646362383065623234663566616263343236653761323130333562313532356139336234336131656532656136653234336134653638393461326632333532333466643931663636626565656330663262323831383639656132313033636663383262346266656564333735643135346165613463383561313965643530363764383037313036386565393932393937343231333938663938303235663533616530343030343833303435303232313030666436653864366535313131326434656664613631336639363064653962333962666265356264323135633563613732613831396634386534323536396532383032323033353534646637333236323139613130383339666362346434613738613437373965313238653063373762616364623535393466376232353430393331373861303134373330343430323230336364313665346361356563626334336134336334363766626564316339326333323766633737613939316261623861636434613037383562306332336566323032323033323437313333663563313031663434653735376331366465623837396365306164356634613737396330333431313235316334336231633836656234626633303136393532323130333233343433326563353238353138353732613736373661393633663332663065333730323731376562316430343432613864376532316234366630396432636332313032383164346561663564393365333335333663383633323130366532383331313661633635646432663564366535616532653730303063663665356336633537613231303366666165656135643566303263323662653832363561636536333239353830623030366231333065613961376362393339303534313761633538373439326230353361653030303030303030222c226d657373616765496e666f223a5b7b2261646472657373223a2274623171727174347035383237786868706b6466723436676e38746767706361636b6b6d64667365326670637a75666767786b34743235717268336c6a76222c226d657373616765223a22535441522031323334353630313233343520746f20616464725f746573743171726e6d666c6b767476647a3670326e76666b61757064703632737672613836633263767836367178716c33343538386b6e6c76636b633639357a3478636e646d637a36723534716338363034733473636434357176706c727467717a6a767879742033316136626162353061383462383433396164636662373836626232303230663638303765366538666461363239623432343131306663376262316336623862222c227075626b657973223a5b22303262666664613362633464336432316465376562306664343762366463306436306164633430656433343432353431656533623334663435633237306237643632222c22303337643932376431396661306561333666336535383365353261316661333332663732313434363466343336316636653237616336393831383730323962373462222c22303334323131333437373233303065666230623739303037663632383832643535613437623063623262633435373132353831633765626261616133643963376339225d2c2273637269707454797065223a227032777368227d2c7b2261646472657373223a2274623171616a617678787973356e666470763071326e327966327a7964707476683574736a63363467777a6870683939616e6e67337a6373363335637464222c226d657373616765223a22535441522031323334353630313233343520746f20616464725f746573743171726e6d666c6b767476647a3670326e76666b61757064703632737672613836633263767836367178716c33343538386b6e6c76636b633639357a3478636e646d637a36723534716338363034733473636434357176706c727467717a6a767879742033316136626162353061383462383433396164636662373836626232303230663638303765366538666461363239623432343131306663376262316336623862222c227075626b657973223a5b22303266323565613833376132303930623864356433613336663438616462306461316464366666633665636633306464646234356630646163353239383164393939222c22303337373635666633656536386431376265313238616566643333613063663436633062623837356539323932623239633431636430316334396466373737656262222c22303338623861326135323331616538346361613765616139356265346333303737373335306532653565323733666230646536333961623566666132366462356437225d2c2273637269707454797065223a227032777368227d2c7b2261646472657373223a227462317170673272346366793063336c323476636a7374377a30717a3679636432686370386e66347579747672356d6e6e6c33366e6c337172666777656a222c226d657373616765223a225354415220313233343536303132333420746f20616464725f746573743171726e6d666c6b767476647a3670326e76666b61757064703632737672613836633263767836367178716c33343538386b6e6c76636b633639357a3478636e646d637a36723534716338363034733473636434357176706c727467717a6a767879742033316136626162353061383462383433396164636662373836626232303230663638303765366538666461363239623432343131306663376262316336623862222c227075626b657973223a5b22303266613263626636656134636432636363613538663362653238386632393038633932623166306334333334646362383065623234663566616263343236653761222c22303335623135323561393362343361316565326561366532343361346536383934613266323335323334666439316636366265656563306632623238313836396561222c22303363666338326234626665656433373564313534616561346338356131396564353036376438303731303638656539393239393734323133393866393830323566225d2c2273637269707454797065223a227032777368227d2c7b2261646472657373223a22746231716c7a6a756661793977346e796875397a303366723933746a77307075736c7139337a633933743432353375756e39383936653571733938703335222c226d657373616765223a2253544152203132333435363031323320746f20616464725f746573743171726e6d666c6b767476647a3670326e76666b61757064703632737672613836633263767836367178716c33343538386b6e6c76636b633639357a3478636e646d637a36723534716338363034733473636434357176706c727467717a6a767879742033316136626162353061383462383433396164636662373836626232303230663638303765366538666461363239623432343131306663376262316336623862222c227075626b657973223a5b22303332333434333265633532383531383537326137363736613936336633326630653337303237313765623164303434326138643765323162343666303964326363222c22303238316434656166356439336533333533366338363332313036653238333131366163363564643266356436653561653265373030306366366535633663353761222c22303366666165656135643566303263323662653832363561636536333239353830623030366231333065613961376362393339303534313761633538373439326230225d2c2273637269707454797065223a227032777368227d5d7d", + "txRequestId": "68ba921d3de97fb983359d1c", + "status": "SIGNED", + "createdAt": "2025-09-05T07:32:46.714Z", + "updatedAt": "2025-09-05T07:32:46.714Z", + "tag": "transaction" + } + ], + "count": 3, + "pagination": { + "limit": 100, + "hasNext": false + } +} \ No newline at end of file