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
文件中。