[멋쟁이 사자처럼 블록체인 스쿨 3기] 23-05-08

임형석·2023년 5월 8일
0

Solidity


Address

솔리디티에는 uint string bytes 와 같은 형태도 있지만, 이더리움의 컨트랙트 언어답게 address 라는 형태도 존재한다.

address 는 20bytes 의 크기를 갖고 있으며 20bytes 는 이더리움 지갑주소의 길이인 16진수 40자릿수 만큼 받아올 수 있다.

0x9d8E21A936D09Ffdd2963B0795Af581849D849Ab

컨트랙트 주소 반환받기

address 형식의 상태변수 a 를 선언했다.

address a;

그리고 주소를 반환하는 함수를 만들어 보았다.

function getAddress() public view returns(address) {
return address(this);
}

위의 함수는 this 라는 문법이 쓰였다. 이 함수에서 this 의 뜻은, 함수 자신을 포함한 컨트랙트를 뜻한다.

즉, 위 함수는 배포한 컨트랙트의 address 를 가져온다.

컨트랙트의 주소를 반환하는 것을 볼 수 있다.


지갑 주소 반환받기

function getMyAddress() public view returns(address) {
return address(msg.sender)
}

msg.sender 라는 문법으로 작성해야 지갑 주소를 반환받을 수 있다.

즉, 위 함수를 실행시키는 사람의 지갑 주소를 반환해주는 것이다.


지갑 balance 반환받기

msg.sender 로 특정 지갑을 지정하고, balance 문법으로 특정 지갑의 balance 를 가져온다.

function getMyAddress() public view returns(address) {
return address(msg.sender).balance
}

컨트랙트 balance 반환받기

컨트랙트를 this 로 지정하고, balance 를 가져온다.

function getMyAddress() public view returns(address) {
return address(this).balance
}

Mapping

맵핑은 key-value 가 쌍으로 묶여있는 배열에서 key 또는 value 로 다른 나머지 key 또는 value 를 가져올때 사용한다.

솔리디티에서 맵핑 상태변수 선언은 아래와 같다.

mapping(uint => string) a;
mapping(uint => uint) b;
mapping(string => address) c;

key => value 형식의 맵핑 상태변수 a; b; c; 순서이다.

맵핑은 아래와 같이 이중으로도 사용이 가능하다.

mapping(uint => mapping(string => uint)) number;

이중 맵핑 사용의 예시로, 3반 => 블체스의 => 번호를 구할때 이렇게 구할 수 있겠다.

이름을 입력하면 그 학생의 키를 반환하는 상태변수 height 선언.

mapping(string => uint) height;

학생의 이름과 키를 저장하는 함수.

    function setstudent(string memory _name, uint _hgt) public {
	height[_name] = _hgt;
    }

학생의 이름과 키를 반환하는 함수.

    function getstudent(string memory _name) public view returns(uint) {
	return height[_name];
    }

Key & Value

비트코인은 UTXO 형식으로 관리됨.

이더리움은 Key 와 Value 형식으로 관리됨.

key = 지갑 , value = 잔고.

보통 Array 형식은 많은 배열을 찾아내서 계산할때 적절,

mapping 형식은 많은 배열을 그대로 꺼내와서 반환할때 적절.


블록체인 이론


Merkle PATRICIA Tree

머클트리는 2진트리 방식이고, 패트리샤 트라이는 자식이 있을 수도, 없을 수도 있는 트리구조이다.

이더리움의 지갑 주소 관리에 사용된다.

다음 단어를 머클패트리샤 트리 구조로 만들어보았다.

abcd
afcde
afcof
afjhm
abdef
abefs
abegh
abegi

a-b-c 이후로 겹치는 부분이 없으므로, a-b-cd 로 표시할 수도 있다.

a-b-def 도 마찬가지이다.

그렇다면 왜 패트리시아 트라이를 사용할까?

트리 구조는 자료를 관리하기에 편리하다.

그리고 이더리움의 지갑 주소는 key 와 value 쌍으로 이루어져있고,

수 많은 이더리움의 지갑을 관리하는데에 트리 구조가 사용된다.

아래의 빨간 선이 path, key 이고, 파란색이 value 이다.

이렇게 지갑 주소를 관리한다면, 각 이용자들의 지갑주소를 빠르게 불러올 수 있고 지갑의 balance 조회도 빠르다.


Remix IDE


Remix 먹통 오류

Remix IDE 를 이용해서 컨트랙트를 작성하는데, 이 컨트랙트들을 깃으로 관리할 수 있다.

현진님 벨로그

여기서 도움을 많이 받았다.

현진님 벨로그에서 작성한대로 깃 설정을 해두면 되는데..

가끔 공부하다 운동을 하다온다던지, 식사 하는경우 자리를 일정 시간 비우게 되는데,

이때 remix 가 먹통이 되는 경우가 발생한다. 컴퓨터 문제인가 싶었는데 크롬의 다른 탭은 정상 작동하는걸 보니 리믹스 자체 문제로 보인다.

그리고 remix 탭을 끈 후, 다시 켜보면 이렇게 초기화된 모습이 보이는데..

내가 연습했던 파일들이 모두 사라져있다. 이땐 깃 클론해서 불러오면 된다.

이렇게 깃 클론해서 불러오면 이전에 설정했던 깃 토큰이나 이메일이 그대로 불러와진다.

이런 일을 방지하려면

  1. 미리미리 깃 푸쉬 해두기.
  2. ctrl + s 를 수시로 눌러주기.
  3. 30분이상 자리를 비울경우, 미리 remix 탭을 꺼버리기.

0개의 댓글