체인의정석

ethers.js에서 keccak256 사용하기 본문

블록체인/Ethers & web3

ethers.js에서 keccak256 사용하기

체인의정석 2022. 2. 13. 15:48
728x90
반응형

컨트렉트에서 특정 데이터를 기록할 때 종종 keccack256의 해시 값을 저장시킨다.

    _tokenType = keccak256(abi.encodePacked("erc721"));

위에는 솔리디티의 코드인데,

다음과 같이 erc721 종류의 토큰을 나타내기 위해 사용하는 경우이다.

여러 토큰을 다루어야 하는 dapp이다 보니 위와 같은 표시를 남기게 되고 이를 체크하여 다양한 종류의 표준 토큰을 관리하는것이 목적인 상황이다.

 

테스트를 하거나 스크립트를 짤 때 이러한 점을 고려하여 keccak256을 사용해야 할 상황이 있다.

 

먼저 ethers에 나오는 keccak을 하는 방법이다.

        const tokenType721 = await ethers.utils.keccak256(ethers.utils.toUtf8Bytes("erc721"));

이럴때 만약 문자 자료형이 들어가게 되면 위와 같이 해야 해시된 값이 나오게 된다.

이는 아래의 문서에서도 확인이 가능하다.

https://docs.ethers.io/v5/api/utils/hashing/

 

Hashing Algorithms

Documentation for ethers, a complete, tiny and simple Ethereum library.

docs.ethers.io

근데 이보다 더 정확하게 solidity에서의 keccack을 하는 법이 있었다.

https://docs.ethers.io/v5/api/utils/hashing/#utils-solidityKeccak256

 

Hashing Algorithms

Documentation for ethers, a complete, tiny and simple Ethereum library.

docs.ethers.io

바로 solidityKeccak이다.

  console.log("getSolidityKeccack",await ethers.utils.solidityKeccak256(["string"],["erc721"]));

위와 같이 하면 된다.

 

이렇게 나온 자료형은 모두 bytes32 자료형을 취하는데

getTokenType 0x0e23893281f878f0088dd044e35b03661018bff448ff89faadef02011e687deb
getkeccack 0x0e23893281f878f0088dd044e35b03661018bff448ff89faadef02011e687deb
getSolidityKeccack 0x0e23893281f878f0088dd044e35b03661018bff448ff89faadef02011e687deb

3개의 값을 체크해 보니 모두 같은 값이 나왓다.

 

아무거나 사용해도 상관없을것 같다 ㅎㅎㅎㅎ

728x90
반응형
Comments