https://cryptozombies.io/ko/lesson
#1 Solidity Tutorial & Ethereum Blockchain Programming Course | CryptoZombies
CryptoZombies is The Most Popular, Interactive Solidity Tutorial That Will Help You Learn Blockchain Programming on Ethereum by Building Your Own Fun Game with Zombies — Master Blockchain Development with Web3, Infura, Metamask & Ethereum Smart Contracts
cryptozombies.io
내가 볼라고 적는거임
다들 클립토좀비 들어가서 공부해
레슨 1의
챕터 2: 컨트랙트
솔리디티 코드는 컨트랙트안에 싸여있음
솔리디티 소스 코드는
버전선언으로 시작해야함!
pragma solidity ^0.4.19; //1. 여기에 솔리디티 버전 적기
//2. 여기에 컨트랙트 생성
contract ZombieFactory{
}
컨트랙트를 위한 뼈대 갖추기 완성!
챕터 3: 상태 변수 & 정수
상태변수는 컨트랙트 저장소에 영구적으로 저장돼!
즉 이더리움 블록체인에 기록된다는 것.
contract Example {
//이 변수가 블록체인에 영구적으로 저장됨
uint myUnsignedUnteger = 100;
}
챕터 4: 수학 연산
- 덧셈: x + y
- 뺄셈: x - y,
- 곱셈: x * y
- 나눗셈: x / y
- 모듈로 / 나머지: x % y (이를테면, 13 % 5는 3이다. 왜냐면 13을 5로 나누면 나머지가 3이기 때문이다)
솔리디티는 지수 연산도 지원하지 (즉, "x의 y승", x^y이지):
uint x = 5 ** 2; // 즉, 5^2 = 25
챕터 5: 구조체
복잡한 자료형을 필요로 할 때 솔리디티로는 구조체를 쓰면 됨
struct Person {
uint age;
string name;
}
구조체를 통해 여러 특성가진 보다 복잡한 자료형을 생성할 수 있지.
컨트랙트 안에 구조체 있는 모습
pragma solidity ^0.4.19;
contract ZombieFactory {
uint dnaDigits = 16;
uint dnaModulus = 10 ** dnaDigits;
struct Zombie {
string name;
uint dna;
}
}
챕터 6: 배열
어떤 것의 모음집이 필요할 때
배열을 사용할 수 있지
솔리디티에도 정적배열, 동적배열 두 종류배열 있어.
//2개의 원소를 담을 수 있는 고정길이의 배열;
uint[2] fixedArray;
//고정길이의 배열, 5개의 스트링을 담을 수 있다.
string[5] stringArray;
//동적배열은 고정된 크기가 없으며 계속 크기가 커질 수 있다.
uint[] dynamicArray;
구조체의 배열을 생성할 수 있다!
아까 우리가 sturct Person {uint age; string name;} 이렇게 만들었던 구조체를 이용하면
Person[] people; // 이는 동적 배열로, 원소를 계속 추가할 수 있다.
상태변수가 블록체인에 영구적으로 저장할 수 있는 것처럼 구조체의 동적배열을 생성하면
마치 데이터베이스처럼 컨트랙트에 구조화된 데이터를 저장하는데 유용하다.
Public 배열
public으로 배열을 선언할 수 있음 솔리디티는 이런 배열을 위해 getter메소드를 자동적으로 생성한다.
Person[] public people;
다른 컨트랙트들은 이 배열을 읽을 수는 있게되지만 쓸 수는 없다.
이는 컨트랙트에 공개데이터를 저장할 때 유용한 패턴이다.
지금까지 한 코드
pragma solidity ^0.4.19;
contract ZombieFactory {
uint dnaDigits = 16;
uint dnaModulus = 10 ** dnaDigits;
struct Zombie {
string name;
uint dna;
}
// 좀비들을 다른 앱에 자랑하고 싶어서 좀비 군대 저장소를public으로 함.
//Zombie구조체의 public배열을 생성하고 이름을 zombies로 한다.
Zombie[] public zombies;
}
챕터 7: 함수 선언
솔리디티에서 함수 선언
function eatHam(string _name, uint _amount){
}
(함수의 인자명을 _로 시작하는 건 전역변수랑 구별하려고 하는 관례때문임~)
이 함수를 오출 할때는 이렇게 할 수 있겠지
eatHam("jun",100);
챕터 8: 구조체와 배열 활용하기
새로운 구조체를 생성하기
전에 만들어 놓은 Person구조체를 사용할거야.
//구조체 Person 틀
struct Person {
uint age;
string name;
}
//Person배열을 peole로 이름지음
Person[] public people;
그 틀로 새로운 Person satoshi을 찍어낼거야.
//Person틀쓸거고 변수명은 satoshi임 // age, name
Person satoshi = Person(172,"Satoshi");
//people배열에 이 사람을 추가한다.
peole.push(satoshi);
이 두 줄을 한 줄로 표현하면 이거임
people.push(Person(16,"Jun"));
챕터 9: Private / Public 함수
솔리디티에서 함수는 기본적으로 public으로 선언된다.
누구나 또는 다른 어느 컨트랙트가 우리의 컨트랙트의 함수를 호출하고 코드를 실행할 수 있다는 의미다.
하지만 이건 공격에 취약해질 수 있는 가능성이 있어서
기본적으로 함수는 private로 선언하고 공개할 함수만 public으로 선언하는 게 좋다
private함수를 선언하는 방법
unit[] numbers;
function _addToArray(uint _number) private {
numbers.push(_number);
}
private는 컨트랙트 내의 다른 함수들만이 이 함수를 호출해서 numbers 배열로 무언가를 추가할 수 있다걸 의미.
함수 인자명과 마찬가지로 private함수명도 언더바_로 시작하는 것이 관례임.
챕터 10: 함수 더 알아보기
함수의 반환값, 함수의 제어자
반환값
함수에서 어떤 값을 반환받으려면 다음과같이 선언해야함.
string greeting = "what's up dog";
function sayHello() public returns (string) {
//솔리디티에서 함수 선언은 반환값 종류를 포함한다. 지금은 string이야.
return greeting;
}
함수제어자
위에 함수는 솔리디티에서 어떤값을 변경하거나 무언가를 쓰는등 상태를 변화시키지 않는다.
이렇게 함수가 데이터를 보기만 하고 변경하지 않는 건 view함수로 선언한다.
function sayHello() public view returns (string) {
}
'블록체인 > 솔리디티' 카테고리의 다른 글
ParserError: Expected primary expression 오류 (0) | 2022.02.28 |
---|---|
call 로우레벨 함수, Delegate call개념 (0) | 2022.02.28 |
payable (생성자에 넣기, 특정계정 권한주기, 함수수정modifier) (0) | 2022.02.27 |
이더리움 송금 스마트컨트랙트 코드(이더잔액: 주소.balance, msg.value:송금액,msg.sender:보내는자) (0) | 2022.02.26 |
vscode에서 solidity 솔리디티 사용하기 (환경설정,버전오류) (0) | 2022.02.10 |