CLI in Go per interagire con nodi EVM, Quorum e Besu.
chainctl permette di:
- interrogare un nodo RPC
- leggere balance, transazioni e receipt
- inviare ETH
- chiamare o inviare transazioni a smart contract via ABI
- gestire operazioni sui validator tramite RPC
Se nel repository sono presenti binari nelle GitHub Releases:
- apri la pagina
Releases - scarica l'archivio corretto per il tuo sistema operativo
- estrai il binario
chainctl - rendilo eseguibile
- spostalo in una directory presente nel
PATH
Esempio Linux/macOS:
chmod +x chainctl
sudo mv chainctl /usr/local/bin/
chainctl --helpSe il progetto espone uno script di installazione, puoi usare:
curl -fsSL https://raw.githubusercontent.com/<owner>/<repo>/main/scripts/install.sh | shPer installare una versione specifica:
curl -fsSL https://raw.githubusercontent.com/<owner>/<repo>/main/scripts/install.sh | sh -s -- --version v0.0.1Se preferisci compilare localmente:
go build -o chainctl .Oppure esecuzione diretta:
go run . --help- Crea un file
config.yamlpartendo da config.example.yaml - Se devi firmare transazioni, crea anche un
.envpartendo da .env.example - Verifica la connessione al nodo:
chainctl status- Scopri i parametri disponibili:
chainctl --help
chainctl send-eth --help
chainctl contract call --help
chainctl --versionPer capire cosa puoi passare da riga di comando usa sempre --help.
Help globale:
chainctl --helpMostra:
- elenco dei comandi
- flag globali validi per tutti i comandi
- descrizione generale del tool
Help di un comando specifico:
chainctl <comando> --helpEsempi:
chainctl balance --help
chainctl send-eth --help
chainctl contract --help
chainctl contract call --help
chainctl contract send --help
chainctl validator --help
chainctl validator propose-add --helpRegola pratica:
- usa
chainctl --helpper vedere i parametri globali - usa
chainctl <comando> --helpper vedere gli input obbligatori e opzionali del comando - usa
chainctl --versionoppurechainctl versionper vedere la versione installata
chainctl risolve i parametri con questo ordine di precedenza:
- flag da linea di comando
- variabili ambiente esportate o lette da
.env config.yaml- default interni
Questo significa che puoi:
- usare solo
config.yaml - usare solo variabili d'ambiente o
.env - usare solo flag CLI
- combinare le fonti e sovrascrivere da CLI quello che ti serve
Il file .env viene cercato in:
- directory corrente
- directory del file passato con
--config $HOME/.chainctl/.env
Riferimento: config.example.yaml
rpc_url: "http://127.0.0.1:8545"
chain_id: 1337
from_address: "0x0000000000000000000000000000000000000000"
private_key: ""
private_key_env: "CHAINCTL_PRIVATE_KEY"
timeout_seconds: 10
poll_interval_seconds: 3
validator:
list_method: "qbft_getValidatorsByBlockNumber"
propose_method: "clique_propose"Significato dei campi:
rpc_url: endpoint JSON-RPC del nodochain_id: chain ID usato per firmare le transazionifrom_address: address atteso della chiave privataprivate_key: chiave privata diretta in esadecimaleprivate_key_env: nome della variabile ambiente da cui leggere la chiavetimeout_seconds: timeout per le chiamate RPCpoll_interval_seconds: intervallo di polling per operazioni ripetute comewait-txvalidator.list_method: metodo RPC usato per leggere i validatorvalidator.propose_method: metodo RPC usato per proporre add/remove validator
Riferimento: .env.example
CHAINCTL_RPC_URL=http://127.0.0.1:8545
CHAINCTL_CHAIN_ID=1337
CHAINCTL_FROM_ADDRESS=0x0000000000000000000000000000000000000000
CHAINCTL_PRIVATE_KEY=your_private_key_here
CHAINCTL_TIMEOUT_SECONDS=10
CHAINCTL_POLL_INTERVAL_SECONDS=3
CHAINCTL_VALIDATOR_LIST_METHOD=qbft_getValidatorsByBlockNumber
CHAINCTL_VALIDATOR_PROPOSE_METHOD=clique_proposeNota sulla chiave privata:
- puoi usare
CHAINCTL_PRIVATE_KEYin.env - oppure puoi mettere la chiave in un'altra variabile e indicarne il nome con
private_key_envo--private-key-env - oppure puoi passare la chiave direttamente con
--private-key
Questi flag sono disponibili su tutti i comandi:
--config
--rpc-url
--chain-id
--from-address
--private-key
--private-key-env
--timeout-seconds
--poll-interval-seconds
--validator-list-method
--validator-propose-method
Mostra lo stato base del nodo:
rpc_urlchain_idblock_number
Uso:
chainctl statusLegge il balance di un address.
Uso:
chainctl balance 0x1111111111111111111111111111111111111111Mostra i dati base di una transazione.
Uso:
chainctl tx 0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaMostra la receipt di una transazione.
Uso:
chainctl receipt 0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAttende finché una transazione non viene minata.
Uso:
chainctl wait-tx 0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa --timeout 180Invia una transazione ETH semplice.
Uso con .env:
chainctl send-eth \
--rpc-url http://127.0.0.1:8545 \
--from-address 0x0000000000000000000000000000000000000000 \
--to 0x1111111111111111111111111111111111111111 \
--value 0.1Uso tutto da CLI:
chainctl send-eth \
--rpc-url http://127.0.0.1:8545 \
--chain-id 1337 \
--from-address 0x0000000000000000000000000000000000000000 \
--private-key 0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef \
--to 0x1111111111111111111111111111111111111111 \
--value 0.1Chiama una funzione read-only di un contratto usando un ABI JSON.
Uso:
chainctl contract call \
--abi ./MyContract.abi.json \
--address 0x2222222222222222222222222222222222222222 \
--method balanceOf \
--args 0x1111111111111111111111111111111111111111Nota: --args usa il formato Cobra --args a,b,c.
Invia una transazione a una funzione write di un contratto.
Uso:
chainctl contract send \
--abi ./MyContract.abi.json \
--address 0x2222222222222222222222222222222222222222 \
--method transfer \
--args 0x3333333333333333333333333333333333333333,1000 \
--value 0Lista i validator correnti usando il metodo RPC configurato.
Uso:
chainctl validator listPropone l'aggiunta di un validator.
Uso:
chainctl validator propose-add 0x4444444444444444444444444444444444444444Propone la rimozione di un validator.
Uso:
chainctl validator propose-remove 0x4444444444444444444444444444444444444444Usare un file di config ma sovrascrivere l'endpoint RPC da riga di comando:
chainctl status --config ./config.yaml --rpc-url http://127.0.0.1:20000Usare solo variabili d'ambiente:
export CHAINCTL_RPC_URL=http://127.0.0.1:8545
export CHAINCTL_CHAIN_ID=1337
chainctl statusUsare un nome custom per la variabile contenente la private key:
export MY_NODE_PK=0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef
chainctl send-eth \
--private-key-env MY_NODE_PK \
--rpc-url http://127.0.0.1:8545 \
--from-address 0x0000000000000000000000000000000000000000 \
--to 0x1111111111111111111111111111111111111111 \
--value 0.1- l'output dei comandi e in formato JSON
- se
from_addresse impostato, la chiave privata deve corrispondere a quell'address send-ethecontract sendstimano automaticamente il gas se--gas-limitnon viene passatowait-txusapoll_interval_secondsdella configurazione per il polling
Errore su chiave privata vuota:
- verifica
CHAINCTL_PRIVATE_KEY - oppure passa
--private-key - oppure indica il nome corretto con
--private-key-env
Errore di mismatch su from_address:
- la chiave privata caricata non corrisponde all'address configurato
- correggi
from_addressoppure usa la chiave giusta
Errore RPC:
- verifica
rpc_url - controlla che il nodo sia raggiungibile
- se serve, aumenta
--timeout-seconds