[Klaytn 6편] 클레이튼에 대해서 알아보자-실습편3(스마트 컨트랙트 작성2)
안녕하세요, 햅뽀이입니다.
오늘은 지난시간에 이어 스마트컨트랙트 실제 소스를 짜보도록 하겠습니다. 잘 이해가 안되시더라도, 대충 블록체인에 스마트컨트랙트가 이런식으로 작성이되고, 체인에서 돌면서 요청처리가 되는구나 하고 이해해주시면 감사하겠습니다. ^^;;
1. 필요한 기능 정의
- 제가 개발하려고 하는 것에는 아래와 같이 3개의 기능이 필요합니다.
- 계정의 잔액을 확인하는 기능
- 스마트컨트랙트로 클레이를 송금하는 기능
- 스마트컨트랙트로에서 사용자 계정으로 클레이를 보내는 기능
2. 계정의 잔액을 확인하는 기능
// 현재 계정의 잔액을 확인
// view는 읽기 전용 함수라는 명령어
// uint 를 반환
function getBalance() public view returns (uint){
// address(this) 현재 조회한 계정
// balance는 잔액
return address(this).balance;
}
3. 스마트컨트랙트로 클레이를 송금하는 기능
- 게임 참여를 위해서 스마트컨트랙트로 토큰을 송금하는 함수입니다.
// 참여자가 컨트랙트로 토큰을 송금하는 함수
// payble명령어는 송금하는 함수에는 필수적으로 쓰여야 함.
function deposit() public payable{
// 유효성 검사(조건체크)로 조건이 맞지 않으면 함수가 실행되지 않음.
require(msg.sender == owner);
}
4. 스마트컨트랙트로에서 사용자 계정으로 클레이를 보내는 기능
- 스마트컨트랙트에서 보유하고 있던 클레이를 사용자가 게임에서이긴 경우 다시 반환됩니다.
// 컨트랙트에 존재하는 토큰을 사용자 계정으로 송금
// amount 전송할 클레이양
function transfer(uint amount) public returns (bool){
// 유효성 검사(전송하려는 양이 현재 잔액보다 많진 않은가)
require(getBalance() >= amount);
// 토큰을 전송
msg.sender.transfer(amount);
return true;
}
5. Compile/Deploy/Test
- 컨트랙트를 작성하면 IDE에서 바로 컴파일/배포는 물론 테스트까지 가능합니다.
- 지난 시간에 했었던 compile/deploy가 완료되면 deployed contracts에 컨트랙트가 표시됩니다.
- 화살표로 펼쳐보면 우리가 만들었던 컨트랙트 함수들이 모두 표시가 되고, 테스트도 가능합니다.
- 전체 소스
contract UpDownGame{
address public owner;
constructor() public{
owner = msg.sender;
}
// 현재 계정의 잔액을 확인
// view는 읽기 전용
// uinit 를 반환
function getBalance() public view returns (uint){
// address(this) 현재 조회한 계정
// balance는 잔액
return address(this).balance;
}
// 토큰을 송금하는 함수
// payble는 송금하는 함수에는 필수적으로 쓰여야 한다.
function deposit() public payable {
// validation 조건이 맞지 않으면 함수를 종료
require(msg.sender == owner);
}
// amount 전송할 클레이양
function transfer(uint amount) public returns (bool){
require(getBalance() >= amount);
msg.sender.transfer(amount);
return true;
}
}
- 스마트컨트랙트로 만들어져야 할 부분은 의외로 위와같은 3개의 함수로 생각 보다 적습니다. 나머지는 게임을 구현하는 곳에서 게임의 승리여부를 판단하여, 조건에 맞는 스마트컨트랙트롤 호출하도록 되어 있는 것이지요.
그리고 스마트컨트랙트는 불필요한 소스를 최대한 배제하고, 필요한 소스만 입력하는 것이 수수료를 줄이는 지름길입니다. 참고하시기 바랍니다.
여기까지 읽어 주셔서 대단히 감사합니다.
지난 글
[Klaytn, 클레이튼] 클레이튼에 대해서 알아보자 1편(클레이튼 특성, 합의)
[Klaytn, 클레이튼] 클레이튼에 대해서 알아보자 2편(블럭생성 및 전파, 네트워크 구조)
[3편][Klaytn, 클레이튼] 클레이튼에 대해서 알아보자(코어셀, 서비스체인)
[Klaytn 4편] 클레이튼에 대해서 알아보자-실습편1(계정,지갑생성)
[Klaytn 5편] 클레이튼에 대해서 알아보자-실습편2(스마트 컨트랙트 작성1 )
Thank you for your continued support towards JJM. For each 1000 JJM you are holding, you can get an additional 1% of upvote. 10,000JJM would give you a 11% daily voting from the 700K SP virus707 account.
햅보이님 글보고 클레이튼 배운다고 했는데... 그냥 포기...ㅋㅋㅋㅋ
ㅠㅠ 결국 코딩 들어가니까 이게 설명이... 쉽지가 않네요!! ㅎㅎㅎ
코딩 들어 오기 전까지 클레이튼의 특징까지만 이해해주시믄 되긋습니다! ㅋ
#happy-pick (코딩을 배운다, 코딩을 안배운다)
Happy Pick Result!!(Pick 1 Item)
내용:(코딩을 배운다, 코딩을 안배운다)
참가 리스트
코딩을배운다:1~1
코딩을안배운다:2~2
Ranking..!!
No1. 코딩을안배운다(2)
햅뽀이님~ 클레이튼 코딩 마스터 하셔서 스팀이랑 어떻게 연결 시켜서 우리도 카톡에 뿅 나오게 할수는 없나요?!! 그럼 엄청 유저들이 쉽게 접근할것 같아요..T.T
간단 명료할 수록 좋은 거군요!! 스마트 컨트랙트가 하나하나 저런식으로 작동하는 거군요. 아마 대부분의 사람들이 이더리움의 스마트 컨트랙트에 대해서 상상만 하지 실제로 어떻게 돌아가는지는 잘 모를 것 같아요.
이거참 너무 쉬운데욬?ㅋㅋㅋㅋ👍👍👍
Hi @happyberrysboy!
Your post was upvoted by @steem-ua, new Steem dApp, using UserAuthority for algorithmic post curation!
Your UA account score is currently 3.643 which ranks you at #5945 across all Steem accounts.
Your rank has dropped 12 places in the last three days (old rank 5933).
In our last Algorithmic Curation Round, consisting of 114 contributions, your post is ranked at #61.
Evaluation of your UA score:
Feel free to join our @steem-ua Discord server
좋은 정보 감사합니다~
작년에 작성하신 글이지만 지금 클레이튼을 이해하고 연동하는데 매우 유용한 정보네요.
스마트컨트랙트 관련하여 궁금한게 아직많은데 이거 연재는 여기가 끝인가요?
헙.. 예전 글에 댓글이 달렸군요. ㅎㅎ 반갑습니다.
스마트컨트랙트는 기본적으로 이더리움의 Solidity와 동일 하기 때문에 그부분을 살펴보시는게 좋을 것 같습니다. 당시에 다른 일로 연재를 종료하였었는데, 아마 계속 하기도 쉽지는 않을 것 같네요.
여기까지나마 좋게 봐주셔서 감사합니다.!