SPDX Pragma Contract (internal,external,private,public)

전진영·2022년 3월 3일
0

SPDX 라이센스 식별자

스마트 계약에 대한 신뢰는 소스 코드를 사용할 수 있는 경우 더 잘 확립될 수 있습니다. 소스 코드를 사용 가능하게 만드는 것은 항상 저작권과 관련된 법적 문제를 다루기 때문에 Solidity 컴파일러는 기계 판독 가능한 SPDX 라이센스 식별자 의 사용을 권장합니다 . 모든 소스 파일은 라이선스를 나타내는 주석으로 시작해야 합니다

**// SPDX-License-Identifier: MIT**

Pragma(프라그마)

pragma키워드는 특정 컴파일러 기능 또는 검사를 활성화하는 데 사용됩니다 . pragma 지시문은 항상 소스 파일에 대해 로컬이므로 전체 프로젝트에서 활성화하려면 모든 파일에 pragma를 추가해야 합니다. 다른 파일 을 가져오는 경우 해당 파일의 pragma가 가져오는 파일에 자동으로 적용 되지 않습니다 .

//버전 pragma는 다음과 같이 사용됩니다.
pragma solidity ^0.5.2;
0.7 solidity version 0.9 solidityversion까지 사용하겠다.
pragma solidity >= 0.7.0 < 0.9.0;

Contracts(계약)

Solidity의 계약은 객체 지향 언어의 클래스와 유사합니다. 여기에는 상태 변수와 이러한 변수를 수정할 수 있는 함수의 영구 데이터가 포함됩니다. 다른 계약(인스턴스)에서 함수를 호출하면 EVM 함수 호출을 수행하므로 상태 변수에 액세스할 수 없도록 컨텍스트를 전환합니다.

contract Hello{
	string public hi = "Hello solidity"
}

Creating Contracts(계약 체결)

계약은 이더리움 거래를 통해 또는 Solidity 계약 내에서 "외부에서" 생성할 수 있습니다.

Remix와 같은 IDE는 UI 요소를 사용하여 생성 프로세스를 원활하게 만듭니다.

이더리움에서 프로그래밍 방식으로 계약을 생성하는 것은 JavaScript API web3.js 를 사용하는 것이 가장 좋습니다 . 계약 생성을 용이하게 하기 위해 web3.eth.Contract 라는 기능이 있습니다 .

계약이 생성되면 해당 생성자constructor ( 키워드 로 선언된 함수 )가 한 번 실행됩니다.
생성자는 선택 사항입니다. 하나의 생성자만 허용되며 이는 오버로딩이 지원되지 않음을 의미합니다.

생성자가 실행된 후 계약의 최종 코드가 블록체인에 배포됩니다. 이 코드에는 모든 공개 및 외부 함수와 거기에서 함수 호출을 통해 도달할 수 있는 모든 함수가 포함됩니다. 배포된 코드에는 생성자 코드 또는 생성자에서만 호출되는 내부 함수가 포함되지 않습니다.

내부적으로 생성자 인수는 계약 자체의 코드 뒤에 인코딩된 ABI 로 전달 되지만 web3.js.
계약이 다른 계약을 생성하려면 생성된 계약의 소스 코드(및 바이너리)를 작성자에게 알려야 합니다. 이는 순환 생성 종속성이 불가능함을 의미합니다.

Visibility and Getters(가시성 및 게더)

Solidity는 두 가지 종류의 함수 호출(실제 EVM 호출("메시지 호출"이라고도 함)을 생성하지 않는 내부 호출과 수행하는 외부 호출)을 알고 있기 때문에 함수 및 상태 변수에 대한 네 가지 유형의 가시성이 있습니다.

함수는 , 또는 로 external지정 해야 public합니다 . 상태 변수의 경우 불가능합니다.internal private external

external:

외부 함수는 계약 인터페이스의 일부이므로 다른 계약 및 트랜잭션을 통해 호출할 수 있습니다. 외부 함수 f는 내부적으로 호출할 수 없습니다(즉 f(), 작동하지 않지만 this.f()작동함). 외부 함수는 큰 데이터 배열을 수신할 때 더 효율적입니다.

public:

공개 함수는 계약 인터페이스의 일부이며 내부적으로 또는 메시지를 통해 호출할 수 있습니다. 공개 상태 변수의 경우 자동 getter 함수(아래 참조)가 생성됩니다.

internal:

이러한 기능과 상태 변수는 를 사용하지 않고 내부적으로만(즉, 현재 계약 또는 그로부터 파생된 계약 내에서) 액세스할 수 있습니다 this.

private:

비공개 기능과 상태 변수는 파생된 계약이 아닌 정의된 계약에서만 볼 수 있습니다.

profile
코딩어린이

0개의 댓글