Documenting Solidity using diagrams
Nick Addison, Origin Protocol
naddison
sol2uml
Repo https://github.com/naddison36/sol2uml
NPM sol2uml
Install npm link sol2uml --only=production
Usage sol2uml [command] [options]
License MIT
sol2uml commands
class UML class diagram
storage Display contract's storage slots
diff Compare Etherscan source files
flatten Merge Etherscan source files into a local file
Class command
sol2uml class [options] <filesFoldersAddress>
class is default command so can be dropped
filesFoldersAddress comma-separated file names, folders or contract address
Class - Etherscan
sol2uml 0xC02a…6Cc2
Generate a WETH9.svg file
Class - Local file
sol2uml ./contracts/token/OETH.sol
Class - Local folder
sol2uml ./node_modules/@openzeppelin/contracts
Three diagrams to document a contract
Class - Origin Vault Hierarchy
Class - contract hierarchy
sol2uml . -b VaultCore,VaultAdmin -hv -hf -he -hs -hl -hi
-b, --baseContractNames
-hv, --hideVariables
-hf, --hideFunctions
-he, --hideEnums
-hs, --hideStructs
-hl, --hideLibraries
-hi, --hideInterfaces
Class - OETH Oracle Hierarchy
sol2uml . \
-hv -hf -he -hs -hl -hi \
-b OETHOracle,OETHOracleUpdater
Class squashed
sol2uml . -s -d 0 \
-b OETHOracle
options
-s, --squash
-d, --depth <value>
-b, --baseContractNames
Class - squashed, depth = 1
Class - squashed public
sol2uml . -s -d 0 -b OETHOracle \
-hp -hm -ht -hsc
options
-hp, --hidePrivates
-hm, --hideModifiers
-ht, --hideEvents
-hsc, --hideSourceContract
Storage command
sol2uml storage [options] <filesFoldersAddress>
filesFoldersAddress comma-separated file names, folders or contract address
Storage - USDC
sol2uml storage 0xa232..bdcf -s 0xa0b..eb48
options
-s, --storage <address>
Storage - USDC data
Storage - USDC data
sol2uml storage 0xa232..bdcf -s 0xa0b..eb48 -d
Options
-d, --data
-s, --storage <address>
-u, --url <url> default: "http://localhost:8545", env: NODE_URL
Storage - USDC data at block
sol2uml storage \
0xa232..bdcf \
-s 0xa0b..eb48 -d \
-hv -bn 18500000
options
-hv, --hideValues
-bn, --block <number>
Storage - Matic on Polygon
sol2uml storage 0x00..01010 \
-n polygon -hv
options
-n, --network <network>
Storage - OETHOracle
sol2uml storage . -c OETHOracle
options
-c, --contract <name>
Storage - OETH Dripper
sol2uml storage 0x2fdfbb2b905484f1445e23a97c97f65fe0e43dec \
--data --storage 0xc0f42f73b8f01849a2dd99753524d4ba14317eb3 \
--slotNames OUSD.governor,OUSD.pending.governor,OUSD.reentry.status,0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc \
--slotTypes address,address,bool,address \
--hideValues
Storage - OETH Dripper
Generation script
README in contract folder
diff command
sol2uml diff [options] <addressA> <addressB or folders>
Diff - Etherscan to local
sol2uml diff 0xB06d..2A20 .,node_modules
Diff - Upgraded OETH Vault
sol2uml diff 0x1091..89F3 0xEA24..645c
Diff - Upgraded OETH Vault
sol2uml diff 0x1091..89F3 0xEA24..645c