首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用反向链接获取我挖掘的智能合同的结束循环条件?

使用反向链接获取我挖掘的智能合同的结束循环条件?
EN

Ethereum用户
提问于 2017-01-24 21:40:01
回答 1查看 195关注 0票数 1

我想检索我所有的智能契约并与它们交互,而不需要反复扫描区块链。

为了做到这一点,我启发了自己关于区块链的一个简单而巧妙的特性:反向链接。每次部署新合同时,我都会存储以前智能契约的地址:

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

contract Test {

    address public scAddress; //current address of the smart contract
    address public lastSCAddress; // address of the previous smart contract

}

所以我在区块链中创建了自己的智能合同链。我的问题是当我想检索它并与它们交互时:使用web3.js:

代码语言:javascript
复制
function retrieveSmartcontract(lastKnownAddress) {
  for(var i = 0; i < (until it reaches the oldest one); i++) {
    var documentContract = web3.eth.contract(abiArray);
    var sc = documentContract.at(lastKnownAddress);
    var result = sc.getData.call();
    console.log('Data: '+ result)

    var newaddress = sc.getLastSCAddress().call();
    var sc[i] = documentContract.at(newaddress);
    var result[i] = sc2.getData.call();
    console.log('Data2: '+ result[i]);

}
}) 

把它看作是伪代码。我永远都知道lastKnownAddress。我不知道我的循环的结束条件是什么。我想过contract.address == unfinied,但我不确定。

感谢您宝贵的时间和帮助。

编辑:这个可以解决吗?

因为我知道部署了最后一个智能契约的地址,所以当我启动这个过程时,最后一个智能契约地址也等于“最老的”一个。我只需要把它保存在另一份聪明的合同里。

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

contract Test {

   address public lastSCAddress; // address of the previous smart contract
   string name;

}

以下是新smart合同的代码:

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

contract Test2 {

   address public lastSCAddress; // address of the last contract mined
     address public oldestSCAddress; // address of the first ever smart contract deployed
   string name;

}

最后,我的循环代码:

代码语言:javascript
复制
function retrieveSmartcontract(lastKnownAddress) { 
    // interacting with test2.sol

    var test2 = web3.eth.contract(abiArray);
    var sc = test2.at(lastKnownAddress);
    var oldestAddress = sc.getOldestSCAddress.call();
    var tmpAddress = lastKnownAddress;

  while(oldestAddress!== tmpAddress) {
    // interacting with test.sol

    var test = web3.eth.contract(abiArray);
    var sc2 = test.at(lastSCAddress);
    var result = sc2.getData.call();
    console.log('Data: '+ result)
    var tmp = sc2.getLastAddress.call();
    tmpAddress = tmp;
}
}) 

我希望我能在这里使用here循环。因此,基本上,它将调用getLastAddress,直到oldestAddresstmpAddress**.*不匹配为止。

,有人能确认一下吗?

谢谢

EN

回答 1

Ethereum用户

回答已采纳

发布于 2017-01-25 12:52:16

不是contract.address == "0x0000000000000000000000000000000000000000"吗?

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

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

复制
相关文章

相似问题

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