diff --git a/LICENSE b/LICENSE
index 03b2361..82408b6 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,21 +1,98 @@
-MIT License
-
-Copyright (c) 2026 BootNode
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
+Business Source License 1.1
+
+License text copyright (c) 2017 MariaDB Corporation Ab, All Rights Reserved.
+"Business Source License" is a trademark of MariaDB Corporation Ab.
+
+-----------------------------------------------------------------------------
+
+Parameters
+
+Licensor: BootNode
+
+Licensed Work: Canton Token Forge
+ The Licensed Work is (c) 2026 BootNode.
+
+Additional Use Grant: None
+
+Change Date: October 15, 2030
+
+Change License: GNU General Public License v2.0 or later
+
+-----------------------------------------------------------------------------
+
+Terms
+
+The Licensor hereby grants you the right to copy, modify, create derivative
+works, redistribute, and make non-production use of the Licensed Work. The
+Licensor may make an Additional Use Grant, above, permitting limited
+production use.
+
+Effective on the Change Date, or the fourth anniversary of the first publicly
+available distribution of a specific version of the Licensed Work under this
+License, whichever comes first, the Licensor hereby grants you rights under
+the terms of the Change License, and the rights granted in the paragraph
+above terminate.
+
+If your use of the Licensed Work does not comply with the requirements
+currently in effect as described in this License, you must purchase a
+commercial license from the Licensor, its affiliated entities, or authorized
+resellers, or you must refrain from using the Licensed Work.
+
+All copies of the original and modified Licensed Work, and derivative works
+of the Licensed Work, are subject to this License. This License applies
+separately for each version of the Licensed Work and the Change Date may vary
+for each version of the Licensed Work released by Licensor.
+
+You must conspicuously display this License on each original or modified copy
+of the Licensed Work. If you receive the Licensed Work in original or
+modified form from a third party, the terms and conditions set forth in this
+License apply to your use of that work.
+
+Any use of the Licensed Work in violation of this License will automatically
+terminate your rights under this License for the current and all other
+versions of the Licensed Work.
+
+This License does not grant you any right in any trademark or logo of
+Licensor or its affiliates (provided that you may use a trademark or logo of
+Licensor as expressly required by this License).
+
+TO THE EXTENT PERMITTED BY APPLICABLE LAW, THE LICENSED WORK IS PROVIDED ON
+AN "AS IS" BASIS. LICENSOR HEREBY DISCLAIMS ALL WARRANTIES AND CONDITIONS,
+EXPRESS OR IMPLIED, INCLUDING (WITHOUT LIMITATION) WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, AND
+TITLE.
+
+MariaDB hereby grants you permission to use this License's text to license
+your works, and to refer to it using the trademark "Business Source License",
+as long as you comply with the Covenants of Licensor below.
+
+-----------------------------------------------------------------------------
+
+Covenants of Licensor
+
+In consideration of the right to use this License's text and the "Business
+Source License" name and trademark, Licensor covenants to MariaDB, and to all
+other recipients of the licensed work to be provided by Licensor:
+
+1. To specify as the Change License the GPL Version 2.0 or any later version,
+ or a license that is compatible with GPL Version 2.0 or a later version,
+ where "compatible" means that software provided under the Change License
+ can be included in a program with software provided under GPL Version 2.0
+ or a later version. Licensor may specify additional Change Licenses
+ without limitation.
+
+2. To either: (a) specify an additional grant of rights to use that does not
+ impose any additional restriction on the right granted in this License, as
+ the Additional Use Grant; or (b) insert the text "None".
+
+3. To specify a Change Date.
+
+4. Not to modify this License in any other way.
+
+-----------------------------------------------------------------------------
+
+Notice
+
+The Business Source License (this document, or the "License") is not an Open
+Source license. However, the Licensed Work will eventually be made available
+under an Open Source License, as stated in this License.
diff --git a/README.md b/README.md
index 04b6056..bdc5d04 100644
--- a/README.md
+++ b/README.md
@@ -285,4 +285,4 @@ the first page a consumer reads naming a version we just moved off.
## License
-MIT - see [`LICENSE`](LICENSE).
+Business Source License 1.1 (`BUSL-1.1`) - see [`LICENSE`](LICENSE).
diff --git a/SPEC.md b/SPEC.md
index c43f99f..92c5ee1 100644
--- a/SPEC.md
+++ b/SPEC.md
@@ -63,15 +63,15 @@ resulting exercise itself over the JSON Ledger API, forwarding the service's
### Size and status
-976 lines of production Daml, 2508 lines of Daml tests, 1846 lines of
-TypeScript service, 4693 lines of TypeScript tests, each figure a
+1003 lines of production Daml, 2547 lines of Daml tests, 1894 lines of
+TypeScript service, 4750 lines of TypeScript tests, each figure a
`find
-name '*.daml'` (or `'*.ts'`) `| xargs wc -l` count over
`daml/canton-token-forge/daml`, `daml/canton-token-forge-test/daml`,
`registry/src` and `registry/test` respectively. The two Daml paths name the
source directory rather than the package root on purpose: a package root that
has been built also holds a `.daml/` build directory, whose name the `*.daml`
glob matches and whose regenerated data-dependency sources dwarf the figure
-above. MIT licensed. Pre-release: the Daml package
+above. Licensed under the Business Source License 1.1. Pre-release: the Daml package
version is `0.0.1`, and the build is published as release `v0.1.0` for
downstream repositories to pin (the tag is deliberately decoupled from the
package version), with no compatibility guarantee offered across releases.
@@ -623,7 +623,7 @@ Stated plainly, because they are what an evaluation turns on.
```
daml/ Container of dpm packages; not a package itself
- canton-token-forge/ Production package, 976 lines
+ canton-token-forge/ Production package, 1003 lines
daml/Canton/TokenForge/
Registry.daml InstrumentConfig, preapproval, the three factory instances
Token.daml Token holding, input fetch/consume/spend helpers
diff --git a/consumer-smoke/consumer/daml/Consumer.daml b/consumer-smoke/consumer/daml/Consumer.daml
index 0a28c8f..f1eeee5 100644
--- a/consumer-smoke/consumer/daml/Consumer.daml
+++ b/consumer-smoke/consumer/daml/Consumer.daml
@@ -1,3 +1,6 @@
+-- Copyright (c) 2026 BootNode. All rights reserved.
+-- SPDX-License-Identifier: BUSL-1.1
+
-- Every import below resolves through canton-token-forge-0.0.1.dar alone. The
-- Splice interface packages are bundled inside that DAR but hidden by default;
-- the --package lines in daml.yaml are what make them visible.
diff --git a/daml/canton-token-forge-test/daml/Canton/TokenForge/Test/AllocationTest.daml b/daml/canton-token-forge-test/daml/Canton/TokenForge/Test/AllocationTest.daml
index 566b3e0..ff88922 100644
--- a/daml/canton-token-forge-test/daml/Canton/TokenForge/Test/AllocationTest.daml
+++ b/daml/canton-token-forge-test/daml/Canton/TokenForge/Test/AllocationTest.daml
@@ -1,3 +1,6 @@
+-- Copyright (c) 2026 BootNode. All rights reserved.
+-- SPDX-License-Identifier: BUSL-1.1
+
module Canton.TokenForge.Test.AllocationTest where
import Daml.Script
diff --git a/daml/canton-token-forge-test/daml/Canton/TokenForge/Test/BatchTransferTest.daml b/daml/canton-token-forge-test/daml/Canton/TokenForge/Test/BatchTransferTest.daml
index 3a27174..4ba3ff4 100644
--- a/daml/canton-token-forge-test/daml/Canton/TokenForge/Test/BatchTransferTest.daml
+++ b/daml/canton-token-forge-test/daml/Canton/TokenForge/Test/BatchTransferTest.daml
@@ -1,3 +1,6 @@
+-- Copyright (c) 2026 BootNode. All rights reserved.
+-- SPDX-License-Identifier: BUSL-1.1
+
module Canton.TokenForge.Test.BatchTransferTest where
import Daml.Script
diff --git a/daml/canton-token-forge-test/daml/Canton/TokenForge/Test/BurnMintTest.daml b/daml/canton-token-forge-test/daml/Canton/TokenForge/Test/BurnMintTest.daml
index 7a7819f..515b70e 100644
--- a/daml/canton-token-forge-test/daml/Canton/TokenForge/Test/BurnMintTest.daml
+++ b/daml/canton-token-forge-test/daml/Canton/TokenForge/Test/BurnMintTest.daml
@@ -1,3 +1,6 @@
+-- Copyright (c) 2026 BootNode. All rights reserved.
+-- SPDX-License-Identifier: BUSL-1.1
+
module Canton.TokenForge.Test.BurnMintTest where
import Daml.Script
diff --git a/daml/canton-token-forge-test/daml/Canton/TokenForge/Test/FaucetTest.daml b/daml/canton-token-forge-test/daml/Canton/TokenForge/Test/FaucetTest.daml
index d0f3ef3..12b238e 100644
--- a/daml/canton-token-forge-test/daml/Canton/TokenForge/Test/FaucetTest.daml
+++ b/daml/canton-token-forge-test/daml/Canton/TokenForge/Test/FaucetTest.daml
@@ -1,3 +1,6 @@
+-- Copyright (c) 2026 BootNode. All rights reserved.
+-- SPDX-License-Identifier: BUSL-1.1
+
module Canton.TokenForge.Test.FaucetTest where
import Daml.Script
diff --git a/daml/canton-token-forge-test/daml/Canton/TokenForge/Test/LockTest.daml b/daml/canton-token-forge-test/daml/Canton/TokenForge/Test/LockTest.daml
index f9d522b..fb426ea 100644
--- a/daml/canton-token-forge-test/daml/Canton/TokenForge/Test/LockTest.daml
+++ b/daml/canton-token-forge-test/daml/Canton/TokenForge/Test/LockTest.daml
@@ -1,3 +1,6 @@
+-- Copyright (c) 2026 BootNode. All rights reserved.
+-- SPDX-License-Identifier: BUSL-1.1
+
module Canton.TokenForge.Test.LockTest where
import Daml.Script
diff --git a/daml/canton-token-forge-test/daml/Canton/TokenForge/Test/MultiInstrumentTest.daml b/daml/canton-token-forge-test/daml/Canton/TokenForge/Test/MultiInstrumentTest.daml
index 01109a0..400bc33 100644
--- a/daml/canton-token-forge-test/daml/Canton/TokenForge/Test/MultiInstrumentTest.daml
+++ b/daml/canton-token-forge-test/daml/Canton/TokenForge/Test/MultiInstrumentTest.daml
@@ -1,3 +1,6 @@
+-- Copyright (c) 2026 BootNode. All rights reserved.
+-- SPDX-License-Identifier: BUSL-1.1
+
module Canton.TokenForge.Test.MultiInstrumentTest where
import Daml.Script
diff --git a/daml/canton-token-forge-test/daml/Canton/TokenForge/Test/OfferTest.daml b/daml/canton-token-forge-test/daml/Canton/TokenForge/Test/OfferTest.daml
index 0d9bdd4..174d29a 100644
--- a/daml/canton-token-forge-test/daml/Canton/TokenForge/Test/OfferTest.daml
+++ b/daml/canton-token-forge-test/daml/Canton/TokenForge/Test/OfferTest.daml
@@ -1,3 +1,6 @@
+-- Copyright (c) 2026 BootNode. All rights reserved.
+-- SPDX-License-Identifier: BUSL-1.1
+
module Canton.TokenForge.Test.OfferTest where
import Daml.Script
diff --git a/daml/canton-token-forge-test/daml/Canton/TokenForge/Test/RegistryTest.daml b/daml/canton-token-forge-test/daml/Canton/TokenForge/Test/RegistryTest.daml
index 8c213f5..34496e2 100644
--- a/daml/canton-token-forge-test/daml/Canton/TokenForge/Test/RegistryTest.daml
+++ b/daml/canton-token-forge-test/daml/Canton/TokenForge/Test/RegistryTest.daml
@@ -1,3 +1,6 @@
+-- Copyright (c) 2026 BootNode. All rights reserved.
+-- SPDX-License-Identifier: BUSL-1.1
+
module Canton.TokenForge.Test.RegistryTest where
import Daml.Script
diff --git a/daml/canton-token-forge-test/daml/Canton/TokenForge/Test/Smoke.daml b/daml/canton-token-forge-test/daml/Canton/TokenForge/Test/Smoke.daml
index 8dfa9d3..29e9a8d 100644
--- a/daml/canton-token-forge-test/daml/Canton/TokenForge/Test/Smoke.daml
+++ b/daml/canton-token-forge-test/daml/Canton/TokenForge/Test/Smoke.daml
@@ -1,3 +1,6 @@
+-- Copyright (c) 2026 BootNode. All rights reserved.
+-- SPDX-License-Identifier: BUSL-1.1
+
module Canton.TokenForge.Test.Smoke where
import Daml.Script
diff --git a/daml/canton-token-forge-test/daml/Canton/TokenForge/Test/TokenTest.daml b/daml/canton-token-forge-test/daml/Canton/TokenForge/Test/TokenTest.daml
index b73b797..913fc41 100644
--- a/daml/canton-token-forge-test/daml/Canton/TokenForge/Test/TokenTest.daml
+++ b/daml/canton-token-forge-test/daml/Canton/TokenForge/Test/TokenTest.daml
@@ -1,3 +1,6 @@
+-- Copyright (c) 2026 BootNode. All rights reserved.
+-- SPDX-License-Identifier: BUSL-1.1
+
module Canton.TokenForge.Test.TokenTest where
import Daml.Script
diff --git a/daml/canton-token-forge-test/daml/Canton/TokenForge/Test/TransferTest.daml b/daml/canton-token-forge-test/daml/Canton/TokenForge/Test/TransferTest.daml
index 1c02fbc..943b05b 100644
--- a/daml/canton-token-forge-test/daml/Canton/TokenForge/Test/TransferTest.daml
+++ b/daml/canton-token-forge-test/daml/Canton/TokenForge/Test/TransferTest.daml
@@ -1,3 +1,6 @@
+-- Copyright (c) 2026 BootNode. All rights reserved.
+-- SPDX-License-Identifier: BUSL-1.1
+
module Canton.TokenForge.Test.TransferTest where
import Daml.Script
diff --git a/daml/canton-token-forge-test/daml/Canton/TokenForge/Test/TxMetaTest.daml b/daml/canton-token-forge-test/daml/Canton/TokenForge/Test/TxMetaTest.daml
index 261a7c7..24827a3 100644
--- a/daml/canton-token-forge-test/daml/Canton/TokenForge/Test/TxMetaTest.daml
+++ b/daml/canton-token-forge-test/daml/Canton/TokenForge/Test/TxMetaTest.daml
@@ -1,3 +1,6 @@
+-- Copyright (c) 2026 BootNode. All rights reserved.
+-- SPDX-License-Identifier: BUSL-1.1
+
module Canton.TokenForge.Test.TxMetaTest where
import Daml.Script
diff --git a/daml/canton-token-forge-test/daml/Canton/TokenForge/Test/Util.daml b/daml/canton-token-forge-test/daml/Canton/TokenForge/Test/Util.daml
index 17d0472..5f0f02f 100644
--- a/daml/canton-token-forge-test/daml/Canton/TokenForge/Test/Util.daml
+++ b/daml/canton-token-forge-test/daml/Canton/TokenForge/Test/Util.daml
@@ -1,3 +1,6 @@
+-- Copyright (c) 2026 BootNode. All rights reserved.
+-- SPDX-License-Identifier: BUSL-1.1
+
module Canton.TokenForge.Test.Util where
import Daml.Script
diff --git a/daml/canton-token-forge/daml/Canton/TokenForge/Allocation.daml b/daml/canton-token-forge/daml/Canton/TokenForge/Allocation.daml
index b25764e..9ddcac8 100644
--- a/daml/canton-token-forge/daml/Canton/TokenForge/Allocation.daml
+++ b/daml/canton-token-forge/daml/Canton/TokenForge/Allocation.daml
@@ -1,3 +1,6 @@
+-- Copyright (c) 2026 BootNode. All rights reserved.
+-- SPDX-License-Identifier: BUSL-1.1
+
module Canton.TokenForge.Allocation where
import DA.Assert (assertWithinDeadline)
diff --git a/daml/canton-token-forge/daml/Canton/TokenForge/Instruction.daml b/daml/canton-token-forge/daml/Canton/TokenForge/Instruction.daml
index b53d6a6..3367194 100644
--- a/daml/canton-token-forge/daml/Canton/TokenForge/Instruction.daml
+++ b/daml/canton-token-forge/daml/Canton/TokenForge/Instruction.daml
@@ -1,3 +1,6 @@
+-- Copyright (c) 2026 BootNode. All rights reserved.
+-- SPDX-License-Identifier: BUSL-1.1
+
module Canton.TokenForge.Instruction where
import Splice.Api.Token.HoldingV1 qualified as HoldingV1
diff --git a/daml/canton-token-forge/daml/Canton/TokenForge/Locked.daml b/daml/canton-token-forge/daml/Canton/TokenForge/Locked.daml
index 52d5f4f..9346454 100644
--- a/daml/canton-token-forge/daml/Canton/TokenForge/Locked.daml
+++ b/daml/canton-token-forge/daml/Canton/TokenForge/Locked.daml
@@ -1,3 +1,6 @@
+-- Copyright (c) 2026 BootNode. All rights reserved.
+-- SPDX-License-Identifier: BUSL-1.1
+
module Canton.TokenForge.Locked where
import DA.Action (unless)
diff --git a/daml/canton-token-forge/daml/Canton/TokenForge/Registry.daml b/daml/canton-token-forge/daml/Canton/TokenForge/Registry.daml
index c3cff14..a59c1f9 100644
--- a/daml/canton-token-forge/daml/Canton/TokenForge/Registry.daml
+++ b/daml/canton-token-forge/daml/Canton/TokenForge/Registry.daml
@@ -1,3 +1,6 @@
+-- Copyright (c) 2026 BootNode. All rights reserved.
+-- SPDX-License-Identifier: BUSL-1.1
+
module Canton.TokenForge.Registry where
import DA.TextMap qualified as TextMap
diff --git a/daml/canton-token-forge/daml/Canton/TokenForge/Token.daml b/daml/canton-token-forge/daml/Canton/TokenForge/Token.daml
index 8d36db9..b25876c 100644
--- a/daml/canton-token-forge/daml/Canton/TokenForge/Token.daml
+++ b/daml/canton-token-forge/daml/Canton/TokenForge/Token.daml
@@ -1,3 +1,6 @@
+-- Copyright (c) 2026 BootNode. All rights reserved.
+-- SPDX-License-Identifier: BUSL-1.1
+
module Canton.TokenForge.Token where
import DA.List (unique)
diff --git a/daml/canton-token-forge/daml/Canton/TokenForge/Transfer.daml b/daml/canton-token-forge/daml/Canton/TokenForge/Transfer.daml
index 7348141..9e5bb87 100644
--- a/daml/canton-token-forge/daml/Canton/TokenForge/Transfer.daml
+++ b/daml/canton-token-forge/daml/Canton/TokenForge/Transfer.daml
@@ -1,3 +1,6 @@
+-- Copyright (c) 2026 BootNode. All rights reserved.
+-- SPDX-License-Identifier: BUSL-1.1
+
-- | The multi-output transfer (the Splice.AmuletRules analog). No v1 interface
-- choice expresses it: HoldingV1 declares no choices and its Lock is view-only
-- metadata, and TransferInstructionV1 is single-receiver. BurnMintV1 does take
diff --git a/daml/canton-token-forge/daml/Canton/TokenForge/TxMeta.daml b/daml/canton-token-forge/daml/Canton/TokenForge/TxMeta.daml
index 5478125..a18d854 100644
--- a/daml/canton-token-forge/daml/Canton/TokenForge/TxMeta.daml
+++ b/daml/canton-token-forge/daml/Canton/TokenForge/TxMeta.daml
@@ -1,3 +1,6 @@
+-- Copyright (c) 2026 BootNode. All rights reserved.
+-- SPDX-License-Identifier: BUSL-1.1
+
-- | Transaction-kind annotations for this registry's own, non-standardized
-- choices (the Amulet Splice.Amulet.TokenApiUtils analog).
--
diff --git a/daml/canton-token-forge/daml/Canton/TokenForge/Types.daml b/daml/canton-token-forge/daml/Canton/TokenForge/Types.daml
index 3723aab..b5afcba 100644
--- a/daml/canton-token-forge/daml/Canton/TokenForge/Types.daml
+++ b/daml/canton-token-forge/daml/Canton/TokenForge/Types.daml
@@ -1,3 +1,6 @@
+-- Copyright (c) 2026 BootNode. All rights reserved.
+-- SPDX-License-Identifier: BUSL-1.1
+
module Canton.TokenForge.Types where
import Splice.Api.Token.HoldingV1 qualified as HoldingV1
diff --git a/daml/canton-token-forge/daml/Canton/TokenForge/Version.daml b/daml/canton-token-forge/daml/Canton/TokenForge/Version.daml
index a31d0f4..b72e18d 100644
--- a/daml/canton-token-forge/daml/Canton/TokenForge/Version.daml
+++ b/daml/canton-token-forge/daml/Canton/TokenForge/Version.daml
@@ -1,3 +1,6 @@
+-- Copyright (c) 2026 BootNode. All rights reserved.
+-- SPDX-License-Identifier: BUSL-1.1
+
module Canton.TokenForge.Version where
-- Package version marker.
diff --git a/package-lock.json b/package-lock.json
index 2067097..29d8100 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -7,7 +7,7 @@
"": {
"name": "@bootnodedev/canton-token-forge",
"version": "0.3.0",
- "license": "MIT",
+ "license": "BUSL-1.1",
"dependencies": {
"cors": "^2.8.5",
"dotenv": "^16.4.5",
diff --git a/package.json b/package.json
index e01947a..d4dd595 100644
--- a/package.json
+++ b/package.json
@@ -2,7 +2,7 @@
"name": "@bootnodedev/canton-token-forge",
"version": "0.3.0",
"description": "A reusable, multi-instrument CIP-0056 (CN Token Standard) compliant token for demos and sandboxes, plus its read-only registry HTTP service",
- "license": "MIT",
+ "license": "BUSL-1.1",
"type": "module",
"scripts": {
"setup": "bash scripts/fetch-dep.sh",
diff --git a/registry/src/config.ts b/registry/src/config.ts
index 0470f65..9483f3b 100644
--- a/registry/src/config.ts
+++ b/registry/src/config.ts
@@ -1,3 +1,6 @@
+// Copyright (c) 2026 BootNode. All rights reserved.
+// SPDX-License-Identifier: BUSL-1.1
+
export interface Config {
ledgerApiUrl: string
ledgerApiToken: string
diff --git a/registry/src/disclose.ts b/registry/src/disclose.ts
index 4abe737..32bf0c0 100644
--- a/registry/src/disclose.ts
+++ b/registry/src/disclose.ts
@@ -1,3 +1,6 @@
+// Copyright (c) 2026 BootNode. All rights reserved.
+// SPDX-License-Identifier: BUSL-1.1
+
import type { ContractEntry } from './ledger.js'
// A disclosure is a ContractEntry minus its decoded payload: the ledger
diff --git a/registry/src/index.ts b/registry/src/index.ts
index 83d499a..55f3e97 100644
--- a/registry/src/index.ts
+++ b/registry/src/index.ts
@@ -1,4 +1,7 @@
#!/usr/bin/env node
+// Copyright (c) 2026 BootNode. All rights reserved.
+// SPDX-License-Identifier: BUSL-1.1
+
import 'dotenv/config'
import { type Config, loadConfig } from './config.js'
import { HttpLedgerClient } from './ledger.js'
diff --git a/registry/src/ledger.ts b/registry/src/ledger.ts
index 1b22642..f19c427 100644
--- a/registry/src/ledger.ts
+++ b/registry/src/ledger.ts
@@ -1,3 +1,6 @@
+// Copyright (c) 2026 BootNode. All rights reserved.
+// SPDX-License-Identifier: BUSL-1.1
+
import { randomUUID } from 'node:crypto'
import type { Config } from './config.js'
import type { DisclosedContract } from './disclose.js'
diff --git a/registry/src/logger.ts b/registry/src/logger.ts
index b1d9f9a..8297e55 100644
--- a/registry/src/logger.ts
+++ b/registry/src/logger.ts
@@ -1,3 +1,6 @@
+// Copyright (c) 2026 BootNode. All rights reserved.
+// SPDX-License-Identifier: BUSL-1.1
+
import { pino } from 'pino'
// The structural interface the service depends on, so tests can pass a
diff --git a/registry/src/mapping.ts b/registry/src/mapping.ts
index 3880f1c..bc52fdd 100644
--- a/registry/src/mapping.ts
+++ b/registry/src/mapping.ts
@@ -1,3 +1,6 @@
+// Copyright (c) 2026 BootNode. All rights reserved.
+// SPDX-License-Identifier: BUSL-1.1
+
import type { ContractEntry } from './ledger.js'
import type { InstrumentConfigPayload, InstrumentIdValue } from './payloads.js'
diff --git a/registry/src/openapi.ts b/registry/src/openapi.ts
index 1cf65d4..f944f2c 100644
--- a/registry/src/openapi.ts
+++ b/registry/src/openapi.ts
@@ -1,3 +1,6 @@
+// Copyright (c) 2026 BootNode. All rights reserved.
+// SPDX-License-Identifier: BUSL-1.1
+
import path from 'node:path'
import { fileURLToPath } from 'node:url'
diff --git a/registry/src/payloads.ts b/registry/src/payloads.ts
index 9e5c64d..a31ad72 100644
--- a/registry/src/payloads.ts
+++ b/registry/src/payloads.ts
@@ -1,3 +1,6 @@
+// Copyright (c) 2026 BootNode. All rights reserved.
+// SPDX-License-Identifier: BUSL-1.1
+
// JSON shapes of the on-ledger contract payloads this service reads, as the
// Canton JSON Ledger API renders create arguments. Only the fields the
// service actually reads are declared; extra runtime fields are allowed by
diff --git a/registry/src/routes/allocation.ts b/registry/src/routes/allocation.ts
index 1d028f3..495d7c1 100644
--- a/registry/src/routes/allocation.ts
+++ b/registry/src/routes/allocation.ts
@@ -1,3 +1,6 @@
+// Copyright (c) 2026 BootNode. All rights reserved.
+// SPDX-License-Identifier: BUSL-1.1
+
import { Router } from 'express'
import {
anyValueBool,
diff --git a/registry/src/routes/async-handler.ts b/registry/src/routes/async-handler.ts
index 3e47d22..5943412 100644
--- a/registry/src/routes/async-handler.ts
+++ b/registry/src/routes/async-handler.ts
@@ -1,3 +1,6 @@
+// Copyright (c) 2026 BootNode. All rights reserved.
+// SPDX-License-Identifier: BUSL-1.1
+
import type { NextFunction, Request, RequestHandler, Response } from 'express'
// Express 4 does not forward a rejected promise from an async handler to
diff --git a/registry/src/routes/lookup.ts b/registry/src/routes/lookup.ts
index 76e2fd0..4d7d2cd 100644
--- a/registry/src/routes/lookup.ts
+++ b/registry/src/routes/lookup.ts
@@ -1,3 +1,6 @@
+// Copyright (c) 2026 BootNode. All rights reserved.
+// SPDX-License-Identifier: BUSL-1.1
+
import type { Config } from '../config.js'
import type { ContractEntry, ContractLookup, LedgerClient } from '../ledger.js'
import type {
diff --git a/registry/src/routes/metadata.ts b/registry/src/routes/metadata.ts
index 3b233fb..8e1dbcd 100644
--- a/registry/src/routes/metadata.ts
+++ b/registry/src/routes/metadata.ts
@@ -1,3 +1,6 @@
+// Copyright (c) 2026 BootNode. All rights reserved.
+// SPDX-License-Identifier: BUSL-1.1
+
import { Router } from 'express'
import type { ContractEntry } from '../ledger.js'
import {
diff --git a/registry/src/routes/respond.ts b/registry/src/routes/respond.ts
index b5124b6..5360031 100644
--- a/registry/src/routes/respond.ts
+++ b/registry/src/routes/respond.ts
@@ -1,3 +1,6 @@
+// Copyright (c) 2026 BootNode. All rights reserved.
+// SPDX-License-Identifier: BUSL-1.1
+
import type { Response } from 'express'
import type { ContractEntry } from '../ledger.js'
import type { ResolveResult } from '../mapping.js'
diff --git a/registry/src/routes/transfer.ts b/registry/src/routes/transfer.ts
index 9636f80..cd75508 100644
--- a/registry/src/routes/transfer.ts
+++ b/registry/src/routes/transfer.ts
@@ -1,3 +1,6 @@
+// Copyright (c) 2026 BootNode. All rights reserved.
+// SPDX-License-Identifier: BUSL-1.1
+
import { Router } from 'express'
import {
anyValueBool,
diff --git a/registry/src/server.ts b/registry/src/server.ts
index ae0590d..231ba2f 100644
--- a/registry/src/server.ts
+++ b/registry/src/server.ts
@@ -1,3 +1,6 @@
+// Copyright (c) 2026 BootNode. All rights reserved.
+// SPDX-License-Identifier: BUSL-1.1
+
import path from 'node:path'
import cors from 'cors'
import express, { type Express, type NextFunction, type Request, type Response } from 'express'
diff --git a/registry/src/startup.ts b/registry/src/startup.ts
index 4669655..b12c5bd 100644
--- a/registry/src/startup.ts
+++ b/registry/src/startup.ts
@@ -1,3 +1,6 @@
+// Copyright (c) 2026 BootNode. All rights reserved.
+// SPDX-License-Identifier: BUSL-1.1
+
import type { Config } from './config.js'
import { type LedgerClient, LedgerRequestError } from './ledger.js'
import type { Logger } from './logger.js'
diff --git a/registry/test/allocation.test.ts b/registry/test/allocation.test.ts
index afd4d8e..faf940d 100644
--- a/registry/test/allocation.test.ts
+++ b/registry/test/allocation.test.ts
@@ -1,3 +1,6 @@
+// Copyright (c) 2026 BootNode. All rights reserved.
+// SPDX-License-Identifier: BUSL-1.1
+
import request from 'supertest'
import { describe, expect, it } from 'vitest'
import {
diff --git a/registry/test/config.test.ts b/registry/test/config.test.ts
index 53262dd..a6129b8 100644
--- a/registry/test/config.test.ts
+++ b/registry/test/config.test.ts
@@ -1,3 +1,6 @@
+// Copyright (c) 2026 BootNode. All rights reserved.
+// SPDX-License-Identifier: BUSL-1.1
+
import { describe, expect, it } from 'vitest'
import { type Config, loadConfig } from '../src/config'
diff --git a/registry/test/cors.test.ts b/registry/test/cors.test.ts
index 64e05fb..dca3ae8 100644
--- a/registry/test/cors.test.ts
+++ b/registry/test/cors.test.ts
@@ -1,3 +1,6 @@
+// Copyright (c) 2026 BootNode. All rights reserved.
+// SPDX-License-Identifier: BUSL-1.1
+
import request from 'supertest'
import { describe, expect, it } from 'vitest'
import { createServer } from '../src/server'
diff --git a/registry/test/e2e/helpers/fixture.ts b/registry/test/e2e/helpers/fixture.ts
index 3b0fecc..c7d8dd7 100644
--- a/registry/test/e2e/helpers/fixture.ts
+++ b/registry/test/e2e/helpers/fixture.ts
@@ -1,3 +1,6 @@
+// Copyright (c) 2026 BootNode. All rights reserved.
+// SPDX-License-Identifier: BUSL-1.1
+
import type { Express } from 'express'
import request from 'supertest'
import type { Config } from '../../../src/config'
diff --git a/registry/test/e2e/helpers/sandbox.ts b/registry/test/e2e/helpers/sandbox.ts
index 79580f1..0103ebf 100644
--- a/registry/test/e2e/helpers/sandbox.ts
+++ b/registry/test/e2e/helpers/sandbox.ts
@@ -1,3 +1,6 @@
+// Copyright (c) 2026 BootNode. All rights reserved.
+// SPDX-License-Identifier: BUSL-1.1
+
import { randomUUID } from 'node:crypto'
import { readFileSync } from 'node:fs'
import { dirname, resolve } from 'node:path'
diff --git a/registry/test/e2e/instrument.test.ts b/registry/test/e2e/instrument.test.ts
index e6236b4..74786ec 100644
--- a/registry/test/e2e/instrument.test.ts
+++ b/registry/test/e2e/instrument.test.ts
@@ -1,3 +1,6 @@
+// Copyright (c) 2026 BootNode. All rights reserved.
+// SPDX-License-Identifier: BUSL-1.1
+
import request from 'supertest'
import { describe, expect, it } from 'vitest'
import { holdingsOf, setupInstrument, tapFaucet } from './helpers/fixture'
diff --git a/registry/test/e2e/sandbox.test.ts b/registry/test/e2e/sandbox.test.ts
index b3286e1..d3594c3 100644
--- a/registry/test/e2e/sandbox.test.ts
+++ b/registry/test/e2e/sandbox.test.ts
@@ -1,3 +1,6 @@
+// Copyright (c) 2026 BootNode. All rights reserved.
+// SPDX-License-Identifier: BUSL-1.1
+
import { describe, expect, it } from 'vitest'
import { HttpLedgerClient, LedgerRequestError } from '../../src/ledger'
import { checkTemplateIds } from '../../src/startup'
diff --git a/registry/test/e2e/transfer-direct.test.ts b/registry/test/e2e/transfer-direct.test.ts
index cabe484..87eebf1 100644
--- a/registry/test/e2e/transfer-direct.test.ts
+++ b/registry/test/e2e/transfer-direct.test.ts
@@ -1,3 +1,6 @@
+// Copyright (c) 2026 BootNode. All rights reserved.
+// SPDX-License-Identifier: BUSL-1.1
+
import { describe, expect, it } from 'vitest'
import { PREAPPROVAL_CONTEXT_KEY } from '../../src/disclose'
import {
diff --git a/registry/test/e2e/transfer-offer.test.ts b/registry/test/e2e/transfer-offer.test.ts
index 5cd3744..52addf4 100644
--- a/registry/test/e2e/transfer-offer.test.ts
+++ b/registry/test/e2e/transfer-offer.test.ts
@@ -1,3 +1,6 @@
+// Copyright (c) 2026 BootNode. All rights reserved.
+// SPDX-License-Identifier: BUSL-1.1
+
import request from 'supertest'
import { describe, expect, it } from 'vitest'
import { createServer } from '../../src/server'
diff --git a/registry/test/errors.test.ts b/registry/test/errors.test.ts
index d694bd4..0739b45 100644
--- a/registry/test/errors.test.ts
+++ b/registry/test/errors.test.ts
@@ -1,3 +1,6 @@
+// Copyright (c) 2026 BootNode. All rights reserved.
+// SPDX-License-Identifier: BUSL-1.1
+
import request from 'supertest'
import { describe, expect, it } from 'vitest'
import { type LedgerClient, LedgerRequestError } from '../src/ledger'
diff --git a/registry/test/health.test.ts b/registry/test/health.test.ts
index b3b0a8f..148c7ee 100644
--- a/registry/test/health.test.ts
+++ b/registry/test/health.test.ts
@@ -1,3 +1,6 @@
+// Copyright (c) 2026 BootNode. All rights reserved.
+// SPDX-License-Identifier: BUSL-1.1
+
import request from 'supertest'
import { describe, expect, it } from 'vitest'
import { createServer } from '../src/server'
diff --git a/registry/test/helpers/fixtures.ts b/registry/test/helpers/fixtures.ts
index 38a725f..bd26d2d 100644
--- a/registry/test/helpers/fixtures.ts
+++ b/registry/test/helpers/fixtures.ts
@@ -1,3 +1,6 @@
+// Copyright (c) 2026 BootNode. All rights reserved.
+// SPDX-License-Identifier: BUSL-1.1
+
// Shared test fixtures for the registry suites. The config is a full Config so
// suites cannot drift from the real shape; the entry builders and ledger stubs
// live here rather than in any one suite because changing either affects every
diff --git a/registry/test/helpers/schema.ts b/registry/test/helpers/schema.ts
index 51b5441..61ee435 100644
--- a/registry/test/helpers/schema.ts
+++ b/registry/test/helpers/schema.ts
@@ -1,3 +1,6 @@
+// Copyright (c) 2026 BootNode. All rights reserved.
+// SPDX-License-Identifier: BUSL-1.1
+
import { readFileSync } from 'node:fs'
import path from 'node:path'
import Ajv, { type ValidateFunction } from 'ajv'
diff --git a/registry/test/ledger.test.ts b/registry/test/ledger.test.ts
index 597159a..a13a7ae 100644
--- a/registry/test/ledger.test.ts
+++ b/registry/test/ledger.test.ts
@@ -1,3 +1,6 @@
+// Copyright (c) 2026 BootNode. All rights reserved.
+// SPDX-License-Identifier: BUSL-1.1
+
import { describe, expect, it } from 'vitest'
import { HttpLedgerClient, LedgerRequestError } from '../src/ledger'
import { recordingLogger } from './helpers/fixtures'
diff --git a/registry/test/metadata.test.ts b/registry/test/metadata.test.ts
index 7c562a7..81bcb60 100644
--- a/registry/test/metadata.test.ts
+++ b/registry/test/metadata.test.ts
@@ -1,3 +1,6 @@
+// Copyright (c) 2026 BootNode. All rights reserved.
+// SPDX-License-Identifier: BUSL-1.1
+
import request from 'supertest'
import { describe, expect, it } from 'vitest'
import type { LedgerClient } from '../src/ledger'
diff --git a/registry/test/openapi.test.ts b/registry/test/openapi.test.ts
index 859a9c7..242fb59 100644
--- a/registry/test/openapi.test.ts
+++ b/registry/test/openapi.test.ts
@@ -1,3 +1,6 @@
+// Copyright (c) 2026 BootNode. All rights reserved.
+// SPDX-License-Identifier: BUSL-1.1
+
import { readFileSync } from 'node:fs'
import path from 'node:path'
import express, { type Express } from 'express'
diff --git a/registry/test/request-validation.test.ts b/registry/test/request-validation.test.ts
index 2418ac8..1974ef4 100644
--- a/registry/test/request-validation.test.ts
+++ b/registry/test/request-validation.test.ts
@@ -1,3 +1,6 @@
+// Copyright (c) 2026 BootNode. All rights reserved.
+// SPDX-License-Identifier: BUSL-1.1
+
import type { Server } from 'node:http'
import net from 'node:net'
import request from 'supertest'
diff --git a/registry/test/startup.test.ts b/registry/test/startup.test.ts
index adcbebf..b7a8aff 100644
--- a/registry/test/startup.test.ts
+++ b/registry/test/startup.test.ts
@@ -1,3 +1,6 @@
+// Copyright (c) 2026 BootNode. All rights reserved.
+// SPDX-License-Identifier: BUSL-1.1
+
import { describe, expect, it } from 'vitest'
import { type LedgerClient, LedgerRequestError } from '../src/ledger'
import { checkAdminParty, checkTemplateIds } from '../src/startup'
diff --git a/registry/test/transfer.test.ts b/registry/test/transfer.test.ts
index 558a513..d8d936e 100644
--- a/registry/test/transfer.test.ts
+++ b/registry/test/transfer.test.ts
@@ -1,3 +1,6 @@
+// Copyright (c) 2026 BootNode. All rights reserved.
+// SPDX-License-Identifier: BUSL-1.1
+
import request from 'supertest'
import { describe, expect, it } from 'vitest'
import {
diff --git a/registry/vitest.config.ts b/registry/vitest.config.ts
index 604913d..f64cdbd 100644
--- a/registry/vitest.config.ts
+++ b/registry/vitest.config.ts
@@ -1,3 +1,6 @@
+// Copyright (c) 2026 BootNode. All rights reserved.
+// SPDX-License-Identifier: BUSL-1.1
+
import { configDefaults, defineConfig } from 'vitest/config'
// The end-to-end suite needs a participant, so it is excluded here and asked
diff --git a/registry/vitest.e2e.config.ts b/registry/vitest.e2e.config.ts
index 3005b03..807a404 100644
--- a/registry/vitest.e2e.config.ts
+++ b/registry/vitest.e2e.config.ts
@@ -1,3 +1,6 @@
+// Copyright (c) 2026 BootNode. All rights reserved.
+// SPDX-License-Identifier: BUSL-1.1
+
import { defineConfig } from 'vitest/config'
export default defineConfig({
diff --git a/scripts/build-harness.sh b/scripts/build-harness.sh
index 3a0dbee..22efdd1 100755
--- a/scripts/build-harness.sh
+++ b/scripts/build-harness.sh
@@ -1,4 +1,7 @@
#!/bin/bash
+# Copyright (c) 2026 BootNode. All rights reserved.
+# SPDX-License-Identifier: BUSL-1.1
+
# Build the upstream splice-amulet-test bootstrap DAR that the splice-app-test
# integration suite data-depends on. Run AFTER scripts/fetch-dep.sh.
#
diff --git a/scripts/check-registry-deps.mjs b/scripts/check-registry-deps.mjs
index 491cdd1..b66e131 100644
--- a/scripts/check-registry-deps.mjs
+++ b/scripts/check-registry-deps.mjs
@@ -1,4 +1,7 @@
#!/usr/bin/env node
+// Copyright (c) 2026 BootNode. All rights reserved.
+// SPDX-License-Identifier: BUSL-1.1
+
//
// check-registry-deps.mjs - the root package.json ships registry/dist as its
// bin, so a consumer install resolves the service's imports against the root
diff --git a/scripts/consumer-smoke.sh b/scripts/consumer-smoke.sh
index 2ad0e04..93f52be 100755
--- a/scripts/consumer-smoke.sh
+++ b/scripts/consumer-smoke.sh
@@ -1,4 +1,7 @@
#!/usr/bin/env bash
+# Copyright (c) 2026 BootNode. All rights reserved.
+# SPDX-License-Identifier: BUSL-1.1
+
#
# consumer-smoke.sh - build a package whose ONLY data-dependency is the built
# canton-token-forge DAR.
diff --git a/scripts/fetch-dep.sh b/scripts/fetch-dep.sh
index aa507bb..89fbaa4 100755
--- a/scripts/fetch-dep.sh
+++ b/scripts/fetch-dep.sh
@@ -1,4 +1,7 @@
#!/bin/bash
+# Copyright (c) 2026 BootNode. All rights reserved.
+# SPDX-License-Identifier: BUSL-1.1
+
# Vendor the upstream canton-network/splice sources this project builds against,
# then derive each DAR's version from the vendored source tree and expose it via
# a stable-name symlink so daml.yaml never has to name a version.
diff --git a/scripts/registry-install-smoke.sh b/scripts/registry-install-smoke.sh
index 34d2f17..af6e41d 100755
--- a/scripts/registry-install-smoke.sh
+++ b/scripts/registry-install-smoke.sh
@@ -1,4 +1,7 @@
#!/usr/bin/env bash
+# Copyright (c) 2026 BootNode. All rights reserved.
+# SPDX-License-Identifier: BUSL-1.1
+
set -euo pipefail
# registry-install-smoke.sh - pack the repository, install the tarball into a
diff --git a/scripts/release-notes.sh b/scripts/release-notes.sh
index 7bb309b..44f164d 100755
--- a/scripts/release-notes.sh
+++ b/scripts/release-notes.sh
@@ -1,4 +1,7 @@
#!/usr/bin/env bash
+# Copyright (c) 2026 BootNode. All rights reserved.
+# SPDX-License-Identifier: BUSL-1.1
+
#
# release-notes.sh - emit the GitHub release body for a canton-token-forge DAR.
#
diff --git a/scripts/sandbox.sh b/scripts/sandbox.sh
index 0c4a34b..4df9b2b 100755
--- a/scripts/sandbox.sh
+++ b/scripts/sandbox.sh
@@ -1,4 +1,7 @@
#!/usr/bin/env bash
+# Copyright (c) 2026 BootNode. All rights reserved.
+# SPDX-License-Identifier: BUSL-1.1
+
#
# sandbox.sh - build the production DAR and run a local Canton sandbox with the
# JSON Ledger API enabled, so the registry service and the seed script have a
diff --git a/scripts/seed.mjs b/scripts/seed.mjs
index d4ab8cf..ae21256 100644
--- a/scripts/seed.mjs
+++ b/scripts/seed.mjs
@@ -1,4 +1,7 @@
#!/usr/bin/env node
+// Copyright (c) 2026 BootNode. All rights reserved.
+// SPDX-License-Identifier: BUSL-1.1
+
//
// seed.mjs - seed a running Canton sandbox with the contracts the registry
// service needs: an instrument admin, two demo users, and one InstrumentConfig