目录
安装依赖
apt update && apt install build-essential git make jq curl clang pkg-config libssl-dev -y
安装Go环境
(国内网络需要挂代理)
wget -c https://golang.org/dl/go1.22.3.linux-amd64.tar.gz -O - | sudo tar -xz -C /usr/local
echo "export PATH=$PATH:/usr/local/go/bin" >> /etc/profile && source /etc/profile
go version
拉取必要的文件
mkdir -p /data/airchains/ && cd /data/airchains/
git clone https://github.com/airchains-network/evm-station.git
git clone https://github.com/airchains-network/tracks.git
设置并运行Evm-Station
cd /data/airchains/evm-station && go mod tidy
自定义CHAINID和MONIKER (不想改也可以)
vim ./scripts/local-setup.sh
建议只改小写字母,后面的_1234-1不要动
按小i 开始编辑。
按键盘左上角的ESC,然后输入 :wq! 保存退出
修改好后执行:
/bin/bash ./scripts/local-setup.sh
会输出地址和助记词,建议保存输出的信息。
获取钱包私钥
/bin/bash ./scripts/local-keys.sh
把这个私钥导入小狐狸备用
如果执行成功,会生成这个文件:
ls ~/.evmosd/
把json-rpc监听地址改为0.0.0.0,后面小狐狸钱包添加自定义RPC需要使用这个端口:
sed -i.bak 's@address = "127.0.0.1:8545"@address = "0.0.0.0:8545"@' ~/.evmosd/config/app.toml
启动Evm-Station
官方文档是这样启动的:
/bin/bash ./scripts/local-start.sh
不建议使用这种方式,不方便以后维护,我们下面将程序加入守护进程。
创建systemd守护程序
注意修改 — chain-id 为 上一步自定义的CHAINID
cat > /etc/systemd/system/evmosd.service << EOF
[Unit]
Description=evmosd node
After=network-online.target
[Service]
User=root
WorkingDirectory=/root/.evmosd
ExecStart=/data/airchains/evm-station/build/station-evm start --metrics "" --log_level "info" --json-rpc.api eth,txpool,personal,net,debug,web3 --chain-id "testname_1234-1"
Restart=on-failure
RestartSec=5
LimitNOFILE=65535
[Install]
WantedBy=multi-user.target
EOF
这一大段是一条命令(cat > 到最后面的 EOF),需要一起复制,这是cat的特殊用法,可以直接把文本写入文件。
启动
加载配置文件并加入开机自启
systemctl daemon-reload && systemctl enable evmosd
systemctl restart evmosd
查看服务状态
systemctl status evmosd.service
journalctl -u evmosd -f
批量更改端口
(如果evmosd日志正常,则无需执行此步)
如果你的机器上跑的有其他cosmos生态的节点,evmosd的日志可能会提示某些端口被占用,可以使用下面命令批量修改:
设置一个端口前缀,比如以61开头
PREFIX_PORT="61"
sed -i.bak -e "s%:1317%:${PREFIX_PORT}317%g;
s%:8080%:${PREFIX_PORT}080%g;
s%:9090%:${PREFIX_PORT}090%g;
s%:9091%:${PREFIX_PORT}091%g;
s%:8545%:${PREFIX_PORT}545%g;
s%:8546%:${PREFIX_PORT}546%g;
s%:6065%:${PREFIX_PORT}065%g" ~/.evmosd/config/app.toml
sed -i.bak -e "s%:26658%:${PREFIX_PORT}658%g;
s%:26657%:${PREFIX_PORT}657%g;
s%:6060%:${PREFIX_PORT}060%g;
s%:26656%:${PREFIX_PORT}656%g;
s%:26660%:${PREFIX_PORT}660%g" ~/.evmosd/config/config.toml
重启evmosd,并再次查看日志是否正常
systemctl restart evmosd
journalctl -u evmosd -f
运行DA服务
DA服务可以任选一种Avail Celestia Eigenlayer
目前avail水龙头不稳定,时常接不到水,建议使用eigenlayer作DA
如果已经部署了avail,更改为eigenlayer的命令在本文最后面
使用eigenlayer作为DA:
wget https://github.com/airchains-network/tracks/releases/download/v0.0.2/eigenlayer
chmod +x eigenlayer && mv eigenlayer /usr/local/bin/eigenlayer
eigenlayer operator keys create -i=true --key-type ecdsa 钱包名
# 会生成私钥和公钥,注意保存输出的信息!!! 后面要用到
使用Avail作为DA:(目前不建议)
mkdir /data/airchains/availda && cd /data/airchains/availda
wget https://github.com/availproject/avail-light/releases/download/v1.9.1/avail-light-linux-amd64.tar.gz
tar xvf avail-light-linux-amd64.tar.gz
mv avail-light-linux-amd64 avail-light && chmod +x avail-light
创建必要的文件
mkdir -p ~/.avail/turing/bin
mkdir -p ~/.avail/turing/data
mkdir -p ~/.avail/turing/config
mkdir -p ~/.avail/identity
cat > ~/.avail/turing/config/config.yml << EOF
bootstraps=['/dns/bootnode.1.lightclient.turing.avail.so/tcp/37000/p2p/12D3KooWBkLsNGaD3SpMaRWtAmWVuiZg1afdNSPbtJ8M8r9ArGRT']
full_node_ws=['wss://avail-turing.public.blastapi.io','wss://turing-testnet.avail-rpc.com']
confidence=80.0
avail_path='/root/.avail/turing/data'
kad_record_ttl=43200
ot_collector_endpoint='http://otel.lightclient.turing.avail.so:4317'
genesis_hash='d3d2f3a3495dc597434a99d7d449ebad6616db45e4e4f178f31cc6fa14378b70'
EOF
这一大段是一条命令(cat > 到最后面的 EOF),需要一起复制,这是cat的特殊用法,可以直接把文本写入文件。
把Avail加入守护程序
cat > /etc/systemd/system/availd.service << EOF
[Unit]
Description=Avail Light Client
After=network.target
StartLimitIntervalSec=0
[Service]
User=root
ExecStart=/data/airchains/availda/avail-light --network "turing" --config /root/.avail/turing/config/config.yml --app-id 36 --identity /root/.avail/identity/identity.toml
Restart=always
RestartSec=30
Environment="DAEMON_HOME=/root/.avail"
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload && systemctl enable availd
systemctl restart availd
查看availd状态和日志
systemctl status availd
journalctl -u availd -f
日志里会输出avail钱包地址和pubkey,保存这些信息,后面要用。如果错过了刚启动时的日志,可以使用 journalctl -u availd |head 查看
启动availd后,会在这个文件里生成助记词:
cat /root/.avail/identity/identity.toml
浏览器访问:
https://temp-explorer.avail.so/?rpc=wss://rpc-t.avail.nodestake.org//staking#/accounts
把avail的助记词导入进去
复制导入后生成的钱包地址,去airchains的discord接水,一次接20个:
https://discord.com/channels/1116269224449548359/1248724582743932998
或者去这里接:
(一次只能接一个)
初始化Tracks服务
cd /data/airchains/tracks/ && make build
会在这个路径生成可执行程序:
ls /data/airchains/tracks/build/tracks
使用eigenlayer作da的初始化命令:
/data/airchains/tracks/build/tracks init --daRpc "disperser-holesky.eigenda.xyz" --daKey "部署eigenlayer时生成的public key" --daType "eigen" --moniker "部署Evm-Station时自定义的昵称" --stationRpc "http://127.0.0.1:8545" --stationAPI "http://127.0.0.1:8545" --stationType "evm"
使用avail作da的初始化命令:(不建议)
# 注意修改 — daKey和 — moniker
/data/airchains/tracks/build/tracks init --daRpc "http://127.0.0.1:7000" --daKey "avail刚启动时日志输出的public key" --daType "avail" --moniker "部署Evm-Station时自定义的昵称" --stationRpc "http://127.0.0.1:8545" --stationAPI "http://127.0.0.1:8545" --stationType "evm"
stationRpc和stationAPI默认为本机的8545端口,是在这里定义的:
~/.evmosd/config/app.toml
生成airchains钱包
— accountName 是钱包名,建议和上一步的moniker名字保持一致
/data/airchains/tracks/build/tracks keys junction --accountName 钱包名 --accountPath $HOME/.tracks/junction-accounts/keys
保存此命令输出的钱包地址和助记词
复制air开头的地址
去这个网站接水:
airchains.faucetme.pro
运行Prover组件
/data/airchains/tracks/build/tracks prover v1EVM
创建station
获取nodeid:
grep node_id ~/.tracks/config/sequencer.toml
/data/airchains/tracks/build/tracks create-station --accountName 刚才创建的钱包名 --accountPath $HOME/.tracks/junction-accounts/keys --jsonRPC "https://junction-testnet-rpc.synergynodes.com/" --info "EVM Track" --tracks "air开头的钱包地址" --bootstrapNode "/ip4/本机IP地址/tcp/2300/p2p/上面获取到的nodeid"
本文末有一堆验证者开放的rpc,自行选择一个稳定的。
如果此条命令报gas不足的错误:
增加gas,并重新编译程序:
sed -i.bak 's/utilis\.GenerateRandomWithFavour(1200, 2400, \[2\]int{1500, 2000}, 0\.7)/utilis.GenerateRandomWithFavour(24000, 34000, [2]int{26000, 30000}, 0.7)/' /data/airchains/tracks/junction/createStation.go
cd /data/airchains/tracks/ && make build
之后如果运行过程中仍然报gas不足的错误,可以相应的调整这几个文件里的gas参数:
/data/airchains/tracks/junction/createStation.go
/data/airchains/tracks/junction/submitPod.go
/data/airchains/tracks/junction/validateVRF.go
/data/airchains/tracks/junction/verifyPod.go
重新执行创建命令:
/data/airchains/tracks/build/tracks create-station --accountName 刚才创建的钱包名 --accountPath $HOME/.tracks/junction-accounts/keys --jsonRPC "https://airchains-rpc.kubenode.xyz/" --info "EVM Track" --tracks "air开头的钱包地址" --bootstrapNode "/ip4/本机IP地址/tcp/2300/p2p/上面获取到的nodeid"
创建成功
把Tracks加入守护进程并启动
cat > /etc/systemd/system/tracksd.service << EOF
[Unit]
Description=tracksd
After=network-online.target
[Service]
User=root
WorkingDirectory=/root/.tracks
ExecStart=/data/airchains/tracks/build/tracks start
Restart=always
RestartSec=10
LimitNOFILE=65535
SuccessExitStatus=0 1
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable tracksd
systemctl restart tracksd
查看日志
journalctl -u tracksd -f
将airchains钱包助记词导入leap钱包插件
https://points.airchains.io/
访问此网站,连接leap钱包,如果一切正常,积分会一直增加。
leap钱包默认用的airchains的rpc挂掉了,点击钱包左上角,自定义endpoints,把rpc改成https://airchains-rpc.kubenode.xyz
把LCD改成 https://airchains-api.kubenode.xyz
如何获取积分?
需要与自己的rollapp交互,执行此命令导出私钥:
cd /data/airchains/evm-station/ && /bin/bash ./scripts/local-keys.sh
把私钥导入metamask钱包,添加自定义rpc:
RPC URL:
链ID: 最开始部署evm-station时自定义的CHAINID,如果没修改,则为1234
如果rpc正常,会看到钱包里有余额:
启动tracksd时,日志会输出 INF Processing Pod Number 的字样,可以把Pod理解为一个交易包,一个pod由25笔tx组成。我们通过与自己的rollapp地址交互,每25笔tx会增加一个pod,每处理一个pod,可以获取一定的积分,可以给自己转账25笔试一下。
journalctl -u tracksd -f
python自动转账脚本
from web3 import Web3
# 自定义配置
rpc_url = "http://127.0.0.1:8545" # 自定义的 RPC URL
chain_id = 1234 # 自定义的链 ID
# 钱包地址和私钥
sender_address = "" # 发送者钱包地址
sender_private_key = "" # 发送者钱包的私钥
# 接收者钱包地址和转账金额(以最小单位表示)
receiver_address = "" # 接收者钱包地址
amount = 1000000000000000000 # 转账金额(示例为 1个币)
# 创建 Web3 实例
web3 = Web3(Web3.HTTPProvider(rpc_url))
# 构建交易对象
transaction = {
"to": receiver_address,
"value": amount,
"gas": 21000, # 设置默认的 gas 数量
"gasPrice": web3.to_wei(50, "gwei"), # 设置默认的 gas 价格
"nonce": web3.eth.get_transaction_count(sender_address),
"chainId": chain_id,
}
# 签名交易
signed_txn = web3.eth.account.sign_transaction(transaction, sender_private_key)
# 发送交易
tx_hash = web3.eth.send_raw_transaction(signed_txn.rawTransaction)
# 等待交易确认
tx_receipt = web3.eth.wait_for_transaction_receipt(tx_hash)
# 输出交易结果
print("Transaction Hash:", tx_receipt.transactionHash.hex())
print("Gas Used:", tx_receipt.gasUsed)
print("Status:", tx_receipt.status)
保存为send.py,死循环一直执行:
while true; do python3 send.py; sleep 1; done
更改DA为eigenlayer
wget https://github.com/airchains-network/tracks/releases/download/v0.0.2/eigenlayer
chmod +x eigenlayer && mv eigenlayer /usr/local/bin/eigenlayer
eigenlayer operator keys create -i=true --key-type ecdsa 钱包名
注意保存输出的信息!!!
备份私钥后,按 q 或 ctrl + c 退出。
vim ~/.tracks/config/sequencer.toml
修改 [da] 部分,重启tracksd
[da]
DaKey = "上一步生成的pubkey"
DaRPC = "disperser-holesky.eigenda.xyz"
DaType = "eigen"
systemctl restart tracksd.service
可选RPC:
https://airchains-rpc-testnet.zulnaaa.com/
https://t-airchains.rpc.utsa.tech/
https://airchains.rpc.t.stavr.tech/
https://airchains-rpc.chainad.org/
https://junction-rpc.kzvn.xyz/
https://airchains-rpc.elessarnodes.xyz/
https://airchains-testnet-rpc.apollo-sync.com/
https://rpc-airchain.danggia.xyz/
https://airchains-rpc.stakeme.pro/
https://airchains-testnet-rpc.crouton.digital/
https://airchains-testnet-rpc.itrocket.net/
https://rpc1.airchains.t.cosmostaking.com/
https://rpc.airchain.yx.lu/
https://airchains-testnet-rpc.staketab.org/
https://junction-rpc.owlstake.com/
https://rpctt-airchain.sebatian.org/
https://rpc.airchains.aknodes.net/
https://airchains-rpc-testnet.zulnaaa.com/
https://rpc-testnet-airchains.nodeist.net/
https://airchains-testnet.rpc.stakevillage.net/
https://airchains-rpc.sbgid.com/
https://airchains-test.rpc.moonbridge.team/
https://rpc-airchains-t.sychonix.com/
https://airchains-rpc.anonid.top/
https://rpc.airchains.stakeup.tech/
https://junction-testnet-rpc.nodesync.top/
https://rpc-airchain.vnbnode.com/
https://airchain-t-rpc.syanodes.my.id
https://airchains-test-rpc.nodesteam.tech/
https://junction-rpc.validatorvn.com/
发表评论