Become a Solana Transmitter
This guide will walk you through how to become a Solana transmitter. From wallet details to transmitter setup, we'll cover it all here.
Dependencies
Before beginning make sure to install all of the necessary dependencies and tools. In this guide we'll be using several, including:
libusd, an open source library that allows communication with USB devices fom user space.
foundry, a modular toolkit for Ethereum application development.
docker, a set of platform as a service products that use OS-level virtualization to deliver software in packages called containers.
brew install python
brew install pipx
pipx install base58
brew install libusb
curl -L https://foundry.paradigm.xyz | bash
foundryupFor the Zsh shell, use source "~/.zshenv" instead of source "~/.bashrc".
If pipx install base58 doesn’t work, try using: python3 -m pip install base58
sudo apt update
sudo apt install pipx
pipx install base58
sudo apt install curl build-essential libssl-dev pkg-config
sudo apt install libusb-1.0-0-dev
curl -L https://foundry.paradigm.xyz | bash
~./bashrc
foundryupTo verify the successful installation of dependencies, you can run the following command.
cast --versionIf everything was successfully installed, the output should be the version of the cast command, as shown below.
cast 0.2.0 (31c24b0 2024-11-14T00:20:56.080456000Z)Wallet Setup
Your Solana wallet should only hold SOL tokens. The security of other tokens is not guaranteed.
To become an transmitter on Solana you need two wallets. An EVM standard wallet and a Solana standard wallet. To proceed you need to convert your wallets into a format suitable for transmitter registration, below we describe the process.
For your Solana wallet (<solana_wallet>) in Base58 format, run the following command.
python3 -c "import base58; import sys; print('0x' + base58.b58decode(sys.argv[1]).hex())" <solana_wallet>Example for a Solana Wallet:
Hj12XrWQmcfRZk4nEejLRvF3tE5QXk5EpxmMm3zZzQbC (Base58)
Hexadecimal Representation (Output):
0xf87d6a27b105812cdaf3ade4ba67fe501092df51a716671db13f05387dc04603
For your EVM wallet (<evm_address>), run the following command.
cast to-uint256 <evm_address>Example for a EVM Wallet:
0xff22Fb238CfA1013A793FC917F242F9f82a61417
Hexadecimal Representation (Output):
0x000000000000000000000000ff22fb238cfa1013a793fc917f242f9f82a61417
1. Registration
Make sure that you have the native network token on Entangle and that you have added the Entangle network address to your wallet.
Chain Id: 33033
Now run the following command to register your transmitter in the desired network.
cast send 0xB83E7753CAB418775f0dc91ACfcfECba24FE62C1 \
"registerAgent(uint,address,bytes[])" \
<chain_id> \
<evm_address> \
"[<hex_address_evm>, <hex_address_solana>, <hex_address_evm>, <hex_address_evm>]" \
-r "https://json-rpc.entangle.fi" \
--private-key <private_key>If you encounter the error tx already in mempool, try adding the following optional parameter:
--gas-price <actual gas in chain> * 2To get the actual gas price in the network, run:
cast gas-price -r "https://json-rpc.entangle.fi"2. Security Deposit
To ensure your transmitter works as expected you are required to stake a security deposit. A minimum of 100 NTGL is required.
Run the cast command again but this time with the follow parameters.
cast send 0x2897F9093bE0B5d5F9067c6f7842B949017eE830 "deposit(uint256,address,uint256)" <chainID> <agent-address> <wntgl-value> -r https://json-rpc.entangle.fi --private-key <your_key> --value <ntgl-value>3. Docker Environment Setup
To simplify this process, we've created a docker image. In this part we will describe how to install and setup docker.
Update the system.
sudo apt update && sudo apt upgrade -yInstall dependencies.
sudo apt install -y ca-certificates curl gnupgAdd the official Docker GPG key.
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo tee /etc/apt/keyrings/docker.asc > /dev/null
sudo chmod a+r /etc/apt/keyrings/docker.ascAdd the Docker repository.
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/nullInstall Docker and Docker Compose.
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-pluginVerify the installation.
docker --version
docker compose versionAdd the current user to the Docker group (to run commands without using sudo).
sudo usermod -aG docker $USERThen log out and log back in, or run.
newgrp dockerInstall Docker via Homebrew
brew install --cask dockerLaunch Docker Desktop
Simply find it in your applications and open it.
Verify the installation
docker --version
docker compose version4. Starting the Transmitter
Update the docker image.
docker pull msentangle/agent:3.0
docker pull msentangle/agent-setup:3.0
docker pull msentangle/solana:3.0Create a directory for the transmitter and move to it.
mkdir transmitter
cd transmitterStart the transmitter.
If you want this transmitter to be a super transmitter you need to specify "-e IS_SUPER_AGENT=true".
docker run --rm \
-v $(pwd)/.:/app/agent/ \
-e PRIVATE_KEY="yourprivatekey" \
-e PASSWORD="yourpassword" \
-e NON_EVM_CHAINS="11100000000000000501" \
-e SOLANA_PRIVATE_KEY="solanaprivate" \
msentangle/agent-setup:3.0After the successful execution of the program, you will see the message:
Your Address: 0x96564904617F27722C522D4Ed9D0e7b9911Aa5cC please check correct
2:57PM WRN > contract has no events Contract Name=Slasher
...Choosing a Transmitter Name
You can also set a unique name for your transmitter to more easily distinguish it. Run the below command to do so.
docker-compose -p <agent-name> up -dChange Round
You can either wait for another participant to make changes to the round or update the round yourself. Run the following command to change the round.
docker exec -it <agent-name>-evm_agent-1 sh -c "apk add curl && curl 'http://localhost:9131/turnround?chainId=<chain_id>'"Change Node
You can change blockchain providers (RPC nodes) by modifying the configs/solana/transmitter-config.yml file. You can add multiple nodes to ensure high availability
solana:
read_rpcs:
- url: https://api.mainnet-beta.solana.com
ratelimit: 4
write_rpcs:
- url: https://api.mainnet-beta.solana.com
ratelimit: 1Additional Configuration Parameters
Below are additional configuration parameters you can use for the blockchain provider source configuration file.
parse_new_headers_interval
How often to update blockchain information (e.g., 5s, 1m).
max_query_in_batch
The number of requests in a single batch request.
filter_logs_max_blocks
The maximum difference between fromBlock and toBlock.
blocks_delay
The maximum difference between block shifts.
blocks_batch_to_filter
The minimum number of blocks to process.
min_balance_to_alert
The minimum wallet balance for notifications (in wei).
Withdraw Security Deposit & Stopping Transmitter
To withdraw your security deposit and stop being a transmitter, run the following command.
cast send 0x2897F9093bE0B5d5F9067c6f7842B949017eE830 "withdraw(uint256,address,uint256,bool)" <chain_id> <agent-address> <nglt-amount> <flag> -r "https://json-rpc.entangle.fi" --private-key <private-key>Troubleshooting
Last updated
Was this helpful?

