[TIL] 2023-05-08 DAY35
오늘 배운것들
- 저번시간 복습
1) bytes와 string 변환 확인
2) array 복습- address와 mapping
- 블록체인 기초 이론
각종 팁
회고
- 이론수업 때 집중하려고 노력하기
contract GasAndFee {
uint b; // 상태변수
// 상태변수 변화 -> gas비 소비, 잔액 변화
function changeB() public {
b = b+5;
}
// pure 함수 -> 잔액 변화 x
function add(uint _a, uint _b) public pure returns(uint) {
return _a+_b;
}
// pure와 같은 역할이지만 일반 함수 -> gas비 소비, 잔액 변화
function add2(uint _a, uint _b) public returns(uint) {
return _a+_b;
}
}
address라는 20 bytes 변수가 있음.
주소 및 잔액조회
contract Address {
// address는 20byte짜리 정적변수
// address라는 형의 변수가 따로 존재
address a;
function getAddress() public view returns(address) {
return address(this); // 컨트랙트 주소
}
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 = _a;
// }
function getA2() public view returns(bytes20) {
return bytes20(a);
}
function getA() public view returns(address) {
return a;
}
}
형태: mapping이름[key 값] = value값
key값을 바로 저장하는게 아니라 KECCAK256형태로 저장함
배열에 비하여 mapping을 하면 검색을 하는데 더 유리함
contract Mapping {
mapping(uint => uint) a; // key-value 쌍이 숫자-숫자로 연결되어 있는 mapping a
mapping(uint => string) b; // string이 알고 싶음
mapping(string => address) c; // address가 알고 싶음
// 이중 mapping(ex) 3반에 있는 alice의 점수)
mapping(uint => mapping(string => uint)) score;
// 이름을 검색하면 그 아이의 키를 반환받는 contract를 구현
mapping(string => uint) height;
// mapping에 정보 넣기(이름과 키 입력)
function setHeight(string memory _name, uint _h) public {
height[_name] = _h; // mapping이름[key 값] = value값
}
// mapping에 정보 빼기(이름을 입력하면 키 불러오기)
function getHeight(string memory _name) public view returns(uint) {
return height[_name]; // mapping이름[key값]
}
// 정보 삭제
function deleteHeight(string memory _name) public {
delete height[_name];
}
}

-> 복잡한 지갑주소를 쉽게 관리(key의 효과적인 저장방법)

-> key 값을 넣으면 거기에 맞는 value 찾기 가능

-> 실제 키 값에 따른 value저장 예시(Extension, Branch, Leaf node)