首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用函数签名编码字节数组:"TypeError:不能对此类型进行编码。“

用函数签名编码字节数组:"TypeError:不能对此类型进行编码。“
EN

Ethereum用户
提问于 2022-10-13 13:20:34
回答 1查看 199关注 0票数 1

我在一个智能契约中有一个函数,我试图用call调用它。

代码语言:javascript
复制
function doStuff(bytes[] calldata data) external payable {

就这么说吧,我要跑:

代码语言:javascript
复制
bytes[] memory dataArray = new bytes[](1);
(bool success, bytes memory returnData) = CONTRACT_ADDRESS.call(
            abi.encodeWithSignature("doStuff(bytes[])", dataArray)
        );

但我一直在想:

代码语言:javascript
复制
TypeError: This type cannot be encoded.
            abi.encodeWithSignature("doStuff(bytes[])", dataArray)

在编译时。我怎么才能解决这个问题?

EN

回答 1

Ethereum用户

回答已采纳

发布于 2022-10-13 14:01:19

你用的是什么坚固版?

我使用的是Solidity 0.8.16,它对我来说很好。

检查:

代码语言:javascript
复制
pragma solidity ^0.8.16;

contract DoStuff {

    event DidStuff(uint256 timestamp);

   function doStuff(bytes[] memory _data) public {

        // Doing stuff..

        emit DidStuff(block.timestamp);
    }

}

contract Contract {

    address CONTRACT_ADDRESS;

    constructor(address doStuffAddress) {
        CONTRACT_ADDRESS = doStuffAddress;
    }
    
    function doIt() public {

        bytes[] memory dataArray = new bytes[](1);
(bool success, bytes memory returnData) = CONTRACT_ADDRESS.call(
            abi.encodeWithSignature("doStuff(bytes[])", dataArray)
        );

    }

}

Remix测试(我不确定您使用的是什么):

代码语言:javascript
复制
[block:6 txIndex:0]from: 0xE81...4429Eto: Contract.doIt() 0xD8C...97aA9value: 0 weidata: 0xb29...f0835logs: 1hash: 0xb07...8bdeb
status  true Transaction mined and execution succeed
transaction hash    0x1ed0efca8ae04b6023af938acb6f2ba87dc066708d30bbe45d1884e18470d34d
from    0xE81903819F26C76C33f6f35967A56ca545f4429E
to  Contract.doIt() 0xD8C3fA537fc8FBe442E007759207cdd3AA997aA9
gas 27547 gas
transaction cost    27547 gas 
input   0xb29...f0835
decoded input   {}
decoded output   - 
logs    [
    {
        "from": "0xB5c6870320fEDcE225116588aD29dc4cCd988770",
        "topic": "0x492037fdabb4ac5a9b4e72edb0de0d83013611c4a53b457573d0d085f9222296",
        "event": "DidStuff",
        "args": {
            "0": "1665669544",
            "timestamp": "1665669544"
        }
    }
]
val 0 wei
票数 1
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

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

复制
相关文章

相似问题

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