Research prototype for the paper Enforcing Corporate Governance Controls With Cloud-Based Services.
- Go HTTP server exposing ICA workflow operations
- Go CLI for bootstrapping demo identities and exercising employee/director/auditor phases
- ICA state machine with:
- employee, director, and auditor phases
- per-phase tag gating
- layered phase-tag evolution
- operation/phase-bound tag integrity checks on workflow tags
- chained seals for accountability
- Two backend modes:
- standalone mode with in-memory repository and key manager
- external mode with the FoundationDB key-value store and the OpenBao key management service
- Go toolchain
- C compiler toolchain for cgo builds, such as
gccorclang - FoundationDB client
7.3.77installed on the host - Docker and Docker Compose when running the external services locally
Build the server, CLI client, and benchmark runner into ./bin:
mkdir -p bin
go build -o ./bin/ica-server ./cmd/ica-server
go build -o ./bin/ica ./cmd/ica
go build -o ./bin/ica-bench ./cmd/ica-bench./bin/ica-server --standalonedocker compose up --buildThis starts:
app: the Go ICA server onhttp://localhost:8080foundationdb: FoundationDB onlocalhost:4500openbao: OpenBao dev server onhttp://localhost:8200
In another terminal:
./bin/ica bootstrap-demo
# without director delegation to vice-director
./bin/ica create-operation x1 op-1 '{"amount":100}'
./bin/ica phase x1 op-1 employee start ''
./bin/ica phase x1 op-1 employee write '{"report":"ok"}'
./bin/ica phase x1 op-1 employee complete ''
./bin/ica phase dX op-1 director start ''
./bin/ica phase dX op-1 director write '{"report":"approved"}'
./bin/ica phase dX op-1 director complete ''
./bin/ica phase a1 op-1 auditor start ''
./bin/ica phase a1 op-1 auditor write '{"report":"verified"}'
./bin/ica phase a1 op-1 auditor complete ''
./bin/ica get-operation a1 op-1
./bin/ica get-operation-events a1 op-1
# with director delegation to vice-director
./bin/ica delegation dX X activate
./bin/ica create-operation x2 op-2 '{"amount":200}'
./bin/ica phase x2 op-2 employee start ''
./bin/ica phase x2 op-2 employee write '{"report":"ok"}'
./bin/ica phase x2 op-2 employee complete ''
./bin/ica phase vX op-2 director start ''
./bin/ica phase vX op-2 director write '{"report":"approved-by-vice"}'
./bin/ica phase vX op-2 director complete ''
./bin/ica delegation dX X deactivatego test ./...To include the integration tests that use the FoundationDB key-value store and the OpenBao key management service:
export FOUNDATIONDB_CLUSTER_FILE="$PWD/test/foundationdb/fdb.cluster"
export OPENBAO_ADDR='http://127.0.0.1:8200'
export OPENBAO_TOKEN='root'
go test ./...Use the dedicated benchmark harness against an already-running server.
Standalone example:
./bin/ica-server --standalone --enable-op-deletion
./bin/ica-bench --backend standalone --output-dir bench-results/standaloneExternal-backend example:
ICA_ENABLE_OP_DELETION=true docker compose up --build
./bin/ica-bench --backend external --output-dir bench-results/externalThe benchmark runner:
- warms up each case before measuring
- measures isolated workflow steps
- runs 1000 timed requests per case/concurrency point by default
- deletes benchmark-generated operations after each workflow step
- sweeps concurrency levels
1,2,4,8by default - writes raw per-request timings to
raw.csv - writes aggregated summaries and environment metadata to
summary.json
Useful flags:
./bin/ica-bench --help
./bin/ica-bench --smoke
./bin/ica-bench --requests 1000 --concurrency 1,2,4,8Generate figures from a benchmark summary:
python3 scripts/plot_benchmark_figures.py bench-results/standalone/summary.jsonBy default, output goes to <summary-dir>/figures; override it with
--output-dir:
python3 scripts/plot_benchmark_figures.py bench-results/standalone/summary.json \
--output-dir bench-results/standalone/figuresOutputs include:
throughput_by_concurrency.pdfp95_latency_by_concurrency.pdfmean_latency_by_concurrency.pdfprocess_mean_latency_c<N>.pdfprocess_p95_latency_c<N>.pdfprocess_throughput_c<N>.pdf