gpt4 book ai didi

ethereum - 从 Solidity 调用部署在特定地址的合约的函数

转载 作者:行者123 更新时间:2023-12-02 05:38:30 42 4
gpt4 key购买 nike

我正在处理 Solidity 内部合约的继承和外部调用。我已经部署了我的数据结构并将其填充到地址 MapAdr

我的代码可以按如下方式设计。在我的 DataStructure.sol 中,我有:

interface Graph {
function getNeighbours(uint8 id) external view returns (uint8[8]);
function getOrder() external view returns (uint8);
function isNeighbour(uint8 strFrom, uint8 strTo) external view returns
(bool success);

}

contract DataStructure is Graph {
....code....
uint8 order;
constructor (uint8 size) {
order = size;
}
....code...
}

我部署此合约并将地址保存到 MapAdr=0x1234567...

现在我去签另一份契约(Contract)

pragma solidity ^0.4.22;

import "./DataStructure.sol";


contract Data is Graph {
.....code....
DataStructure public data;

constructor(address MapAdr) public {
....code...
data = DataStructure(MapAdr);
....code...
}
.....code....
}

但是部署了 DataStructure 但它的地址不是 MapAdr。

有一种方法可以在特定的 MadAdr 处拥有已部署合约的实例(因此可以将数据准确地插入到该数据结构中),以便我可以查询它的存储?

这个想法是部署多个插入不同数据的 DataStructure 合约,然后在部署数据合约时引用一个特定的合约。

最佳答案

我不确定这是否完全回答了您的问题,但我发现这个示例与您所说的非常相似,希望它可以帮助您。

contract Admin {
address private owner;

function Admin() public { owner = msg.sender; }

function getOwner() public returns (address) {
return owner;
}

function transfer(address to) public {
require(msg.sender == owner);
owner = to;
}
}

contract Lottery {
string public result;

Admin public admin = Admin(0x35d803f11e900fb6300946b525f0d08d1ffd4bed); // Admin contract was deployed under this address

function setResult(string _result) public {
require(msg.sender == admin.getOwner());
result = _result;
}
}

如您所见,Admin 合约部署在地址 0x35d... 下,然后在 Lottery 合约中使用admin 变量定义。一旦将变量声明为另一个合约的实例,您就可以使用该合约的所有公共(public)接口(interface)。检查admin.getOwner();执行。

同样,它没有遵循您提到的相同示例,但它可能有用。

希望对您有帮助! ;-)

编辑1:对Lottery中的Admin实例的地址进行硬编码可能是一个坏主意。这只是一个非常简单的例子。您可以考虑将 Admin 实例地址作为参数传递到 Lottery 构造函数中。有关更多详细信息,请参阅下面的评论。

关于ethereum - 从 Solidity 调用部署在特定地址的合约的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49959824/

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