Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

KarinCryptoDev/Fastcampus_Solidity

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

20 Commits

Repository files navigation

Fastcampus_Solidity

Solidity 기초 문법 실습 자료

강의는 최신 v0.8.17기준이나, 계속 업데이트 되는 특성에따라
pragma solidity >=0.7.0 < 0.9.0;

Logo

솔리디티 문법 기초 커리큘럼

  • 변수와 자료, 연산자와 상수
  • 가시성 지정자
  • 모디파이어
  • 함수와 참조타입
  • 함수와 변수
  • 함수와 가시성 지정자
  • 조건문의 구조
  • 반복문과 응용
  • 매핑
  • 배열
  • 구조체
  • 참조타입의 데이터 저장영역

솔리디티 특징

솔리디티(Solidity)는 계약 지향 프로그래밍 언어, 다양한 블록체인 플랫폼 스마트계약(Smart Contract)구현에 사용.

  • 솔리디티는 정적타입(statically-typed) 프로그래밍 언어로 EVM상에서 작동하는 스마트계약을 개발하기 위해 설계.

  • Ethereum Virtual Machine (EVM)을 목표로 설계된 4가지 언어중 하나

  • (Serpent, LLL, Viper (실험용), Mutan (미사용)) **현재는 솔리디티가 이더리움의 주요 언어다.

  • 이더리움과 경쟁 중인 텐더민트를 합의알고리즘으로 사용하는 Monax나 Hyperledger 등 다른 Private 블록체인 플랫폼에서도 동작한다.

  • 정적입력과 지정 및 가변적인 반환 유형이 있다. 다른 EVM 타겟팅 언어와 비교할 때 Solidity는 임의의 계층적 매핑을 포함하는 계약을 지원하기 위한 복잡한 멤버 변수가 지원됐다. 또한 계약은 상속을 지원한다. (C3 linearization 다중상속 포함)

  • 하나의 계약내에서 다중 타입의 함수가 가능함. **응용이진인터페이스(application binary interface ; ABI) **(추후 Serpent에 의해 지원됨)

  • 메소드호출의 진행 상태에 대해서 사용자 중심으로 명세하기 위한 문서화 시스템과 관련된 내용이 Natural Language Specification로 제안서에 포함되었다.

  • 역사(1): Gavin Wood, Christian Reitwiessner, Alex Beregszaszi, Liana Husikyan, Yoichi Hirai 와 이더리움 핵심 기여자들이 이더리움과 같은 블록체인 플랫폼 상에 스마트계약을 작성 할 수 있도록 개발했다.

  • 역사(2): 솔리디티는 2014년 8월에 Gavin Wood 에 의해 처음으로 제안되었으며, 제안 이후 이더리움 프로젝트의 Christian Reitwiessner 가 이끄는 솔리디티팀에 의해 개발 되었다.

Solidity문서. soliditylang.org

리믹스IDE 사용해서 실습

지원 매체: 웹,앱,데스크톱, VSCode확장 제공

  • online https://remix.ethereum.org/
  • online https://ethereum.github.io/browser-solidity/
  • offline https://github.com/ethereum/remix-ide
  • Install

    크롬, 엣지, 사파리 등 다양한 브라우저 '리믹스'접속 가능
    강의는 크롬 사용 / 맥OS

    nvm을 이용하여 node.js 설치하기

    nvm 이란?
    nvm은 nodejs version manager로 시스템에 여러 개의 nodejs 를 설치하고, 사용할 버전을 쉽게 전환할 수 있도록 도와주는 shell script이다. rvm(Ruby Version Manager)와 비슷한 역할을 수행한다고 생각하면 됨

    NVM 설치하기 https://nodejs.org/ko/download/

    home brew설치하기(Homebrew: (MacOS and Linux)https://brew.sh/index_ko

    /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

    homebrew를 설치했으면, brew 명령어를 사용할 수 있다. 만약 command not found: brew 와 같은 오류가 발생한다면, 환경변수에 brew가 설치된 경로를 추가해준다.

    brew를 이용하여 nvm을 설치해보자

    $ vim ~/.zshenv
    # HOMEBREW
    export PATH="/opt/homebrew/bin:$PATH"
    $ brew update
    $ brew install nvm

    nvm 환경변수 설정

    $ vim ~/.zshenv
    export NVM_DIR="$HOME/.nvm"
    [ -s "/opt/homebrew/opt/nvm/nvm.sh" ] && \. "/opt/homebrew/opt/nvm/nvm.sh" # This loads nvm
    [ -s "/opt/homebrew/opt/nvm/etc/bash_completion.d/nvm" ] && \. "/opt/homebrew/opt/nvm/etc/bash_completion.d/nvm" # This loads nvm bash_completion

    nvm 설치 확인

    $ nvm -v
    0.39.0

    Node.js 설치하기 https://nodejs.org/ko/download/ ls-remote 명령어로 설치할 수 있는 node.js 버전을 확인할 수 있다.

    $ nvm ls-remote

    설치하고 싶은 node.js의 버전을 선택하여 install 명령어로 node.js를 설치할 수 있다.

    $ nvm install 17.2.0

    node 설치 확인

    $ node --version

    npm 설치 확인

    $ npm --version

    Upgrade

    Solidity의 가장 최신버전은 v0.8.18(23년 2월)

    1. 업데이트 변경 사항 블로그: https://blog.soliditylang.org/2020/12/16/solidity-v0.8.0-release-announcement/
    2. 업데이트 변경 사항 문서: https://docs.soliditylang.org/en/v0.8.18/080-breaking-changes.html
    pragma solidity >=0.7.0 < 0.9.0; 
    이렇게쓰면 0.7버전이상 0.9버전미만의 모든 버전 컴파일가능)
    주요 변경 사항:
    코드 생성기: 기본적으로 모든 산술이 검사됩니다. 이러한 검사는 를 사용하여 비활성화할 수 있습니다 unchecked { ... }.
    코드 생성기: 길이가 잘못 인코딩된 저장소의 바이트 배열에 액세스하면 패닉이 발생합니다.
    코드 생성기: 어설션 실패 시 잘못된 opcode 대신 revert오류 서명 및 오류 코드와 함께 사용합니다.Panic(uint256)
    명령줄 인터페이스: JSON 필드 abi, devdoc및 는 이제 문자열 userdoc이 storage-layout아닌 하위 개체입니다.
    명령줄 인터페이스: --old-reporter옵션을 제거합니다.
    명령줄 인터페이스: 레거시 --ast-json옵션을 제거합니다. --ast-compact-json현재 옵션 만 지원됩니다.
    일반: 기본적으로 ABI 코더 v2를 활성화합니다.
    일반: 전역 함수 log0, log1, log2및 log3을 제거 log4합니다.
    파서: 지수화는 올바른 결합입니다. a**b**c로 파싱됩니다 a**(b**c).
    스캐너: , 및 이스케이프 시퀀스에 대한 지원을 \b제거 \f합니다 \v.
    표준 JSON: legacyAST옵션을 제거합니다.
    타입 검사기: 함수 호출 옵션은 한 번만 주어질 수 있습니다.
    형식 시스템: 및 라는 이름 this의 선언 은 공용 함수 및 이벤트를 제외하고 허용되지 않습니다.super_
    유형 시스템: 기능 msg.data에서 허용 receive()하지 않습니다.
    유형 시스템: 금지 type(super).
    유형 시스템: 256개 이상의 구성원이 있는 열거형을 허용하지 않습니다.
    유형 시스템: 음수 리터럴 및 유형보다 큰 리터럴에서 명시적 변환을 허용하지 type(uint160).max않습니다 address.
    유형 시스템: 유형을 허용하지 byte않습니다. 에 대한 별칭이었습니다 bytes1.
    유형 시스템: 유형으로의 명시적 변환은 address항상 지불할 수 없는 유형을 반환합니다 address. 특히 , address(u)및 는 ( 여기서 , address(b)및 는 각각 유형 및 계약 유형 의 임의 변수입니다 .)address(c)address(this)addressaddress payableubcuint160bytes20
    유형 시스템: 기호, 너비 또는 종류 중 둘 이상을 동시에 변경하는 경우 두 유형 간의 명시적 변환이 허용되지 않습니다.
    형식 시스템: 리터럴에서 열거형으로의 명시적 변환은 값이 열거형에 맞는 경우에만 허용됩니다.
    유형 시스템: 리터럴에서 정수 유형으로의 명시적 변환은 암시적 변환만큼 엄격합니다.
    유형 시스템: address(...).code코드를 bytes memory. 크기는 를 통해 얻을 수 address(...).code.length있지만 현재는 항상 코드 복사가 포함됩니다.
    Type System: block.chainid현재 체인 ID를 검색하기 위해 도입합니다.
    유형 시스템: address(...).codehash계정의 코드해시 검색을 지원합니다.
    유형 시스템: 전역 변수 tx.origin에는 . 대신 msg.sender유형 이 있습니다.addressaddress payable
    유형 시스템: 단항 부정은 부호 없는 정수가 아닌 부호 있는 정수에서만 사용할 수 있습니다.
    Pure Checker 보기: chainid보기로 표시합니다.
    Yul: 지정된 방언/EVM 버전에서 사용할 수 없는 경우에도 EVM 명령어와 같은 예약된 식별자의 사용을 허용하지 않습니다.
    Yul: assignimmutable"EVM with objects" 방언의 내장 기능은 추가 인수로 수정할 코드의 기본 오프셋을 사용합니다.
    언어 기능:
    슈퍼 생성자는 이제 멤버 표기법(예: )을 사용하여 호출할 수 있습니다 M.C(123).
    버그 수정:
    유형 검사기: 배열 길이 표현식에서 상수를 사용할 때 적절한 절단 정수 산술을 수행합니다.
    AST 변경 사항:
    많은 IdentifierPath곳에서 UserDefinedTypeName.
    . _ UncheckedBlock_unchecked { ... }
    

    About

    Solidity 기초 문법 실습 자료

    Resources

    License

    Stars

    Watchers

    Forks

    Releases

    No releases published

    Packages

    No packages published

    AltStyle によって変換されたページ (->オリジナル) /