diff --git a/pages/docs/vota-devops/amaci.mdx b/pages/docs/vota-devops/amaci.mdx index a9a400e..0be956a 100644 --- a/pages/docs/vota-devops/amaci.mdx +++ b/pages/docs/vota-devops/amaci.mdx @@ -1,96 +1,104 @@ --- -title: 'Run aMACI Operator Service on `vota-sf` Testnet · Dora Vota DevOps Guide' -desc: 'This guide provides instructions on running a Dora Vota full node and setting up as a validator. It covers hardware requirements, port and chain configurations, and the process of starting a node and registering as a validator. Ensure your environment meets all requirements to operate Dora Vota nodes successfully.' +title: 'Run aMACI Operator Service on Dora Vota Mainnet (`vota-ash`) · Dora Vota DevOps Guide' +desc: 'The aMACI operator service is a unique feature offered by the Dora Factory Anonymous MACI protocol (aMACI). Running an aMACI operator means that you will run and tally an aMACI round for a community, and validate the round with zero-knowledge proofs.' --- import { Steps, Callout, Tabs } from 'nextra/components' -# How to Run aMACI Operator Service on `vota-sf` Testnet +# How to Run aMACI Operator Service on Dora Vota Mainnet (`vota-ash`) + +The aMACI operator service is a unique feature offered by the Dora Factory Anonymous MACI protocol (aMACI). Running an aMACI operator means that you will run and tally an aMACI round for a community, and validate the round with zero-knowledge proofs. + +The first batch of aMACI opearators will be Dora Vota mainnet validators. From the protocol’s [frontend](https://vota.dorafactory.org/), users will be able to create aMACI rounds and select an aMACI operator. ## Requirements ### Hardware requirements +#### Basic configuration + +- CPU: 4 cores +- Memory: 8 GB +- Disk: 256 GB + +#### Better configuration + - CPU: 8 cores - Memory: 16 GB -- Disk: 100 GB +- Disk: 512 GB ### Software requirements -- [Node.js](https://nodejs.org/) version: >= 20 -- [`dorad`](/docs/vota-dev/dorad) version: 0.4.0 +- [Node.js](https://nodejs.org/) version >= 20 +- [`dorad`](https://docs.dorafactory.org/docs/vota-dev/dorad) version = 0.4.0 ## Create an aMACI operator account - Make sure you have backed up the **MNEMONIC** of this account which is the - only method to recover your wallet. Also, it will be used when **initiating - aMACI operator service**. + We strongly recommend you create a new account which will be used later to + register as an aMACI operator. It is prohibited to use the validator’s owner + address as the aMACI operator address, because it may cause the aMACI operator + to fail to process transactions. -This account will be used later to register as an aMACI operator. - ```sh -export ACCOUNT_NAME=maci-operator -dorad keys add $ACCOUNT_NAME +export AMACI_OPERATOR=amaci-operator +dorad keys add $AMACI_OPERATOR ``` +To initiate the operator, please prepare **1,000 DORA** for your operator account to support the service, and monitor the balance of the account in a timely manner. Insufficient balance may affect the operation of the aMACI operator service. + + + Please make sure you have backed up the **MNEMONIC** of this account which is + the only method to recover it. Also, it will be used when **initiating aMACI + operator service**. + + ## Register an aMACI operator on `vota-sf` - -### Stake 20 DORA to register as aMACI operator with your aMACI operator account: +Set up your operator with the owner address of your validator on the `vota-ash` network. + +- The owner address is the address starting with `dora` prefix used to create your validator. Taking the [DoraFactory validator](https://doravota.explorers.guru/validator/doravaloper1gerunjnh6umehq6zm0gphrc87u37veuv5y9dkw) as an example, its owner address is `dora1gerunjnh6umehq6zm0gphrc87u37veuv8jqmq3`. Please use your validator owner address here to set up your aMACI operator. +- This is the address of the aMACI mainnet contract: `dora1smg5qp5trjdkcekdjssqpjehdjf6n4cjss0clyvqcud3t3u3948s8rmgg4`. ```sh -dorad tx wasm execute dora17p9rzwnnfxcjp32un9ug7yhhzgtkhvl9jfksztgw5uh69wac2pgsnah3h8 '{"register": {} }' \ ---from maci-operator \ +dorad tx wasm execute dora1smg5qp5trjdkcekdjssqpjehdjf6n4cjss0clyvqcud3t3u3948s8rmgg4 '{"set_maci_operator": { "operator": "" } }' \ +--from "" \ --amount "20000000000000000000peaka" \ ---chain-id "vota-sf" \ +--chain-id "vota-ash" \ --gas-prices 100000000000peaka \ --gas auto \ --gas-adjustment 1.5 \ ---node https://vota-sf-rpc.dorafactory.org:443 \ +--node https://vota-rpc.dorafactory.org:443 \ -y ``` -### Query whether your aMACI operator has been created successfully +## Build aMACI operator ```sh -dorad query wasm contract-state smart dora17p9rzwnnfxcjp32un9ug7yhhzgtkhvl9jfksztgw5uh69wac2pgsnah3h8 '{ "is_maci_operator": { "address": } }' --node https://vota-sf-rpc.dorafactory.org:443 -``` - -If terminal shows `true`, it means the aMACI operator creation is successful. - -```sh -data: true -``` - - - -## Build aMACI operator service - -```sh -git clone https://github.com/DoraFactory/maci-operator && cd maci-operator +git clone https://github.com/DoraFactory/amaci-operator.git && cd amaci-operator npm install npm run build ``` -## Initiate aMACI operator service +## Configure aMACI operator service + + +### Configure environment variables - Before configuring environment variables, please make sure you have navigated - to the `/maci-operator` directory. + Please make sure you have navigated to the `/amaci-operator` directory. - -### Create your own environment variables file +#### Step 1: Create your own environment variables file ```sh cp .env.template .env ``` -### Generate your coordinator public and private key +#### Step 2: Generate your coordinator public and private key Please back up the generated public and private keys. @@ -100,17 +108,54 @@ cp .env.template .env node dist/gen-key.js ``` -Next, enter the public key into our [coordinator public key collection form](https://docs.google.com/spreadsheets/d/1hNlK5qBGrqgZ6UDaLVThjfuvMlX4CsznzWmWCm0QRl0/edit?usp=sharing). For example, the format of the public key: +For example, the format of the public key: ```sh X: 16429304017412205675820866000313944904446810339972042319485432996531286181952 Y: 5572999208344294573488778747734990567557173306854827005273539480127951622273 ``` -### Config your MNEMONIC and coordinator private key +#### Step 3: Configure your MNEMONIC and coordinator private key of aMACI operator -- Enter the mnemonic of the previously generated **aMACI operator account** into the `MNEMONIC` field in your `.env` file. +- Enter the **mnemonic** of the previously generated `aMACI operator account` into the `MNEMONIC` field in your `.env` file. - Enter the **coordinator private key** generated in the previous step into the `COORDINATOR_PRI_KEY` field in your `.env` file. +- Enter the `rpc url`(It ensures that you can use a stable and continuous RPC services, it is recommended that you use your validator RPC or stable full node RPC) into the `RPC_ENDPOINT` field in your `.env` file. + +### Set your aMACI operator information + +#### Step 1: Set your operator identity by your operator address + + + We will use the **Keybase ID** as your operator `identity` here. The Keybase + ID is a 16-digit string that is generated with a + [keybase.io](https://keybase.io/) account. It’s a cryptographically secure + method of verifying your identity across multiple online networks. The Keybase + API allows us to retrieve your Keybase avatar and other public info. + + +```sh +dorad tx wasm execute dora1smg5qp5trjdkcekdjssqpjehdjf6n4cjss0clyvqcud3t3u3948s8rmgg4 '{"set_maci_operator_identity": { "identity": "" } }' \ +--from $AMACI_OPERATOR \ +--chain-id "vota-ash" \ +--gas-prices 100000000000peaka \ +--gas auto \ +--gas-adjustment 1.5 \ +--node https://vota-rpc.dorafactory.org:443 \ +-y +``` + +#### Step 2: Set your operator public key by your operator address + +```sh +dorad tx wasm execute dora1smg5qp5trjdkcekdjssqpjehdjf6n4cjss0clyvqcud3t3u3948s8rmgg4 '{"set_maci_operator_pubkey": { "pubkey": { "x": "", "y": "" }} }' \ +--from $AMACI_OPERATOR \ +--chain-id "vota-ash" \ +--gas-prices 100000000000peaka \ +--gas auto \ +--gas-adjustment 1.5 \ +--node https://vota-rpc.dorafactory.org:443 \ +-y +``` ### Initiate aMACI operator service @@ -129,13 +174,13 @@ Create the definition file in `/etc/systemd/system/amaci.service`. ```sh [Unit] -Description=A-MACI-operator-service +Description=aMACI-operator-service After=network-online.target [Service] User= -WorkingDirectory= -EnvironmentFile=/.env +WorkingDirectory= +EnvironmentFile=/.env ExecStart=/usr/bin/node dist/index.js RestartSec=10 Restart=on-failure @@ -145,12 +190,12 @@ LimitNOFILE=655350 WantedBy=multi-user.target ``` -- ``: Enter the user (likely your username or root, unless you created a user specifically for A-MACI operator service). -- ``: Enter the path to the `maci-operator` directory, which is likely `/home/ubuntu/maci-operator`. +- ``: Enter the user (likely your username or root, unless you created a user specifically for aMACI operator service). +- ``: Enter the path to the `amaci-operator` directory, which is likely `/home/ubuntu/amaci-operator`. ### Run the program upon startup -After registering amaci as a system service, you can set the program to run upon startup. +After registering `amaci` as a system service, you can set the program to run upon startup. ```sh systemctl daemon-reload @@ -164,19 +209,36 @@ sudo systemctl start amaci sudo journalctl -u amaci -f --no-hostname -o cat ``` -If it started successfully, you will see many similar logs like this: +If the service started successfully, the log will output your aMACI operator’s information and download some necessary zkey files. Like this: ```sh +Started A-MACI-operator-service. +Init +Coordinator public key: +X: 11043362857411207101295473092701542792077153813505230615881421921648274746246 +Y: 3431336307758495332528815819065155244352578928861293932308944643929528727389 +Vota address: +dora1nddnr2fjcupt3eher59mrp0cmwn52e4c98y4k5 +Start to download zkey: +download zkey: 2-1-1-5_v2 +https://vota-zkey.s3.ap-southeast-1.amazonaws.com/amaci_2-1-1-5_v2_zkeys.tar.gz +download zkey: 4-2-2-25_v2 +https://vota-zkey.s3.ap-southeast-1.amazonaws.com/amaci_4-2-2-25_v2_zkeys.tar.gz [DO]: inspect +=========== +["93"] +[ + '11043362857411207101295473092701542792077153813505230615881421921648274746246', + '3431336307758495332528815819065155244352578928861293932308944643929528727389' +] +[] +=========== [TASK inspect] find rounds count: 0/0 -[DO]: inspect -[TASK inspect] find rounds count: 0/0 -[DO]: inspect ``` ## What is the aMACI operator service doing? -- The aMACI operator service periodically checks aMACI rounds that need to be processed on the `vota-sf` testnet. -- The aMACI operator service logs processed aMACI round information and other data in the `/maci-operator/work` directory. +- The aMACI operator service periodically checks aMACI rounds that need to be processed on the `vota-ash` mainnet. +- The aMACI operator service logs processed aMACI round information and other data in the `/amaci-operator/work` directory.