## Quickstart
npm install contract-state-util> npm install -g contract-state-util
> contract-state-util -t ./truffle.js --port=3000
Run the above anywhere, just pass the location of your app's truffle.js config file
---
This tool will parse all of your contracts for variables, and output their current state on localhost:3000 in the following format:
``
Contract States
___________________________________________________________
Contract Name: ExampleContractName (Node ID: 1234)
State Name | Type | Inputs | Value
-----------------------------------------------------------
varName | varType | {index: {inName, inType}} | varValue
Base Contracts:
-----------------------------------------------------------
Contract Name: ExampleBaseContractName
___________________________________________________________
`
##### Note: Node ID above is taken from the contract's artifact.
First, setup-artifacts.js grabs the artifacts from your build/contracts folder and creates a file called lib/artifacts.js which exports all of your artifacts for consumption by contracts.js.
The contracts.js magic works as follows:
* imports all artifacts from the previous step's generated lib/artifacts.jscontract()
* truffle-contract's function is used to create a contract object for each artifactgetContractState()
* When the dashboard is loaded it sets each contract object's provider as the current web3 provider
* invokes a dynamic contract getter function, contractFunc, on each contract leveraging .call() on each variable that is public. This is done by parsing the arifacts for variables and then invoking the call function on the contract object previously created.
Note: the current incarnation does not work on advanced types such as enums or structs. Additionally, array and mapping types are mocked (a static index or key is passed in by default and only fetches that key/index). Support is needed to add dynamic calling or manual user calling.
---
> npm install -g contract-state-util
---
#### Prerequisites:
* A MetaMask enabled browser to use the web UI
* A Truffle application with some smart contracts
> truffle develop
In truffle's console:
> deploy
From the command-line:
> contract-state-util
``
Options:
--version Show version number [boolean]
-t, --truffleConfigLoc truffle.js location [required]
--port port to launch state dashboard
-h, --help Show help [boolean]
#### For example:
> contract-state-util -t ./truffle.js --port=3000
#### Example Input:
Contract: States.sol
`solidity
pragma solidity ^0.4.20;
contract States {
//int 8 ->256
int8 public _int8 = 0;
int public _int = 0;
//uint8 ->256
uint8 public _uint8 = 0;
uint public _uint = 0;
//address
address public _address = this;
//bytes1..32
bytes public _bytes = "0x0";
//string
string public _string = "string";
//bool
bool public _bool = true;
//mapping all types
mapping(uint => uint) public _mappingUintToUint;
mapping(int => uint) public _mappingInttoUint;
mapping(bytes32 => uint) public _mappingBytes32ToUint;
mapping(address => uint) public _mappingAddressToUint;
mapping(bool => uint) public _mappingBoolToUint;
mapping(bool => bool) public _mappingBoolToBool;
mapping(bool => address) public _mappingBoolToAddr;
mapping(bool => mapping(uint=>uint)) public _mappingBoolToMapping;
function States() public {
_mappingBoolToMapping[true][0] = 1;
}
function setString(string change) public {
_string = change;
}
}
`
Contract: MoreStates.sol
`solidity
pragma solidity ^0.4.20;
contract MoreStates {
int public _int2 = 1;
uint public _uint2 = 1;
string public _string2 = "string2";
bool public _bool2 = false;
address public _address2 = this;
bytes public _bytes2 = "0x0";
}
``
#### Example Output:
Using:
> contract-state-util -t ./truffle.js --port=3047
Then navigate to http://localhost:3047/ to get output similar to the following: