[TIL] Part2 - DAY44 Solidity - TEST6 리뷰, TEST7

박동우·2023년 5월 22일

블록체인 스쿨 3기

목록 보기
42/72

[TIL] 2023-05-22 DAY44


Solidity

GIT 주소 : https://github.com/dowoo303/SOLIDITY


오늘 배운것들

  1. TEST6
    1) TEST6 리뷰(users array선언, mapping선언)
    2) Initalization
    3) 이중매핑
    4) 블록 시간
  2. TEST7(시,분,초)

각종 팁

  1. memery: 복사(품이 많이 들어감) calldata: 원본데이터 -> 변하지않는 데이터의 경우 calldata를 쓰는 것이 더 경제적이다.

회고

  1. 스타트업 도망가


  2. 스타트업 들어가


  3. EVM의 틀 안에서 벗어나 처음으로 글로벌 변수와 소통해봤다.(블록시간 가져오기)

  4. 오늘 테스트 TEST7은 왜 쉬운거 주셨지 ?



💻 Solidity 코딩

✅ TEST6 리뷰

  1. 매핑 자체 반환은 불가능하다.
  2. 이중매핑 삼중매핑 형태: mapping(string=>mapping(string=>mapping(uint=>user))) bankAccounts3;
  3. 투표를 했는지 안했는지와 찬성 반대를 하나의 enum에 묶어 관리 -> 나는 user의 구성요소를 하나 더 늘렸는데 그것보다 enum을 하나 더 만들어서 관리하는것이 좋아보임.
  4. 블록시간 가져오기(글로벌 변수): uint public currentTime = block.timestamp;

user 모음을 배열로 해보기

  1. user를 mapping이 아닌 array로 관리하려고 시도함 -> mapping은 제약이 많기 때문
  2. user을 array로 관리하면 접속자 주소로 user를 추적할 수 없기 때문에 user에 number을 넣어서 추적한다. -> 그 결과 number을 이용하기 위해 컨트랙트 2개로 분리(동작 및 조회, user 입력 기능)
  3. 인스턴스화 시켜서 다른 컨트랙트에서 배열을 사용할 경우 배열의 길이측정이나 push같은 작업은 인스턴스 대상 컨트랙트에서 함수를 만들어서 사용해야 오류가 안난다.

🟥 코드

  • modifier에 매개변수 추가하여 사용할 수도 있다.
modifier voting(string memory _title, bool _vote) {
        _;
         if(_vote == true) {
            MyAccount.voted[_title] = votingStatus.pro;
        } else {
            MyAccount.voted[_title] = votingStatus.con;
        }
    }

    // 투표 기능도 위 인스턴스 대상 컨트랙트인 poll에서 함수를 만들고 받기
    function vote(string memory _title, bool _vote) public voting(_title, _vote) {
        polls.vote(MyAccount.number, _title, _vote);
       // modifier로 상태관리
    }

profile
HELLO!

0개의 댓글