오늘은 array 복습, struct에서 특정 요소를 변경 또는 반환하는 방법,
view/pure
함수와 일반함수 간에 가스비 소비 유무, 그리고mapping
과address
타입,머클트리
와머클 패트리시아 트리
에 대해 배웠다.
// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.18;
// 먼저 D라는 구조체 안에 숫자형 변수a, 문자열 변수b, bytes2형 변수c를 선언한다.
contract note1 {
struct D {
uint a;
string b;
bytes2 c;
}
// D형 변수 dd 선언.
D dd;
// 변수 dd에 값 부여.
// string은 동적이기 때문에 memory위치에 데이터를 넣고 bytes2는 정적으로 크기가 고정되어 있기 때문에 데이터 위치를 지정해줄 필요가 없다.
// 변수 dd에 D구조체 안의 변수값들을 넣어준다.
function setDD(uint _a, string memory _b, bytes2 _c) public {
dd = D(_a, _b, _c);
}
// dd의 값을 반환하는 함수로 타입은 D이기 때문에 출력값은 D타입 이다.
function getDD() public view returns(D memory){
return dd;
}
// D형 변수들이 들어가는 array Ds를 선언.
D[] Ds;
// array Ds에 새로운 D형 변수값들을 넣는 함수 생성.
function pushD(uint _a, string memory _b, bytes2 _c) public {
Ds.push(D(_a, _b, _c));
}
// Ds의 n번째 요소를 반환하는 함수 생성.
// 출력값은 D 타입이다.
function getN(uint _n) public view returns(D memory) {
return Ds[_n-1];
}
}
contract note2 {
// address형 변수a 선언.
address a;
// address(this)는 해당 컨트랙트(note2)의 주소를 반환한다.
function getAddress() public view returns(address) {
return address(this);
}
// address(msg.sender)는 현재 스마트컨트랙트를 호출한 사용자의 지갑 주소를 반환한다.
function getMyAddress() public view returns(address) {
return address(msg.sender);
}
// 스마트컨트랙트를 호출한 사용자의 잔액
function getMyBalance() public view returns(uint) {
return address(msg.sender).balance;
}
// 현재 스마트컨트랙트의 이더 잔액
function getContractBalance() public view returns(uint) {
return address(this).balance;
}
function setA(address _a) public {
a = _a;
}
function setA2(bytes20 _a) public {
a = address(_a);
}
function getA() public view returns(address) {
return a;
}
function getA2() public view returns(bytes20) {
return bytes20(a);
}
}
contract note3 {
mapping(uint => uint) a;
mapping(uint => string) b; // mapping(type => type) mapping name
mapping(string => address) c;
// height라는 string 타입의 key와 uint 타입의 value를 가지는 매핑 변수를 선언.
mapping (string => uint) height;
// height에서 _name에 해당하는 key의 값을 _height로 설정.
function setHeight(string memory _name, uint _height) public {
height[_name] = _height;
}
// _name이라는 key 값을 입력하면 대응하는 value값을 반환.
function getHeight(string memory _name) public view returns(uint) {
return height[_name];
}
}
머클 패트리샤 트라이는
저장
,수정
,삭제
,검색
을 효율적으로 할 수 있게 해준다.
머클 패트리샤 트라이에는 4가지 노드가 있다.(blank
,leaf
,branch
,extension
)