diff --git a/packages/apps/job-launcher/server/.env.example b/packages/apps/job-launcher/server/.env.example index 0bc9ee4047..84b6fa86f8 100644 --- a/packages/apps/job-launcher/server/.env.example +++ b/packages/apps/job-launcher/server/.env.example @@ -21,6 +21,11 @@ PGP_PRIVATE_KEY= PGP_ENCRYPT= PGP_PASSPHRASE= REPUTATION_ORACLE_ADDRESS= +CVAT_EXCHANGE_ORACLE_ADDRESS= +CVAT_RECORDING_ORACLE_ADDRESS= +AUDINO_EXCHANGE_ORACLE_ADDRESS= +AUDINO_RECORDING_ORACLE_ADDRESS= +HCAPTCHA_ORACLE_ADDRESS= HCAPTCHA_RECORDING_ORACLE_URI= HCAPTCHA_REPUTATION_ORACLE_URI= HCAPTCHA_SITE_KEY= diff --git a/packages/apps/job-launcher/server/ENV.md b/packages/apps/job-launcher/server/ENV.md index bc1a7c60ee..398fc7302b 100644 --- a/packages/apps/job-launcher/server/ENV.md +++ b/packages/apps/job-launcher/server/ENV.md @@ -180,6 +180,21 @@ REPUTATION_ORACLE_ADDRESS= ### List of reputation oracle addresses, typically comma-separated. Required REPUTATION_ORACLES= +### Address of the CVAT exchange oracle contract. Required +CVAT_EXCHANGE_ORACLE_ADDRESS= + +### Address of the CVAT recording oracle contract. Required +CVAT_RECORDING_ORACLE_ADDRESS= + +### Address of the Audino exchange oracle contract. Required +AUDINO_EXCHANGE_ORACLE_ADDRESS= + +### Address of the Audino recording oracle contract. Required +AUDINO_RECORDING_ORACLE_ADDRESS= + +### Address of the hCaptcha oracle contract. Required +HCAPTCHA_ORACLE_ADDRESS= + ### URI for the hCaptcha recording oracle service. Required HCAPTCHA_RECORDING_ORACLE_URI= diff --git a/packages/apps/job-launcher/server/src/common/config/env-schema.ts b/packages/apps/job-launcher/server/src/common/config/env-schema.ts index 3da850105b..6cb4fa35e0 100644 --- a/packages/apps/job-launcher/server/src/common/config/env-schema.ts +++ b/packages/apps/job-launcher/server/src/common/config/env-schema.ts @@ -30,6 +30,11 @@ export const envValidator = Joi.object({ GAS_PRICE_MULTIPLIER: Joi.number(), REPUTATION_ORACLE_ADDRESS: Joi.string().required(), REPUTATION_ORACLES: Joi.string().required(), + CVAT_EXCHANGE_ORACLE_ADDRESS: Joi.string().required(), + CVAT_RECORDING_ORACLE_ADDRESS: Joi.string().required(), + AUDINO_EXCHANGE_ORACLE_ADDRESS: Joi.string(), + AUDINO_RECORDING_ORACLE_ADDRESS: Joi.string(), + HCAPTCHA_ORACLE_ADDRESS: Joi.string().required(), HCAPTCHA_RECORDING_ORACLE_URI: Joi.string().required(), HCAPTCHA_REPUTATION_ORACLE_URI: Joi.string().required(), HCAPTCHA_SITE_KEY: Joi.string().required(), diff --git a/packages/apps/job-launcher/server/src/common/config/web3-config.service.ts b/packages/apps/job-launcher/server/src/common/config/web3-config.service.ts index 2a6f6ed955..323833a600 100644 --- a/packages/apps/job-launcher/server/src/common/config/web3-config.service.ts +++ b/packages/apps/job-launcher/server/src/common/config/web3-config.service.ts @@ -64,4 +64,50 @@ export class Web3ConfigService { 'HCAPTCHA_REPUTATION_ORACLE_URI', ); } + + /** + * Address of the CVAT exchange oracle contract. + * Required + */ + get cvatExchangeOracleAddress(): string { + return this.configService.getOrThrow( + 'CVAT_EXCHANGE_ORACLE_ADDRESS', + ); + } + + /** + * Address of the CVAT recording oracle contract. + * Required + */ + get cvatRecordingOracleAddress(): string { + return this.configService.getOrThrow( + 'CVAT_RECORDING_ORACLE_ADDRESS', + ); + } + + /** + * Address of the hCaptcha oracle contract. + * Required + */ + get hCaptchaOracleAddress(): string { + return this.configService.getOrThrow('HCAPTCHA_ORACLE_ADDRESS'); + } + + /** + * Address of the Audino exchange oracle. + */ + get audinoExchangeOracleAddress(): string { + return this.configService.getOrThrow( + 'AUDINO_EXCHANGE_ORACLE_ADDRESS', + ); + } + + /** + * Address of the Audino recording oracle. + */ + get audinoRecordingOracleAddress(): string { + return this.configService.getOrThrow( + 'AUDINO_RECORDING_ORACLE_ADDRESS', + ); + } } diff --git a/packages/apps/job-launcher/server/src/modules/routing-protocol/routing-protocol.service.ts b/packages/apps/job-launcher/server/src/modules/routing-protocol/routing-protocol.service.ts index ec605f12b3..b682367678 100644 --- a/packages/apps/job-launcher/server/src/modules/routing-protocol/routing-protocol.service.ts +++ b/packages/apps/job-launcher/server/src/modules/routing-protocol/routing-protocol.service.ts @@ -4,7 +4,12 @@ import { Web3Service } from '../web3/web3.service'; import { Web3ConfigService } from '../../common/config/web3-config.service'; import { hashString } from '../../common/utils'; import { ErrorRoutingProtocol } from '../../common/constants/errors'; -import { JobRequestType } from '../../common/enums/job'; +import { + AudinoJobType, + CvatJobType, + HCaptchaJobType, + JobRequestType, +} from '../../common/enums/job'; import { ControlledError } from '../../common/errors/controlled'; import { NetworkConfigService } from '../../common/config/network-config.service'; import { @@ -155,6 +160,26 @@ export class RoutingProtocolService { exchangeOracle: string; recordingOracle: string; }> { + if (jobType === HCaptchaJobType.HCAPTCHA) { + return { + reputationOracle: this.web3ConfigService.hCaptchaOracleAddress, + exchangeOracle: this.web3ConfigService.hCaptchaOracleAddress, + recordingOracle: this.web3ConfigService.hCaptchaOracleAddress, + }; + } else if (Object.values(CvatJobType).includes(jobType as CvatJobType)) { + return { + reputationOracle: this.web3ConfigService.reputationOracleAddress, + exchangeOracle: this.web3ConfigService.cvatExchangeOracleAddress, + recordingOracle: this.web3ConfigService.cvatRecordingOracleAddress, + }; + } else if (jobType === AudinoJobType.AUDIO_TRANSCRIPTION) { + return { + reputationOracle: this.web3ConfigService.reputationOracleAddress, + exchangeOracle: this.web3ConfigService.audinoExchangeOracleAddress, + recordingOracle: this.web3ConfigService.audinoRecordingOracleAddress, + }; + } + const reputationOracle = this.selectReputationOracle(); const availableOracles = await this.web3Service.findAvailableOracles( chainId, diff --git a/packages/apps/job-launcher/server/test/constants.ts b/packages/apps/job-launcher/server/test/constants.ts index 1734f85660..809f24265b 100644 --- a/packages/apps/job-launcher/server/test/constants.ts +++ b/packages/apps/job-launcher/server/test/constants.ts @@ -252,6 +252,8 @@ export const mockConfig: any = { STRIPE_API_VERSION: MOCK_STRIPE_API_VERSION, STRIPE_APP_NAME: MOCK_STRIPE_APP_NAME, STRIPE_APP_INFO_URL: MOCK_STRIPE_APP_INFO_URL, + CVAT_EXCHANGE_ORACLE_ADDRESS: MOCK_ADDRESS, + CVAT_RECORDING_ORACLE_ADDRESS: MOCK_ADDRESS, HCAPTCHA_SITE_KEY: MOCK_HCAPTCHA_SITE_KEY, HCAPTCHA_RECORDING_ORACLE_URI: MOCK_RECORDING_ORACLE_URL, HCAPTCHA_REPUTATION_ORACLE_URI: MOCK_REPUTATION_ORACLE_URL, diff --git a/scripts/cvat/docker-compose.local.yml b/scripts/cvat/docker-compose.local.yml index 1bcc74669b..3327e18dae 100644 --- a/scripts/cvat/docker-compose.local.yml +++ b/scripts/cvat/docker-compose.local.yml @@ -442,6 +442,8 @@ services: S3_BUCKET: *bucket_name_manifests REPUTATION_ORACLES: *reputation_oracle_address REPUTATION_ORACLE_ADDRESS: *reputation_oracle_address + CVAT_EXCHANGE_ORACLE_ADDRESS: *exchange_oracle_address + CVAT_RECORDING_ORACLE_ADDRESS: *recording_oracle_address FE_URL: http://localhost:${JOB_LAUNCHER_CLIENT_PORT:?} job-launcher-client: diff --git a/scripts/fortune/.env.jl-server b/scripts/fortune/.env.jl-server index eab5941b7f..f110c2637d 100644 --- a/scripts/fortune/.env.jl-server +++ b/scripts/fortune/.env.jl-server @@ -22,9 +22,12 @@ GAS_PRICE_MULTIPLIER=1 # PGP_PRIVATE_KEY= PGP_ENCRYPT=false # PGP_PASSPHRASE= +CVAT_EXCHANGE_ORACLE_ADDRESS=0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC +CVAT_RECORDING_ORACLE_ADDRESS=0x90F79bf6EB2c4f870365E785982E1f101E93b906 REPUTATION_ORACLE_ADDRESS=0x15d34AAf54267DB7D7c367839AAf71A00a2C6A65 HCAPTCHA_RECORDING_ORACLE_URI=a HCAPTCHA_REPUTATION_ORACLE_URI=a +HCAPTCHA_ORACLE_ADDRESS=a HCAPTCHA_SITE_KEY=a # Auth