name: psbt-interop-lab

services:
  core:
    image: psbt-interop-lab/core:31.1
    build:
      context: .
      dockerfile: docker/core/Dockerfile
    ports:
      - "127.0.0.1:${PSBT_LAB_RPC_PORT:-18443}:18443"
    networks:
      - lab
    volumes:
      - core-data:/home/bitcoin/.bitcoin
    read_only: true
    tmpfs:
      - /tmp:rw,noexec,nosuid,nodev,size=64m
    cap_drop:
      - ALL
    pids_limit: 128
    mem_limit: 1g
    security_opt:
      - no-new-privileges:true
    healthcheck:
      test:
        [
          "CMD",
          "bitcoin-cli",
          "-regtest",
          "-rpcconnect=127.0.0.1",
          "-rpcuser=psbtlab",
          "-rpcpassword=psbtlab-regtest-only",
          "getblockchaininfo",
        ]
      interval: 2s
      timeout: 2s
      retries: 30

  rust-adapter:
    image: psbt-interop-lab/rust-bitcoin:0.1.0
    build:
      context: adapters/rust-bitcoin
    network_mode: none
    read_only: true
    cap_drop:
      - ALL
    pids_limit: 64
    mem_limit: 256m
    security_opt:
      - no-new-privileges:true

  go-adapter:
    image: psbt-interop-lab/btcsuite-go:1.2.0
    build:
      context: adapters/btcsuite-go
    network_mode: none
    read_only: true
    cap_drop:
      - ALL
    pids_limit: 64
    mem_limit: 256m
    security_opt:
      - no-new-privileges:true

  bitcoinjs-adapter:
    image: psbt-interop-lab/bitcoinjs-lib:7.0.1
    build:
      context: adapters/bitcoinjs-lib
    network_mode: none
    read_only: true
    cap_drop:
      - ALL
    pids_limit: 64
    mem_limit: 256m
    security_opt:
      - no-new-privileges:true

  bdk-adapter:
    image: psbt-interop-lab/bdkpython:2.3.1
    platform: linux/amd64
    build:
      context: adapters/bdkpython-2.3.1
    network_mode: none
    read_only: true
    cap_drop:
      - ALL
    pids_limit: 64
    mem_limit: 256m
    security_opt:
      - no-new-privileges:true

  psbt-v2-adapter:
    image: psbt-interop-lab/rust-psbt-v2:0.1.0
    build:
      context: adapters/rust-psbt-v2
    network_mode: none
    read_only: true
    cap_drop:
      - ALL
    pids_limit: 64
    mem_limit: 256m
    security_opt:
      - no-new-privileges:true

  libwally-adapter:
    image: psbt-interop-lab/libwally:1.5.4
    build:
      context: adapters/libwally-1.5.4
    network_mode: none
    read_only: true
    cap_drop:
      - ALL
    pids_limit: 64
    mem_limit: 256m
    security_opt:
      - no-new-privileges:true

  bdk-wallet-current-adapter:
    image: psbt-interop-lab/bdk-wallet-current:3.1.0
    build:
      context: adapters/bdk-wallet-current
    network_mode: none
    read_only: true
    cap_drop:
      - ALL
    pids_limit: 64
    mem_limit: 256m
    security_opt:
      - no-new-privileges:true

  musig2-signer-1:
    image: psbt-interop-lab/musig2-rust:0.1.0
    build:
      context: adapters/musig2-rust
    environment:
      PSBT_LAB_MUSIG2_SIGNER: "1"
    network_mode: none
    read_only: true
    cap_drop:
      - ALL
    pids_limit: 64
    mem_limit: 256m
    security_opt:
      - no-new-privileges:true

  musig2-signer-2:
    image: psbt-interop-lab/musig2-scure:0.1.0
    build:
      context: adapters/musig2-scure
    network_mode: none
    read_only: true
    cap_drop:
      - ALL
    pids_limit: 64
    mem_limit: 256m
    security_opt:
      - no-new-privileges:true

  hwi-simulator:
    image: psbt-interop-lab/hwi-simulator:0.1.0
    build:
      context: adapters/hwi-simulator
    network_mode: none
    read_only: true
    cap_drop:
      - ALL
    pids_limit: 64
    mem_limit: 256m
    security_opt:
      - no-new-privileges:true

networks:
  lab:
    driver: bridge

volumes:
  core-data:
