solidity 자료형

HyeongA·2023년 5월 3일
0

Blockchain_dev

목록 보기
2/20
post-thumbnail

📍 자료형 뒤에 붙는 숫자는 bits 또는 bytes를 의미

  • 8bits = 1bytes = 16진수 2자리 = 0 ~ ff(16진수) = 0 ~ 255(10진수)
  • 용량이 다르다 = 표현할 수 있는 최댓값의 크기가 다르다

1. uint (숫자형)

  • uint uint8 uint16 ... uint256 과 같이 나타냄
  • 뒤에 붙은 숫자의 단위는 bit
  • uint의 경우, uint256를 의미
  • 기본값 : 0

    input의 경우, uint256->uint8과 같이 더 작은 용량으로는 변환 가능
    output의 경우, uint8->uint256과 같이 큰 용량으로는 변환 가능

2. String (문자형)

  • 대소문자 구분 가능
    : 아스키코드(ASCII)로 변환되어 저장되기 때문
  • string을 지역변수로 선언 시 memory를 반드시 적어주어야 함

🔎 memory

: string의 경우 어디위치에 있는 어떤 값을 사용할 것 인지를 명시해 주어야 함
: memory의 경우 휘발성이며 가스 효율이 높음

🔎 Storage vs Memory

: Storage store data in blockchain and it remains immutable. Memory store temporary variables, that included in functions and their lifetime limited while executing this function. So when we pass string _name as a function argument, it will be assigned to memory, while your variable in struct(name) will be assingned to storage.
: memory는 (복사본이기 때문에) 상대적으로 수정이 쉬움. calldata는 원본이라 memory보다 수정이 어려움.
※가스 효율을 높이기 위해 memory와 calldata를 구분해 줌

3. Bytes

  • bytes bytes1 bytes2 ... bytes32 과 같이 나타냄
    : 선언할 수 있는 정적인 값중엔 bytes32(64자리)가 최대
  • 뒤에 붙은 숫자의 단위는 byte
  • bytes의 경우, 문자형과 동일하게 memory를 적어줘야 함
    : bytes memory는 무한대
    : bytrs32 != bytes memory
    ( 32는 정적으로 정해져있음, memory는 동적으로 존재 )
    : bytes 뒤에 자릿수 설정하는 것이 좋음 ; 가스비 절감을 위하여
bytes 		//0x ; 무한(동적)
bytes1 		//0x00 ; 1byte = 8bits =2자리 
bytes2 		//0x0000 ; 2 = 4자리
bytes32 	//32 = 64자리
  • 기본값 : 0x (16진수 표시)
  • 아스키코드(ASCII)를 사용하기 때문에 기본 값이 0x로 나움
  • "16"의 경우 문자로 "1","6"인식하기 때문에 0x3136으로 출력 됨
  • bytes의 경우 input, output의 자릿수를 맞춰 주어야 함

4. Address

  • 20bytes 크기 (16진수; 40자리; 정적)
  • address != bytes20
    : address가 20 bytes이지만, 길이가 일치할 뿐 두 개가 같은 건 아님
    : 엄연히 다른 형이기 때문에 byte로 사용하려면 형 변환 필요
bytes20(address)  	// bytes20
address(bytes20)  	// address
bytes20(address)[0] // bytes1
  • 모든 스마트 컨트렉트는 주소를 가지고 있음
// 배포한 스마트 컨트렉트의 주소 조회
function getAdderess() public view returns (address){
   return address(this);
}
// 내 account주소 조회
function getMyAddress() public view returns(address){
   return address(msg.sender);
}
// 잔고 조회 (실제 잔고와 조금 차이남)
function getMyBalance() public view returns(uint){
   return address(msg.sender).balance;  
} 
// bytes20 -> address 변환
function setA2(bytes20 _a) public {
    a = address(_a);
}

5. Array (배열형)

  • 같은 자료형들이 들어있는 집합
  • 자료형 [] array이름
  • 넣을 때는 왼쪽에서부터 차례로 쌓이고(push), 뺄 때는 뒤에서부터 제거(pop)
  • 삭제의 경우 값을 초기화 시킴
배열.push();			//넣기 
배열.pop();				//빼기 
배열[n]=새로운 값;		//바꾸기
delete 배열[];			//삭제 

👉 array 자세히 알아보기


참고자료

profile
Solidity | React | Python

0개의 댓글