team-ooak / ooak-smartcontract

MIT License
1 stars 0 forks source link

(wallet address) : (ID Tag) = 1 : N #6

Closed ybuser closed 2 years ago

ybuser commented 2 years ago

지갑 주소와, ID Tag 를 일대다로 연결할 수 있게 만들었습니다.

solidity 0.8.0 버전 이하에는 ABIEncoder V2가 적용되지 않아서 string array를 사용할 수 없고, pragma experimental ABIEncoderV2 를 적용하면 사용이 가능하지만, 보안 상 취약할 수 있다고 합니다.

그래서 string array로 값을 반환해야되는 getNameTags나 getTokenURIs 를 각각 getNameTagByIndex, getNameTagNumber 와 getTokenURIByIndex, getTokenNumber 두 개의 함수로 나눴습니다.

아직 테스트는 진행해보지 않은 상태입니다.

ybuser commented 2 years ago

수정사항 반영 했습니다!

기본 구조는 다음과 같습니다

struct TwitchUser {
    string TwitchId;        // Users' Twitch ID (user & streamer)
    address PublicAddress;  // Wallet Public Address
    // My Token IDs ([One Wallet --> Many Tokens])
    uint256[] RawTokenIds;     // Token IDs not minted yet
    uint256[] MintedTokenIds;  // Minted Token IDs  
}

struct OoakToken {
    uint256 TokenId;        // Token ID
    string NameTag;         // Token NameTag
    string TokenURI;        // Token URI for NFT
    bool isMinted;          // True if Minted, used to find nametag from user efficiently (ex. changeOwnerOfToken)
}

mapping(string => TwitchUser) IdToUser;         // Twitch ID to User struct
mapping(address => TwitchUser) AddressToUser;   // Public Address to User struct
mapping(uint256 => OoakToken) TokenIdToToken;   // (Token ID from Users' MyTokenIds) --> (OoakToken struct)
mapping(string => bool) IsNameTagExist;         // True if Name Tag is already used
Woojinger commented 2 years ago

네 수고하셨습니다 그 뒤부터 제가 할게요