智能合约的部署之后需要记住abi和合约地址,方便以后调用。
定义合约的abi
var abi = [ { "constant": false, "inputs": [ { "name": "s", "type": "uint256" } ], "name": "getSum", "outputs": [ { "name": "Sum", "type": "uint256" } ], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "payable": false, "stateMutability": "nonpayable", "type": "constructor" } ]
定义合约地址:(注:此处需要 “” 号);
var address = “0x8926f6d1f56c66f80ceda0a89930dff5aa2b3928”
实例化合约:
var contract = eth.contract(abi).at(address);
此处可能需要解锁账户地址:(注:需要加 “” 号)
personal.unlockAccount("0x8926f6d1f56c66f80ceda0a89930dff5aa2b3928");
至此,智能合约实例化完毕。
调用智能合约有两种方式:
contract.getSum.call()
.call()用call被调用的时候,功能在以太坊虚拟机被本地执行,功能返回值和功能一起返回。用这种方式进行的调用不会记录在区块链上,因此也不会改变合约内部状态。这种调用方式被称为恒定功能调用。
contract.getSum.sendTranstaction(参数,{from:"0x12345555"})
.sendTransaction()当用sendTransaction被调用的时候,功能调用通过发送交易来执行。需要花费以太币来发送,调用会永久记录在区块链上。用这种方式进行的调用返回值是交易散表。