관리 메뉴

개발이야기

[블록체인 개발] Web3 string 을 bytes32로 변환하기 본문

블록체인 /블록체인 개발

[블록체인 개발] Web3 string 을 bytes32로 변환하기

안성주지몬 2019. 2. 11. 00:00

How to convert string to bytes32 ? 



어떻게 string 타입을 bytes32로 변환할 수 있을까. (web3 내에서)

이 질문에 대한 구글링 결과 많은 솔루션들이 있었다.


그 중에 하나가 web3.utils.fromAscii(text)이다.



하지만 에러가 발생하였는데 에러는 다음과 같았다.




"Invalid bytes32 value" 


아니 bytes32로 변환시켜준다면서 bytes32가 아니라니 !!! 

추후에 알고보니 문제는 0으로 팬딩이 되지 않는것이었다. 스택오버플로우에서는 해당 솔루션으로 문제를 해결했다고 하는데 어떻게 해결되었는지 궁금하다.


0을 수동으로 팬딩해주는 방법도 생각했지만, 길이의 가변성을 일일히 막기는 귀찮다고 생각하였다.

그래서 함수를 제공해주는 패키지를 찾아봤더니 역시나 기본으로 제공해주는 패키지가 있었다.


바로 ether.js 이다 .


이 패키지를 사용하기 위해서는 먼저 패키지를 설치해야한다.


npm install --save ethers


위의 명령을 입력하면 해당 패키지가 잘 설치가 된다.

그후 const ethers = require('ethers')를 js 파일에 추가해준다.

그리고 


ethers.utils.formatBytes32String(text)


text에 bytes32로의 형변환을 원하는 스트링 타입을 넣어주면 0이 팬딩된 bytes32 타입이 반환된다.

bytes32 타입을 string으로 형변환하는 구문은 아래와 같다 .


ethers.utils.parseBytes32String(bytes32)




이제 스마트컨트랙트에 bytes32 타입의 인자를 넘겨줄 수 있게 되었다.

그리고 bytes32로 저장되어 있는 변수를 스트링 타입으로 web3로 불러낼 수 있게 되었다 ! 




참고 사이트

[1] ether.js docs

https://docs.ethers.io/ethers.js/html/api-utils.html#bytes32-strings


[2] ether.js github( how to install ether.js)

npm install --save ethers

https://github.com/ethers-io/ethers.js/




Comments