[TIL] 2023-05-11

Melon Coder·2023년 5월 11일
0

TIL

목록 보기
32/50
post-thumbnail

Today I Learned


[Solidity]

오늘은 블록체인 파트에 들어오고 첫번째 테스트를 봤다. 알고리즘을 짠다라기보다는 문제에 나온 기능들을 구현하는 식으로 테스트를 하였다. 솔리디티를 통한 첫 테스트 이기도 했고 정해진 시간 내에 풀어야 한다는 압박감 때문인지 어렵지않은 부분에서 막혀서 시간을 많이 허비했다. 오늘로 깨달은 것은 아직 내가 갈 길이 많이 멀고 진짜 더 더 열심히 해야한다는 것이었다.


keccak256

솔리디티에서 keccak256 해시 함수는 입력값을 해시화하여 고정된 크기 256비트 해시값을 반환해준다.
입력값으로는 bytes형식의 입력값만 받을 수 있고 문자열, 숫자, 불리언등을 해시하려면 bytes형식으로 반환한 후에 사용할 수 있다.
또 다른 방법으로 abi.encodePacked 함수를 활용하면 바이트 배열로 반환해준다.

bytes() vs 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 키워드를 통해 동적으로 배열을 생성하고 크기를 재할당해줄 수 있다.

0개의 댓글