主内
ー。。ー。

해부학

EVM에 가장 많이 사용되는 스마트 계약 개발 언어는 Solidity.정적으로 입력된 객체 지향 언어입니다. 타입스크립트, 자바 또는 C #을 알고 있다면 솔리디티와 함께 집처럼 편안하게 느낄 수 있을 것입니다.

프로젝트 구조

Solidity를 사용하면 일반적으로 기본 계약인 “입력 파일”이 하나 있고, 그 다음에는 주 계약이 상속하는 다른 계약의 기능을 확장할 수 있습니다.

당신은 또한 다음을 가질 것입니다 test 폴더 (다음과 같은 개발 프레임워크로 작업하는 경우) Hardhat.

프로젝트는 다음과 같을 수 있습니다.

project/
contracts/
MyContract.sol
test/
MyContract.ts

계약 구조

다음은 간단한 Solidity 계약의 예입니다. 이 가이드에서는 계약의 각 부분을 자세히 설명합니다.

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

contract MyContract {

}

라이선스 식별자

계약이 어떤 라이선스에 따라 릴리스되는지 전 세계에 알리려면 다음을 사용할 수 있습니다. SPDX-License-Identifier 논평.

// SPDX-License-Identifier: MIT

사용할 수 있는 라이선스는 다양합니다.더 자세히 알아보고 싶다면 다음을 확인하세요. 밖으로 이 위키.

프라그마

pragma 명령문은 적용하려는 Solidity 컴파일러 버전을 컴파일러에 알려줍니다.

pragma solidity ^0.8.0;

이렇게 하면 컴파일러 버전이 변경되지 않지만 해당 버전이 현재 버전과 일치하는지 확인합니다. 명세서에 명시하십시오.일치하지 않으면 오류가 발생합니다.

시맨틱 버전 관리에 대한 간략한 개요

시맨틱 버전 관리는 대부분의 소프트웨어가 이해하기 쉽고, 파싱하고, 비교하기 쉬운 방식으로 버전을 관리하는 방법입니다.세 개의 숫자로 구성됩니다.

<MAJOR>.<MINOR>.<PATCH>
0.1.1
  • 주요: 주요 변경 사항이 있을 때 변경됩니다.
  • 경미: 새로운 기능이 추가될 때 변경되지만 주요 변경 사항은 없습니다.
  • 패치: 버그 수정이 있을 때 변경되지만 새로운 기능이나 주요 변경 사항은 없습니다.

느슨하게 잠그는 버전

pragma solidity ^0.8.1;

^ 기호 (caret) 는 0이 아닌 모든 버전을 변경할 수 있음을 의미합니다.따라서, 다음과 같은 경우 ^0.8.1, 다음 버전에서 모든 버전을 허용합니다. 0.8.10.9.0, 하지만 아닙니다 0.10.0 또는 1.0.0.

만약 있었다면 ^1.2.3, 다음과 같은 모든 버전을 허용합니다. 1.2.32.0.0, 하지만 아닙니다 0.1.0 또는 3.0.0.

특정 범위로 고정

대신 다양한 버전으로 고정할 수도 있습니다. 그러면 수락할 버전을 더 잘 제어할 수 있습니다.

pragma solidity >=0.8.0 <=0.8.10;

이 작업을 수행하는 또 다른 방법은 지정된 번호에 와일드카드를 지정하는 것입니다.

pragma solidity 0.8.x;

이렇게 하면 다음과 같은 모든 버전이 허용됩니다. 0.8.00.8.9, 하지만 아닙니다 0.9.0 또는 0.7.0.

당신은 또한 사용할 수 있습니다 * 와일드카드 심볼로.

추가 옵션

솔리디티 컴파일러는 NodeJS 서버 구성을 지원합니다. 에서 더 많은 관리 방법을 찾을 수 있습니다. npmjs 서버 문서.

계약 및 라이브러리 가져오기

Solidity를 사용하면 다른 계약 및 라이브러리를 계약으로 가져올 수 있습니다.이는 코드를 건조하게 유지하는 데 유용합니다. 다른 사람들이 만든 라이브러리를 사용하는 경우에도 마찬가지입니다.

로컬 파일 가져오기

상대 가져오기를 사용하여 프로젝트의 다른 파일을 가져올 수 있습니다.

import "../lib/somefile.sol";

노드 모듈에서 가져오기

다음과 같은 패키지 관리자를 사용하는 경우 node_module에서 가져올 수도 있습니다. npm 또는 yarn.

import "@openzeppelin/contracts/token/ERC20/ERC20.sol";

URL에서 가져오기

패키지 관리자를 사용하지 않으려면 URL에서 직접 가져올 수도 있습니다.

import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.9.2/contracts/token/ERC20/ERC20.sol";

계약 정의

contract 키워드는 새 계약을 정의하는 데 사용되며, 그 뒤에 정의하려는 계약의 이름이 옵니다.

contract MyContract {

}

기본 요소

솔리디티 스마트 계약은 몇 가지 주요 요소로 구성됩니다.

  • 상태 변수: 계약에 영구 데이터를 저장하는 변수입니다.
  • 함수: 내부 또는 외부에서 호출할 함수를 래핑합니다.
  • 이벤트: 계약에 따라 외부 세계에 변경 사항을 알리기 위해 내보냅니다.
  • 수정자: 함수의 동작을 변경하는 데 사용됩니다.

다음 섹션에서 이 두 가지를 더 자세히 설명하겠습니다.