# Installation - Testnet ### Notes 1. This installation assumes you're using Ubuntu or similar 2. You need a non-root user that belongs to the sudo group. ### Required software install procedure 1. Install Ethereum ``` sudo apt install software-properties-common sudo add-apt-repository -y ppa:ethereum/ethereum sudo apt install ethereum ``` 2. Install NodeJS using NVM (Check NVM repo for updated procedure) ``` curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash source .bashrc nvm install --lts ``` 3. Install Python and other software ``` sudo apt install python build-essential ``` ### Clone the repo ``` git clone https://github.com/status-im/snt-gas-relay.git cd snt-gas-relay/gas-relayer npm install ``` ### Setup geth for Whisper 1. Verify `geth` light mode starts successfully. Exit geth when you see everything is ok ``` geth --testnet --syncmode=light console > exit ``` 2. There aren't enough geth peers with Whisper enabled to guarantee that messages will arrive from one node to other. We need to create a `static-nodes.json` file in `~/.ethereum/testnet/geth/`. This file needs to contain the following array: ``` [ "enode://436cc6f674928fdc9a9f7990f2944002b685d1c37f025c1be425185b5b1f0900feaf1ccc2a6130268f9901be4a7d252f37302c8335a2c1a62736e9232691cc3a@174.138.105.243:30404", "enode://5395aab7833f1ecb671b59bf0521cf20224fe8162fc3d2675de4ee4d5636a75ec32d13268fc184df8d1ddfa803943906882da62a4df42d4fccf6d17808156a87@206.189.243.57:30404", "enode://7427dfe38bd4cf7c58bb96417806fab25782ec3e6046a8053370022cbaa281536e8d64ecd1b02e1f8f72768e295d06258ba43d88304db068e6f2417ae8bcb9a6@104.154.88.123:30404", "enode://ebefab39b69bbbe64d8cd86be765b3be356d8c4b24660f65d493143a0c44f38c85a257300178f7845592a1b0332811542e9a58281c835babdd7535babb64efc1@35.202.99.224:30404", "enode://a6a2a9b3a7cbb0a15da74301537ebba549c990e3325ae78e1272a19a3ace150d03c184b8ac86cc33f1f2f63691e467d49308f02d613277754c4dccd6773b95e8@206.189.243.176:30304", "enode://207e53d9bf66be7441e3daba36f53bfbda0b6099dba9a865afc6260a2d253fb8a56a72a48598a4f7ba271792c2e4a8e1a43aaef7f34857f520c8c820f63b44c8@35.224.15.65:30304", "enode://c42f368a23fa98ee546fd247220759062323249ef657d26d357a777443aec04db1b29a3a22ef3e7c548e18493ddaf51a31b0aed6079bd6ebe5ae838fcfaf3a49@206.189.243.162:30504", "enode://7aa648d6e855950b2e3d3bf220c496e0cae4adfddef3e1e6062e6b177aec93bc6cdcf1282cb40d1656932ebfdd565729da440368d7c4da7dbd4d004b1ac02bf8@206.189.243.169:30504", "enode://8a64b3c349a2e0ef4a32ea49609ed6eb3364be1110253c20adc17a3cebbc39a219e5d3e13b151c0eee5d8e0f9a8ba2cd026014e67b41a4ab7d1d5dd67ca27427@206.189.243.168:30504", "enode://7de99e4cb1b3523bd26ca212369540646607c721ad4f3e5c821ed9148150ce6ce2e72631723002210fac1fd52dfa8bbdf3555e05379af79515e1179da37cc3db@35.188.19.210:30504", "enode://015e22f6cd2b44c8a51bd7a23555e271e0759c7d7f52432719665a74966f2da456d28e154e836bee6092b4d686fe67e331655586c57b718be3997c1629d24167@35.226.21.19:30504", "enode://531e252ec966b7e83f5538c19bf1cde7381cc7949026a6e499b6e998e695751aadf26d4c98d5a4eabfb7cefd31c3c88d600a775f14ed5781520a88ecd25da3c6@35.225.227.79:30504" ] ``` These enodes were extracted from https://github.com/status-im/status-go/blob/develop/params/cluster.go. ### Setup the gas relayer Before executing this program, `config/config.json` must be setup and `npm install` needs to be executed. Important values to verify are related to the node configuration, just like: - Host, port and protocol to connect to the geth node - Host, port and protocol Ganache will use when forking the blockchain for gas estimations and other operations - Account used for processing the transactions - Symmetric key used to receive the Whisper messages - Accepted tokens information - Contract configuration 1. For testnet, a config file is provided with the required configuration, you just need to set the account information ``` cd config rm config.js mv config.testnet.js config.js ``` 2. A node that wants to act as a relayer only needs to have a geth node with whisper enabled, and an account with ether to process the transactions. This account needs to be configured in `./config/config.js`. Edit this file and set the account: ``` "blockchain": { // Use one of these options: // Option1 =========================== // privateKey: "your_private_key", // Option2 =========================== // privateKeyFile: "path/to/file" // Option3 =========================== // mnemonic: "12 word mnemonic", // addressIndex: "0", // Optionnal. The index to start getting the address // hdpath: "m/44'/60'/0'/0/" // Optionnal. HD derivation path }, ``` ### Launching the relayer A `launch-geth-testnet.sh` script is provided in the `snt-gas-relayer/gas-relayer` folder: ``` chmod +x ./launch-geth-testnet.sh ./launch-geth-testnet.sh ``` you may use any of the following three commands to launch the relayer. ``` npm start node src/service.js nodemon src/service.js ``` ### Using the testdapp with testnet The test dapp may be used for testnet from your computer. It requires a node that allows websockets. You may use this command to launch a geth instance pointing to testnet: ``` chmod +x ./launch-geth-testnet.sh ./launch-geth-testnet.sh ``` 1. Execute `embark run testnet` to launch the dapp connected to testnet 2. Navigate in your browser to http://localhost:8000. Use metamask to connect to your local node. 3. You're now able to use the dapp normally. The status for the relayer that can be seen in the footer of the dapp won't reflect accurate information, since the relayers account are not deterministic anymore since you're not in a development environment #### NOTE Work is in progress for using the test-dapp inside status.