今天有人问怎么用按钮调用智能合约,不知道在哪找,所以决定写这个,很快就可以用了.在这篇文章中,我将提供一个简单但有效的演示,展示JavaScript开发人员如何创建一个能够调用智能合约并通过单击向其发送资金(以太币)的网页。为此,用户需要使用支持Web3的浏览器,因此可以使用像Parity或Mist这样的可安装浏览器,也可以使用像MetaMask这样的浏览器扩展。此外,虽然我可以教你如何直接使用web3API,但我会教你如何使用一个新的、方便的库与以太坊智能合约EthJS交互。您的网站需要等待ready事件,然后检查全局web3对象。看起来像这样:window.addEventListener('load',function(){//检查Web3是否已经被浏览器注入:if(typeofweb3!=='undefined'){//你有一个web3浏览器!继续下面!startApp(web3);}else{//警告用户他们需要一个web3浏览器//或安装MetaMask,可能带有漂亮的图形。}})从MetaMask开发人员指南复制。在此示例中,我假设您正在使用Browserify或Webpack等JavaScript捆绑器,并且知道如何从NPM安装模块。在您的应用程序设置中,您将使用几个不同的ethjs模块,并使用全局web3对象的currentProvider属性初始化它们,这就是它与区块链对话的方式。constEth=require('ethjs-query')constEthContract=require('ethjs-contract')functionstartApp(web3){consteth=newEth(web3.currentProvider)constcontract=newEthContract(eth)initContract(合同)实例化合约后,它可用于创建对网络上实时合约的引用。为此,您需要两件事:合同地址。合约ABI。ABI是ApplicationBinaryInterface,它告诉你的JavaScript如何与智能合约进行通信。它只是描述合同方法的JSON数据。通常,如果你发布一个合约,你知道如何获得ABI,如果你要与其他人签订合约,他们应该提供ABI,尽管有时你可以从一个区块中找到与合约匹配的ABI像Etherscan这样的浏览器。假设您有可用的ABI和地址,并且了解我们现在如何创建合约对象。在此示例中,我将使用仅包含Token标准中的transfer(to,value)方法的ABI:constabi=[{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"name":"success","type":"bool"}],"payable":false,"type":"function"}]constaddress='0xdeadbeef123456789000000000000'functioninitContract(contract){constMiniToken=contract(abi)constminiToken=MiniToken.at(address)listenForClicks(miniToken)}现在我们已经为我们的智能合约初始化了一个JavaScript接口,我们只需要创建一个小的HTML。SendMoney!还有一点JavaScript来响应点击并发送这些资金:functionlistenForClicks(miniToken){varbutton=document.querySelector('button.transferFunds')buttonaddEventListener('click',function(){miniToken.transfer(toAddress,value,{from:addr}).then(function(txHash){console.log('Transactionsent')console.dir(txHash)waitForTxToBeMined(txHash)}).catch(console.error)})}请注意,如果此交易也发送以太币,您将添加value:'10000'到包含from字段的选项散列。该值以wei为单位,即1x10^-18以太币。转换的简单方法是这样的:varinWei=web3.toWei('10','ether')对于普通网络开发人员来说,一个奇怪的部分是交易响应并不意味着交易现在已经完成,它只是意味着它已经被传到了网络上。它仍然需要被挖掘,在以太坊中,平均需要大约14秒(块时间,参见EthStats.net上的统计数据)。目前还没有好的订阅方式等待挖矿交易,所以需要轮询收到的txHash。是的,这很乏味,所以我将向您展示如何使用新的JavaScriptasync/await模式来减轻痛苦:asyncfunctionwaitForTxToBeMined(txHash){lettxReceiptwhile(!txReceipt){getTransactionReceipt(txHash)}catch(err){returnindicateFailure(err)}}indicateSuccess()}就这样!(我知道,这很多)我希望这足以向您展示如何通过以太坊区块链与智能合约进行交互。一旦你习惯了它,它就很棒,因为它是一个具有权限的全局API,所以当你必须做一些有趣的事情时,比如等待交易被挖掘,你不必做一些讨厌的事情,比如管理用户帐户和密码,或者自己管理后台服务器!========================================================================分享一些以太坊、EOS、比特币等区块链相关的交互式在线编程教程:java以太坊开发教程,主要详解用于java和android程序员的区块链以太坊开发的web3j。PythonEthereum,主要供python工程师使用web3.py详细开发区块链以太坊。PHPEthereum主要介绍使用PHP进行智能合约开发交互、账户创建、交易、转账、代币开发、过滤器和交易等。以太坊入门教程,主要介绍智能合约和dapp应用开发,适合入门。以太坊开发进阶教程,主要介绍使用node.js、mongodb、blockchain、ipfs实现去中心化电商DApp实战,适合进阶。C#以太坊主要讲解如何使用C#开发基于.Net的以太坊应用,包括账户管理、状态与交易、智能合约开发与交互、过滤器与交易等EOS教程,本课程帮助您快速上手开发EOS区块链去中心化应用,涵盖EOS工具链、账户钱包、发行代币、智能合约开发部署、使用代码与智能合约交互等核心知识点,最终利用所有知识点完成一个笔记DApp的开发.Java比特币开发教程,本课程面向初学者,内容涵盖了比特币的核心概念,如区块链存储、去中心化共识机制、密钥和脚本、交易和UTXO等,还详细讲解了如何使用JavaIntegrating比特币在代码中的支持功能,如创建地址、管理钱包、构造裸交易等,是Java工程师不可多得的比特币开发学习教程。Php比特币开发教程,本课程面向初学者,内容涵盖了比特币的核心概念,如区块链存储、去中心化共识机制、密钥和脚本、交易和UTXO等,同时还详细讲解了如何使用PhpIntegrating比特币在代码中的支持功能,如创建地址、管理钱包、构造裸交易等,是Php工程师不可多得的比特币开发学习教程。tendermint区块链开发详解。本课程适合想要使用tendermint进行区块链开发的工程师。课程内容包含了tendermint应用开发模型中的核心概念,如ABCI接口、Merkle树、多版本状态库等,包含了丰富的代币发行等实用代码,是go语言工程师快速上手的最佳选择开始区块链开发。下面是如何实现一键调用以太坊智能合约