- Overview
- Setup
- Tutorials
- How Tos
- Reference
- DAR Versions
- API Reference
- Commercials API
- Credential API
- Registry API
- Utility.Registry
- Utility.Registry.V0.Configuration.AppReward
- Utility.Registry.V0.Configuration.Instrument
- Utility.Registry.V0.Holding.Allocation
- Utility.Registry.V0.Holding.Burn
- Utility.Registry.V0.Holding.Lock
- Utility.Registry.V0.Holding.Mint
- Utility.Registry.V0.Holding.Transfer
- Utility.Registry.V0.Holding.Unlock
- Utility.Registry.V0.Rule.Transfer
- Utility.Registry.V0.Types
- Utility.Registry.V0.Util
- Utility.Registry.App
- Utility.Registry.App.V0.Configuration.Operator
- Utility.Registry.App.V0.Configuration.Provider
- Utility.Registry.App.V0.Model.Burn
- Utility.Registry.App.V0.Model.Mint
- Utility.Registry.App.V0.Model.Transfer
- Utility.Registry.App.V0.Service.AllocationFactory
- Utility.Registry.App.V0.Service.Holder
- Utility.Registry.App.V0.Service.Provider
- Utility.Registry.App.V0.Service.Registrar
- Utility.Holding
- Utility.Registry
- Settlement Utility API
- Collateral Utility API
- Operator Backend API
Registry Utility - Burn Request API Example¶
This example shows how to perform a burn request on CNU 0.9.x using the HTTP JSON API.
It is assumed that the burner has all the required credentials as issuer of the specific instrument.
Preparation¶
Add all the required information to the source.sh file:
1#!/usr/bin/env bash
2
3## =================================================================================================
4## Purpose: Configurations for this example, amend variables as needed.
5## Script: source.sh
6## =================================================================================================
7
8# receiver's details
9BURNER_TOKEN="eyJhbGciOiJIUzI1NiJ9.eyJzY29wZSI6ImRhbWxfbGVkZ2VyX2FwaSIsImlhdCI6MTc1OTk5MjEzMiwiYXVkIjoiaHR0cHM6Ly91dGlsaXR5LmNhbnRvbi5uZXR3b3JrIiwic3ViIjoiaXNzdWVyIn0.6wP8xNyQopoyKk_rGv9agcIK8TLyJVYLq3oRo983z8Q"
10BURNER_PARTY_ID="issuer::1220d301ababbed7bc8d6f6a80ce16f33933a7274a3013241b7fb373ca7e4f0d6567"
11BURNER_USER_ID="issuer"
12
13# admin/registrar details
14ADMIN_TOKEN="eyJhbGciOiJIUzI1NiJ9.eyJzY29wZSI6ImRhbWxfbGVkZ2VyX2FwaSIsImlhdCI6MTc1OTk5Nzk3OSwiYXVkIjoiaHR0cHM6Ly91dGlsaXR5LmNhbnRvbi5uZXR3b3JrIiwic3ViIjoicmVnaXN0cmFyIn0.zveSqMNH9LQIcGOXlyKoidGWJm0ldsj2R1gXiPzmAQk"
15ADMIN_PARTY_ID="registrar::1220d301ababbed7bc8d6f6a80ce16f33933a7274a3013241b7fb373ca7e4f0d6567"
16ADMIN_USER_ID="registrar"
17
18# unique reference for the action
19BURN_REF="burn-ref-002"
20
21# update your asset and amount to be transferred
22ASSET_ID="INST"
23ASSET_AMOUNT="3.0"
24
25# example 1
26# BACKEND_API="https://api.utilities.digitalasset-dev.com/api/token-standard"
27# HTTP_JSON_API="https://utility.demo.registry.digitalasset.com/api/json-api"
28# example 2
29BACKEND_API="http://localhost:8080/api/utilities"
30HTTP_JSON_API="http://localhost:8001/api/json-api"
31
32# token standard holding interface, may change when new versions of splice exists
33# TRANSFERFACTORY_INTERFACE="55ba4deb0ad4662c4168b39859738a0e91388d252286480c7331b3f71a517281:Splice.Api.Token.TransferInstructionV1:TransferFactory"
34HOLDING_INTERFACE="718a0f77e505a8de22f188bd4c87fe74101274e9d4cb1bfac7d09aec7158d35b:Splice.Api.Token.HoldingV1:Holding"
35TRANSFER_INSTRUCTION_INTERFACE="55ba4deb0ad4662c4168b39859738a0e91388d252286480c7331b3f71a517281:Splice.Api.Token.TransferInstructionV1:TransferInstruction"
36
37# utility templates, may change when new versions of utilities exists
38# ALLOCATIONFACTORY_TEMPLATE="170929b11d5f0ed1385f890f42887c31ff7e289c0f4bc482aff193a7173d576c:Utility.Registry.App.V0.Service.AllocationFactory:AllocationFactory"
39ALLOCATIONFACTORY_TEMPLATE="#utility-registry-app-v0:Utility.Registry.App.V0.Service.AllocationFactory:AllocationFactory"
40BURNREQUEST_TEMPLATE="#utility-registry-app-v0:Utility.Registry.App.V0.Model.Burn:BurnRequest"
The required information is:
Details of |
Description |
|---|---|
Burner |
JWT, user ID, and party ID of the sender |
Admin |
JWT, user ID, and party ID of the receiver |
Operator |
Backend API and JSON Ledger API |
Burn |
Instrument ID, amount to be burned, and reference |
If possible, open the CNU UIs for both the burner and the admin, to observe the request and change in holdings. These are the initial holdings of the burner for INST.
Step 1: Burner Requests a Burn¶
Step 1a - Obtain the Ledger End Offset¶
Run the following script to obtain the ledger end offset:
1#!/usr/bin/env bash
2
3## =================================================================================================
4## Burner requests a burn of its holdings
5## Step 1a: Retrieves the current ledger end offset from the ledger
6## Authorized by: Burner
7## Script: step-1a-burner-requests.sh
8## =================================================================================================
9
10DATAFILE="source.sh"
11source "$DATAFILE"
12
13OFFSET=$(curl -s GET \
14 --url "${HTTP_JSON_API}/v2/state/ledger-end" \
15 --header "Accept: application/json" \
16 --header "Authorization: Bearer ${BURNER_TOKEN}")
17
18echo "$OFFSET" | jq
19
20OUTPUTFILE="response-step-1a.json"
21echo "$OFFSET" > "$OUTPUTFILE"
The result is the ledger end offset at this moment, stored in response-step-1a.json. For example:
1{
2 "offset": 4136
3}
Step 1b - Retrieve Holding Cids¶
Run the following script to retrieve the Holding Cids:
1#!/usr/bin/env bash
2
3## =================================================================================================
4## Burner requests a burn of its holdings
5## Step 1b: Retrieve the burner's holdings as of the offset from step 1a to use for the burn request
6## Authorized by: Burner
7## Script: step-1b-burner-requests.sh
8## =================================================================================================
9
10DATAFILE="source.sh"
11source "$DATAFILE"
12
13# Get offset from previous step
14if [[ -f "response-step-1a.json" ]]; then
15 JSONCONTENT=$(cat "response-step-1a.json")
16 OFFSET=$(echo "$JSONCONTENT" | jq -r ".offset")
17else
18 echo "Error: response-step-1a.json not found"
19 exit 1
20fi
21
22RESULT=$(
23 curl -s \
24 --url "${HTTP_JSON_API}/v2/state/active-contracts" \
25 --header "Authorization: Bearer ${BURNER_TOKEN}" \
26 --header "Content-Type: application/json" \
27 --request POST \
28 --data @- <<EOF
29{
30 "verbose": false,
31 "activeAtOffset": "${OFFSET}",
32 "filter": {
33 "filtersByParty": {
34 "${BURNER_PARTY_ID}": {
35 "cumulative": [{
36 "identifierFilter": {
37 "InterfaceFilter": {
38 "value": {
39 "interfaceId":"$HOLDING_INTERFACE",
40 "includeInterfaceView": true,
41 "includeCreatedEventBlob": false
42 }
43 }
44 }
45 }]
46 }
47 }
48 }
49}
50EOF
51)
52
53# Filter holdings for a specific holder, instrument ID, admin and extract contractId
54HOLDINGCIDS=$(echo "$RESULT" | jq \
55 --arg BURNER_PARTY_ID "$BURNER_PARTY_ID" \
56 --arg ASSET_ID "$ASSET_ID" \
57 --arg ADMIN_PARTY_ID "$ADMIN_PARTY_ID" \
58 '[
59 .[] as $c
60 | $c.contractEntry.JsActiveContract.createdEvent.interfaceViews[]
61 | select(
62 .viewValue.owner == $BURNER_PARTY_ID and
63 .viewValue.instrumentId.id == $ASSET_ID and
64 .viewValue.instrumentId.admin == $ADMIN_PARTY_ID
65 )
66 | $c.contractEntry.JsActiveContract.createdEvent.contractId
67 ]'
68)
69
70echo "--- Holdings of burner (${BURNER_USER_ID}) as of offset ${OFFSET} ---"
71echo "$HOLDINGCIDS" | jq
72
73OUTPUTFILE="response-step-1b.json"
74echo "$HOLDINGCIDS" > "$OUTPUTFILE"
The result is the Holding Cids, stored in response-step-1b.json. For example:
1[
2 "00127ad26e78e9818046cbea7cddde3a87a26d88d0b6e5c67bc8b8a30eb09d0f57ca1112206b3b79d89f0d9671ae36c51bcfce5ab8d7396c6c4cfda20e1ab0115924d022cb"
3]
Step 1c - Access the Backend API¶
The request URL is ${BACKEND_API}/v0/registry/burn/v0/request. To hit this endpoint, run the following script:
1#!/usr/bin/env bash
2
3## =================================================================================================
4## Burner requests a burn of its holdings
5## Step 1c: Gets choice context and disclosure for the burn-request command
6## Authorized by: anyone
7## Script: step-1c-burner-requests.sh
8## =================================================================================================
9
10DATAFILE="source.sh"
11source "$DATAFILE"
12
13DATE_FORMAT='+%Y-%m-%dT%H:%M:%SZ'
14NOW_ISO_TIMESTAMP=$(date -u "$DATE_FORMAT")
15ONEHOUR_ISO_TIMESTAMP=$(date -u -d '+1 hour' "$DATE_FORMAT")
16
17HOLDINGCIDS=$(cat "response-step-1b.json")
18
19RESULT=$(
20 curl -s \
21 --url "${BACKEND_API}/v0/registry/burn/v0/request" \
22 --header "Content-Type: application/json" \
23 --request POST \
24 --data @- <<EOF
25{
26 "holder": "${BURNER_PARTY_ID}",
27 "holdingContractIds":${HOLDINGCIDS},
28 "instrumentId": {
29 "admin": "${ADMIN_PARTY_ID}",
30 "id": "${ASSET_ID}"
31 }
32}
33EOF
34)
35
36echo "--- Endpoint response ---"
37echo $RESULT | jq
38
39OUTPUTFILE="response-step-1c.json"
40echo "$RESULT" > "$OUTPUTFILE"
The result contains the required choice context for executing the command, stored in response-step-1c.json. For example:
1{
2 "factoryId": "000b99a12b36d9d3b865060c19eab4558b63b105ea8f6917442aef10394712ee7dca1112205046662015ee57e20143d8ae8f9985e069d1db31e3d8540c0543f3e4ccb8e863",
3 "choiceContext": {
4 "choiceContextData": {
5 "values": {
6 "utility.digitalasset.com/instrument-configuration": {
7 "tag": "AV_ContractId",
8 "value": "00eca75bf1e14e192de69b58054cf62f2a60a9c0aae8f4d3491a4b2fad9f9731eaca111220b5fd51ccd498385b0ceaef63243fdfef6c2e62dd8d3a2f59fdb61a9099956481"
9 },
10 "utility.digitalasset.com/issuer-credentials": {
11 "tag": "AV_List",
12 "value": [
13 {
14 "tag": "AV_ContractId",
15 "value": "0031a2300ef5833a5dd1204c603ea296ae9558645bc354721e5e01e618d00c1495ca1112206f197de929cdb48f2509cb72249c1040f67f8e64bb2d6c7ec7b17bcd761e045c"
16 }
17 ]
18 }
19 }
20 },
21 "disclosedContracts": [
22 {
23 "createdAt": "2025-10-08T20:41:44.939Z",
24 "contractId": "000b99a12b36d9d3b865060c19eab4558b63b105ea8f6917442aef10394712ee7dca1112205046662015ee57e20143d8ae8f9985e069d1db31e3d8540c0543f3e4ccb8e863",
25 "templateId": "170929b11d5f0ed1385f890f42887c31ff7e289c0f4bc482aff193a7173d576c:Utility.Registry.App.V0.Service.AllocationFactory:AllocationFactory",
26 "domainId": null,
27 "createdEventBlob": "CgMyLjESmQYKRQALmaErNtnTuGUGDBnqtFWLY7EF6o9pF0Qq7xA5RxLufcoREiBQRmYgFe5X4gFD2K6PmYXgadHbMePYVAwFQ/PkzLjoYxIXdXRpbGl0eS1yZWdpc3RyeS1hcHAtdjAajQEKQDE3MDkyOWIxMWQ1ZjBlZDEzODVmODkwZjQyODg3YzMxZmY3ZTI4OWMwZjRiYzQ4MmFmZjE5M2E3MTczZDU3NmMSB1V0aWxpdHkSCFJlZ2lzdHJ5EgNBcHASAlYwEgdTZXJ2aWNlEhFBbGxvY2F0aW9uRmFjdG9yeRoRQWxsb2NhdGlvbkZhY3RvcnkigAJq/QEKUgpQOk5wcm92aWRlcjo6MTIyMGQzMDFhYmFiYmVkN2JjOGQ2ZjZhODBjZTE2ZjMzOTMzYTcyNzRhMzAxMzI0MWI3ZmIzNzNjYTdlNGYwZDY1NjcKUwpROk9yZWdpc3RyYXI6OjEyMjBkMzAxYWJhYmJlZDdiYzhkNmY2YTgwY2UxNmYzMzkzM2E3Mjc0YTMwMTMyNDFiN2ZiMzczY2E3ZTRmMGQ2NTY3ClIKUDpOb3BlcmF0b3I6OjEyMjBiMzlkZjVlZDBlM2M1ODRjZDk3ZTg2ZTc3OWRlZjkzM2Q1NDViZjlhNGZhYjNjMGZkM2U0YWQzZjdhMzZiOGZlKk5wcm92aWRlcjo6MTIyMGQzMDFhYmFiYmVkN2JjOGQ2ZjZhODBjZTE2ZjMzOTMzYTcyNzRhMzAxMzI0MWI3ZmIzNzNjYTdlNGYwZDY1NjcqT3JlZ2lzdHJhcjo6MTIyMGQzMDFhYmFiYmVkN2JjOGQ2ZjZhODBjZTE2ZjMzOTMzYTcyNzRhMzAxMzI0MWI3ZmIzNzNjYTdlNGYwZDY1NjcyTm9wZXJhdG9yOjoxMjIwYjM5ZGY1ZWQwZTNjNTg0Y2Q5N2U4NmU3NzlkZWY5MzNkNTQ1YmY5YTRmYWIzYzBmZDNlNGFkM2Y3YTM2YjhmZTnKhnS2q0AGAEIqCiYKJAgBEiCdfF/uuVvbYVGCBftUb6P/SwJDPzwGmCDQ4jzAdtOMPBAe"
28 },
29 {
30 "createdAt": "2025-10-08T20:41:44.51Z",
31 "contractId": "00eca75bf1e14e192de69b58054cf62f2a60a9c0aae8f4d3491a4b2fad9f9731eaca111220b5fd51ccd498385b0ceaef63243fdfef6c2e62dd8d3a2f59fdb61a9099956481",
32 "templateId": "ed73d5b9ab717333f3dbd122de7be3156f8bf2614a67360c3dd61fc0135133fa:Utility.Registry.V0.Configuration.Instrument:InstrumentConfiguration",
33 "domainId": null,
34 "createdEventBlob": "CgMyLjESpgkKRQDsp1vx4U4ZLeabWAVM9i8qYKnAquj000kaSy+tn5cx6soREiC1/VHM1Jg4Wwzq72MkP9/vbC5i3Y06L1n9thqQmZVkgRITdXRpbGl0eS1yZWdpc3RyeS12MBqNAQpAZWQ3M2Q1YjlhYjcxNzMzM2YzZGJkMTIyZGU3YmUzMTU2ZjhiZjI2MTRhNjczNjBjM2RkNjFmYzAxMzUxMzNmYRIHVXRpbGl0eRIIUmVnaXN0cnkSAlYwEg1Db25maWd1cmF0aW9uEgpJbnN0cnVtZW50GhdJbnN0cnVtZW50Q29uZmlndXJhdGlvbiKRBWqOBQpSClA6Tm9wZXJhdG9yOjoxMjIwYjM5ZGY1ZWQwZTNjNTg0Y2Q5N2U4NmU3NzlkZWY5MzNkNTQ1YmY5YTRmYWIzYzBmZDNlNGFkM2Y3YTM2YjhmZQpSClA6TnByb3ZpZGVyOjoxMjIwZDMwMWFiYWJiZWQ3YmM4ZDZmNmE4MGNlMTZmMzM5MzNhNzI3NGEzMDEzMjQxYjdmYjM3M2NhN2U0ZjBkNjU2NwpTClE6T3JlZ2lzdHJhcjo6MTIyMGQzMDFhYmFiYmVkN2JjOGQ2ZjZhODBjZTE2ZjMzOTMzYTcyNzRhMzAxMzI0MWI3ZmIzNzNjYTdlNGYwZDY1NjcKgAEKfmp8ClMKUTpPcmVnaXN0cmFyOjoxMjIwZDMwMWFiYWJiZWQ3YmM4ZDZmNmE4MGNlMTZmMzM5MzNhNzI3NGEzMDEzMjQxYjdmYjM3M2NhN2U0ZjBkNjU2NwoICgZCBElOU1QKGwoZQhdSZWdpc3RyYXJJbnRlcm5hbFNjaGVtZQoECgJaAAqBAQp/Wn0Ke2p5ClMKUTpPcmVnaXN0cmFyOjoxMjIwZDMwMWFiYWJiZWQ3YmM4ZDZmNmE4MGNlMTZmMzM5MzNhNzI3NGEzMDEzMjQxYjdmYjM3M2NhN2U0ZjBkNjU2NwoiCiBaHgocahoKDgoMQgppc0lzc3Vlck9mCggKBkIESU5TVAqBAQp/Wn0Ke2p5ClMKUTpPcmVnaXN0cmFyOjoxMjIwZDMwMWFiYWJiZWQ3YmM4ZDZmNmE4MGNlMTZmMzM5MzNhNzI3NGEzMDEzMjQxYjdmYjM3M2NhN2U0ZjBkNjU2NwoiCiBaHgocahoKDgoMQgppc0hvbGRlck9mCggKBkIESU5TVCpOcHJvdmlkZXI6OjEyMjBkMzAxYWJhYmJlZDdiYzhkNmY2YTgwY2UxNmYzMzkzM2E3Mjc0YTMwMTMyNDFiN2ZiMzczY2E3ZTRmMGQ2NTY3Kk9yZWdpc3RyYXI6OjEyMjBkMzAxYWJhYmJlZDdiYzhkNmY2YTgwY2UxNmYzMzkzM2E3Mjc0YTMwMTMyNDFiN2ZiMzczY2E3ZTRmMGQ2NTY3Mk5vcGVyYXRvcjo6MTIyMGIzOWRmNWVkMGUzYzU4NGNkOTdlODZlNzc5ZGVmOTMzZDU0NWJmOWE0ZmFiM2MwZmQzZTRhZDNmN2EzNmI4ZmU5rPtttqtABgBCKgomCiQIARIgQ1DsOZLYGVRiscestTBDQ3CqU27WvKQODudfxMesKCEQHg=="
35 },
36 {
37 "createdAt": "2025-10-08T20:41:34.877Z",
38 "contractId": "0031a2300ef5833a5dd1204c603ea296ae9558645bc354721e5e01e618d00c1495ca1112206f197de929cdb48f2509cb72249c1040f67f8e64bb2d6c7ec7b17bcd761e045c",
39 "templateId": "77df4e7b980c12de438d7b052141a762215fae790d81f71179c8fb534beb68f7:Utility.Credential.V0.Credential:Credential",
40 "domainId": null,
41 "createdEventBlob": "CgMyLjESrAcKRQAxojAO9YM6XdEgTGA+opaulVhkW8NUch5eAeYY0AwUlcoREiBvGX3pKc20jyUJy3IknBBA9n+OZLstbH7HsXvNdh4EXBIVdXRpbGl0eS1jcmVkZW50aWFsLXYwGnMKQDc3ZGY0ZTdiOTgwYzEyZGU0MzhkN2IwNTIxNDFhNzYyMjE1ZmFlNzkwZDgxZjcxMTc5YzhmYjUzNGJlYjY4ZjcSB1V0aWxpdHkSCkNyZWRlbnRpYWwSAlYwEgpDcmVkZW50aWFsGgpDcmVkZW50aWFsIrIDaq8DClMKUTpPcmVnaXN0cmFyOjoxMjIwZDMwMWFiYWJiZWQ3YmM4ZDZmNmE4MGNlMTZmMzM5MzNhNzI3NGEzMDEzMjQxYjdmYjM3M2NhN2U0ZjBkNjU2NwpQCk46TGlzc3Vlcjo6MTIyMGQzMDFhYmFiYmVkN2JjOGQ2ZjZhODBjZTE2ZjMzOTMzYTcyNzRhMzAxMzI0MWI3ZmIzNzNjYTdlNGYwZDY1NjcKDwoNQgtJTlNUX0lzc3VlcgoPCg1CC0lOU1RfSXNzdWVyCgQKAlIACgQKAlIACnQKclpwCm5qbApQCk5CTGlzc3Vlcjo6MTIyMGQzMDFhYmFiYmVkN2JjOGQ2ZjZhODBjZTE2ZjMzOTMzYTcyNzRhMzAxMzI0MWI3ZmIzNzNjYTdlNGYwZDY1NjcKDgoMQgppc0lzc3Vlck9mCggKBkIESU5TVApiCmBqXgpcClpiWApWClA6Tm9wZXJhdG9yOjoxMjIwYjM5ZGY1ZWQwZTNjNTg0Y2Q5N2U4NmU3NzlkZWY5MzNkNTQ1YmY5YTRmYWIzYzBmZDNlNGFkM2Y3YTM2YjhmZRICCgAqTGlzc3Vlcjo6MTIyMGQzMDFhYmFiYmVkN2JjOGQ2ZjZhODBjZTE2ZjMzOTMzYTcyNzRhMzAxMzI0MWI3ZmIzNzNjYTdlNGYwZDY1NjcqT3JlZ2lzdHJhcjo6MTIyMGQzMDFhYmFiYmVkN2JjOGQ2ZjZhODBjZTE2ZjMzOTMzYTcyNzRhMzAxMzI0MWI3ZmIzNzNjYTdlNGYwZDY1NjcyTm9wZXJhdG9yOjoxMjIwYjM5ZGY1ZWQwZTNjNTg0Y2Q5N2U4NmU3NzlkZWY5MzNkNTQ1YmY5YTRmYWIzYzBmZDNlNGFkM2Y3YTM2YjhmZTl8/9q1q0AGAEIqCiYKJAgBEiBikJteQ0a37UH10AsBGGTcDTteF7QH0nxSmVQemm0uLRAe"
42 }
43 ]
44 }
45}
Step 1d - Request the Burn¶
Finally, run the following script to request the burn:
1#!/usr/bin/env bash
2
3## =================================================================================================
4## Burner requests a burn of its holdings
5## Step 1d: Execute the burn-request command
6## Authorized by: Burner
7## Script: step-1d-burner-requests.sh
8## =================================================================================================
9
10DATAFILE="source.sh"
11source "$DATAFILE"
12
13DATE_FORMAT='+%Y-%m-%dT%H:%M:%SZ'
14NOW_ISO_TIMESTAMP=$(date -u "$DATE_FORMAT")
15ONEHOUR_ISO_TIMESTAMP=$(date -u -d '+1 hour' "$DATE_FORMAT")
16
17HOLDINGCIDS=$(cat "response-step-1b.json")
18
19JSONCONTENT=$(cat "response-step-1c.json")
20FACTORYID=$(echo $JSONCONTENT | jq .factoryId)
21CHOICECONTEXTDATA=$(echo $JSONCONTENT | jq .choiceContext.choiceContextData)
22DISCLOSEDCONTRACTS=$(echo $JSONCONTENT | jq .choiceContext.disclosedContracts)
23DISCLOSEDCONTRACTS=$(echo $JSONCONTENT | jq '.choiceContext.disclosedContracts // [] | map(. + {"synchronizerId": ""})')
24
25RESULT=$(
26 curl -s \
27 --url "${HTTP_JSON_API}/v2/commands/submit-and-wait-for-transaction" \
28 --header "Authorization: Bearer ${BURNER_TOKEN}" \
29 --header "Content-Type: application/json" \
30 --request POST \
31 --data @- <<EOF
32{
33 "commands":{
34 "commands":[
35 {
36 "ExerciseCommand":{
37 "templateId":"${ALLOCATIONFACTORY_TEMPLATE}",
38 "contractId":${FACTORYID},
39 "choice":"AllocationFactory_RequestBurn",
40 "choiceArgument":{
41 "expectedAdmin":"${ADMIN_PARTY_ID}",
42 "burn": {
43 "instrumentId": {
44 "admin": "${ADMIN_PARTY_ID}",
45 "id": "${ASSET_ID}"
46 },
47 "amount": "${ASSET_AMOUNT}",
48 "holder": "${BURNER_PARTY_ID}",
49 "reference": "${BURN_REF}",
50 "requestedAt": "${NOW_ISO_TIMESTAMP}",
51 "executeBefore": "${ONEHOUR_ISO_TIMESTAMP}",
52 "meta": {
53 "values": {}
54 }
55 },
56 "holdingCids":${HOLDINGCIDS},
57 "extraArgs":{
58 "context":${CHOICECONTEXTDATA},
59 "meta":{
60 "values":{
61 }
62 }
63 }
64 }
65 }
66 }
67 ],
68 "workflowId":"",
69 "userId":"${BURNER_USER_ID}",
70 "commandId":"$(uuidgen | tr -d '\n')",
71 "deduplicationPeriod":{
72 "DeduplicationDuration":{
73 "value":{
74 "seconds":30,
75 "nanos":0
76 }
77 }
78 },
79 "actAs":[
80 "${BURNER_PARTY_ID}"
81 ],
82 "readAs":[
83 ],
84 "submissionId":"$(uuidgen | tr -d '\n')",
85 "disclosedContracts": ${DISCLOSEDCONTRACTS},
86 "domainId":"",
87 "packageIdSelectionPreference":[]
88 }
89}
90EOF
91)
92
93echo "--- Command response ---"
94echo $RESULT | jq
95
96OUTPUTFILE="response-step-1d.json"
97echo "$RESULT" > "$OUTPUTFILE"
After the exercise command is executed, the amount is locked by the admin.
Step 2: Admin Accepts Burn Reequest¶
Step 2a - Obtain the Ledger End Offset¶
To obtain the ledger end offset, run the following script:
1#!/usr/bin/env bash
2
3## =================================================================================================
4## Admin accepts the burn request
5## Step 2a: Obtains ledger end offset
6## Authorized by: Admin
7## Script: step-2a-admin-accepts.sh
8## =================================================================================================
9
10DATAFILE="source.sh"
11source "$DATAFILE"
12
13# Get offset from previous step
14OFFSET=$(curl -s GET \
15 --url "${HTTP_JSON_API}/v2/state/ledger-end" \
16 --header "Accept: application/json" \
17 --header "Authorization: Bearer ${ADMIN_PARTY_ID}")
18
19echo "$OFFSET" | jq
20
21OUTPUTFILE="response-step-2a.json"
22echo "$OFFSET" > "$OUTPUTFILE"
The result is the ledger end offset at this moment, stored in response-step-2a.json. For example:
1{
2 "offset": 4143
3}
Step 2b - Retrieve Burn Request¶
To retrieve the Burn Request created in Step 1d, run the following script:
1#!/usr/bin/env bash
2
3## =================================================================================================
4## Admin accepts the burn request
5## Step 2b: Retrieves the burn request to accept
6## Authorized by: Admin
7## Script: step-2b-admin-accepts.sh
8## =================================================================================================
9
10DATAFILE="source.sh"
11source "$DATAFILE"
12
13JSONCONTENT=$(cat "response-step-2a.json")
14OFFSET=$(echo "$JSONCONTENT" | jq -r ".offset")
15
16RESULT=$(
17 curl -s \
18 --url "${HTTP_JSON_API}/v2/state/active-contracts" \
19 --header "Authorization: Bearer ${ADMIN_TOKEN}" \
20 --header "Content-Type: application/json" \
21 --request POST \
22 --data @- <<EOF
23{
24 "verbose": false,
25 "activeAtOffset": "${OFFSET}",
26 "filter": {
27 "filtersByParty": {
28 "${ADMIN_PARTY_ID}": {
29 "cumulative": [{
30 "identifierFilter": {
31 "TemplateFilter": {
32 "value": {
33 "templateId":"${BURNREQUEST_TEMPLATE}",
34 "includeCreatedEventBlob": false
35 }
36 }
37 }
38 }]
39 }
40 }
41 }
42}
43EOF
44)
45
46echo "--- Burn Request ---"
47echo "$RESULT" | jq
48
49OUTPUTFILE="response-step-2b.json"
50echo "$RESULT" > "$OUTPUTFILE"
The result is the Burn Request, stored in response-step-2b.json. For example,
1[
2 {
3 "workflowId": "",
4 "contractEntry": {
5 "JsActiveContract": {
6 "createdEvent": {
7 "offset": 4137,
8 "nodeId": 7,
9 "contractId": "00248633b192704c1ad9f145e46f44158a92c4e8620e24f5074da54316a7da5e0bca11122086f5162d9d8de0d9ae114389680ad61d2fe5dad19f57a6dd227806610388e82a",
10 "templateId": "170929b11d5f0ed1385f890f42887c31ff7e289c0f4bc482aff193a7173d576c:Utility.Registry.App.V0.Model.Burn:BurnRequest",
11 "contractKey": null,
12 "createArgument": {
13 "operator": "operator::1220b39df5ed0e3c584cd97e86e779def933d545bf9a4fab3c0fd3e4ad3f7a36b8fe",
14 "provider": "provider::1220d301ababbed7bc8d6f6a80ce16f33933a7274a3013241b7fb373ca7e4f0d6567",
15 "burn": {
16 "instrumentId": {
17 "admin": "registrar::1220d301ababbed7bc8d6f6a80ce16f33933a7274a3013241b7fb373ca7e4f0d6567",
18 "id": "INST"
19 },
20 "amount": "3.0000000000",
21 "holder": "issuer::1220d301ababbed7bc8d6f6a80ce16f33933a7274a3013241b7fb373ca7e4f0d6567",
22 "reference": "burn-ref-002",
23 "requestedAt": "2025-10-10T10:11:19Z",
24 "executeBefore": "2025-10-10T11:11:19Z",
25 "meta": {
26 "values": {}
27 }
28 },
29 "lockedHoldingCid": "0007706fefe2a2b1951cf4e441b0799f810d3756f3f5ac521981e72d36dc5d740aca111220b40ba49c122d1cdabe9c361a6008e18ab523aa91a5918afd87ae86bd2e469e7b"
30 },
31 "createdEventBlob": "",
32 "interfaceViews": [],
33 "witnessParties": [
34 "registrar::1220d301ababbed7bc8d6f6a80ce16f33933a7274a3013241b7fb373ca7e4f0d6567"
35 ],
36 "signatories": [
37 "issuer::1220d301ababbed7bc8d6f6a80ce16f33933a7274a3013241b7fb373ca7e4f0d6567",
38 "provider::1220d301ababbed7bc8d6f6a80ce16f33933a7274a3013241b7fb373ca7e4f0d6567",
39 "registrar::1220d301ababbed7bc8d6f6a80ce16f33933a7274a3013241b7fb373ca7e4f0d6567"
40 ],
41 "observers": [
42 "operator::1220b39df5ed0e3c584cd97e86e779def933d545bf9a4fab3c0fd3e4ad3f7a36b8fe"
43 ],
44 "createdAt": "2025-10-10T10:11:19.235725Z",
45 "packageName": "utility-registry-app-v0"
46 },
47 "synchronizerId": "global-domain::1220f0c14212edfc6ca9b0dfc6f5943b51a80efe71de8abf5759c8f57b7510f633eb",
48 "reassignmentCounter": 0
49 }
50 }
51 }
52]
Step 2c - Access the Backend API¶
The request URL is “${BACKEND_API}/v0/registry/burn/v0/request/${BURNREQUEST_CID}/choice-contexts/accept”. To hit this endpoint, run the following script:
1#!/usr/bin/env bash
2
3## =================================================================================================
4## Admin accepts the burn request
5## Step 2c: Gets choice context and disclosure for the accept-burn-request command
6## Authorized by: anyone
7## Script: step-2c-admin-accepts.sh
8## =================================================================================================
9
10DATAFILE="source.sh"
11source "$DATAFILE"
12
13DATE_FORMAT='+%Y-%m-%dT%H:%M:%SZ'
14NOW_ISO_TIMESTAMP=$(date -u "$DATE_FORMAT")
15ONEHOUR_ISO_TIMESTAMP=$(date -u -d '+1 hour' "$DATE_FORMAT")
16
17BURNREQUESTS=$(cat "response-step-2b.json")
18BURNREQUEST_CID=$(echo "$BURNREQUESTS" | jq -r --arg BURN_REF "$BURN_REF" '[.[] | select(.contractEntry.JsActiveContract.createdEvent.createArgument.burn.reference == $BURN_REF)][0].contractEntry.JsActiveContract.createdEvent.contractId')
19
20RESULT=$(
21 curl -s \
22 --url "${BACKEND_API}/v0/registry/burn/v0/request/${BURNREQUEST_CID}/choice-contexts/accept" \
23 --header "Content-Type: application/json" \
24 --request POST \
25 --data @- <<EOF
26{
27 "meta":{
28
29 },
30 "excludeDebugFields": true
31}
32EOF
33)
34
35echo "--- Endpoint response ---"
36echo $RESULT | jq
37
38OUTPUTFILE="response-step-2c.json"
39echo "$RESULT" > "$OUTPUTFILE"
The result contains the required choice context for executing the command, stored in response-step-2c.json. For example:
1{
2 "choiceContextData": {
3 "values": {
4 "utility.digitalasset.com/instrument-configuration": {
5 "tag": "AV_ContractId",
6 "value": "00eca75bf1e14e192de69b58054cf62f2a60a9c0aae8f4d3491a4b2fad9f9731eaca111220b5fd51ccd498385b0ceaef63243fdfef6c2e62dd8d3a2f59fdb61a9099956481"
7 },
8 "utility.digitalasset.com/issuer-credentials": {
9 "tag": "AV_List",
10 "value": [
11 {
12 "tag": "AV_ContractId",
13 "value": "0031a2300ef5833a5dd1204c603ea296ae9558645bc354721e5e01e618d00c1495ca1112206f197de929cdb48f2509cb72249c1040f67f8e64bb2d6c7ec7b17bcd761e045c"
14 }
15 ]
16 },
17 "utility.digitalasset.com/app-reward-configuration": {
18 "tag": "AV_ContractId",
19 "value": "00525af6a6fd8c1580b6d80aad3dbcc298218ffcd501c9f30e126836a3bb9ada8bca111220c22ce1c7f07a549ad6c6739c7953dd8847f69773b5996169b7afd8c6d66438b9"
20 }
21 }
22 },
23 "disclosedContracts": [
24 {
25 "createdAt": "2025-10-08T20:41:34.877Z",
26 "contractId": "0031a2300ef5833a5dd1204c603ea296ae9558645bc354721e5e01e618d00c1495ca1112206f197de929cdb48f2509cb72249c1040f67f8e64bb2d6c7ec7b17bcd761e045c",
27 "templateId": "77df4e7b980c12de438d7b052141a762215fae790d81f71179c8fb534beb68f7:Utility.Credential.V0.Credential:Credential",
28 "domainId": null,
29 "createdEventBlob": "CgMyLjESrAcKRQAxojAO9YM6XdEgTGA+opaulVhkW8NUch5eAeYY0AwUlcoREiBvGX3pKc20jyUJy3IknBBA9n+OZLstbH7HsXvNdh4EXBIVdXRpbGl0eS1jcmVkZW50aWFsLXYwGnMKQDc3ZGY0ZTdiOTgwYzEyZGU0MzhkN2IwNTIxNDFhNzYyMjE1ZmFlNzkwZDgxZjcxMTc5YzhmYjUzNGJlYjY4ZjcSB1V0aWxpdHkSCkNyZWRlbnRpYWwSAlYwEgpDcmVkZW50aWFsGgpDcmVkZW50aWFsIrIDaq8DClMKUTpPcmVnaXN0cmFyOjoxMjIwZDMwMWFiYWJiZWQ3YmM4ZDZmNmE4MGNlMTZmMzM5MzNhNzI3NGEzMDEzMjQxYjdmYjM3M2NhN2U0ZjBkNjU2NwpQCk46TGlzc3Vlcjo6MTIyMGQzMDFhYmFiYmVkN2JjOGQ2ZjZhODBjZTE2ZjMzOTMzYTcyNzRhMzAxMzI0MWI3ZmIzNzNjYTdlNGYwZDY1NjcKDwoNQgtJTlNUX0lzc3VlcgoPCg1CC0lOU1RfSXNzdWVyCgQKAlIACgQKAlIACnQKclpwCm5qbApQCk5CTGlzc3Vlcjo6MTIyMGQzMDFhYmFiYmVkN2JjOGQ2ZjZhODBjZTE2ZjMzOTMzYTcyNzRhMzAxMzI0MWI3ZmIzNzNjYTdlNGYwZDY1NjcKDgoMQgppc0lzc3Vlck9mCggKBkIESU5TVApiCmBqXgpcClpiWApWClA6Tm9wZXJhdG9yOjoxMjIwYjM5ZGY1ZWQwZTNjNTg0Y2Q5N2U4NmU3NzlkZWY5MzNkNTQ1YmY5YTRmYWIzYzBmZDNlNGFkM2Y3YTM2YjhmZRICCgAqTGlzc3Vlcjo6MTIyMGQzMDFhYmFiYmVkN2JjOGQ2ZjZhODBjZTE2ZjMzOTMzYTcyNzRhMzAxMzI0MWI3ZmIzNzNjYTdlNGYwZDY1NjcqT3JlZ2lzdHJhcjo6MTIyMGQzMDFhYmFiYmVkN2JjOGQ2ZjZhODBjZTE2ZjMzOTMzYTcyNzRhMzAxMzI0MWI3ZmIzNzNjYTdlNGYwZDY1NjcyTm9wZXJhdG9yOjoxMjIwYjM5ZGY1ZWQwZTNjNTg0Y2Q5N2U4NmU3NzlkZWY5MzNkNTQ1YmY5YTRmYWIzYzBmZDNlNGFkM2Y3YTM2YjhmZTl8/9q1q0AGAEIqCiYKJAgBEiBikJteQ0a37UH10AsBGGTcDTteF7QH0nxSmVQemm0uLRAe"
30 },
31 {
32 "createdAt": "2025-10-08T20:41:42.691Z",
33 "contractId": "00525af6a6fd8c1580b6d80aad3dbcc298218ffcd501c9f30e126836a3bb9ada8bca111220c22ce1c7f07a549ad6c6739c7953dd8847f69773b5996169b7afd8c6d66438b9",
34 "templateId": "ed73d5b9ab717333f3dbd122de7be3156f8bf2614a67360c3dd61fc0135133fa:Utility.Registry.V0.Configuration.AppReward:AppRewardConfiguration",
35 "domainId": null,
36 "createdEventBlob": "CgMyLjEStgYKRQBSWvam/YwVgLbYCq09vMKYIY/81QHJ8w4SaDaju5rai8oREiDCLOHH8HpUmtbGc5x5U92IR/aXc7WZYWm3r9jG1mQ4uRITdXRpbGl0eS1yZWdpc3RyeS12MBqLAQpAZWQ3M2Q1YjlhYjcxNzMzM2YzZGJkMTIyZGU3YmUzMTU2ZjhiZjI2MTRhNjczNjBjM2RkNjFmYzAxMzUxMzNmYRIHVXRpbGl0eRIIUmVnaXN0cnkSAlYwEg1Db25maWd1cmF0aW9uEglBcHBSZXdhcmQaFkFwcFJld2FyZENvbmZpZ3VyYXRpb24i9AJq8QIKUgpQOk5vcGVyYXRvcjo6MTIyMGIzOWRmNWVkMGUzYzU4NGNkOTdlODZlNzc5ZGVmOTMzZDU0NWJmOWE0ZmFiM2MwZmQzZTRhZDNmN2EzNmI4ZmUKUgpQOk5wcm92aWRlcjo6MTIyMGQzMDFhYmFiYmVkN2JjOGQ2ZjZhODBjZTE2ZjMzOTMzYTcyNzRhMzAxMzI0MWI3ZmIzNzNjYTdlNGYwZDY1NjcKxgEKwwFqwAEKTQpLOklEU086OjEyMjBmMGMxNDIxMmVkZmM2Y2E5YjBkZmM2ZjU5NDNiNTFhODBlZmU3MWRlOGFiZjU3NTljOGY1N2I3NTEwZjYzM2ViCm8KbWprClcKVTpTZmVlUmVjZWl2ZXJVczo6MTIyMGIzOWRmNWVkMGUzYzU4NGNkOTdlODZlNzc5ZGVmOTMzZDU0NWJmOWE0ZmFiM2MwZmQzZTRhZDNmN2EzNmI4ZmUKEAoOMgwwLjIwMDAwMDAwMDAqTm9wZXJhdG9yOjoxMjIwYjM5ZGY1ZWQwZTNjNTg0Y2Q5N2U4NmU3NzlkZWY5MzNkNTQ1YmY5YTRmYWIzYzBmZDNlNGFkM2Y3YTM2YjhmZTJOcHJvdmlkZXI6OjEyMjBkMzAxYWJhYmJlZDdiYzhkNmY2YTgwY2UxNmYzMzkzM2E3Mjc0YTMwMTMyNDFiN2ZiMzczY2E3ZTRmMGQ2NTY3ORA5UrarQAYAQioKJgokCAESIFdnuWlL+9/sSZnL9GgPVRMT0KYfFkQqkD1ffAXT9KgQEB4="
37 }
38 ]
39}
Step 2d - Accept the Burn Request¶
To finalize the burn and remove the asset for the burner, execute the following script:
1#!/usr/bin/env bash
2
3## =================================================================================================
4## Admin accepts the burn request
5## Step 2d: Executes the accept-burn-request command
6## Authorized by: Admin
7## Script: step-2d-admin-accepts.sh
8## =================================================================================================
9
10DATAFILE="source.sh"
11source "$DATAFILE"
12
13BURNREQUESTS=$(cat "response-step-2b.json")
14BURNREQUEST=$(echo "$BURNREQUESTS" | jq -r --arg BURN_REF "$BURN_REF" '[.[] | select(.contractEntry.JsActiveContract.createdEvent.createArgument.burn.reference == $BURN_REF)][0]')
15BURNREQUEST_CID=$(echo "$BURNREQUEST" | jq -r .contractEntry.JsActiveContract.createdEvent.contractId)
16BURNREQUEST_TEMPLATE=$(echo "$BURNREQUEST" | jq -r .contractEntry.JsActiveContract.createdEvent.templateId)
17
18JSONCONTENT=$(cat "response-step-2c.json")
19CHOICECONTEXTDATA=$(echo $JSONCONTENT | jq .choiceContextData)
20DISCLOSEDCONTRACTS=$(echo $JSONCONTENT | jq .disclosedContracts)
21DISCLOSEDCONTRACTS=$(echo $JSONCONTENT | jq '.choiceContext.disclosedContracts // [] | map(. + {"synchronizerId": ""})')
22
23RESULT=$(
24 curl -s \
25 --url "${HTTP_JSON_API}/v2/commands/submit-and-wait-for-transaction" \
26 --header "Authorization: Bearer ${ADMIN_TOKEN}" \
27 --header "Content-Type: application/json" \
28 --request POST \
29 --data @- <<EOF
30{
31 "commands":{
32 "commands":[
33 {
34 "ExerciseCommand":{
35 "templateId":"${BURNREQUEST_TEMPLATE}",
36 "contractId":"${BURNREQUEST_CID}",
37 "choice":"BurnRequest_Accept",
38 "choiceArgument":{
39 "extraArgs": {
40 "context": $CHOICECONTEXTDATA,
41 "meta":{
42 "values":{
43 }
44 }
45 }
46 }
47 }
48 }
49 ],
50 "workflowId":"",
51 "userId":"${ADMIN_USER_ID}",
52 "commandId":"$(uuidgen | tr -d '\n')",
53 "deduplicationPeriod":{
54 "DeduplicationDuration":{
55 "value":{
56 "seconds":30,
57 "nanos":0
58 }
59 }
60 },
61 "actAs":[
62 "${ADMIN_PARTY_ID}"
63 ],
64 "readAs":[
65
66 ],
67 "submissionId":"$(uuidgen | tr -d '\n')",
68 "disclosedContracts": ${DISCLOSEDCONTRACTS},
69 "domainId":"",
70 "packageIdSelectionPreference":[]
71 }
72}
73EOF
74)
75
76echo "--- Command response ---"
77echo $RESULT | jq
78
79OUTPUTFILE="response-step-2d.json"
80echo "$RESULT" > "$OUTPUTFILE"
For example, this is the response of this command:
1{
2 "transaction": {
3 "updateId": "122096c6ca09db8e59bb9fa74f0d2303561fe722b89c8a5ed9cbcf5ed2399b655e76",
4 "commandId": "A52F8C64-9788-49CC-8D94-16B8322AFC4D",
5 "workflowId": "",
6 "effectiveAt": "2025-10-10T10:12:37.509006Z",
7 "events": [
8 {
9 "ArchivedEvent": {
10 "offset": 4144,
11 "nodeId": 0,
12 "contractId": "00248633b192704c1ad9f145e46f44158a92c4e8620e24f5074da54316a7da5e0bca11122086f5162d9d8de0d9ae114389680ad61d2fe5dad19f57a6dd227806610388e82a",
13 "templateId": "170929b11d5f0ed1385f890f42887c31ff7e289c0f4bc482aff193a7173d576c:Utility.Registry.App.V0.Model.Burn:BurnRequest",
14 "witnessParties": [
15 "registrar::1220d301ababbed7bc8d6f6a80ce16f33933a7274a3013241b7fb373ca7e4f0d6567"
16 ],
17 "packageName": "utility-registry-app-v0",
18 "implementedInterfaces": []
19 }
20 },
21 {
22 "ArchivedEvent": {
23 "offset": 4144,
24 "nodeId": 2,
25 "contractId": "0007706fefe2a2b1951cf4e441b0799f810d3756f3f5ac521981e72d36dc5d740aca111220b40ba49c122d1cdabe9c361a6008e18ab523aa91a5918afd87ae86bd2e469e7b",
26 "templateId": "dd3a9f2d51cc4c52d9ec2e1d7ff235298dcfb3afd1d50ab44328b1aaa9a18587:Utility.Registry.Holding.V0.Holding:Holding",
27 "witnessParties": [
28 "registrar::1220d301ababbed7bc8d6f6a80ce16f33933a7274a3013241b7fb373ca7e4f0d6567"
29 ],
30 "packageName": "utility-registry-holding-v0",
31 "implementedInterfaces": []
32 }
33 },
34 {
35 "CreatedEvent": {
36 "offset": 4144,
37 "nodeId": 5,
38 "contractId": "0000de51b471a9207c0fb855a69c19e72dde41b803dc3239611526a07a289736b7ca1112201568a3fa987d40896234b1cf519a128e458fc943ae5829fea41f9982bd754ba2",
39 "templateId": "170929b11d5f0ed1385f890f42887c31ff7e289c0f4bc482aff193a7173d576c:Utility.Registry.App.V0.Model.Burn:ExecutedBurn",
40 "contractKey": null,
41 "createArgument": {
42 "operator": "operator::1220b39df5ed0e3c584cd97e86e779def933d545bf9a4fab3c0fd3e4ad3f7a36b8fe",
43 "provider": "provider::1220d301ababbed7bc8d6f6a80ce16f33933a7274a3013241b7fb373ca7e4f0d6567",
44 "burn": {
45 "instrumentId": {
46 "admin": "registrar::1220d301ababbed7bc8d6f6a80ce16f33933a7274a3013241b7fb373ca7e4f0d6567",
47 "id": "INST"
48 },
49 "amount": "3.0000000000",
50 "holder": "issuer::1220d301ababbed7bc8d6f6a80ce16f33933a7274a3013241b7fb373ca7e4f0d6567",
51 "reference": "burn-ref-002",
52 "requestedAt": "2025-10-10T10:11:19Z",
53 "executeBefore": "2025-10-10T11:11:19Z",
54 "meta": {
55 "values": {}
56 }
57 }
58 },
59 "createdEventBlob": "",
60 "interfaceViews": [],
61 "witnessParties": [
62 "registrar::1220d301ababbed7bc8d6f6a80ce16f33933a7274a3013241b7fb373ca7e4f0d6567"
63 ],
64 "signatories": [
65 "registrar::1220d301ababbed7bc8d6f6a80ce16f33933a7274a3013241b7fb373ca7e4f0d6567"
66 ],
67 "observers": [
68 "issuer::1220d301ababbed7bc8d6f6a80ce16f33933a7274a3013241b7fb373ca7e4f0d6567",
69 "operator::1220b39df5ed0e3c584cd97e86e779def933d545bf9a4fab3c0fd3e4ad3f7a36b8fe",
70 "provider::1220d301ababbed7bc8d6f6a80ce16f33933a7274a3013241b7fb373ca7e4f0d6567"
71 ],
72 "createdAt": "2025-10-10T10:12:37.509006Z",
73 "packageName": "utility-registry-app-v0"
74 }
75 }
76 ],
77 "offset": 4144,
78 "synchronizerId": "global-domain::1220f0c14212edfc6ca9b0dfc6f5943b51a80efe71de8abf5759c8f57b7510f633eb",
79 "traceContext": {
80 "traceparent": "00-e586ae8f5bbf537c2e06bce74365ba90-e40c56da6a68f532-01",
81 "tracestate": null
82 },
83 "recordTime": "2025-10-10T10:12:37.563687Z"
84 }
85}
After the exercise command is executed, the burn is complete.