Solidity

如何將一個契約返回的值解析為另一個?

  • March 4, 2019

我部署了兩個契約一個是UserRegistration另一個是Exam

我有使用映射getUser(uint id)獲取特定使用者數據的方法,users

function getUser(uint _id) public constant returns(uint,string,string,uint,uint) {

 User memory c = users[_id];

 return(
 c.id,
 c.name,
 c.class,
 c.age,
 c.pincode);
}

現在,我有另一個契約Exam,我想getUser()從契約中呼叫函式,UserRegistration所以我已經這樣做了,

pragma solidity 0.4.25;

contract UserRegistration
{
   function getUserCount() public returns(uint);
   function getUser(uint) public returns(uint,string,string,uint,uint);
}

contract Exam
{
   address private addrUsr;
   uint public count;
   UserRegistration r;
   constructor(address _addrUsr)
   {
       addrUsr=_addrUsr;
       r = UserRegistration(addrUsr);
   }

   function updateCount() public {

       count=r.getUserCount();
   }

   function getUserData(uint _id) public
   {
       //WHAT to do HERE//;
   }       

}

但是,如何將getUser()函式返回的值解析成getUserData()這樣,如果我呼叫getUserData()函式,它應該返回所有返回的值getUser(),並且由於getUser()函式返回的值是不同的數據類型,我不能將它們儲存在數組中。

請幫我

我注意到您constant在系統資料庫中使用。如果這適用於您正在使用的編譯器,請堅持使用,否則view適用於較新的編譯器。

在任何情況下,都使用它:

您應該在兩個契約中添加viewgetter 函式。

function getUserData(uint _id) public view returns (uint,string,string,uint,uint) { // or constant
   //WHAT to do HERE//
   uint id;
   string name;
   string class;
   uint age;
   uint pincode;

   (id, name, class, age, pincode) = r.getUser(_id);

   return(id, name, class, age, pincode);
}

希望能幫助到你。

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