스마트 컨트랙트 작성

sjee·2021년 8월 12일
0

ethereum

목록 보기
3/3

인프런의 클레이튼 강좌를 참고하였고, 클레이튼을 이더리움으로 바꾸어서 공부하고 있다.

pragma solidity ^0.5.6;

contract AdditionGame {
    address public owner;

    constructor() public {
        owner = msg.sender;
    }
    
    function getBalance() public view returns (uint) {
        return address(this).balance;
    }

    function deposit() public payable {  
        require(msg.sender == owner);
    }   
  
    function transfer(uint _value) public returns (bool) {
        require(getBalance() >= _value);
        msg.sender.transfer(_value);
        return true;
    }
}

관리자가 금액을 컨트랙트에 걸어놓으면, 덧셈 문제를 맞추는 사용자가 일정 금액의 이더를 얻는 디앱을 만들 것이다!

잔액 조회

-> 현재 금액/잔액을 보여주기 위함

function getBalance() public view returns (uint) {
       return address(this).balance;
}
  • this는 해당 함수가 수행되고 있는 contract의 주소 나타낸다.

  • constract 의 잔액을 반환




초기 금액 설정

    function deposit() public payable {
          require(msg.sender == owner);
    }   
  • payable이라서 컨트랙트 전송가능
  • 컨트랙트 배포자 owener 와 함수 호출자 msg.sender 가 같은 경우만 컨트랙트에 금액을 전송할 수 있도록 한다 -> 관리자만 가능



이더 전송

-> 맞춘 사용자에게 이더를 전송하기 위함

function transfer(uint _value) public returns (bool) {
    require(getBalance() >= _value);
    msg.sender.transfer(_value);
    return true;
}
  • 계좌 잔액이 전송할 금액보다(_value) 큰 경우만 거래가 가능하도록 한다.
  • 함수 호출자에게 _value 만큼의 금액을 전송한다.





Remix

작성한 컨트랙트의 정상적인 작동을 확인하기 위해 배포전에 remix 를 이용해본다!

getBalance / desposit


현재 getBalance를 통해 본 컨트랙트의 잔액은 0이다.

  • 배포시 사용된 계좌 / msg.sender
  • deploy 버튼을 누를때 설정돼 있던 계좌를 말한다.
  • owner 계정의 잔액이 컨트랙트 배포로 인해 감소된 것을 볼 수있다.

  • value 에 10 ether 를 넣고 deposit 함수를 호출
  • from : 컨트랙트를 배포한 owner 계정에서
  • to : AddtionGame 의 컨트랙트 주소로
  • 10 ehter 전송

  • getBalance 를 통해 현재 컨트랙트에 있는 금액과 배포한 계정의 금액 변화를 확인해본다!
  • 10 ether 보다 더 금액이 깎인 이유는 가스 비용 때문

에러 확인

  • 컨트랙트 배포시 사용했던 계정이 아니면 require에 걸려 오류가 발생한다.




transfer


관리자가 금액을 컨트랙트에 올렸으니 이제 덧셈 문제를 맞춘 사용자에게 이더를 보낼 수 있어야한다.

계정을 바꾸어 준 뒤

  • 함수의 인자로 설정해 주었던 보상 금액을 입력한다.
  • 이때 ether 가 아닌 wei 단위로 넣어주어준다! 내부에서는 wei 로 처리하고 받기 때문

  • 함수를 호출하면 위와 같이 설정했건 계정에 돈이 들어온 것을 확인 할 수 있다.
  • 마찬가지로 정확히 2 ether 가 아닌 이유는 가스 비용 때문에 덜 받은 것

거래 후 컨트랙트 잔액 확인

  • 나는 2 ether 씩 2번 전송해서 4 ether 가 감소된 것을 볼 수 있다!
  • 마찬가지로 ether 가 아닌 wei 로 나온다.
profile
블록체인/ 보안 / 해킹

0개의 댓글