https://cryptozombies.io/ko/course
위 사이트의 내용을 요약하였습니다.
pragma solidity ^0.4.19;
contract HelloWorld {
}
: 컨트랙트 저장소에 영구적으로 저장된다.(= 이더리움 블록체인에 기록)
: + - * / % ** 를 지원한다.
: 서로 다른 자료형들을 묶어서 사용 가능
struct Zombie {
string name;
uint dna;
}
: []숫자의 유무에 따라 나뉜다.
: 배열을 위해 getter(해당 필드의 값을 리턴)메소드를 자동으로 생성한다.
Person[] public people;
: 다만 이 경우 해당 필드에 쓸수는 없다. (setter X)
function eatHamburgers(string _name, uint _amount) {
}
: 매개변수는 꼭 _를 앞에 붙여주자.
struct Person {
uint age;
string name;
}
Person[] public people;
// 1번
Person satoshi = Person(172, "Satoshi");
people.push(satoshi);
// 2번
people.push(Person(16, "Vitalik"));
: 위처럼 두 가지 방법으로 people 배열에 원소를 추가할 수 있다.
: java와 유사하게, public은 누구나 컨트랙트의 함수를 호출하고, 코드를 바꿀 수 있게 하여 보안에 취약하다.
: private는 컨트랙트 내의 함수들만이 이 함수를 호출할 수 있게 한다.
: view는 함수가 데이터를 보기만 하고 변경하지 않음을 의미한다.
: pure는 함수가 앱에서 어떤 데이터도 접근하지 않는 것을 의미한다.
View : 읽기 전용으로 함수를 실행하는데에 있어 데이터를 쓰거나 덮어쓰지 않고 읽기만 한다.
Pure : side effect(외부 값을 가져와서 그에 대해서 변경시키는 행위)가 전혀 없이, 오로지 그 함수의 parameter만을 이용해서 값을 return하는 함수이다
- solidity-by-example
: 이더리움이 가지고 있는 내장 해시 함수로 난수를 생성한다.
: 1비트를 변경하면 출력값의 각 비트가 50% 확률로 변경되어, 쇄도 효과 때문에 상당한 변화가 일어난다.
( 작은 차이에도 그 값의 변화가 확연하게 차이가 난다)
: 아래처럼 숫자에 자료형()을 씌우면 된다.
uint8 a = 5;
uint b = 6;
// a * b가 uint8이 아닌 uint를 반환하기 때문에 에러 메시지가 난다:
uint8 c = a * b;
// b를 uint8으로 형 변환해서 코드가 제대로 작동하도록 해야 한다:
uint8 c = a * uint8(b);
: 로그를 만들기 위하여 사용되는 고수준 객체