第33节:Solgraph
概述
Solgraph可以图形化的展示合约的结构,使用不同颜色标注合约的函数,从而尽可能的暴漏问题,为合约审计提供便利。
Legend:
- Red: Send to external address
- Blue: Constant function
- Yellow: View
- Green: Pure
- Orange: Call
- Purple: Transfer
- Lilac: Payable
合约
编写合约MyContract.sol
contract MyContract {
uint balance;
function MyContract() {
Mint(1000000);
}
function Mint(uint amount) internal {
balance = amount;
}
function Withdraw() {
msg.sender.send(balance);
}
function GetBalance() constant returns(uint) {
return balance;
}
}
安装
npm install -g solgraph
执行
solgraph MyContract.sol > MyContract.dot
此时生成文件MyContract.dot,内容如下:
strict digraph {
MyContract
Mint [color=gray]
Withdraw [color=red]
UNTRUSTED
GetBalance [color=blue]
MyContract -> Mint
Withdraw -> UNTRUSTED
}
渲染图片
# 安装渲染工具
brew install graphviz
# 执行渲染
dot -Tpng MyContract.dot -o MyContract.png
# Mac用户可以使用内置工具Preview.app查看方式
pbpaste | solgraph | dot -Tpng | open -f -a /Applications/Preview.app
执行效果
图形化
send已经呗废弃了,不安全,这里暴露了出来,应该使用transfer或者call来处理(记得校验返回值)