SOLIDITY 에서 Message 스트럭쳐의 기본 변수들 내용
msg.data (bytes): complete calldata
msg.gas (uint): remaining gas - deprecated in version 0.4.21 and to be replaced by gasleft()
msg.sender (address): sender of the message (current call)
msg.sig (bytes4): first four bytes of the calldata (i.e. function identifier)
msg.value (uint): number of wei sent with the message
외부에서 이더리움을 받아올 수 있는 컨트랙트 만드는 법
contract C {
function C() {}
function () payable {}
}
여기서 2번째 함수는 default function이라는 문법이다.
solidity modifier, _;
Solidity 개발을 공부하다보면 오픈소스들에 Modifier라는 생소한 문법이 보인다.
그리고 Modifier 구역을 보면 _; 라는 문장이 보이는데, 나는 이것이 뭘 뜻할지 상상이 안갔다.
열심히 공부해본 결과 Modifier는 말 그대로 모듈처럼 동기화 시키는 듯한 문법이다.
예를들어 어떤 컨트랙트에서 함수를 선언하고 그 함수가 현재 컨트랙트를 실행시킨 user만 사용가능하게 하고 싶다면,
1 2 3 4 5 6 7 8 | modifier onlyOwner{ if(msg.sender != owner) throw; _; <=== 여기에 original code가 들어간다. } function setContractInformation(string info) onlyOwner{ contractInformation = info; } | cs |
이렇게 사용할 수 있다.
modifier를 사용하지 않는다면 함수 첫머리에 if 조건문으로 걸어놓긴 하면 되지만,
이렇게 modifier를 사용하면 코드도 간결하고 유지보수도 쉽고
function에 onlyOwner가 있느냐 없느냐에 따라서
쉽게 제한사항을 파악할 수 있기 때문에 가독성도 향상된다.
위 코드는 아래처럼 해석될 수 있겠다.
1 2 3 4 | function setContractInformation(string info) onlyOwner{ if(msg.sender != owner) throw; contractInformation = info; } | cs |
_; 는 본문코드의 시작을 알리는 문장으로 해석하면 되겠다.
decimal
decimal이 1이면 1은 10으로 표현. 즉 뒤에오는 0의 개수라고 보면된다.
정수와 실수는 메모리에 저장되는 방식이 다르다.
정수가 실수보다 더 적은 메모리 공간을 사용하기 때문에 복잡하지만,
Decimal이 존재한다.
이더리움의 Decimal은 18이다.
즉 1이더리움을 표현하려면 1000000000000000000로 해야한다.
이것을 쉽게 표현한 단위가 1 wei 이다.
이더리움에는 여러 단위가 있다.
그중 가장 작은 단위가 wei이다.
이더리움 관련 코드를 쓸 때도 wei가 기본 단위이다.
마치 달러의 penny와 같은 개념? 으로 보면 될 것 같다.
'기술 > BlockChain' 카테고리의 다른 글
[Unity+Ethereum] 유니티에서 smart contract에 이더리움 전송 개발 (1) | 2018.04.22 |
---|---|
[Solidity] Solidity 에서 Modifier와 _;의 기능 (0) | 2018.03.22 |
[Ethereum 개발기] Nethereum 개발기록 (0) | 2018.03.11 |