오늘은 블록체인 파트에 들어오고 첫번째 테스트를 봤다. 알고리즘을 짠다라기보다는 문제에 나온 기능들을 구현하는 식으로 테스트를 하였다. 솔리디티를 통한 첫 테스트 이기도 했고 정해진 시간 내에 풀어야 한다는 압박감 때문인지 어렵지않은 부분에서 막혀서 시간을 많이 허비했다. 오늘로 깨달은 것은 아직 내가 갈 길이 많이 멀고 진짜 더 더 열심히 해야한다는 것이었다.
솔리디티에서
keccak256
해시 함수는 입력값을 해시화하여 고정된 크기 256비트 해시값을 반환해준다.
입력값으로는bytes
형식의 입력값만 받을 수 있고문자열, 숫자, 불리언
등을 해시하려면bytes
형식으로 반환한 후에 사용할 수 있다.
또 다른 방법으로abi.encodePacked
함수를 활용하면 바이트 배열로 반환해준다.
솔리디티에서 제공 하는 두 함수 모두 괄호안의 값을 바이트 배열로 변환해준다는 점이지만 형태와 의미가 다르다.
bytes()
는 고정된 길이의 바이트 배열로 변환하는데 이 때 문자열을 바이트 배열로 변환하는데 사용된다.
반면abi.encodePacked()
는 다양한 타입(문자열, 숫자, 불리언)의 값을 하나의 바이트 배열로 묶어서 변환하는 데 사용된다.
그럼keccak256(bytes())
과keccak256(abi.encodePacked()
의 차이점은 뭘까?
keccak256(bytes())
는 문자열을 바이트 배열로 변환한 다음 해싱을 수행하고,
keccak256(abi.encodePacked()
는 인자로 전달된 값을 바로 패킹하여 해싱을 수행한다.
function DA() public pure returns(uint) {
string[] memory a = new string[](4);
a = new string[](6);
return a.length;
}
4개의 문자열을 저장할 수 있는 문자열 배열 'a'를 선언한다.
그 후 'a'를 6개의 문자열을 저장할 수 있는 배열로 재할당한다.
이처럼 배열에 크기를 new 키워드를 통해 동적으로 배열을 생성하고 크기를 재할당해줄 수 있다.