首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >bytes32不接受输入

bytes32不接受输入
EN

Ethereum用户
提问于 2021-02-05 18:37:27
回答 2查看 1.9K关注 0票数 1

我不明白怎样才能把什么输入到bid()函数中。无论我做什么,它都显示出同样的错误:

代码语言:javascript
复制
"Error encoding arguments: Error: invalid arrayify value (argument="value", value="1 true secret", code=INVALID_ARGUMENT, version=bytes/5.0.5)
" 

我遗漏了什么?

下面是bid()函数的代码。

代码语言:javascript
复制
function bid(bytes32 _blindedBid)
        public
        payable
        onlyBefore(biddingEnd)
    {
        bids[msg.sender].push(Bid({
            blindedBid: _blindedBid,
            deposit: msg.value
        }));
    }
EN

回答 2

Ethereum用户

发布于 2021-02-05 20:18:31

在声明bytes32类型时,这会迫使您输入一个长度为bytes32的值。因为您的输入(在Remix中)更短,它将返回一个错误。

我还没有看到您的struct & the声明,但我假设您有以下代码:

代码语言:javascript
复制
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的前端,则可以使用如下转换:

代码语言:javascript
复制
web3.utils.padRight(web3.utils.fromAscii('hello'), 34)
票数 3
EN

Ethereum用户

发布于 2022-04-26 13:53:25

在我的例子中,对于我的前端应用程序,我不得不使用

web3.utils.padRight(web3.utils.fromAscii('hello'), 64)

票数 0
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/93179

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档