---
# System prepended metadata

title: Deploy Andromeda

---

# Deploy Andromeda

## Operator
### Environment Setup
- Clone project từ branch cần chạy: 
    - `git clone -b L2AMM-73-Operator-synchronization_test git@github.com:KyberNetwork/Andromeda-AMM-Operator.git`

- Libs install:
    - `sudo apt install build-essential libssl-dev pkg-config libpq-dev`

- Install docker:
    ```
    sudo apt-get update && 
    sudo apt-get remove docker docker-engine docker.io && 
    sudo apt install docker.io && 
    sudo systemctl start docker && 
    sudo systemctl enable docker && 
    docker --version
    ```

- Install docker-compose:
    ```
    sudo curl -L https://github.com/docker/compose/releases/download/1.27.4/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose && 
    sudo chmod +x /usr/local/bin/docker-compose && 
    docker-compose --version
    ```

- Set permission for docker:
    ```
    sudo gpasswd -a $USER docker &&
    newgrp docker
    ```
- Set permission for Postgres log folder:
    `chmod -R 777 volumes/postgres/log/`

- Install Rust & Diesel:
    ```
    curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh && 
    source $HOME/.cargo/env && 
    cargo install diesel_cli --no-default-features --features postgres
    ```

- Thay đổi các evironment variable trong dev.env file [here](https://gist.github.com/devnmhoang/3fd9c53de5b71d394fc81c4acddafc40) cho phù hợp và chép đè vào env/dev.env của project.

### Các evironment variable trong dev.env cần phải thay cho từng operator
```
- PROVER_SERVER_URL: luôn là <IP_OPERATOR_1:8088> của Prover data chạy trên Operator 1 (Ex: http://10.148.0.140:8088)
- OPERATOR_EDDSA_PRIVATE_KEY: EDDSA private key của operator
- OPERATOR_EDDSA_PUB_KEY: EDDSA pub key của operator
- CONTRACT_ADDR: Smart contract address dùng chung toàn hệ thống. Phải có 0x phía trước
- OPERATOR_PRIVATE_KEY: ETH private key dùng để sign và gửi tx lên L1
- OPERATOR_COMMIT_ETH_ADDRESS: ETH address
- ETH_IS_ENABLED: Cho phép gửi Tx lên L1
- SIMULATE_SEND_RECEIVE_ETHEREUM: Giá lập Tx luôn được gửi thành công
- MAX_BLOCKS_IN_BATCH: Số block trong 1 batch
- MAX_OPERATIONS_IN_BLOCK: Số operation trong 1 block
- MAX_TXS_IN_BLOCK: Số tx trong 1 block
- BLOCK_TIME_MS: Thời gian tạo 1 block mới
- PROVER_BLOCK_QUEUE_WAIT_TIMEOUT: Thời gian chờ 1 proof hoàn thành
```
Thông tin về key tương ứng cho từng operator được lưu ở file này [Keys](https://gist.github.com/devnmhoang/e9563cdd273e57010c0b519e13c2b481)
    - `OPERATOR_EDDSA_PRIVATE_KEY` là `EDDSA private key`. Lưu ý không có `0x` phía trước
    - `OPERATOR_EDDSA_PUB_KEY` là `EDDSA public key`. Lưu ý không có `0x` phía trước
    - `OPERATOR_PRIVATE_KEY` là `ETH private key`. Lưu ý không có `0x` phía trước
    - `OPERATOR_COMMIT_ETH_ADDRESS` là `ETH address`. Phải có 0x phía trước
    
    
#### Chú ý
- Đối với operator 1 thi 
    `ETH_IS_ENABLED`=true
    `SIMULATE_SEND_RECEIVE_ETHEREUM`=false
- Đối với các operator khác thì 
    `ETH_IS_ENABLED`=false
    `SIMULATE_SEND_RECEIVE_ETHEREUM`=true
- Hiện tại `OPERATOR_URL_WHITELIST` sẽ chứa các url của các operator được cho phép tham gia vào quá trình consensus. Cần thêm vào sau khi biết IP của các operator. Lưu ý là thứ tự URL phải theo thứ tự từ operator 1 đến 21 để tương ứng với `OPERATOR_PUBKEY_WHITELIST`
    - Ex: `OPERATOR_URL_WHITELIST=http://0.0.0.0:3001,http://0.0.0.0:3002,http://0.0.0.0:3003,http://0.0.0.0:3004`

### Để chạy 1 stress operator (Hiện tại chỉ dành cho Operator 1)
- Chạy postgres docker:
    - `make db-init`
- Chờ tầm 20s để docker khởi động và chạy tiếp lệnh sau
- Tạo DB và chạy migration:
    - `make db-setup`
- Bắt đầu chạy operator bằng lệnh:
    - `make run-stress-test DB=... STRESS_TEST_SCENARIO=... NUMBER_USERS=... TXS_PER_BLOCK=... BLOCKS_PER_BATCH=... BLOCK_TIME=... FUNDING_ACC=... L2_SC_ADDR=...`
        - `DB`: loại DB sử dụng (postgres/memdb)
        - `STRESS_TEST_SCENARIO`: kịch bản test (add_swap hoặc add_swap_remove)
        - `NUMBER_USERS`: số lượng user được tạo ra để test
        - `TXS_PER_BLOCK`: số lượng tx trong 1 block
        - `BLOCKS_PER_BATCH`: số lượng block trong 1 batch
        - `BLOCK_TIME`: thời gian tạo 1 block (đơn vị miliseconds)
        - `GAS_LIMIT`: Gas limit cho 1 block
        - `FUNDING_ACC`: Private key của Account để gửi token cho user được tạo ra
        - `L2_SC_ADDR`: Address của SC đã deploy
            - Ex: `make run-stress-test DB=postgres STRESS_TEST_SCENARIO=add_swap NUMBER_USERS=5 TXS_PER_BLOCK=8 BLOCKS_PER_BATCH=4 BLOCK_TIME=2000 FUNDING_ACC=992578b0a7be3d48c9bade5a083066c5a118c11aa7807d2dffe48d5c414d3414 L2_SC_ADDR=0x4D82D2D3570FEE4F6D23a17C73856810F5b3EA39`
- Log sẽ được lưu ờ: `tmp/logs/node.log`
- Setup LogRotate cho log ở `tmp/logs/node.log`

### Để chạy 1 normal operator
- Chạy postgres docker:
    - `make db-init`
- Chờ tầm 20s để docker khởi động và chạy tiếp lệnh sau
- Tạo DB và chạy migration:
    - `make db-setup`
- Bắt đầu chạy operator:
    - `make run DB=postgres`
- Log sẽ được lưu ờ: `tmp/logs/node.log`
- Setup LogRotate cho log ở `tmp/logs/node.log`

## Prover
### Environment Setup:
- Install Rust:
    ```
    curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh && 
    source $HOME/.cargo/env
    ```
- Clone project từ branch: 
    - `git clone -b L2AMM-73-Operator-synchronization_test git@github.com:KyberNetwork/Andromeda-AMM-Operator.git`
- Tạo `setup` folder & Download setup files:
    ```
    mkdir setup && cd setup &&
    curl  https://universal-setup.ams3.digitaloceanspaces.com/setup_2%5E20.key > setup_2^20.key && 
    curl  https://universal-setup.ams3.digitaloceanspaces.com/setup_2%5E21.key > setup_2^21.key && 
    curl  https://universal-setup.ams3.digitaloceanspaces.com/setup_2%5E22.key > setup_2^22.key && 
    curl  https://universal-setup.ams3.digitaloceanspaces.com/setup_2%5E23.key > setup_2^23.key && 
    curl  https://universal-setup.ams3.digitaloceanspaces.com/setup_2%5E24.key > setup_2^24.key &&
    curl  https://universal-setup.ams3.digitaloceanspaces.com/setup_2%5E25.key > setup_2^25.key &&
    curl  https://universal-setup.ams3.digitaloceanspaces.com/setup_2%5E26.key > setup_2^26.key
    ```
- Prover chỉ quan tâm các evironment variable ở dưới nên các variable khác không ảnh hưởng
    - `PROVER_SERVER_URL`: luôn là <IP_OPERATOR_1:8088> của Prover data chạy trên Operator 1 (Ex: http://10.148.0.140:8088)
    - `REQ_SERVER_TIMEOUT`: Timeout cho 1 request
    - `MAX_BLOCKS_IN_BATCH`: Số block trong 1 batch
    - `MAX_OPERATIONS_IN_BLOCK`: Số operation trong 1 block
    - `MAX_TXS_IN_BLOCK`: Số tx trong 1 block
    
### Chạy Prover
- Chạy prover bằng lệnh `nohup bin/prover.sh "prover_1" &> prover_server.log` (Thay "prover_1" thành 2,3 cho các prover khác)
- Setup LogRotate cho log ở `prover_server.log`
- Khi chạy thành công thì prover sẽ bắn 1 request đến Prover data chạy cùng với Operator 1 qua port 8088 để register. Sau đó sẽ bắt đầu nhận job để tính toán.


