Skip to content

multisig-labs/GoGoTools

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

GoGoTools 🎈

A (growing) collection of useful tools for Avalanche developers.

Usage


Usage:
  ggt  ...

Commands:
  balance                      Get the balance of an address
  balance-pk                   Get the balance of an address for a private key
  bech32-decode                Decode a bech32 address
  cb58-decode                  Decode a value from CB58 (ID or NodeID)
  cb58-decode-sig              Decode a signature (r,s,v) from CB58
  cb58-encode                  Encode a value to CB58
  completion                   Generate shell completion scripts
  help                         Help about any command
  inspect-tx-p                 Inspect a P-Chain transaction
  l1-validators                Get current validators from a L1 validator RPC endpoint
  mnemonic-addrs               Show addresses for a BIP39 mnemonic
  mnemonic-generate            Generate a random BIP39 mnemonic
  mnemonic-insecure            Generate an INSECURE test BIP39 mnemonic
  mnemonic-keys                Show keys and addresses for a BIP39 mnemonic
  msgdigest                    Generate a hash digest for an Avalanche Signed Message (ERC-191)
  pk                           Show various address encodings of a private key
  random-bls                   Generate a random BLS key
  random-id                    Generate a random ID
  random-nodeid                Generate a random node ID
  rpc                          Ergonomic access to avalanche node RPC APIs
  verify-bls                   Verify a BLS Proof of Possession
  version                      Version
  vmid                         Given a vmName, try to encode the ASCII name as a vmID
  vmname                       Given a vmID, try to decode the ASCII name
  warp-aggregate-signatures    Aggregate signatures for a warp message
  warp-construct-uptime        Construct an uptime message
  warp-get                     Get a warp message from a transaction ID
  warp-parse                   Parse a warp message

Mnemonics

Avalanche P-Chain and C-Chain use different address formats, and ggt provides utilities to help with this.

❯ ggt mnemonic-keys "test test test test test test test test test test test junk"
=== BIP39 Mnemonic ===
test test test test test test test test test test test junk

=== Ethereum Derivation Path ===
Path               EVM Addr     Ava Addr           EVM Private Key      Ava Private Key
m/44'/60'/0'/0/0   0xf39Fd6...  P-avax15428vq2...  ac0974bec39a17e3...  PrivateKey-2JmTFo8knhffGK32...
m/44'/60'/0'/0/1   0x709979...  P-avax1cjzphr6...  59c6995e998f97a5...  PrivateKey-gYChgv9KmCAaRH47...
m/44'/60'/0'/0/2   0x3C44Cd...  P-avax1sj3m3zu...  5de4111afa1a4b94...  PrivateKey-iMKNGkysaBKiThvd...
m/44'/60'/0'/0/3   0x90F79b...  P-avax1y3fgnts...  7c852118294e51e6...  PrivateKey-wqhSPTuv3JB9YPix...
m/44'/60'/0'/0/4   0x15d34A...  P-avax1jft4f7x...  47e179ec19748859...  PrivateKey-Yf6fhJUE97QgwBkb...
m/44'/60'/0'/0/5   0x996550...  P-avax1syp9y2m...  8b3a350cf5c34c91...  PrivateKey-24KNq4HhQo5BL6xM...
m/44'/60'/0'/0/6   0x976EA7...  P-avax1zyf8ga3...  92db14e403b83dfe...  PrivateKey-27gEa9Qudm22UaxC...
m/44'/60'/0'/0/7   0x14dC79...  P-avax1mer4xr0...  4bbbf85ce3377467...  PrivateKey-aMXjshukTmhmsn2P...
m/44'/60'/0'/0/8   0x23618e...  P-avax1l5rrv44...  dbda1821b80551c9...  PrivateKey-2fpphtBdokVfG6uA...
m/44'/60'/0'/0/9   0xa0Ee7A...  P-avax14flvw0x...  2a871d0798f97d79...  PrivateKey-KjKHSmNQ9bFN3bK2...

=== Avalanche Derivation Path ===
Path               EVM Addr     Ava Addr           EVM Private Key      Ava Private Key
m/44'/9000'/0'/0/0 0x5a299B...  P-avax1yljhuvj...  211cdc80c23ccc8e...  PrivateKey-Fapb8hTUMABpZc9z...
m/44'/9000'/0'/0/1 0xFf9bc6...  P-avax18wvaf02...  9f8799874aeb19dc...  PrivateKey-2DFyMtm5iENeShhP...
m/44'/9000'/0'/0/2 0x9Fa1E0...  P-avax1kk4tuwm...  9ac048b0ccc9a3d9...  PrivateKey-2B9ukB5wfRqS8vnJ...
m/44'/9000'/0'/0/3 0x8E7046...  P-avax1au4cssw...  2119b8ec008c7599...  PrivateKey-FaWRW4Fwpy8dgPq1...
m/44'/9000'/0'/0/4 0xA7a060...  P-avax1s8kxj6a...  edf2bd01bbd1b1c3...  PrivateKey-2oo4uTtBJfU64mB2...
m/44'/9000'/0'/0/5 0xd667fe...  P-avax12r4ys4s...  36bc4c0b5e9b13a3...  PrivateKey-R79TRuBkoJympQD3...
m/44'/9000'/0'/0/6 0xaEF349...  P-avax1sdn9w8t...  e8c61325266f87b6...  PrivateKey-2mWtmQ2iQxEdGwjh...
m/44'/9000'/0'/0/7 0x8F80c9...  P-avax1hvdsp7z...  dad79f166f5359a5...  PrivateKey-2fP2rzMCgN6LvKzK...
m/44'/9000'/0'/0/8 0x6cB771...  P-avax1935pmeg...  2b15356991756b70...  PrivateKey-KyVd5iu1CJ32Qryn...
m/44'/9000'/0'/0/9 0x468E01...  P-avax1yj4kuns...  248c879bf5a22274...  PrivateKey-H6bSJB5xj2FbMuV9...

# Show various address encodings of a private key
❯ ggt pk PrivateKey-Fapb8hTUMABpZc9zWurmPR7why34LQNshss5RZHgCAgiY5n83

PrivKey Hex:   0x211cdc80c23ccc8eceab5d6903312391e656366a7a553e2c501b06add1729816
PrivKey CB58:  PrivateKey-Fapb8hTUMABpZc9zWurmPR7why34LQNshss5RZHgCAgiY5n83
Eth addr:      0x5a299B0010BAc9c0339B6EF600B1f2943131b1e7
Ava addr:      P-avax1yljhuvjkmtu0y5ls6kf4exsdd8gea9mp8jd32r
Ava addr:      P-fuji1yljhuvjkmtu0y5ls6kf4exsdd8gea9mptqfwxu
Ava addr:      P-local1yljhuvjkmtu0y5ls6kf4exsdd8gea9mp7pshft

❯ ggt pk 0x211cdc80c23ccc8eceab5d6903312391e656366a7a553e2c501b06add1729816

PrivKey Hex:   0x211cdc80c23ccc8eceab5d6903312391e656366a7a553e2c501b06add1729816
PrivKey CB58:  PrivateKey-Fapb8hTUMABpZc9zWurmPR7why34LQNshss5RZHgCAgiY5n83
Eth addr:      0x5a299B0010BAc9c0339B6EF600B1f2943131b1e7
Ava addr:      P-avax1yljhuvjkmtu0y5ls6kf4exsdd8gea9mp8jd32r
Ava addr:      P-fuji1yljhuvjkmtu0y5ls6kf4exsdd8gea9mptqfwxu
Ava addr:      P-local1yljhuvjkmtu0y5ls6kf4exsdd8gea9mp7pshft

Warp

# Set up some env vars for convenience
export ETH_RPC_URL=https://api.avax.network/ext/bc/C/rpc
export AVA_RPC_URL=https://api.avax.network

# Get a warp message from a transaction ID
❯ ggt warp-get 0x7b0a220154bde7cb8e603dd5b88d418c55fadf10d09f6e43c399f94088f83bca

UnsignedMessage(NetworkID = 1, SourceChainID = 2q9e4r6Mu3U68nU1fYjgbR6JvwrRx36CohpAX5UQxse55x1Q5, Payload = 000000000001000000141424aef0d5272373beb69b2a860bd1da078df67f000000b60000000000010ad6355dc6b82cd375e3914badb3e2f8d907d0856f8e679b2db46f8938a2f01200000014000000000000000000000e8bd2300dfc723e53d38d543b279b9bd69c5b6754a09bce1eab2de2d9135eff7e391e42583fca4c19c6007e864971c2baba777dfa312ca7994e0000000067b3d5bf00000001000000016cc54e2d13e91e29867851238a8af6c53ca4a9bf00000001000000016cc54e2d13e91e29867851238a8af6c53ca4a9bf0000000000000002)

Payload (*message.RegisterL1Validator): {
  "subnetID": "5moznRzaAEhzWkNTQVdT1U4Kb9EU7dbsKZQNmHwtN5MGVQRyT",
  "nodeID": "NodeID-11111111116MAZMYBTpRxmWciKx4L",
  "blsPublicKey": "8d543b279b9bd69c5b6754a09bce1eab2de2d9135eff7e391e42583fca4c19c6007e864971c2baba777dfa312ca7994e",
  "expiry": 1739838911,
  "remainingBalanceOwner": {
    "threshold": 1,
    "addresses": [
      "P-avax1dnz5utgnay0znpnc2y3c4zhkc572f2dlkwapg8"
    ]
  },
  "disableOwner": {
    "threshold": 1,
    "addresses": [
      "P-avax1dnz5utgnay0znpnc2y3c4zhkc572f2dlkwapg8"
    ]
  },
  "weight": 2
}


# Parse a hex-encoded warp message
❯ ggt warp-parse 0x0000000000010000000000000000000000000000000000000000000000000000000000000000000000350000000000010000000000000027000000000002ffa2cb7c97396dc67fc06e9f4dbf03a667f671c5cadaf55d11251d3172d2662501

WarpMessage(UnsignedMessage(NetworkID = 1, SourceChainID = 11111111111111111111111111111111LpoYY, Payload = 0000000000010000000000000027000000000002ffa2cb7c97396dc67fc06e9f4dbf03a667f671c5cadaf55d11251d3172d2662501))

Payload (*message.L1ValidatorRegistration): {"validationID":"2wasqFU3CptbuuWgJg5awBJHar9bm1ANwp123rFSUQJ8txiQmJ","registered":true}

Balances

❯ ggt balance 0x746189b6b6C2162C6BeAB83d4dB76f8C96A5381C
0.207649043134145176 ETH

❯ ggt balance avax19zfygxaf59stehzedhxjesads0p5jdvfeedal0
13.164163522 AVAX

# If ETH_FROM is set,
❯ ggt balance
0.207649043134145176 ETH


❯ export PRIVATE_KEY=010101...
❯ ggt balance-pk
0.2076490431 ETH   0x746189b6b6C2162C6BeAB83d4dB76f8C96A5381C
13.164163522 AVAX  avax19zfygxaf59stehzedhxjesads0p5jdvfeedal0


Installation

Requires Go version >= 1.23

Clone Repository

git clone https://github.com/multisig-labs/gogotools.git
cd gogotools

Install Just for your system, something like:

brew install just
  or
cargo install just
  or
apk add just
  etc

Then build with

just build

which will create the binary bin/ggt (Make sure you add it to your $PATH)