본문 바로가기
IT 초보코딩의 세계/블록체인

블록체인 Solidity(이더리움 가상 머신, 계약 방법, 계약 구성요소 ) 1장

by 조이럭키7 2023. 8. 29.
반응형

이더리움 가상 머신

     ▶ 솔리디티는 이더리움 가상 머신(EVM)을 대상으로 하는 프로그래밍 언어

     ▶ 이더리움 블록 체인은 스마트 계약으로 알려진 코드를 작성하고 실행함으로써 그것의 기능을 확장하도록 함

     ▶ EVM은 스마트 계약의 일부인 코드를 실행하는데 스마트 계약은 솔리디티로 작성되지만 EVM솔리디티의 고수준 구조를 이해하지 못함

     ▶ EVM은 바이트코드라고 하는 저수준 인스트럭션을 이해

     ▶ EVM솔리디티 코드를 이해하게 하려면 솔리디티 코드를 바이트코드로 컴파일해야 하는데 솔리디티 컴파일러 또는 sole라고 하는 컴파일러가 이 역할을 담당

     ▶ 솔리디티 코드의 작성부터 EVM에서 실행하는 과정

 


솔리디티

     ▶ 정적타입

     ▶ 객체 지향 언어

     ▶ 한 번에 실행되어야 하는 기호는?

     ▶ 확장자는 sol

     ▶ 구성

          ● pragma

          ● comment

          ● import

          ● 계약

          ● 라이브러리

          ● 인터페이스

         


     ▶ pragma

          ● 컴파일러 버전 지정 지시자

                pragma solidity 버전;

          ● 가장 상단에 작성하는 것이 관례

          ● 버전 번호는 메이저 빌드 번호(앞의 2 자리) 와 마이너 빌드 번호(마지막 1 자리)로 구성

          ● 버전 앞에 ^ 추가하면 메이저 빌드 번호의 최종 버전을 의미

     ▶ import

          ● 다른 솔리디티 파일 사용

          ● import 파일명;

     ▶ 주석

          ● // - 단일 행 주석

          ● /* ~ */ - 여러 줄 주석

          ● ///, /** */ - 문서화 주석

     ▶ 계약 

          ● 솔리디티의 주목적은 이더리움을 위한 스마트 계약을 작성하는 것

          ● 스마트 계약은 EVM의 배포와 실행의 기본 단위

          ● 계약을 구성하는 요소

               - 상태 변수

               -  구조체

               -  열거형

               -  함수

               -  수정자

               -  이벤트

              
// SPDX-License-Identifier: MIT
pragma solidity 0.8.7;

//계약
contract GeneralStructure {
    //상태 변수
    int public stateIntVariable; // vriable of integer type
    string stateStringVariable; //variable of string type
    address personIdentifier; // variable of address type
    myStruct human; // variable of structure type
    bool constant hasIncome = true; //variable of constant nature

    //구조체
    struct myStruct {
        string name; //variable fo type string
        uint myAge; // variable of unsigned integer type
        bool isMarried; // variable of boolean type
        uint[] bankAccountsNumbers; // variable - dynamic array of unsigned integer
    }

    //수정자
    modifier onlyBy(){
        if (msg.sender == personIdentifier) {
            _;
        }
    }

    // 이벤트
    event ageRead(address, int );

    //열거형
    enum gender {male, female}

    //함수
    function getAge (address _personIdentifier) onlyBy() payable external returns (uint) {
       human =  myStruct("Ritesh",10,true,new uint[](3)); //using struct myStruct
       gender _gender = gender.male; //using enum
       emit ageRead(personIdentifier, stateIntVariable);
    }
}

* 계약 생성
 -> 생성자를 호출 : new 계약이름();
     SampleContract sample = new SampleContract();

-> 다른 계약을 가지고 생성
     SampleContract copy = SampleContract(sample);

*생성자 => 솔리디티에서는 선택사항으로 생성자를 만들지 않으면 매개변수가 없는 생성자를 만들어서 포함시킨다. 그리고 배포될 때 한 번 만 실행 된다

 

반응형

댓글