Jacky Gu

Truffle常用命令

26 Apr 2018 Share to

1、编译合约

rm -rf build/
truffle compile

2、启动以太坊开发环境

truffle develop

在一个终端执行

3、部署合约

truffle migrate [--network <name>] [--reset]

默认部署到测试网络,在truffle.js中配置 network的development 部署时,执行的是migrations目录下的js文件。

注:如何解决部署合约时出现的out of gas,或者exceed gas limit:

3.1 out of gas问题,默认情况下,合约所耗用的Gas不能超过6721957,如果程序过大,就会出现out of gas报错。可以通过检查程序代码bug,或者将合约拆分成多个小合约来部署并相互调用。

3.2 exceed gas limit问题,如果在truffle.js或者2_deploy_contracts.js中设定的gas超过链默认的gas limit,就会出现这个报错。

4、打开调试终端控制台

truffle console [--network <name>]

根据truffle.js配置文件启动控制台

5、执行合约中函数和调用变量

5.1 实例定义:

let instance = await 合约名称.deployed()

5.2 复制到contract:

合约名称.deployed().then(instance => contract = instance)

5.3 执行合同中的函数:

contract.函数名(参数)

注意:

  • 地址address、字符串string类型的,要用引号

5.4 获取公共变量:

contract.变量名.call()

5.5 获取第N个钱包地址:

web3.eth.accounts[1]

默认建立10个钱包

5.6 获取所有钱包:

web3.eth.accounts

返回数组

5.7 切换钱包:

web3.defaultAccount = web3.eth.accounts[1]

5.8 合约创建者钱包:

web3.eth.coinbase

6、新建一个新项目

truffle init

7、改变truffle测试网络端口号

Truffle默认打开9545端口,如果无法在truffle.js中通过配置参数改变端口,可以采取以下方法:

搜索truffle执行文件:

which truffle

现实文件位置:/usr/local/bin

vi /usr/local/bin/truffle

找到9545字符串,改成8545,然后重新启动truffle测试网络truffle develop,即可。

通过以上方式,可以在metamask中调用8545端口的本地以太网测试网络。

8、JS中调用合约

8.1 定义合约变量
var abiData = [];//abi文件
var contractAddress = "";//合约地址
8.2 链接钱包
window.addEventListener('load', function () {
    if (typeof web3 !== 'undefined') {
        web3 = new Web3(web3.currentProvider);
    	// web3 = new Web3("https://rinkeby.infura.io/8U0AE4DUGSh8lVO3zmma");
    } else {
    	// set the provider you want from Web3.providers
    	web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));
    }
    
    //定义合约
    contract = new web3.eth.Contract(abi, contractAddress);
}
8.3 调用合约方法
contract.methods.合约方法名(变量).call()
    .then((result) => {
        本地处理方法名(result);
    })
    .catch((error) => {
        console.log("错误");
        return(0);
    });

8.4 调用合约public变量
globMainContract.methods.变量名().call()
.then((result) => {
    alert(result);
});

注意变量名后要加`()

8.5 合约更新后需要调整的东西
  • 重新编译并部署合约
  • 将新的合约地址更新到javascript的配置文件中
  • 将新的abi内容更新到javascript的配置文件中,abi文件在目录./build的与合约同名的json文件中。