내맘대로 Study/블록체인

[클레이튼] smart contract 배포 과정 이해하기

jinkwon.kim 2022. 4. 5. 00:04
728x90
반응형

개요

smart contract가 무엇인지 알아 본다. 

 

smart contract 정의

서면으로 이루어지던 계약을 code로 구현하고 특정 조건이 충족되었을 때 해당 계약이 이행되게 하는 script 입니다.

 

블록체인에서의 smart contract 란?

contract code를 compile하여 bytecode로 변경 후 blockchain의 body 안에 넣고 특정 조건이 되면 실행 하는것이 lock chain에서는 smart contract 입니다. 

 

블록체인에서의 smart contract가  배포되는 방법

[smart contract 배포 도식]

smart contract 배포 도식

1. smart contract code compile 과정 및compile 결과물 설명

    - smart contract를 배포 하는 것은 solitidy 언어로 smart contract code를 생성하고 이를 compile하여 block chain에
      배포하는것을 말합니다.

      * 배포는 IDE에서 제공하는 버튼을 이용하면 손쉽게 배포가 가능 합니다.

    1) https://ide.klaytn.com/ 에서 smart contract code를 작성 한 후 compile하여 배포 한다.

// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.4;

contract Contract1 {
    address public owner;

    constructor() {
        owner = msg.sender;
    }

    bytes32[] proposalNames;
   
    function beforeAll (uint256 num) public {
        proposalNames.push(bytes32("candidate1"));
        proposalNames.push(bytes32(num));
    }
}

    2) 배포시 생성되는 전체 결과물

        - 다음은 IDE에서 배포 후 보여주는 결과물 전체 항목 입니다. 

    3) 생성된 배포 결과물  핵심 정보

        (1) byte code

            정의
                - block chain에 deploy될 smart contract의 byte code 입니다.

            사용 시기 

                - block chain에 배포될 때 사용 됩니다.

            형태 

                - solidity로 작성한 code를 compile한 결과물 16진수로 이루어져있습니다.

byte code

        (2) Function signature

            정의

                - function name과 parameter를 sha-3를 이용해서 만든 4byte signature 입니다.

            사용 시기

                - Contract의 function을 실행 시키기 위해서 사용 됩니다.
                  Contract 의 함수를 실행시키기 위해서는 Transaction 의
                      to: 주소에는 Contract Address
                      input data: 에는 function signature 4byte 함께 paramete vaule값을 16진수로하여 32byte

                      길이로하여 입력하면 됩니다

function signautre 생성 구조

            Ex) 실제 호출 payload

                  - Function : baz(uint32 x, bool y) 
                 baz는 uint32와 bool로 정적인 type 을 인수로 갖는 함수입니다.
                 69, true 인수로 function를 call한다고 하면 encoding data는 다음과 같습니다.

                - function signatue = 0xcdcd77c0

                - 인수1 69   = 0000000000000000000000000000000000000000000000000000000000000045

                - 인수2 true = 0000000000000000000000000000000000000000000000000000000000000001

// 인코딩 데이터
0xcdcd77c000000000000000000000000000000000000000000000000000000000000045
0000000000000000000000000000000000000000000000000000000000000001

 

        (3) ABI (Application Binary Interface)

            정의

                - 특정 언어나 플랫폼에 종속되지 않은 방식으로 기술된 Application Interface 에 대한 정의입니다.

                - Smart Contract 의 function과 parameter에 대한 MetaData를 정의해
                  Contract의 객체를 만들 수 있고 Contract의 함수를 호출할 수 있는 표준방법입니다.

            사용 시기

                - 이 ABI 를 갖고 JavaScript 언어 기반의 어플리케이션을 만들 때 객체를 만들게 할 수 있고, 쉽게 그 객체의
                  Method를 호출하는것 만으로 Contract 의 함수가 호출되도록 할 수 있는 것이다. 현재 Ethereum은
                  web3.js 와함께 JavaScript 응용에서 쉽게 ABI 로 객체를 만들어 사용하도록 지원하며, 1.4.0 이후의
                  go-ethereum 에서는 Go Native 언어 기반의 응용에서 Smart Contract 를 쉽게 Binding 가능하도록
                  ABI 기반으로 Go Code 를 생성 해주는 ABIGen 을 제공하고 있다.

smart contract에 정의된 function의 ABI 형태

 

참조 사이트

https://medium.com/haechi-audit-kr/smart-contract-a-to-z-79ebc04d6c86

 

스마트 컨트랙트(Smart Contract), 글 한 편으로 제대로 이해하기

블록체인 스마트 컨트랙트 개요 및 작동방식 A to Z

medium.com

 

https://goodjoon.tistory.com/261

 

Ethereum 응용 개발 - Smart Contract 의 이해

이제부터는 Smart Contract 로 들어가기로 한다. Ethereum 이 비트코인과 가장 크게 차별화되는 특징이기도 하며, Public/Consortium/Private Blockchain 에 공통으로 적용되어 기존 C/S 환경 대비 가장 큰 변화를..

goodjoon.tistory.com

 

https://docs.soliditylang.org/en/latest/solidity-by-example.html#id2

 

Solidity by Example — Solidity 0.8.14 documentation

» Solidity by Example Edit on GitHub Solidity by Example Voting The following contract is quite complex, but showcases a lot of Solidity’s features. It implements a voting contract. Of course, the main problems of electronic voting is how to assign voti

docs.soliditylang.org

 

https://medium.com/linum-labs/a-technical-primer-on-using-encoded-function-calls-50e2b9939223

 

A technical primer on using encoded function calls

A developer’s guide to encoding and executing encoded functions.

medium.com

https://muyu.tistory.com/entry/Ethereum-ABI-%EC%9D%B8%EC%BD%94%EB%94%A9-%EC%82%B4%ED%8E%B4%EB%B3%B4%EA%B8%B0

 

[Ethereum] ABI 인코딩 살펴보기

ABI (Application Binary Interface) SmartContract 의 함수와 파라미터에 대한 MetaData를 정의해 Contract의 객체를 만들 수 있고 Contract의 함수를 호출할 수 있는 표준방법입니다. Contract의 함수를 호출하..

muyu.tistory.com

 

728x90
반응형