[AD]MCO VISA 암호화폐로 결제하자

[Smartcontract 공부] Solidity Study - 1

짬짬이 Solidity 공부한 것에 대해서 메모처럼 작성합니다. 스마트컨트랙트라는 것이 참 재미가 있군요!! 물론 부담감이 아주아주아주 심하지만요!! 아무튼 조금 재미는 있습니다.

메모 형태로 남겨 놓을 예정입니다. 이해가 안가시거나 궁금하신 분들은 댓글 주세요!!
아래의 SmartContract 만으로 아주 간단히 예금/출금/잔고조회는 가능한 수준입니다.

출처/도움:Youtube 이더리움 DAPP 개발


solidity 컴파일러 버전 선언
pragma solidity ^0.4.22;
주석은 슬러시 3개로 입력하면 나중에 추출이 가능합니다.
/// @title RandomGet
/// @author happyberrysboy
컨트랙트 명 선언(변수는 카멜형태로 주로 사용됩니다.)
contract WithdrawDeposit {

// 여기에 바로변수를 선언하면 Global 변수

// mapping 는 dictionary 랑 거의 동일
// modifier 는 Java/C#과 유사
// private 는 컨트랙 외부에서 접근 불가능한 변수
   mapping (address => unit) private balances;

// address 는 변수 형태
// public 은 컨트랙 외부에서 접근 가능하다 set은 불가능, get만 가능
   address public owner;

// event - 외부 리스너들에게 공개되는 이벤트
  event LogDepositMade(address accountAddress, unit amount);

  constructor() public {
    // msg 변수는 외부에서 컨트랙트에 전달된 메세지에 대한 정보를 담습니다.
    // msg.sender은 컨트랙 호출자
    owner = msg.sender;
  }

function deposit() public payable returns (uint) {
        // 'require'를 유저의 입력값을 검사하는데 사용하고, 'assert'를 내부 요소 검사에 사용합니다.
        // 여기선, overflow 이슈가 없음을 보장하기 위해 사용합니다.
        // overflow 란 uint 값이 표기 할 수 있는 한계를 넘어 서서 값이 0으로 되는 것을 말합니다.
        // 제약조건처럼 내가가진 잔고에 예금값을 더하면 "반드시" 현재 내가 가진 잔고보다 많아야 한다!! 라는 걸 증명해줌
        // require 조건을 실패하면 failure를 발생시켜서 이 함수 실행전 상태로 rollback 한다
        require((balances[msg.sender] + msg.value) >= balances[msg.sender]);

        balances[msg.sender] += msg.value;
        // 상태 변수에는 "this."나 "self." 키워드가 필요하지 않습니다.
        // 모든 값은 기본적으로 데이터 타입의 초기 값으로 지정됩니다

        emit LogDepositMade(msg.sender, msg.value); // 이벤트 발생

        return balances[msg.sender];
    }
}

    /// @notice 은행에서 이더 출금
    /// @dev 초과한 이더를 반환하지 않습니다.
    /// @param withdrawAmount 출금하고 싶은 양
    /// @return 유저에게 남은 예금
    function withdraw(uint withdrawAmount) public returns (uint remainingBal) {
        // require로 현재 가진 잔고가 빼가려는 돈보다는 많아야 한다라고 걸어준다.
        require(withdrawAmount <= balances[msg.sender]);

        // 우리가 보내기 전에 예금을 바로 감소시키는 것에 주목하세요.
        // 컨트랙에서의 모든 .transfer/.send 는 외부 함수를 호출할 수 있습니다.
        // 이는 호출자가 가지고 있는 예금보다 더 많은 양을 재진입을 통해 요청할 수 있게 합니다
        // .transfer/.send 를 포함한 외부 함수 호출 전에 상태를 변경하는 것을 목표로 하세요.
        balances[msg.sender] -= withdrawAmount;

        // 이 구문은 실패시 자동으로 throw합니다. 이는 변경된 예금이 복귀됨을 의미합니다.
        // 실제로 코인을 전송한다.
        msg.sender.transfer(withdrawAmount);

        return balances[msg.sender];
    }

    /// @notice 예금 조회
    /// @return 유저의 예금
    // 'constant'는 함수를 상태 변수를 변경하지 못하게 막아줍니다.
    // 오프체인 혹은 네트워크와 관계없이 함수를 실행하게 합니다.
    function balance() constant public returns (uint) {
        return balances[msg.sender];
    }

Solidity 공부 가즈아!

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  

JCAR 5월 구독보팅입니다.
행복한 5월 되세요

어렵습니다. ㅠㅠ

ㅎㅎ 쉽지는 않지요!! ^^

네.. 어렵습니다. ㅜㅜ