以太坊研究系列【geth客户端调用mist部署的智能合约】

in #ethereum7 years ago (edited)

此文档为个人整理学习使用,部分内容来源于网络,也期待能给你带来益处

  • 在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的“显示界面”找到,如下:

title

在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;炒股十余年,从亏损几十万到略有盈利;顺应创业大潮多次创业,在传统行业和手游行业有所获;研习佛学易理,性格淡泊清净!

欢迎有兴趣的朋友加入微信群和电报群,一起学习探讨,一起实现咱们的小目标!

  • 百分百区块链群,微信扫码后会再显示一个二维码,长按图片“识别图中二维码”加入!


Coin Marketplace

STEEM 0.17
TRX 0.16
JST 0.029
BTC 61436.18
ETH 2381.46
USDT 1.00
SBD 2.55