///
Search

10.Klaytn IDE

이전자료

웹사이트
여기에서 스마트 계약을 작성할 수 있다. (앞으로 컨트랙이라고 명명하겠다.)
웹사이트 화면
소스코드는 아래와 같다. (디폴트 값이니 지우고 시작하자)
// Klaytn IDE uses solidity 0.4.24, 0.5.6 versions. pragma solidity >=0.4.24 <=0.5.6; contract Count { // Storage variable `count` (type: uint256) uint256 public count = 0; // Get current node's block number. function getBlockNumber() public view returns (uint256) { return block.number; } // Set value of storage variable `count`. function setCount(uint256 _count) public { count = _count; } }
Go
복사
첫 번째 줄이랑 두번째 줄을 보게 된다면 저렇게 solidity의 버전이 >=0.4.24 <=0.5.6 를 따라야 한다는 점을 기억해라
3가지의 함수를 작성할 것이다.
첫번째는 컨트랙으로 클레이를 송금하는 함수
두번째는 컨트랙으로 잔액을 불러오는 함수
마지막으로 컨트랙에서 사용자 계정으로 클레이를 보내는 함수
일단 아래의 코드를 작성한다.
// Klaytn IDE uses solidity 0.4.24, 0.5.6 versions. pragma solidity >=0.4.24 <=0.5.6; contract AdditionGame { //배포하는 순간 운영자 계좌를 저장할 수 있는 상태 변수 생성 // 생성자를 생성 // 그전에 보통 생성자는 어떤 역할을 할까? //주로 초기화를 담당한다. //솔리디티 같은 경우에는 특히 배포할때 가장 먼저 불러오는 것이 생성자이다. //그이후에는 생성자를 생성하거나 불러올수 없다. // 이 이점을 활용하여 컨트랙의 소유자 계정을 정할수 있다. //우선 상태 오우너를 만든다. address public owner;//타입은 주소형 타입 constructor() public { owner = msg.sender;//생성자를 만듦 여기에서 msg.sender는 현 컨트랙을 호출하고 있는 사람을 의미한다. }//owner에 저장해서 블록체인에 영구 반영한다. 이게 초기화 방법 }
Go
복사
실행은 아래의 화면을 보면 Auto compile을 체크하고 Start to compile을 누른다.
Run을 눌러보면 아래의 창이 나온다.
여기는 환경 설정이다.
환경 부분 보면 몇개의 옵션이 있는데 dev랑 baobab이 있다. 그외로도 여러개가 있다.
dev는 클레이튼 노드가 현재 돌아가고 있는 RPC 주소에 연결해서 테스트 하는 것이다.
dev node는 클레이튼에서 제공하는 개발용 노드에 연결해서 테스팅할 수 있는 옵션이다.
계정을 랜덤으로 하나 생성하고 100클레이를 미리 받아서 쓸수있게 해준다.
그리고 테스팅 하는데 가스 소모가 안들어가게 세팅되어있다.
그래서 밑에 Account 부분 보면 이미 100test 클레이가 담아져 있을 것이다.
또 바오밥에 연결해서 쓰는 옵션은 정식 테스트에 연결해서 쓰이는 것이다.
그리고 바오밥을 선택하는 순간 아래의 계정에 있는 클레이가 0으로 바뀔 것이다.
Dev node와 바오밥 노드가 서로 독립적으로 운영되는 노드라서 동일한 계정으로 인식으로 하되
노드가 달라서 계정의 상태가 달라지고 밸런스가 바뀌게 된다.
Dev Node인 상태로 새로고침 하면 전에 사용했던 계정은 사라지고 새로 생성했던 계정을 다시 보여준다.
새로 생성된 계정을 키스토어 파일이나 비밀키로 다운로드받아서 재사용이 가능하다.
다른 컴퓨터에서 테스트 할때 기존의 사용했던 계정으로 이어서 할 수 있다.
계정 클릭하면 Backup이라는 버튼이 나오고 클릭하면 창이 뜨고 키스토어나 비밀키를 받을수 있는 옵션이 있다.
간단하게 비밀키를 백업을 하면 우리가 다시 쓸수있다.
또 페이지를 새로 고침하고 계정이 또 생성이 될것이고,
이번에는 인풋더 어카운트 옵션을 클릭한다음 개인키 부분에 백업한 비밀키를 붙여 넣고
Display label에는 test라고 입력한다.
그후 계정을 다시 클릭하면 방금 우리가 실습했던 테스트 계정이 나오게 된다.
이런 식으로 웹페이지를 다시 방문하거나 다른 컴퓨터에서 일관성있게 테스트를 진행할 수 있게 해준다.

Deploy

compile 버튼 누르고
AdditionGame을 배포할수 있는 옵션이 생긴다. 배포를 하게 되면 TX Hash가 나온다. 이게 배포하면서 나오는 해쉬정보이다.
contractAddress는 어느 주소에 배포되어있는지 알 수 있도록 한다.
그래서 옆에 패널을 보게되면 현 시점에서 어느 주소에 배포되는지 알 수 있다.
아래에 owner상태 변수의 값을 불러올수 있는 옵션이 있다.
이게 getter 함수인데 우리가 상태변수라고 할수있는 owner를 public으로 설정을 해뒀기 때문에 자동으로 getter 함수를 생성해서 owner 값을 불러올수 있다.
call 버튼을 눌러보면 계좌가 하나 뜨는데 이건 바로 컨트랙을 배포하는 사람의 계좌 주소이다.
From Account = Owner

실습 1

// Klaytn IDE uses solidity 0.4.24, 0.5.6 versions. pragma solidity >=0.4.24 <=0.5.6; contract AdditionGame { //배포하는 순간 운영자 계좌를 저장할 수 있는 상태 변수 생성 // 생성자를 생성 // 그전에 보통 생성자는 어떤 역할을 할까? //주로 초기화를 담당한다. //솔리디티 같은 경우에는 특히 배포할때 가장 먼저 불러오는 것이 생성자이다. //그이후에는 생성자를 생성하거나 불러올수 없다. // 이 이점을 활용하여 컨트랙의 소유자 계정을 정할수 있다. //우선 상태 오우너를 만든다. address public owner;//타입은 주소형 타입 constructor() public { owner = msg.sender;//생성자를 만듦 여기에서 msg.sender는 현 컨트랙을 호출하고 있는 사람을 의미한다. }//owner에 저장해서 블록체인에 영구 반영한다. 이게 초기화 방법 function getBalance() public view returns (uint){ //function 키워드/ 이름은 getBalance / 가시성은 public / 타입은 view로 써서 읽기 전용으로 만든다. 마지막으로 uint 로 리턴하는 방식이다. return address(this).balance; //adress this 는 현재 컨트랙 자신을 의미하는 것이다. 즉 additionGame //맴버로 balance가 접근이 가능하다. //이렇게 현재 클레이 잔액을 불러올 수 있는 함수가 만들어진다. //여기까지 작성하고 Deploy 하면 잔액이 0 이 나오는것을 확인할 수 있다. } function deposit() public payable{ //여기에서 타입은 payable로 해놓았다. //계정에서 solidity함수를 쓸려면 payable로 해야지 돈을 받을수 있다. //유효성 체크 require(msg.sender == owner); // 리콰이어 코드를 써서 안의 조건이 일치하지 않으면 안되도록 설정 //msg sender는 이 함수를 호출한 계정을 뜻한다. //그 계정을 상태변수 owner 계정과 비교해서 owner 계정이 아니라면 함수를 실행 못하도록 한다. } // 여기 까지 했다면 Deploy를 할때 Deposit 함수가 활성화가 되며 Deposit 함수를 쓸려고 할때 TX Value를 사용해야하는데, deposit 함수에 payable이 붙어있으면 Tx value를 사용해야한다. // TX value 옆에 Test KLAY가 선택된 상태에서 1이 되도록 하고 deposit 버튼을 클릭한다. //그러면 트랜잭션이 성공하게 된다. //From account 계정에서 클레이수가 깎인것을 확인할 수 있다. // 가스도 깎여야 하는데 DEV Node 모드라서 가스비는 포함하지 않는다. // getBalance 함수를 누르면 잔액이 얼마인지 확인할 수 있다. // 1KLAY가 peb로 변환된 값이라서 단위가 조금 바뀔수 있다. 자동변환으로 테스트하게 배려해준다. // 테스트 단위는 여러가지가 있다. 가장 낮은 단위인 peb로 한다음 보내면 단위가 peb로 보내지는 것이다. // getBalance를 눌러보면 이전 것과 누적되어서 나오는 것을 확인할 수 있다. // Gas limit 항목은 auto로 되어있다면, 가스 한도 처리를 자동으로 해두는 것이다. // Gas limit은 고정이 된것이 아니다. 원래는 25,000으로 고정되어 있는데 단순 송금 한정이다. // 사용자가 수동으로 가스한도를 정하고 좀더 정확하게 실습을 진행할 수 있다. function transfer(uint _value) public returns (bool){//인자로 사용자에게 넘길 클레이 값을 uuint _value로 받고 이 값은 Frontend // 리턴은 bool 값을 리턴한다 require(getBalance() >=_value);// 위에있는 getBalance를 호출해서 현재 컨트랙에 남아있는 잔액을 불러오고 value 값이랑 비교해서 같거나 많으면 통과를한다. msg.sender.transfer(_value);//즉 정답을 맞춘 사용자가 상금을 타기위해 이 함수를 호출하고 트랜스퍼 밸류는 사용자에게 클레이를 밸류 만큼 트랜스퍼 함수를 사용해서 송금한다. return true; // 성공 여부를 true로 리턴하게 된다. } // Deploy를 하기 위해서 Tx Value를 다시 0으로 초기화 시키고 가스 리밋도 오토로 해주고 Deploy를 하면 // 새로 배포하면서 남은 잔액은 0이 된다. // TX value에 3 으로 하고 send 하고 다시 TX value 값을 0 으로 맞춰준다음에 transfer 쪽에 Send를 클릭하면 매게변수가 포함된 함수이기에 창이 뜨면서 인자값을 넘기라고 한다. // 이것도 peb로 변환해서 넘겨야한다 1클레이 정도의 peb를 입력하고 call 버튼을 누르면 // 내잔고에 1Klay가 늘어나고 나의 geBalance에는 2Klay 정도의 peb만 남게 된다. // Dev Node로 실습했으면 실제로 기록이 남아져 있다. 확인 방법은 AdditionGame 아래에 있는 정보가 Deb Node 남아있는 자료 // 컨트랙 주소만 알고있으면 내가 태스트한 내용을 다시 볼수 있다. }
Go
복사