반응형
solidity01_version

Solidity

Truffle

npm install -g truffle

작업 폴더를 만들고, 들어가서 프로젝트 초기화

truffle init

컴파일

solc source.sol --abi --bin (컴파일 변환 결과를 출력)

전체출력을 JSON 형태로 출력 (뒤에 받을 정보를 기록)
solc source.sol --combined-json abi, asm, bin

truffle을 사용한다면 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

+ Recent posts