Chaincode Analyzer is a CLI tool to detect the codes which can be risks potentially such as nondeterminism in Chaincode (i.e., smart contract in Hyperledger Fabric) written in Golang.
- Clone this repository
go build ccanalyzer.go
./ccanalyzer [file | directory]
If Chaincode Analyzer find any risk, it outputs the followings.
- Category
- The type of risk
- e.g., Rand
- Function
- The function name which includes the risk
- e.g., init =>
func init() {}
- VarName
- The name of variable which related to the risk
- e.g., Aval
- Position
- The position of the code related to the risk
- e.g.,
example.go:122:14 Aval = rand.Float32()
- Affected Position
- The position of the code which is affected by the risk
- e.g.,
example.go:151:25 err = stub.PutState(A, Aval)
Currently, the tool can detect following risks. For more information about risks, please refer the paper.
- Random value
- Timestamp
- Iteration on map object
- Calling external API
- File access
- Pointer
- Global variable
- External library
- System commands
- Goroutine
- Range query risk
- Field declaration
- Read your write
- Cross channel Invocation
This tool is distributed under the Apache License Version 2.0, see LICENSE file.