The DKG Ceremonies API is a Go application that provides an API for running DKG ceremonies using the SSV (Secret Shared Validator) protocol. The application is designed to be run as a service and provides endpoints for running DKG ceremonies. Once the ceremony is complete, the application generates the necessary files for the validators to participate in the SSV protocol.
This service makes it easier for non tech savvy users to run DKG ceremonies and participate in the SSV protocol without having to deal with the complexities of running the ceremony manually using the command line.
This documentation provides a comprehensive guide on how to run the DKG Ceremonies API application. Follow the steps below to set up and run the application.
- Ensure you have Go installed. The required version is specified in the
Deploy/Makefile
. - Ensure you have
make
installed.
The relevant files and directories for running the application are as follows:
├── bruno-dkg-client-api
├── Deploy
│ ├── Caddyfile
│ ├── dkg-api.service
│ ├── Makefile
├── initiator_logs
├── pkgs
│ └── wire
├── routes
│ └── dkg
├── servers
│ └── docker
├── tmp
└── utils
First, install the required version of Go. You can do this using the Makefile
:
cd Deploy
make install_go
Download the binary and make it executable:
make all_ssv_dkg
Navigate to the Deploy
directory and run the following command to build the DKG API binary:
make all_dkg_api
This command will:
- Install Go dependencies.
- Build the binary and place it in the
./bin
directory.
The service configuration is defined in the dkg-api.service file. Ensure the paths and user/group settings are correct for your environment.
To start the service, you need to copy the dkg-api.service
file to the systemd directory and enable it:
sudo cp Deploy/dkg-api.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable dkg-api.service
sudo systemctl start dkg-api.service
Check the status of the service to ensure it is running correctly:
sudo systemctl status dkg-api.service
The Caddy server configuration is defined in the Caddyfile
. Ensure the configuration is correct for your environment.
Remember to replace the placeholders with the actual values.
To start the Caddy server, run the following command:
if you have caddy installed on your machine, you can run the following command in the Deploy directory:
caddy reload --config Caddyfile
if you can follow isntructions on how to install caddy on your machine, you can follow the instructions on the caddy website
You can test the API endpoints using tools like curl
or Postman. The main endpoints are:
POST /api/run-dkg
- Runs the DKG ceremony.GET /api/get-file/{sessionId}
- Retrieves generated files.GET /api/health
- Health check endpoint.
If you have the Bruno api client, you can load the collection provided in bruno-dkg-client-api and test the endpoints.
Example curl
command to run the DKG ceremony:
curl -X POST \
-H "Content-Type: application/json" \
-d '{
"validators": 10,
"operatorIds": [
11,
21,
24,
29
],
"operatorsInfo": [
{
"id": 11,
"public_key": "LS0tLS1CRUdJTiBSU0EgUFVCTElDIEtFWS0tLS0tCk1JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBN2Z4NmJNUjJIbDYrcWx5ekxVNC8KeElINDRzaS9haEhzZGFrMkwxclFWWi9nRVV5cFI3Qm1ZbGJYeXhNQVlhajBFaWt0dEtLVUY1ZlRodlBSMmRJUQpuQkZkVGppR3NsMVBGTXNLZWQrRjZQSmxpMmpRZHpyUTBTcElZYWkzVkRFYXRiY3BmUXdaYUpKOHhpdVB1TTJjClJYQjBwMUpSWE53U3phR2NLZmVseGtOcXRpS2wyZ0pnQWlFRkFOMEUzblpHeHBnRURxZUxyYzFNWXd0Z2dSWloKcVI2dGVyT2FlZzB6MnMzZnJPOTNmUnlyUHA4MU9XKzZOSnZBdit5ZE4yRmtlYjVPT1BNZDVRU2JTcFN2Y2ZlSwp1VVZxaTVkRlJXYzBkdmkydWtYaWVLSG1kZzluQTdVSVdienNxdm5KT0pRMkFtTzd3WE16WnE5dEFQSy9DcE1YCjBRSURBUUFCCi0tLS0tRU5EIFJTQSBQVUJMSUMgS0VZLS0tLS0K",
"ip": "https://18.130.205.68:3030"
},
{
"id": 21,
"public_key": "LS0tLS1CRUdJTiBSU0EgUFVCTElDIEtFWS0tLS0tCk1JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBcC82UFVpdG41dHN0d2wvVVIxRGIKV2N6c3FJeDBlNGlzc3JDVC9LUFpHUXBlczZNaDN3YjVOb1hRcWM4NXpKK1UvOGZsYkpvck02bGV6M0Z2REJzcgprTFd3QldOSDFOT3BlRG1mMFk1N1gvaWdxNFBQUEZxNlN5bUpmUHlvT3M4YjJDYzk4Tlc2d0hDZ3kxODd1WTc1Ci94MHpLc3J3QjhIQnpLSnpaeDdvZ1EvL1hxU1ovZHhQYU5rbjBzajUzMnlDZHlJTGV2OWppVmdpRzZVLytmcG0KK1JjaHdEa2xxMlpCVjByWXgvZGRBbUptZXZlVFRKUEVCcEJld1FNMThtUEFPaVlGeG9qdmYzTVpBeVRMMFhkNQpjZkVqYWxQNzBCLytueGlKS0RRaE9sdkpMYmdsaU5PendHVnI1V1F0RjhaTGhvZDNpYWo3YkxsVE1hZllMVmZwCmJRSURBUUFCCi0tLS0tRU5EIFJTQSBQVUJMSUMgS0VZLS0tLS0K",
"ip": "https://holesky-ssv-lido-dkg.ipetkov.eu:443"
},
{
"id": 24,
"public_key": "LS0tLS1CRUdJTiBSU0EgUFVCTElDIEtFWS0tLS0tCk1JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBc2pPeTZqaGI5V3JER2lWcnJXLysKVE9nRmRDVE4rcjBJSFdWSzlGb2JhSFNobG5XV21XKzdMQlNlUW55NTc1Y0JSSG5iUVpxa1ZXTzZTOUkxV3hiWgpCb1g1fjFob041M01jVDNuUVVxS2d2SVV5d3NLTW50ZmwrTnF4bkJHZ09tcDQ3RTlmVnpaVk5SdlROQys5dnVvCnNxcFV5SzhNQXJTT01IdFlmVnM2eXFYSXhwdUs2ZVFpOFJGcGpPcmU0Y0diTHZaNy9wT3ZqMytDdDZFYkNBQkEKQWVNeUoxdlQ3WHJmS28xSUxYVFZaL3V1b3ltV1pkd3hEbFFCTE1ZdHRxaE03amh4SHpkOEJLVVB5L1BkR1lLWApnRWVSelFSRGFLVUIwWHc0d0R2WCtjQ2JQUU02SkcxUVgyeE5GQ251cUZFcVV0eWVDbU9NT0NzcVJEYU0wMkZsCkpRSURBUUFCCi0tLS0tRU5EIFJTQSBQVUJMSUMgS0VZLS0tLS0K",
"ip": "https://ssv-dkg.holesky.blockshard.io:3030"
},
{
"id": 29,
"public_key": "LS0tLS1CRUdJTiBSU0EgUFVCTElDIEtFWS0tLS0tCk1JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBenB6b0JGVEd3MmFNZWhONFZJL2sKSHdRNW5vb3YzWkoxWkU1NTFRazZydVprazlabDJuc081cmpQaU9RbWZQVWFIU0RvYlMraTU0dzZGMGtlNG9xVgpXRkpkbzVSVEl2Z1RCM2JhbkdBczk3VFl3SWIwTWtFQW1HamF5YkFieGtyNllzU2hLUkZIcnJjRnBMai94TmlqCnFuNDAyMjNBNUV2TkNUUVN2VWQxQU1kRkNDdlMvY0IvTldBL0FzczJmSXJIQWhKT2l6aHhuMHJTTXN1am40Rm4KMXZYL3VvR0FFaTQ1dGlWaWJlQlUxNFZuQXRLdlFYOWpqbFAvSjNVYmNxV3NaVzZ4bFlsdGozSU05OHJvTFU4bApRbjFUSE9sSHBYRVpTQmpYK0U1Ti9ibWEvUTN6SlJ4UkNsci8yanYrUXl6a2N0T3JadjR6OWVzNDFydDRxTm1vCllRSURBUUFCCi0tLS0tRU5EIFJTQSBQVUJMSUMgS0VZLS0tLS0K",
"ip": "https://57.128.65.88:3030"
}
],
"ownerAddr": "0x81592c3de184a3e2c0dcb5a261bc107bfa91f494",
"nonce": 4,
"withdrawAddr": "0xa1a66cc5d309f19fb2fda2b7601b223053d0f7f4",
"network": "holesky"
}' \
http://localhost:8090/api/run-dkg
And that is it! You have successfully set up and run the DKG Ceremonies API application. If you encounter any issues, please open an issue on here.