@layerzerolabs/common-canton 1.2.100 → 1.2.101
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.
- package/dist/{D3KVE5XQ.js → 3H5UAMWJ.js} +12 -9
- package/dist/3H5UAMWJ.js.map +1 -0
- package/dist/{YBGD26CU.js → 45C3KMUJ.js} +12 -6
- package/dist/45C3KMUJ.js.map +1 -0
- package/dist/{5BK6GCUD.js → 5VT3BVW6.js} +4 -4
- package/dist/{5BK6GCUD.js.map → 5VT3BVW6.js.map} +1 -1
- package/dist/{CMFVLC7C.js → 6GIDRO6Y.js} +3 -3
- package/dist/{CMFVLC7C.js.map → 6GIDRO6Y.js.map} +1 -1
- package/dist/{4SK2ZV46.js → 7DFFQF5Y.js} +37 -14
- package/dist/7DFFQF5Y.js.map +1 -0
- package/dist/{RFGCLYQN.js → 7Z6L2FXT.js} +3 -3
- package/dist/{RFGCLYQN.js.map → 7Z6L2FXT.js.map} +1 -1
- package/dist/{NSHNCUWI.js → A4HRBTRS.js} +5 -5
- package/dist/{NSHNCUWI.js.map → A4HRBTRS.js.map} +1 -1
- package/dist/{HQMIA66Y.js → DELPT7WC.js} +3 -3
- package/dist/{HQMIA66Y.js.map → DELPT7WC.js.map} +1 -1
- package/dist/{4WZTQJXP.js → KDLPAZ3P.js} +2 -2
- package/dist/{4WZTQJXP.js.map → KDLPAZ3P.js.map} +1 -1
- package/dist/{YV6LAB6R.js → KGEOWAAR.js} +3 -3
- package/dist/{YV6LAB6R.js.map → KGEOWAAR.js.map} +1 -1
- package/dist/{K7FRAGGM.js → KLMACWXT.js} +3 -3
- package/dist/KLMACWXT.js.map +1 -0
- package/dist/{UG2M23HF.js → MM7EIOP4.js} +3 -3
- package/dist/{UG2M23HF.js.map → MM7EIOP4.js.map} +1 -1
- package/dist/{E6W3YWXU.js → MRAAJXQA.js} +4 -4
- package/dist/{E6W3YWXU.js.map → MRAAJXQA.js.map} +1 -1
- package/dist/{NGED2YCU.js → OK7GQCQM.js} +9 -5
- package/dist/OK7GQCQM.js.map +1 -0
- package/dist/{JJDWTXLN.js → QOVYNKLD.js} +3 -3
- package/dist/{JJDWTXLN.js.map → QOVYNKLD.js.map} +1 -1
- package/dist/{HC2GOOAL.js → QWU4V7O2.js} +138 -24
- package/dist/QWU4V7O2.js.map +1 -0
- package/dist/{XUXLV3PL.js → SAHSVYH6.js} +2 -2
- package/dist/{XUXLV3PL.js.map → SAHSVYH6.js.map} +1 -1
- package/dist/{5VKWPQE4.js → SEKZMYNZ.js} +3 -3
- package/dist/{5VKWPQE4.js.map → SEKZMYNZ.js.map} +1 -1
- package/dist/{DCDLEU2R.js → UUUJS2PY.js} +11 -3
- package/dist/UUUJS2PY.js.map +1 -0
- package/dist/{M3GPMXME.js → W3ZJSUA6.js} +3 -3
- package/dist/{M3GPMXME.js.map → W3ZJSUA6.js.map} +1 -1
- package/dist/{IUQEDBC6.js → XKBA43N7.js} +12 -9
- package/dist/XKBA43N7.js.map +1 -0
- package/dist/{KPFKPA5E.js → XWNGGI4V.js} +6 -6
- package/dist/XWNGGI4V.js.map +1 -0
- package/dist/{2B3PTIL7.js → ZVEWMW6Q.js} +4 -4
- package/dist/{2B3PTIL7.js.map → ZVEWMW6Q.js.map} +1 -1
- package/dist/client/amulet.d.ts +11 -1
- package/dist/client/amulet.d.ts.map +1 -1
- package/dist/client/amulet.js +3 -3
- package/dist/client/canton-client.d.ts +13 -4
- package/dist/client/canton-client.d.ts.map +1 -1
- package/dist/client/canton-client.js +4 -4
- package/dist/client/grpc.js +2 -2
- package/dist/client/index.d.ts +1 -1
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +6 -6
- package/dist/client/interface.d.ts +13 -4
- package/dist/client/interface.d.ts.map +1 -1
- package/dist/client/topology/utils.d.ts +4 -0
- package/dist/client/topology/utils.d.ts.map +1 -1
- package/dist/client/topology/utils.js +1 -1
- package/dist/events.js +3 -3
- package/dist/index.js +23 -23
- package/dist/minFee.js +2 -2
- package/dist/provider.js +7 -7
- package/dist/refresh/callback-burn-mint.js +5 -5
- package/dist/refresh/callback-lock-unlock.js +5 -5
- package/dist/refresh/callback-registry.js +4 -4
- package/dist/refresh/callback.js +7 -7
- package/dist/refresh/index.js +17 -17
- package/dist/refresh/onesig-config.js +1 -1
- package/dist/refresh/onesig-request.js +1 -1
- package/dist/refresh/onesig-scope.d.ts.map +1 -1
- package/dist/refresh/onesig-scope.js +1 -1
- package/dist/refresh/onesig-transfer-instruction.js +8 -8
- package/dist/refresh/onesig-transfer.js +9 -9
- package/dist/refresh/plan.d.ts +18 -0
- package/dist/refresh/plan.d.ts.map +1 -1
- package/dist/refresh/plan.js +1 -1
- package/dist/refresh/prepare-amulet-transfer.d.ts.map +1 -1
- package/dist/refresh/prepare-amulet-transfer.js +4 -4
- package/dist/refresh/resolve-plan.d.ts.map +1 -1
- package/dist/refresh/resolve-plan.js +15 -15
- package/dist/refresh/resolve.js +16 -16
- package/dist/sdk/canton-sdk.d.ts +1 -0
- package/dist/sdk/canton-sdk.d.ts.map +1 -1
- package/dist/sdk/canton-sdk.js +1 -1
- package/dist/sdk/index.js +1 -1
- package/dist/transaction.d.ts +30 -0
- package/dist/transaction.d.ts.map +1 -1
- package/dist/transaction.js +2 -2
- package/dist/types.d.ts +14 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -1
- package/package.json +10 -10
- package/dist/4SK2ZV46.js.map +0 -1
- package/dist/D3KVE5XQ.js.map +0 -1
- package/dist/DCDLEU2R.js.map +0 -1
- package/dist/HC2GOOAL.js.map +0 -1
- package/dist/IUQEDBC6.js.map +0 -1
- package/dist/K7FRAGGM.js.map +0 -1
- package/dist/KPFKPA5E.js.map +0 -1
- package/dist/NGED2YCU.js.map +0 -1
- package/dist/YBGD26CU.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/refresh/callback.ts"],"names":["IOAPP","CONFIG","REGISTRY","LIMITER","PENDING","OFT_SELF","OFT_CONFIG","LOCK_UNLOCK","LOCK_UNLOCK_CONFIG","BURN_MINT","BURN_MINT_CONFIG","cantonCallbackAppUid","admin","id","bytesToHex","keccak_256","TextEncoder","encode","getCantonCallbackFnArgs","context","appUid","fnName","current","key","Array","isArray","undefined","find","candidate","value","hasPositiveCantonCallbackOutflow","callbackContext","outbound","frozen","amount","Number","NaN","isFinite","shouldIncludeCantonCallbackRateLimiter","args","isGloballyDisabled","isAccept","cantonFinalizeCallbackBaseEntries","entries","cid","push","tag","matchesId","matchesTemplate","event","template","templateId","packageName","slice","indexOf","endsWith","exactlyOne","contracts","label","length","Error","requireDisclosure","sdk","informee","created","archived","fetchEventsByContractId","createDisclosure","decimalSetting","test","resolveCantonFinalizeCallback","input","pendingCallbackCid","contractId","isTrustedOrigin","pending","createArgument","oappId","offset","getLedgerEndOffset","query","interfaceId","gateway","moduleName","entityName","split","packageId","getPackageId","resolvedInterfaceId","queryActiveContractsByInterface","includeCreatedEventBlob","filter","contract","views","createdEvent","interfaceViews","view","viewValue","viewStatus","code","areExpectedSignatories","oappGateway","callbacks","configs","Promise","all","callback","config","error","IOAppResolutionError","wrap","kind","payload","instrumentId","assetInstrumentId","decimals","localDecimals","sharedDecimals","rateLimiterScaleDecimals","rateLimiterConfig","scaleDecimals","treasury","mintEscrow","identity","pendingDisclosure","disclosedContracts","callbackDisclosure","registryCid","lzReceiveParty","receiveArgs","message","fingerprint","registries","registry","hints","fingerprintToHint","some","partyIdFromRegistryFingerprint","rateLimiterStateCid","limiter","adapterContext","burnMintContext","sendArgs","name","resolveLockUnlockCallbackContext","environment","receivers","cantonAdapterCallbackReceivers","pendingCallback","resolveBurnMintCallbackContext","oappAdmin","address","configCid","cantonLockUnlockCallbackEntries","cantonBurnMintCallbackEntries","executeContext","callbackCid","lzSendArgs","parties","Set","parseIndexedPayoutParties","sender","lzReceiveArgs","count","index","party","treasuryAssetCids","map","transferFactoryCid","assetTransferContext","burnMintFactoryCid"],"mappings":"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","file":"E6W3YWXU.js","sourcesContent":["import type { ContractId } from '@daml/types';\nimport { keccak_256 } from '@noble/hashes/sha3';\n\nimport { bytesToHex } from '@layerzerolabs/common-encoding-utils';\n\nimport { IOAppResolutionError } from '../errors';\nimport type { CreatedEvent, JsActiveContract } from '../open-api/models';\nimport type { CantonSdk } from '../sdk/canton-sdk';\nimport type { CantonDisclosedContract } from '../transaction';\nimport { areExpectedSignatories, isTrustedOrigin } from '../trusted-origin';\nimport { resolveBurnMintCallbackContext } from './callback-burn-mint';\nimport { callbackDisclosure } from './callback-contracts';\nimport { resolveLockUnlockCallbackContext } from './callback-lock-unlock';\nimport type { CantonFinalizeCallbackRefresh } from './plan';\nimport { partyIdFromRegistryFingerprint } from './registry-context';\nexport { callbackDisclosure, callbackInterfaceView } from './callback-contracts';\n\nconst IOAPP = '#layerzero-ioapp:IOApp:IOApp';\nconst CONFIG = '#layerzero-ioapp-config:IOAppConfig:IOAppConfig';\nconst REGISTRY = '#layerzero-iregistry:IRegistry:IRegistry';\nconst LIMITER = '#layerzero-irate-limiter:IRateLimitState:IRateLimitState';\nconst PENDING = '#layerzero-request:PendingCallback:PendingCallback';\nconst OFT_SELF = '#layerzero-oft:OftSelf:OftSelf';\nconst OFT_CONFIG = '#layerzero-oft:OftSelfConfig:OftSelfConfig';\nconst LOCK_UNLOCK = '#layerzero-lock-unlock-adapter:LockUnlockAdapter:LockUnlockAdapter';\nconst LOCK_UNLOCK_CONFIG = '#layerzero-lock-unlock-adapter:AdapterConfig:AdapterConfig';\n\nconst BURN_MINT = '#layerzero-burn-mint-adapter:BurnMintAdapter:BurnMintAdapter';\nconst BURN_MINT_CONFIG = '#layerzero-burn-mint-adapter:AdapterConfig:AdapterConfig';\n\nexport type CantonCallbackOAppId = { admin: string; id: string };\ntype CallbackArgs = Array<[string, { tag: string; value: unknown }]>;\ntype CallbackInput = CantonFinalizeCallbackRefresh['resolver'];\ntype CallbackContext = Array<\n [\n string,\n Array<\n [\n { tag: 'Addr_Text'; value: string },\n Array<\n [\n string,\n Array<[{ tag: 'Addr_Text'; value: string }, Array<[string, CallbackArgs]>]>,\n ]\n >,\n ]\n >,\n ]\n>;\ntype CallbackIdentity = CallbackInput['identity'];\ntype PendingCallback = {\n handler: string;\n sender: string;\n oappId: CantonCallbackOAppId;\n callbackContext: unknown;\n isAccept: boolean;\n};\n\nexport const cantonCallbackAppUid = (admin: string, id: string): string =>\n bytesToHex(keccak_256(new TextEncoder().encode(`${admin}|${id}`)));\n\nexport const getCantonCallbackFnArgs = (\n context: unknown,\n appUid: string,\n fnName: string,\n): CallbackArgs | undefined => {\n let current = context;\n for (const key of ['OApp', appUid, 'OApp', appUid, fnName]) {\n if (!Array.isArray(current)) return undefined;\n current = current.find(\n ([candidate]: [unknown]) =>\n candidate === key ||\n (candidate !== null &&\n typeof candidate === 'object' &&\n 'value' in candidate &&\n candidate.value === key),\n )?.[1];\n }\n return current as CallbackArgs | undefined;\n};\n\nexport const hasPositiveCantonCallbackOutflow = (\n callbackContext: unknown,\n appUid: string,\n): boolean => {\n const outbound = getCantonCallbackFnArgs(callbackContext, appUid, 'LzSend_callback');\n const frozen = outbound?.find(([key]) => key === 'rlScaledAmount')?.[1].value;\n const amount =\n typeof frozen === 'number' || typeof frozen === 'string' || typeof frozen === 'bigint'\n ? Number(frozen)\n : NaN;\n return Number.isFinite(amount) && amount > 0;\n};\n\nexport const shouldIncludeCantonCallbackRateLimiter = (args: {\n callbackContext: unknown;\n appUid: string;\n isGloballyDisabled: boolean;\n isAccept: boolean;\n}): boolean => {\n if (hasPositiveCantonCallbackOutflow(args.callbackContext, args.appUid)) return true;\n return (\n !args.isGloballyDisabled &&\n args.isAccept &&\n getCantonCallbackFnArgs(args.callbackContext, args.appUid, 'LzReceive_callback') !==\n undefined\n );\n};\n\nexport const cantonFinalizeCallbackBaseEntries = (args: {\n configCid: string;\n registryCid?: string;\n rateLimiterStateCid?: string;\n}): Array<[string, Array<[string, { tag: 'AV_ContractId'; value: string }]>]> => {\n const entries: Array<[string, Array<[string, { tag: 'AV_ContractId'; value: string }]>]> = [];\n for (const key of ['configCid', 'registryCid', 'rateLimiterStateCid'] as const) {\n const cid = args[key];\n if (cid) entries.push([key, [[key, { tag: 'AV_ContractId', value: cid }]]]);\n }\n return entries;\n};\n\nconst matchesId = (candidate: unknown, id: CantonCallbackOAppId): boolean => {\n const value = candidate as CantonCallbackOAppId | undefined;\n return value?.admin === id.admin && value.id === id.id;\n};\nconst matchesTemplate = (event: CreatedEvent, template: string): boolean =>\n event.templateId === template ||\n (event.packageName === template.slice(1, template.indexOf(':')) &&\n event.templateId.endsWith(template.slice(template.indexOf(':'))));\nconst exactlyOne = (contracts: JsActiveContract[], label: string): JsActiveContract => {\n if (contracts.length !== 1)\n throw new Error(`Expected exactly one ${label}, found ${contracts.length}`);\n return contracts[0]!;\n};\nconst requireDisclosure = async (\n sdk: CantonSdk,\n informee: string,\n cid: string,\n): Promise<CantonDisclosedContract> => {\n const { created, archived } = await sdk.fetchEventsByContractId(cid, [informee]);\n if (!created || archived) throw new Error(`Callback dependency ${cid} is missing or archived`);\n const value = await sdk.createDisclosure(cid as ContractId<object>, [informee]);\n if (!value) throw new Error(`Missing disclosure for ${cid}`);\n return value;\n};\nconst decimalSetting = (value: unknown): string => {\n if (typeof value !== 'string' || !/^\\d+$/.test(value)) {\n throw new Error('Callback decimal settings must be Daml Int strings');\n }\n return value;\n};\n\nexport const resolveCantonFinalizeCallback = async (\n sdk: CantonSdk,\n input: Omit<CallbackInput, 'type' | 'oappId' | 'identity'> & {\n oappId?: CantonCallbackOAppId;\n identity?: CallbackIdentity;\n },\n) => {\n const { created, archived } = await sdk.fetchEventsByContractId(input.pendingCallbackCid, [\n input.informee,\n ]);\n if (\n !created ||\n archived ||\n created.contractId !== input.pendingCallbackCid ||\n !matchesTemplate(created, PENDING) ||\n !isTrustedOrigin(created, input.informee, 'handler')\n ) {\n throw new Error(\n 'PendingCallback is missing, archived, or not from the expected handler/template',\n );\n }\n const pending = created.createArgument as PendingCallback;\n if (\n !pending.oappId?.admin ||\n !pending.oappId.id ||\n (input.oappId && !matchesId(pending.oappId, input.oappId))\n ) {\n throw new Error('PendingCallback OApp identity mismatch');\n }\n const oappId = pending.oappId;\n const offset = await sdk.getLedgerEndOffset();\n const query = async (interfaceId: string, gateway?: string) => {\n const [packageName, moduleName, entityName] = interfaceId.slice(1).split(':');\n const packageId = await sdk.getPackageId(packageName!, [input.informee]);\n const resolvedInterfaceId = `${packageId}:${moduleName}:${entityName}`;\n return (\n await sdk.queryActiveContractsByInterface([input.informee], offset, [interfaceId], {\n includeCreatedEventBlob: true,\n })\n ).filter((contract) => {\n const views =\n contract.createdEvent.interfaceViews?.filter(\n (view) => view.interfaceId === resolvedInterfaceId,\n ) ?? [];\n const view = views[0]?.viewValue as Record<string, unknown> | undefined;\n return (\n views.length === 1 &&\n views[0]?.viewStatus?.code === 0 &&\n view != null &&\n areExpectedSignatories(contract.createdEvent, [oappId.admin]) &&\n matchesId(view.oappId, oappId) &&\n (gateway === undefined || view.oappGateway === gateway)\n );\n });\n };\n const [callbacks, configs] = await Promise.all([query(IOAPP, input.informee), query(CONFIG)]);\n let callback: JsActiveContract;\n let config: JsActiveContract;\n try {\n callback = exactlyOne(callbacks, 'callback for OApp/gateway');\n config = exactlyOne(configs, 'callback config for OApp');\n } catch (error) {\n throw IOAppResolutionError.wrap(error, 'Could not resolve callback contracts');\n }\n const kind =\n matchesTemplate(callback.createdEvent, OFT_SELF) &&\n matchesTemplate(config.createdEvent, OFT_CONFIG)\n ? 'oft-self'\n : matchesTemplate(callback.createdEvent, LOCK_UNLOCK) &&\n matchesTemplate(config.createdEvent, LOCK_UNLOCK_CONFIG)\n ? 'lock-unlock-adapter'\n : matchesTemplate(callback.createdEvent, BURN_MINT) &&\n matchesTemplate(config.createdEvent, BURN_MINT_CONFIG)\n ? 'burn-mint-adapter'\n : undefined;\n if (!kind)\n throw new Error('Callback kind changed or is unsupported; repopulate the transaction');\n const payload = config.createdEvent.createArgument as {\n instrumentId?: CantonCallbackOAppId;\n assetInstrumentId?: CantonCallbackOAppId;\n localDecimals: string;\n sharedDecimals: string;\n rateLimiterConfig: { scaleDecimals: string; isGloballyDisabled: boolean };\n };\n const instrumentId = kind === 'oft-self' ? payload.instrumentId : payload.assetInstrumentId;\n if (\n !instrumentId?.admin ||\n !instrumentId.id ||\n (kind === 'oft-self' && !matchesId(instrumentId, oappId))\n ) {\n throw new Error('Callback instrument changed; repopulate the transaction');\n }\n const decimals = {\n instrumentId: { ...instrumentId },\n localDecimals: decimalSetting(payload.localDecimals),\n sharedDecimals: decimalSetting(payload.sharedDecimals),\n rateLimiterScaleDecimals: decimalSetting(payload.rateLimiterConfig.scaleDecimals),\n };\n const treasury = (callback.createdEvent.createArgument as { treasury?: unknown }).treasury;\n if (kind === 'lock-unlock-adapter' && (typeof treasury !== 'string' || !treasury)) {\n throw new Error('Lock/unlock callback treasury is required');\n }\n const mintEscrow = (callback.createdEvent.createArgument as { mintEscrow?: unknown })\n .mintEscrow;\n if (kind === 'burn-mint-adapter' && (typeof mintEscrow !== 'string' || !mintEscrow)) {\n throw new Error('Burn/mint callback mintEscrow is required');\n }\n const identity: CallbackIdentity =\n kind === 'oft-self'\n ? { kind, ...decimals }\n : kind === 'lock-unlock-adapter'\n ? { kind, ...decimals, treasury: treasury as string }\n : { kind, ...decimals, mintEscrow: mintEscrow as string };\n if (\n input.identity &&\n (input.identity.kind !== identity.kind ||\n !matchesId(input.identity.instrumentId, identity.instrumentId) ||\n input.identity.localDecimals !== identity.localDecimals ||\n input.identity.sharedDecimals !== identity.sharedDecimals ||\n input.identity.rateLimiterScaleDecimals !== identity.rateLimiterScaleDecimals ||\n (input.identity.kind === 'lock-unlock-adapter' &&\n identity.kind === 'lock-unlock-adapter' &&\n input.identity.treasury !== identity.treasury) ||\n (input.identity.kind === 'burn-mint-adapter' &&\n identity.kind === 'burn-mint-adapter' &&\n input.identity.mintEscrow !== identity.mintEscrow))\n ) {\n throw new Error('Callback economic identity changed; repopulate the transaction');\n }\n const pendingDisclosure = await sdk.createDisclosure(\n input.pendingCallbackCid as ContractId<object>,\n [input.informee],\n );\n if (!pendingDisclosure) throw new Error(`Missing disclosure for ${input.pendingCallbackCid}`);\n const disclosedContracts = [\n pendingDisclosure,\n callbackDisclosure(callback),\n callbackDisclosure(config),\n ];\n const appUid = cantonCallbackAppUid(oappId.admin, oappId.id);\n let registryCid: string | undefined;\n let lzReceiveParty: string | undefined;\n const receiveArgs = getCantonCallbackFnArgs(\n pending.callbackContext,\n appUid,\n 'LzReceive_callback',\n );\n if (pending.isAccept && receiveArgs) {\n const message = receiveArgs.find(([key]) => key === 'lzMessage')?.[1].value;\n if (typeof message !== 'string') throw new Error('lzMessage not found in callbackContext');\n const fingerprint = message.slice(0, 64);\n const registries = (await query(REGISTRY)).filter((registry) => {\n const hints = (registry.createdEvent.createArgument as { fingerprintToHint: unknown })\n .fingerprintToHint;\n return Array.isArray(hints)\n ? hints.some(([key]) => key === fingerprint)\n : hints !== null && typeof hints === 'object' && fingerprint in hints;\n });\n const registry = exactlyOne(registries, `Registry for fingerprint ${fingerprint}`);\n registryCid = registry.createdEvent.contractId;\n if (identity.kind !== 'oft-self') {\n lzReceiveParty = partyIdFromRegistryFingerprint(\n registry.createdEvent.createArgument as { fingerprintToHint: unknown },\n fingerprint,\n );\n }\n disclosedContracts.push(callbackDisclosure(registry));\n }\n let rateLimiterStateCid: string | undefined;\n if (\n shouldIncludeCantonCallbackRateLimiter({\n callbackContext: pending.callbackContext,\n appUid,\n isGloballyDisabled: payload.rateLimiterConfig.isGloballyDisabled,\n isAccept: pending.isAccept,\n })\n ) {\n const limiter = exactlyOne(await query(LIMITER), 'callback rate limiter');\n rateLimiterStateCid = limiter.createdEvent.contractId;\n disclosedContracts.push(callbackDisclosure(limiter));\n }\n let adapterContext: Awaited<ReturnType<typeof resolveLockUnlockCallbackContext>> | undefined;\n let burnMintContext: Awaited<ReturnType<typeof resolveBurnMintCallbackContext>> | undefined;\n if (identity.kind === 'oft-self') {\n const sendArgs = getCantonCallbackFnArgs(\n pending.callbackContext,\n appUid,\n 'LzSend_callback',\n );\n for (const key of ['oftHoldingCid', 'payoutHoldingCid']) {\n const cid = sendArgs?.find(([name]) => name === key)?.[1].value;\n if (typeof cid === 'string' && cid)\n disclosedContracts.push(await requireDisclosure(sdk, input.informee, cid));\n }\n } else if (identity.kind === 'lock-unlock-adapter') {\n adapterContext = await resolveLockUnlockCallbackContext({\n sdk,\n informee: input.informee,\n appUid,\n treasury: identity.treasury,\n instrumentId: identity.instrumentId,\n offset,\n environment: input.environment,\n receivers: cantonAdapterCallbackReceivers({\n pendingCallback: pending,\n appUid,\n lzReceiveParty,\n treasury: identity.treasury,\n }),\n });\n disclosedContracts.push(...adapterContext.disclosedContracts);\n } else {\n burnMintContext = await resolveBurnMintCallbackContext({\n sdk,\n informee: input.informee,\n appUid,\n oappAdmin: oappId.admin,\n mintEscrow: identity.mintEscrow,\n instrumentId: identity.instrumentId,\n offset,\n environment: input.environment,\n receivers: cantonAdapterCallbackReceivers({\n pendingCallback: pending,\n appUid,\n lzReceiveParty,\n }),\n });\n disclosedContracts.push(...burnMintContext.disclosedContracts);\n }\n const address = { tag: 'Addr_Text' as const, value: appUid };\n const entries: Array<[string, CallbackArgs]> = cantonFinalizeCallbackBaseEntries({\n configCid: config.createdEvent.contractId,\n registryCid,\n rateLimiterStateCid,\n });\n if (adapterContext) entries.push(...cantonLockUnlockCallbackEntries(adapterContext));\n if (burnMintContext)\n entries.push(\n ...cantonLockUnlockCallbackEntries(burnMintContext),\n ...cantonBurnMintCallbackEntries(burnMintContext),\n );\n const executeContext: CallbackContext = [\n ['OApp', [[address, [['OApp', [[address, entries]]]]]]],\n ];\n return {\n callbackCid: callback.createdEvent.contractId,\n executeContext,\n disclosedContracts,\n oappId,\n identity,\n };\n};\n\nexport type CantonAdapterReceiversInput = {\n pendingCallback: {\n isAccept: boolean;\n sender: string;\n callbackContext: unknown;\n };\n appUid: string;\n lzReceiveParty?: string;\n treasury?: string;\n};\n\nexport const cantonAdapterCallbackReceivers = ({\n pendingCallback,\n appUid,\n lzReceiveParty,\n treasury,\n}: CantonAdapterReceiversInput): string[] => {\n const lzSendArgs = getCantonCallbackFnArgs(\n pendingCallback.callbackContext,\n appUid,\n 'LzSend_callback',\n );\n if (lzSendArgs) {\n if (pendingCallback.isAccept) {\n const parties = [...new Set(parseIndexedPayoutParties(lzSendArgs))];\n return parties.length > 0 ? parties : treasury ? [treasury] : [];\n }\n return [pendingCallback.sender];\n }\n\n const lzReceiveArgs = getCantonCallbackFnArgs(\n pendingCallback.callbackContext,\n appUid,\n 'LzReceive_callback',\n );\n if (lzReceiveArgs) {\n if (!pendingCallback.isAccept) {\n return [];\n }\n if (!lzReceiveParty) {\n throw new Error('lzReceiveParty is required for LzReceive accept');\n }\n return [lzReceiveParty];\n }\n\n throw new Error('callbackContext is neither LzSend nor LzReceive');\n};\n\nconst parseIndexedPayoutParties = (\n args: NonNullable<ReturnType<typeof getCantonCallbackFnArgs>>,\n): string[] => {\n const count = Number(args.find(([key]) => key === 'receiverCount')?.[1].value ?? 0);\n\n const parties: string[] = [];\n for (let index = 0; index < count; index += 1) {\n const party = args.find(([key]) => key === `receiver_${index}`)?.[1].value;\n if (typeof party !== 'string' || party === '') {\n throw new Error(`LzSend callback missing receiver_${index}`);\n }\n parties.push(party);\n }\n return parties;\n};\n\nexport const cantonLockUnlockCallbackEntries = (args: {\n treasuryAssetCids?: string[];\n transferFactoryCid?: string;\n assetTransferContext?: Record<string, unknown>;\n}): Array<[string, CallbackArgs]> => {\n const entries: Array<[string, CallbackArgs]> = [];\n if (args.treasuryAssetCids)\n entries.push([\n 'treasuryAssetCids',\n [\n [\n 'treasuryAssetCids',\n {\n tag: 'AV_List',\n value: args.treasuryAssetCids.map((value) => ({\n tag: 'AV_ContractId',\n value,\n })),\n },\n ],\n ],\n ]);\n if (args.transferFactoryCid)\n entries.push([\n 'transferFactoryCid',\n [\n [\n 'transferFactoryCid',\n {\n tag: 'AV_ContractId',\n value: args.transferFactoryCid,\n },\n ],\n ],\n ]);\n if (args.assetTransferContext)\n entries.push([\n 'assetTransferContext',\n [\n [\n 'assetTransferContext',\n {\n tag: 'AV_Map',\n value: args.assetTransferContext,\n },\n ],\n ],\n ]);\n return entries;\n};\n\nexport const cantonBurnMintCallbackEntries = (args: {\n burnMintFactoryCid?: string;\n burnMintExtraArgs?: Record<string, unknown>;\n burnMintOutputContext?: Record<string, unknown>;\n}): Array<[string, CallbackArgs]> => {\n const entries: Array<[string, CallbackArgs]> = [];\n if (args.burnMintFactoryCid)\n entries.push([\n 'burnMintFactoryCid',\n [['burnMintFactoryCid', { tag: 'AV_ContractId', value: args.burnMintFactoryCid }]],\n ]);\n for (const key of ['burnMintExtraArgs', 'burnMintOutputContext'] as const) {\n if (args[key]) entries.push([key, [[key, { tag: 'AV_Map', value: args[key] }]]]);\n }\n return entries;\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/refresh/callback.ts"],"names":["IOAPP","CONFIG","REGISTRY","LIMITER","PENDING","OFT_SELF","OFT_CONFIG","LOCK_UNLOCK","LOCK_UNLOCK_CONFIG","BURN_MINT","BURN_MINT_CONFIG","cantonCallbackAppUid","admin","id","bytesToHex","keccak_256","TextEncoder","encode","getCantonCallbackFnArgs","context","appUid","fnName","current","key","Array","isArray","undefined","find","candidate","value","hasPositiveCantonCallbackOutflow","callbackContext","outbound","frozen","amount","Number","NaN","isFinite","shouldIncludeCantonCallbackRateLimiter","args","isGloballyDisabled","isAccept","cantonFinalizeCallbackBaseEntries","entries","cid","push","tag","matchesId","matchesTemplate","event","template","templateId","packageName","slice","indexOf","endsWith","exactlyOne","contracts","label","length","Error","requireDisclosure","sdk","informee","created","archived","fetchEventsByContractId","createDisclosure","decimalSetting","test","resolveCantonFinalizeCallback","input","pendingCallbackCid","contractId","isTrustedOrigin","pending","createArgument","oappId","offset","getLedgerEndOffset","query","interfaceId","gateway","moduleName","entityName","split","packageId","getPackageId","resolvedInterfaceId","queryActiveContractsByInterface","includeCreatedEventBlob","filter","contract","views","createdEvent","interfaceViews","view","viewValue","viewStatus","code","areExpectedSignatories","oappGateway","callbacks","configs","Promise","all","callback","config","error","IOAppResolutionError","wrap","kind","payload","instrumentId","assetInstrumentId","decimals","localDecimals","sharedDecimals","rateLimiterScaleDecimals","rateLimiterConfig","scaleDecimals","treasury","mintEscrow","identity","pendingDisclosure","disclosedContracts","callbackDisclosure","registryCid","lzReceiveParty","receiveArgs","message","fingerprint","registries","registry","hints","fingerprintToHint","some","partyIdFromRegistryFingerprint","rateLimiterStateCid","limiter","adapterContext","burnMintContext","sendArgs","name","resolveLockUnlockCallbackContext","environment","receivers","cantonAdapterCallbackReceivers","pendingCallback","resolveBurnMintCallbackContext","oappAdmin","address","configCid","cantonLockUnlockCallbackEntries","cantonBurnMintCallbackEntries","executeContext","callbackCid","lzSendArgs","parties","Set","parseIndexedPayoutParties","sender","lzReceiveArgs","count","index","party","treasuryAssetCids","map","transferFactoryCid","assetTransferContext","burnMintFactoryCid"],"mappings":"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","file":"MRAAJXQA.js","sourcesContent":["import type { ContractId } from '@daml/types';\nimport { keccak_256 } from '@noble/hashes/sha3';\n\nimport { bytesToHex } from '@layerzerolabs/common-encoding-utils';\n\nimport { IOAppResolutionError } from '../errors';\nimport type { CreatedEvent, JsActiveContract } from '../open-api/models';\nimport type { CantonSdk } from '../sdk/canton-sdk';\nimport type { CantonDisclosedContract } from '../transaction';\nimport { areExpectedSignatories, isTrustedOrigin } from '../trusted-origin';\nimport { resolveBurnMintCallbackContext } from './callback-burn-mint';\nimport { callbackDisclosure } from './callback-contracts';\nimport { resolveLockUnlockCallbackContext } from './callback-lock-unlock';\nimport type { CantonFinalizeCallbackRefresh } from './plan';\nimport { partyIdFromRegistryFingerprint } from './registry-context';\nexport { callbackDisclosure, callbackInterfaceView } from './callback-contracts';\n\nconst IOAPP = '#layerzero-ioapp:IOApp:IOApp';\nconst CONFIG = '#layerzero-ioapp-config:IOAppConfig:IOAppConfig';\nconst REGISTRY = '#layerzero-iregistry:IRegistry:IRegistry';\nconst LIMITER = '#layerzero-irate-limiter:IRateLimitState:IRateLimitState';\nconst PENDING = '#layerzero-request:PendingCallback:PendingCallback';\nconst OFT_SELF = '#layerzero-oft:OftSelf:OftSelf';\nconst OFT_CONFIG = '#layerzero-oft:OftSelfConfig:OftSelfConfig';\nconst LOCK_UNLOCK = '#layerzero-lock-unlock-adapter:LockUnlockAdapter:LockUnlockAdapter';\nconst LOCK_UNLOCK_CONFIG = '#layerzero-lock-unlock-adapter:AdapterConfig:AdapterConfig';\n\nconst BURN_MINT = '#layerzero-burn-mint-adapter:BurnMintAdapter:BurnMintAdapter';\nconst BURN_MINT_CONFIG = '#layerzero-burn-mint-adapter:AdapterConfig:AdapterConfig';\n\nexport type CantonCallbackOAppId = { admin: string; id: string };\ntype CallbackArgs = Array<[string, { tag: string; value: unknown }]>;\ntype CallbackInput = CantonFinalizeCallbackRefresh['resolver'];\ntype CallbackContext = Array<\n [\n string,\n Array<\n [\n { tag: 'Addr_Text'; value: string },\n Array<\n [\n string,\n Array<[{ tag: 'Addr_Text'; value: string }, Array<[string, CallbackArgs]>]>,\n ]\n >,\n ]\n >,\n ]\n>;\ntype CallbackIdentity = CallbackInput['identity'];\ntype PendingCallback = {\n handler: string;\n sender: string;\n oappId: CantonCallbackOAppId;\n callbackContext: unknown;\n isAccept: boolean;\n};\n\nexport const cantonCallbackAppUid = (admin: string, id: string): string =>\n bytesToHex(keccak_256(new TextEncoder().encode(`${admin}|${id}`)));\n\nexport const getCantonCallbackFnArgs = (\n context: unknown,\n appUid: string,\n fnName: string,\n): CallbackArgs | undefined => {\n let current = context;\n for (const key of ['OApp', appUid, 'OApp', appUid, fnName]) {\n if (!Array.isArray(current)) return undefined;\n current = current.find(\n ([candidate]: [unknown]) =>\n candidate === key ||\n (candidate !== null &&\n typeof candidate === 'object' &&\n 'value' in candidate &&\n candidate.value === key),\n )?.[1];\n }\n return current as CallbackArgs | undefined;\n};\n\nexport const hasPositiveCantonCallbackOutflow = (\n callbackContext: unknown,\n appUid: string,\n): boolean => {\n const outbound = getCantonCallbackFnArgs(callbackContext, appUid, 'LzSend_callback');\n const frozen = outbound?.find(([key]) => key === 'rlScaledAmount')?.[1].value;\n const amount =\n typeof frozen === 'number' || typeof frozen === 'string' || typeof frozen === 'bigint'\n ? Number(frozen)\n : NaN;\n return Number.isFinite(amount) && amount > 0;\n};\n\nexport const shouldIncludeCantonCallbackRateLimiter = (args: {\n callbackContext: unknown;\n appUid: string;\n isGloballyDisabled: boolean;\n isAccept: boolean;\n}): boolean => {\n if (hasPositiveCantonCallbackOutflow(args.callbackContext, args.appUid)) return true;\n return (\n !args.isGloballyDisabled &&\n args.isAccept &&\n getCantonCallbackFnArgs(args.callbackContext, args.appUid, 'LzReceive_callback') !==\n undefined\n );\n};\n\nexport const cantonFinalizeCallbackBaseEntries = (args: {\n configCid: string;\n registryCid?: string;\n rateLimiterStateCid?: string;\n}): Array<[string, Array<[string, { tag: 'AV_ContractId'; value: string }]>]> => {\n const entries: Array<[string, Array<[string, { tag: 'AV_ContractId'; value: string }]>]> = [];\n for (const key of ['configCid', 'registryCid', 'rateLimiterStateCid'] as const) {\n const cid = args[key];\n if (cid) entries.push([key, [[key, { tag: 'AV_ContractId', value: cid }]]]);\n }\n return entries;\n};\n\nconst matchesId = (candidate: unknown, id: CantonCallbackOAppId): boolean => {\n const value = candidate as CantonCallbackOAppId | undefined;\n return value?.admin === id.admin && value.id === id.id;\n};\nconst matchesTemplate = (event: CreatedEvent, template: string): boolean =>\n event.templateId === template ||\n (event.packageName === template.slice(1, template.indexOf(':')) &&\n event.templateId.endsWith(template.slice(template.indexOf(':'))));\nconst exactlyOne = (contracts: JsActiveContract[], label: string): JsActiveContract => {\n if (contracts.length !== 1)\n throw new Error(`Expected exactly one ${label}, found ${contracts.length}`);\n return contracts[0]!;\n};\nconst requireDisclosure = async (\n sdk: CantonSdk,\n informee: string,\n cid: string,\n): Promise<CantonDisclosedContract> => {\n const { created, archived } = await sdk.fetchEventsByContractId(cid, [informee]);\n if (!created || archived) throw new Error(`Callback dependency ${cid} is missing or archived`);\n const value = await sdk.createDisclosure(cid as ContractId<object>, [informee]);\n if (!value) throw new Error(`Missing disclosure for ${cid}`);\n return value;\n};\nconst decimalSetting = (value: unknown): string => {\n if (typeof value !== 'string' || !/^\\d+$/.test(value)) {\n throw new Error('Callback decimal settings must be Daml Int strings');\n }\n return value;\n};\n\nexport const resolveCantonFinalizeCallback = async (\n sdk: CantonSdk,\n input: Omit<CallbackInput, 'type' | 'oappId' | 'identity'> & {\n oappId?: CantonCallbackOAppId;\n identity?: CallbackIdentity;\n },\n) => {\n const { created, archived } = await sdk.fetchEventsByContractId(input.pendingCallbackCid, [\n input.informee,\n ]);\n if (\n !created ||\n archived ||\n created.contractId !== input.pendingCallbackCid ||\n !matchesTemplate(created, PENDING) ||\n !isTrustedOrigin(created, input.informee, 'handler')\n ) {\n throw new Error(\n 'PendingCallback is missing, archived, or not from the expected handler/template',\n );\n }\n const pending = created.createArgument as PendingCallback;\n if (\n !pending.oappId?.admin ||\n !pending.oappId.id ||\n (input.oappId && !matchesId(pending.oappId, input.oappId))\n ) {\n throw new Error('PendingCallback OApp identity mismatch');\n }\n const oappId = pending.oappId;\n const offset = await sdk.getLedgerEndOffset();\n const query = async (interfaceId: string, gateway?: string) => {\n const [packageName, moduleName, entityName] = interfaceId.slice(1).split(':');\n const packageId = await sdk.getPackageId(packageName!, [input.informee]);\n const resolvedInterfaceId = `${packageId}:${moduleName}:${entityName}`;\n return (\n await sdk.queryActiveContractsByInterface([input.informee], offset, [interfaceId], {\n includeCreatedEventBlob: true,\n })\n ).filter((contract) => {\n const views =\n contract.createdEvent.interfaceViews?.filter(\n (view) => view.interfaceId === resolvedInterfaceId,\n ) ?? [];\n const view = views[0]?.viewValue as Record<string, unknown> | undefined;\n return (\n views.length === 1 &&\n views[0]?.viewStatus?.code === 0 &&\n view != null &&\n areExpectedSignatories(contract.createdEvent, [oappId.admin]) &&\n matchesId(view.oappId, oappId) &&\n (gateway === undefined || view.oappGateway === gateway)\n );\n });\n };\n const [callbacks, configs] = await Promise.all([query(IOAPP, input.informee), query(CONFIG)]);\n let callback: JsActiveContract;\n let config: JsActiveContract;\n try {\n callback = exactlyOne(callbacks, 'callback for OApp/gateway');\n config = exactlyOne(configs, 'callback config for OApp');\n } catch (error) {\n throw IOAppResolutionError.wrap(error, 'Could not resolve callback contracts');\n }\n const kind =\n matchesTemplate(callback.createdEvent, OFT_SELF) &&\n matchesTemplate(config.createdEvent, OFT_CONFIG)\n ? 'oft-self'\n : matchesTemplate(callback.createdEvent, LOCK_UNLOCK) &&\n matchesTemplate(config.createdEvent, LOCK_UNLOCK_CONFIG)\n ? 'lock-unlock-adapter'\n : matchesTemplate(callback.createdEvent, BURN_MINT) &&\n matchesTemplate(config.createdEvent, BURN_MINT_CONFIG)\n ? 'burn-mint-adapter'\n : undefined;\n if (!kind)\n throw new Error('Callback kind changed or is unsupported; repopulate the transaction');\n const payload = config.createdEvent.createArgument as {\n instrumentId?: CantonCallbackOAppId;\n assetInstrumentId?: CantonCallbackOAppId;\n localDecimals: string;\n sharedDecimals: string;\n rateLimiterConfig: { scaleDecimals: string; isGloballyDisabled: boolean };\n };\n const instrumentId = kind === 'oft-self' ? payload.instrumentId : payload.assetInstrumentId;\n if (\n !instrumentId?.admin ||\n !instrumentId.id ||\n (kind === 'oft-self' && !matchesId(instrumentId, oappId))\n ) {\n throw new Error('Callback instrument changed; repopulate the transaction');\n }\n const decimals = {\n instrumentId: { ...instrumentId },\n localDecimals: decimalSetting(payload.localDecimals),\n sharedDecimals: decimalSetting(payload.sharedDecimals),\n rateLimiterScaleDecimals: decimalSetting(payload.rateLimiterConfig.scaleDecimals),\n };\n const treasury = (callback.createdEvent.createArgument as { treasury?: unknown }).treasury;\n if (kind === 'lock-unlock-adapter' && (typeof treasury !== 'string' || !treasury)) {\n throw new Error('Lock/unlock callback treasury is required');\n }\n const mintEscrow = (callback.createdEvent.createArgument as { mintEscrow?: unknown })\n .mintEscrow;\n if (kind === 'burn-mint-adapter' && (typeof mintEscrow !== 'string' || !mintEscrow)) {\n throw new Error('Burn/mint callback mintEscrow is required');\n }\n const identity: CallbackIdentity =\n kind === 'oft-self'\n ? { kind, ...decimals }\n : kind === 'lock-unlock-adapter'\n ? { kind, ...decimals, treasury: treasury as string }\n : { kind, ...decimals, mintEscrow: mintEscrow as string };\n if (\n input.identity &&\n (input.identity.kind !== identity.kind ||\n !matchesId(input.identity.instrumentId, identity.instrumentId) ||\n input.identity.localDecimals !== identity.localDecimals ||\n input.identity.sharedDecimals !== identity.sharedDecimals ||\n input.identity.rateLimiterScaleDecimals !== identity.rateLimiterScaleDecimals ||\n (input.identity.kind === 'lock-unlock-adapter' &&\n identity.kind === 'lock-unlock-adapter' &&\n input.identity.treasury !== identity.treasury) ||\n (input.identity.kind === 'burn-mint-adapter' &&\n identity.kind === 'burn-mint-adapter' &&\n input.identity.mintEscrow !== identity.mintEscrow))\n ) {\n throw new Error('Callback economic identity changed; repopulate the transaction');\n }\n const pendingDisclosure = await sdk.createDisclosure(\n input.pendingCallbackCid as ContractId<object>,\n [input.informee],\n );\n if (!pendingDisclosure) throw new Error(`Missing disclosure for ${input.pendingCallbackCid}`);\n const disclosedContracts = [\n pendingDisclosure,\n callbackDisclosure(callback),\n callbackDisclosure(config),\n ];\n const appUid = cantonCallbackAppUid(oappId.admin, oappId.id);\n let registryCid: string | undefined;\n let lzReceiveParty: string | undefined;\n const receiveArgs = getCantonCallbackFnArgs(\n pending.callbackContext,\n appUid,\n 'LzReceive_callback',\n );\n if (pending.isAccept && receiveArgs) {\n const message = receiveArgs.find(([key]) => key === 'lzMessage')?.[1].value;\n if (typeof message !== 'string') throw new Error('lzMessage not found in callbackContext');\n const fingerprint = message.slice(0, 64);\n const registries = (await query(REGISTRY)).filter((registry) => {\n const hints = (registry.createdEvent.createArgument as { fingerprintToHint: unknown })\n .fingerprintToHint;\n return Array.isArray(hints)\n ? hints.some(([key]) => key === fingerprint)\n : hints !== null && typeof hints === 'object' && fingerprint in hints;\n });\n const registry = exactlyOne(registries, `Registry for fingerprint ${fingerprint}`);\n registryCid = registry.createdEvent.contractId;\n if (identity.kind !== 'oft-self') {\n lzReceiveParty = partyIdFromRegistryFingerprint(\n registry.createdEvent.createArgument as { fingerprintToHint: unknown },\n fingerprint,\n );\n }\n disclosedContracts.push(callbackDisclosure(registry));\n }\n let rateLimiterStateCid: string | undefined;\n if (\n shouldIncludeCantonCallbackRateLimiter({\n callbackContext: pending.callbackContext,\n appUid,\n isGloballyDisabled: payload.rateLimiterConfig.isGloballyDisabled,\n isAccept: pending.isAccept,\n })\n ) {\n const limiter = exactlyOne(await query(LIMITER), 'callback rate limiter');\n rateLimiterStateCid = limiter.createdEvent.contractId;\n disclosedContracts.push(callbackDisclosure(limiter));\n }\n let adapterContext: Awaited<ReturnType<typeof resolveLockUnlockCallbackContext>> | undefined;\n let burnMintContext: Awaited<ReturnType<typeof resolveBurnMintCallbackContext>> | undefined;\n if (identity.kind === 'oft-self') {\n const sendArgs = getCantonCallbackFnArgs(\n pending.callbackContext,\n appUid,\n 'LzSend_callback',\n );\n for (const key of ['oftHoldingCid', 'payoutHoldingCid']) {\n const cid = sendArgs?.find(([name]) => name === key)?.[1].value;\n if (typeof cid === 'string' && cid)\n disclosedContracts.push(await requireDisclosure(sdk, input.informee, cid));\n }\n } else if (identity.kind === 'lock-unlock-adapter') {\n adapterContext = await resolveLockUnlockCallbackContext({\n sdk,\n informee: input.informee,\n appUid,\n treasury: identity.treasury,\n instrumentId: identity.instrumentId,\n offset,\n environment: input.environment,\n receivers: cantonAdapterCallbackReceivers({\n pendingCallback: pending,\n appUid,\n lzReceiveParty,\n treasury: identity.treasury,\n }),\n });\n disclosedContracts.push(...adapterContext.disclosedContracts);\n } else {\n burnMintContext = await resolveBurnMintCallbackContext({\n sdk,\n informee: input.informee,\n appUid,\n oappAdmin: oappId.admin,\n mintEscrow: identity.mintEscrow,\n instrumentId: identity.instrumentId,\n offset,\n environment: input.environment,\n receivers: cantonAdapterCallbackReceivers({\n pendingCallback: pending,\n appUid,\n lzReceiveParty,\n }),\n });\n disclosedContracts.push(...burnMintContext.disclosedContracts);\n }\n const address = { tag: 'Addr_Text' as const, value: appUid };\n const entries: Array<[string, CallbackArgs]> = cantonFinalizeCallbackBaseEntries({\n configCid: config.createdEvent.contractId,\n registryCid,\n rateLimiterStateCid,\n });\n if (adapterContext) entries.push(...cantonLockUnlockCallbackEntries(adapterContext));\n if (burnMintContext)\n entries.push(\n ...cantonLockUnlockCallbackEntries(burnMintContext),\n ...cantonBurnMintCallbackEntries(burnMintContext),\n );\n const executeContext: CallbackContext = [\n ['OApp', [[address, [['OApp', [[address, entries]]]]]]],\n ];\n return {\n callbackCid: callback.createdEvent.contractId,\n executeContext,\n disclosedContracts,\n oappId,\n identity,\n };\n};\n\nexport type CantonAdapterReceiversInput = {\n pendingCallback: {\n isAccept: boolean;\n sender: string;\n callbackContext: unknown;\n };\n appUid: string;\n lzReceiveParty?: string;\n treasury?: string;\n};\n\nexport const cantonAdapterCallbackReceivers = ({\n pendingCallback,\n appUid,\n lzReceiveParty,\n treasury,\n}: CantonAdapterReceiversInput): string[] => {\n const lzSendArgs = getCantonCallbackFnArgs(\n pendingCallback.callbackContext,\n appUid,\n 'LzSend_callback',\n );\n if (lzSendArgs) {\n if (pendingCallback.isAccept) {\n const parties = [...new Set(parseIndexedPayoutParties(lzSendArgs))];\n return parties.length > 0 ? parties : treasury ? [treasury] : [];\n }\n return [pendingCallback.sender];\n }\n\n const lzReceiveArgs = getCantonCallbackFnArgs(\n pendingCallback.callbackContext,\n appUid,\n 'LzReceive_callback',\n );\n if (lzReceiveArgs) {\n if (!pendingCallback.isAccept) {\n return [];\n }\n if (!lzReceiveParty) {\n throw new Error('lzReceiveParty is required for LzReceive accept');\n }\n return [lzReceiveParty];\n }\n\n throw new Error('callbackContext is neither LzSend nor LzReceive');\n};\n\nconst parseIndexedPayoutParties = (\n args: NonNullable<ReturnType<typeof getCantonCallbackFnArgs>>,\n): string[] => {\n const count = Number(args.find(([key]) => key === 'receiverCount')?.[1].value ?? 0);\n\n const parties: string[] = [];\n for (let index = 0; index < count; index += 1) {\n const party = args.find(([key]) => key === `receiver_${index}`)?.[1].value;\n if (typeof party !== 'string' || party === '') {\n throw new Error(`LzSend callback missing receiver_${index}`);\n }\n parties.push(party);\n }\n return parties;\n};\n\nexport const cantonLockUnlockCallbackEntries = (args: {\n treasuryAssetCids?: string[];\n transferFactoryCid?: string;\n assetTransferContext?: Record<string, unknown>;\n}): Array<[string, CallbackArgs]> => {\n const entries: Array<[string, CallbackArgs]> = [];\n if (args.treasuryAssetCids)\n entries.push([\n 'treasuryAssetCids',\n [\n [\n 'treasuryAssetCids',\n {\n tag: 'AV_List',\n value: args.treasuryAssetCids.map((value) => ({\n tag: 'AV_ContractId',\n value,\n })),\n },\n ],\n ],\n ]);\n if (args.transferFactoryCid)\n entries.push([\n 'transferFactoryCid',\n [\n [\n 'transferFactoryCid',\n {\n tag: 'AV_ContractId',\n value: args.transferFactoryCid,\n },\n ],\n ],\n ]);\n if (args.assetTransferContext)\n entries.push([\n 'assetTransferContext',\n [\n [\n 'assetTransferContext',\n {\n tag: 'AV_Map',\n value: args.assetTransferContext,\n },\n ],\n ],\n ]);\n return entries;\n};\n\nexport const cantonBurnMintCallbackEntries = (args: {\n burnMintFactoryCid?: string;\n burnMintExtraArgs?: Record<string, unknown>;\n burnMintOutputContext?: Record<string, unknown>;\n}): Array<[string, CallbackArgs]> => {\n const entries: Array<[string, CallbackArgs]> = [];\n if (args.burnMintFactoryCid)\n entries.push([\n 'burnMintFactoryCid',\n [['burnMintFactoryCid', { tag: 'AV_ContractId', value: args.burnMintFactoryCid }]],\n ]);\n for (const key of ['burnMintExtraArgs', 'burnMintOutputContext'] as const) {\n if (args[key]) entries.push([key, [[key, { tag: 'AV_Map', value: args[key] }]]]);\n }\n return entries;\n};\n"]}
|
|
@@ -6,15 +6,19 @@ import { __name } from './VUOMXK5T.js';
|
|
|
6
6
|
var ACCESS_CONTROL = "#layerzero-iaccess-control:IAccessControl:IAccessControl";
|
|
7
7
|
var resolveCantonOneSigScopeContext = /* @__PURE__ */ __name(async (sdk, input) => {
|
|
8
8
|
const offset = await sdk.getLedgerEndOffset();
|
|
9
|
+
const parties = [
|
|
10
|
+
.../* @__PURE__ */ new Set([
|
|
11
|
+
input.informee,
|
|
12
|
+
...input.readAs ?? []
|
|
13
|
+
])
|
|
14
|
+
];
|
|
9
15
|
const matching = /* @__PURE__ */ __name(async (interfaceId) => {
|
|
10
16
|
const [name, ...entity] = interfaceId.slice(1).split(":");
|
|
11
17
|
const packageId = await sdk.getPackageId(name, [
|
|
12
18
|
input.informee
|
|
13
19
|
]);
|
|
14
20
|
const resolvedId = `${packageId}:${entity.join(":")}`;
|
|
15
|
-
return (await sdk.queryActiveContractsByInterface([
|
|
16
|
-
input.informee
|
|
17
|
-
], offset, [
|
|
21
|
+
return (await sdk.queryActiveContractsByInterface(parties, offset, [
|
|
18
22
|
interfaceId
|
|
19
23
|
], {
|
|
20
24
|
includeCreatedEventBlob: true
|
|
@@ -71,5 +75,5 @@ var resolveCantonOneSigScopeContext = /* @__PURE__ */ __name(async (sdk, input)
|
|
|
71
75
|
}, "resolveCantonOneSigScopeContext");
|
|
72
76
|
|
|
73
77
|
export { resolveCantonOneSigScopeContext };
|
|
74
|
-
//# sourceMappingURL=
|
|
75
|
-
//# sourceMappingURL=
|
|
78
|
+
//# sourceMappingURL=OK7GQCQM.js.map
|
|
79
|
+
//# sourceMappingURL=OK7GQCQM.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/refresh/onesig-scope.ts"],"names":["ACCESS_CONTROL","resolveCantonOneSigScopeContext","sdk","input","offset","getLedgerEndOffset","parties","Set","informee","readAs","matching","interfaceId","name","entity","slice","split","packageId","getPackageId","resolvedId","join","queryActiveContractsByInterface","includeCreatedEventBlob","filter","createdEvent","views","interfaceViews","view","scope","getCreateArgumentField","viewValue","length","viewStatus","code","areExpectedSignatories","admin","category","id","setter","operation","tag","field","undefined","targets","Error","target","disclosedContracts","callbackDisclosure","context","value","targetContractId","contractId","access","push","accessControlCid"],"mappings":"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","file":"OK7GQCQM.js","sourcesContent":["import type { JsActiveContract } from '../open-api/models';\nimport type { CantonSdk } from '../sdk/canton-sdk';\nimport type { CantonDisclosedContract } from '../transaction';\nimport { areExpectedSignatories, getCreateArgumentField } from '../trusted-origin';\nimport { callbackDisclosure } from './callback-contracts';\nimport type { CantonOneSigScopeContextRefresh } from './plan';\n\nconst ACCESS_CONTROL = '#layerzero-iaccess-control:IAccessControl:IAccessControl';\ntype Input = CantonOneSigScopeContextRefresh['resolver'];\nexport const resolveCantonOneSigScopeContext = async (\n sdk: CantonSdk,\n input: Input,\n): Promise<{\n context: { tag: string; value: Record<string, string | null> };\n disclosedContracts: CantonDisclosedContract[];\n}> => {\n const offset = await sdk.getLedgerEndOffset();\n const parties = [...new Set([input.informee, ...(input.readAs ?? [])])];\n const matching = async (interfaceId: string): Promise<JsActiveContract[]> => {\n const [name, ...entity] = interfaceId.slice(1).split(':');\n const packageId = await sdk.getPackageId(name!, [input.informee]);\n const resolvedId = `${packageId}:${entity.join(':')}`;\n return (\n await sdk.queryActiveContractsByInterface(parties, offset, [interfaceId], {\n includeCreatedEventBlob: true,\n })\n ).filter(({ createdEvent }) => {\n const views =\n createdEvent.interfaceViews?.filter((view) => view.interfaceId === resolvedId) ??\n [];\n const view = views[0];\n const scope = getCreateArgumentField(view?.viewValue, 'scope');\n return (\n views.length === 1 &&\n view?.viewStatus?.code === 0 &&\n areExpectedSignatories(createdEvent, [input.scope.admin]) &&\n getCreateArgumentField(scope, 'category') === input.scope.category &&\n getCreateArgumentField(scope, 'admin') === input.scope.admin &&\n getCreateArgumentField(scope, 'id') === input.scope.id\n );\n });\n };\n const setter =\n input.operation === 'OpSetMinFee'\n ? {\n interfaceId: '#layerzero-iminfee:IMinFee:IMinFee',\n tag: 'MinFeeContext',\n field: 'minFeeContractId',\n }\n : input.operation === 'OpSetMinPayoutValue'\n ? {\n interfaceId: '#layerzero-iminpayoutvalue:IMinPayoutValue:IMinPayoutValue',\n tag: 'MinPayoutValueContext',\n field: 'minPayoutValueContractId',\n }\n : input.operation === 'OpSetProtocolLedgerTimeValidityPeriod'\n ? {\n interfaceId:\n '#layerzero-iledger-time-validity-period:ILedgerTimeValidityPeriod:ILedgerTimeValidityPeriod',\n tag: 'LedgerTimeValidityContext',\n field: 'ledgerTimeValidityContractId',\n }\n : undefined;\n const targets = await matching(setter?.interfaceId ?? ACCESS_CONTROL);\n if (targets.length !== 1)\n throw new Error(`Expected exactly one scope target, found ${targets.length}`);\n const target = targets[0]!;\n const disclosedContracts = [callbackDisclosure(target)];\n if (!setter)\n return {\n context: {\n tag: 'AccessControlContext',\n value: { targetContractId: target.createdEvent.contractId },\n },\n disclosedContracts,\n };\n const access = await matching(ACCESS_CONTROL);\n if (access.length > 1) throw new Error('Ambiguous scope access control');\n if (access[0]) disclosedContracts.push(callbackDisclosure(access[0]));\n return {\n context: {\n tag: setter.tag,\n value: {\n [setter.field]: target.createdEvent.contractId,\n accessControlCid: access[0]?.createdEvent.contractId ?? null,\n },\n },\n disclosedContracts,\n };\n};\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { resolveCantonRefreshPlan } from './
|
|
1
|
+
import { resolveCantonRefreshPlan } from './7DFFQF5Y.js';
|
|
2
2
|
import { __name } from './VUOMXK5T.js';
|
|
3
3
|
|
|
4
4
|
// src/refresh/resolve.ts
|
|
@@ -16,5 +16,5 @@ var resolveCantonTransaction = /* @__PURE__ */ __name(async ({ unresolvedCommand
|
|
|
16
16
|
}, "resolveCantonTransaction");
|
|
17
17
|
|
|
18
18
|
export { resolveCantonTransaction };
|
|
19
|
-
//# sourceMappingURL=
|
|
20
|
-
//# sourceMappingURL=
|
|
19
|
+
//# sourceMappingURL=QOVYNKLD.js.map
|
|
20
|
+
//# sourceMappingURL=QOVYNKLD.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/refresh/resolve.ts"],"names":["resolveCantonTransaction","unresolvedCommands","unresolvedDisclosedContracts","refreshPlan","senderParty","signingParties","client","resolveCantonRefreshPlan","commands"],"mappings":";;;;AAmBO,IAAMA,wBAAAA,iCAAkC,EAC3CC,kBAAAA,EACAC,8BACAC,WAAAA,EACAC,WAAAA,EACAC,cAAAA,EACAC,MAAAA,EAAM,KACmB;AAIzB,EAAA,OAAOC,wBAAAA,CAAyB;AAC5BN,IAAAA,kBAAAA;AACAC,IAAAA,4BAAAA;AACAC,IAAAA,WAAAA,EAAaA,WAAAA,IAAe;AAAEK,MAAAA,QAAAA,EAAU;AAAG,KAAA;AAC3CJ,IAAAA,WAAAA;AACAC,IAAAA,cAAAA;AACAC,IAAAA;GACJ,CAAA;AACJ,CAAA,EAnBwC,0BAAA","file":"
|
|
1
|
+
{"version":3,"sources":["../src/refresh/resolve.ts"],"names":["resolveCantonTransaction","unresolvedCommands","unresolvedDisclosedContracts","refreshPlan","senderParty","signingParties","client","resolveCantonRefreshPlan","commands"],"mappings":";;;;AAmBO,IAAMA,wBAAAA,iCAAkC,EAC3CC,kBAAAA,EACAC,8BACAC,WAAAA,EACAC,WAAAA,EACAC,cAAAA,EACAC,MAAAA,EAAM,KACmB;AAIzB,EAAA,OAAOC,wBAAAA,CAAyB;AAC5BN,IAAAA,kBAAAA;AACAC,IAAAA,4BAAAA;AACAC,IAAAA,WAAAA,EAAaA,WAAAA,IAAe;AAAEK,MAAAA,QAAAA,EAAU;AAAG,KAAA;AAC3CJ,IAAAA,WAAAA;AACAC,IAAAA,cAAAA;AACAC,IAAAA;GACJ,CAAA;AACJ,CAAA,EAnBwC,0BAAA","file":"QOVYNKLD.js","sourcesContent":["import type { ICantonClient } from '../client/interface';\nimport type {\n CantonCommand,\n CantonDisclosedContract,\n CantonUnresolvedCommand,\n} from '../transaction';\nimport type { CantonRefreshPlan } from './plan';\nimport { resolveCantonRefreshPlan } from './resolve-plan';\n\nexport interface ResolveCantonAddressParams {\n unresolvedCommands: CantonUnresolvedCommand[];\n unresolvedDisclosedContracts: CantonDisclosedContract[];\n refreshPlan?: CantonRefreshPlan;\n senderParty?: string;\n /** A contract is only disclosed when none of these parties is already a stakeholder on it. */\n signingParties: string[];\n client: ICantonClient;\n}\n\nexport const resolveCantonTransaction = async ({\n unresolvedCommands,\n unresolvedDisclosedContracts,\n refreshPlan,\n senderParty,\n signingParties,\n client,\n}: ResolveCantonAddressParams): Promise<{\n commands: CantonCommand[];\n disclosedContracts: CantonDisclosedContract[];\n}> => {\n return resolveCantonRefreshPlan({\n unresolvedCommands,\n unresolvedDisclosedContracts,\n refreshPlan: refreshPlan ?? { commands: [] },\n senderParty,\n signingParties,\n client,\n });\n};\n"]}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { DefaultApi } from './AVTRWMUF.js';
|
|
2
2
|
import { JsActiveContractFromJSON } from './NGL3CRVI.js';
|
|
3
3
|
import { ResponseError } from './XVX7EVTW.js';
|
|
4
|
-
import { fetchDsoParty, fetchAmuletTransferFactoryContext, fetchTransferInstructionContext, fetchAcceptContext, fetchAmuletContext, injectExternalPartyAmuletRules } from './
|
|
4
|
+
import { fetchDsoParty, fetchAmuletTransferFactoryContext, fetchTransferInstructionContext, fetchAcceptContext, fetchAmuletContext, injectExternalPartyAmuletRules } from './XWNGGI4V.js';
|
|
5
5
|
import { CantonProtocolError, cantonApiErrorFromResponse, CantonTransportError, CantonApiError } from './NYEJEKEY.js';
|
|
6
6
|
import { __name } from './VUOMXK5T.js';
|
|
7
|
+
import { PreparedTransaction } from '@canton-network/core-ledger-proto';
|
|
7
8
|
import { once } from 'es-toolkit';
|
|
8
9
|
import { randomUUID } from 'crypto';
|
|
9
10
|
|
|
@@ -53,9 +54,9 @@ var CantonClient = class {
|
|
|
53
54
|
});
|
|
54
55
|
}
|
|
55
56
|
/** Amulet ChoiceContext with ExternalPartyAmuletRules injected — required by every flow hitting FeeUtils.validateContext. */
|
|
56
|
-
async getAmuletContextWithExternalRules(instrumentId) {
|
|
57
|
+
async getAmuletContextWithExternalRules(instrumentId, options) {
|
|
57
58
|
const { walletUrl, tokenProvider } = this.#requireWallet();
|
|
58
|
-
const { amuletContext, disclosedContracts } = await fetchAmuletContext(walletUrl, await tokenProvider.getToken(), instrumentId);
|
|
59
|
+
const { amuletContext, disclosedContracts } = await fetchAmuletContext(walletUrl, await tokenProvider.getToken(), instrumentId, options);
|
|
59
60
|
const { amuletContext: contextWithRules, externalPartyAmuletRulesCid } = injectExternalPartyAmuletRules(amuletContext, disclosedContracts);
|
|
60
61
|
return {
|
|
61
62
|
amuletContext: contextWithRules,
|
|
@@ -545,6 +546,98 @@ var CantonClient = class {
|
|
|
545
546
|
lastCheckedOffset: beginExclusive
|
|
546
547
|
};
|
|
547
548
|
}
|
|
549
|
+
async #assertCommandSource(expiry) {
|
|
550
|
+
if (!expiry.userId || expiry.userId !== this.#userId || !expiry.participantId || expiry.participantId !== await this.getLocalParticipantId()) {
|
|
551
|
+
throw new CantonProtocolError("Command source differs from the preparing participant or user");
|
|
552
|
+
}
|
|
553
|
+
}
|
|
554
|
+
async waitForCommandWithExpiry(commandId, opts) {
|
|
555
|
+
const { expiry, parties, timeoutMs = 3e4, poll = {} } = opts;
|
|
556
|
+
await this.#assertCommandSource(expiry);
|
|
557
|
+
let beginExclusive = expiry.completionOffset;
|
|
558
|
+
const maxRecordTime = Date.parse(expiry.maxRecordTime);
|
|
559
|
+
if (!Number.isSafeInteger(beginExclusive) || beginExclusive < 0 || !Number.isFinite(maxRecordTime) || !expiry.synchronizerId) {
|
|
560
|
+
throw new CantonProtocolError("Invalid command expiry metadata");
|
|
561
|
+
}
|
|
562
|
+
const deadline = Date.now() + timeoutMs;
|
|
563
|
+
let backoffMs = poll.backoffMs?.initial ?? 100;
|
|
564
|
+
let rejection;
|
|
565
|
+
while (Date.now() < deadline) {
|
|
566
|
+
const previousOffset = beginExclusive;
|
|
567
|
+
const response = await this.#invoke(() => this.#api.postV2CommandsCompletionsRaw({
|
|
568
|
+
completionStreamRequest: {
|
|
569
|
+
beginExclusive,
|
|
570
|
+
parties,
|
|
571
|
+
userId: this.#userId
|
|
572
|
+
},
|
|
573
|
+
limit: poll.limit ?? 50,
|
|
574
|
+
streamIdleTimeoutMs: poll.streamIdleTimeoutMs ?? 1e3
|
|
575
|
+
}));
|
|
576
|
+
const entries = await response.raw.json();
|
|
577
|
+
let expired = false;
|
|
578
|
+
for (const entry of entries) {
|
|
579
|
+
const item = this.#getField(entry, "completionResponse");
|
|
580
|
+
const checkpointWrapper = this.#getField(item, "offsetCheckpoint");
|
|
581
|
+
const checkpoint = this.#getField(checkpointWrapper, "value") ?? checkpointWrapper;
|
|
582
|
+
const completionWrapper = this.#getField(item, "completion");
|
|
583
|
+
const completion = this.#getField(completionWrapper, "value") ?? completionWrapper;
|
|
584
|
+
if (!checkpoint && !completion) {
|
|
585
|
+
if (this.#getField(item, "empty") !== void 0) continue;
|
|
586
|
+
throw new CantonProtocolError("Unrecognized command completion response");
|
|
587
|
+
}
|
|
588
|
+
const offset = this.#getField(checkpoint ?? completion, "offset");
|
|
589
|
+
if (!Number.isSafeInteger(offset) || offset < 0) {
|
|
590
|
+
throw new CantonProtocolError("Invalid command completion offset");
|
|
591
|
+
}
|
|
592
|
+
if (checkpoint) {
|
|
593
|
+
const times = this.#getField(checkpoint, "synchronizerTimes");
|
|
594
|
+
expired ||= offset >= beginExclusive && !!times?.some((time) => time.synchronizerId === expiry.synchronizerId && Date.parse(time.recordTime) > maxRecordTime);
|
|
595
|
+
} else if (this.#getField(completion, "commandId") === commandId) {
|
|
596
|
+
const status = this.#getField(completion, "status");
|
|
597
|
+
if (status && (!Number.isInteger(status.code) || status.code < 0 || status.code > 16)) {
|
|
598
|
+
throw new CantonProtocolError("Invalid command completion status");
|
|
599
|
+
}
|
|
600
|
+
if (!status || status.code === 0) {
|
|
601
|
+
const updateId = this.#getField(completion, "updateId");
|
|
602
|
+
if (!updateId) throw new CantonProtocolError("Accepted command is missing updateId");
|
|
603
|
+
return {
|
|
604
|
+
status: "accepted",
|
|
605
|
+
commandId,
|
|
606
|
+
updateId,
|
|
607
|
+
offset
|
|
608
|
+
};
|
|
609
|
+
}
|
|
610
|
+
rejection = {
|
|
611
|
+
status: "rejected",
|
|
612
|
+
commandId,
|
|
613
|
+
offset,
|
|
614
|
+
error: {
|
|
615
|
+
code: status.code,
|
|
616
|
+
message: status.message ?? "Unknown rejection",
|
|
617
|
+
details: status.details
|
|
618
|
+
}
|
|
619
|
+
};
|
|
620
|
+
}
|
|
621
|
+
beginExclusive = Math.max(beginExclusive, offset);
|
|
622
|
+
}
|
|
623
|
+
if (expired) return rejection ?? {
|
|
624
|
+
status: "expired",
|
|
625
|
+
commandId
|
|
626
|
+
};
|
|
627
|
+
if (beginExclusive > previousOffset) {
|
|
628
|
+
backoffMs = poll.backoffMs?.initial ?? 100;
|
|
629
|
+
continue;
|
|
630
|
+
}
|
|
631
|
+
const delay = Math.min(backoffMs, poll.backoffMs?.max ?? 5e3, deadline - Date.now());
|
|
632
|
+
if (delay > 0) await new Promise((resolve) => setTimeout(resolve, delay));
|
|
633
|
+
backoffMs = Math.min(backoffMs * 2, poll.backoffMs?.max ?? 5e3);
|
|
634
|
+
}
|
|
635
|
+
return {
|
|
636
|
+
status: "timeout",
|
|
637
|
+
commandId,
|
|
638
|
+
lastCheckedOffset: beginExclusive
|
|
639
|
+
};
|
|
640
|
+
}
|
|
548
641
|
// ─────────────────────────────────────────────────────────────────────────
|
|
549
642
|
// Disclosed Contracts
|
|
550
643
|
// ─────────────────────────────────────────────────────────────────────────
|
|
@@ -653,27 +746,23 @@ var CantonClient = class {
|
|
|
653
746
|
const updateResponse = await response.raw.json();
|
|
654
747
|
return this.#parseTransactionFromUpdate(updateResponse, `Update at offset ${offset} is not a transaction`);
|
|
655
748
|
}
|
|
656
|
-
// ─────────────────────────────────────────────────────────────────────────
|
|
657
|
-
// External Party / Interactive Submission
|
|
658
|
-
// ─────────────────────────────────────────────────────────────────────────
|
|
659
|
-
/**
|
|
660
|
-
* Prepare commands for external party signing.
|
|
661
|
-
*
|
|
662
|
-
* Returns a typed PreparedTransaction that preserves the contract type
|
|
663
|
-
* through the signing flow. After signing, use submitSigned() to submit.
|
|
664
|
-
*
|
|
665
|
-
* @typeparam T The contract payload type (phantom type for type safety)
|
|
666
|
-
*
|
|
667
|
-
* @example
|
|
668
|
-
* ```ts
|
|
669
|
-
* const prepared = await client.prepareForSigning<Oft>({ actAs: [party] }, [cmd]);
|
|
670
|
-
* const signature = await sign(prepared.preparedTransactionHash);
|
|
671
|
-
* await client.submitSigned(prepared, [signature]);
|
|
672
|
-
* ```
|
|
673
|
-
*/
|
|
674
749
|
async prepareForSigning(actors, commands, opts = {}) {
|
|
675
750
|
const synchronizerId = await this.#ensureSynchronizerId();
|
|
676
751
|
const commandId = opts.commandId ?? randomUUID();
|
|
752
|
+
let expiry;
|
|
753
|
+
if (opts.maxRecordTime !== void 0) {
|
|
754
|
+
const [participantId, completionOffset] = await Promise.all([
|
|
755
|
+
this.getLocalParticipantId(),
|
|
756
|
+
this.getLedgerEndOffset()
|
|
757
|
+
]);
|
|
758
|
+
expiry = {
|
|
759
|
+
maxRecordTime: opts.maxRecordTime,
|
|
760
|
+
synchronizerId,
|
|
761
|
+
participantId,
|
|
762
|
+
userId: this.#userId,
|
|
763
|
+
completionOffset
|
|
764
|
+
};
|
|
765
|
+
}
|
|
677
766
|
const request = {
|
|
678
767
|
jsPrepareSubmissionRequest: {
|
|
679
768
|
userId: this.#userId,
|
|
@@ -684,11 +773,28 @@ var CantonClient = class {
|
|
|
684
773
|
disclosedContracts: opts.disclosedContracts,
|
|
685
774
|
synchronizerId,
|
|
686
775
|
verboseHashing: false,
|
|
776
|
+
...expiry ? {
|
|
777
|
+
maxRecordTime: expiry.maxRecordTime,
|
|
778
|
+
hashingSchemeVersion: "HASHING_SCHEME_VERSION_V3"
|
|
779
|
+
} : {},
|
|
687
780
|
packageIdSelectionPreference: []
|
|
688
781
|
}
|
|
689
782
|
};
|
|
690
783
|
const response = await this.#invoke(() => this.#api.postV2InteractiveSubmissionPrepare(request));
|
|
691
784
|
const validated = this.#validatePrepareResponse(response);
|
|
785
|
+
if (expiry) {
|
|
786
|
+
const metadata = PreparedTransaction.fromBinary(Buffer.from(validated.preparedTransaction, "base64")).metadata;
|
|
787
|
+
const deadline = Date.parse(expiry.maxRecordTime);
|
|
788
|
+
if (!Number.isFinite(deadline) || validated.hashingSchemeVersion !== "HASHING_SCHEME_VERSION_V3" || metadata?.maxRecordTime !== BigInt(deadline) * 1000n) {
|
|
789
|
+
throw new CantonProtocolError("Prepared transaction does not contain the requested signed maxRecordTime");
|
|
790
|
+
}
|
|
791
|
+
return {
|
|
792
|
+
...validated,
|
|
793
|
+
hashingSchemeVersion: "HASHING_SCHEME_VERSION_V3",
|
|
794
|
+
commandId,
|
|
795
|
+
expiry
|
|
796
|
+
};
|
|
797
|
+
}
|
|
692
798
|
return {
|
|
693
799
|
...validated,
|
|
694
800
|
hashingSchemeVersion: validated.hashingSchemeVersion,
|
|
@@ -701,7 +807,15 @@ var CantonClient = class {
|
|
|
701
807
|
* The generic type T flows from prepareForSigning() for type documentation.
|
|
702
808
|
*/
|
|
703
809
|
async submitSigned(prepared, signatures) {
|
|
704
|
-
const
|
|
810
|
+
const expiry = "expiry" in prepared ? prepared.expiry : void 0;
|
|
811
|
+
if (expiry) await this.#assertCommandSource(expiry);
|
|
812
|
+
const completionOffset = expiry?.completionOffset ?? await this.getLedgerEndOffset();
|
|
813
|
+
if (expiry && Date.now() >= Date.parse(expiry.maxRecordTime)) {
|
|
814
|
+
return {
|
|
815
|
+
commandId: prepared.commandId,
|
|
816
|
+
completionOffset
|
|
817
|
+
};
|
|
818
|
+
}
|
|
705
819
|
const request = {
|
|
706
820
|
jsExecuteSubmissionRequest: {
|
|
707
821
|
preparedTransaction: prepared.preparedTransaction,
|
|
@@ -937,5 +1051,5 @@ var CantonClient = class {
|
|
|
937
1051
|
};
|
|
938
1052
|
|
|
939
1053
|
export { CantonClient };
|
|
940
|
-
//# sourceMappingURL=
|
|
941
|
-
//# sourceMappingURL=
|
|
1054
|
+
//# sourceMappingURL=QWU4V7O2.js.map
|
|
1055
|
+
//# sourceMappingURL=QWU4V7O2.js.map
|