Summary
Yaci DevKit runs the native Yaci Store binary by default (yaci.store.mode=native in both applications/cli/config/application.properties and applications/cli/docker/application.properties), and the default transaction evaluator is scalus.
Scalus reaches the blst native library for BLS12-381 primitives, and the GraalVM native-image build of Yaci Store has no JNI/resource configuration for it. So under store.submit.tx-evaluator-mode=scalus, Plutus scripts that use BLS12-381 builtins fail to evaluate in the native Store binary that DevKit ships.
All other Plutus scripts are unaffected — the failure is confined to the code paths that touch the blst JNI binding.
Upstream root cause: bloxbean/yaci-store#1045 (to be fixed on release/2.0.1_devkit).
This issue tracks the DevKit-side impact and follow-up.
Why DevKit is affected
DevKit picks the evaluator at devnet start in YaciStoreService.resolveTxEvaluatorMode(): it uses ogmios when Ogmios is enabled and running, and otherwise falls back to scalus. The mode is passed to the Store both as STORE_SUBMIT_TX_EVALUATOR_MODE and via the generated store.submit.tx-evaluator-mode.
So whether a BLS12-381 contract can be evaluated depends on which evaluator is active:
| Distribution / platform |
Ogmios available |
BLS12-381 scripts |
Other Plutus scripts |
Docker linux/amd64 |
✅ |
✅ with Ogmios, ❌ on Scalus |
✅ |
Docker linux/arm64 |
✅ (native binaries) |
✅ with Ogmios, ❌ on Scalus |
✅ |
| Zip on Linux (x86_64 / arm64) |
✅ when enabled |
✅ with Ogmios, ❌ on Scalus |
✅ |
| Zip on macOS |
❌ no usable upstream build |
❌ cannot be evaluated at all |
✅ |
The macOS zip row is the notable one. Ogmios publishes no self-contained macOS build — the aarch64-macos artifact is dynamically linked against Nix store paths and fails with dyld: Library not loaded: /nix/store/...libffi.8.dylib — so on a native macOS install Scalus is the only available evaluator, and BLS12-381 contracts cannot be evaluated there until the upstream fix lands.
Follow-up in DevKit
Related work
This surfaced while implementing ADR-0016 (upgrade to CardanoSolutions Ogmios v7.0.0 / Kupo v2.12, restore native arm64, and make Ogmios the default tx evaluator). Enabling Ogmios by default in the Docker distribution incidentally makes BLS12-381 contract evaluation work out of the box there, since the ogmios evaluator does not go through blst.
Notes
The missing configuration has been verified as absent across main, release/2.0.x and release/2.0.1_devkit in yaci-store, and across the full history of all refs (details in bloxbean/yaci-store#1045).
Summary
Yaci DevKit runs the native Yaci Store binary by default (
yaci.store.mode=nativein bothapplications/cli/config/application.propertiesandapplications/cli/docker/application.properties), and the default transaction evaluator isscalus.Scalus reaches the
blstnative library for BLS12-381 primitives, and the GraalVM native-image build of Yaci Store has no JNI/resource configuration for it. So understore.submit.tx-evaluator-mode=scalus, Plutus scripts that use BLS12-381 builtins fail to evaluate in the native Store binary that DevKit ships.All other Plutus scripts are unaffected — the failure is confined to the code paths that touch the blst JNI binding.
Upstream root cause: bloxbean/yaci-store#1045 (to be fixed on
release/2.0.1_devkit).This issue tracks the DevKit-side impact and follow-up.
Why DevKit is affected
DevKit picks the evaluator at devnet start in
YaciStoreService.resolveTxEvaluatorMode(): it usesogmioswhen Ogmios is enabled and running, and otherwise falls back toscalus. The mode is passed to the Store both asSTORE_SUBMIT_TX_EVALUATOR_MODEand via the generatedstore.submit.tx-evaluator-mode.So whether a BLS12-381 contract can be evaluated depends on which evaluator is active:
linux/amd64linux/arm64The macOS zip row is the notable one. Ogmios publishes no self-contained macOS build — the
aarch64-macosartifact is dynamically linked against Nix store paths and fails withdyld: Library not loaded: /nix/store/...libffi.8.dylib— so on a native macOS install Scalus is the only available evaluator, and BLS12-381 contracts cannot be evaluated there until the upstream fix lands.Follow-up in DevKit
yaci.store.tag/yaci.store.versioninapplications/cli/config/download.propertiesonce the fix lands onrelease/2.0.1_devkit.applications/store-build/Earthfile,STORE_NATIVE_BRANCH) after the upstream fix.Related work
This surfaced while implementing ADR-0016 (upgrade to CardanoSolutions Ogmios v7.0.0 / Kupo v2.12, restore native arm64, and make Ogmios the default tx evaluator). Enabling Ogmios by default in the Docker distribution incidentally makes BLS12-381 contract evaluation work out of the box there, since the
ogmiosevaluator does not go through blst.Notes
The missing configuration has been verified as absent across
main,release/2.0.xandrelease/2.0.1_devkitin yaci-store, and across the full history of all refs (details in bloxbean/yaci-store#1045).