Tanya S 1f6a2eab90
chore: Add token management tool (#116)
* Add token management interface

* remove git tracking of certain python files

* add additional token management functions

* Update global variables in token management tool

* clean up contract ABI

* Add comments to refer to helper function descriptions

* Clarify token-management tool usage in README
2026-01-21 19:09:09 +02:00

3.8 KiB

token-management

CLI utility for interacting with the TestStableToken ERC-20 used by the Logos Messaging RLN v2 contract tests.

Point it at a deployed token contract (proxy) and an Ethereum JSON-RPC endpoint to:

  • Read token state (e.g. balance, allowance, total/max supply, owner, proxy implementation).
  • Perform write operations like mint/transfer/approve and minter/ownership management (requires PRIVATE_KEY).

For the semantics and intended use of TestStableToken itself, see the TST README.

Configuration

Set the following environment variables (or use a .env file):

  • TOKEN_CONTRACT_ADDRESS: The token contract proxy address
  • RLN_CONTRACT_ADDRESS: The RLN contract proxy address
  • RLN_RELAY_ETH_CLIENT_ADDRESS: The Ethereum JSON-RPC endpoint
  • ETH_FROM: The default user account address of the deployer/owner of the TestStableToken contract
  • PRIVATE_KEY: Private key for the ETH_FROM account, it will lbe used for write operations (transfer, mint)

Usage

The interactions.py script provides a CLI interface for all token operations.

Read-Only Commands (no PRIVATE_KEY required)

Get total supply:

python3 tools/token_management/interactions.py total-supply

Get max supply:

python3 tools/token_management/interactions.py max-supply

Get token contract owner:

python3 tools/token_management/interactions.py owner

Get token implementation address:

python3 tools/token_management/interactions.py implementation

Get balance (defaults to USER_ACCOUNT_ADDRESS from env):

python3 tools/token_management/interactions.py balance
python3 tools/token_management/interactions.py balance 0xYourAddress

Get allowance (defaults to USER_ACCOUNT_ADDRESS and RLN_CONTRACT_PROXY_ADDRESS):

python3 tools/token_management/interactions.py allowance
python3 tools/token_management/interactions.py allowance 0xOwner 0xSpender

Check if address is a minter (defaults to USER_ACCOUNT_ADDRESS):

python3 tools/token_management/interactions.py is-minter
python3 tools/token_management/interactions.py is-minter 0xAddress

Write Commands (PRIVATE_KEY required)

All write commands accept an optional --private-key flag to specify a custom private key. If not provided, the PRIVATE_KEY environment variable will be used.

Transfer tokens:

python3 tools/token_management/interactions.py transfer 0xRecipient 100.5
python3 tools/token_management/interactions.py transfer 0xRecipient 100.5 --private-key 0xYourPrivateKey

Mint tokens:

python3 tools/token_management/interactions.py mint 0xRecipient 1000
python3 tools/token_management/interactions.py mint 0xRecipient 1000 --private-key 0xYourPrivateKey

Approve spender to use tokens:

python3 tools/token_management/interactions.py approve 0xSpender 500
python3 tools/token_management/interactions.py approve 0xSpender 500 --private-key 0xYourPrivateKey

Transfer contract ownership:

python3 tools/token_management/interactions.py transfer-ownership 0xNewOwner
python3 tools/token_management/interactions.py transfer-ownership 0xNewOwner --private-key 0xYourPrivateKey

Add minter role to an account:

python3 tools/token_management/interactions.py add-minter 0xAccount
python3 tools/token_management/interactions.py add-minter 0xAccount --private-key 0xYourPrivateKey

Remove minter role from an account:

python3 tools/token_management/interactions.py remove-minter 0xAccount
python3 tools/token_management/interactions.py remove-minter 0xAccount --private-key 0xYourPrivateKey

Help

View all available commands:

python3 tools/token_management/interactions.py --help