在 web3.js 中出现关于写入 tx 的错误
Getting error in web3.js regarding write tx
嗨,我遇到了错误
Error: [ethjs-query] while formatting inputs '[{"0":false}]' for method 'getTransactionReceipt' error: Error: [ethjs-format] hex string '[object Object]' must be an alphanumeric 66 utf8 byte hex (chars: a-fA-F) string, is 0 bytes
at ethjs.min.js:11
at new Promise (<anonymous>)
at i.getTransactionReceipt (ethjs.min.js:11)
at i.e.<computed> [as getTransactionReceipt] (ethjs.min.js:11)
at ethjs.min.js:11
我正在调用智能合约投资功能:
function invest()public payable onlyAmount() firstExist returns(bool){
// balances[msg.sender]=msg.value;
invested[msg.sender]+= msg.value;
isInvested[msg.sender]=true;
users[msg.sender].creationTime=now;
commission=(msg.value.mul(10)).div(100);
forCreators(commission);
emit Invest(msg.sender,msg.value);
return true;
}
当我从 web3.js 调用函数时,就像
tokenContract.invest({
from: user_address,
gasLimit: web3.toHex(8000000),
gasPrice: web3.toHex(web3.toWei('10', 'gwei')),
value : web3.toHex( web3.toWei(0.25, 'ether'))
})
.then(txHash => eth.getTransactionSuccess(txHash)
.then(receipt => {
alert("Sigup Has been successful",receipt);
})
)
.catch((err) => {
alert("Error couldnot signUp");
console.log(err);
})
此错误显示在所有写入函数上。读取工作正常。我以前从未遇到过这个错误。我尝试在 Ropsten 和 Rinkeby 上部署合同时出现同样的错误。
这些合约函数在 etherscan 和 remix 上工作得很好。
在 web3js 中,即使是 Metamask 也不会出现在交易中。可能是什么问题?
所以正如我上面提到的,我使用的是 eth.js 。所以不知何故,这就是问题所在。我通过不使用 ethjs 而只使用 web3js 来解决问题。因为我已经实现了我的节点应用程序的所有读取功能和所有功能,所以更改所有内容都是浪费时间。制作了 2 个 diff 变量,1 个来自 ethjs(用于读取),1 个来自纯 web3js
const NameContract = web3.eth.contract(tokenABI);
window.tokenContract2 = NameContract.at(tokenAddress); //web3js
window.tokenContract = eth.contract(tokenABI).at(tokenAddress); ethjs
然后我使用了像
这样的函数
tokenContract2.regUser({ from: user_address, gas: 400000 },
(err, res) => { /** callback **/ }
)
回调是必要的,因为 metamask 给出了一个错误。
我还是想知道问题的根源。但是由于时间不够,我不得不继续进行该项目
嗨,我遇到了错误
Error: [ethjs-query] while formatting inputs '[{"0":false}]' for method 'getTransactionReceipt' error: Error: [ethjs-format] hex string '[object Object]' must be an alphanumeric 66 utf8 byte hex (chars: a-fA-F) string, is 0 bytes
at ethjs.min.js:11
at new Promise (<anonymous>)
at i.getTransactionReceipt (ethjs.min.js:11)
at i.e.<computed> [as getTransactionReceipt] (ethjs.min.js:11)
at ethjs.min.js:11
我正在调用智能合约投资功能:
function invest()public payable onlyAmount() firstExist returns(bool){
// balances[msg.sender]=msg.value;
invested[msg.sender]+= msg.value;
isInvested[msg.sender]=true;
users[msg.sender].creationTime=now;
commission=(msg.value.mul(10)).div(100);
forCreators(commission);
emit Invest(msg.sender,msg.value);
return true;
}
当我从 web3.js 调用函数时,就像
tokenContract.invest({
from: user_address,
gasLimit: web3.toHex(8000000),
gasPrice: web3.toHex(web3.toWei('10', 'gwei')),
value : web3.toHex( web3.toWei(0.25, 'ether'))
})
.then(txHash => eth.getTransactionSuccess(txHash)
.then(receipt => {
alert("Sigup Has been successful",receipt);
})
)
.catch((err) => {
alert("Error couldnot signUp");
console.log(err);
})
此错误显示在所有写入函数上。读取工作正常。我以前从未遇到过这个错误。我尝试在 Ropsten 和 Rinkeby 上部署合同时出现同样的错误。 这些合约函数在 etherscan 和 remix 上工作得很好。 在 web3js 中,即使是 Metamask 也不会出现在交易中。可能是什么问题?
所以正如我上面提到的,我使用的是 eth.js 。所以不知何故,这就是问题所在。我通过不使用 ethjs 而只使用 web3js 来解决问题。因为我已经实现了我的节点应用程序的所有读取功能和所有功能,所以更改所有内容都是浪费时间。制作了 2 个 diff 变量,1 个来自 ethjs(用于读取),1 个来自纯 web3js
const NameContract = web3.eth.contract(tokenABI);
window.tokenContract2 = NameContract.at(tokenAddress); //web3js
window.tokenContract = eth.contract(tokenABI).at(tokenAddress); ethjs
然后我使用了像
这样的函数tokenContract2.regUser({ from: user_address, gas: 400000 },
(err, res) => { /** callback **/ }
)
回调是必要的,因为 metamask 给出了一个错误。
我还是想知道问题的根源。但是由于时间不够,我不得不继续进行该项目