Skip to content

Commit 6f46246

Browse files
committed
feat: dockerize blockfrost-ryo
1 parent 6542913 commit 6f46246

File tree

20 files changed

+172
-36
lines changed

20 files changed

+172
-36
lines changed

compose/common.yml

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,13 @@ x-provider-server-environment: &provider-server-environment
6969
SUBMIT_API_URL: ${SUBMIT_API_URL:-http://cardano-submit-api:8090/}
7070
USE_BLOCKFROST: ${USE_BLOCKFROST:-false}
7171
USE_SUBMIT_API: ${USE_SUBMIT_API:-false}
72+
ASSET_PROVIDER: ${ASSET_PROVIDER:-dbsync}
73+
UTXO_PROVIDER: ${UTXO_PROVIDER:-dbsync}
74+
CHAIN_HISTORY_PROVIDER: ${CHAIN_HISTORY_PROVIDER:-dbsync}
75+
REWARDS_PROVIDER: ${REWARDS_PROVIDER:-dbsync}
76+
NETWORK_INFO_PROVIDER: ${NETWORK_INFO_PROVIDER:-dbsync}
77+
TX_SUBMIT_PROVIDER: ${TX_SUBMIT_PROVIDER:-submit-node}
78+
STAKE_POOL_PROVIDER: ${STAKE_POOL_PROVIDER:-dbsync}
7279

7380
x-sdk-environment: &sdk-environment
7481
LOGGER_MIN_SEVERITY: ${LOGGER_MIN_SEVERITY:-info}
@@ -110,6 +117,18 @@ x-sdk-environment: &sdk-environment
110117
WEB_SOCKET_API_URL: ws://ws-server:3000/ws
111118

112119
services:
120+
blockfrost-ryo:
121+
build:
122+
context: "https://github.com/ginnun/blockfrost-backend-ryo.git#feat/custom-network-support"
123+
dockerfile: Dockerfile
124+
environment:
125+
BLOCKFROST_CONFIG_SERVER_LISTEN_ADDRESS: 0.0.0.0
126+
depends_on:
127+
cardano-db-sync:
128+
condition: service_started
129+
ports:
130+
- "3015:3000"
131+
113132
cardano-db-sync:
114133
<<:
115134
- *logging
File renamed without changes.
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
server:
2+
listenAddress: "0.0.0.0"
3+
port: 3000
4+
debug: false
5+
dbSync:
6+
host: "postgres"
7+
port: 5432
8+
database: "cexplorer"
9+
user: "postgres"
10+
password: "doNoUseThisSecret!"
11+
maxConnections: 5

packages/cardano-services/docker-compose.yml

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,18 @@ x-sdk-environment: &sdk-environment
99
HANDLE_POLICY_IDS: ${HANDLE_POLICY_IDS:-f0ff48bbb7bbe9d59a40f1ce90e9e9d0ff5002ec48f232b49ca0fb9a}
1010

1111
services:
12+
13+
blockfrost-ryo:
14+
environment:
15+
<<: *sdk-environment
16+
NODE_ENV: local-blockfrost-ryo
17+
BLOCKFROST_CONFIG_NETWORK: ${NETWORK:-mainnet}
18+
BLOCKFROST_CONFIG_TOKEN_REGISTRY_URL: ${TOKEN_METADATA_SERVER_URL:-https://tokens.cardano.org}
19+
20+
volumes:
21+
- ./blockfrost/ryo:/app/config
22+
profiles: [ blockfrost-ryo ]
23+
1224
cardano-node:
1325
volumes:
1426
- ./config/network/${NETWORK:-mainnet}/cardano-node:/config
@@ -74,7 +86,7 @@ services:
7486

7587
secrets:
7688
blockfrost_key:
77-
file: ./blockfrost-keys/${NETWORK:-mainnet}.key
89+
file: ./blockfrost/keys/${NETWORK:-mainnet}.key
7890

7991
volumes:
8092
postgres-data:

packages/cardano-services/package.json

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
"cleanup": "rm -rf dist node_modules",
3030
"cli": "ts-node --transpile-only src/cli.ts",
3131
"compose:single:up": "yarn compose:up cardano-node ogmios postgres",
32-
"compose:up": "__FIX_UMASK__=$(chmod -R a+r ../../compose/placeholder-secrets) docker compose --env-file environments/.env.$NETWORK -p cardano-services-$NETWORK -f docker-compose.yml -f ../../compose/common.yml -f ../../compose/pg-agent.yml -f ../../compose/$(uname -m).yml ${FILES:-} up",
32+
"compose:up": "__FIX_UMASK__=$(chmod -R a+r ../../compose/placeholder-secrets) docker compose --env-file environments/.env.$NETWORK -p cardano-services-$NETWORK -f docker-compose.yml -f ../../compose/common.yml -f ../../compose/pg-agent.yml -f ../../compose/$(uname -m).yml ${FILES:-} --profile ${DOCKER_COMPOSE_PROFILE:-none} up",
3333
"compose:down": "docker compose -p cardano-services-$NETWORK -f docker-compose.yml -f ../../compose/common.yml -f ../../compose/pg-agent.yml -f ../../compose/$(uname -m).yml down -t 120",
3434
"coverage": "yarn test --coverage || true",
3535
"circular-deps:check": "madge --circular dist/cjs",
@@ -38,17 +38,21 @@
3838
"generate-migration": "typeorm-ts-node-commonjs migration:generate src/Projection/migrations/migrations -d src/migrationDataSource.ts",
3939
"mainnet:single:up": "NETWORK=mainnet yarn compose:single:up",
4040
"mainnet:up": "NETWORK=mainnet SUBMIT_API_ARGS=--mainnet yarn compose:up",
41+
"mainnet:blockfrost:up": "DOCKER_COMPOSE_PROFILE='blockfrost-ryo' yarn mainnet:up",
4142
"mainnet:down": "NETWORK=mainnet yarn compose:down",
4243
"prepack": "yarn build",
4344
"preprod:single:up": "NETWORK=preprod yarn compose:single:up",
4445
"preprod:up": "NETWORK=preprod SUBMIT_API_ARGS='--testnet-magic 1' yarn compose:up",
46+
"preprod:blockfrost:up": "DOCKER_COMPOSE_PROFILE='blockfrost-ryo' yarn preprod:up",
4547
"preprod:down": "NETWORK=preprod yarn compose:down",
4648
"pretest": "yarn build",
4749
"preview:single:up": "NETWORK=preview yarn compose:single:up",
4850
"preview:up": "NETWORK=preview SUBMIT_API_ARGS='--testnet-magic 2' yarn compose:up",
51+
"preview:blockfrost:up": "DOCKER_COMPOSE_PROFILE='blockfrost-ryo' yarn preview:up",
4952
"preview:down": "NETWORK=preview yarn compose:down",
5053
"sanchonet:single:up": "NETWORK=sanchonet yarn compose:single:up",
5154
"sanchonet:up": "NETWORK=sanchonet SUBMIT_API_ARGS='--testnet-magic 4' yarn compose:up",
55+
"sanchonet:blockfrost:up": "DOCKER_COMPOSE_PROFILE='blockfrost-ryo' yarn sanchonet:up",
5256
"sanchonet:down": "NETWORK=sanchonet yarn compose:down",
5357
"test": "jest --runInBand -c ./jest.config.js --selectProjects unit",
5458
"test:build:verify": "tsc --build ./test",

packages/cardano-services/src/Program/options/providers.ts

Lines changed: 10 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -22,58 +22,52 @@ export const ProviderImplementationDescription = 'Select one of the available pr
2222
const argParser = (impl: string) => ProviderImplementation[impl.toUpperCase() as keyof typeof ProviderImplementation];
2323
export const providerSelectionOptions = [
2424
newOption(
25-
'--asset-provider <implementation>',
25+
'--asset-provider <assetProvider>',
2626
ProviderImplementationDescription,
2727
'ASSET_PROVIDER',
2828
argParser,
2929
ProviderImplementation.DBSYNC
30-
)
31-
.conflicts('useTypeormAssetProvider')
32-
.choices([ProviderImplementation.BLOCKFROST, ProviderImplementation.DBSYNC, ProviderImplementation.TYPEORM]),
30+
).choices([ProviderImplementation.BLOCKFROST, ProviderImplementation.DBSYNC, ProviderImplementation.TYPEORM]),
3331
newOption(
34-
'--stake-pool-provider <implementation>',
32+
'--stake-pool-provider <stakePoolProvider>',
3533
ProviderImplementationDescription,
3634
'STAKE_POOL_PROVIDER',
3735
argParser,
3836
ProviderImplementation.DBSYNC
39-
)
40-
.conflicts('useTypeormStakePoolProvider')
41-
.choices([ProviderImplementation.DBSYNC, ProviderImplementation.TYPEORM]),
37+
).choices([ProviderImplementation.DBSYNC, ProviderImplementation.TYPEORM]),
4238
newOption(
43-
'--utxo-provider <implementation>',
39+
'--utxo-provider <utxoProvider>',
4440
ProviderImplementationDescription,
4541
'UTXO_PROVIDER',
4642
argParser,
4743
ProviderImplementation.DBSYNC
4844
).choices([ProviderImplementation.BLOCKFROST, ProviderImplementation.DBSYNC]),
4945
newOption(
50-
'--chain-history-provider <implementation>',
46+
'--chain-history-provider <chainHistoryProvider>',
5147
ProviderImplementationDescription,
5248
'CHAIN_HISTORY_PROVIDER',
5349
argParser,
5450
ProviderImplementation.DBSYNC
5551
).choices([ProviderImplementation.BLOCKFROST, ProviderImplementation.DBSYNC]),
5652
newOption(
57-
'--rewards-provider <implementation>',
53+
'--rewards-provider <rewardsProvider>',
5854
ProviderImplementationDescription,
5955
'REWARDS_PROVIDER',
6056
argParser,
6157
ProviderImplementation.DBSYNC
6258
).choices([ProviderImplementation.BLOCKFROST, ProviderImplementation.DBSYNC]),
6359
newOption(
64-
'--network-info-provider <implementation>',
60+
'--network-info-provider <networkInfoProvider>',
6561
ProviderImplementationDescription,
6662
'NETWORK_INFO_PROVIDER',
6763
argParser,
6864
ProviderImplementation.DBSYNC
6965
).choices([ProviderImplementation.BLOCKFROST, ProviderImplementation.DBSYNC]),
7066
newOption(
71-
'--tx-submit-provider <implementation>',
67+
'--tx-submit-provider <txSubmitProvider>',
7268
ProviderImplementationDescription,
7369
'TX_SUBMIT_PROVIDER',
7470
argParser,
7571
ProviderImplementation.SUBMIT_NODE
76-
)
77-
.conflicts('useSubmitApi')
78-
.choices([ProviderImplementation.BLOCKFROST, ProviderImplementation.SUBMIT_API, ProviderImplementation.SUBMIT_NODE])
72+
).choices([ProviderImplementation.BLOCKFROST, ProviderImplementation.SUBMIT_API, ProviderImplementation.SUBMIT_NODE])
7973
];

packages/cardano-services/src/Program/programs/types.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,8 @@ export enum ProviderServerOptionDescriptions {
6363
UseBlockfrost = 'Enables Blockfrost cached data DB',
6464
UseSubmitApi = 'Use cardano-submit-api provider',
6565
UseTypeormAssetProvider = 'Use the TypeORM Asset Provider (default is db-sync)',
66-
UseWebSocketApi = 'Use WebSocket API'
66+
UseWebSocketApi = 'Use WebSocket API',
67+
BlockfrostCustomNetworkUrl = 'URL for custom hosted blockfrost-ryo'
6768
}
6869

6970
export type ProviderServerArgs = CommonProgramOptions &

packages/cardano-services/src/cli.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -379,6 +379,12 @@ addOptions(withOgmiosOptions(withHandlePolicyIdsOptions(providerServerWithCommon
379379
'USE_WEB_SOCKET_API',
380380
(val) => stringOptionToBoolean(val, Programs.ProviderServer, ProviderServerOptionDescriptions.UseWebSocketApi)
381381
),
382+
newOption(
383+
'--blockfrost-custom-network-url <blockfrostCustomNetworkUrl>',
384+
ProviderServerOptionDescriptions.BlockfrostCustomNetworkUrl,
385+
'BLOCKFROST_CUSTOM_NETWORK_URL',
386+
urlValidator(ProviderServerOptionDescriptions.BlockfrostCustomNetworkUrl, true)
387+
),
382388
...providerSelectionOptions
383389
]).action(async (serviceNames: ServiceNames[], args: ProviderServerArgs) =>
384390
runServer('Provider server', { args, serviceNames }, () =>

packages/cardano-services/src/util/BlockfrostProvider/BlockfrostClientFactory.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,18 @@ let blockfrostApi: BlockFrostAPI | undefined;
1111
export const getBlockfrostApi = () => {
1212
if (blockfrostApi !== undefined) return blockfrostApi;
1313

14+
// custom hosted instance
15+
if (process.env.BLOCKFROST_CUSTOM_BACKEND_URL && process.env.BLOCKFROST_CUSTOM_BACKEND_URL !== '') {
16+
blockfrostApi = new BlockFrostAPI({
17+
customBackend: process.env.BLOCKFROST_CUSTOM_BACKEND_URL
18+
});
19+
20+
return blockfrostApi;
21+
}
22+
23+
// instance hosted by Blockfrost
1424
if (process.env.BLOCKFROST_API_KEY === undefined || process.env.BLOCKFROST_API_KEY === '')
15-
throw new Error('BLOCKFROST_API_KEY environment variable is required');
25+
throw new Error('BLOCKFROST_API_KEY or BLOCKFROST_CUSTOM_BACKEND_URL environment variable is required');
1626

1727
if (process.env.NETWORK === undefined) throw new Error('NETWORK environment variable is required');
1828

0 commit comments

Comments
 (0)