solidity study -crypto zombie 레슨 2

작홍분·2021년 9월 10일
0

mapping, address라는 2개의 자료형 등장.

이더리움 계정은 주소를 가지고 있다.
주소는 특정유저가 소유한다. (고유 id임)

mapping

구조화된 데이터를 저장하는 또다른 방법.

정의
key-value 저장소이다.

mapping(address => uint) public accountBalance;

이때 key는 address, 값은 uint이다.

msg.sender

함수를 호출한 사람의 주소를 가리킴.

이를 이용하고 mapping 업데이트하기

mapping( address => uint) favoriteNumber; 
//key값 address, value값 uint 인 것 mapping
function setMyNumber(uint _ myNumber)
//_mynumber를 인수로 갖는 함수 설정
favoriteNumber[msg.sender] = _myNumber;
// 자신의 주소를 인수로받아 u int값을 출력하는 favoritenumber를 호출하고, 이를 _myNumber에 저장. 
function whatIsMyNumber() public view returns(uint){
return favoriteNumber[msg.sender];}
//what is my number은 자신의 주소에 대한 값을 반환한다. \

갑자기 자기 주소가 왜필요한거야?

Require

특정조건이 참이 아닐 때 실행을 멈춤

function sayHi(string_name) public returns(string){
require(keccak256(_name)==keccak256('Vita'));
return "hi";
}
// Vita가 아닌 다른 것으로 인수를 주면 에러메시지와 함께 함수 실행이 안될거임

마치 if 문과 비슷한 느낌

상속

코드가 길어질때 잘 정리해서 나누기
방법

contract A is B{}
사용
// A 컨트랙트는 B 컨트랙트에 있는 함수에 모두 접근이 가능해진다. 

import
다른 파일에 있는 것을 불러올 때 import 사용

import './someothercontract.sol';

변수 저장 공간으로 memory, storage가 있음.
앞선 궁금증 해결!
storage : 변수가 영구적으로 저장됨
memory : 변수가 임시적으로 저장됨

struct와 array를 처리할 때 쓰인다.

영구적으로 변경할 때 : storage
단순히 데이터를 복사할 때: memory

이부분은 전체적으로 잘 이해가 되지 않는다.

Internal 과 External

Internal : 함수가 정의된 컨트랙트를 상속하는 컨트랙트에서도 접근이 가능하지만, 다른 사용자들은 사용 불가.
external : 컨트랙트 밖에서만 호출, 다른함수에 의해 호출될 수 없다.

contract Sandwich{
 uint private sandwichesEaten =0;
 function eat() internal{
 sandwichesEaten++;
 }
}

다른 컨트랙트와 상호작용하기.

컨트랙트의 인터페이스를 먼저 정의해야 한다.
전체적으로 이해 잘 안됨..

인터페이스 활용하기

인터페이스를 정의한 이후에,
컨트랙트에서 인터페이스를 이용해 함수를 호출 할 수도 있다.

다수의 반환값 처리하기.

if문

자바스크립트와 동일

function eat(string sandwich)public {
if (keccak256(sandwich)== keccak256("blt")){
eat();
}
}

0개의 댓글