如何在混音中测试按照示例映射智能合约?

发布于 2025-01-31 04:17:17 字数 2744 浏览 3 评论 0原文

我想在

我在输入字段中以标记 set 的函数的输入字段?

映射.sol
// https://solidity-by-example.org/mapping
// Mapping
// Maps are created with the syntax mapping(keyType => valueType).
// The keyType can be any built-in value type, bytes, string, or any contract.
// valueType can be any type including another mapping or an array.
// Mappings are not iterable.

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;

contract Mapping {
    // Mapping from address to uint
    mapping(address => uint) public myMap;

    function get(address _addr) public view returns (uint) {
        // Mapping always returns a value.
        // If the value was never set, it will return the default value.
        return myMap[_addr];
    }

    function set(address _addr, uint _i) public {
        // Update the value at this address
        myMap[_addr] = _i;
    }

    function remove(address _addr) public {
        // Reset the value to the default value.
        delete myMap[_addr];
    }
}

contract NestedMapping {
    // Nested mapping (mapping from address to another mapping)
    mapping(address => mapping(uint => bool)) public nested;

    function get(address _addr1, uint _i) public view returns (bool) {
        // You can get values from a nested mapping
        // even when it is not initialized
        return nested[_addr1][_i];
    }

    function set(
        address _addr1,
        uint _i,
        bool _boo
    ) public {
        nested[_addr1][_i] = _boo;
    }

    function remove(address _addr1, uint _i) public {
        delete nested[_addr1][_i];
    }
}

此代码来自 solidity by示例

当我在混音中实现它时,我将获取以下屏幕。

此时,要对其进行测试,我想我需要将地址>映射到uint256,所以我在字段中输入以下内容 set 按钮旁边:

["0xcf646ed6e21fd0756ec45a6be5e1057fc24a1b8308175ff0b9f97f565b594eb3", 7439]

地址的值是随机生成的哈希(我怀疑随机哈希 yim 是一个问题吗?)

我希望看到 set 函数渲染值7439。但是,相反,它引发了以下错误:

转换到映射。设置错误:错误编码参数:错误:无效地址(参数=“地址”,value = [“ 0xcf646ed6ed6e21fd0756ec45a6ec45a6be5e1057fc24fc24fc24a1b8308175ff0b8175ff0b9f97f97f97f565b565b5b594egl bb3参数= null,value = [“ 0xcf646ed6e21fd0756ec45a6be5e1057fc24a1b8308175ff0b97f97f565b594eb3”,7439,7439]

= [“ 0xCF646ED6ED6EFD0756EC45A6BE5E1057FC24A1B8308175FF0B9F97F97F565B594EB3 ”

I want to test the following code in Remix. But what is the procedure?

What do I put in the input field for the function labeled set?

Mapping.sol
// https://solidity-by-example.org/mapping
// Mapping
// Maps are created with the syntax mapping(keyType => valueType).
// The keyType can be any built-in value type, bytes, string, or any contract.
// valueType can be any type including another mapping or an array.
// Mappings are not iterable.

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;

contract Mapping {
    // Mapping from address to uint
    mapping(address => uint) public myMap;

    function get(address _addr) public view returns (uint) {
        // Mapping always returns a value.
        // If the value was never set, it will return the default value.
        return myMap[_addr];
    }

    function set(address _addr, uint _i) public {
        // Update the value at this address
        myMap[_addr] = _i;
    }

    function remove(address _addr) public {
        // Reset the value to the default value.
        delete myMap[_addr];
    }
}

contract NestedMapping {
    // Nested mapping (mapping from address to another mapping)
    mapping(address => mapping(uint => bool)) public nested;

    function get(address _addr1, uint _i) public view returns (bool) {
        // You can get values from a nested mapping
        // even when it is not initialized
        return nested[_addr1][_i];
    }

    function set(
        address _addr1,
        uint _i,
        bool _boo
    ) public {
        nested[_addr1][_i] = _boo;
    }

    function remove(address _addr1, uint _i) public {
        delete nested[_addr1][_i];
    }
}

This code came from Solidity by Example.

When I implement it on Remix, I get the following screen.

enter image description here

At this point, to test it, I think I need to map an address to a uint256, so I enter the following in the field next to the set button:

["0xcf646ed6e21fd0756ec45a6be5e1057fc24a1b8308175ff0b9f97f565b594eb3", 7439]

The value of the address was a randomly generated hash (I suspect the random hash might be a problem?)

enter image description here

I expect to see the set function render the value 7439. But, instead, it throws the following error:

transact to Mapping.set errored: Error encoding arguments: Error: invalid address (argument="address", value=["0xcf646ed6e21fd0756ec45a6be5e1057fc24a1b8308175ff0b9f97f565b594eb3",7439], code=INVALID_ARGUMENT, version=address/5.5.0) (argument=null, value=["0xcf646ed6e21fd0756ec45a6be5e1057fc24a1b8308175ff0b9f97f565b594eb3",7439], code=INVALID_ARGUMENT, version=abi/5.5.0)

What am I doing wrong?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

那片花海 2025-02-07 04:17:17

您已经生成了一个随机的SHA-256,该SHA-256是有效地址的格式,但是它在混音的基于浏览器的(JavaScript VM)链上不存在作为任何帐户。如果是这样,您可能会很幸运。

如果要使用基于浏览器的VM链上确实存在的有效地址,请在帐户部分中复制和使用这些地址。

You have generated a random SHA-256 that is of the format of a valid address, but it doesn't exist on the Remix's browser-based (Javascript VM) chain as any account. If it does, you might be just lucky.

If you want to use valid addresses that do exist on the browser-based VM chain, copy and use the addresses in the account section.

Account section

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文