Blog Content

    티스토리 뷰

    졸업증명 DID를 백신시스템으로 변경해 보자

    백신 인증서로 변경하기

     

    깃허브 : https://github.com/DobbyIsSlave/ha4-VCSystem.git

    컨트랙트 주소 : 0x9fb3F9c2714B506509139dB63B72807E068B2Adc

     

    GitHub - DobbyIsSlave/ha4-VCSystem

    Contribute to DobbyIsSlave/ha4-VCSystem development by creating an account on GitHub.

    github.com

     

    struct Credential {
        uint256 id;
        string value;
        mapping(uint8 => address) vaccineIssuers;
        mapping(uint8 => uint8) vaccineType;
        mapping(uint8 => uint256) vaccineInfo;
        uint8 lastestVaccineNum;
    }

    백신의 경우 어떤 백신을 맞는지 언제 맞았는지 몇차까지 맞았는지의 정보가 필요하여 mapping을 사용하여 정의

     

    function claimCredential(address _vaccinatedAddress, uint8 _vaccineNum, uint8 _vaccineType, string calldata _value) public onlyIssuer returns (bool) {
        Credential storage credential = credentials[_vaccinatedAddress];
        require(credential.id == 0);
        require(_vaccineNum == 1);
        credential.id = idCount;
        credential.vaccineIssuers[_vaccineNum] = msg.sender;
        credential.vaccineType[_vaccineNum] = _vaccineType;
        credential.vaccineInfo[_vaccineNum] = block.timestamp;
        credential.value = _value;
        credential.lastestVaccineNum = 1;
    
        idCount += 1;
    
        return true;
    }

    발급 이력이 있는지 확인 및 1차 백신 접종의 경우에만 증명서 발급을 위해 require 사용

     

    나머지는 입력 받은 정보를 저장

     

    function getCredential(address _vaccinatedAddress, uint8 _vaccineNum) public view returns (Presentation memory) {
        require(credentials[_vaccinatedAddress].id != 0, "not claimed credential");
        require(_vaccineNum <= credentials[_vaccinatedAddress].lastestVaccineNum, "invaild vaccien number");
    
        string memory vaccineType;
        vaccineType = getVaccineType(credentials[_vaccinatedAddress].vaccineType[_vaccineNum]);
        Presentation memory presentation = Presentation(
            credentials[_vaccinatedAddress].vaccineIssuers[_vaccineNum],
            vaccineType,
            _vaccineNum,
            credentials[_vaccinatedAddress].vaccineInfo[_vaccineNum]
        );
    
        return presentation;
    }

    접종자의 주소와 백신 차수를 입력 값으로 넣으면 주소, 타입, 접종 차수 및 접종 날짜를 리턴함 

     

     

    회고

    진행에 어려웠던 점은 정보를 어떤 구조로 저장할지 정하는 것이었다.

     

    접종 차수에 따라서 백신 종류 및 날짜 등등을 다르게 저장해야 했기에 결국 mapping을 통해서 진행하였다

     

    부족했다고 느낀 점은 마지막에 증명서를 발급하고 확인할 때 block.timestamp를 사용해서 저장했더니

     

    나오는 값이 155693493 이런식으로 나와서 어떻게 year, month, day로 변환해야 할지 해결을 못했다.

     

    찾아본 바로는 기준이 1970-01-01 이고 기준으로부터 155693493초만큼 지난 값이 저장된다는 말인 것 같은데

     

    이걸 변환해주는 라이브러리가 있는 것으로 확인했고

     

    다음에 다시 timestamp를 사용하게 된다면 이를 변환해보록 하겠다.

     

    'BlockChain' 카테고리의 다른 글

    가위바위보 게임 개선하기  (0) 2022.02.08

    Comments