728x90
//간단한 암호화폐 simplecoin의 첫번째 구현
pragma solidity ^0.4.0;  //pragma는 솔리디티 컴파일러의 지원버전을 나타낸다.
contract SimpleCoin {  //컨트랙트를 정의하는 코드. 컨트랙트는 다른 언어의 클래스와 비슷
  //상태변수를 주소와 정수 사이의 '매핑'으로 정의한다. 
  //상태변수는 클래스의 멤버 변수와 같음. 매핑은 해시 테이블 또는 해시맵과 동일함.
    mapping (address => uint256) public coinBalance ;
    //mapping(string => addresss) public tenDatabase;
  
   //
   event Transfer(address indexed from, address indexed to, uint256 value);
   // 생성자, 컨트랙트 생성자를 정의
    constructor(uint256 _initalSupply) public {
        coinBalance[msg.sender] = _initalSupply;
        //  [msg.sender] = 10000; //멤버필드 초기화
    }

    //메서드
    //해당주소에 얼마만큼 보내겟다
    //함수 호출자의 계정에서 지정된 계정으로 일정수의 simplecoin토큰을 전송하는 함수를 정의한다.
    function transfer(address _to, uint256 _amount) public {
        require(coinBalance[msg.sender] > _amount);
        require(coinBalance[_to] + _amount >= coinBalance[_to]);
        //메시지 발신자의 잔액을 지정된 토큰 수만큼 줄인다. msg.sender는 보낸사람의 주소를 나타냄.
        coinBalance[msg.sender] -= _amount;
        //지정된 코튼수만큼 동전잔고를 증가시킴
        coinBalance[_to] += _amount;
        emit Transfer(msg.sender, _to, _amount);
    }
}

솔리디티 컨트랙트는 

상태변수(예: coinBalance),

생성자(SimpleCoin 함수), 

함수(transfer 함수) 및 이벤트

로 구성됨

 

coinBalance 상태변수는 mapping으로 정의된다.

매핑은 자바의 해시맵, C#의 딕셔너리 또는 파이썬의 딕셔너리dict에 해당하는 해시맵이다.

키는 주소address이며 값은 uint256

 

coinBalance 상태변수는 각각 simpleCoin토큰을 보유하는 동전 계정의 모음을 나타낸다.

msg 수신된 메시지 객체를 나타내는 특수 변수

msg.sender 메시지 보낸 사람의 주소를 나타내는 msg객체의 속성

 

 

 

Deploy를 눌러

컨트랙트를 배포하면 Deployed Contracts 패널이 나타난다.  

 

 

이제 컨트랙트를 활용할 수 있다.

SimpleCoin 토큰 잔액을 확인하고 토큰을 다른 계정으로 전송할 수 있다. 

transfer 는 쓰기 작업 (지정한 수의 토큰을 지정된 주소로 전송할 수 있다.)

coinBalance는 읽기 작업 (coinBalance 상태변수를 가져오며 읽기 전용 작업이다., 계정의 잔고를 읽는 작업함)

 

 

리믹스에는 버튼색으로 나뉨

파란색 버튼

컨트랙트 읽기 작업을 수행, 상태변수의 값을 확인하거나 읽기 전용함수를 호출

빨간, 저 주황색 버튼

컨트랙트 쓰기 작업을 수행. 생성자를 통해서 컨트랙트를 생성하거나 상태변수를 수정하는 함수를 호출

 

 

 

설명 출처: <이더리움 디앱 개발>, 로베르토 인판테 지음, p60

 

 

728x90

+ Recent posts