# 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.