以太坊研究系列【geth客户端调用mist部署的智能合约】
此文档为个人整理学习使用,部分内容来源于网络,也期待能给你带来益处
- 在Mist钱包中部署以下合约:
pragma solidity ^0.4.11;
contract MetaCoin {
mapping (address => uint) balances;
event Transfer(address indexed _from, address indexed _to, uint256 _value);
function MetaCoin() public {
balances[tx.origin] = 10000;
}
function sendCoin(address receiver, uint amount) public returns(bool sufficient) {
if (balances[msg.sender] < amount) return false;
balances[msg.sender] -= amount;
balances[receiver] += amount;
Transfer(msg.sender, receiver, amount);
return true;
}
}
- 在geth客户端定义智能合约的interface,这个可以在Mist的“显示界面”找到,如下:
在geth客户端将这个json复制并赋值到abiMetaCoin
> var abiMetaCoin = [ { "constant": false, "inputs": [ { "name": "receiver", "type": "address" }, { "name": "amount", "type": "uint256" } ], "name": "sendCoin", "outputs": [ { "name": "sufficient", "type": "bool" } ], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "payable": false, "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": true, "name": "_from", "type": "address" }, { "indexed": true, "name": "_to", "type": "address" }, { "indexed": false, "name": "_value", "type": "uint256" } ], "name": "Transfer", "type": "event" } ];
undefined
获取智能合约地址,也是在Mist界面的“复制地址”得到,并赋值到addrMetaCoin,如下:
var addrMetaCoin = "0xAC13705322CB7C7b35544C2EE94fad0250C0e04D";
undefined取得智能合约实例,通过abi和合约地址取得智能合约实例:
var metacoin = web3.eth.contract(abiMetaCoin).at(addrMetaCoin);
undefined取到实例后,就通过call或者sendTransaction调用接口,更多参见【智能合约】篇
metacoin.sendCoin.sendTransaction(acc1, web3.toWei(1), {from:acc0});
"0x7bd501b9cd9690c03a31977372b5aa7b36f73342e4c44ee893a35f8af6fada91"合约事件
// 获取事件对象
var myEvent = metacoin.Transfer();
// 监听事件,监听到事件后会执行回调函数
myEvent.watch(function(err, result) {
if (!err) {
console.log(result);
} else {
console.log(err);
}
myEvent.stopWatching();
});
***************************************
作者简介
老鱼,从事互联网技术十余年,知名上市公司CTO;炒股十余年,从亏损几十万到略有盈利;顺应创业大潮多次创业,在传统行业和手游行业有所获;研习佛学易理,性格淡泊清净!
欢迎有兴趣的朋友加入微信群和电报群,一起学习探讨,一起实现咱们的小目标!
- 百分百区块链群,微信扫码后会再显示一个二维码,长按图片“识别图中二维码”加入!
- 电报群 https://t.me/blockchain100 希望以后能给先加入的人送一份大礼!