백신시스템 DID 만들기

mango7loco·2022년 4월 7일
0

블록체인

목록 보기
1/4
post-thumbnail

3인 투표 시스템 만들기 :
https://velog.io/@mango_loco/3%EC%9D%B8-%ED%88%AC%ED%91%9C-%EC%8B%9C%EC%8A%A4%ED%85%9C-%EB%A7%8C%EB%93%A4%EA%B8%B0


졸업시스템 DID를 변경해서 백신시스템 DID를 만들었다.

깃허브 :
https://github.com/mango7loco/vaccineDID/blob/main/system.sol

이더스캔 : https://ropsten.etherscan.io/address/0xa811aF045e9C74a92CA5703cf2e48819B00E6356#code


컨트랙트

  • abstract contract OwnerHelper
    컨트랙트의 소유자를 설정하기 위해 사용된다.

  • abstract contract IssuerHelper is OwnerHelper
    컨트랙트 소유자가 발급기관(Issuer)를 추가하거나 삭제하는데 사용된다. 발급기관으로 등록되어야지 개인이 백신을 접종했을 때 해당 내용에 관한 정보를 블록체인 상에 기록할 수 있다.

  • contract CredentialBox is IssuerHleper
    발급기관이 개인의 크리덴셜을 만들 수 있다. 그리고 이 크리덴셜에 들어간 정보를 수정하는 함수들이 구현되어 있다. 해당 크리덴셜의 검증이 필요한 사람이 검증하고자 하는 주소를 이용해서 크리덴셜에 관한 정보를 얻을 수 있다.


CredentialBox 컨트랙트 설명

이제부터는 contract CredentialBox을 집중적으로 살펴보겠다.

먼저 constructor()에 의해서 vaccineEnum(백신 종류), statusEnum(몇 차까지 맞았는지), noteEnum(백신을 맞고 14일이 경과되었는지, 만료되었는지)이 자동으로 생성된다.

개인의 credential에는 id, 발급기관, 백신 종류, 몇 차까지 맞았는지, 백신을 맞고 14일이 경과되었는지, 언제 발급되었는지에 관한 정보가 담겨있다.

getCredential을 이용하면 해당하는 개인의 크리덴셜에 관한 전체 정보를 가져올 수 있다. passOrNot을 이용하면 특정 조건을 만족하는 크리덴셜을 가지고 있는 사람은 true의 결과값을 얻고, 아니면 false를 얻게 할 수 있어서 실생활에서 가장 많이 사용될 수 있는 함수이다.

vaccine, status, note 각각에 대해서 add함수는 새로운 종류를 추가하는 것이고, get함수는 해당하는 숫자에 대응하는 값이 무엇인지 얻을 수 있고, change함수는 개인의 크리덴셜에서 각 속성을 업데이트해야 할 때 사용할 수 있다.


사용 시나리오

가상의 시나리오를 통해서 구현된 컨트랙트가 잘 구현되는지 확인해보겠다.

친구 A와 친구B가 함께 밥을 먹으러 식당에 들어갔다. 해당 식당은 얀센 백신 2차 이상만 입장할 수 있었다. 친구 A는 모더나 백신을 1차 접종하였고, 친구 B는 얀센 백신을 2차 접종하였다. 둘은 모두 백신을 맞은지 14일이 경과한 상태이다.

친구 B부터 검증을 받았다.

친구 B의 크리덴셜 정보를 이용해서 해당 상점을 이용해도 된다는 true가 출력됨을 확인할 수 있다.

이번에는 친구 A가 검증을 받았다.

친구 A는 식당에서 제시한 조건을 만족하지 못해서 false가 출력됨을 확인할 수 있다.

식당에 못 들어가게 된 친구 A는 갑자기 인근 병원에 뛰어 들어가더니 곧장 얀센 백신을 2차 접종하였다.

해당 병원에서 접종을 하기 전에 친구 A의 크리덴셜을 확인하였을 때, 모더나 1차 접종을 맞은지 14일이 경과됨을 확인하였다. 사진 상에서 가장 아래줄에 ... ,1,1,2, ... 부분에서 첫번째 위치의 1이 모더나, 두번째 위치의 1이 1차 접종, 세번째 위치의 2가 백신을 맞은지 14일이 경과되었음을 나타낸다.

해당 병원에서는 이번에 맞은 백신 정보를 토대로 친구 A의 크리덴셜을 업데이트한다.

이렇게 백신을 다 맞고 친구 A는 다시 해당 식당에 돌아와서 자신도 얀센 백신을 2차 접종받았다며 들어가려고 한다.

하지만 접종을 받은지 14일이 경과되지 않아서 해당 식당에는 또다시 들어갈 수 없는 false의 결과값을 얻게 된다.

이런 시나리오처럼 백신시스템 DID를 활용하면, 식당에서는 개인 별 정보를 보관하지 않고도 원하는 조건의 손님을 편하게 검증할 수 있다.


개발 회고

Keep :
실제로 일상 생활에서 사용했던 COOV라는 앱의 퀄리티에는 훨씬 못 미치지만, 기본적인 개념을 직접 구현해보면서 학습할 수 있는 좋은 경험이었다.

Problem :
개인의 주소는 익명성을 가지고 있기 때문에, 특정 인물의 주소를 바로 알아낼 수는 없다. 하지만 만약 개인의 주소에 대응하는 사람이 누구인지 알게 된다면, 그 주소를 스마트 컨트랙트에 getCredential을 입력해서 해당 인물의 백신 접종 정보를 모두 얻어낼 수 있으므로 프라이버시가 보장되지 않는 상황이다. 이에 대한 해결책을 더 고민해보면 좋을 것 같다.

Try :
현재는 시나리오에서 한 것처럼 remix를 이용해서 스마트 컨트랙트를 동작했기 때문에 굉장히 사용 편의성이 떨어진다. 그러므로 실제 COOV앱처럼 개인의 주소를 바탕으로 QR코드를 생성하고, 이 QR코드를 카메라로 인식해서 위의 시나리오를 동작하게 하는 것도 구현해보면 좋을 것 같다.

profile
I can do this all day

0개의 댓글