如何将 uint32[]、uint8[] 参数传递给 web3.js 中的智能合约
how to pass uint32[], uint8[] parameter to smart contract in web3.js
我正在做 estimateGas。这是我的代码。
var sdate = new Date('2021-07-01 00:00:00');
var edate = new Date('2021-07-31 00:00:00');
var arrDate = [];
arrDate.push(sdate/1000);
arrDate.push(edate/1000);
var arrCategory = [1,12,14];
var param1 = web3.eth.abi.encodeParameter('uint32[]',arrDate);
var param2 = web3.eth.abi.encodeParameter('uint8[]',arrCategory);
let Contract = new web3.eth.Contract(myPack.abi, myPack.ca);
Contract.methods.createTicket(param1, param2).estimateGas({from: accounts[0]})
.then(console.log);
我遇到了错误
Uncaught TypeError: t.map is not a function
at h.formatParam (index.js:218)
at index.js:100
at Array.map ()
at h.encodeParameters (index.js:94)
at index.js:439
at Array.map ()
at Object.d._encodeMethodABI (index.js:438)
at Object.d._processExecuteArguments (index.js:701)
at Object.d._executeMethod (index.js:720)
at estimateGas (issuecfm:257)
我在encodeParameter之前尝试了一些东西
大数
var BN = web3.utils.BN;
arrDate = arrDate.map(item => {return new BN(item)});
arrCategory = arrCategory.map(item => {return new BN(item)});
和字符串
arrDate = arrDate.map(item => {return item.toString()});
arrCategory = arrCategory.map(item => {return item.toString()});
经过大量搜索,我尽力了。但我仍然遇到同样的错误。如果您能教我如何修改我的代码,我将不胜感激。
使用 web3 合约辅助函数,您需要传递“原始”JS 参数,而不是 ABI 编码数据。
let contract = new web3.eth.Contract(myPack.abi, myPack.ca);
// mind the `arrDate` and `arrCategory` instead of `param1` and `param2`
contract.methods.createTicket(arrDate, arrCategory)
.estimateGas({from: accounts[0]})
.then(console.log);
我正在做 estimateGas。这是我的代码。
var sdate = new Date('2021-07-01 00:00:00');
var edate = new Date('2021-07-31 00:00:00');
var arrDate = [];
arrDate.push(sdate/1000);
arrDate.push(edate/1000);
var arrCategory = [1,12,14];
var param1 = web3.eth.abi.encodeParameter('uint32[]',arrDate);
var param2 = web3.eth.abi.encodeParameter('uint8[]',arrCategory);
let Contract = new web3.eth.Contract(myPack.abi, myPack.ca);
Contract.methods.createTicket(param1, param2).estimateGas({from: accounts[0]})
.then(console.log);
我遇到了错误
Uncaught TypeError: t.map is not a function
at h.formatParam (index.js:218)
at index.js:100
at Array.map ()
at h.encodeParameters (index.js:94)
at index.js:439
at Array.map ()
at Object.d._encodeMethodABI (index.js:438)
at Object.d._processExecuteArguments (index.js:701)
at Object.d._executeMethod (index.js:720)
at estimateGas (issuecfm:257)
我在encodeParameter之前尝试了一些东西
大数
var BN = web3.utils.BN;
arrDate = arrDate.map(item => {return new BN(item)});
arrCategory = arrCategory.map(item => {return new BN(item)});
和字符串
arrDate = arrDate.map(item => {return item.toString()});
arrCategory = arrCategory.map(item => {return item.toString()});
经过大量搜索,我尽力了。但我仍然遇到同样的错误。如果您能教我如何修改我的代码,我将不胜感激。
使用 web3 合约辅助函数,您需要传递“原始”JS 参数,而不是 ABI 编码数据。
let contract = new web3.eth.Contract(myPack.abi, myPack.ca);
// mind the `arrDate` and `arrCategory` instead of `param1` and `param2`
contract.methods.createTicket(arrDate, arrCategory)
.estimateGas({from: accounts[0]})
.then(console.log);