我不明白怎样才能把什么输入到bid()函数中。无论我做什么,它都显示出同样的错误:
"Error encoding arguments: Error: invalid arrayify value (argument="value", value="1 true secret", code=INVALID_ARGUMENT, version=bytes/5.0.5)
" 我遗漏了什么?
下面是bid()函数的代码。
function bid(bytes32 _blindedBid)
public
payable
onlyBefore(biddingEnd)
{
bids[msg.sender].push(Bid({
blindedBid: _blindedBid,
deposit: msg.value
}));
}
发布于 2021-02-05 20:18:31
在声明bytes32类型时,这会迫使您输入一个长度为bytes32的值。因为您的输入(在Remix中)更短,它将返回一个错误。
我还没有看到您的struct & the声明,但我假设您有以下代码:
contract Test {
struct Bid {
bytes32 blindedBid;
uint256 deposit;
}
mapping(address => Bid[]) public bids;
function bid(bytes32 _blindedBid)
public
payable
{
bids[msg.sender].push(Bid({
blindedBid: _blindedBid,
deposit: msg.value
}));
}
}因此,如果使用bytes32添加一个条目,如:
0x6c00000000000000000000000000000000000000000000000000000000000000
函数调用应该可以正常工作。因此,使用Remix,添加这种数据输入有点棘手,您必须手动进行转换。另一方面,如果您使用web3.js的前端,则可以使用如下转换:
web3.utils.padRight(web3.utils.fromAscii('hello'), 34)发布于 2022-04-26 13:53:25
在我的例子中,对于我的前端应用程序,我不得不使用
web3.utils.padRight(web3.utils.fromAscii('hello'), 64)
https://ethereum.stackexchange.com/questions/93179
复制相似问题