Skip to content

feat: nightfall3 bec optimizations #1530

feat: nightfall3 bec optimizations

feat: nightfall3 bec optimizations #1530

name: Check PR
on:
pull_request:
branches: [master]
env:
DOCKER_BUILDKIT: 1 # enable docker buildkit
# Whitelisting is disabled during testing for backwards compatibility with these tests. It must not be disabled in production.
WHITELISTING: disable
jobs:
dependency-review:
runs-on: ubuntu-20.04
steps:
- name: 'Checkout Repository'
uses: actions/checkout@v4
- name: 'Dependency Review'
uses: actions/dependency-review-action@v4
eslint-check:
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: '18.19.1'
- name: eslint check
run: |
npm ci
npm run lint
general-tests:
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: '18.19.1'
- name: General Tests
run: |
npm ci
npm run test-general-stuff
cd common-files
npm ci
npm run test
unit-tests:
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: '18.19.1'
- name: Unit Tests
run: |
npm ci
cd common-files
npm ci
cd ../
npm run unit-test
MODULUS=$(cat test/_certificates/root_ca.pub_key.modulus) \
AUTHORITY_KEY_IDENTIFIER=$(cat test/_certificates/root_ca.authority_key) \
INTERMEDIATE_CERTIFICATE_PATH=test/_certificates/intermediate_ca.crt \
END_USER_CERTIFICATE_PATH=test/_certificates/user/user-1.crt \
END_USER_PRIV_KEY_PATH=test/_certificates/user/user-1.priv_key \
EXTENDED_KEY_USAGE_OID='0x06082b0601050507030800000000000000000000000000000000000000000000,0x06082b0601050507030400000000000000000000000000000000000000000000' \
CERTIFICATE_POLICIES_OID='0x06032a0304000000000000000000000000000000000000000000000000000000,0x06032d0607000000000000000000000000000000000000000000000000000000' \
npm run unit-test-x509
unit-test-circuits:
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: '18.19.1'
- name: Install Circom
run: |
curl https://sh.rustup.rs -sSf -o rust.sh
bash -f rust.sh -y
git clone https://github.com/iden3/circom.git
cd circom
cargo build --release
cargo install --path circom
- name: Unit Circuit Tests
run: |
npm ci
cd common-files
npm ci
cd ../nightfall-deployer
npm ci
cd ../
npm run unit-test-circuits
client-authentication-test:
env:
AUTHENTICATION_KEY: a3322a85-7222-4713-907b-b569679b2dd9
ENDPOINTS_WHITELISTED: '/commitment/salt\?.*, /contract-address/\w+/?'
NF_SERVICES_TO_START: blockchain,client,deployer,worker
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: '18.19.1'
- name: Start Containers
run: |
./bin/setup-nightfall
./bin/start-nightfall -g -d &> authentication-test.log &disown
- name: Wait for images to be ready
uses: Wandalen/wretry.action@v1.0.36
with:
command: |
docker wait nightfall_3_deployer_1
attempt_limit: 100
attempt_delay: 20000
- name: Debug logs - after image builds
if: always()
run: cat authentication-test.log
- name: Authentication Test - healthcheck OK
run: |
RESULT=$(curl -w "%{http_code}" -o /dev/null --silent http://localhost:8080/healthcheck)
if [ $RESULT != "200"]; then
exit 1
fi
- name: Authentication Test - endpoint whitelisted_1 OK
run: |
RESULT=$(curl -w "%{http_code}" -o /dev/null --silent http://localhost:8080/commitment/salt/?salt=0123456789)
if [ $RESULT != "200"]; then
exit 1
fi
- name: Authentication Test - endpoint whitelisted_2 OK
run: |
RESULT=$(curl -w "%{http_code}" -o /dev/null --silent http://localhost:8080/contract-address/State)
if [ $RESULT != "200"]; then
exit 1
fi
- name: Authentication Test - non-whitelisted endpoint without auth key failure
run: |
RESULT=$(curl -w "%{http_code}" -o /dev/null --silent http://localhost:8080/commitment/)
if [ $RESULT != "401"]; then
exit 1
fi
- name: Authentication Test - non-whitelisted endpoint OK
run: |
RESULT=$(curl -w "%{http_code}" -o /dev/null --silent --header "X-Api-Key: $(echo $AUTHENTICATION_KEY)" http://localhost:8080/commitment/)
if [ $RESULT != "200"]; then
exit 1
fi
- name: Authentication Test - non-whitelisted endpoint with wrong auth key
run: |
RESULT=$(curl -w "%{http_code}" -o /dev/null --silent --header "X-Api-Key: 0123456789" http://localhost:8080/commitment/)
if [ $RESULT != "401"]; then
exit 1
fi
- name: Authentication Test for the NF3 lib
run: |
CLIENT_AUTHENTICATION_KEY=$AUTHENTICATION_KEY npm run test-e2e-nf3lib
- name: Debug logs - after integration test run
if: always()
run: cat authentication-test.log
- name: If integration test failed, shutdown the Containers
if: failure()
run: npm run nightfall-down
- name: If integration test failed, upload logs files as artifacts
if: failure()
uses: actions/upload-artifact@master
with:
name: authentication-test-logs
path: ./authentication-test.log
circuits-test:
env:
CONFIRMATIONS: 1
NF_SERVICES_TO_START: blockchain,client,deployer,mongodb,optimist,rabbitmq,worker
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: '18.19.1'
- name: Start Containers
run: |
./bin/setup-nightfall
./bin/start-nightfall -g -d &> circuit-test.log &disown
- name: Wait for images to be ready
uses: Wandalen/wretry.action@v1.0.36
with:
command: |
docker wait nightfall_3_deployer_1
attempt_limit: 100
attempt_delay: 20000
- name: Debug logs - after image builds
if: always()
run: cat circuit-test.log
- name: Circuits Test
run: |
npm run test-circuits
- name: Debug logs - after integration test run
if: always()
run: cat circuit-test.log
- name: If integration test failed, shutdown the Containers
if: failure()
run: npm run nightfall-down
- name: If integration test failed, upload logs files as artifacts
if: failure()
uses: actions/upload-artifact@master
with:
name: circuit-test-logs
path: ./circuit-test.log
anvil-protocol-test:
env:
CONFIRMATIONS: 1
NF_SERVICES_TO_START: blockchain,client,deployer,mongodb,optimist,rabbitmq,worker
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: '18.19.1'
- name: Start Containers
run: |
./bin/setup-nightfall
./bin/start-nightfall -g -d &> anvil-test.log &disown
- name: Wait for images to be ready
uses: Wandalen/wretry.action@v1.0.36
with:
command: |
docker wait nightfall_3_deployer_1
attempt_limit: 100
attempt_delay: 20000
- name: Debug logs - after image builds
if: always()
run: cat anvil-test.log
- name: Run integration test
run: |
npm run test-e2e-protocol
- name: Debug logs - after integration test run
if: always()
run: cat anvil-test.log
- name: If integration test failed, shutdown the Containers
if: failure()
run: npm run nightfall-down
- name: If integration test failed, upload logs files as artifacts
if: failure()
uses: actions/upload-artifact@master
with:
name: anvil-test-logs
path: ./anvil-test.log
anvil-erc20-test:
env:
CONFIRMATIONS: 1
NF_SERVICES_TO_START: blockchain,client,deployer,mongodb,optimist,rabbitmq,worker
DEPLOY_MOCKED_SANCTIONS_CONTRACT: true
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: '18.19.1'
- name: Start Containers
run: |
./bin/setup-nightfall
./bin/start-nightfall -g -d &> anvil-test.log &disown
- name: Wait for images to be ready
uses: Wandalen/wretry.action@v1.0.36
with:
command: |
docker wait nightfall_3_deployer_1
attempt_limit: 100
attempt_delay: 20000
- name: Debug logs - after image builds
if: always()
run: cat anvil-test.log
- name: Run integration test
run: |
npm run test-erc20-tokens
- name: Debug logs - after integration test run
if: always()
run: |
cat anvil-test.log
- name: If integration test failed, shutdown the Containers
if: failure()
run: npm run nightfall-down
- name: If integration test failed, upload logs files as artifacts
if: failure()
uses: actions/upload-artifact@master
with:
name: anvil-test-logs
path: ./anvil-test.log
anvil-erc721-test:
env:
CONFIRMATIONS: 1
NF_SERVICES_TO_START: blockchain,client,deployer,mongodb,optimist,rabbitmq,worker
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: '18.19.1'
- name: Start Containers
run: |
./bin/setup-nightfall
./bin/start-nightfall -g -d &> anvil-test.log &disown
- name: Wait for images to be ready
uses: Wandalen/wretry.action@v1.0.36
with:
command: |
docker wait nightfall_3_deployer_1
attempt_limit: 100
attempt_delay: 20000
- name: Debug logs - after image builds
if: always()
run: cat anvil-test.log
- name: Run integration test
run: |
npm run test-erc721-tokens
- name: Debug logs - after integration test run
if: always()
run: cat anvil-test.log
- name: If integration test failed, shutdown the Containers
if: failure()
run: npm run nightfall-down
- name: If integration test failed, upload logs files as artifacts
if: failure()
uses: actions/upload-artifact@master
with:
name: anvil-test-logs
path: ./anvil-test.log
anvil-erc1155-test:
env:
CONFIRMATIONS: 1
NF_SERVICES_TO_START: blockchain,client,deployer,mongodb,optimist,rabbitmq,worker
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: '18.19.1'
- name: Start Containers
run: |
./bin/setup-nightfall
./bin/start-nightfall -g -d &> anvil-test.log &disown
- name: Wait for images to be ready
uses: Wandalen/wretry.action@v1.0.36
with:
command: |
docker wait nightfall_3_deployer_1
attempt_limit: 100
attempt_delay: 20000
- name: Debug logs - after image builds
if: always()
run: cat anvil-test.log
- name: Run integration test
run: |
npm run test-erc1155-tokens
- name: Debug logs - after integration test run
if: always()
run: cat anvil-test.log
- name: If integration test failed, shutdown the Containers
if: failure()
run: npm run nightfall-down
- name: If integration test failed, upload logs files as artifacts
if: failure()
uses: actions/upload-artifact@master
with:
name: anvil-test-logs
path: ./anvil-test.log
anvil-tokenisation-l2-test:
env:
CONFIRMATIONS: 1
NF_SERVICES_TO_START: blockchain,client,deployer,mongodb,optimist,rabbitmq,worker
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: '18.19.1'
- name: Start Containers
run: |
./bin/setup-nightfall
./bin/start-nightfall -g -d &> anvil-test.log &disown
- name: Wait for images to be ready
uses: Wandalen/wretry.action@v1.0.36
with:
command: |
docker wait nightfall_3_deployer_1
attempt_limit: 100
attempt_delay: 20000
- name: Debug logs - after image builds
if: always()
run: cat anvil-test.log
- name: Run integration test
run: |
npm run test-l2tokenisation
- name: Debug logs - after integration test run
if: always()
run: cat anvil-test.log
- name: If integration test failed, shutdown the Containers
if: failure()
run: npm run nightfall-down
- name: If integration test failed, upload logs files as artifacts
if: failure()
uses: actions/upload-artifact@master
with:
name: anvil-test-logs
path: ./anvil-test.log
x509-test:
env:
WHITELISTING: enable
CONFIRMATIONS: 1
NF_SERVICES_TO_START: blockchain,client,deployer,mongodb,optimist,rabbitmq,worker
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: '18.19.1'
- name: Start Containers
run: |
./bin/setup-nightfall
./bin/start-nightfall -g -d &> x509-test.log &disown
- name: Wait for images to be ready
uses: Wandalen/wretry.action@v1.0.36
with:
command: |
docker wait nightfall_3_deployer_1
attempt_limit: 100
attempt_delay: 20000
- name: Debug logs - after image builds
if: always()
run: cat x509-test.log
- name: Run integration test
run: npm run test-x509
- name: Debug logs - after integration test run
if: always()
run: cat x509-test.log
- name: If integration test failed, shutdown the Containers
if: failure()
run: docker-compose -f docker-compose.yml -f docker-compose.anvil.yml down -v
- name: If integration test failed, upload logs files as artifacts
if: failure()
uses: actions/upload-artifact@master
with:
name: x509-test-logs
path: ./x509-test.log
administrator-test:
runs-on: ubuntu-20.04
env:
CONFIRMATIONS: 1
NF_SERVICES_TO_START: administrator,blockchain,client,deployer,mongodb,optimist,rabbitmq,worker
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: '18.19.1'
- name: Start Containers
run: |
./bin/setup-nightfall
./bin/start-nightfall -g -d &> administrator-test.log &disown
- name: Wait for images to be ready
uses: Wandalen/wretry.action@v1.0.36
with:
command: |
docker wait nightfall_3_deployer_1
attempt_limit: 100
attempt_delay: 20000
- name: Debug logs - after image builds
if: always()
run: cat administrator-test.log
- name: Run integration test
run: |
npm run test-administrator
- name: Debug logs - after integration test run
if: always()
run: cat administrator-test.log
- name: If integration test failed, shutdown the Containers
if: failure()
run: npm run nightfall-down
- name: If integration test failed, upload logs files as artifacts
if: failure()
uses: actions/upload-artifact@master
with:
name: administrator-test-logs
path: ./administrator-test.log
optimist-sync-test:
runs-on: ubuntu-22.04
env:
CONFIRMATIONS: 1
NF_SERVICES_TO_START: blockchain,client,deployer,mongodb,optimist,rabbitmq,worker
steps:
- uses: actions/checkout@master
- uses: actions/setup-node@v3
with:
node-version: '18.19.1'
- name: Start Containers
run: |
./bin/setup-nightfall
./bin/start-nightfall -g -d &> optimist-sync-test.log &disown
- name: Wait for images to be ready
uses: Wandalen/wretry.action@v1.0.36
with:
command: |
docker wait nightfall_3_deployer_1
attempt_limit: 100
attempt_delay: 20000
- name: Debug logs - after image builds
if: always()
run: cat optimist-sync-test.log
- name: Run optimist sync test
run: |
npm run test-optimist-sync
- name: Debug logs - after optimist sync test run
if: always()
run: cat optimist-sync-test.log
- name: If optimist sync test failed, shutdown the Containers
if: failure()
run: npm run nightfall-down
- name: If optimist sync test failed, upload logs files as artifacts
if: failure()
uses: actions/upload-artifact@master
with:
name: optimist-sync-test-logs
path: ./optimist-sync-test.log
adversary-test:
env:
CONFIRMATIONS: 1
NF_SERVICES_TO_START: blockchain,client,deployer,mongodb,optimist,rabbitmq,worker,lazy-optimist,bad-client
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: '18.19.1'
- name: Build adversary
run: npm run build-adversary
- name: Start Containers
run: |
./bin/setup-nightfall
./bin/start-nightfall -g -d -a &> adversary-test.log &disown
- name: Wait for images to be ready
uses: Wandalen/wretry.action@v1.0.36
with:
command: |
docker wait nightfall_3_deployer_1
attempt_limit: 100
attempt_delay: 20000
- name: debug logs - after container startup
if: always()
run: cat adversary-test.log
- name: Run adversary test
run: |
VERBOSE=true npm run test-adversary
- name: debug logs - after integration test run
if: always()
run: cat adversary-test.log
- name: If adversary test failed, shutdown the Containers
if: failure()
run: |
npm run nightfall-down
- name: If integration test failed, upload logs files as artifacts
if: failure()
uses: actions/upload-artifact@v3
with:
name: adversary-test-logs
path: ./adversary-test.log
ping-pong-test:
env:
CONFIRMATIONS: 1
NF_SERVICES_TO_START: blockchain,deployer,worker
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: '18.19.1'
- name: Build adversary
run: npm run build-adversary
- name: Start Containers
run: |
./bin/setup-nightfall
./bin/start-multiproposer-test-env -g &> ping-pong-test.log &disown
- name: Wait for images to be ready
uses: Wandalen/wretry.action@v1.0.36
with:
command: |
docker wait nightfall_3_deployer_1
attempt_limit: 100
attempt_delay: 20000
- name: Debug logs - after image builds
if: always()
run: cat ping-pong-test.log
- name: 'Check client1 liveliness'
uses: Wandalen/wretry.action@v1.0.36
with:
command: |
curl -i http://localhost:8083/healthcheck
attempt_limit: 10
attempt_delay: 30000
- name: 'Check client2 liveliness'
uses: Wandalen/wretry.action@v1.0.36
with:
command: |
curl -i http://localhost:8086/healthcheck
attempt_limit: 10
attempt_delay: 30000
- name: Run ping-pong test
run: |
npm ci
docker wait nightfall_3_deployer_1
npm run ping-pong
- name: If integration test failed, shutdown the Containers
if: failure()
run: |
npm run nightfall-down
- name: debug logs - after integration test run
if: always()
run: cat ping-pong-test.log
- name: If integration test failed, upload logs files as artifacts
if: failure()
uses: actions/upload-artifact@master
with:
name: ping-pong-test-logs
path: ./ping-pong-test.log
test-gas:
env:
MAX_BLOCK_SIZE: 25000
CONFIRMATIONS: 1
NF_SERVICES_TO_START: blockchain,client,deployer,mongodb,optimist,rabbitmq,worker
name: check gas transactions per block
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: '18.19.1'
- name: Start Containers with anvil
run: |
./bin/setup-nightfall
./bin/start-nightfall -g -d &> test-gas.log &disown
- name: Wait for images to be ready
uses: Wandalen/wretry.action@v1.0.36
with:
command: |
docker wait nightfall_3_deployer_1
attempt_limit: 100
attempt_delay: 20000
- name: Debug logs - after container startup
if: always()
run: cat test-gas.log
- name: Run tx-gas.mjs test suites
run: |
VERBOSE=true npm run test-gas
- name: Debug logs - after integration test run
if: always()
run: cat test-gas.log
- name: If integration test failed, shutdown the Containers
if: failure()
run: npm run nightfall-down
- name: If integration test failed, upload logs files as artifacts
if: failure()
uses: actions/upload-artifact@master
with:
name: test-gas-logs
path: ./test-gas.log
test-apps:
name: check apps for liveliness
runs-on: ubuntu-20.04
env:
NF_SERVICES_TO_START: blockchain,deployer,optimist,worker
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: '18.19.1'
- name: Start Containers with anvil
run: |
./bin/setup-nightfall
./bin/start-nightfall -g -d &> test-apps.log &disown
- name: Wait for images to be ready
uses: Wandalen/wretry.action@v1.0.36
with:
command: |
docker wait nightfall_3_deployer_1
attempt_limit: 100
attempt_delay: 20000
- name: Debug logs - after container startup
if: always()
run: cat test-apps.log
- name: Boot up the apps
run: |
./bin/start-apps &> test-proposer.log &disown
- name: 'Check proposer liveliness'
uses: Wandalen/wretry.action@v1.0.36
with:
command: |
curl -i http://localhost:8092/healthcheck
attempt_limit: 10
attempt_delay: 30000
- name: 'Check challenger liveliness'
uses: Wandalen/wretry.action@v1.0.36
with:
command: |
curl -i http://localhost:8192/healthcheck
attempt_limit: 10
attempt_delay: 30000
- name: Debug logs - after integration test run
if: always()
run: |
cat test-apps.log
cat test-proposer.log
- name: If integration test failed, shutdown the Containers
if: failure()
run: npm run nightfall-down
- name: If integration test failed, upload logs files as artifacts
if: failure()
uses: actions/upload-artifact@master
with:
name: test-apps-logs
path: |
./test-apps.log
./test-proposer.log
periodic-payment-test:
env:
CONFIRMATIONS: 1
NF_SERVICES_TO_START: blockchain,client,deployer,mongodb,optimist,rabbitmq,worker
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: '18.19.1'
- name: Start Containers
run: |
./bin/setup-nightfall
./bin/start-nightfall -g -d &> periodic-payment-test.log &disown
- name: Wait for images to be ready
uses: Wandalen/wretry.action@v1.0.36
with:
command: |
docker wait nightfall_3_deployer_1
attempt_limit: 100
attempt_delay: 20000
- name: Debug logs - after image builds
if: always()
run: cat periodic-payment-test.log
- name: Run integration test
run: |
npm run test-periodic-payment
- name: Debug logs - after integration test run
if: always()
run: cat periodic-payment-test.log
- name: If integration test failed, shutdown the Containers
if: failure()
run: npm run nightfall-down
- name: If integration test failed, upload logs files as artifacts
if: failure()
uses: actions/upload-artifact@master
with:
name: periodic-payment-test-logs
path: ./periodic-payment-test.log