@temple-digital-group/temple-canton-js 2.0.0 → 2.0.2

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.
@@ -3,7 +3,7 @@ import axios from "axios";
3
3
  import { getDisclosures } from "../api/index.js";
4
4
  import { getUserId } from "../api/tokenStore.js";
5
5
  import { getAdapterPartyId, getWalletAdapter, submitCommand, payDueGasIfAny } from "../../src/canton/walletAdapter.js";
6
- import { normalizeAssetId, instrumentCatalog } from "../../src/canton/instrumentCatalog.js";
6
+ import { normalizeAssetId, instrumentCatalog, instrumentIdToSymbol, resolveOnChainInstrumentId } from "../../src/canton/instrumentCatalog.js";
7
7
  import { randomUUID, shouldUseLedgerForMetadata, normalizeContractId, resolveInstrumentDefinition, getInstrumentRegistrar, resolveProvider, dedupeDisclosedContracts, buildHeaders, DEFAULT_UTILITY_CONTEXT_KEYS, } from "./helpers.js";
8
8
  import { resolveAmuletContext, resolveUtilityInstrumentConfiguration, resolveUtilityAllocationFactory, getAmuletHoldingsForParty, getUtilityHoldingsForParty, getUtxoCount, } from "../../src/canton/index.js";
9
9
  // ─── Constants ───────────────────────────────────────────────────────────────
@@ -48,14 +48,16 @@ export async function prepareDepositHoldings(amount, symbol) {
48
48
  if (!createdEvent)
49
49
  continue;
50
50
  const createArg = createdEvent.createArgument;
51
- // Skip asset types that don't match the requested symbol
52
- const instrument = createArg?.instrument;
53
- const createdAssetId = instrument?.id || (isAmulet ? "Amulet" : null);
54
- if (createdAssetId !== assetId)
55
- continue;
56
- // Skip locked utility holdings
57
- if (!isAmulet && createArg?.lock)
58
- continue;
51
+ // Utility holdings: filter by asset type and drop locked ones.
52
+ // Amulet holdings come pre-filtered by template, so no further checks needed.
53
+ if (!isAmulet) {
54
+ if (createArg?.lock)
55
+ continue;
56
+ const onChainId = createArg?.instrument?.id;
57
+ const heldSymbol = instrumentIdToSymbol[onChainId] || onChainId;
58
+ if (heldSymbol !== assetId)
59
+ continue;
60
+ }
59
61
  const amountField = createArg?.amount;
60
62
  const quantity = isAmulet
61
63
  ? parseFloat(amountField?.initialAmount || "0")
@@ -237,7 +239,7 @@ export async function depositFunds(opts, returnCommand = false) {
237
239
  amount: parseFloat(parseFloat(String(amount)).toFixed(10)).toString(),
238
240
  instrumentId: {
239
241
  admin: admin,
240
- id: assetId,
242
+ id: resolveOnChainInstrumentId(assetId),
241
243
  },
242
244
  meta: { values: {} },
243
245
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@temple-digital-group/temple-canton-js",
3
- "version": "2.0.0",
3
+ "version": "2.0.2",
4
4
  "description": "JavaScript library for interacting with Temple Canton blockchain",
5
5
  "type": "module",
6
6
  "main": "index.js",
@@ -3,7 +3,7 @@ import axios from "axios";
3
3
  import { getDisclosures } from "../api/index.js";
4
4
  import { getUserId } from "../api/tokenStore.js";
5
5
  import { getAdapterPartyId, getWalletAdapter, submitCommand, payDueGasIfAny } from "../../src/canton/walletAdapter.js";
6
- import { normalizeAssetId, instrumentCatalog } from "../../src/canton/instrumentCatalog.js";
6
+ import { normalizeAssetId, instrumentCatalog, instrumentIdToSymbol, resolveOnChainInstrumentId } from "../../src/canton/instrumentCatalog.js";
7
7
  import {
8
8
  randomUUID,
9
9
  shouldUseLedgerForMetadata,
@@ -94,7 +94,6 @@ export async function prepareDepositHoldings(
94
94
  if (!holdings || (holdings as unknown[]).length === 0) {
95
95
  return { error: `prepareDepositHoldings: no holdings found for party ${party}` };
96
96
  }
97
-
98
97
  // Parse holdings into { contractId, quantity } and filter out locked
99
98
  const parsed: { contractId: string; quantity: number }[] = [];
100
99
  for (const h of holdings as Record<string, unknown>[]) {
@@ -105,13 +104,14 @@ export async function prepareDepositHoldings(
105
104
 
106
105
  const createArg = createdEvent.createArgument as Record<string, unknown> | undefined;
107
106
 
108
- // Skip asset types that don't match the requested symbol
109
- const instrument = createArg?.instrument as Record<string, unknown> | undefined;
110
- const createdAssetId = (instrument?.id as string) || (isAmulet ? "Amulet" : null);
111
- if (createdAssetId !== assetId) continue;
112
-
113
- // Skip locked utility holdings
114
- if (!isAmulet && createArg?.lock) continue;
107
+ // Utility holdings: filter by asset type and drop locked ones.
108
+ // Amulet holdings come pre-filtered by template, so no further checks needed.
109
+ if (!isAmulet) {
110
+ if (createArg?.lock) continue;
111
+ const onChainId = (createArg?.instrument as Record<string, unknown> | undefined)?.id as string;
112
+ const heldSymbol = instrumentIdToSymbol[onChainId] || onChainId;
113
+ if (heldSymbol !== assetId) continue;
114
+ }
115
115
 
116
116
  const amountField = createArg?.amount as Record<string, unknown> | string | undefined;
117
117
  const quantity = isAmulet
@@ -323,7 +323,7 @@ export async function depositFunds(
323
323
  amount: parseFloat(parseFloat(String(amount)).toFixed(10)).toString(),
324
324
  instrumentId: {
325
325
  admin: admin,
326
- id: assetId,
326
+ id: resolveOnChainInstrumentId(assetId),
327
327
  },
328
328
  meta: { values: {} },
329
329
  },
@@ -45,7 +45,7 @@ import unlockAmuletSchema from "./request_schemas/unlock_amulet.json" with { typ
45
45
  import createUtilityCredentialSchema from "./request_schemas/create_utility_credential.json" with { type: "json" };
46
46
 
47
47
  // Import instrument catalog
48
- import { RegistrarInternalScheme, instrumentCatalog, instrumentIdToSymbol, supportedTradingPairs, supportedSymbols, normalizeAssetId } from "./instrumentCatalog.js";
48
+ import { RegistrarInternalScheme, instrumentCatalog, instrumentIdToSymbol, supportedTradingPairs, supportedSymbols, normalizeAssetId, resolveOnChainInstrumentId } from "./instrumentCatalog.js";
49
49
 
50
50
 
51
51
  /**
@@ -1233,7 +1233,7 @@ async function buildLocalUtilityTransferFactory(investor, registrar, amount, hol
1233
1233
  amount: amount,
1234
1234
  instrumentId: {
1235
1235
  admin: registrar,
1236
- id: utilityAsset || "tSBC",
1236
+ id: resolveOnChainInstrumentId(utilityAsset) || "tSBC",
1237
1237
  },
1238
1238
  },
1239
1239
  expectedAdmin: registrar,
@@ -1270,7 +1270,7 @@ async function getTransferFactoryFromRegistry(investor, registrar, amount, holdi
1270
1270
  dso: registrar,
1271
1271
  amount: amount,
1272
1272
  holding_ids: holdingIds,
1273
- instrument_id: utilityAsset,
1273
+ instrument_id: resolveOnChainInstrumentId(utilityAsset),
1274
1274
  time: new Date().toISOString(),
1275
1275
  timeEnd: new Date(Date.now() + 3600 * 1000).toISOString(),
1276
1276
  };
@@ -1315,7 +1315,7 @@ export async function getTransferFactory(investor, admin, amount, holdingIds, re
1315
1315
  dso: admin,
1316
1316
  amount: amount,
1317
1317
  holding_ids: holdingIds,
1318
- instrument_id: utilityAsset || "Amulet",
1318
+ instrument_id: resolveOnChainInstrumentId(utilityAsset) || "Amulet",
1319
1319
  time: new Date().toISOString(),
1320
1320
  timeEnd: new Date(Date.now() + 3600 * 1000).toISOString(),
1321
1321
  };
@@ -1627,8 +1627,9 @@ export async function getUtxoCount(party, assetId, provider = null) {
1627
1627
  quantity = parseFloat(createArg?.amount?.initialAmount || 0);
1628
1628
  matchesAsset = true;
1629
1629
  } else {
1630
- const asset = createArg?.instrument?.id || null;
1631
- if (asset !== assetId) continue;
1630
+ const onChainId = createArg?.instrument?.id || null;
1631
+ const heldSymbol = instrumentIdToSymbol[onChainId] || onChainId;
1632
+ if (heldSymbol !== assetId) continue;
1632
1633
  isLocked = !!createArg?.lock;
1633
1634
  quantity = parseFloat(createArg?.amount || 0);
1634
1635
  matchesAsset = true;
@@ -1818,8 +1819,12 @@ export async function getCandidateHoldingForOrderCreation(party, isAmulet, requi
1818
1819
  // For Utility, quantity is in createArgument.amount
1819
1820
  const quantity = isAmulet ? parseFloat(createdEvent.createArgument?.amount?.initialAmount || 0) : parseFloat(createdEvent.createArgument?.amount || 0);
1820
1821
 
1821
- // For Utility, also get the asset ID and scheme
1822
- const asset = isAmulet ? "Amulet" : createdEvent.createArgument?.instrument?.id || null;
1822
+ // For Utility, also get the asset ID and scheme.
1823
+ // instrument.id from the ledger is the on-chain value (UUID for USDA/SBC);
1824
+ // translate to catalog symbol so downstream comparisons against user-passed
1825
+ // expectedAssetId work uniformly.
1826
+ const onChainId = isAmulet ? null : createdEvent.createArgument?.instrument?.id || null;
1827
+ const asset = isAmulet ? "Amulet" : instrumentIdToSymbol[onChainId] || onChainId;
1823
1828
  const instrumentScheme = isAmulet ? null : createdEvent.createArgument?.instrument?.scheme || null;
1824
1829
 
1825
1830
  // Extract owner/holder/operator/provider for debugging
@@ -2006,8 +2011,8 @@ export async function mergeAmuletHoldingsForParty(party, returnCommand = false,
2006
2011
  return null;
2007
2012
  }
2008
2013
 
2009
- // Sort by quantity ascending (smallest first) and apply maxUtxos limit
2010
- contracts.sort((a, b) => a.quantity - b.quantity);
2014
+ // Sort by quantity descending (largest first) and apply maxUtxos limit
2015
+ contracts.sort((a, b) => b.quantity - a.quantity);
2011
2016
  const selectedContracts = maxUtxos && maxUtxos < contracts.length ? contracts.slice(0, maxUtxos) : contracts;
2012
2017
 
2013
2018
  if (selectedContracts.length < 2) {
@@ -2209,7 +2214,8 @@ export async function mergeUtilityHoldingsForParty(party, utilityAsset, returnCo
2209
2214
  const source = createArg?.instrument?.source || null;
2210
2215
  const rawAmount = createArg?.amount || "0";
2211
2216
  const quantity = parseFloat(rawAmount);
2212
- const asset = createArg?.instrument?.id || null;
2217
+ const onChainId = createArg?.instrument?.id || null;
2218
+ const asset = instrumentIdToSymbol[onChainId] || onChainId;
2213
2219
  const lock = createArg?.lock || false;
2214
2220
  // Extract the holder from the holding contract (for utility tokens)
2215
2221
  // Try multiple possible field names
@@ -2312,9 +2318,9 @@ export async function mergeUtilityHoldingsForParty(party, utilityAsset, returnCo
2312
2318
  const finalHolders = [...new Set(contracts.map((c) => c.holder).filter(Boolean))];
2313
2319
  const holder = finalHolders[0] || party; // Use the holder from filtered holdings
2314
2320
 
2315
- // Sort ascending by quantity so smallest UTXOs are merged first
2321
+ // Sort descending by quantity so largest UTXOs are merged first
2316
2322
  if (maxUtxos) {
2317
- contracts.sort((a, b) => a.quantity - b.quantity);
2323
+ contracts.sort((a, b) => b.quantity - a.quantity);
2318
2324
  if (contracts.length > maxUtxos) {
2319
2325
  contracts.length = maxUtxos;
2320
2326
  }
@@ -2368,7 +2374,7 @@ export async function mergeUtilityHoldingsForParty(party, utilityAsset, returnCo
2368
2374
  const rawAmount = transferInstruction.amount || totalQuantity;
2369
2375
  const actualAmount = parseFloat(parseFloat(rawAmount).toFixed(10));
2370
2376
  const instrumentAdmin = transferInstruction.instrumentId?.admin || registrar;
2371
- const instrumentIdValue = transferInstruction.instrumentId?.id || utilityAsset;
2377
+ const instrumentIdValue = transferInstruction.instrumentId?.id || resolveOnChainInstrumentId(utilityAsset);
2372
2378
  // For utility tokens the TransferFactory is registrar-administered, so expectedAdmin = registrar.
2373
2379
  // Prefer the value returned by the Registry API, then fall back to the registrar from holdings.
2374
2380
  const expectedAdmin = transferFactoryData.expectedAdmin || registrar;
@@ -3011,6 +3017,177 @@ export async function isUserOnboarded(user = null, returnCommand = false) {
3011
3017
  }
3012
3018
  }
3013
3019
 
3020
+ /**
3021
+ * Build an Allocation_Withdraw ExerciseCommand for one or more stuck allocation CIDs.
3022
+ * Returns the command(s) ready for submission via wallet adapter or ledger API.
3023
+ *
3024
+ * @param {Object} opts
3025
+ * @param {string|string[]} opts.allocationCids - Single CID or array of allocation contract IDs
3026
+ * @param {string} opts.assetId - The asset symbol ("Amulet", "CC", "USDCx", etc.)
3027
+ * @param {string} [opts.sender] - Party ID. Falls back to wallet adapter or VALIDATOR_USER_PARTY_ID.
3028
+ * @param {Object} [opts.disclosures] - Pre-fetched disclosures (optional, will be resolved if missing)
3029
+ * @returns {Promise<Object>} { commands: [...] } array of { command, endpoint } objects, or { error }
3030
+ */
3031
+ export async function buildAllocationWithdrawCommand(opts) {
3032
+ const { disclosures, userId } = opts || {};
3033
+ const assetId = (opts.assetId === "CC" || opts.assetId === "cc") ? "Amulet" : opts.assetId;
3034
+ const sender = getAdapterPartyId() || opts.sender || config.VALIDATOR_USER_PARTY_ID;
3035
+
3036
+ if (!opts.allocationCids || !sender || !assetId) {
3037
+ return { error: "buildAllocationWithdrawCommand: allocationCids, sender, and assetId are required" };
3038
+ }
3039
+
3040
+ const cids = Array.isArray(opts.allocationCids) ? opts.allocationCids : [opts.allocationCids];
3041
+ if (cids.length === 0) {
3042
+ return { error: "buildAllocationWithdrawCommand: allocationCids must not be empty" };
3043
+ }
3044
+
3045
+ const isAmulet = assetId === "Amulet";
3046
+
3047
+ // --- Resolve context and disclosures (once for all CIDs) ---
3048
+ let choiceContextData = {};
3049
+ let disclosedContracts = [];
3050
+
3051
+ if (shouldUseLedgerForMetadata()) {
3052
+ if (isAmulet) {
3053
+ const amuletCtx = await resolveAmuletContext({ investor: sender, holdingIds: [], transferAmount: 0 });
3054
+ if (!amuletCtx) {
3055
+ return { error: "buildAllocationWithdrawCommand: failed to resolve Amulet context from ledger" };
3056
+ }
3057
+ const contextKeys = amuletCtx.contextKeys;
3058
+ choiceContextData = {
3059
+ values: {
3060
+ [contextKeys.amuletRules]: { tag: "AV_ContractId", value: amuletCtx.amuletRules.contractCid },
3061
+ [contextKeys.openRound]: { tag: "AV_ContractId", value: amuletCtx.openMiningRound.contractCid },
3062
+ [contextKeys.featuredAppRight]: { tag: "AV_ContractId", value: amuletCtx.featuredAppRight.contractCid },
3063
+ [contextKeys.expireLock]: { tag: "AV_Bool", value: true },
3064
+ },
3065
+ };
3066
+ disclosedContracts = [
3067
+ { templateId: amuletCtx.amuletRules.templateId || null, contractId: amuletCtx.amuletRules.contractCid, createdEventBlob: amuletCtx.amuletRules.disclosureCid, synchronizerId: amuletCtx.amuletRules.synchronizerId },
3068
+ { templateId: amuletCtx.openMiningRound.templateId || null, contractId: amuletCtx.openMiningRound.contractCid, createdEventBlob: amuletCtx.openMiningRound.disclosureCid, synchronizerId: amuletCtx.openMiningRound.synchronizerId },
3069
+ { templateId: amuletCtx.externalAmuletRules.templateId || null, contractId: amuletCtx.externalAmuletRules.contractCid, createdEventBlob: amuletCtx.externalAmuletRules.disclosureCid, synchronizerId: amuletCtx.externalAmuletRules.synchronizerId },
3070
+ ];
3071
+ if (amuletCtx.featuredAppRight?.contractCid && amuletCtx.featuredAppRight?.disclosureCid) {
3072
+ disclosedContracts.push({ templateId: amuletCtx.featuredAppRight.templateId || null, contractId: amuletCtx.featuredAppRight.contractCid, createdEventBlob: amuletCtx.featuredAppRight.disclosureCid, synchronizerId: amuletCtx.featuredAppRight.synchronizerId });
3073
+ }
3074
+ } else {
3075
+ const instrumentDef = resolveInstrumentDefinition(assetId);
3076
+ const networkDef = instrumentDef?.[config.NETWORK];
3077
+ const registrar = networkDef?.registrar || getInstrumentRegistrar(assetId) || config.VALIDATOR_REGISTRAR_PARTY_ID;
3078
+ const [allocFactory, instConfig] = await Promise.all([
3079
+ resolveUtilityAllocationFactory(registrar, sender),
3080
+ resolveUtilityInstrumentConfiguration(assetId, registrar),
3081
+ ]);
3082
+ if (instConfig) {
3083
+ choiceContextData = {
3084
+ values: {
3085
+ [DEFAULT_UTILITY_CONTEXT_KEYS.instrumentConfiguration]: { tag: "AV_ContractId", value: instConfig.contractCid },
3086
+ [DEFAULT_UTILITY_CONTEXT_KEYS.instrumentConfigurationPrefixed]: { tag: "AV_ContractId", value: instConfig.contractCid },
3087
+ [DEFAULT_UTILITY_CONTEXT_KEYS.senderCredentials]: { tag: "AV_List", value: [] },
3088
+ [DEFAULT_UTILITY_CONTEXT_KEYS.senderCredentialsPrefixed]: { tag: "AV_List", value: [] },
3089
+ [DEFAULT_UTILITY_CONTEXT_KEYS.receiverCredentials]: { tag: "AV_List", value: [] },
3090
+ [DEFAULT_UTILITY_CONTEXT_KEYS.receiverCredentialsPrefixed]: { tag: "AV_List", value: [] },
3091
+ [DEFAULT_AMULET_CONTEXT_KEYS.expireLock]: { tag: "AV_Bool", value: true },
3092
+ },
3093
+ };
3094
+ disclosedContracts.push({ templateId: null, contractId: instConfig.contractCid, createdEventBlob: instConfig.disclosureCid, synchronizerId: instConfig.synchronizerId });
3095
+ }
3096
+ if (allocFactory) {
3097
+ disclosedContracts.push({ templateId: null, contractId: allocFactory.contractCid, createdEventBlob: allocFactory.disclosureCid, synchronizerId: allocFactory.synchronizerId });
3098
+ }
3099
+ }
3100
+ } else if (isAmulet) {
3101
+ // Resolve via disclosures API
3102
+ let resolvedData = disclosures?.disclosures || disclosures || null;
3103
+ if (!resolvedData?.choiceContext) {
3104
+ const disclosuresResult = await getDisclosures(sender);
3105
+ resolvedData = disclosuresResult?.disclosures;
3106
+ if (disclosuresResult?.error || !resolvedData?.choiceContext) {
3107
+ return { error: `buildAllocationWithdrawCommand: failed to resolve Amulet disclosures: ${disclosuresResult?.message || disclosuresResult?.error || "missing choiceContext"}` };
3108
+ }
3109
+ }
3110
+ choiceContextData = resolvedData.choiceContext.choiceContextData || {};
3111
+ const values = choiceContextData.values;
3112
+ if (values && !values[DEFAULT_AMULET_CONTEXT_KEYS.expireLock]) {
3113
+ values[DEFAULT_AMULET_CONTEXT_KEYS.expireLock] = { tag: "AV_Bool", value: true };
3114
+ }
3115
+ disclosedContracts = (resolvedData.choiceContext.disclosedContracts || []).map(dc => ({
3116
+ templateId: dc.templateId, contractId: dc.contractId, createdEventBlob: dc.createdEventBlob, synchronizerId: dc.synchronizerId,
3117
+ }));
3118
+ } else {
3119
+ // Utility: build context from catalog data (no ledger/validator access needed)
3120
+ const instrumentDef = resolveInstrumentDefinition(assetId);
3121
+ const networkContracts = instrumentDef?.[config.NETWORK];
3122
+ if (!networkContracts) {
3123
+ return { error: `buildAllocationWithdrawCommand: no ${config.NETWORK} config for ${assetId} in instrument catalog` };
3124
+ }
3125
+ const instConfig = networkContracts.instrumentConfiguration;
3126
+ const allocFactory = networkContracts.allocationFactory;
3127
+ const synchronizerId = networkContracts.synchronizerId;
3128
+
3129
+ if (!instConfig?.contractId || !instConfig?.eventBlob) {
3130
+ return { error: `buildAllocationWithdrawCommand: instrumentConfiguration missing for ${assetId} on ${config.NETWORK}` };
3131
+ }
3132
+
3133
+ choiceContextData = {
3134
+ values: {
3135
+ [DEFAULT_UTILITY_CONTEXT_KEYS.instrumentConfiguration]: { tag: "AV_ContractId", value: instConfig.contractId },
3136
+ [DEFAULT_UTILITY_CONTEXT_KEYS.instrumentConfigurationPrefixed]: { tag: "AV_ContractId", value: instConfig.contractId },
3137
+ [DEFAULT_UTILITY_CONTEXT_KEYS.senderCredentials]: { tag: "AV_List", value: [] },
3138
+ [DEFAULT_UTILITY_CONTEXT_KEYS.senderCredentialsPrefixed]: { tag: "AV_List", value: [] },
3139
+ [DEFAULT_UTILITY_CONTEXT_KEYS.receiverCredentials]: { tag: "AV_List", value: [] },
3140
+ [DEFAULT_UTILITY_CONTEXT_KEYS.receiverCredentialsPrefixed]: { tag: "AV_List", value: [] },
3141
+ [DEFAULT_AMULET_CONTEXT_KEYS.expireLock]: { tag: "AV_Bool", value: true },
3142
+ },
3143
+ };
3144
+ disclosedContracts.push({
3145
+ templateId: instConfig.templateId || null,
3146
+ contractId: instConfig.contractId,
3147
+ createdEventBlob: instConfig.eventBlob,
3148
+ synchronizerId: synchronizerId,
3149
+ });
3150
+ if (allocFactory?.contractId && allocFactory?.eventBlob) {
3151
+ disclosedContracts.push({
3152
+ templateId: allocFactory.templateId || null,
3153
+ contractId: allocFactory.contractId,
3154
+ createdEventBlob: allocFactory.eventBlob,
3155
+ synchronizerId: synchronizerId,
3156
+ });
3157
+ }
3158
+ }
3159
+
3160
+ // --- Build one command per allocation CID ---
3161
+ const endpoint = `${config.VALIDATOR_API_URL}/v2/commands/submit-and-wait`;
3162
+ const commands = cids.map(cid => {
3163
+ const allocationCid = normalizeContractId(cid);
3164
+ const command = {
3165
+ commands: [{
3166
+ ExerciseCommand: {
3167
+ templateId: "#splice-api-token-allocation-v1:Splice.Api.Token.AllocationV1:Allocation",
3168
+ contractId: allocationCid,
3169
+ choice: "Allocation_Withdraw",
3170
+ choiceArgument: {
3171
+ extraArgs: {
3172
+ context: choiceContextData,
3173
+ meta: { values: {} },
3174
+ },
3175
+ },
3176
+ },
3177
+ }],
3178
+ commandId: randomUUID(),
3179
+ userId: userId || getUserId() || config.AUTH0_USER_ID || "temple",
3180
+ applicationId: "temple",
3181
+ actAs: [sender],
3182
+ disclosedContracts: [...disclosedContracts],
3183
+ };
3184
+ dedupeDisclosedContracts(command);
3185
+ return { command, endpoint };
3186
+ });
3187
+
3188
+ return { commands };
3189
+ }
3190
+
3014
3191
  /**
3015
3192
  * Get all balances for a party, grouped by asset type.
3016
3193
  * Returns Amulet, locked Amulet, and utility token holdings with totals.
@@ -4,3 +4,4 @@ export const instrumentIdToSymbol: Record<string, string>;
4
4
  export const supportedTradingPairs: Array<{ baseAsset: string; quoteAsset: string }>;
5
5
  export const supportedSymbols: Record<string, unknown>;
6
6
  export function normalizeAssetId(symbol: string): string;
7
+ export function resolveOnChainInstrumentId(symbol: string): string;
@@ -7,17 +7,18 @@ export const RegistrarInternalScheme = "RegistrarInternalScheme";
7
7
  // operator/provider define which party's AllocationFactory and InstrumentConfiguration to use
8
8
  // Holdings must have matching operator/provider to be compatible
9
9
  export const instrumentCatalog = {
10
- "Amulet": {
10
+ Amulet: {
11
11
  id: "Amulet",
12
+ aliases: ["CC"],
12
13
  kind: InstrumentKindAmulet,
13
14
  scheme: null,
14
15
  registrar: null,
15
16
  operator: null,
16
17
  provider: null,
17
18
  disclosureURL: null,
18
- requireCredentials: false
19
+ requireCredentials: false,
19
20
  },
20
- "USDCx": {
21
+ USDCx: {
21
22
  id: "USDCx",
22
23
  scheme: RegistrarInternalScheme,
23
24
  kind: InstrumentKindUtility,
@@ -25,29 +26,33 @@ export const instrumentCatalog = {
25
26
  requireCredentials: false,
26
27
  // TestNet contracts - from https://docs.digitalasset.com/usdc/xreserve/appendix-testnet-technical-setup.html
27
28
  testnet: {
28
- synchronizerId: "global-domain::1220f22a8b8f2d813c25b9a684dc4dd52b532a0174d8e73a13cdf2baabfff7518337",
29
- registrar: "decentralized-usdc-interchain-rep::122049e2af8a725bd19759320fc83c638e7718973eac189d8f201309c512d1ffec61",
30
- operator: "DigitalAsset-UtilityOperator::12202679f2bbe57d8cba9ef3cee847ac8239df0877105ab1f01a77d47477fdce1204",
31
- provider: "Bridge-Operator::12209d011ce250de439fefc35d16d1ab9d56fb99ccb24c18d798efb22352d533bcdb",
32
- registryAPI: "https://api.utilities.digitalasset-staging.com/api/token-standard/v0/registrars/decentralized-usdc-interchain-rep::122049e2af8a725bd19759320fc83c638e7718973eac189d8f201309c512d1ffec61/registry",
29
+ synchronizerId: "global-domain::1220f22a8b8f2d813c25b9a684dc4dd52b532a0174d8e73a13cdf2baabfff7518337",
30
+ registrar: "decentralized-usdc-interchain-rep::122049e2af8a725bd19759320fc83c638e7718973eac189d8f201309c512d1ffec61",
31
+ operator: "DigitalAsset-UtilityOperator::12202679f2bbe57d8cba9ef3cee847ac8239df0877105ab1f01a77d47477fdce1204",
32
+ provider: "Bridge-Operator::12209d011ce250de439fefc35d16d1ab9d56fb99ccb24c18d798efb22352d533bcdb",
33
+ registryAPI:
34
+ "https://api.utilities.digitalasset-staging.com/api/token-standard/v0/registrars/decentralized-usdc-interchain-rep::122049e2af8a725bd19759320fc83c638e7718973eac189d8f201309c512d1ffec61/registry",
33
35
  instrumentConfiguration: {
34
36
  contractId: "00042d3cc4195cd3e03407be8654e36cf1881aeaa771cc8e631f793999fd2df0fdca1112200ae23ea2ffdcf4841e345dde1cbc84cec7576989eeadb2c77e77e63501e6f581",
35
37
  templateId: "b4ae77b8c0c7faa8bc8bb048f035dfe3d85d3e36d4bafaa4cf59631ec635ddb2:Utility.Registry.V0.Configuration.Instrument:InstrumentConfiguration",
36
- eventBlob: "CgMyLjEStAkKRQAELTzEGVzT4DQHvoZU42zxiBrqp3HMjmMfeTmZ/S3w/coREiAK4j6i/9z0hB40Xd4cvITOx1dpie6tssd+d+Y1Aeb1gRITdXRpbGl0eS1yZWdpc3RyeS12MBqNAQpAYjRhZTc3YjhjMGM3ZmFhOGJjOGJiMDQ4ZjAzNWRmZTNkODVkM2UzNmQ0YmFmYWE0Y2Y1OTYzMWVjNjM1ZGRiMhIHVXRpbGl0eRIIUmVnaXN0cnkSAlYwEg1Db25maWd1cmF0aW9uEgpJbnN0cnVtZW50GhdJbnN0cnVtZW50Q29uZmlndXJhdGlvbiLsBGrpBApmCmQ6YkRpZ2l0YWxBc3NldC1VdGlsaXR5T3BlcmF0b3I6OjEyMjAyNjc5ZjJiYmU1N2Q4Y2JhOWVmM2NlZTg0N2FjODIzOWRmMDg3NzEwNWFiMWYwMWE3N2Q0NzQ3N2ZkY2UxMjA0ClkKVzpVQnJpZGdlLU9wZXJhdG9yOjoxMjIwOWQwMTFjZTI1MGRlNDM5ZmVmYzM1ZDE2ZDFhYjlkNTZmYjk5Y2NiMjRjMThkNzk4ZWZiMjIzNTJkNTMzYmNkYgprCmk6Z2RlY2VudHJhbGl6ZWQtdXNkYy1pbnRlcmNoYWluLXJlcDo6MTIyMDQ5ZTJhZjhhNzI1YmQxOTc1OTMyMGZjODNjNjM4ZTc3MTg5NzNlYWMxODlkOGYyMDEzMDljNTEyZDFmZmVjNjEKmwEKmAFqlQEKawppOmdkZWNlbnRyYWxpemVkLXVzZGMtaW50ZXJjaGFpbi1yZXA6OjEyMjA0OWUyYWY4YTcyNWJkMTk3NTkzMjBmYzgzYzYzOGU3NzE4OTczZWFjMTg5ZDhmMjAxMzA5YzUxMmQxZmZlYzYxCgkKB0IFVVNEQ3gKGwoZQhdSZWdpc3RyYXJJbnRlcm5hbFNjaGVtZQoECgJaAAqMAQqJAVqGAQqDAWqAAQpZClc6VUJyaWRnZS1PcGVyYXRvcjo6MTIyMDlkMDExY2UyNTBkZTQzOWZlZmMzNWQxNmQxYWI5ZDU2ZmI5OWNjYjI0YzE4ZDc5OGVmYjIyMzUyZDUzM2JjZGIKIwohWh8KHWobCg4KDEIKSXNJc3N1ZXJPZgoJCgdCBVVTREN4CgQKAloAKlVCcmlkZ2UtT3BlcmF0b3I6OjEyMjA5ZDAxMWNlMjUwZGU0MzlmZWZjMzVkMTZkMWFiOWQ1NmZiOTljY2IyNGMxOGQ3OThlZmIyMjM1MmQ1MzNiY2RiKmdkZWNlbnRyYWxpemVkLXVzZGMtaW50ZXJjaGFpbi1yZXA6OjEyMjA0OWUyYWY4YTcyNWJkMTk3NTkzMjBmYzgzYzYzOGU3NzE4OTczZWFjMTg5ZDhmMjAxMzA5YzUxMmQxZmZlYzYxMmJEaWdpdGFsQXNzZXQtVXRpbGl0eU9wZXJhdG9yOjoxMjIwMjY3OWYyYmJlNTdkOGNiYTllZjNjZWU4NDdhYzgyMzlkZjA4NzcxMDVhYjFmMDFhNzdkNDc0NzdmZGNlMTIwNDmUW0iuSUEGAEIqCiYKJAgBEiB22c8ZP/kGXXsITRrlviqwHjLXxwQvBCjqh0oYm2E5gRAe"
38
+ eventBlob:
39
+ "CgMyLjEStAkKRQAELTzEGVzT4DQHvoZU42zxiBrqp3HMjmMfeTmZ/S3w/coREiAK4j6i/9z0hB40Xd4cvITOx1dpie6tssd+d+Y1Aeb1gRITdXRpbGl0eS1yZWdpc3RyeS12MBqNAQpAYjRhZTc3YjhjMGM3ZmFhOGJjOGJiMDQ4ZjAzNWRmZTNkODVkM2UzNmQ0YmFmYWE0Y2Y1OTYzMWVjNjM1ZGRiMhIHVXRpbGl0eRIIUmVnaXN0cnkSAlYwEg1Db25maWd1cmF0aW9uEgpJbnN0cnVtZW50GhdJbnN0cnVtZW50Q29uZmlndXJhdGlvbiLsBGrpBApmCmQ6YkRpZ2l0YWxBc3NldC1VdGlsaXR5T3BlcmF0b3I6OjEyMjAyNjc5ZjJiYmU1N2Q4Y2JhOWVmM2NlZTg0N2FjODIzOWRmMDg3NzEwNWFiMWYwMWE3N2Q0NzQ3N2ZkY2UxMjA0ClkKVzpVQnJpZGdlLU9wZXJhdG9yOjoxMjIwOWQwMTFjZTI1MGRlNDM5ZmVmYzM1ZDE2ZDFhYjlkNTZmYjk5Y2NiMjRjMThkNzk4ZWZiMjIzNTJkNTMzYmNkYgprCmk6Z2RlY2VudHJhbGl6ZWQtdXNkYy1pbnRlcmNoYWluLXJlcDo6MTIyMDQ5ZTJhZjhhNzI1YmQxOTc1OTMyMGZjODNjNjM4ZTc3MTg5NzNlYWMxODlkOGYyMDEzMDljNTEyZDFmZmVjNjEKmwEKmAFqlQEKawppOmdkZWNlbnRyYWxpemVkLXVzZGMtaW50ZXJjaGFpbi1yZXA6OjEyMjA0OWUyYWY4YTcyNWJkMTk3NTkzMjBmYzgzYzYzOGU3NzE4OTczZWFjMTg5ZDhmMjAxMzA5YzUxMmQxZmZlYzYxCgkKB0IFVVNEQ3gKGwoZQhdSZWdpc3RyYXJJbnRlcm5hbFNjaGVtZQoECgJaAAqMAQqJAVqGAQqDAWqAAQpZClc6VUJyaWRnZS1PcGVyYXRvcjo6MTIyMDlkMDExY2UyNTBkZTQzOWZlZmMzNWQxNmQxYWI5ZDU2ZmI5OWNjYjI0YzE4ZDc5OGVmYjIyMzUyZDUzM2JjZGIKIwohWh8KHWobCg4KDEIKSXNJc3N1ZXJPZgoJCgdCBVVTREN4CgQKAloAKlVCcmlkZ2UtT3BlcmF0b3I6OjEyMjA5ZDAxMWNlMjUwZGU0MzlmZWZjMzVkMTZkMWFiOWQ1NmZiOTljY2IyNGMxOGQ3OThlZmIyMjM1MmQ1MzNiY2RiKmdkZWNlbnRyYWxpemVkLXVzZGMtaW50ZXJjaGFpbi1yZXA6OjEyMjA0OWUyYWY4YTcyNWJkMTk3NTkzMjBmYzgzYzYzOGU3NzE4OTczZWFjMTg5ZDhmMjAxMzA5YzUxMmQxZmZlYzYxMmJEaWdpdGFsQXNzZXQtVXRpbGl0eU9wZXJhdG9yOjoxMjIwMjY3OWYyYmJlNTdkOGNiYTllZjNjZWU4NDdhYzgyMzlkZjA4NzcxMDVhYjFmMDFhNzdkNDc0NzdmZGNlMTIwNDmUW0iuSUEGAEIqCiYKJAgBEiB22c8ZP/kGXXsITRrlviqwHjLXxwQvBCjqh0oYm2E5gRAe",
37
40
  },
38
41
  allocationFactory: {
39
42
  contractId: "00bede5fa4fd3d4f7ac250facd513ded42859076c2890a62b6ad148634c2fee59cca1112200101f0642c657e51f7f4a41e50502167fbbb4ea7b1d5552b9e6e1ab81b457d86",
40
43
  templateId: "8c335bb7d522489d71faf3eef046ad1a56f091b55b4f2d3086c7266afca1d647:Utility.Registry.App.V0.Service.AllocationFactory:AllocationFactory",
41
- eventBlob: "CgMyLjES/wYKRQC+3l+k/T1PesJQ+s1RPe1ChZB2wokKYratFIY0wv7lnMoREiABAfBkLGV+Uff0pB5QUCFn+7tOp7HVVSuebhq4G0V9hhIXdXRpbGl0eS1yZWdpc3RyeS1hcHAtdjAajQEKQDhjMzM1YmI3ZDUyMjQ4OWQ3MWZhZjNlZWYwNDZhZDFhNTZmMDkxYjU1YjRmMmQzMDg2YzcyNjZhZmNhMWQ2NDcSB1V0aWxpdHkSCFJlZ2lzdHJ5EgNBcHASAlYwEgdTZXJ2aWNlEhFBbGxvY2F0aW9uRmFjdG9yeRoRQWxsb2NhdGlvbkZhY3RvcnkiswJqsAIKWQpXOlVCcmlkZ2UtT3BlcmF0b3I6OjEyMjA5ZDAxMWNlMjUwZGU0MzlmZWZjMzVkMTZkMWFiOWQ1NmZiOTljY2IyNGMxOGQ3OThlZmIyMjM1MmQ1MzNiY2RiCmsKaTpnZGVjZW50cmFsaXplZC11c2RjLWludGVyY2hhaW4tcmVwOjoxMjIwNDllMmFmOGE3MjViZDE5NzU5MzIwZmM4M2M2MzhlNzcxODk3M2VhYzE4OWQ4ZjIwMTMwOWM1MTJkMWZmZWM2MQpmCmQ6YkRpZ2l0YWxBc3NldC1VdGlsaXR5T3BlcmF0b3I6OjEyMjAyNjc5ZjJiYmU1N2Q4Y2JhOWVmM2NlZTg0N2FjODIzOWRmMDg3NzEwNWFiMWYwMWE3N2Q0NzQ3N2ZkY2UxMjA0KlVCcmlkZ2UtT3BlcmF0b3I6OjEyMjA5ZDAxMWNlMjUwZGU0MzlmZWZjMzVkMTZkMWFiOWQ1NmZiOTljY2IyNGMxOGQ3OThlZmIyMjM1MmQ1MzNiY2RiKmdkZWNlbnRyYWxpemVkLXVzZGMtaW50ZXJjaGFpbi1yZXA6OjEyMjA0OWUyYWY4YTcyNWJkMTk3NTkzMjBmYzgzYzYzOGU3NzE4OTczZWFjMTg5ZDhmMjAxMzA5YzUxMmQxZmZlYzYxMmJEaWdpdGFsQXNzZXQtVXRpbGl0eU9wZXJhdG9yOjoxMjIwMjY3OWYyYmJlNTdkOGNiYTllZjNjZWU4NDdhYzgyMzlkZjA4NzcxMDVhYjFmMDFhNzdkNDc0NzdmZGNlMTIwNDmUW0iuSUEGAEIqCiYKJAgBEiCzbjLLZHXmAykV4okcMgzmrn1NLufmehZRjSn4JCCisBAe"
44
+ eventBlob:
45
+ "CgMyLjES/wYKRQC+3l+k/T1PesJQ+s1RPe1ChZB2wokKYratFIY0wv7lnMoREiABAfBkLGV+Uff0pB5QUCFn+7tOp7HVVSuebhq4G0V9hhIXdXRpbGl0eS1yZWdpc3RyeS1hcHAtdjAajQEKQDhjMzM1YmI3ZDUyMjQ4OWQ3MWZhZjNlZWYwNDZhZDFhNTZmMDkxYjU1YjRmMmQzMDg2YzcyNjZhZmNhMWQ2NDcSB1V0aWxpdHkSCFJlZ2lzdHJ5EgNBcHASAlYwEgdTZXJ2aWNlEhFBbGxvY2F0aW9uRmFjdG9yeRoRQWxsb2NhdGlvbkZhY3RvcnkiswJqsAIKWQpXOlVCcmlkZ2UtT3BlcmF0b3I6OjEyMjA5ZDAxMWNlMjUwZGU0MzlmZWZjMzVkMTZkMWFiOWQ1NmZiOTljY2IyNGMxOGQ3OThlZmIyMjM1MmQ1MzNiY2RiCmsKaTpnZGVjZW50cmFsaXplZC11c2RjLWludGVyY2hhaW4tcmVwOjoxMjIwNDllMmFmOGE3MjViZDE5NzU5MzIwZmM4M2M2MzhlNzcxODk3M2VhYzE4OWQ4ZjIwMTMwOWM1MTJkMWZmZWM2MQpmCmQ6YkRpZ2l0YWxBc3NldC1VdGlsaXR5T3BlcmF0b3I6OjEyMjAyNjc5ZjJiYmU1N2Q4Y2JhOWVmM2NlZTg0N2FjODIzOWRmMDg3NzEwNWFiMWYwMWE3N2Q0NzQ3N2ZkY2UxMjA0KlVCcmlkZ2UtT3BlcmF0b3I6OjEyMjA5ZDAxMWNlMjUwZGU0MzlmZWZjMzVkMTZkMWFiOWQ1NmZiOTljY2IyNGMxOGQ3OThlZmIyMjM1MmQ1MzNiY2RiKmdkZWNlbnRyYWxpemVkLXVzZGMtaW50ZXJjaGFpbi1yZXA6OjEyMjA0OWUyYWY4YTcyNWJkMTk3NTkzMjBmYzgzYzYzOGU3NzE4OTczZWFjMTg5ZDhmMjAxMzA5YzUxMmQxZmZlYzYxMmJEaWdpdGFsQXNzZXQtVXRpbGl0eU9wZXJhdG9yOjoxMjIwMjY3OWYyYmJlNTdkOGNiYTllZjNjZWU4NDdhYzgyMzlkZjA4NzcxMDVhYjFmMDFhNzdkNDc0NzdmZGNlMTIwNDmUW0iuSUEGAEIqCiYKJAgBEiCzbjLLZHXmAykV4okcMgzmrn1NLufmehZRjSn4JCCisBAe",
42
46
  },
43
47
  appRewardConfiguration: {
44
48
  contractId: "001a44911feb95bb29e7909419d29de2dfdb56b517a514089839c933e241c61b83ca111220a7779f5db25358272e05d13bba65c1a34cd7cc9740900ed9c8263e139ee6273d",
45
49
  templateId: "ed73d5b9ab717333f3dbd122de7be3156f8bf2614a67360c3dd61fc0135133fa:Utility.Registry.V0.Configuration.AppReward:AppRewardConfiguration",
46
- eventBlob: "CgMyLjES+wYKRQAaRJEf65W7KeeQlBnSneLf21a1F6UUCJg5yTPiQcYbg8oREiCnd59dslNYJy4F0Tu6ZcGjTNfMl0CQDtnIJj4TnuYnPRITdXRpbGl0eS1yZWdpc3RyeS12MBqLAQpAZWQ3M2Q1YjlhYjcxNzMzM2YzZGJkMTIyZGU3YmUzMTU2ZjhiZjI2MTRhNjczNjBjM2RkNjFmYzAxMzUxMzNmYRIHVXRpbGl0eRIIUmVnaXN0cnkSAlYwEg1Db25maWd1cmF0aW9uEglBcHBSZXdhcmQaFkFwcFJld2FyZENvbmZpZ3VyYXRpb24ingNqmwMKZgpkOmJEaWdpdGFsQXNzZXQtVXRpbGl0eU9wZXJhdG9yOjoxMjIwMjY3OWYyYmJlNTdkOGNiYTllZjNjZWU4NDdhYzgyMzlkZjA4NzcxMDVhYjFmMDFhNzdkNDc0NzdmZGNlMTIwNApZClc6VUJyaWRnZS1PcGVyYXRvcjo6MTIyMDlkMDExY2UyNTBkZTQzOWZlZmMzNWQxNmQxYWI5ZDU2ZmI5OWNjYjI0YzE4ZDc5OGVmYjIyMzUyZDUzM2JjZGIK1QEK0gFqzwEKTQpLOklEU086OjEyMjBmMjJhOGI4ZjJkODEzYzI1YjlhNjg0ZGM0ZGQ1MmI1MzJhMDE3NGQ4ZTczYTEzY2RmMmJhYWJmZmY3NTE4MzM3Cn4KfGp6CmYKZDpiRGlnaXRhbEFzc2V0LVV0aWxpdHlPcGVyYXRvcjo6MTIyMDI2NzlmMmJiZTU3ZDhjYmE5ZWYzY2VlODQ3YWM4MjM5ZGYwODc3MTA1YWIxZjAxYTc3ZDQ3NDc3ZmRjZTEyMDQKEAoOMgwwLjIwMDAwMDAwMDAqYkRpZ2l0YWxBc3NldC1VdGlsaXR5T3BlcmF0b3I6OjEyMjAyNjc5ZjJiYmU1N2Q4Y2JhOWVmM2NlZTg0N2FjODIzOWRmMDg3NzEwNWFiMWYwMWE3N2Q0NzQ3N2ZkY2UxMjA0MlVCcmlkZ2UtT3BlcmF0b3I6OjEyMjA5ZDAxMWNlMjUwZGU0MzlmZWZjMzVkMTZkMWFiOWQ1NmZiOTljY2IyNGMxOGQ3OThlZmIyMjM1MmQ1MzNiY2RiOZd2MhhIQQYAQioKJgokCAESIK5RtXRcXPi5fDeDJOgQyc3oD9b8hKHJP88dT+saFI+EEB4="
50
+ eventBlob:
51
+ "CgMyLjES+wYKRQAaRJEf65W7KeeQlBnSneLf21a1F6UUCJg5yTPiQcYbg8oREiCnd59dslNYJy4F0Tu6ZcGjTNfMl0CQDtnIJj4TnuYnPRITdXRpbGl0eS1yZWdpc3RyeS12MBqLAQpAZWQ3M2Q1YjlhYjcxNzMzM2YzZGJkMTIyZGU3YmUzMTU2ZjhiZjI2MTRhNjczNjBjM2RkNjFmYzAxMzUxMzNmYRIHVXRpbGl0eRIIUmVnaXN0cnkSAlYwEg1Db25maWd1cmF0aW9uEglBcHBSZXdhcmQaFkFwcFJld2FyZENvbmZpZ3VyYXRpb24ingNqmwMKZgpkOmJEaWdpdGFsQXNzZXQtVXRpbGl0eU9wZXJhdG9yOjoxMjIwMjY3OWYyYmJlNTdkOGNiYTllZjNjZWU4NDdhYzgyMzlkZjA4NzcxMDVhYjFmMDFhNzdkNDc0NzdmZGNlMTIwNApZClc6VUJyaWRnZS1PcGVyYXRvcjo6MTIyMDlkMDExY2UyNTBkZTQzOWZlZmMzNWQxNmQxYWI5ZDU2ZmI5OWNjYjI0YzE4ZDc5OGVmYjIyMzUyZDUzM2JjZGIK1QEK0gFqzwEKTQpLOklEU086OjEyMjBmMjJhOGI4ZjJkODEzYzI1YjlhNjg0ZGM0ZGQ1MmI1MzJhMDE3NGQ4ZTczYTEzY2RmMmJhYWJmZmY3NTE4MzM3Cn4KfGp6CmYKZDpiRGlnaXRhbEFzc2V0LVV0aWxpdHlPcGVyYXRvcjo6MTIyMDI2NzlmMmJiZTU3ZDhjYmE5ZWYzY2VlODQ3YWM4MjM5ZGYwODc3MTA1YWIxZjAxYTc3ZDQ3NDc3ZmRjZTEyMDQKEAoOMgwwLjIwMDAwMDAwMDAqYkRpZ2l0YWxBc3NldC1VdGlsaXR5T3BlcmF0b3I6OjEyMjAyNjc5ZjJiYmU1N2Q4Y2JhOWVmM2NlZTg0N2FjODIzOWRmMDg3NzEwNWFiMWYwMWE3N2Q0NzQ3N2ZkY2UxMjA0MlVCcmlkZ2UtT3BlcmF0b3I6OjEyMjA5ZDAxMWNlMjUwZGU0MzlmZWZjMzVkMTZkMWFiOWQ1NmZiOTljY2IyNGMxOGQ3OThlZmIyMjM1MmQ1MzNiY2RiOZd2MhhIQQYAQioKJgokCAESIK5RtXRcXPi5fDeDJOgQyc3oD9b8hKHJP88dT+saFI+EEB4=",
47
52
  },
48
53
  featuredAppRight: {
49
- contractId: "0038c29eaaa23a2f01b6cd583579008cbf596316191f7ceb4d1815a433649f15fcca1112208e4a3e81efa5c5b4797c6c126fd2178b7af408b903e7ae06acda2a4d66f15f9a"
50
- }
54
+ contractId: "0038c29eaaa23a2f01b6cd583579008cbf596316191f7ceb4d1815a433649f15fcca1112208e4a3e81efa5c5b4797c6c126fd2178b7af408b903e7ae06acda2a4d66f15f9a",
55
+ },
51
56
  },
52
57
  // MainNet contracts - from https://docs.digitalasset.com/usdc/xreserve/mainnet-technical-setup.html
53
58
  mainnet: {
@@ -55,30 +60,34 @@ export const instrumentCatalog = {
55
60
  registrar: "decentralized-usdc-interchain-rep::12208115f1e168dd7e792320be9c4ca720c751a02a3053c7606e1c1cd3dad9bf60ef",
56
61
  operator: "auth0_007c6643538f2eadd3e573dd05b9::12205bcc106efa0eaa7f18dc491e5c6f5fb9b0cc68dc110ae66f4ed6467475d7c78e",
57
62
  provider: "Bridge-Operator::1220c8448890a70e65f6906bd48d797ee6551f094e9e6a53e329fd5b2b549334f13f",
58
- registryAPI: "https://api.utilities.digitalasset.com/api/token-standard/v0/registrars/decentralized-usdc-interchain-rep::12208115f1e168dd7e792320be9c4ca720c751a02a3053c7606e1c1cd3dad9bf60ef/registry",
63
+ registryAPI:
64
+ "https://api.utilities.digitalasset.com/api/token-standard/v0/registrars/decentralized-usdc-interchain-rep::12208115f1e168dd7e792320be9c4ca720c751a02a3053c7606e1c1cd3dad9bf60ef/registry",
59
65
  instrumentConfiguration: {
60
66
  contractId: "002a23aed42edb51940f74f6fc5f7b8267c9192ab8e72296673420ffc4c4f22debca1112201d94617a63f11a4ce245498930752e56313d200b6a0976ee621f6add2788ba1b",
61
67
  templateId: "b4ae77b8c0c7faa8bc8bb048f035dfe3d85d3e36d4bafaa4cf59631ec635ddb2:Utility.Registry.V0.Configuration.Instrument:InstrumentConfiguration",
62
- eventBlob: "CgMyLjESwAkKRQAqI67ULttRlA909vxfe4JnyRkquOcilmc0IP/ExPIt68oREiAdlGF6Y/EaTOJFSYkwdS5WMT0gC2oJdu5iH2rdJ4i6GxITdXRpbGl0eS1yZWdpc3RyeS12MBqNAQpAYjRhZTc3YjhjMGM3ZmFhOGJjOGJiMDQ4ZjAzNWRmZTNkODVkM2UzNmQ0YmFmYWE0Y2Y1OTYzMWVjNjM1ZGRiMhIHVXRpbGl0eRIIUmVnaXN0cnkSAlYwEg1Db25maWd1cmF0aW9uEgpJbnN0cnVtZW50GhdJbnN0cnVtZW50Q29uZmlndXJhdGlvbiLyBGrvBApsCmo6aGF1dGgwXzAwN2M2NjQzNTM4ZjJlYWRkM2U1NzNkZDA1Yjk6OjEyMjA1YmNjMTA2ZWZhMGVhYTdmMThkYzQ5MWU1YzZmNWZiOWIwY2M2OGRjMTEwYWU2NmY0ZWQ2NDY3NDc1ZDdjNzhlClkKVzpVQnJpZGdlLU9wZXJhdG9yOjoxMjIwYzg0NDg4OTBhNzBlNjVmNjkwNmJkNDhkNzk3ZWU2NTUxZjA5NGU5ZTZhNTNlMzI5ZmQ1YjJiNTQ5MzM0ZjEzZgprCmk6Z2RlY2VudHJhbGl6ZWQtdXNkYy1pbnRlcmNoYWluLXJlcDo6MTIyMDgxMTVmMWUxNjhkZDdlNzkyMzIwYmU5YzRjYTcyMGM3NTFhMDJhMzA1M2M3NjA2ZTFjMWNkM2RhZDliZjYwZWYKmwEKmAFqlQEKawppOmdkZWNlbnRyYWxpemVkLXVzZGMtaW50ZXJjaGFpbi1yZXA6OjEyMjA4MTE1ZjFlMTY4ZGQ3ZTc5MjMyMGJlOWM0Y2E3MjBjNzUxYTAyYTMwNTNjNzYwNmUxYzFjZDNkYWQ5YmY2MGVmCgkKB0IFVVNEQ3gKGwoZQhdSZWdpc3RyYXJJbnRlcm5hbFNjaGVtZQoECgJaAAqMAQqJAVqGAQqDAWqAAQpZClc6VUJyaWRnZS1PcGVyYXRvcjo6MTIyMGM4NDQ4ODkwYTcwZTY1ZjY5MDZiZDQ4ZDc5N2VlNjU1MWYwOTRlOWU2YTUzZTMyOWZkNWIyYjU0OTMzNGYxM2YKIwohWh8KHWobCg4KDEIKSXNJc3N1ZXJPZgoJCgdCBVVTREN4CgQKAloAKlVCcmlkZ2UtT3BlcmF0b3I6OjEyMjBjODQ0ODg5MGE3MGU2NWY2OTA2YmQ0OGQ3OTdlZTY1NTFmMDk0ZTllNmE1M2UzMjlmZDViMmI1NDkzMzRmMTNmKmdkZWNlbnRyYWxpemVkLXVzZGMtaW50ZXJjaGFpbi1yZXA6OjEyMjA4MTE1ZjFlMTY4ZGQ3ZTc5MjMyMGJlOWM0Y2E3MjBjNzUxYTAyYTMwNTNjNzYwNmUxYzFjZDNkYWQ5YmY2MGVmMmhhdXRoMF8wMDdjNjY0MzUzOGYyZWFkZDNlNTczZGQwNWI5OjoxMjIwNWJjYzEwNmVmYTBlYWE3ZjE4ZGM0OTFlNWM2ZjVmYjliMGNjNjhkYzExMGFlNjZmNGVkNjQ2NzQ3NWQ3Yzc4ZTlPYpygnEEGAEIqCiYKJAgBEiDG2u5/5aFqKxIBQ1NhOOUuMloJWjlgtAJ9hY+R5wQVHRAe"
68
+ eventBlob:
69
+ "CgMyLjESwAkKRQAqI67ULttRlA909vxfe4JnyRkquOcilmc0IP/ExPIt68oREiAdlGF6Y/EaTOJFSYkwdS5WMT0gC2oJdu5iH2rdJ4i6GxITdXRpbGl0eS1yZWdpc3RyeS12MBqNAQpAYjRhZTc3YjhjMGM3ZmFhOGJjOGJiMDQ4ZjAzNWRmZTNkODVkM2UzNmQ0YmFmYWE0Y2Y1OTYzMWVjNjM1ZGRiMhIHVXRpbGl0eRIIUmVnaXN0cnkSAlYwEg1Db25maWd1cmF0aW9uEgpJbnN0cnVtZW50GhdJbnN0cnVtZW50Q29uZmlndXJhdGlvbiLyBGrvBApsCmo6aGF1dGgwXzAwN2M2NjQzNTM4ZjJlYWRkM2U1NzNkZDA1Yjk6OjEyMjA1YmNjMTA2ZWZhMGVhYTdmMThkYzQ5MWU1YzZmNWZiOWIwY2M2OGRjMTEwYWU2NmY0ZWQ2NDY3NDc1ZDdjNzhlClkKVzpVQnJpZGdlLU9wZXJhdG9yOjoxMjIwYzg0NDg4OTBhNzBlNjVmNjkwNmJkNDhkNzk3ZWU2NTUxZjA5NGU5ZTZhNTNlMzI5ZmQ1YjJiNTQ5MzM0ZjEzZgprCmk6Z2RlY2VudHJhbGl6ZWQtdXNkYy1pbnRlcmNoYWluLXJlcDo6MTIyMDgxMTVmMWUxNjhkZDdlNzkyMzIwYmU5YzRjYTcyMGM3NTFhMDJhMzA1M2M3NjA2ZTFjMWNkM2RhZDliZjYwZWYKmwEKmAFqlQEKawppOmdkZWNlbnRyYWxpemVkLXVzZGMtaW50ZXJjaGFpbi1yZXA6OjEyMjA4MTE1ZjFlMTY4ZGQ3ZTc5MjMyMGJlOWM0Y2E3MjBjNzUxYTAyYTMwNTNjNzYwNmUxYzFjZDNkYWQ5YmY2MGVmCgkKB0IFVVNEQ3gKGwoZQhdSZWdpc3RyYXJJbnRlcm5hbFNjaGVtZQoECgJaAAqMAQqJAVqGAQqDAWqAAQpZClc6VUJyaWRnZS1PcGVyYXRvcjo6MTIyMGM4NDQ4ODkwYTcwZTY1ZjY5MDZiZDQ4ZDc5N2VlNjU1MWYwOTRlOWU2YTUzZTMyOWZkNWIyYjU0OTMzNGYxM2YKIwohWh8KHWobCg4KDEIKSXNJc3N1ZXJPZgoJCgdCBVVTREN4CgQKAloAKlVCcmlkZ2UtT3BlcmF0b3I6OjEyMjBjODQ0ODg5MGE3MGU2NWY2OTA2YmQ0OGQ3OTdlZTY1NTFmMDk0ZTllNmE1M2UzMjlmZDViMmI1NDkzMzRmMTNmKmdkZWNlbnRyYWxpemVkLXVzZGMtaW50ZXJjaGFpbi1yZXA6OjEyMjA4MTE1ZjFlMTY4ZGQ3ZTc5MjMyMGJlOWM0Y2E3MjBjNzUxYTAyYTMwNTNjNzYwNmUxYzFjZDNkYWQ5YmY2MGVmMmhhdXRoMF8wMDdjNjY0MzUzOGYyZWFkZDNlNTczZGQwNWI5OjoxMjIwNWJjYzEwNmVmYTBlYWE3ZjE4ZGM0OTFlNWM2ZjVmYjliMGNjNjhkYzExMGFlNjZmNGVkNjQ2NzQ3NWQ3Yzc4ZTlPYpygnEEGAEIqCiYKJAgBEiDG2u5/5aFqKxIBQ1NhOOUuMloJWjlgtAJ9hY+R5wQVHRAe",
63
70
  },
64
71
  allocationFactory: {
65
72
  contractId: "006289e882123613ea96d71fad9cc38a529e613a8d4b550ef6a0422383e1925934ca11122003bc3af7d468f09465fa72db6182b63e349804e430a81eeeffa9076f5099f796",
66
73
  templateId: "8c335bb7d522489d71faf3eef046ad1a56f091b55b4f2d3086c7266afca1d647:Utility.Registry.App.V0.Service.AllocationFactory:AllocationFactory",
67
- eventBlob: "CgMyLjESiwcKRQBiieiCEjYT6pbXH62cw4pSnmE6jUtVDvagQiOD4ZJZNMoREiADvDr31GjwlGX6ctthgrY+NJgE5DCoHu7/qQdvUJn3lhIXdXRpbGl0eS1yZWdpc3RyeS1hcHAtdjAajQEKQDhjMzM1YmI3ZDUyMjQ4OWQ3MWZhZjNlZWYwNDZhZDFhNTZmMDkxYjU1YjRmMmQzMDg2YzcyNjZhZmNhMWQ2NDcSB1V0aWxpdHkSCFJlZ2lzdHJ5EgNBcHASAlYwEgdTZXJ2aWNlEhFBbGxvY2F0aW9uRmFjdG9yeRoRQWxsb2NhdGlvbkZhY3RvcnkiuQJqtgIKWQpXOlVCcmlkZ2UtT3BlcmF0b3I6OjEyMjBjODQ0ODg5MGE3MGU2NWY2OTA2YmQ0OGQ3OTdlZTY1NTFmMDk0ZTllNmE1M2UzMjlmZDViMmI1NDkzMzRmMTNmCmsKaTpnZGVjZW50cmFsaXplZC11c2RjLWludGVyY2hhaW4tcmVwOjoxMjIwODExNWYxZTE2OGRkN2U3OTIzMjBiZTljNGNhNzIwYzc1MWEwMmEzMDUzYzc2MDZlMWMxY2QzZGFkOWJmNjBlZgpsCmo6aGF1dGgwXzAwN2M2NjQzNTM4ZjJlYWRkM2U1NzNkZDA1Yjk6OjEyMjA1YmNjMTA2ZWZhMGVhYTdmMThkYzQ5MWU1YzZmNWZiOWIwY2M2OGRjMTEwYWU2NmY0ZWQ2NDY3NDc1ZDdjNzhlKlVCcmlkZ2UtT3BlcmF0b3I6OjEyMjBjODQ0ODg5MGE3MGU2NWY2OTA2YmQ0OGQ3OTdlZTY1NTFmMDk0ZTllNmE1M2UzMjlmZDViMmI1NDkzMzRmMTNmKmdkZWNlbnRyYWxpemVkLXVzZGMtaW50ZXJjaGFpbi1yZXA6OjEyMjA4MTE1ZjFlMTY4ZGQ3ZTc5MjMyMGJlOWM0Y2E3MjBjNzUxYTAyYTMwNTNjNzYwNmUxYzFjZDNkYWQ5YmY2MGVmMmhhdXRoMF8wMDdjNjY0MzUzOGYyZWFkZDNlNTczZGQwNWI5OjoxMjIwNWJjYzEwNmVmYTBlYWE3ZjE4ZGM0OTFlNWM2ZjVmYjliMGNjNjhkYzExMGFlNjZmNGVkNjQ2NzQ3NWQ3Yzc4ZTlPYpygnEEGAEIqCiYKJAgBEiC7t2lHB3NuKxVhVA0EL5T+JGl5YJ6hVSv8wD+vxG3/+BAe"
74
+ eventBlob:
75
+ "CgMyLjESiwcKRQBiieiCEjYT6pbXH62cw4pSnmE6jUtVDvagQiOD4ZJZNMoREiADvDr31GjwlGX6ctthgrY+NJgE5DCoHu7/qQdvUJn3lhIXdXRpbGl0eS1yZWdpc3RyeS1hcHAtdjAajQEKQDhjMzM1YmI3ZDUyMjQ4OWQ3MWZhZjNlZWYwNDZhZDFhNTZmMDkxYjU1YjRmMmQzMDg2YzcyNjZhZmNhMWQ2NDcSB1V0aWxpdHkSCFJlZ2lzdHJ5EgNBcHASAlYwEgdTZXJ2aWNlEhFBbGxvY2F0aW9uRmFjdG9yeRoRQWxsb2NhdGlvbkZhY3RvcnkiuQJqtgIKWQpXOlVCcmlkZ2UtT3BlcmF0b3I6OjEyMjBjODQ0ODg5MGE3MGU2NWY2OTA2YmQ0OGQ3OTdlZTY1NTFmMDk0ZTllNmE1M2UzMjlmZDViMmI1NDkzMzRmMTNmCmsKaTpnZGVjZW50cmFsaXplZC11c2RjLWludGVyY2hhaW4tcmVwOjoxMjIwODExNWYxZTE2OGRkN2U3OTIzMjBiZTljNGNhNzIwYzc1MWEwMmEzMDUzYzc2MDZlMWMxY2QzZGFkOWJmNjBlZgpsCmo6aGF1dGgwXzAwN2M2NjQzNTM4ZjJlYWRkM2U1NzNkZDA1Yjk6OjEyMjA1YmNjMTA2ZWZhMGVhYTdmMThkYzQ5MWU1YzZmNWZiOWIwY2M2OGRjMTEwYWU2NmY0ZWQ2NDY3NDc1ZDdjNzhlKlVCcmlkZ2UtT3BlcmF0b3I6OjEyMjBjODQ0ODg5MGE3MGU2NWY2OTA2YmQ0OGQ3OTdlZTY1NTFmMDk0ZTllNmE1M2UzMjlmZDViMmI1NDkzMzRmMTNmKmdkZWNlbnRyYWxpemVkLXVzZGMtaW50ZXJjaGFpbi1yZXA6OjEyMjA4MTE1ZjFlMTY4ZGQ3ZTc5MjMyMGJlOWM0Y2E3MjBjNzUxYTAyYTMwNTNjNzYwNmUxYzFjZDNkYWQ5YmY2MGVmMmhhdXRoMF8wMDdjNjY0MzUzOGYyZWFkZDNlNTczZGQwNWI5OjoxMjIwNWJjYzEwNmVmYTBlYWE3ZjE4ZGM0OTFlNWM2ZjVmYjliMGNjNjhkYzExMGFlNjZmNGVkNjQ2NzQ3NWQ3Yzc4ZTlPYpygnEEGAEIqCiYKJAgBEiC7t2lHB3NuKxVhVA0EL5T+JGl5YJ6hVSv8wD+vxG3/+BAe",
68
76
  },
69
77
  appRewardConfiguration: {
70
78
  contractId: "00ad54961b99aa48d545fe0d74a6b56737e8cb0d7935e831ee1afce0619a4a82bfca1112202c765d54dfcc7a1db8d0bbb5f06951ceb4562a1acaaf74de13c6d05ebe4a64c4",
71
79
  templateId: "ed73d5b9ab717333f3dbd122de7be3156f8bf2614a67360c3dd61fc0135133fa:Utility.Registry.V0.Configuration.AppReward:AppRewardConfiguration",
72
- eventBlob: "CgMyLjESkAcKRQCtVJYbmapI1UX+DXSmtWc36MsNeTXoMe4a/OBhmkqCv8oREiAsdl1U38x6HbjQu7XwaVHOtFYqGsqvdN4TxtBevkpkxBITdXRpbGl0eS1yZWdpc3RyeS12MBqLAQpAZWQ3M2Q1YjlhYjcxNzMzM2YzZGJkMTIyZGU3YmUzMTU2ZjhiZjI2MTRhNjczNjBjM2RkNjFmYzAxMzUxMzNmYRIHVXRpbGl0eRIIUmVnaXN0cnkSAlYwEg1Db25maWd1cmF0aW9uEglBcHBSZXdhcmQaFkFwcFJld2FyZENvbmZpZ3VyYXRpb24irQNqqgMKbApqOmhhdXRoMF8wMDdjNjY0MzUzOGYyZWFkZDNlNTczZGQwNWI5OjoxMjIwNWJjYzEwNmVmYTBlYWE3ZjE4ZGM0OTFlNWM2ZjVmYjliMGNjNjhkYzExMGFlNjZmNGVkNjQ2NzQ3NWQ3Yzc4ZQpZClc6VUJyaWRnZS1PcGVyYXRvcjo6MTIyMGM4NDQ4ODkwYTcwZTY1ZjY5MDZiZDQ4ZDc5N2VlNjU1MWYwOTRlOWU2YTUzZTMyOWZkNWIyYjU0OTMzNGYxM2YK3gEK2wFq2AEKTQpLOklEU086OjEyMjBiMTQzMWVmMjE3MzQyZGI0NGQ1MTZiYjliZWZkZTgwMmJlN2Q4ODk5NjM3ZDI5MDg5NWZhNTg4ODBmMTlhY2NjCoYBCoMBaoABCmwKajpoYXV0aDBfMDA3YzY2NDM1MzhmMmVhZGQzZTU3M2RkMDViOTo6MTIyMDViY2MxMDZlZmEwZWFhN2YxOGRjNDkxZTVjNmY1ZmI5YjBjYzY4ZGMxMTBhZTY2ZjRlZDY0Njc0NzVkN2M3OGUKEAoOMgwwLjAwMDAwMDAwMDAqaGF1dGgwXzAwN2M2NjQzNTM4ZjJlYWRkM2U1NzNkZDA1Yjk6OjEyMjA1YmNjMTA2ZWZhMGVhYTdmMThkYzQ5MWU1YzZmNWZiOWIwY2M2OGRjMTEwYWU2NmY0ZWQ2NDY3NDc1ZDdjNzhlMlVCcmlkZ2UtT3BlcmF0b3I6OjEyMjBjODQ0ODg5MGE3MGU2NWY2OTA2YmQ0OGQ3OTdlZTY1NTFmMDk0ZTllNmE1M2UzMjlmZDViMmI1NDkzMzRmMTNmOcSAY/8mQgYAQioKJgokCAESIK+PKFSW8cBTvl2P8GALcq6BORe5200JDD0n1z+pnQylEB4="
80
+ eventBlob:
81
+ "CgMyLjESkAcKRQCtVJYbmapI1UX+DXSmtWc36MsNeTXoMe4a/OBhmkqCv8oREiAsdl1U38x6HbjQu7XwaVHOtFYqGsqvdN4TxtBevkpkxBITdXRpbGl0eS1yZWdpc3RyeS12MBqLAQpAZWQ3M2Q1YjlhYjcxNzMzM2YzZGJkMTIyZGU3YmUzMTU2ZjhiZjI2MTRhNjczNjBjM2RkNjFmYzAxMzUxMzNmYRIHVXRpbGl0eRIIUmVnaXN0cnkSAlYwEg1Db25maWd1cmF0aW9uEglBcHBSZXdhcmQaFkFwcFJld2FyZENvbmZpZ3VyYXRpb24irQNqqgMKbApqOmhhdXRoMF8wMDdjNjY0MzUzOGYyZWFkZDNlNTczZGQwNWI5OjoxMjIwNWJjYzEwNmVmYTBlYWE3ZjE4ZGM0OTFlNWM2ZjVmYjliMGNjNjhkYzExMGFlNjZmNGVkNjQ2NzQ3NWQ3Yzc4ZQpZClc6VUJyaWRnZS1PcGVyYXRvcjo6MTIyMGM4NDQ4ODkwYTcwZTY1ZjY5MDZiZDQ4ZDc5N2VlNjU1MWYwOTRlOWU2YTUzZTMyOWZkNWIyYjU0OTMzNGYxM2YK3gEK2wFq2AEKTQpLOklEU086OjEyMjBiMTQzMWVmMjE3MzQyZGI0NGQ1MTZiYjliZWZkZTgwMmJlN2Q4ODk5NjM3ZDI5MDg5NWZhNTg4ODBmMTlhY2NjCoYBCoMBaoABCmwKajpoYXV0aDBfMDA3YzY2NDM1MzhmMmVhZGQzZTU3M2RkMDViOTo6MTIyMDViY2MxMDZlZmEwZWFhN2YxOGRjNDkxZTVjNmY1ZmI5YjBjYzY4ZGMxMTBhZTY2ZjRlZDY0Njc0NzVkN2M3OGUKEAoOMgwwLjAwMDAwMDAwMDAqaGF1dGgwXzAwN2M2NjQzNTM4ZjJlYWRkM2U1NzNkZDA1Yjk6OjEyMjA1YmNjMTA2ZWZhMGVhYTdmMThkYzQ5MWU1YzZmNWZiOWIwY2M2OGRjMTEwYWU2NmY0ZWQ2NDY3NDc1ZDdjNzhlMlVCcmlkZ2UtT3BlcmF0b3I6OjEyMjBjODQ0ODg5MGE3MGU2NWY2OTA2YmQ0OGQ3OTdlZTY1NTFmMDk0ZTllNmE1M2UzMjlmZDViMmI1NDkzMzRmMTNmOcSAY/8mQgYAQioKJgokCAESIK+PKFSW8cBTvl2P8GALcq6BORe5200JDD0n1z+pnQylEB4=",
73
82
  },
74
83
  featuredAppRight: {
75
- contractId: "0012ec4c4b1fde3234437ea4e87f6e09f672ae5a9dd2ab2b93f19a65da1aafd8dbca111220efbebbc1ca3c63a0babbac1d566668d26117418670021cf2b9be29d24db0245e"
76
- }
77
- }
84
+ contractId: "0012ec4c4b1fde3234437ea4e87f6e09f672ae5a9dd2ab2b93f19a65da1aafd8dbca111220efbebbc1ca3c63a0babbac1d566668d26117418670021cf2b9be29d24db0245e",
85
+ },
86
+ },
78
87
  },
79
88
  // CBTC (Canton Bitcoin) - External token from DA
80
89
  // Source: https://docs.dev.sync.global/app_dev/token_standard/index.html#api-references
81
- "CBTC": {
90
+ CBTC: {
82
91
  id: "CBTC",
83
92
  scheme: RegistrarInternalScheme,
84
93
  kind: InstrumentKindUtility,
@@ -94,19 +103,22 @@ export const instrumentCatalog = {
94
103
  instrumentConfiguration: {
95
104
  contractId: "00dcac0a5a71d77dbfa978ea73f9c5b72daf9d26ba0e9b1d8584190358c94581f8ca111220c183c4851805be4cb8d5c5a2f37c6394aaf95400982453d0584c1fdf6c4950ce",
96
105
  templateId: "ed73d5b9ab717333f3dbd122de7be3156f8bf2614a67360c3dd61fc0135133fa:Utility.Registry.V0.Configuration.Instrument:InstrumentConfiguration",
97
- eventBlob: "CgMyLjESlwgKRQDcrApacdd9v6l46nP5xbctr50mug6bHYWEGQNYyUWB+MoREiDBg8SFGAW+TLjVxaLzfGOUqvlUAJgkU9BYTB/fbElQzhITdXRpbGl0eS1yZWdpc3RyeS12MBqNAQpAZWQ3M2Q1YjlhYjcxNzMzM2YzZGJkMTIyZGU3YmUzMTU2ZjhiZjI2MTRhNjczNjBjM2RkNjFmYzAxMzUxMzNmYRIHVXRpbGl0eRIIUmVnaXN0cnkSAlYwEg1Db25maWd1cmF0aW9uEgpJbnN0cnVtZW50GhdJbnN0cnVtZW50Q29uZmlndXJhdGlvbiK7BGq4BApmCmQ6YkRpZ2l0YWxBc3NldC1VdGlsaXR5T3BlcmF0b3I6OjEyMjAyNjc5ZjJiYmU1N2Q4Y2JhOWVmM2NlZTg0N2FjODIzOWRmMDg3NzEwNWFiMWYwMWE3N2Q0NzQ3N2ZkY2UxMjA0ClYKVDpSY2J0Yy1uZXR3b3JrOjoxMjIwMWIxNzQxYjYzZTI0OTRlNDIxNGNmMGJlZGMzZDVhMjI0ZGE1M2IzYmY0ZDc2ZGJhNDY4ZjhlOTdlYjE1NTA4ZgpWClQ6UmNidGMtbmV0d29yazo6MTIyMDFiMTc0MWI2M2UyNDk0ZTQyMTRjZjBiZWRjM2Q1YTIyNGRhNTNiM2JmNGQ3NmRiYTQ2OGY4ZTk3ZWIxNTUwOGYKhAEKgQFqfwpWClQ6UmNidGMtbmV0d29yazo6MTIyMDFiMTc0MWI2M2UyNDk0ZTQyMTRjZjBiZWRjM2Q1YTIyNGRhNTNiM2JmNGQ3NmRiYTQ2OGY4ZTk3ZWIxNTUwOGYKCAoGQgRDQlRDChsKGUIXUmVnaXN0cmFySW50ZXJuYWxTY2hlbWUKigEKhwFahAEKgQFqfwpWClQ6UmNidGMtbmV0d29yazo6MTIyMDFiMTc0MWI2M2UyNDk0ZTQyMTRjZjBiZWRjM2Q1YTIyNGRhNTNiM2JmNGQ3NmRiYTQ2OGY4ZTk3ZWIxNTUwOGYKCAoGQgRDQlRDChsKGUIXUmVnaXN0cmFySW50ZXJuYWxTY2hlbWUKBAoCWgAKBAoCWgAqUmNidGMtbmV0d29yazo6MTIyMDFiMTc0MWI2M2UyNDk0ZTQyMTRjZjBiZWRjM2Q1YTIyNGRhNTNiM2JmNGQ3NmRiYTQ2OGY4ZTk3ZWIxNTUwOGYyYkRpZ2l0YWxBc3NldC1VdGlsaXR5T3BlcmF0b3I6OjEyMjAyNjc5ZjJiYmU1N2Q4Y2JhOWVmM2NlZTg0N2FjODIzOWRmMDg3NzEwNWFiMWYwMWE3N2Q0NzQ3N2ZkY2UxMjA0OeYEhmj6QQYAQioKJgokCAESIIFZLFl5oc2bXlpAQxjdZkgA1P4j2ga+zJIx0DdseGTYEB4="
106
+ eventBlob:
107
+ "CgMyLjESlwgKRQDcrApacdd9v6l46nP5xbctr50mug6bHYWEGQNYyUWB+MoREiDBg8SFGAW+TLjVxaLzfGOUqvlUAJgkU9BYTB/fbElQzhITdXRpbGl0eS1yZWdpc3RyeS12MBqNAQpAZWQ3M2Q1YjlhYjcxNzMzM2YzZGJkMTIyZGU3YmUzMTU2ZjhiZjI2MTRhNjczNjBjM2RkNjFmYzAxMzUxMzNmYRIHVXRpbGl0eRIIUmVnaXN0cnkSAlYwEg1Db25maWd1cmF0aW9uEgpJbnN0cnVtZW50GhdJbnN0cnVtZW50Q29uZmlndXJhdGlvbiK7BGq4BApmCmQ6YkRpZ2l0YWxBc3NldC1VdGlsaXR5T3BlcmF0b3I6OjEyMjAyNjc5ZjJiYmU1N2Q4Y2JhOWVmM2NlZTg0N2FjODIzOWRmMDg3NzEwNWFiMWYwMWE3N2Q0NzQ3N2ZkY2UxMjA0ClYKVDpSY2J0Yy1uZXR3b3JrOjoxMjIwMWIxNzQxYjYzZTI0OTRlNDIxNGNmMGJlZGMzZDVhMjI0ZGE1M2IzYmY0ZDc2ZGJhNDY4ZjhlOTdlYjE1NTA4ZgpWClQ6UmNidGMtbmV0d29yazo6MTIyMDFiMTc0MWI2M2UyNDk0ZTQyMTRjZjBiZWRjM2Q1YTIyNGRhNTNiM2JmNGQ3NmRiYTQ2OGY4ZTk3ZWIxNTUwOGYKhAEKgQFqfwpWClQ6UmNidGMtbmV0d29yazo6MTIyMDFiMTc0MWI2M2UyNDk0ZTQyMTRjZjBiZWRjM2Q1YTIyNGRhNTNiM2JmNGQ3NmRiYTQ2OGY4ZTk3ZWIxNTUwOGYKCAoGQgRDQlRDChsKGUIXUmVnaXN0cmFySW50ZXJuYWxTY2hlbWUKigEKhwFahAEKgQFqfwpWClQ6UmNidGMtbmV0d29yazo6MTIyMDFiMTc0MWI2M2UyNDk0ZTQyMTRjZjBiZWRjM2Q1YTIyNGRhNTNiM2JmNGQ3NmRiYTQ2OGY4ZTk3ZWIxNTUwOGYKCAoGQgRDQlRDChsKGUIXUmVnaXN0cmFySW50ZXJuYWxTY2hlbWUKBAoCWgAKBAoCWgAqUmNidGMtbmV0d29yazo6MTIyMDFiMTc0MWI2M2UyNDk0ZTQyMTRjZjBiZWRjM2Q1YTIyNGRhNTNiM2JmNGQ3NmRiYTQ2OGY4ZTk3ZWIxNTUwOGYyYkRpZ2l0YWxBc3NldC1VdGlsaXR5T3BlcmF0b3I6OjEyMjAyNjc5ZjJiYmU1N2Q4Y2JhOWVmM2NlZTg0N2FjODIzOWRmMDg3NzEwNWFiMWYwMWE3N2Q0NzQ3N2ZkY2UxMjA0OeYEhmj6QQYAQioKJgokCAESIIFZLFl5oc2bXlpAQxjdZkgA1P4j2ga+zJIx0DdseGTYEB4=",
98
108
  },
99
109
  allocationFactory: {
100
110
  contractId: "00c956e318c52f8aa0b6acebd0bf62cb699df4627b5565fb332c79202479a36bafca111220cc0e27fb3e6fcdfa2cad3b1dd4843348ce60d04f6daacccecab981523620b7da",
101
111
  templateId: "170929b11d5f0ed1385f890f42887c31ff7e289c0f4bc482aff193a7173d576c:Utility.Registry.App.V0.Service.AllocationFactory:AllocationFactory",
102
- eventBlob: "CgMyLjES+wUKRQDJVuMYxS+KoLas69C/YstpnfRie1Vl+zMseSAkeaNrr8oREiDMDif7Pm/N+iytOx3UhDNIzmDQT22qzM7KuYFSNiC32hIXdXRpbGl0eS1yZWdpc3RyeS1hcHAtdjAajQEKQDE3MDkyOWIxMWQ1ZjBlZDEzODVmODkwZjQyODg3YzMxZmY3ZTI4OWMwZjRiYzQ4MmFmZjE5M2E3MTczZDU3NmMSB1V0aWxpdHkSCFJlZ2lzdHJ5EgNBcHASAlYwEgdTZXJ2aWNlEhFBbGxvY2F0aW9uRmFjdG9yeRoRQWxsb2NhdGlvbkZhY3RvcnkimwJqmAIKVgpUOlJjYnRjLW5ldHdvcms6OjEyMjAxYjE3NDFiNjNlMjQ5NGU0MjE0Y2YwYmVkYzNkNWEyMjRkYTUzYjNiZjRkNzZkYmE0NjhmOGU5N2ViMTU1MDhmClYKVDpSY2J0Yy1uZXR3b3JrOjoxMjIwMWIxNzQxYjYzZTI0OTRlNDIxNGNmMGJlZGMzZDVhMjI0ZGE1M2IzYmY0ZDc2ZGJhNDY4ZjhlOTdlYjE1NTA4ZgpmCmQ6YkRpZ2l0YWxBc3NldC1VdGlsaXR5T3BlcmF0b3I6OjEyMjAyNjc5ZjJiYmU1N2Q4Y2JhOWVmM2NlZTg0N2FjODIzOWRmMDg3NzEwNWFiMWYwMWE3N2Q0NzQ3N2ZkY2UxMjA0KlJjYnRjLW5ldHdvcms6OjEyMjAxYjE3NDFiNjNlMjQ5NGU0MjE0Y2YwYmVkYzNkNWEyMjRkYTUzYjNiZjRkNzZkYmE0NjhmOGU5N2ViMTU1MDhmMmJEaWdpdGFsQXNzZXQtVXRpbGl0eU9wZXJhdG9yOjoxMjIwMjY3OWYyYmJlNTdkOGNiYTllZjNjZWU4NDdhYzgyMzlkZjA4NzcxMDVhYjFmMDFhNzdkNDc0NzdmZGNlMTIwNDnmBIZo+kEGAEIqCiYKJAgBEiA28r69uEQ4mN310dzSIOTHLYgxmVinL9FuA/XwQLfheRAe"
112
+ eventBlob:
113
+ "CgMyLjES+wUKRQDJVuMYxS+KoLas69C/YstpnfRie1Vl+zMseSAkeaNrr8oREiDMDif7Pm/N+iytOx3UhDNIzmDQT22qzM7KuYFSNiC32hIXdXRpbGl0eS1yZWdpc3RyeS1hcHAtdjAajQEKQDE3MDkyOWIxMWQ1ZjBlZDEzODVmODkwZjQyODg3YzMxZmY3ZTI4OWMwZjRiYzQ4MmFmZjE5M2E3MTczZDU3NmMSB1V0aWxpdHkSCFJlZ2lzdHJ5EgNBcHASAlYwEgdTZXJ2aWNlEhFBbGxvY2F0aW9uRmFjdG9yeRoRQWxsb2NhdGlvbkZhY3RvcnkimwJqmAIKVgpUOlJjYnRjLW5ldHdvcms6OjEyMjAxYjE3NDFiNjNlMjQ5NGU0MjE0Y2YwYmVkYzNkNWEyMjRkYTUzYjNiZjRkNzZkYmE0NjhmOGU5N2ViMTU1MDhmClYKVDpSY2J0Yy1uZXR3b3JrOjoxMjIwMWIxNzQxYjYzZTI0OTRlNDIxNGNmMGJlZGMzZDVhMjI0ZGE1M2IzYmY0ZDc2ZGJhNDY4ZjhlOTdlYjE1NTA4ZgpmCmQ6YkRpZ2l0YWxBc3NldC1VdGlsaXR5T3BlcmF0b3I6OjEyMjAyNjc5ZjJiYmU1N2Q4Y2JhOWVmM2NlZTg0N2FjODIzOWRmMDg3NzEwNWFiMWYwMWE3N2Q0NzQ3N2ZkY2UxMjA0KlJjYnRjLW5ldHdvcms6OjEyMjAxYjE3NDFiNjNlMjQ5NGU0MjE0Y2YwYmVkYzNkNWEyMjRkYTUzYjNiZjRkNzZkYmE0NjhmOGU5N2ViMTU1MDhmMmJEaWdpdGFsQXNzZXQtVXRpbGl0eU9wZXJhdG9yOjoxMjIwMjY3OWYyYmJlNTdkOGNiYTllZjNjZWU4NDdhYzgyMzlkZjA4NzcxMDVhYjFmMDFhNzdkNDc0NzdmZGNlMTIwNDnmBIZo+kEGAEIqCiYKJAgBEiA28r69uEQ4mN310dzSIOTHLYgxmVinL9FuA/XwQLfheRAe",
103
114
  },
104
115
  // AppRewardConfig
105
116
  appRewardConfiguration: {
106
117
  contractId: "0054a69e77fdea17d1c56cf3a64991c37dea34b6568c82db2190446221f6584cb5ca1112201ea595d9349c8644d09b751a4e968d784a51868bdde54a224be94736d09c6e67",
107
118
  templateId: "ed73d5b9ab717333f3dbd122de7be3156f8bf2614a67360c3dd61fc0135133fa:Utility.Registry.V0.Configuration.AppReward:AppRewardConfiguration",
108
- eventBlob: "CgMyLjES9QYKRQBUpp53/eoX0cVs86ZJkcN96jS2VoyC2yGQRGIh9lhMtcoREiAepZXZNJyGRNCbdRpOlo14SlGGi93lSiJL6Uc20JxuZxITdXRpbGl0eS1yZWdpc3RyeS12MBqLAQpAZWQ3M2Q1YjlhYjcxNzMzM2YzZGJkMTIyZGU3YmUzMTU2ZjhiZjI2MTRhNjczNjBjM2RkNjFmYzAxMzUxMzNmYRIHVXRpbGl0eRIIUmVnaXN0cnkSAlYwEg1Db25maWd1cmF0aW9uEglBcHBSZXdhcmQaFkFwcFJld2FyZENvbmZpZ3VyYXRpb24imwNqmAMKZgpkOmJEaWdpdGFsQXNzZXQtVXRpbGl0eU9wZXJhdG9yOjoxMjIwMjY3OWYyYmJlNTdkOGNiYTllZjNjZWU4NDdhYzgyMzlkZjA4NzcxMDVhYjFmMDFhNzdkNDc0NzdmZGNlMTIwNApWClQ6UmNidGMtbmV0d29yazo6MTIyMDFiMTc0MWI2M2UyNDk0ZTQyMTRjZjBiZWRjM2Q1YTIyNGRhNTNiM2JmNGQ3NmRiYTQ2OGY4ZTk3ZWIxNTUwOGYK1QEK0gFqzwEKTQpLOklEU086OjEyMjBmMjJhOGI4ZjJkODEzYzI1YjlhNjg0ZGM0ZGQ1MmI1MzJhMDE3NGQ4ZTczYTEzY2RmMmJhYWJmZmY3NTE4MzM3Cn4KfGp6CmYKZDpiRGlnaXRhbEFzc2V0LVV0aWxpdHlPcGVyYXRvcjo6MTIyMDI2NzlmMmJiZTU3ZDhjYmE5ZWYzY2VlODQ3YWM4MjM5ZGYwODc3MTA1YWIxZjAxYTc3ZDQ3NDc3ZmRjZTEyMDQKEAoOMgwwLjIwMDAwMDAwMDAqYkRpZ2l0YWxBc3NldC1VdGlsaXR5T3BlcmF0b3I6OjEyMjAyNjc5ZjJiYmU1N2Q4Y2JhOWVmM2NlZTg0N2FjODIzOWRmMDg3NzEwNWFiMWYwMWE3N2Q0NzQ3N2ZkY2UxMjA0MlJjYnRjLW5ldHdvcms6OjEyMjAxYjE3NDFiNjNlMjQ5NGU0MjE0Y2YwYmVkYzNkNWEyMjRkYTUzYjNiZjRkNzZkYmE0NjhmOGU5N2ViMTU1MDhmOU/l4lj6QQYAQioKJgokCAESIPkBCO0qM3jdW2/BdhZa/gKRPonfxLecpHdyC2yeXu3aEB4="
109
- }
119
+ eventBlob:
120
+ "CgMyLjES9QYKRQBUpp53/eoX0cVs86ZJkcN96jS2VoyC2yGQRGIh9lhMtcoREiAepZXZNJyGRNCbdRpOlo14SlGGi93lSiJL6Uc20JxuZxITdXRpbGl0eS1yZWdpc3RyeS12MBqLAQpAZWQ3M2Q1YjlhYjcxNzMzM2YzZGJkMTIyZGU3YmUzMTU2ZjhiZjI2MTRhNjczNjBjM2RkNjFmYzAxMzUxMzNmYRIHVXRpbGl0eRIIUmVnaXN0cnkSAlYwEg1Db25maWd1cmF0aW9uEglBcHBSZXdhcmQaFkFwcFJld2FyZENvbmZpZ3VyYXRpb24imwNqmAMKZgpkOmJEaWdpdGFsQXNzZXQtVXRpbGl0eU9wZXJhdG9yOjoxMjIwMjY3OWYyYmJlNTdkOGNiYTllZjNjZWU4NDdhYzgyMzlkZjA4NzcxMDVhYjFmMDFhNzdkNDc0NzdmZGNlMTIwNApWClQ6UmNidGMtbmV0d29yazo6MTIyMDFiMTc0MWI2M2UyNDk0ZTQyMTRjZjBiZWRjM2Q1YTIyNGRhNTNiM2JmNGQ3NmRiYTQ2OGY4ZTk3ZWIxNTUwOGYK1QEK0gFqzwEKTQpLOklEU086OjEyMjBmMjJhOGI4ZjJkODEzYzI1YjlhNjg0ZGM0ZGQ1MmI1MzJhMDE3NGQ4ZTczYTEzY2RmMmJhYWJmZmY3NTE4MzM3Cn4KfGp6CmYKZDpiRGlnaXRhbEFzc2V0LVV0aWxpdHlPcGVyYXRvcjo6MTIyMDI2NzlmMmJiZTU3ZDhjYmE5ZWYzY2VlODQ3YWM4MjM5ZGYwODc3MTA1YWIxZjAxYTc3ZDQ3NDc3ZmRjZTEyMDQKEAoOMgwwLjIwMDAwMDAwMDAqYkRpZ2l0YWxBc3NldC1VdGlsaXR5T3BlcmF0b3I6OjEyMjAyNjc5ZjJiYmU1N2Q4Y2JhOWVmM2NlZTg0N2FjODIzOWRmMDg3NzEwNWFiMWYwMWE3N2Q0NzQ3N2ZkY2UxMjA0MlJjYnRjLW5ldHdvcms6OjEyMjAxYjE3NDFiNjNlMjQ5NGU0MjE0Y2YwYmVkYzNkNWEyMjRkYTUzYjNiZjRkNzZkYmE0NjhmOGU5N2ViMTU1MDhmOU/l4lj6QQYAQioKJgokCAESIPkBCO0qM3jdW2/BdhZa/gKRPonfxLecpHdyC2yeXu3aEB4=",
121
+ },
110
122
  },
111
123
  // MainNet contracts
112
124
  mainnet: {
@@ -118,24 +130,82 @@ export const instrumentCatalog = {
118
130
  instrumentConfiguration: {
119
131
  contractId: "00198ff840c58a05f69bf3fa78aacee87dfb1864b586ca0b3ef427a6504bd43dadca1212201be3e457a7ba6bf092979128bcbe46368fdd401a4fd433dafb1b09134a1e690b",
120
132
  templateId: "ed73d5b9ab717333f3dbd122de7be3156f8bf2614a67360c3dd61fc0135133fa:Utility.Registry.V0.Configuration.Instrument:InstrumentConfiguration",
121
- eventBlob: "CgMyLjESmQwKRQAZj/hAxYoF9pvz+niqzuh9+xhktYbKCz70J6ZQS9Q9rcoSEiAb4+RXp7pr8JKXkSi8vkY2j91AGk/UM9r7GwkTSh5pCxITdXRpbGl0eS1yZWdpc3RyeS12MBqNAQpAZWQ3M2Q1YjlhYjcxNzMzM2YzZGJkMTIyZGU3YmUzMTU2ZjhiZjI2MTRhNjczNjBjM2RkNjFmYzAxMzUxMzNmYRIHVXRpbGl0eRIIUmVnaXN0cnkSAlYwEg1Db25maWd1cmF0aW9uEgpJbnN0cnVtZW50GhdJbnN0cnVtZW50Q29uZmlndXJhdGlvbiK3CGq0CApsCmo6aGF1dGgwXzAwN2M2NjQzNTM4ZjJlYWRkM2U1NzNkZDA1Yjk6OjEyMjA1YmNjMTA2ZWZhMGVhYTdmMThkYzQ5MWU1YzZmNWZiOWIwY2M2OGRjMTEwYWU2NmY0ZWQ2NDY3NDc1ZDdjNzhlClYKVDpSY2J0Yy1uZXR3b3JrOjoxMjIwNWFmM2I5NDlhMDQ3NzZmYzQ4Y2RjYzA1YTA2MGY2YmRhMmU0NzA2MzI5MzVmMzc1ZDEwNDlhODU0NmEzYjI2MgpWClQ6UmNidGMtbmV0d29yazo6MTIyMDVhZjNiOTQ5YTA0Nzc2ZmM0OGNkY2MwNWEwNjBmNmJkYTJlNDcwNjMyOTM1ZjM3NWQxMDQ5YTg1NDZhM2IyNjIKhAEKgQFqfwpWClQ6UmNidGMtbmV0d29yazo6MTIyMDVhZjNiOTQ5YTA0Nzc2ZmM0OGNkY2MwNWEwNjBmNmJkYTJlNDcwNjMyOTM1ZjM3NWQxMDQ5YTg1NDZhM2IyNjIKCAoGQgRDQlRDChsKGUIXUmVnaXN0cmFySW50ZXJuYWxTY2hlbWUKigEKhwFahAEKgQFqfwpWClQ6UmNidGMtbmV0d29yazo6MTIyMDVhZjNiOTQ5YTA0Nzc2ZmM0OGNkY2MwNWEwNjBmNmJkYTJlNDcwNjMyOTM1ZjM3NWQxMDQ5YTg1NDZhM2IyNjIKCAoGQgRDQlRDChsKGUIXUmVnaXN0cmFySW50ZXJuYWxTY2hlbWUKBAoCWgAKBAoCWgAK8wMK8ANS7QMK6gNa5wMKcGpuCloKWDpWY2J0Yy1iZW5lZmljaWFyeTo6MTIyMDQwOWE5ZmNjNWZmNjQyMmUyOWFiOTc4YzIyYzAwNGRkZTMzMjAyNTQ2YjRiY2JkZTI0YjI1Yjg1MzUzMzY2YzIKEAoOMgwwLjI1MDAwMDAwMDAKgwFqgAEKbApqOmhGaW5vYUNvbnNlbnN1c1NlcnZpY2VzLXZhbGlkYXRvci0xOjoxMjIwYjgxODJmYTQyZDBjZjY1N2JkYTdmMTI0MzY2YTJjNjAzZDVkZjRhYWZkNzg5YTg4NTQ5ZGM5YTBlMzE5MTI1OQoQCg4yDDAuMjUwMDAwMDAwMApzanEKXQpbOlluZXRoZXJtaW5kLWFuZ2tvci0xOjoxMjIwMWQ5NGVjNGJhOTczYWI1YzUxZTNiNzY5YTZhY2E1NGYwNjFhZmM5NjM2MTlhNGQ2MTA5MDQ0ZWFjY2FmYzdiYQoQCg4yDDAuMjUwMDAwMDAwMAp4anYKYgpgOl5kc3J2LW1haW5uZXRWYWxpZGF0b3ItMDE6OjEyMjBlMmY0YWJlMWM1Y2E3ZTA3NDY0MDM3ZmU3ZmVmYzgzOWI3YjhmZWEyNDk4NWQwZDJhMjc5MGZhNzJlM2MxM2FjChAKDjIMMC4yNTAwMDAwMDAwKlJjYnRjLW5ldHdvcms6OjEyMjA1YWYzYjk0OWEwNDc3NmZjNDhjZGNjMDVhMDYwZjZiZGEyZTQ3MDYzMjkzNWYzNzVkMTA0OWE4NTQ2YTNiMjYyMmhhdXRoMF8wMDdjNjY0MzUzOGYyZWFkZDNlNTczZGQwNWI5OjoxMjIwNWJjYzEwNmVmYTBlYWE3ZjE4ZGM0OTFlNWM2ZjVmYjliMGNjNjhkYzExMGFlNjZmNGVkNjQ2NzQ3NWQ3Yzc4ZTmc9gXeakgGAEIqCiYKJAgBEiCzFew8Ty5ImPz2JpD6RroXNwD6O5b5IWJ3xeHBQsW4MRAe"
133
+ eventBlob:
134
+ "CgMyLjESmQwKRQAZj/hAxYoF9pvz+niqzuh9+xhktYbKCz70J6ZQS9Q9rcoSEiAb4+RXp7pr8JKXkSi8vkY2j91AGk/UM9r7GwkTSh5pCxITdXRpbGl0eS1yZWdpc3RyeS12MBqNAQpAZWQ3M2Q1YjlhYjcxNzMzM2YzZGJkMTIyZGU3YmUzMTU2ZjhiZjI2MTRhNjczNjBjM2RkNjFmYzAxMzUxMzNmYRIHVXRpbGl0eRIIUmVnaXN0cnkSAlYwEg1Db25maWd1cmF0aW9uEgpJbnN0cnVtZW50GhdJbnN0cnVtZW50Q29uZmlndXJhdGlvbiK3CGq0CApsCmo6aGF1dGgwXzAwN2M2NjQzNTM4ZjJlYWRkM2U1NzNkZDA1Yjk6OjEyMjA1YmNjMTA2ZWZhMGVhYTdmMThkYzQ5MWU1YzZmNWZiOWIwY2M2OGRjMTEwYWU2NmY0ZWQ2NDY3NDc1ZDdjNzhlClYKVDpSY2J0Yy1uZXR3b3JrOjoxMjIwNWFmM2I5NDlhMDQ3NzZmYzQ4Y2RjYzA1YTA2MGY2YmRhMmU0NzA2MzI5MzVmMzc1ZDEwNDlhODU0NmEzYjI2MgpWClQ6UmNidGMtbmV0d29yazo6MTIyMDVhZjNiOTQ5YTA0Nzc2ZmM0OGNkY2MwNWEwNjBmNmJkYTJlNDcwNjMyOTM1ZjM3NWQxMDQ5YTg1NDZhM2IyNjIKhAEKgQFqfwpWClQ6UmNidGMtbmV0d29yazo6MTIyMDVhZjNiOTQ5YTA0Nzc2ZmM0OGNkY2MwNWEwNjBmNmJkYTJlNDcwNjMyOTM1ZjM3NWQxMDQ5YTg1NDZhM2IyNjIKCAoGQgRDQlRDChsKGUIXUmVnaXN0cmFySW50ZXJuYWxTY2hlbWUKigEKhwFahAEKgQFqfwpWClQ6UmNidGMtbmV0d29yazo6MTIyMDVhZjNiOTQ5YTA0Nzc2ZmM0OGNkY2MwNWEwNjBmNmJkYTJlNDcwNjMyOTM1ZjM3NWQxMDQ5YTg1NDZhM2IyNjIKCAoGQgRDQlRDChsKGUIXUmVnaXN0cmFySW50ZXJuYWxTY2hlbWUKBAoCWgAKBAoCWgAK8wMK8ANS7QMK6gNa5wMKcGpuCloKWDpWY2J0Yy1iZW5lZmljaWFyeTo6MTIyMDQwOWE5ZmNjNWZmNjQyMmUyOWFiOTc4YzIyYzAwNGRkZTMzMjAyNTQ2YjRiY2JkZTI0YjI1Yjg1MzUzMzY2YzIKEAoOMgwwLjI1MDAwMDAwMDAKgwFqgAEKbApqOmhGaW5vYUNvbnNlbnN1c1NlcnZpY2VzLXZhbGlkYXRvci0xOjoxMjIwYjgxODJmYTQyZDBjZjY1N2JkYTdmMTI0MzY2YTJjNjAzZDVkZjRhYWZkNzg5YTg4NTQ5ZGM5YTBlMzE5MTI1OQoQCg4yDDAuMjUwMDAwMDAwMApzanEKXQpbOlluZXRoZXJtaW5kLWFuZ2tvci0xOjoxMjIwMWQ5NGVjNGJhOTczYWI1YzUxZTNiNzY5YTZhY2E1NGYwNjFhZmM5NjM2MTlhNGQ2MTA5MDQ0ZWFjY2FmYzdiYQoQCg4yDDAuMjUwMDAwMDAwMAp4anYKYgpgOl5kc3J2LW1haW5uZXRWYWxpZGF0b3ItMDE6OjEyMjBlMmY0YWJlMWM1Y2E3ZTA3NDY0MDM3ZmU3ZmVmYzgzOWI3YjhmZWEyNDk4NWQwZDJhMjc5MGZhNzJlM2MxM2FjChAKDjIMMC4yNTAwMDAwMDAwKlJjYnRjLW5ldHdvcms6OjEyMjA1YWYzYjk0OWEwNDc3NmZjNDhjZGNjMDVhMDYwZjZiZGEyZTQ3MDYzMjkzNWYzNzVkMTA0OWE4NTQ2YTNiMjYyMmhhdXRoMF8wMDdjNjY0MzUzOGYyZWFkZDNlNTczZGQwNWI5OjoxMjIwNWJjYzEwNmVmYTBlYWE3ZjE4ZGM0OTFlNWM2ZjVmYjliMGNjNjhkYzExMGFlNjZmNGVkNjQ2NzQ3NWQ3Yzc4ZTmc9gXeakgGAEIqCiYKJAgBEiCzFew8Ty5ImPz2JpD6RroXNwD6O5b5IWJ3xeHBQsW4MRAe",
122
135
  },
123
136
  allocationFactory: {
124
137
  contractId: "00a30be758ed7b5045f82ab37e4037890eb18044e61125854e7391d2de17e602edca1112203c96d5fb70e1cd5856846681484293c5358bc74b0e10d7a8a7a5fa89ce445905",
125
138
  templateId: "82798df018301852704f210b97adaabf76d3ecd37d889e1bf96b5f31a20eea34:Utility.Registry.App.V0.Service.AllocationFactory:AllocationFactory",
126
- eventBlob: "CgMyLjEShwYKRQCjC+dY7XtQRfgqs35AN4kOsYBE5hElhU5zkdLeF+YC7coREiA8ltX7cOHNWFaEZoFIQpPFNYvHSw4Q16inpfqJzkRZBRIXdXRpbGl0eS1yZWdpc3RyeS1hcHAtdjAajQEKQDgyNzk4ZGYwMTgzMDE4NTI3MDRmMjEwYjk3YWRhYWJmNzZkM2VjZDM3ZDg4OWUxYmY5NmI1ZjMxYTIwZWVhMzQSB1V0aWxpdHkSCFJlZ2lzdHJ5EgNBcHASAlYwEgdTZXJ2aWNlEhFBbGxvY2F0aW9uRmFjdG9yeRoRQWxsb2NhdGlvbkZhY3RvcnkioQJqngIKVgpUOlJjYnRjLW5ldHdvcms6OjEyMjA1YWYzYjk0OWEwNDc3NmZjNDhjZGNjMDVhMDYwZjZiZGEyZTQ3MDYzMjkzNWYzNzVkMTA0OWE4NTQ2YTNiMjYyClYKVDpSY2J0Yy1uZXR3b3JrOjoxMjIwNWFmM2I5NDlhMDQ3NzZmYzQ4Y2RjYzA1YTA2MGY2YmRhMmU0NzA2MzI5MzVmMzc1ZDEwNDlhODU0NmEzYjI2MgpsCmo6aGF1dGgwXzAwN2M2NjQzNTM4ZjJlYWRkM2U1NzNkZDA1Yjk6OjEyMjA1YmNjMTA2ZWZhMGVhYTdmMThkYzQ5MWU1YzZmNWZiOWIwY2M2OGRjMTEwYWU2NmY0ZWQ2NDY3NDc1ZDdjNzhlKlJjYnRjLW5ldHdvcms6OjEyMjA1YWYzYjk0OWEwNDc3NmZjNDhjZGNjMDVhMDYwZjZiZGEyZTQ3MDYzMjkzNWYzNzVkMTA0OWE4NTQ2YTNiMjYyMmhhdXRoMF8wMDdjNjY0MzUzOGYyZWFkZDNlNTczZGQwNWI5OjoxMjIwNWJjYzEwNmVmYTBlYWE3ZjE4ZGM0OTFlNWM2ZjVmYjliMGNjNjhkYzExMGFlNjZmNGVkNjQ2NzQ3NWQ3Yzc4ZTmmjd2WhT4GAEIqCiYKJAgBEiAmE4gDprYSR3Yqd6tcoPepCoYnxYXkw1UyuRBEypw6YBAe"
139
+ eventBlob:
140
+ "CgMyLjEShwYKRQCjC+dY7XtQRfgqs35AN4kOsYBE5hElhU5zkdLeF+YC7coREiA8ltX7cOHNWFaEZoFIQpPFNYvHSw4Q16inpfqJzkRZBRIXdXRpbGl0eS1yZWdpc3RyeS1hcHAtdjAajQEKQDgyNzk4ZGYwMTgzMDE4NTI3MDRmMjEwYjk3YWRhYWJmNzZkM2VjZDM3ZDg4OWUxYmY5NmI1ZjMxYTIwZWVhMzQSB1V0aWxpdHkSCFJlZ2lzdHJ5EgNBcHASAlYwEgdTZXJ2aWNlEhFBbGxvY2F0aW9uRmFjdG9yeRoRQWxsb2NhdGlvbkZhY3RvcnkioQJqngIKVgpUOlJjYnRjLW5ldHdvcms6OjEyMjA1YWYzYjk0OWEwNDc3NmZjNDhjZGNjMDVhMDYwZjZiZGEyZTQ3MDYzMjkzNWYzNzVkMTA0OWE4NTQ2YTNiMjYyClYKVDpSY2J0Yy1uZXR3b3JrOjoxMjIwNWFmM2I5NDlhMDQ3NzZmYzQ4Y2RjYzA1YTA2MGY2YmRhMmU0NzA2MzI5MzVmMzc1ZDEwNDlhODU0NmEzYjI2MgpsCmo6aGF1dGgwXzAwN2M2NjQzNTM4ZjJlYWRkM2U1NzNkZDA1Yjk6OjEyMjA1YmNjMTA2ZWZhMGVhYTdmMThkYzQ5MWU1YzZmNWZiOWIwY2M2OGRjMTEwYWU2NmY0ZWQ2NDY3NDc1ZDdjNzhlKlJjYnRjLW5ldHdvcms6OjEyMjA1YWYzYjk0OWEwNDc3NmZjNDhjZGNjMDVhMDYwZjZiZGEyZTQ3MDYzMjkzNWYzNzVkMTA0OWE4NTQ2YTNiMjYyMmhhdXRoMF8wMDdjNjY0MzUzOGYyZWFkZDNlNTczZGQwNWI5OjoxMjIwNWJjYzEwNmVmYTBlYWE3ZjE4ZGM0OTFlNWM2ZjVmYjliMGNjNjhkYzExMGFlNjZmNGVkNjQ2NzQ3NWQ3Yzc4ZTmmjd2WhT4GAEIqCiYKJAgBEiAmE4gDprYSR3Yqd6tcoPepCoYnxYXkw1UyuRBEypw6YBAe",
127
141
  },
128
142
  // AppRewardConfig
129
143
  appRewardConfiguration: {
130
144
  contractId: "005cb47f39ba47615e4aa5dd02b17763cc0eda03087ae6c9ee8e38e82c13462aaeca1112202d25374d3cf2c0a36a8d0710836d4e01a1c5b73473f45b6a81002c5daa8ca0cb",
131
145
  templateId: "ed73d5b9ab717333f3dbd122de7be3156f8bf2614a67360c3dd61fc0135133fa:Utility.Registry.V0.Configuration.AppReward:AppRewardConfiguration",
132
- eventBlob: "CgMyLjESigcKRQBctH85ukdhXkql3QKxd2PMDtoDCHrmye6OOOgsE0YqrsoREiAtJTdNPPLAo2qNBxCDbU4BocW3NHP0W2qBACxdqoygyxITdXRpbGl0eS1yZWdpc3RyeS12MBqLAQpAZWQ3M2Q1YjlhYjcxNzMzM2YzZGJkMTIyZGU3YmUzMTU2ZjhiZjI2MTRhNjczNjBjM2RkNjFmYzAxMzUxMzNmYRIHVXRpbGl0eRIIUmVnaXN0cnkSAlYwEg1Db25maWd1cmF0aW9uEglBcHBSZXdhcmQaFkFwcFJld2FyZENvbmZpZ3VyYXRpb24iqgNqpwMKbApqOmhhdXRoMF8wMDdjNjY0MzUzOGYyZWFkZDNlNTczZGQwNWI5OjoxMjIwNWJjYzEwNmVmYTBlYWE3ZjE4ZGM0OTFlNWM2ZjVmYjliMGNjNjhkYzExMGFlNjZmNGVkNjQ2NzQ3NWQ3Yzc4ZQpWClQ6UmNidGMtbmV0d29yazo6MTIyMDVhZjNiOTQ5YTA0Nzc2ZmM0OGNkY2MwNWEwNjBmNmJkYTJlNDcwNjMyOTM1ZjM3NWQxMDQ5YTg1NDZhM2IyNjIK3gEK2wFq2AEKTQpLOklEU086OjEyMjBiMTQzMWVmMjE3MzQyZGI0NGQ1MTZiYjliZWZkZTgwMmJlN2Q4ODk5NjM3ZDI5MDg5NWZhNTg4ODBmMTlhY2NjCoYBCoMBaoABCmwKajpoYXV0aDBfMDA3YzY3ZGM3YzRhZmJmNWJjMzdmOTgwNWUzMTo6MTIyMDViY2MxMDZlZmEwZWFhN2YxOGRjNDkxZTVjNmY1ZmI5YjBjYzY4ZGMxMTBhZTY2ZjRlZDY0Njc0NzVkN2M3OGUKEAoOMgwwLjIwMDAwMDAwMDAqaGF1dGgwXzAwN2M2NjQzNTM4ZjJlYWRkM2U1NzNkZDA1Yjk6OjEyMjA1YmNjMTA2ZWZhMGVhYTdmMThkYzQ5MWU1YzZmNWZiOWIwY2M2OGRjMTEwYWU2NmY0ZWQ2NDY3NDc1ZDdjNzhlMlJjYnRjLW5ldHdvcms6OjEyMjA1YWYzYjk0OWEwNDc3NmZjNDhjZGNjMDVhMDYwZjZiZGEyZTQ3MDYzMjkzNWYzNzVkMTA0OWE4NTQ2YTNiMjYyOSqKuWddQgYAQioKJgokCAESIP6u2ZhXB5fXuwvdDvhv+mn6JPF20D2scQdCh/yRSuNsEB4="
133
- }
134
- }
146
+ eventBlob:
147
+ "CgMyLjESigcKRQBctH85ukdhXkql3QKxd2PMDtoDCHrmye6OOOgsE0YqrsoREiAtJTdNPPLAo2qNBxCDbU4BocW3NHP0W2qBACxdqoygyxITdXRpbGl0eS1yZWdpc3RyeS12MBqLAQpAZWQ3M2Q1YjlhYjcxNzMzM2YzZGJkMTIyZGU3YmUzMTU2ZjhiZjI2MTRhNjczNjBjM2RkNjFmYzAxMzUxMzNmYRIHVXRpbGl0eRIIUmVnaXN0cnkSAlYwEg1Db25maWd1cmF0aW9uEglBcHBSZXdhcmQaFkFwcFJld2FyZENvbmZpZ3VyYXRpb24iqgNqpwMKbApqOmhhdXRoMF8wMDdjNjY0MzUzOGYyZWFkZDNlNTczZGQwNWI5OjoxMjIwNWJjYzEwNmVmYTBlYWE3ZjE4ZGM0OTFlNWM2ZjVmYjliMGNjNjhkYzExMGFlNjZmNGVkNjQ2NzQ3NWQ3Yzc4ZQpWClQ6UmNidGMtbmV0d29yazo6MTIyMDVhZjNiOTQ5YTA0Nzc2ZmM0OGNkY2MwNWEwNjBmNmJkYTJlNDcwNjMyOTM1ZjM3NWQxMDQ5YTg1NDZhM2IyNjIK3gEK2wFq2AEKTQpLOklEU086OjEyMjBiMTQzMWVmMjE3MzQyZGI0NGQ1MTZiYjliZWZkZTgwMmJlN2Q4ODk5NjM3ZDI5MDg5NWZhNTg4ODBmMTlhY2NjCoYBCoMBaoABCmwKajpoYXV0aDBfMDA3YzY3ZGM3YzRhZmJmNWJjMzdmOTgwNWUzMTo6MTIyMDViY2MxMDZlZmEwZWFhN2YxOGRjNDkxZTVjNmY1ZmI5YjBjYzY4ZGMxMTBhZTY2ZjRlZDY0Njc0NzVkN2M3OGUKEAoOMgwwLjIwMDAwMDAwMDAqaGF1dGgwXzAwN2M2NjQzNTM4ZjJlYWRkM2U1NzNkZDA1Yjk6OjEyMjA1YmNjMTA2ZWZhMGVhYTdmMThkYzQ5MWU1YzZmNWZiOWIwY2M2OGRjMTEwYWU2NmY0ZWQ2NDY3NDc1ZDdjNzhlMlJjYnRjLW5ldHdvcms6OjEyMjA1YWYzYjk0OWEwNDc3NmZjNDhjZGNjMDVhMDYwZjZiZGEyZTQ3MDYzMjkzNWYzNzVkMTA0OWE4NTQ2YTNiMjYyOSqKuWddQgYAQioKJgokCAESIP6u2ZhXB5fXuwvdDvhv+mn6JPF20D2scQdCh/yRSuNsEB4=",
148
+ },
149
+ },
150
+ },
151
+
152
+ // USDA -- DA-issued stablecoin (utility token, same shape as USDCx)
153
+ USDA: {
154
+ id: "3574b536-cad1-4074-9b64-859398713ba0",
155
+ scheme: RegistrarInternalScheme,
156
+ kind: InstrumentKindUtility,
157
+ disclosureURL: null,
158
+ requireCredentials: false,
159
+ testnet: {
160
+ synchronizerId: "",
161
+ registrar: "",
162
+ operator: "",
163
+ provider: "",
164
+ registryAPI: "",
165
+ instrumentConfiguration: {
166
+ contractId: "",
167
+ templateId: "",
168
+ eventBlob: "",
169
+ },
170
+ allocationFactory: {
171
+ contractId: "",
172
+ templateId: "",
173
+ eventBlob: "",
174
+ },
175
+ appRewardConfiguration: {
176
+ contractId: "",
177
+ templateId: "",
178
+ eventBlob: "",
179
+ },
180
+ },
181
+ mainnet: {
182
+ synchronizerId: "global-domain::1220b1431ef217342db44d516bb9befde802be7d8899637d290895fa58880f19accc",
183
+ registrar: "party-28dc4516-b5ca-44ff-86c7-2107e90a6807::1220b8301e18aa8a401d6e34e6c20f8b0243183c514373bca8f1b6b9270246341a9e",
184
+ operator: "auth0_007c6643538f2eadd3e573dd05b9::12205bcc106efa0eaa7f18dc491e5c6f5fb9b0cc68dc110ae66f4ed6467475d7c78e",
185
+ provider: "party-28dc4516-b5ca-44ff-86c7-2107e90a6807::1220b8301e18aa8a401d6e34e6c20f8b0243183c514373bca8f1b6b9270246341a9e",
186
+ registryAPI: "https://api.utilities.digitalasset.com/api/token-standard/v0/registrars/party-28dc4516-b5ca-44ff-86c7-2107e90a6807::1220b8301e18aa8a401d6e34e6c20f8b0243183c514373bca8f1b6b9270246341a9e/registry",
187
+ instrumentConfiguration: {
188
+ contractId: "007c6c88f88a02bbe6888b3792991b0e11e081b309ab4cc11f2200831a777a9e9eca121220039f9aa8b4a6a4c1db572b9b525058fad421f9824b6a245650f428b70f644c12",
189
+ templateId: "a236e8e22a3b5f199e37d5554e82bafd2df688f901de02b00be3964bdfa8c1ab:Utility.Registry.V0.Configuration.Instrument:InstrumentConfiguration",
190
+ eventBlob:
191
+ "CgMyLjESygkKRQB8bIj4igK75oiLN5KZGw4R4IGzCatMwR8iAIMad3qensoSEiADn5qotKakwdtXK5tSUFj61CH5gktqJFZQ9Ci3D2RMEhITdXRpbGl0eS1yZWdpc3RyeS12MBqNAQpAYTIzNmU4ZTIyYTNiNWYxOTllMzdkNTU1NGU4MmJhZmQyZGY2ODhmOTAxZGUwMmIwMGJlMzk2NGJkZmE4YzFhYhIHVXRpbGl0eRIIUmVnaXN0cnkSAlYwEg1Db25maWd1cmF0aW9uEgpJbnN0cnVtZW50GhdJbnN0cnVtZW50Q29uZmlndXJhdGlvbiLKBWrHBQpsCmo6aGF1dGgwXzAwN2M2NjQzNTM4ZjJlYWRkM2U1NzNkZDA1Yjk6OjEyMjA1YmNjMTA2ZWZhMGVhYTdmMThkYzQ5MWU1YzZmNWZiOWIwY2M2OGRjMTEwYWU2NmY0ZWQ2NDY3NDc1ZDdjNzhlCnQKcjpwcGFydHktMjhkYzQ1MTYtYjVjYS00NGZmLTg2YzctMjEwN2U5MGE2ODA3OjoxMjIwYjgzMDFlMThhYThhNDAxZDZlMzRlNmMyMGY4YjAyNDMxODNjNTE0MzczYmNhOGYxYjZiOTI3MDI0NjM0MWE5ZQp0CnI6cHBhcnR5LTI4ZGM0NTE2LWI1Y2EtNDRmZi04NmM3LTIxMDdlOTBhNjgwNzo6MTIyMGI4MzAxZTE4YWE4YTQwMWQ2ZTM0ZTZjMjBmOGIwMjQzMTgzYzUxNDM3M2JjYThmMWI2YjkyNzAyNDYzNDFhOWUKwwEKwAFqvQEKdApyOnBwYXJ0eS0yOGRjNDUxNi1iNWNhLTQ0ZmYtODZjNy0yMTA3ZTkwYTY4MDc6OjEyMjBiODMwMWUxOGFhOGE0MDFkNmUzNGU2YzIwZjhiMDI0MzE4M2M1MTQzNzNiY2E4ZjFiNmI5MjcwMjQ2MzQxYTllCigKJkIkMzU3NGI1MzYtY2FkMS00MDc0LTliNjQtODU5Mzk4NzEzYmEwChsKGUIXUmVnaXN0cmFySW50ZXJuYWxTY2hlbWUKmAEKlQFakgEKjwFqjAEKdApyOnBwYXJ0eS0yOGRjNDUxNi1iNWNhLTQ0ZmYtODZjNy0yMTA3ZTkwYTY4MDc6OjEyMjBiODMwMWUxOGFhOGE0MDFkNmUzNGU2YzIwZjhiMDI0MzE4M2M1MTQzNzNiY2E4ZjFiNmI5MjcwMjQ2MzQxYTllCggKBkIEVVNEQQoKCghCBlRpY2tlcgoECgJaAAoECgJaACpwcGFydHktMjhkYzQ1MTYtYjVjYS00NGZmLTg2YzctMjEwN2U5MGE2ODA3OjoxMjIwYjgzMDFlMThhYThhNDAxZDZlMzRlNmMyMGY4YjAyNDMxODNjNTE0MzczYmNhOGYxYjZiOTI3MDI0NjM0MWE5ZTJoYXV0aDBfMDA3YzY2NDM1MzhmMmVhZGQzZTU3M2RkMDViOTo6MTIyMDViY2MxMDZlZmEwZWFhN2YxOGRjNDkxZTVjNmY1ZmI5YjBjYzY4ZGMxMTBhZTY2ZjRlZDY0Njc0NzVkN2M3OGU5KWaA+FNRBgBCKgomCiQIARIgHk6elwUzf1qka7iWAwMmMiO8d9G8nkxo2vn4fpR6rgkQHg==",
192
+ },
193
+ allocationFactory: {
194
+ contractId: "00f1bdedbfa7fc8b136fa57164cc3d73ec6ae5a9e8c903ba6462629f74f61000ebca1112204927a06b04a9013d29df443e585fe1444393bdd3af841eb379b4c106f80ef7d8",
195
+ templateId: "82798df018301852704f210b97adaabf76d3ecd37d889e1bf96b5f31a20eea34:Utility.Registry.App.V0.Service.AllocationFactory:AllocationFactory",
196
+ eventBlob:
197
+ "CgMyLjES4QYKRQDxve2/p/yLE2+lcWTMPXPsauWp6MkDumRiYp909hAA68oREiBJJ6BrBKkBPSnfRD5YX+FEQ5O906+EHrN5tMEG+A732BIXdXRpbGl0eS1yZWdpc3RyeS1hcHAtdjAajQEKQDgyNzk4ZGYwMTgzMDE4NTI3MDRmMjEwYjk3YWRhYWJmNzZkM2VjZDM3ZDg4OWUxYmY5NmI1ZjMxYTIwZWVhMzQSB1V0aWxpdHkSCFJlZ2lzdHJ5EgNBcHASAlYwEgdTZXJ2aWNlEhFBbGxvY2F0aW9uRmFjdG9yeRoRQWxsb2NhdGlvbkZhY3Rvcnki3QJq2gIKdApyOnBwYXJ0eS0yOGRjNDUxNi1iNWNhLTQ0ZmYtODZjNy0yMTA3ZTkwYTY4MDc6OjEyMjBiODMwMWUxOGFhOGE0MDFkNmUzNGU2YzIwZjhiMDI0MzE4M2M1MTQzNzNiY2E4ZjFiNmI5MjcwMjQ2MzQxYTllCnQKcjpwcGFydHktMjhkYzQ1MTYtYjVjYS00NGZmLTg2YzctMjEwN2U5MGE2ODA3OjoxMjIwYjgzMDFlMThhYThhNDAxZDZlMzRlNmMyMGY4YjAyNDMxODNjNTE0MzczYmNhOGYxYjZiOTI3MDI0NjM0MWE5ZQpsCmo6aGF1dGgwXzAwN2M2NjQzNTM4ZjJlYWRkM2U1NzNkZDA1Yjk6OjEyMjA1YmNjMTA2ZWZhMGVhYTdmMThkYzQ5MWU1YzZmNWZiOWIwY2M2OGRjMTEwYWU2NmY0ZWQ2NDY3NDc1ZDdjNzhlKnBwYXJ0eS0yOGRjNDUxNi1iNWNhLTQ0ZmYtODZjNy0yMTA3ZTkwYTY4MDc6OjEyMjBiODMwMWUxOGFhOGE0MDFkNmUzNGU2YzIwZjhiMDI0MzE4M2M1MTQzNzNiY2E4ZjFiNmI5MjcwMjQ2MzQxYTllMmhhdXRoMF8wMDdjNjY0MzUzOGYyZWFkZDNlNTczZGQwNWI5OjoxMjIwNWJjYzEwNmVmYTBlYWE3ZjE4ZGM0OTFlNWM2ZjVmYjliMGNjNjhkYzExMGFlNjZmNGVkNjQ2NzQ3NWQ3Yzc4ZTk20/j3nj4GAEIqCiYKJAgBEiBwfsleVvZIGKs93dGaxalgMoApEPy2uONQ6trRzxPTzhAe",
198
+ },
199
+ appRewardConfiguration: {
200
+ contractId: "",
201
+ templateId: "",
202
+ eventBlob: "",
203
+ },
204
+ },
135
205
  },
136
206
 
137
207
  // SBC (Stablecoin) -- used for balance reporting, but not a tradable instrument itself
138
- "SBC": {
208
+ SBC: {
139
209
  id: "f29bdd7a-1469-498a-ba2a-796bf5387b31",
140
210
  scheme: RegistrarInternalScheme,
141
211
  kind: InstrumentKindUtility,
@@ -146,7 +216,7 @@ export const instrumentCatalog = {
146
216
  registrar: "party-28dc4516-b5ca-44ff-86c7-2107e90a6807::1220b8301e18aa8a401d6e34e6c20f8b0243183c514373bca8f1b6b9270246341a9e",
147
217
  operator: "auth0_007c6643538f2eadd3e573dd05b9::12205bcc106efa0eaa7f18dc491e5c6f5fb9b0cc68dc110ae66f4ed6467475d7c78e",
148
218
  provider: "party-28dc4516-b5ca-44ff-86c7-2107e90a6807::1220b8301e18aa8a401d6e34e6c20f8b0243183c514373bca8f1b6b9270246341a9e",
149
- }
219
+ },
150
220
  },
151
221
  };
152
222
 
@@ -155,13 +225,16 @@ export const instrumentCatalog = {
155
225
  export const instrumentIdToSymbol = Object.fromEntries(
156
226
  Object.entries(instrumentCatalog)
157
227
  .filter(([key, entry]) => entry.id && entry.id !== key)
158
- .map(([key, entry]) => [entry.id, key])
228
+ .map(([key, entry]) => [entry.id, key]),
159
229
  );
160
230
 
161
231
  // Supported trading pairs (like Go's supportedTradingPairs)
162
232
  export const supportedTradingPairs = [
163
233
  { baseAsset: "Amulet", quoteAsset: "USDCx" },
164
234
  { baseAsset: "CBTC", quoteAsset: "USDCx" },
235
+ { baseAsset: "Amulet", quoteAsset: "USDA" },
236
+ { baseAsset: "CBTC", quoteAsset: "USDA" },
237
+ { baseAsset: "USDCx", quoteAsset: "USDA" },
165
238
  ];
166
239
 
167
240
  // The supported symbols (pairs) - derived from supportedTradingPairs for backward compatibility
@@ -170,14 +243,41 @@ export const supportedSymbols = supportedTradingPairs.reduce((acc, pair) => {
170
243
  return acc;
171
244
  }, {});
172
245
 
173
- // Add CC as an alias for Amulet so users can pass "CC/USDCx"
246
+ // Add CC as an alias for Amulet so users can pass "CC/USDCx" or "CC/USDA"
174
247
  supportedSymbols["CC/USDCx"] = supportedSymbols["Amulet/USDCx"];
248
+ supportedSymbols["CC/USDA"] = supportedSymbols["Amulet/USDA"];
249
+
250
+ // Build a case-insensitive alias → canonical-symbol map from the catalog's `aliases` arrays.
251
+ // e.g. instrumentCatalog.Amulet.aliases = ["CC"] → { cc: "Amulet" }
252
+ const aliasToSymbol = Object.entries(instrumentCatalog).reduce((acc, [symbol, entry]) => {
253
+ for (const alias of entry.aliases || []) {
254
+ acc[alias.toLowerCase()] = symbol;
255
+ }
256
+ return acc;
257
+ }, {});
175
258
 
176
259
  /**
177
- * Normalize asset aliases to their canonical names.
178
- * "CC" (any case) → "Amulet". Also works inside trading pairs: "CC/USDCx" → "Amulet/USDCx".
260
+ * Normalize asset aliases to their canonical catalog symbol.
261
+ * Aliases come from `instrumentCatalog[<symbol>].aliases`, matched case-insensitively.
262
+ * Works on single symbols (`"cc"` → `"Amulet"`) and pair strings (`"CC/USDCx"` → `"Amulet/USDCx"`).
179
263
  */
180
264
  export function normalizeAssetId(symbol) {
181
265
  if (!symbol || typeof symbol !== "string") return symbol;
182
- return symbol.trim().replace(/\bcc\b/gi, "Amulet");
266
+ const trimmed = symbol.trim();
267
+ const normalizeOne = (s) => aliasToSymbol[s.toLowerCase()] || s;
268
+ if (trimmed.includes("/")) {
269
+ return trimmed.split("/").map(normalizeOne).join("/");
270
+ }
271
+ return normalizeOne(trimmed);
183
272
  }
273
+
274
+ /**
275
+ * Catalog symbol → on-chain instrument id.
276
+ * Use whenever building an `instrumentId.id` field for a ledger choice argument or
277
+ * a Registry API request body — those need the value that lives in Holding contracts,
278
+ * which for USDA/SBC is a UUID rather than the display symbol.
279
+ */
280
+ export function resolveOnChainInstrumentId(symbol) {
281
+ return instrumentCatalog[symbol]?.id || symbol;
282
+ }
283
+