체인의정석

Solidity에서 bytes와 bytes32의 유즈케이스 및 활용 문법 본문

블록체인/Solidity

Solidity에서 bytes와 bytes32의 유즈케이스 및 활용 문법

체인의정석 2022. 5. 18. 18:48
728x90
반응형

1. 데이터를 bytes 형태로 사용하는 경우

먼저 encode 후에 decode 를 해서 데이터를 컨트렉트 간에 보내지만 다시 풀어내야 하는 경우가 있다.

이 경우

bytes memory Data

이런식으로 bytes 자료형에 memory를 명시하여 데이터를 받는다.

 

solidity에서의 사용

uint256 uintData = abi.decode(bytes(Data), (uint256));

만약 숫자형의 데이터를 넣어서 풀 경우 위와 같이 풀어서 decode를 하면 원래의 값을 가져와서 사용할 수 있다.

 

상황에 따라서 다른 데이터를 보내는 컨트렉트 구조를 짤때 위와 같이 응용이 가능하다.

(폴리곤 브릿지에서 모든 토큰 유형의 자산을 지원할때도 사용

 

이러한 경우 데이터를 넣을때는 다음과 같이 코드를 짠다.

 

ethers.js의 경우

const abiCoder = ethers.utils.defaultAbiCoder;
const Data = 1;
let uintData = abiCoder.encode(["uint"],[Data]);

web3.js의 경우 (추후 업데이트)

 

2. 데이터를 bytes32 형태로 사용하는 경우

이러한 경우는 해시값을 넣을 경우에 사용된다.

값을 딱히 해석하지 않아도 정해진 값이 들어가는 경우가 여기에 해당된다.

또는 암호화를 한 값을 기록해야할 경우가 여기에 해당된다.

당연히 암호화한 부분을 넣는 부분만 있고 decode를 할 필요는 없다.

 

그래서 bytes32에는 해시 함수의 결과값이 들어가게 된다.

 

solidity에서의 사용

bytes32 data

 

ethers.js의 경우

  const stringData = await ethers.utils.solidityKeccak256(["string"],["data"]);

이 값이 bytes32 의 data에 들어가면 된다.

 

web3.js의 경우

const stringData = web3.utils.soliditySha3('data');

이 값이 bytes32 의 data에 들어가면 된다.

728x90
반응형
Comments