智能合约调用示例

fabric智能合约开发的相关API return shim.Error(fmt.Sprintf("获取账户 %s 余额失败:%s", fromAccount, err))return shim.Error(fmt.Sprintf("更新账户 %s 余额失败:%s", fromAccount, err))return shim.Error(fmt.Sprintf("获取账户 %s 余额失败:%s", toAccount, err))return shim.Error("获取账户"+args[0]+"余额发生错误:"+err.Error()) 阅读详情

故事是这样的,有5个小伙伴,他们为 黄豆芽, 黑豆芽绿豆芽 中的哪种最好吃发生了分歧,于是它们准备发起一个投票。但是大家都希望投票的过程是完全去中心化的…最后他们决定使用区块链智能合约来解决这个问题

准备工作
  • 启动geth(为了更快的打包,建议dev模式),新建5个账户,并把defaultAccount(如果没有设置一般为eth.accounts[0]) 解锁,保证defaultAccount账户里面有一定的资产
  • 把合约部署(合约代码戳这里)上去,楼主这里使用的是 truffle部署合约,其它的方式也是可以的;另外,部署合约的时候,需要给构造器传一个数组参数,楼主这里给的是 var proposalNames = ['huangDY', 'lvDY', 'heiDY']; 即3个候选选项
root@ubuntu:~/contract/ballot# truffle migrate
Running migration: 1_initial_migration.js
  Deploying Ballot...
  Ballot: 0x6b2ddc515fc610690e34dfbd4915698b75add647
Saving successful migration to network...
Saving artifacts...

上述 Ballot 后面那串即合约存储地址

开始调用

此处要展示的是一个投票的全过程

合建合约实例
var ballotInstance = eth.contract(abi).at(addr);

addr 和 abi是分别赋值为合约存储地址 和 合约abi的变量。此过程不是一个交易,所以无需继续挖矿

验证合约实例是否正确
["0x6875616e67445900000000000000000000000000000000000000000000000000", 0]
> web3.toUtf8('0x6875616e67445900000000000000000000000000000000000000000000000000')
"huangDY"

可以看到合约已经部署上去了,实例也已成功。如果把参数换为 1、2可以分别得到另外两个候选项

分配投票权

这里先给 eth.account[1] 分配投票权

> ballotInstance.giveRightToVote.sendTransaction(eth.accounts[1], "xiaoA", {from:eth.accounts[0], gas:4700000});
I1226 21:08:07.308936 internal/ethapi/api.go:1047] Tx(0xe7fa31e646f6aefe804f3fc4bf3563a05993c58609270210590f62a5f5b03703) to: 0x6b2ddc515fc610690e34dfbd4915698b75add647
"0xe7fa31e646f6aefe804f3fc4bf3563a05993c58609270210590f62a5f5b03703"

注意,这里如果是第一次调用使用合约方法一定要加gas参数 否则会调用失败。可以看到这是一个新的交易,继续挖矿,让矿工打包…验证一下,投票权是否已经分配成功

> ballotInstance.voters(eth.accounts[1])
["0x7869616f41000000000000000000000000000000000000000000000000000000", false, 0, 1482757798, 0]
> web3.toUtf8('0x7869616f41000000000000000000000000000000000000000000000000000000');
"xiaoA"

如上,eth.accounts[1] 已经分配了投票权。继续,给其它4个账户也分配权限,分配完之后查看一下

> ballotInstance.votersNum()
5
开始投票

此步骤需要保证参与投票的账户都有资产,否则调用合约方法的时候会失败。这里先用 eth.accounts[0] 给1号绿豆芽(序号是从0开始的)投票

> ballotInstance.vote.sendTransaction(1, {from:eth.accounts[0], gas:4700000})
I1226 21:24:02.752948 internal/ethapi/api.go:1047] Tx(0xddb8efc2083b32fca5bdf99877408638fb1fa2ba95be221473653e234ca0b6a5) to: 0x6b2ddc515fc610690e34dfbd4915698b75add647
"0xddb8efc2083b32fca5bdf99877408638fb1fa2ba95be221473653e234ca0b6a5"

继续挖矿,待打包后查看下投票是否成功

> ballotInstance.winningProposalIndex()
1
> ballotInstance.winnerName()
"0x6c76445900000000000000000000000000000000000000000000000000000000"
> web3.toUtf8('0x6c76445900000000000000000000000000000000000000000000000000000000');
"lvDY"

可以看到,票数最多的是lvDY, 其它默认是0票。可以继续再用其它的账户进行投票,并查看最终的投票结果

原文地址: https://bitshuo.com/topic/58611e404dea36e72c1b3786

python智能合约编程_技术指南 | Python智能合约开发?看这一篇就够了 01 前言在之前的技术视点文章中,我们介绍了目前本体主网支持的智能合约体系以及相应的智能合约开发工具 SmartX。很多小伙伴都想上手练一练。在本期的技术视点中,我们将正式开始讲述智能合约语法部分。本体的智能合约 API 分为7个模块,分别是 Blockchain & Block API、Runtime API、Storage API、Native API、Upgrade API、Exec... 阅读详情

相关推荐

区块链学习笔记21——智能合约

二十一、智能合约 智能合约以太坊的精髓,也是以太坊和比特币一个最大的区别。 什么是智能合约智能合约的本质是运行在区块链上的一段代码,代码的逻辑定义了智能合约的内容 智能合约的账户保存了合约当前的运行状态 balance:当前余额 nonce:交易次数 code:合约代码 storage:存储,数据结构是一颗MPT Solidity是智能合约最常用的语言,语法上与JavaScript很接近 智能合约的代码结构 Solidity是面向对象的变成语言,这里的contrac

qq_44293330的博客 7596

微信小程序-组织圈(小程序(引流能力)+区块链(智能合约))+ 身份链

微信小程序-组织圈(小程序(引流能力)+区块链(智能合约))+ 身份链-源码

web3智能合约交互

web3智能合约交互调用只读方法安装依赖调用方法代码示例发送交易安装依赖调用方法代码示例 调用只读方法 调用合约的只读查询方法,不需要发送任何交易。因此不会改变合约的状态。 安装依赖 npm install web3 npm install fs 调用方法 myContract.methods.myMethod([param1[, param2[, ...]]]).call(options[, callback]) 参数说明 options - Object : 选项,包含如下字段: from -

ddjc123的博客 3360

一起学智能合约之八API

一起学智能合约之八API 就像学习任何一门语言,官方的库总是少不了,如何调用官方的库,其实就是API接口的调用,在Solidity中也有相关的API。 Solidity的API分为以下几类: 1、区块和交易的属性 2、错误处理 3、数学及加密功能 4、地址相关 5、合约相关 一、区块和交易 1、block.blockhash(uint blockNumber) returns (bytes32)...

fpcc的专栏 1005

FISCO BCOS 搭建区块链,在SpringBoot中调用合约

firewall-cmd --zone=public --remove-port=20201/tcp --permanent #关闭端口。firewall-cmd --zone=public --add-port=20201/tcp --permanent # 开放端口。firewall-cmd --zone=public --list-ports # 查看防火墙所有开放的端口。fisco.contractAddress.account.accountAddress:测试用户地址;

yueyue763184的博客 6163

【精解】开发一个智能合约

智能合约 这两天被老大搞去搬砖,学习计划有变但无大碍,这篇文章将仔细分析智能合约相关内容。 关键字:智能合约,remix,Solidity,truffle,geth,leveldb,datadir,ganache,web3j 合约 合约也称合同、协议,是甲乙双方参与的,制定一系列条目规范双方权利与义务的文件。智能合约是电子化的,自动执行的,去中心化的,具有不可抵赖性,本质上它是一段代码,依...

weixin_30747253的博客 1702

智能合约】客户端和web端对智能合约的事件Event进行调用的代码示例

客户端和web端对智能合约的事件Event进行调用的代码示例web truffle按官网的例子 http://truffleframework.com/boxes/pet-shoptruffle作为一个运行测试框架,用的也是web3对智能合约进行调用。文件所在的位置src/js/app.js initWeb3: function() { // web3入口 if (type

Code Metaverse 7586

Web3j使用示例(四)——Java中调用以太坊智能合约

Web3j使用示例,主要是帮助大家在java中使用以太坊,本章分享如何在java中调用以太坊智能合约

starchou666的博客 848

java智能合约实例_【智能合约】客户端和web端对智能合约的事件Event进行调用的代码示例...

客户端和web端对智能合约的事件Event进行调用的代码示例web truffle按官网的例子truffle作为一个运行测试框架,用的也是web3对智能合约进行调用。文件所在的位置src/js/app.jsinitWeb3: function() {// web3入口if (typeof web3 !== 'undefined') {App.web3Provider = web3.currentP...

weixin_39759995的博客 381

test-dapp示例智能合约精讲:ERC20 Permit、MultisigWallet与Piggybank部署与调用完全指南

test-dapp 是 MetaMask 扩展官方用于端到端(e2e)测试与人工 QA 的示例 DApp。它内置了 ERC20(支持 ERC20 Permit 免 Gas 授权)、MultisigWallet 多签钱包和 Piggybank 存钱罐三个经典示例智能合约。本文带你从新手视角完整走通这些 test-dapp 示例智能合约的部署与调用方法,理解 ERC20 Permit 签名、多签确认机

gitblog_00824的博客 478

区块链笔记:智能合约之合约调用方式,RPC/IPC调用,常用RPC调用框架,关于web3对象,基于Nodejs示例

合约调用方式 合约调用的三种方式 IPC方式 通常是通过控制台的方式 以太网的节点在运行之后,可以打开一个控制台 在控制台里面呢通过输入命令的方式,可以来调取一些智能合约的方法 IPC的方式也成为管道通信 主要是进程之间的一个调用方式 HTTP的方式 这个是比较常见的一些方式 通常是使用JSON格式来做数据的序列化与反序列化 也就是HTTP的JSON RPC的方式 websocke...

Wang的专栏 1893

【fisco bcos】基于ABI调用智能合约

参考官方文档:https://fisco-bcos-documentation.readthedocs.io/zh-cn/latest/docs/sdk/java_sdk/assemble_transaction.html。(就是一个很简单的插入和查找嗯)(也就是一个很简单的例子)

weixin_51076267的博客 626

solidity 智能合约之间的调用

智能合约之间的调用 在区块链上,有些功能往往无法通过一个智能合约完成,此时便会用到智能合约之间的调用。本篇文章带大家通过具体示例来了解一下智能合约之间的调用。 在智能合约的编译过程中,有两种情况:调用者和被调用者在一个sol文件中和分别在不同的文件中。 同sol文件的智能合约调用 在下面的智能...

chunxie2315的博客 510

使用web3调用智能合约的简单例子

当使用Solidity语言开发完成一个智能合约并部署后,如何在一个Web应用程序(或者手机App)中调用它?使用web3.js库,可以很容易的做到这些。通过一个最简单的例子我们来看看如何做到这些,分为三个步骤。 1. 编写智能合约 简单起见,我们直接使用Remix自带的Storage.so合约l例子,就是简单的存储和获取一个整数数值。 pragma solidity >=0.4.22 <0.7.0; /** * @title Storage * @dev Store & retre

wumingzhifu的博客 9682
上一篇: 以太坊geth结构解析和源码分析
下一篇: Truffle3.0集成NodeJS并完全跑通(附详细实例,可能的错误)
Omni-Space
博客等级 码龄11年 2157粉丝 23原创
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值