DID가 무엇인지 알아보고, 백신 시스템을 만들어봅시다!
DID는 탈중앙 신원증명으로, 데이터의 주권이 개인에게 있고
필요할때 필요한 데이터만을 중앙화된 시스템을 거치지 않고 증명할 수 있는 기술입니다.
예를들어 우리가 식당에서 술을 주문했다고 해봅시다🥂
직원분이 신분증을 요구했을 때, 신분증을 보여주게되면 이름, 주소, 등 불필요한 개인정보가 노출됩니다.
하지만 DID기반 신원증명 시스템을 이용하면 꼭 필요한 나이정보만 보여줄 수 있게 됩니다.
그럼 백신 시스템을 만들어봅시다🤗
DID개념을 이해하기 위해 Solidity를 활용해서 개발해봅시다!!
⚠️ Solidity개발을 위해서 Remix를 실행해주세요!
요즘 어딜가더라도 꼭 하는 QR체크인을 생각하면서,
백신 시스템을 만들기 위해 필요한 기능들을 정리해봅시다.
- 백신접종 증명서는 신뢰받는 기관에서만 발급할 수 있다.
- 백신 접종 여부를 알 수 있어야 한다.
- 백신의 종류를 알 수 있어야 한다.
- 백신 접종 후 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를 갖춘 앱을 만들어보려고한다.
앞으로 시간이 얼마나 걸릴지는 모르겠지만 이것도 꼭 완성해보고싶다!
과제를 하면서 계속 벽에 부딫히는 느낌이 들었지만, 할수있을때까지 시도해보면 언젠가는 되겠지👍