从零开始以太坊区块链开发指南三

前言

上一篇我们介绍了如何部署智能合约,这一章我们将演示如何在Geth中调用智能合约。如果你还没有看上一篇介绍的内容,我建议你先看看上一篇从零开始以太坊区块链开发指南二


获取合约实例
有过编程经历的都知道,想要调用一个类里面的方法必须先获取这个类的实例,那么以太坊里面如何获取智能合约的实例呢,我们需要abi和上一篇我们部署的合约的地址

abi全称Application Binary Interface,它定义了如何与智能合约进行交互,我们可以把它理解成一个智能合约类的接口描述文件,当我们部署完智能合约之后,智能合约被编译成机器码,我们通过这个描述文件来知道这个智能合约有哪些接口,需要传递什么参数,返回什么值。

  1. 如何获取abi呢
    其实,当我们使用Truffle部署的时候,它已经帮我们生成了abi
目录结构

打开build文件夹下的contracts文件夹,里面生成了每个合约对应的json文件,打开这个json文件。我们就可以看到abi的具体描述


abi截图

我们copy出这个json里面abi的value,即"abi:"的值,"""需要注意的是"""我们使用的时候abi不能有空格和换行符,我使用bejson来压缩abi。压缩完的abi应该只有一行

[{"constant":false,"inputs":[{"name":"proposalIndex","type":"uint256"}],"name":"vote","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"proposals","outputs":[{"name":"name","type":"bytes32"},{"name":"voteCount","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"chairperson","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"winningProposalIndex","outputs":[{"name":"winningProposalIndex","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"voters","outputs":[{"name":"name","type":"bytes32"},{"name":"voted","type":"bool"},{"name":"vote","type":"uint256"},{"name":"givenRightTime","type":"uint256"},{"name":"votetime","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"winnerName","outputs":[{"name":"winnerName","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"voter","type":"address"},{"name":"voterName","type":"bytes32"}],"name":"giveRightToVote","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"proposalNames","type":"bytes32[]"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"}]
  1. 如何获取智能合约地址
    我们在上一步部署合约的时候
合约地址

红线框出的16进制代码 就是合约的地址

生成合约实例

步骤截图

具体命令

var addr = '0x5c99e3033ec4f8949df2b3cf391f9f3be64e0f823207af245d23ca7d9a96fe6c'
var abi = [{"constant":false,"inputs":[{"name":"proposalIndex","type":"uint256"}],"name":"vote","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"proposals","outputs":[{"name":"name","type":"bytes32"},{"name":"voteCount","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"chairperson","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"winningProposalIndex","outputs":[{"name":"winningProposalIndex","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"voters","outputs":[{"name":"name","type":"bytes32"},{"name":"voted","type":"bool"},{"name":"vote","type":"uint256"},{"name":"givenRightTime","type":"uint256"},{"name":"votetime","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"winnerName","outputs":[{"name":"winnerName","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"voter","type":"address"},{"name":"voterName","type":"bytes32"}],"name":"giveRightToVote","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"proposalNames","type":"bytes32[]"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"}]
var ballotInstance= eth.contract(abi).at(addr)

我们在命令行中查看ballotInstance

打印合约实例

我们尝试调用合约的方法proposals

调用截图

好了,如何调用合约,我们已经演示完了。如果你有什么疑问欢迎在

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,948评论 18 139
  • 前言 上一篇我们介绍了Geth的安装,今天我们介绍如何部署智能合约。如果你还没有看上一篇介绍的内容,我建议你先看看...
    世界的世界阅读 1,850评论 1 10
  • 本文是对以太坊文档 Ethereum Frontier Guide 和 Ethereum Homestead 的整...
    趁风卷阅读 9,591评论 0 16
  • “欲把西湖比西子,浓妆淡抹总相宜。 ”西湖,每见一次,都更爱一些。灯光点点,湖水如墨,夜色下更见沉静。这次注定不能...
    公子小白2020阅读 176评论 0 0
  • “生怕离怀别苦,多少事欲说还休。”于凤至,字翔舟,怀德县富商于文斗之女,1915年与张学良结为伉俪,1964年7月...
    海深不蓝心阅读 472评论 5 3