솔리디티 시작시 항상 입력해야 하는 것이 있다.
1. 프라그마 솔리디티 버젼;
2. 계약 이름
pragma solidity >=0.5.0<0.6.0; // 솔리디티 버젼 contract HelloWorld{ } // 계약 이름
uint
부호 없는 정수.
값이 음수면 안됨.
좀비 DNA 설정하기.
pragma solidity >=0.5.0 <0.6.0; contract ZombieFactory { uint dnaDigits = 16; //start here}
복잡한 데이터 유형.
여러 속성이 있는 복잡한 데이터 형식 만들 수 있다.
마치 자바에서 배운 객체와 같은 느낌인듯.
string : 문자열 유형을 나타냄
pragma solidity >=0.5.0 <0.6.0; contract ZombieFactory { uint dnaDigits = 16; uint dnaModulus = 10 ** dnaDigits; struct Zombie { string name; uint dna; } // start here }
<함수>
함수 선언하는 방법
함수의 인자는 언더바로 시작하는 것이 관례이다.
ex)
function eatHamburgers(string//문자열 형태임을 알려줌 memory_name//name 변수가 memory에 저장됨, uint_amount//정수 형태임을 알려줌)public//가시성 {//여기에는 함수 실행 내용 들어감}
string memory_name 에서
궁금한 점. name이라는 변수를 memory라는 곳에 저장된다 이렇게 이해하는게 맞나?
함수에 인수를 전달하는 법
struct 생성
struct Person { uint age; string name; } Person[] public people;
여기서 질문. Person[] public people; 이코드는 무엇을 의미하는가?
앞서 만든 struct를 생성하기
Person satoshi = Person(172,"Satoshi); //이 사람을 배열에 추가. people.push(satoshi); //파이썬에서 append와 같은 개념으로 push 명령어 사용.
//createzombie함수 만들기 내부 코드
zombies.push(Zombie(_name,_dna));
함수는 기본적으로 public으로 선언. 즉 공개됨
private으로 선언하면 비공개 가능
private 키워드는 함수명 뒤에 적고, 주로 언더바 로 시작함
uint[] numbers; function _addToArray(uint _number) private { numbers.push(_number); }
여기서 uint[] numbers는 어떤 의미?
반환값
자료형을 변수 앞에 사용하는 거 같아
값을 반환 받으려면,
string greeting = 'whats up'; function Hello()public **returns(string)**// 반환값 종류를 포함{return greeting; }
함수 제어자
view 함수로 선언
function sayHello() public view returns(string){}
데이터를 변경하지 않고 보기만 한다는 뜻
pure함수로 선언
function _multiply(uint a,uint b)private pure returns(uint){ return a*b;}
반환값이 인자에 따라 달라진다. 다만 앱에서 어떤 데이터도 접근하지 않는다.
함수의 반환값이 랜덤이기를 원한다면;
keccak256을 사용. 스트링변화 시켜 완전히 다ㅣ른 해시값 생성.
형변환
uint a를 uint8 a로 변환하려면
uint8(a)로 나타내면 된다
띄어쓰기가 좀 중요한가봐
이벤트
특정 액션이 발생했을 때 행동을 취한다.
//이벤트 선언 event IntegersAdded(uint x, uint y, uint result); funciton add(uint_x,uint_y) public{ uint result =_x+_y;
이벤트를 실행하면 add함수가 실행되면 알린다.
IntegersAdded(_x,_y,result); return result;