1. constructor


  contract 생성시 한번 호출


  contract A {

       address owner;

       constructor() {

             owner = msg.sender;

       }

  }



2. fallback 

매치 되는 함수가 없거나 이더가 컨트랙트에 보내지지 않을때 호출


function() payable {


}


contract Receiver {


     uint count;


     event EtherReceived(address indexed from);

 

     function() payable {

          count++;

          emit EtherReceived(msg.sender);

     }

}


3. 다양한 user-type


struct Test {

     uint16  id;

     bytes32  N1;

     bytes32  N2;

     Contact phone;

}


struct Contract {

     uint c1;

     uint c2;

}


Test t1;

Test[] t2;


참조 변수를 넣는때

Person storage contrib =Test[2];

contrib.N1 = "T11";

contrib.N2 = "T22";


Contact memory m = Contact(1, 2);



enum Direct {

     North,

     East,

     South,

     West

}


4. 조건


if ( input  > 10 ) { return true } 

else { return false }


while ( i < users.length ) {

     users[i].transfer(1 ether);

}


for(uint i=0; i < users.length; i++) {

 

    if ( i % 2 == 0)

          continue;   or break;    

}


do {


} while ( input < 10 );



bool result = (value > 10)  ? true : false;



5. func


contract Test {

   function add(uint _a, uint _b) public pure returns (uint sum)

   {

         sum = _a + _b;

   }

}


contract Test {

   function arithmetics (uint _a, uint _b) public pure returns (uint, uint)

   {

        return (_a + _b, _a - _b);

   }

}


이더를 받는 함수를 구성할때 payable 사용

contract test {

    mapping(address => int)  donors;


    function donate() public payable {

         donors[msg.sender] = msg.value;

    }

}



6. modifier 

_와 modifier 가 함께 사용되며, 함수 수행시 내용 validation 체크시 사용


contract Test {

    address owner;


    constructor() {

         owner == msg.sender;

    }


    modifier owner {

         require (msg.sender == owner);

         _;

    }


    modifier valuecheck (uint value) {

         require(msg.value > value);

         _;

    }


    function sendEther()  owner valuecheck(1 ether) public { }

}


7.  function and state visibility


public : externally and internally 둘다 접근 가능하며, 자동적으로 state 변수일 경우 getter함수가 생성

external : 트랜잭션을 통하거나, 다른 contract를 통해서 접근 하고자 할때

internal : contract안에서 또는 상속받은 contract에서 사용하고자 할때

private : 단지 contract안에서만 사용하고자 할때


'blockchain > ethereum' 카테고리의 다른 글

ethereum contract deploy using geth  (0) 2019.01.03
solidity data type  (0) 2018.12.30
solidity solc 설치  (0) 2018.12.30
ethereum 인프라 활용  (0) 2018.12.27
geth 기본 명령어  (0) 2018.12.27

+ Recent posts