Solidity truffle,通过web3.js部署合约、调用合约

安装truffle: npm install -g truffle    (依赖Node.js和npm)

测试安装是否成功:truffle version

创建truffle项目:truffle init

启动truffle的开发环境(虚拟私有链):truffle develop   (每次启动都会自动创建10个账户,账户不会持久化)

 

contracts/math.sol(创建一个简单合约):

pragma solidity ^0.4.21;

contract Math {
    function addFunc(uint a, uint b) pure public returns (uint){
        return a + b;
    }
}

编译合约:solcjs --abi --bin xxx.sol    (把合约编译成.abi和.bin文件。solcjs是truffle提供的工具)

 

通过web3.js部署合约、调用合约:

安装web3.js: npm install web3

deploy.js(通过web3.js部署合约):

var Web3 = require('web3');  // 导入web3模块
var fs = require('fs');    // fs模块读取.sol合约文件

// 通过web3连接私有链。 (web3通过geth连接区块链中的结点)
var web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:9545"));  // 通过geth连接私有链中的结点。 


var abi = JSON.parse(fs.readFileSync("math_sol_Math.abi"));  // 读取编译合约的abi文件。
var bytecode = fs.readFileSync("math_sol_Math.bin");  // 读取编译合约的二进制文件。

var contract = web3.eth.contract(abi);  // 创建合约对象。

// 部署合约。 from表示部署合约的账户地址。
contract.new({data:bytecode, from : web3.eth.accounts[0], gas:1000000}, 
	function(error, result)	{  // 部署合约的回调函数
		if (!error){
			console.log(result.address);  // 部署后的合约地址
		}else {
			console.log(error);
		}
	});

通过Node.js执行deploy.js: node deploy.js

call.js(通过web3.js调用合约):

var Web3 = require('web3');
var fs = require('fs')

// 连接私有链
var web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:9545"));


var abi = JSON.parse(fs.readFileSync("math_sol_Math.abi"));

var address = '0xbd2c938b9f6bfc1a66368d08cb44dc3eb2ae27be';  // 合约地址

var contract = web3.eth.contract(abi);

var instance = contract.at(address);  // 通过合约地址得到合约

console.log(instance.addFunc.call(10, 20));  // 调用合约中的addFunc方法。

console.log(instance.addFunc(10, 20, {from : web3.eth.accounts[0]}));  // 可以指定调用合约的用户地址

通过Node.js执行call.js: node call.js


web3.js与以太坊的关系:

Solidity truffle,通过web3.js部署合约、调用合约_第1张图片

 

 

你可能感兴趣的:(Solidity)