Solidity

帶有名稱的 Solidity 組地址。例如:Whats 應用組

  • November 26, 2021

我想創建一個由組地址組成的小隊(組)。就像 Squad XYZ 由名稱為“A”的 Addr1、名稱為“B”的 Addr2、名稱為“C”的 Addr3 組成。

pragma solidity ^0.5.9;

contract Squads{

   struct squadMemberInfo{
       string memberName;
       address memberAddress;
   }
   struct squadInfo{
       string squadName;
        squadMemberInfo[] squadMembers;
   }
   squadInfo[] public SI;
   squadMemberInfo[] public SMI;
   //Function to create a Squad/Group and name that group
   function createSquad(address[] memory _addressesToBeGrouped,string memory _squadName) public returns(string memory isCreated){
       //Yet to be coded
   }
   //Function to add Members to an existing Squad
   function addMember(string memory _squadName,address _memberAddress, string memory _memberName) public returns(bool isAdded){
       squadMemberInfo memory squadMember = squadMemberInfo(_memberName,_memberAddress);
       SMI.push(squadMember);
       squadInfo memory squadInformation = squadInfo(_squadName,SMI);
       SI.push(squadInformation);
       return true;
   }

}

我想將 makesquadMemberInfo[] public SMI;作為函式內部的局部變數,addMember以便函式可以返回squadMemberInfo[]. 我可以直接使用這個返回數組並將struct squadInfo.

我也有點困惑我怎麼能做到這一點。:(

您應該查看映射。認為他們可以為您提供解決方案。我看到您的結構squadInfo已經具有squadMembers數組,因此應該可以實現您正在尋找的分組地址的功能。如果要返回這些地址,可以設置一個 getter 函式來查找小隊並返回其成員,或者,您可以為每個小隊提供唯一 ID 並將小隊成員儲存在mapping(uint => address[]) squadMembers. 至於為每個地址命名,您可以使用結構內部的映射,僅在該上下文中分配名稱,或者使用全域映射,以便名稱可以跨小隊轉移。

此映射如下所示:mapping(address => string) addressName.

要為映射設置值,只需使用addressName[ADDRESS HERE] = "name";.

從本質上講,您正在做的很多事情都可以只使用數組來完成,但可能會增加太多的複雜性。你真的應該閱讀映射,因為我認為它們真的會幫助你!

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