今天有人问如何用按钮调用智能合约,我不知道在哪里找,所以我决定写这个,很快就可以。

image

在这篇文章中,我将给出一个简单但有希望有效的演示,说明JavaScript开发人员如何创建一个能够调用智能合约的网页,并通过单击即可向其汇款(以太币)。

要做到这一点,用户将需要使用支持Web3的浏览器,因此可以使用像Parity或Mist这样的可安装浏览器,或者他们可以使用像MetaMask这样的浏览器扩展。

此外,虽然我可以教你如何直接使用web3API,但我将教你如何使用一个新的很方便的库与以太网智能合约EthJS交互。

你的网站需要等待ready事件,然后检查全局web3对象。看起来像这样:

window.addEventListener('load', function() {// Check if Web3 has been injected by the browser:if (typeof web3 !== 'undefined') {// You have a web3 browser! Continue below!startApp(web3);} else {// Warn the user that they need to get a web3 browser// Or install MetaMask, maybe with a nice graphic.}})

从MetaMask开发人员指南中复制。

image

在这个例子中,我假设你正在使用像Browserify或Webpack这样的JavaScript捆绑器,并且知道如何从NPM安装模块。

在你的应用程序设置中,你将使用一些不同的ethjs模块,你将使用全局web3对象的currentProvider属性初始化它们,这就是它与区块链的对话方式。

const Eth = require('ethjs-query')
const EthContract = require('ethjs-contract')function startApp(web3) {const eth = new Eth(web3.currentProvider)const contract = new EthContract(eth)initContract(contract)
}

一旦实例化了合约,就可以使用它来创建对网络上实时合约的引用。要做到这一点,你需要两件事:

  • 合约地址。
  • 合约ABI。

ABI是应用程序二进制接口,它告诉你的JavaScript如何与智能合约通信。它只是描述合约方法的JSON数据。

通常,如果你发布合约,你知道如何获得ABI,如果你要与其他人签订合约,他们应该提供ABI,尽管有时候你可以找到与Etherscan等区块浏览器的合约相匹配的ABI。

假设你有可用的ABI和地址,并了解我们现在如何创建合约对象。在这个例子中,我将使用仅包含Token标准中的transfer(to,value)方法的ABI:

const abi = [{"constant": false,"inputs": [{"name": "_to","type": "address"},{"name": "_value","type": "uint256"}],"name": "transfer","outputs": [{"name": "success","type": "bool"}],"payable": false,"type": "function"}]
const address = '0xdeadbeef123456789000000000000'
function initContract (contract) {const MiniToken = contract(abi)const miniToken = MiniToken.at(address)listenForClicks(miniToken)
}

现在我们已经为智能合约初始化了一个JavaScript接口,所以我们只需要创建一个小HTML。

<button class="transferFunds">Send Money!</button>

还有一点JavaScript来响应点击,并发送这些资金:

function listenForClicks (miniToken) {var button = document.querySelector('button.transferFunds')button.addEventListener('click', function() {miniToken.transfer(toAddress, value, { from: addr }).then(function (txHash) {console.log('Transaction sent')console.dir(txHash)waitForTxToBeMined(txHash)}).catch(console.error)})
}

请注意,如果此交易也发送以太,你将向包含from字段的选项哈希添加value:'10000'。该值以wei为单位,为1x10 ^ -18以太。转换的简单方法是这样的:

var inWei = web3.toWei('10', 'ether')

对于普通的Web开发人员来说,一个奇怪的部分是交易响应并不意味着交易现在已经完成,它只是意味着它已经被传输到网络。它仍然需要被挖掘,而在以太坊中,平均需要大约14秒(阻断时间,查看EthStats.net上的统计数据)。

现在还没有很好的订阅方法可以等待挖掘交易,所以你需要用收到的txHash进行轮询。是的,这很乏味,所以我会告诉你如何使用新的JavaScript async/await模式来减少痛苦:

async function waitForTxToBeMined (txHash) {let txReceiptwhile (!txReceipt) {try {txReceipt = await eth.getTransactionReceipt(txHash)} catch (err) {return indicateFailure(err)}}indicateSuccess()
}

如此而已!(我知道,这很多)我希望这足以向你展示如何通过以太坊区块链与智能合约进行互动。一旦你习惯它,它就非常棒,因为它是一种具有权限的全局API,所以当你必须做一些有趣的事情,比如等待交易被挖掘,你不必做令人讨厌的事情,比如管理用户帐户和密码,或自己管理后端服务器!

======================================================================

分享一些以太坊、EOS、比特币等区块链相关的交互式在线编程实战教程:

  • tendermint区块链开发详解,本课程适合希望使用tendermint进行区块链开发的工程师,课程内容即包括tendermint应用开发模型中的核心概念,例如ABCI接口、默克尔树、多版本状态库等,也包括代币发行等丰富的实操代码,是go语言工程师快速入门区块链开发的最佳选择。
  • EOS教程,本课程帮助你快速入门EOS区块链去中心化应用的开发,内容涵盖EOS工具链、账户与钱包、发行代币、智能合约开发与部署、使用代码与智能合约交互等核心知识点,最后综合运用各知识点完成一个便签DApp的开发。
  • java以太坊开发教程,主要是针对java和android程序员进行区块链以太坊开发的web3j详解。
  • python以太坊,主要是针对python工程师使用web3.py进行区块链以太坊开发的详解。
  • php以太坊,主要是介绍使用php进行智能合约开发交互,进行账号创建、交易、转账、代币开发以及过滤器和交易等内容。
  • 以太坊入门教程,主要介绍智能合约与dapp应用开发,适合入门。
  • 以太坊开发进阶教程,主要是介绍使用node.js、mongodb、区块链、ipfs实现去中心化电商DApp实战,适合进阶。
  • C#以太坊,主要讲解如何使用C#开发基于.Net的以太坊应用,包括账户管理、状态与交易、智能合约开发与交互、过滤器和交易等。
  • java比特币开发教程,本课程面向初学者,内容即涵盖比特币的核心概念,例如区块链存储、去中心化共识机制、密钥与脚本、交易与UTXO等,同时也详细讲解如何在Java代码中集成比特币支持功能,例如创建地址、管理钱包、构造裸交易等,是Java工程师不可多得的比特币开发学习课程。
  • php比特币开发教程,本课程面向初学者,内容即涵盖比特币的核心概念,例如区块链存储、去中心化共识机制、密钥与脚本、交易与UTXO等,同时也详细讲解如何在Php代码中集成比特币支持功能,例如创建地址、管理钱包、构造裸交易等,是Php工程师不可多得的比特币开发学习课程。

汇智网原创翻译,转载请标明出处。这里是原文如何实现一键调用以太坊智能合约

如何实现一键调用以太坊智能合约相关推荐

  1. 区块链开发(二)部署和运行第一个以太坊智能合约

    区块链开发(二)部署并运行第一个以太坊智能合约 李赫2016年8月22日 本文首发8BTC 网络上不少部署智能合约的文章,但是都有一个共同的特点,就是采用命令行的方式来部署,先是建立SOLC的编译环境 ...

  2. 区块链兼容以太坊智能合约

    链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载. 引言 随着区块链技术以及应用的普及,越来越多的区块链出现在大众视野中.由于区块链技术的开源特性,任何公司和个人都可以方便 ...

  3. 以太坊智能合约开发第二篇:理解以太坊相关概念

    链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载. 很多人都说比特币是区块链1.0,以太坊是区块链2.0.在以太坊平台上,可以开发各种各样的去中心化应用,这些应用构成了以太 ...

  4. 区块链项目实战 - 使用以太坊/智能合约solidity,全栈开发区块链借贷记账小应用,含完整源码

    本文使用区块链平台以太坊+智能合约实现一个区块链记账的功能,具体为: 借款人和贷款人以及数额被记录在区块链中.使用区块链地址来表示借款人或者贷款人. 若一个借款人多次向一个贷款人借钱,更新所有的数额之 ...

  5. 以太坊智能合约预言机

    2019独角兽企业重金招聘Python工程师标准>>> 什么是预言机(oracle)?和以太坊智能合约开发是什么关系?在区块链去中心化的条件下如何实现预言机?面对这些疑惑首先来了解下 ...

  6. 以太坊智能合约开发第七篇:智能合约与网页交互

    原文发表于:以太坊智能合约开发第七篇:智能合约与网页交互 上一篇中,我们通过truffle开发框架快速编译部署了合约.本篇,我们将来介绍网页如何与智能合约进行交互. 编写网页 首先我们需要编写一个网页 ...

  7. 以太坊智能合约开发:让合约接受转账

    以太坊智能合约开发:让合约接受转账 在以太坊智能合约开发中,通常会有向合约地址进行转账的需求,那么有几种向合约地址进行转账的方式呢? 有三种方式: 部署合约时转账 调用合约提供的方法 直接向合约地址进 ...

  8. 教程 | 以太坊智能合约编程之菜鸟教程

    教程 | 以太坊智能合约编程之菜鸟教程 译注:原文首发于ConsenSys开发者博客,原作者为Eva以及ConsenSys的开发团队.如果您想要获取更多及时信息,可以访问ConsenSys首页点击左下 ...

  9. 如何通过构建以太坊智能合约来销售商品

    如何通过构建以太坊智能合约来销售商品?这是个问题. 毫无疑问,比特币已经改变了我们看待和理解什么是金钱,价值以及最近由智能合约产生的所有权的方式.这很有趣,因为几乎每个人都听说过它或加密货币.来自许多 ...

最新文章

  1. 如何解决IIS7上传文件大小限制【转】
  2. 年薪 50w 难吗?分享我的 2 个捷径
  3. springcloud Hystrix Dashboard微服务监控
  4. 关于laravel数据库问题
  5. Hadoop2源码分析-YARN 的服务库和事件库
  6. 自媒体视频剪辑12大技巧分享
  7. ExecuteSQL
  8. 大数据查询语句SQL
  9. 【2022】软著申请流程及注意事项分享一下
  10. 雷军考察小鹏汽车,IPO后的小米终于要造车了?
  11. idea gwt 怎么编译_带Spring Boot的GWT
  12. 为什么使用use strict可以节约你的时间
  13. v7000更换电池步骤_[原创]IBM V7000 SVC更换已经告警的UPS电池详细步骤
  14. CPU也能加速AlphaFold2!英特尔最新发布:23倍通量优化指南!
  15. js之splice 和 slice
  16. 计算机的定点运算器原理,计算机组成原理定点运算器的组成和结构.doc
  17. 2005首届中国优秀独立WAP TOP50
  18. 世纪佳缘再出事故,区块链能成为搅动婚恋行业的新鲶鱼吗?
  19. 【MDT】MacBook Air 横评 MateBook 13
  20. 如何反编译apk文件并解析.class文件查看Java源代码

热门文章

  1. Download pre-built shared indexes Pre-built maven library shared indexes reduce the indexing time
  2. 冲刺金三银四,自动化软件测试面试宝典合集(含答案)!
  3. 大数据在智慧城市的应用在哪方面
  4. 南山区python培训机构
  5. 艾美捷葡萄糖比色测定试剂盒参数说明和相关研究
  6. 中国医疗大数据“痛点” :孤岛怎么破
  7. log日志级别与简介
  8. 自恢复保险丝规格书参数详解,你不知道的全在这里
  9. Word通配符查找文字修改格式
  10. vue 报错:Module parse failed: Unexpected character ‘� ‘