关于问题如何实现一键调用以太坊智能合约?一共有 2 位热心网友为你解答:
【1】来自网友【区块软件开发】的最佳回答:
实现一键调用以太坊智能合约有几种方法:
- 使用 Web3.js:Web3.js 是以太坊开发人员的一种主要工具,可以使用它进行智能合约的调用。通过 Web3.js,你可以通过 JavaScript 向以太坊网络发送请求,从而调用智能合约。
- 使用桌面钱包:桌面钱包是一个软件,可以实现以太坊智能合约的调用。它可以让你创建账户,存储以太币,并且在以太坊网络上发送交易请求。
- 使用手机钱包:手机钱包是一个手机应用,可以实现以太坊智能合约的调用。它的使用方法与桌面钱包类似,但是更方便和快捷。
- 使用第三方平台:有一些第三方平台,比如 MyEtherWallet 和 MetaMask,可以实现以太坊智能合约的调用。这些平台是使用 Web3.js 开发的,但是提供了更加方便和友好的界面。
如果你想实现一键调用以太坊智能合约,最简单的方法是使用 MyEtherWallet 或 MetaMask。只需要注册一个账户,就可以方便地进行以太坊智能合约的调用。
【2】来自网友【关注科技信息】的最佳回答:
有人问如何用按钮调用智能合约,在这篇文章中,我将给出一个简单但有希望有效的演示,说明 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 开发人员指南中复制。
在这个例子中,我假设你正在使用像 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)
initCon
一旦实例化了合约,就可以使用它来创建对网络上实时合约的引用。要做到这一点,你需要两件事:
合约地址。
合约 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 为单位,为 1×10 ^ -18 以太。转换的简单方法是这样的:
var inWei = web3.toWei(‘10‘, ‘ether‘)
对于普通的 Web 开发人员来说,一个奇怪的部分是交易响应并不意味着交易现在已经完成,它只是意味着它已经被传输到网络。它仍然需要被挖掘,而在以太坊中,平均需要大约 14 秒(阻断时间,查看 EthStats.net 上的统计数据)。
现在还没有很好的订阅方法可以等待挖掘交易,所以你需要用收到的 txHash 进行轮询。是的,这很乏味,所以我会告诉你如何使用新的 JavaScript async/await 模式来减少痛苦:
async function waitForTxToBeMined (txHash) {
let txReceipt
while (!txReceipt) {
try {
txReceipt = await eth.getTransactionReceipt(txHash)
} catch (err) {
return indicateFailure(err)
}
}
indicateSuccess()
}
如此而已!