Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
54 commits
Select commit Hold shift + click to select a range
e7337ba
add canton ea endpoint and transport
cl-mayowa Oct 14, 2025
18bd27c
add changeset
cl-mayowa Oct 14, 2025
c742a59
update contract query and input params
cl-mayowa Oct 17, 2025
511d86e
remove unsued functions and refactor code
cl-mayowa Oct 23, 2025
7740b18
update integration tests for new changes
cl-mayowa Oct 23, 2025
56c9ac7
refactor adapter settings and tests
cl-mayowa Nov 4, 2025
406352a
add custom return handler with tests
cl-mayowa Nov 4, 2025
21b971f
refactor canton to be extensible and added tests
cl-mayowa Nov 12, 2025
af69997
update dependencies lock
cl-mayowa Dec 5, 2025
75afbec
remove outdated snapshots
cl-mayowa Dec 19, 2025
31b221c
update external adapter framework version
cl-mayowa Dec 19, 2025
2372d13
remove useless read me
cl-mayowa Dec 19, 2025
acb7400
Merge branch 'main' into DS-1113-Canton-EA
app-token-issuer-data-feeds[bot] Dec 20, 2025
ba364e6
Merge branch 'main' into DS-1113-Canton-EA
app-token-issuer-data-feeds[bot] Dec 24, 2025
bf71600
Merge branch 'main' into DS-1113-Canton-EA
app-token-issuer-data-feeds[bot] Dec 24, 2025
f9a90a7
Merge branch 'main' into DS-1113-Canton-EA
app-token-issuer-data-feeds[bot] Dec 24, 2025
cb56ec8
Merge branch 'main' into DS-1113-Canton-EA
app-token-issuer-data-feeds[bot] Dec 25, 2025
5fecd29
Merge branch 'main' into DS-1113-Canton-EA
app-token-issuer-data-feeds[bot] Dec 30, 2025
a77e0c9
Merge branch 'main' into DS-1113-Canton-EA
app-token-issuer-data-feeds[bot] Dec 30, 2025
66e56f3
Merge branch 'main' into DS-1113-Canton-EA
app-token-issuer-data-feeds[bot] Dec 31, 2025
9f040d4
Merge branch 'main' into DS-1113-Canton-EA
app-token-issuer-data-feeds[bot] Dec 31, 2025
da9910d
Merge branch 'main' into DS-1113-Canton-EA
app-token-issuer-data-feeds[bot] Dec 31, 2025
6894d6f
Merge branch 'main' into DS-1113-Canton-EA
app-token-issuer-data-feeds[bot] Dec 31, 2025
7d7eca5
Merge branch 'main' into DS-1113-Canton-EA
app-token-issuer-data-feeds[bot] Jan 5, 2026
eb0f8a0
Merge branch 'main' into DS-1113-Canton-EA
app-token-issuer-data-feeds[bot] Jan 5, 2026
3d72bc8
Merge branch 'main' into DS-1113-Canton-EA
app-token-issuer-data-feeds[bot] Jan 5, 2026
c4d3058
Merge branch 'main' into DS-1113-Canton-EA
app-token-issuer-data-feeds[bot] Jan 6, 2026
81e9a05
Merge branch 'main' into DS-1113-Canton-EA
app-token-issuer-data-feeds[bot] Jan 6, 2026
d599e48
Merge branch 'main' into DS-1113-Canton-EA
app-token-issuer-data-feeds[bot] Jan 6, 2026
8a80033
Merge branch 'main' into DS-1113-Canton-EA
app-token-issuer-data-feeds[bot] Jan 6, 2026
f89d741
Merge branch 'main' into DS-1113-Canton-EA
app-token-issuer-data-feeds[bot] Jan 6, 2026
3f9bf7c
Merge branch 'main' into DS-1113-Canton-EA
app-token-issuer-data-feeds[bot] Jan 7, 2026
0c866c2
Merge branch 'main' into DS-1113-Canton-EA
app-token-issuer-data-feeds[bot] Jan 7, 2026
9deeb54
Merge branch 'main' into DS-1113-Canton-EA
app-token-issuer-data-feeds[bot] Jan 7, 2026
a35a768
Merge branch 'main' into DS-1113-Canton-EA
app-token-issuer-data-feeds[bot] Jan 8, 2026
fd289c6
Merge branch 'main' into DS-1113-Canton-EA
app-token-issuer-data-feeds[bot] Jan 8, 2026
0078775
Merge branch 'main' into DS-1113-Canton-EA
app-token-issuer-data-feeds[bot] Jan 8, 2026
439c593
Merge branch 'main' into DS-1113-Canton-EA
app-token-issuer-data-feeds[bot] Jan 8, 2026
4bf55de
Merge branch 'main' into DS-1113-Canton-EA
app-token-issuer-data-feeds[bot] Jan 8, 2026
6cb1830
Merge branch 'main' into DS-1113-Canton-EA
app-token-issuer-data-feeds[bot] Jan 8, 2026
98aba67
Merge branch 'main' into DS-1113-Canton-EA
app-token-issuer-data-feeds[bot] Jan 8, 2026
b16b5ca
Merge branch 'main' into DS-1113-Canton-EA
app-token-issuer-data-feeds[bot] Jan 8, 2026
82fe1f4
Merge branch 'main' into DS-1113-Canton-EA
app-token-issuer-data-feeds[bot] Jan 8, 2026
0f8d35d
Merge branch 'main' into DS-1113-Canton-EA
app-token-issuer-data-feeds[bot] Jan 8, 2026
fa20726
Merge branch 'main' into DS-1113-Canton-EA
app-token-issuer-data-feeds[bot] Jan 8, 2026
cbe3d2b
Merge branch 'main' into DS-1113-Canton-EA
app-token-issuer-data-feeds[bot] Jan 8, 2026
7079039
Merge branch 'main' into DS-1113-Canton-EA
app-token-issuer-data-feeds[bot] Jan 8, 2026
331895b
Merge branch 'main' into DS-1113-Canton-EA
app-token-issuer-data-feeds[bot] Jan 9, 2026
3d9dc11
Add canton-functions path to tsconfig
Fletch153 Jan 12, 2026
020bbfe
add README for canton EA
cl-mayowa Jan 30, 2026
f57271e
merge main into DS-1113-Canton-EA
cl-mayowa Jan 30, 2026
1a1406f
upgrade EA version
cl-mayowa Feb 4, 2026
a725f52
update yarn
cl-mayowa Feb 4, 2026
0d20cb3
Merge branch 'main' into DS-1113-Canton-EA
cl-mayowa Feb 4, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/fair-geese-beam.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@chainlink/canton-functions-adapter': major
---

This EA enables us to read data from Canton participant nodes via the Ledger API
10 changes: 10 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
root = true

[*]
end_of_line = lf
insert_final_newline = true

[*.{js,json,yml}]
charset = utf-8
indent_style = space
indent_size = 2
4 changes: 4 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
/.yarn/** linguist-vendored
/.yarn/releases/* binary
/.yarn/plugins/**/* binary
/.pnp.* binary linguist-generated
22 changes: 22 additions & 0 deletions .pnp.cjs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Empty file.
56 changes: 56 additions & 0 deletions packages/sources/canton-functions/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
# CANTON_FUNCTIONS

![1.0.0](https://img.shields.io/github/package-json/v/smartcontractkit/external-adapters-js?filename=packages/sources/canton-functions/package.json) ![v3](https://img.shields.io/badge/framework%20version-v3-blueviolet)

This document was generated automatically. Please see [README Generator](../../scripts#readme-generator) for more info.

## Environment Variables

| Required? | Name | Description | Type | Options | Default |
| :-------: | :-------------------: | :---------------------------------------------------------------------------------------: | :----: | :-----: | :-----: |
| ✅ | AUTH_TOKEN | JWT token for Canton JSON API authentication | string | | |
| | BACKGROUND_EXECUTE_MS | The amount of time the background execute should sleep before performing the next request | number | | `1000` |
| ✅ | URL | The Canton JSON API URL | string | | |
| ✅ | TEMPLATE_ID | The template ID to query contracts for (format: packageId:Module:Template) | string | | |
| ✅ | CHOICE | The non-consuming choice to exercise on the contract | string | | |
| | ARGUMENT | The argument for the choice (JSON string) | string | | |
| | CONTRACT_FILTER | Filter to query contracts when contractId is not provided (JSON string) | string | | |

---

## Data Provider Rate Limits

There are no rate limits for this adapter.

---

## Input Parameters

| Required? | Name | Description | Type | Options | Default |
| :-------: | :------: | :-----------------: | :----: | :----------------------------------: | :-----------: |
| | endpoint | The endpoint to use | string | [canton-data](#canton-data-endpoint) | `canton-data` |

## Canton-data Endpoint

`canton-data` is the only supported name for this endpoint.

### Input Params

| Required? | Name | Aliases | Description | Type | Options | Default | Depends On | Not Valid With |
| :-------: | :--------: | :-----: | :-----------------------------------: | :----: | :-----: | :-----: | :--------: | :------------: |
| | contractId | | The contract ID to exercise choice on | string | | | | |

### Example

Request:

```json
{
"data": {
"endpoint": "canton-data",
"contractId": "00e1f5c6d8b9a7f4e3c2d1a0b9c8d7e6f5a4b3c2d1e0f9a8b7c6d5e4f3a2b1c0"
}
}
```

---
42 changes: 42 additions & 0 deletions packages/sources/canton-functions/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
{
"name": "@chainlink/canton-functions-adapter",
"version": "1.0.0",
"description": "Chainlink canton-functions adapter.",
"keywords": [
"Chainlink",
"LINK",
"blockchain",
"oracle",
"canton-functions"
],
"main": "dist/index.js",
"types": "dist/index.d.ts",
"files": [
"dist"
],
"repository": {
"url": "https://github.com/smartcontractkit/external-adapters-js",
"type": "git"
},
"license": "MIT",
"scripts": {
"clean": "rm -rf dist && rm -f tsconfig.tsbuildinfo",
"prepack": "yarn build",
"build": "tsc -b",
"server": "node -e 'require(\"./index.js\").server()'",
"server:dist": "node -e 'require(\"./dist/index.js\").server()'",
"start": "yarn server:dist"
},
"devDependencies": {
"@sinonjs/fake-timers": "9.1.2",
"@types/jest": "^29.5.14",
"@types/node": "22.14.1",
"@types/sinonjs__fake-timers": "8.1.5",
"nock": "13.5.6",
"typescript": "5.8.3"
},
"dependencies": {
"@chainlink/external-adapter-framework": "2.11.5",
"tslib": "2.4.1"
}
}
41 changes: 41 additions & 0 deletions packages/sources/canton-functions/src/config/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
import { AdapterConfig } from '@chainlink/external-adapter-framework/config'

export const config = new AdapterConfig({
AUTH_TOKEN: {
description: 'JWT token for Canton JSON API authentication',
type: 'string',
required: true,
sensitive: true,
},
BACKGROUND_EXECUTE_MS: {
description:
'The amount of time the background execute should sleep before performing the next request',
type: 'number',
default: 1_000,
},
URL: {
description: 'The Canton JSON API URL',
type: 'string',
required: true,
},
TEMPLATE_ID: {
description: 'The template ID to query contracts for (format: packageId:Module:Template)',
type: 'string',
required: true,
},
CHOICE: {
description: 'The non-consuming choice to exercise on the contract',
type: 'string',
required: true,
},
ARGUMENT: {
description: 'The argument for the choice (JSON string)',
type: 'string',
required: false,
},
CONTRACT_FILTER: {
description: 'Filter to query contracts when contractId is not provided (JSON string)',
type: 'string',
required: false,
},
})
39 changes: 39 additions & 0 deletions packages/sources/canton-functions/src/endpoint/canton-data.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
import { AdapterEndpoint } from '@chainlink/external-adapter-framework/adapter'
import { InputParameters } from '@chainlink/external-adapter-framework/validation'
import { config } from '../config'
import { cantonDataTransport } from '../transport/canton-data'

export const inputParameters = new InputParameters(
{
contractId: {
description: 'The contract ID to exercise choice on',
type: 'string',
required: false,
},
},
[
{
contractId: '00e1f5c6d8b9a7f4e3c2d1a0b9c8d7e6f5a4b3c2d1e0f9a8b7c6d5e4f3a2b1c0',
},
],
)

export type BaseEndpointTypes = {
Parameters: typeof inputParameters.definition
Response: {
Data: {
result: string
exerciseResult: any
contract?: any
}
Result: string
}
Settings: typeof config.settings
}

export const endpoint = new AdapterEndpoint({
name: 'canton-data',
aliases: [],
transport: cantonDataTransport,
inputParameters,
})
1 change: 1 addition & 0 deletions packages/sources/canton-functions/src/endpoint/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export { endpoint as cantonData } from './canton-data'
24 changes: 24 additions & 0 deletions packages/sources/canton-functions/src/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import { expose, ServerInstance } from '@chainlink/external-adapter-framework'
import { Adapter } from '@chainlink/external-adapter-framework/adapter'
import { config } from './config'
import { cantonData } from './endpoint'

export const adapter = new Adapter({
defaultEndpoint: cantonData.name,
name: 'CANTON_FUNCTIONS',
config,
endpoints: [cantonData],
})

export const server = (): Promise<ServerInstance | undefined> => expose(adapter)

// Export types and utilities for secondary adapters
export { BaseEndpointTypes, inputParameters } from './endpoint/canton-data'
export type {
Contract,
ExerciseChoiceRequest,
ExerciseResponse,
QueryContractByTemplateRequest,
} from './shared/canton-client'
export { CantonDataTransport, ResultHandler } from './transport/canton-data'
export { config as cantonConfig }
Loading
Loading