Contract-Development

一個合約如何獲取另一個合約的數組狀態?

  • August 16, 2017

我有兩個合約,Token 和 Voter。我想啟動一個 DAO,這樣首先有人初始化一個令牌並將一些份額分配給它想要的任何人。

在投票合約中,只有代幣持有者才被允許為某事投票(例如某些項目應該獲得一些資金)。

我正在使用 remix IDE 來編譯我的合約,但我不知道 Vote 合約應該如何呼叫 Vote 合約。因此,我將兩者放在同一個地方。

代幣合約儲存了一組地址,這些地址屬於接收代幣的人。現在,Vote 合約應該可以獲取數組,並檢查投票和呼叫 Vote 合約的人是否在數組中(由 Token 保存)。

contract Token {
address [] publick voters;
//... some functions that assings values to the array...
}

contract Vote{
// people first vote... Assume they've already done that.
//Below we want to check which of them have tokens.

Token token= new Token();
address valid_voters = token.voters();// Here an error shows up

// then check
}

**問題 1:**一個合約中的數組變數如何被另一個合約訪問?(例如上面例子中的選民)

**問題 2:**在混音中,一份合約如何呼叫另一份合約?第一個放在哪裡?(例如在哪裡放置 Token 合約以及 Vote 如何呼叫它)?

編譯錯誤給出了第一個線索:

函式呼叫的參數計數錯誤:給出了 0 個參數但預期為 1

呼叫需要一個參數的原因是它voters是一個數組,您必須提供要查找的元素的索引。您不能複制整個數組。

這是查找voters數組中第一個元素的工作範例:

pragma solidity ^0.4.15;

contract Token {
   address [] public voters;

   function Token(address first_voter) {
       voters.push(first_voter);
   }
}

contract Vote{
    // people first vote... Assume they've already done that.
    //Below we want to check which of them have tokens.

   function check_first_voter() returns (address) {
       Token token = new Token(0x123);
       address valid_voter = token.voters(0);  // Retrieve first voter

       // then check
       assert(valid_voter == 0x123);
       // Success!
       return valid_voter;
   }
}

引用自:https://ethereum.stackexchange.com/questions/24492