1. Payable 키워드
- 계약 계정 외부에서 이더를 송금 받을 수 있게 함.
- 즉, 계약이 A에게 송금을 받으려면 A가 호출하는 함수에 payable 키워드가 있어야함.
function send() payable public { ~~ }
2. 메세지 프로퍼티 (Message Properties)
- msg 프로퍼티를 활용해 계약을 호출한 사람이 보낸 메시지 확인
- msg 정보
정보 | 타입 | 설명 |
---|---|---|
data | byte | 호출데이터 |
sender | address | 계약을 호출한 이더리움 주소 |
value | uint | 계약 주소로 보낸 Ether량 |
gas | uint | gas limit에서 함수를 호출하고 남은 가스 |
3. Transfer 함수
- 계약이 다른사람에게 이더를 전송.
- <받는 사람의 주소>.transfer(<송금할 금액>);
function buy() public { seller.transfer(10); }
4. 수수료(gas)
- 함수를 실행할 때 수수료가 듬.
- 수수료를 아끼끼 위해 view나 pure같은 키워드 사용.
string message = "hello solidity"; function setMessage() public { uint count = 10; // 128614 gas 소모 // uint count = 100; // 1093133 gas 소모 for(uint i=0; i<count; i++) { message = "hello transaction"; } }
5. 트랜잭션
- Smart Contract로 생성되는 장부 및 기록
- 트랜잭션에 담긴 정보
정보 | 설명 |
---|---|
transactionHash | 트랜잭션 해시값 |
transactionIndex | 트랜잭션 인덱스 값 |
blockHash | 트랜잭션이 추가된 블록 해시값 |
blockNumber | 트랜잭션이 추가된 블록의 번호 |
gasUsed | 트랜잭션 호출에 사용된 가스량 |
cumulativeGasUsed | 누적으로 사용된 가스량 |
contractAddress | 계약 주소 |
logs | event로 로깅된 정보 |
6. pragma solidity ^0.4.18;
- 솔리디티 버전을 나타내는 코드
7. 접근 제어자
접근 제어자 | 설명 | 특징 |
---|---|---|
public | 외부에서 호출 가능. | 접근 제어자를 명시하지 않은 함수는 public으로 선언됨 public으로 상태 변수 선언 시 자동으로 getter 함수 생성 |
internal | 상속 받은 계약에서만 호출 가능 | 접근 제어자를 명시하지 않은 상태 변수는 internal로 선언됨 |
private | 해당 계약에서만 호출 가능 | 상속 받은 계약도 호출 불가 |
external | 인터페이스의 함수 | external로 선언한 상태 변수/함수의 경우 내부이세 호출 불가. |
8. View 함수
- 수수료(gas)가 들지 않음.
- 상태를 변경하지 않음. (데이터를 읽을 순 있되 수정 불가 == readOnly)
uint year = 2018; function test() public view returns (uint) { return year/100; }
9. Pure 함수
- 수수료(gas)가 들지 않음.
- 블록체인 네트워크에 기록된 데이터에 일절 접근하지 않음.
- 파라미터로 주어지지 않은 상태 변수는 읽거나 쓸 수 없음.
function test(uint year) public pure returns (uint) { return year/100; }
10. Structs (구조체)
- 다양한 자료형을 묶어서 관리 (C언어의 구조체와 동일) ``` struct Person { string name; uint age; address wallet; }
Person p = Person("mos",25,0xfe3...); p.age += 1; ```
11. 맵핑 (mapping)
형태의 자료구조 ``` mapping (address => uint) public balances; // key : address , value : uint
function open(uint _balance) public { balances[msg.sender] = _balance; } ```
12. 이벤트 (event)
- 계약이 수행된 정보는 트랜잭션으로 남음. 이 트랜잭션에 기록하고 싶은 사항이 있다면 이벤트를 사용. ``` // indexed 키워드가 붙은 데이터는 log 검색 시 사용할 수 있음. event BuySomethings( address indexed _buyer, uint256 _value );
function buy() payable public { seller.transfer(msg.value); BuySomethings(msg.sender, msg.value); } ```
13. 오류처리 (Error Handling)
require(bool 조건) : 조건을 만족하지 않으면 오류 발생
function half(uint x) {
require(x%2==0); // 짝수일 때만 허용
}
14. 함수 제어자 (Function Modifires)
- 커스텀 할 수 있는 제어자
- modifier키워드로부터 안전 ``` modifier onlyOwner(address owner) { require(msg.sender == owner); _; // 모든 실행 조건을 만족할 경우 }
function admin(address person) public onlyOwner(person) { ~~ } ```
'Blockchain' 카테고리의 다른 글
비트코인 정리 (1) | 2018.10.04 |
---|