[Solidity] 스마트 컨트랙트 코드 리뷰

jhcha·2023년 7월 24일
0

Solidity

목록 보기
1/17
post-thumbnail

https://solidity-by-example.org/

solidity-by-example.org 사이트를 통해 Solidity 언어를 학습하고자 한다.

해당 사이트는 Solidity 언어로 작성된 다양한 예시들을 설명하고 있다.

스마트 컨트랙트 코드 리뷰 시리즈는 해당 사이트를 통해 예제를 하나씩 따라가면서 공부하고,
Soldity 언어에 대한 기초적인 문법과 같이 예제 내용 이해에 필요한 보충 자료를 추가하려고 한다.

First Application

url: https://solidity-by-example.org/first-app/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;

contract Counter {
    uint public count;

    // Function to get the current count
    function get() public view returns (uint) {
        return count;
    }

    // Function to increment count by 1
    function inc() public {
        count += 1;
    }

    // Function to decrement count by 1
    function dec() public {
        // This function will fail if count = 0
        count -= 1;
    }
}
  1. SPDX
// SPDX-License-Identifier: MIT

SPDX는 작성된 코드 문서에 대한 저작권 및 라이선스를 표기를 의미한다. SPDX를 명시하여 스마트 컨트랙트 코드에 신뢰성을 높이고, 저작권 문제를 해소할 수 있다.

해당 소스코드의 SPDX-License-Identifier: MIT는 다음과 같다. (https://github.com/solidity-by-example/solidity-by-example.github.io/blob/gh-pages/LICENSE)

MIT License

Copyright (c) 2018 Tasuku Nakamura

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
  1. pragma
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;

pragma는 작성된 Solidity 스마트 컨트랙트 소스 코드가 버전 몇에서 동작하는지 정의하기 위한 키워드이며, 항상 모든 파일에 추가해야 한다.
pragma solidity ^0.8.17 로 작성된 소스 파일은 0.8.17 이전 버전의 컴파일러로 컴파일 되지 않으며, 0.9.0 버전까지는 코드가 의도한 대로 컴파일됨을 확신할 수 있다.

  1. contract
contract Counter { ... }

스마트 컨트랙트에 계약을 의미하는 키워드, 객체 지향 언어의 Class와 유사하다. contract 내부에는 상태 변수 (state variable), 함수 (function), 이벤트 (event), 함수 제어자 (function modifier) 등으로 구성할 수 있다.

  1. function
    // Function to get the current count
    function get() public view returns (uint) {
        return count;
    }

    // Function to increment count by 1
    function inc() public {
        count += 1;
    }

    // Function to decrement count by 1
    function dec() public {
        // This function will fail if count = 0
        count -= 1;
    }
    

다른 프로그래밍 언어에서 다루는 함수와 동일하게 특정 동작 기능에 대해 작성한다.
함수는 일반적으로 다음과 같은 형태로 정의할 수 있다.

function 함수명(매개변수) 가시성지정자 함수제어자 returns (반환값 자료형){}

inc 함수는 매개 변수와 반환 값이 없고 public 가시성 지정자로 외부, 내부 어디서든 접근이 가능한 함수이다.

url: https://solidity-by-example.org/first-app/

참고자료: https://docs.soliditylang.org/en/develop/layout-of-source-files.html
https://velog.io/@mae-zung/Solidity-%EA%B8%B0%EB%B3%B8-%EB%AC%B8%EB%B2%95

0개의 댓글