1. Install truffle
Truffle is a command line tool to compile, deploy, and test smart contracts on blockchain. Before installing truffle, you want to install or upgrade the npm to the latest version. To install npm, use the following command:
$ sudo apt-get install npm
To upgrade npm, use the following command
$ sudo npm i -g npm
Run npm to install truffle
$ sudo npm install -g truffle
Note
Here -g is for global install so that truffle can be run from any directory
2. Use truffle tool
Once truffle is installed, you can type truffle to see a list of commands and options.
Usage: truffle <command> [options]
Commands:
init Initialize new and empty Ethereum project
compile Compile contract source files
migrate Run migrations to deploy contracts
deploy (alias for migrate)
build Execute build pipeline (if configuration present)
test Run JavaScript and Solidity tests
debug Interactively debug any transaction on the blockchain (experimental)
opcode Print the compiled opcodes for a given contract
console Run a console with contract abstractions and commands available
develop Open a console with a local development blockchain
create Helper to create new contracts, migrations and tests
install Install a package from the Ethereum Package Registry
publish Publish a package to the Ethereum Package Registry
networks Show addresses for deployed contracts on each network
watch Watch filesystem for changes and rebuild the project automatically
serve Serve the build directory on localhost and watch for changes
exec Execute a JS module within this Truffle environment
unbox Download a Truffle Box, a pre-built Truffle project
version Show version number and exit
See more at http://truffleframework.com/docs
3. Initiate, compile, and deploy a truffle project for Wanchain
Make a truffle directory
$ mkdir wanchain-example
Initialize the truffle project
3.1 Initiate
In the truffle project directory,execute:
$ truffle initOnce a truffle project is initialized, several directories will be created, including
- contracts : where the source contracts are supposed to reside
- migrations : where the deployment scripts are supposed to reside
- test : where the test files are supposed to reside
- build : the contract compiled result will be put here, created after running truffle compile or truffle migrate.
- truffle-config.js : The configuration file provides default setup parameters for the project
- truffle.js : This provide truffle smart contract parameters
The directory will be like below:
3.2 compile
In the truffle project directory, execute the command:
$ truffle compileIf the compilation is successful, a build directory will be created and abi files will be generated under build/contracts/ directory.These abi files can then be deployed as smart contract.
3.3 Config
Setup truffle.js file to specify the network setting etc.
module.exports = { networks: { development: { host: 'localhost', port: 8545, network_id: '*', gas: 4000000, gasPrice: 180e9, // following address needed to be replaced with unlocked account on gwan node from: '0x8f84573C8BaB4d56FDdB48cc792424E8816908fB' } } }Add deploy script for contract in the directory migrations in the truffle project:
Such as the deploy script name is 2_deploy_contracts.js which will deploy the contract PollApp.sol in the contract directory, the script will be as following:
var PollApp = artifacts.require("./PollApp.sol"); module.exports = function(deployer) { deployer.deploy(PollApp); };3.4 start gwan node on local host
Run following command in the directory which include gwan
$ ./gwan --rpc --testnet --rpcapi eth,net,admin,personal,wan --verbosity=0 consoleIn the gwan console to unlock a existing wanchain account in gwan node and make sure there are balance in the unlocked account, this account need to be same with the from address in the file truffle.js
3.5 deploy contracts
Execute command in the truffle project directory:
$ truffle migrate --network developmentThe result will be as following:
4. Test deployed smart contract
4.1 test script
Truffle support test for the contract, the test script should put in the directory “test” in the truffle,the test script maybe look like this:
var solc = require('solc'); var Web3 = require('web3'); const PollApp = artifacts.require('./PollApp.sol'); contract('PollApp', ([owner]) => { let PollAppInstance; before('set up contract before test', async () => { await web3.personal.unlockAccount(owner, '****', 9999); //create instance PollAppInstance = await PollApp.new({from: owner}); }) it('test case - 001', async () => { await PollAppInstance.XXX()({ from: owner }); assert.equal(..., ..., 'description...'); }) })4.2 start test
In the directory of the truffle project, execute the command:
$ truffle test or specify to execute one test script $ truffle test ./test/XXX.jsThis command will execute the test script in the directory “test” of truffle project. The result may look like this: