백신 인증서로 변경하기
깃허브 : 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 |
|---|