[블록체인] Solidity로 백신시스템 만들기

조미진·2022년 2월 9일
0

블록체인 실습

목록 보기
3/5
post-thumbnail

📚 INTRO

DID가 무엇인지 알아보고, 백신 시스템을 만들어봅시다!

🔎 DID(Decentralized Identity)

DID는 탈중앙 신원증명으로, 데이터의 주권이 개인에게 있고
필요할때 필요한 데이터만을 중앙화된 시스템을 거치지 않고 증명할 수 있는 기술입니다.

예를들어 우리가 식당에서 술을 주문했다고 해봅시다🥂
직원분이 신분증을 요구했을 때, 신분증을 보여주게되면 이름, 주소, 등 불필요한 개인정보가 노출됩니다.
하지만 DID기반 신원증명 시스템을 이용하면 꼭 필요한 나이정보만 보여줄 수 있게 됩니다.

🔎 백신 시스템 개발하기

그럼 백신 시스템을 만들어봅시다🤗
DID개념을 이해하기 위해 Solidity를 활용해서 개발해봅시다!!

🧐 개발 전 환경세팅

⚠️ Solidity개발을 위해서 Remix를 실행해주세요!

🧑‍💻 필요기능 설계

요즘 어딜가더라도 꼭 하는 QR체크인을 생각하면서,
백신 시스템을 만들기 위해 필요한 기능들을 정리해봅시다.

  1. 백신접종 증명서는 신뢰받는 기관에서만 발급할 수 있다.
  2. 백신 접종 여부를 알 수 있어야 한다.
  3. 백신의 종류를 알 수 있어야 한다.
  4. 백신 접종 후 2주 경과 여부를 알 수 있어야 한다.(접종 날짜)

🧑‍💻 개발 시작!

Remix로 가서 코드를 작성해봅시다!

👉 발급받을 접종자의 정보와 접종자의 주소를 입력받아서 백신 증명서를 발급한다.
이때 백신 접종 증명서는 신뢰받는 기관에서만 발급할 수 있다.

function claimCredential(address _vaccineAddress, uint8 _vaccineType, string calldata _value) public returns(bool){
        require(Credential storage credential = credentials[_vaccineAddress]);
        require(credentials[_vaccineAddress].id == 0);
        credential.id = idCount;
        credential.issuer = msg.sender;
        credential.vaccineType = _vaccineType;
        credential.value = _value;
        credential.createDate = block.timestamp;
  		credential.status = true;

        idCount+=1;
        
        return true;
}

claimCredential 함수를 통해 발급자(issuer)는 접종자에게 백신 증명서를 발급할 수 있다.

👉 백신 접종 여부를 확인해야한다.

function isCredential(address _vaccineAddress) public view returns (bool){
         if(credentials[_vaccineAddress].status === true) return true;
         else return false;
}

백신 접종이 완료된 상태이면 true를 리턴해준다.

👉 백신의 종류를 알 수 있어야 한다.

function VaccineType(uint8 _type, string calldata _value) onlyIssuer public returns (bool) {
        require(bytes(vaccineEnum[_type]).length == 0);
        vaccineEnum[_type] = _value;
        return true;
}

🐈 코드는 여기!

📚 회고

이 주제는 DID와 Solidity에 대해 더 공부해보고싶어서 선택한 주제였다.
문제를 해결해나가면서 더 공부를 했지만 아직은 많이 부족한 것 같다.
컴파일 오류가 계속 나서 오류를 아직도 찾아나가고 잡아가는중이다😭
제대로된 백신 시스템을 꼭 만들어내고싶고, 전 과제와 마찬가지로 UI를 갖춘 앱을 만들어보려고한다.
앞으로 시간이 얼마나 걸릴지는 모르겠지만 이것도 꼭 완성해보고싶다!
과제를 하면서 계속 벽에 부딫히는 느낌이 들었지만, 할수있을때까지 시도해보면 언젠가는 되겠지👍

profile
Hello World! 🙌

0개의 댓글