Contract-Development
一個合約如何獲取另一個合約的數組狀態?
我有兩個合約,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; } }