gpt4 book ai didi

algorithm - 我怎样才能稳定地返回一个结构数组?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:55:25 26 4
gpt4 key购买 nike

我正在为执行出价 的以太坊智能合约设计解决方案。用例包括保留名称,例如。 “我的名字”并分配给一个地址。然后,人们可以竞标该名称(在本例中为 myName)。可以针对多个名称进行多次此类出价

struct Bid {
address bidOwner;
uint bidAmount;
bytes32 nameEntity;
}

mapping(bytes32 => Bid[]) highestBidder;

因此,正如您在上面看到的那样,Bid 结构保存了一个投标人的数据,类似地,映射 highestBidder 中的键(例如 myName)指向此类投标人的数组。

现在,当我尝试返回 highestBidder[myName] 之类的内容时,我遇到了问题

显然,solidity 不支持返回结构数组(动态数据)。我要么需要重新设计我的解决方案,要么找到一些解决方法来使其正常工作。

如果你们对这个问题有任何疑虑,请告诉我,我会尽力说清楚。

我被困在这里任何帮助将不胜感激。

最佳答案

正如您所提到的,这在 Solidity 中尚不支持。权力机构正计划对其进行更改,以便您可以,但目前,您必须检索元素的数量,然后将分解的结构检索为元组。

function getBidCount(bytes32 name) public constant returns (uint) {
return highestBidder[name].length;
}

function getBid(bytes32 name, uint index) public constant returns (address, uint, bytes32) {
Bid storage bid = highestBidder[name][index];

return (bid.bidOwner, bid.bidAmount, bid.nameEntity);
}

编辑以解决评论中有关存储内存 在这种情况下的问题

局部存储变量是指向状态变量的指针(总是在storage中)。来自Solidity docs :

The type of the local variable x is uint[] storage, but since storage is not dynamically allocated, it has to be assigned from a state variable before it can be used. So no space in storage will be allocated for x, but instead it functions only as an alias for a pre-existing variable in storage.

这是指一个示例,其中使用的变量是 uint[] x。这同样适用于我使用 Bid bid 的代码。换句话说,没有创建新的存储。

在成本方面:

getBid("foo", 0) 使用Bid memory bid:

enter image description here

getBid("foo", 0) 使用Bid storage bid:

enter image description here

在这种情况下,存储 更便宜。

关于algorithm - 我怎样才能稳定地返回一个结构数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48877910/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com