@totems/evm
v1.0.11
Published
Totems EVM smart contracts for building modular token systems
Maintainers
Readme
@totems/evm
Solidity contracts and SDK for building Totems mods.
Installation
npm install @totems/evmOr with Foundry:
forge install nsjames/totems-evmPackage Structure
@totems/evm/
mods/ - TotemMod base contract & TotemsLibrary
interfaces/ - ITotems, IMarket, ITotemTypes, etc.
contracts/ - Core contracts (Totems, ModMarket, etc.)
constants/ - Network addresses
test/ - Test helpers (TypeScript)
validator/ - Mod validation toolMod Validator
Validates that mod contracts follow the setup pattern correctly.
CLI Usage
# Validate a single contract
npx @totems/evm validate ./contracts/MyMod.sol
# Validate all contracts in a directory
npx @totems/evm validate ./contracts/
# Strict mode - treat warnings as errors (for CI)
npx @totems/evm validate ./contracts/ --strict
# Output as JSON
npx @totems/evm validate ./contracts/ --json
# Generate required actions for market publish
npx @totems/evm validate ./contracts/MyMod.sol --actionsWhat It Checks
isSetupForAnalysis - Does your mod need setup? IfisSetupFordepends on state variables, setup is required.Setup Functions - Finds functions that modify state used by
isSetupFor.Validator Functions - Each setup function should have a corresponding validator:
setAcceptedToken()→canSetAcceptedToken()configure()→canConfigure()setup()→canSetup()
Access Control - Setup functions should have access control (e.g.,
onlyCreator).
Example Output
────────────────────────────────────────────────────────────
Contract: MinerMod
File: ./contracts/Miner.sol
isSetupFor: Depends on state
└─ Variables: totemsPerMine
Setup Functions:
┌─────────────────────────┬─────────────────────────┬─────────────┐
│ Function │ Validator │ Access │
├─────────────────────────┼─────────────────────────┼─────────────┤
│ setup │ canSetup() ✓ │ onlyCreator │
└─────────────────────────┴─────────────────────────┴─────────────┘
Result: PASS ✓Programmatic Usage
import { validateContract, formatResults } from '@totems/evm/validator';
const results = validateContract('./contracts/MyMod.sol');
console.log(formatResults(results));