Vyper 스마트 계약 언어에 대한 초보자 가이드

Vyper는 Python 3 구문 및 규칙에서 파생되고 Ethereum Virtual Machine (EVM)을 대상으로하는 스마트 계약 언어 패러다임입니다..

EVM은 이더 리움의 블록 체인 원장과 병렬로 실행되는 시뮬레이션 된 글로벌 싱글 톤 컴퓨터로, 더 복잡한 트랜잭션과 조건부 자체 실행 계약을 구성 할 수 있습니다..

이더 리움 플랫폼 자체는 기능이없고 가치에 구애받지 않으며 스마트 계약이 결합되는 방식과 애플리케이션의 맥락에서 중추만을 제공합니다..

바이퍼 향후 지분 증명 (Casper)으로의 전환에 활용 될 예정이며 감사 가능성, 구문 적 단순성 및 직설성에 중점을 둔 스마트 계약의 읽기 및 쓰기를위한보다 실용적인 미니멀 한 체제를 제공합니다..

바이퍼 대 솔리 디티

Solidity 로고

그 점에서 Vyper는 사실상 주류 인 Solidity에서 크게 벗어났습니다. 온 체인 계산은 리소스가 제한되어 있기 때문에 의도 한 기능의 최소한의 필요성 내에서 엄격하게 정의되어야하며, Vyper는 스마트 계약에 대해 이러한 환원 적 접근 방식을 취하여 거의 모든 것을 제외하고 쉽게 읽을 수있는 사용자 역할 및 스토리로 구성합니다..

Solidity에서 즉시 눈에 띄는 출발점은 상속을 제거하여 우선 순위의 계층 구조에있는 여러 계약 파일 사이를 건너 뛰지 않고 “동일한 페이지에”일을 유지하는 것입니다. 프로그램은 내부적으로하고있다.

대신에, 보안 가정을 ​​완화하지 않고 동시에 구문을 적용하지 않고 (소유자, 관리자, 토큰, 기한 및 가능한 표현과 같은 유형과 함께) 정제되고 제거 된 구성 및 모듈성에 중점을 둡니다. 계약 및 분산 원장의 특성에 따라 즉시 명확하고 쉽게 감사 가능하도록 만드는 투명성.

보안 기능

보안은 신뢰할 수없는 비즈니스 로직을 작성하기위한 투명한 공증인 및 일반화 된 기관 기관으로 기능하기위한 합의 된 통합 글로벌 분산 환경에서 스마트 계약의 맥락에서 가장 중요합니다..

이러한 목표에 따라 Vyper는 표현의 명확성, 엄격하고 명확한 명확성 및 강력한 타이핑에 초점을 맞추고 있습니다. 따라서 연산자 오버로딩을 없애고 가능한 한 조각화되지 않고 명확하게 표현하려고 노력합니다 (엄격하게 필요한 부분에 초점). 오해의 소지가있는 코드를 작성하기 어렵게 만듭니다. 사실, 명확하고 자명 한 코드 패턴을 적용하여 스마트 계약 보안을 강화한다는 목표로 일부 작업을 고의적으로 금지합니다..

재귀 호출 및 무한 길이 루프는 가스 제한 공격의 가능성을 여는 것으로 제외되며 대신 Vyper는 함수 호출의 가스 소비에 대한 정확한 상한을 추정하여 가스 메트릭을 최적화하는 것을 목표로합니다. 배열 액세스 및 산술 연산에 대한 경계 및 오버플로 검사가 포함되어 있으며 (SafeMath 라이브러리가 필요하지 않음) 상태를 변경하는 수정 자나 상수가 허용되지 않습니다..

컴파일러 내부 및 코드 구문

Vyper는 설명하는 내용의 핵심, 즉 EVM에 가까운 구문 규칙을 고수하려고합니다. Vyper 스크립트는 해석되지 않고 EVM 바이트 코드로 직접 컴파일됩니다. 이처럼 Python에 대해 비정상적으로 생각하는 방식입니다. 내부적으로, Vyper와 Solidity는 모두 동일한 방식과 일련의 단계로 바이트 코드로 컴파일되므로 상호 운용이 가능하며 서로의 계약간에 외부 호출을 할 수 있습니다..

간단히 말해서, 코드는 명령어의 추상 구문 트리 표현으로 분해하는 파서에 의해 취해지며, 거기에서 유형 검사 프로세스가 트리를 반복하여 해당 유형을 아래쪽에서 위로 할당합니다. 정적 분석 검사를 수행 한 후 바이트 코드가 생성됩니다..

계약의 일반 구조

Vyper는 기능면에서 완벽하며 현재 감사 및 베타 테스트를 기다리고 있습니다. Vyper의 명명 규칙은 비단뱀 같은 종류이지만 가능한 한 코드가 설명하려는 내용 (즉, 프로세서라고 할 수있는 것의 최소값만큼 간단한 EVM)의 핵심에 가깝도록 노력합니다. 방법.

두 가지 유형의 정수는 각각 음이 아닌 정수와 부호있는 정수를 나타내는 unit256 및 int128로 표시됩니다. unit256은 대부분의 애플리케이션에 int128 만 필요하므로 복잡성 증가로 인해 숫자 유형으로 완전히 지원되지 않습니다. ERC-20 표준과의 상호 운용성을 보장하기 위해 unit256이 포함되었습니다..

이더 리움 스마트 계약은 일반적으로 상태 변수와 함수로 구성됩니다..

상태 변수는 계약 저장소에 영구적으로 저장되며 숫자, 문자열, 주소 또는 부울 참 / 거짓 표현식 유형일 수있는 값입니다..

상태 변수는 간단하게 선언됩니다.

storedData : int256

매핑은 키 세트와 해당 값을 정의하는 상태 변수입니다. Vyper에서는 다음과 같이 정의되고 액세스됩니다.

plainMapping : 10 진수 [int256]

plainMapping [0] = 10.1

먼저 값이 선언 된 다음 유형이 선언됩니다. 매핑에 액세스 할 때 테이블의 위치는 대괄호로 지정됩니다..

함수는 트리거 할 수있는 동작의 종류를 정의하는 계약 내에서 실행 가능한 코드 단위입니다. Python과 유사하게 Vyper의 함수는 “def”로 선언됩니다..

스마트 컨트랙트의 기능은 읽기 기능 (빠르고 가스 비용이 들지 않음) 또는 쓰기 / 실행 기능 (블록 체인에 새기고 따라서 사이클 당 가스 비용이 발생하고 다음 블록에서 실현됨)입니다..

Solidity 규칙에 따라 계약과 이름이 같은 생성자 함수는 주어진 계약과 그 기본 매개 변수를 블록 체인에 인스턴스화합니다. 이 함수는 한 번만 실행되며 Vyper에서는 Python __init__ 메서드 (해당 클래스의 객체가 생성 될 때마다 호출되는 특수 메서드)의 형식을 취합니다. 예를 들어, 간단한 토큰 계약에서 :

@공공의

def __init __ (_ name : bytes32, _symbol : bytes32, _decimals : uint256, _initialSupply : uint256) :

  self.name = _name

  self.symbol = _symbol

  self.decimals = _decimals

  self.totalSupply = uint256_mul (_initialSupply, uint256_exp (convert (10, ‘uint256’), _decimals))

self 메서드는 의미를 명확하게하기 위해 클래스의 특정 인스턴스 변수를 명시 적으로 주장합니다..

가시성 수준에 따라 함수는 @public 또는 (기본적으로) @private로 장식 될 수 있습니다. 공개 가시성은 메서드가 계약의 ABI (Application Binary Interface)에 노출되어 외부 행위자가 호출 할 수 있음을 의미합니다..

위의 예에서 생성자 함수는 토큰 계약을 설명하는 기본 변수, 즉 이름, 시세, 분할 소수점 및 유통중인 발행 된 토큰의 총 공급량을 인스턴스화합니다..

다른 데코레이터로는 상태를 읽기만하는 데코레이션 메소드를위한 @constant와 지불로 호출 할 수있는 메소드를 지정하기위한 @payable이 있습니다..

예를 들면 :

@공공의

@payable

def bid () : // 함수

외부 호출은 계약 상단에서 외부 계약의 ABI를 정의하여 지원됩니다.

클래스 Foo () :

   foo (bytes32) : 통과

인덱싱 된 구조에 이벤트를 기록하여 클라이언트가 이벤트를 검색 할 수 있습니다..

지불 : __log __ ({amount : int128, arg2 : indexed (address)})

total_paid : int128

@공공의

def pay () :

  self.total_paid + = msg.value

  log.Payment (msg.value, msg.sender)

이벤트는 전역 선언 및 함수 정의 전에 선언되어야합니다..

환경 설정

Ubuntu에서 Python 3.6을 실행하는 데 문제가있는 경우 vyper를 ‘snap’으로 설치하는 것이 빠른 방법입니다.

$ sudo apt-get 설치 snapd

$ sudo 스냅 설치 vyper –edge –jailmode

계약을 바이트 코드로 컴파일하는 것은 다음과 같이 간단합니다. vyper filename.v.py (파일 확장자는 일반적으로 .vy를 의미하지만 현재 Python 구문 강조를 위해 .v.py를 유지합니다)

ABI를 얻으려면 :

바이퍼 -f json example.vy

또는 통합 온라인 컴파일러는 vyper 온라인 솔리 디티 호환과 같은 다양한 예제를 제공합니다. ERC-20 토큰, 금융 행사 나무꾼 그리고 온 체인 투자 전문가. 그러나 Remix for Solidity와 달리 테스트 실행 플랫폼이 제공되지 않고 바이트 코드로만 컴파일되며 계약의 ABI를 제공합니다..

계약 테스트를 위해 우리는 로컬 블록 체인 환경을 스핀해야합니다. 가나슈 (이전의 TestRPC)는 Truffle 제품군의 옵션이지만 마이그레이션은 콘솔에서 수동으로 수행해야합니다..

대안이 실행 중이며 사전 구성된 Docker 이미지 (단일 노드 Proof-of-Authority 블록 체인 사용)가 제공되는 비공개 체인 모드에서 Parity 클라이언트를 사용하여 실행할 수 있습니다. 여기. 컨테이너가 실행되면 브라우저 (localhost : 8180)에서 그래픽 사용자 인터페이스에 액세스 할 수 있습니다. 브라우저 기반 인터페이스를 통해 계정 및 계약을 로컬로 배포하고 상호 작용할 수 있습니다..

그러나 pyethereum (Python 용 Ethereum 코어 라이브러리)은 가볍고 전체 Python과 호환되므로 현재 대부분 사용됩니다. 플러그인 기본적으로 개발중인 계약 테스트 용.

개발 및 참여

많은 홍보 나 주류의 관심이 부족하거나 최근까지 문서가 많지 않았음에도 불구하고 Vyper는 현재 꽤 오랫동안 조용히 작업 해 왔으며 최근에야.

그러나 스마트 계약 개발자와 보안 감사인의 관심을 끌기 시작했습니다. OpenZeppelin, 그리고 솔리 디티의 짧은 출시에 불만을 품은 사람들은보다 직관적으로 간단하고 대안과 같은 덜 스위스 군용 칼을 찾고 있습니다..

Mike Owergreen Administrator
Sorry! The Author has not filled his profile.
follow me