반응형
Solidity
Truffle
npm install -g truffle
작업 폴더를 만들고, 들어가서 프로젝트 초기화
truffle init
컴파일
solc source.sol --abi --bin (컴파일 변환 결과를 출력)
전체출력을 JSON 형태로 출력 (뒤에 받을 정보를 기록)
solc source.sol --combined-json abi, asm, bintruffle을 사용한다면 truffle compile
배포는 truffle migrate로 한다.
문법
cpp처럼 ;으로 끝난다.
주석도 cpp처럼 한다. //, /* 등
pragma solidity >= 0.4.22 <0.6.0 ;
지원하는 버전을 표시한다. 0.4.22이상 0.6 미만.
특정 버전을 지칭할 경우는 ^0.4.22 이렇게 한다.
import ‘a.sol’;
다른 파일을 include 한다.
다른 사용 방식은
import * as cs from “filename”;
import “filename” as shortname;
contract 계약명 {
}
cpp 클래스처럼 정의한다.
mapping (address => uint) balances ;
버전 4와 5와 차이
solidity는 4, 5의 버전 차이가 심하다. 그것을 알아야 빌드를 할 수 있다.
- Low-Level 함수 호출
- callcode 삭제
- staticcall 추가
- 입력 파라미터가 bytes로 통일
- 리턴값 지원
- 지역변수 scope
- C처럼 scope을 사용한다.
- 배열에 pop 메소드 추가
- 중요한 변화
- address payable 타입 추가
- 기존에 address 타입에 있던 send, transfer 메소드 삭제
- 주소를 address payable 타입으로 변환해야 사용 가능하다.
- send, transfer는 같은 기능인데 send는 low-level함수로 예외처리가 가능하다. transfer는 트랜잭션으로 처리.
- 주소 타입을 payable로 변환하려면,
(0x...).transfer(1 ether); // 주소 상수 뒤에 바로 사용 OK
address to = 0x...;
address(to).transfer(1 ether); // 에러!
address(uint160(to)).transfer(1 ether); // 두번 변환은 OK
address payable x = address(uint160(to)); // 저장할 때도 두번 변환해야 OK
- msg.sender는 address payble 타입으로 변함
- msg.value는 payable, internal 함수에서만 접근 가능
- 다른 곳에서 사용하고 싶으면,
function msgvalue() internal returns (uint256) {
return msg.value;
}
- 변수 선언을 먼저 확실하게 해주어야 함. (C code)
- 함수의 visibility (external/public/internal) 명시.
- (v0.4는 default public)
- 데이터로케이션(storage(상태변수참조)/memory(함수내)/calldata(함수파라미터)) 명시.
- (v0.4는 default로 함수파라미터는 memory/calldata, 지역변수는 storage로 자동)
- contract 타입을 address 타입으로 형변환하여 사용.
- 0.4에서는 contract 타입이 기본적으로 address 타입과 혼용하여 사용가능했지만 transfer, balance 등을 사용하려면 명시적으로 형변환을 해줘야 한다.
- Contract 타입간 형변환은 상속관계만 가능.
- 상속관계가 아닌 contract로 변환하려면 형변환을 두 번하면 가능하다. A(address(b))
- bytesX, uintX는 사이즈가 같은 경우만 형변환이 가능
- bytes1 c=1 ;
- bytes2 d = bytes2( c) ; // 0x0100 (오른쪽에 0이 추가)
- bytes1 e = bytes1(d); // 0x01 (오른쪽을 제거)
- bytes1 a = bytes1(0x100); // 0.5.0 부터는 error
- bytes1 b = bytes1(uint8(0x100)); // 결과는 0
- bytes1 c = bytes1(bytes2(0x100)); // 결과는 1
- constant 키워드 삭제. 대신 view로 사용해야 함.
- var 타입 삭제. 명시적 필요
- suicide 함수 삭제. selfdestruct로 대체
- sha3 함수 삭제. keccak256로 대체
- throw 삭제. revert, require, assert 사용
- contract명과 동일한 이름의 함수 construct 사용 불가. constructor키워드로 대체
- 16진수표현은 0X는 삭제. 0x만 지원
Author: crazyj7@gmail.com
'BlockChain' 카테고리의 다른 글
Solidity#3 변수와 타입 (0) | 2019.12.06 |
---|---|
Solidity#2 HelloWorld (0) | 2019.12.06 |
Windows Ethereum python module install error (0) | 2019.12.04 |
[ether02] 코인만들기 (0) | 2019.11.10 |
[ether01] solidity 맛보기 (0) | 2019.11.10 |