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 |