Copyright © 2022-2024 aizws.net · 网站版本: v1.2.6·内部版本: v1.23.3·
页面加载耗时 0.00 毫秒·物理内存 62.2MB ·虚拟内存 1300.8MB
欢迎来到 AI 中文社区(简称 AI 中文社),这里是学习交流 AI 人工智能技术的中文社区。 为了更好的体验,本站推荐使用 Chrome 浏览器。
调用智能合约写函数,会改变区块链状态,需要消耗Gas,被视为一种交易操作。
本章将使用web3.js – 部署智能合约 章节中部署好的合约,调用此合约的set()函数。
调用智能合约写函数的执行步骤与前面章节:web3.js – 交易操作、web3.js – 部署智能合约 涉及到交易操作步骤基本相同,包括:
因此我们将使用相同的基本设置,如下所示:
app.js文件
var Tx = require('ethereumjs-tx').Transaction const Web3 = require('web3') const web3 = new Web3('https://ropsten.infura.io/YOUR_INFURA_API_KEY') const account1 = '' // Your account address 1 const account2 = '' // Your account address 2 const privateKey1 = Buffer.from('YOUR_PRIVATE_KEY_1', 'hex') const privateKey2 = Buffer.from('YOUR_PRIVATE_KEY_2', 'hex')
如下所示,构建交易对象:
const txObject = { nonce: web3.utils.toHex(txCount), gasLimit: web3.utils.toHex(800000), gasPrice: web3.utils.toHex(web3.utils.toWei('10', 'gwei')), to: contractAddress, data: data }
nonce、gasLimit、gasPrice的使用,与前面章节基本相同,不再赘述。剩下2个参数说明如下:
const contractAddress = '0x30951343d6d80d2c94897f1a81c53cc030aef879' const contractABI = [ { "constant": false, "inputs": [ { "internalType": "string", "name": "_value", "type": "string" } ], "name": "set", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [], "name": "get", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "inputs": [], "payable": false, "stateMutability": "nonpayable", "type": "constructor" } ] const contract = new web3.eth.Contract(contractABI, contractAddress)
关于data参数,可以使用web3.js函数encodeABI(),把contract对象中的智能合约函数转换为十六进制表示。如下所示:
const data = contract.methods.set("qikegu").encodeABI()
至此我们已经完成了准备工作,接下来就要执行调用了。
执行写函数调用,需要签署交易、广播交易,就像前面章节中一样。app.js完整代码如下所示:var Tx = require('ethereumjs-tx').Transactionconst Web3 = ...