主要函数
kill:selfdestruct 是 ethereum 智能合约自带的自毁程序,kill对此方法进行了封装,只有合约的拥有者才可以调用该方法;
greet:返回合约 greeter 里的 greeting属性的值;
代码运行分析
第一步 生成智能合约代码对象
我们先把合约代码smartContract_example01.sol 压缩为一行.新建一个ssh session, 切换到geth用户环境su - geth, 然后输入:cat smartContract_example01.sol | tr '\n' ' '. 切换到以太坊控制台,把合约代码保存为一个变量:
var greeterSource = 'contract mortal { address owner; function mortal() { owner = msg.sender; } function kill() { if (msg.sender == owner) selfdestruct(owner); } } contract greeter is mortal { string greeting; function greeter(string _greeting) public { greeting = _greeting; } function greet() constant returns (string) { return greeting; } }'
复制
第二步 编译合约代码
然后编译合约代码:
var greeterCompiled = web3.eth.compile.solidity(greeterSource)
复制
greeterCompiled.Token.code可以看到编译好的二进制代码 greeterCompiled.Token.info.abiDefinition可以看到合约的ABI
第三步 设置希望返回的字符串
var _greeting = "Hello World!"
复制
第四步 部署合约
接下来我们要把编译好的合约部署到网络上去.
首先我们用ABI来创建一个javascript环境中的合约对象:
var greeterContract = web3.eth.contract(greeterCompiled.greeter.info.abiDefinition);
复制
我们通过合约对象来部署合约:
var greeter = greeterContract.new(_greeting,{from:web3.eth.accounts[0], data: greeterCompiled.greeter.code, gas: 300000}, function(e, contract){
if(!e) {
if(!contract.address) {
console.log("Contract transaction send: TransactionHash: " + contract.transactionHash + " waiting to be mined...");
} else {
console.log("Contract mined! Address: " + contract.address);
console.log(contract);
}
}
})
复制
greeterContract.new方法的第一个参数设置了这个新合约的构造函数初始化的值