개발자로서 깨달아야 할 한 가지는 지속적인 교육의 중요성입니다. 암호 화폐와 블록 체인의 세계는 끊임없이 움직이고 있습니다. 1 년 전의 규범은 지금부터는 완전히 관련이 없을 수 있습니다. 따라서 이러한 지속적인 변화의 정신으로 Vyper 및 Plutus 스마트 계약 및 코드가 어떻게 생겼는지에 대한 아이디어를 제공 할 것입니다. Ethereum은 향후 계약에 Vyper를 사용할 계획이며 Cardano는 스마트 계약 프로그래밍 언어로 Plutus를 선택했습니다..

미래의 스마트 계약? 바이퍼와 플루 투스

Solidity는 현재 이더 리움에서 선택한 스마트 계약 언어입니다. Solidity는 Gavin Wood, Christian Reitwiessner, Alex Beregszaszi, Yoichi Hirai 및 Ethereum과 같은 블록 체인 플랫폼에서 스마트 계약을 작성할 수 있도록 이전 Ethereum 핵심 기여자들이 개발했습니다..

많은 인기있는 프로그램과 프로그래밍 개념의 영향을 받았습니다. 객체 지향 프로그래밍, 웹 개발, 어셈블리 언어 등의 요소가 있으며 광범위한 사용 사례를 다룹니다. 하나, 감사 견고성 계약은 매우 관대하고 복잡 할 수 있기 때문에 정말 어려울 수 있습니다..

Vyper는 가독성과 단순성을 위해 제작 된 Python 기반 언어입니다. 파이썬 자체는 가장 쉽게 이해되고 널리 사용되는 프로그래밍 언어 중 하나이기 때문에 비 기술적 인 사람들이 자신의 스마트 계약을 시작하고 코딩을 시작할 수 있기를 바랍니다. Vyper는 사소한 사용 사례 (예 : 복잡한 Dapp을 코딩하는 데 사용할 수 없음)에 초점을 맞추고 견고성만큼 유연하지 않은 최소한의 단순한 언어로 개발되었습니다..

따라서 계약의 유연성을 다소 제한 할 수 있지만 더 많은 것을 제공합니다

“스마트 계약을 읽고 쓰기위한 간단하고 실용적이며 쉽게 감사 할 수있는 제도. 코드를 작성하는 사람의 의도를 명확하게 포착하려고합니다.”

Ethereum과 Ethereum Classic bigwigs는 두 가지 주요 이유로 Vyper를 완전히 뒤처진 것처럼 보입니다.

  • Ethereum의 샤딩 구현 및 Casper FFG는 Vyper로 코딩되었습니다..

  • Ethereum Classic을 유지 관리하고 개발하는 Ethereum Commonwealth는 Vyper를 기본 스마트 계약 언어로 채택하고 싶다고 말했습니다..

Vyper의 미니멀 한 접근 방식은 상속, 상태 수정 자 재귀 호출 및 가스 제한 벡터 공격을 제공하는 연산자 오버로딩을 제거합니다. 또한 대규모 산술 연산을위한 수많은 오버플로 검사도 있습니다. 접근 방식으로 인해 Vyper 리소스가 효율적일뿐만 아니라 감사 중에 발견되지 않고 악성 코드를 작성하는 것도 어렵습니다..

바이퍼 스마트 계약

Vyper 스마트 계약 예의를 살펴 보겠습니다. CoinPupil. 이것은 간단하고 직접적인 ERC-20 계약입니다..

# 이벤트

전송 : event ({_ from : indexed (address), _to : indexed (address), _value : uint256})

승인 : event ({_ owner : indexed (address), _spender : indexed (address), _value : uint256})

# 상태 변수

이름 : public (bytes32)

기호 : public (bytes32)

totalSupply : public (uint256)

소수 : public (int128)

잔액 : int128 [주소]

허용 : int128 [주소] [주소]

# 생성자 기능 / 계약 인스턴스화

@공공의

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

self.name = _name

self.symbol = _symbol

self.decimals = _decimals

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

self.balances [msg.sender] = convert (self.totalSupply, ‘int128’)

# 계정 잔액

@공공의

@일정한

def balanceOf (_owner : 주소) -> uint256 :

return convert (self.balances [_owner], ‘uint256’)

# _amount of tokens _to address

@공공의

def transfer (_to : 주소, _amount : int128 (uint256)) -> 부울 :

self.balances [msg.sender] 인 경우 >= _amount 및

self.balances [_to] + _amount >= self.balances [_to] :

self.balances [msg.sender]-= _amount # 발신자에서 빼기

self.balances [_to] + = _amount #받는 사람에게 동일하게 추가

True 반환

그밖에:

False를 반환

# 허용 된 토큰의 양도

@공공의

def transferFrom (_from : 주소, _to : 주소, _value : int128 (uint256)) -> 부울 :

if _value <= self.allowed [_from] [msg.sender] 및

_값 <= self.balances [_from] :

self.balances [_from]-= _value # from 주소의 잔액 감소.

self.allowed [_from] [msg.sender]-= _value # 수당 감소.

self.balances [_to] + = _value # 주소에 대한 잔액 증가.

True 반환

그밖에:

False를 반환

# _spender가 최대 _value 금액까지 계좌에서 인출하도록 허용.

@공공의

def 승인 (_spender : 주소, _amount : int128 (uint256)) -> 부울 :

self.allowed [msg.sender] [_ spender] = _amount

log.Approval (msg.sender, _spender, convert (_amount, ‘uint256’))

True 반환

# 주소 수당 받기

@공공의

def allowance (_owner : address, _spender : address) -> uint256 :

return convert (self.allowed [_owner] [_ spender], ‘uint256’)

이 계약에서 :

  • “self”메서드는 설명을 위해 해당 클래스의 인스턴스 변수를 표시하는 데 사용됩니다..

  • @public 및 @private는 외부 행위자 (다른 계약 또는 지갑 주소)가 호출 할 수 있도록하는 계약 ABI (Application Binary Interface) 인터페이스의 가시성과 노출을 설정하는 데 사용됩니다..

플루 투스

Cardano는 Haskell과 Plutus를 선택한 언어로 선택했습니다. Haskell은 Cardano를 코딩하는 데 사용되며 Plutus는 스마트 계약 생성에 사용됩니다. 둘 다 기능적 언어입니다..

그게 무슨 뜻이야?

언어의 두 가족 (약간 우회)

프로그래밍 언어와 관련하여 두 가지 제품군이 있습니다.

  • 피할 수 없는
  • 기능의.

명령형 프로그래밍 언어

명령형 접근 방식에서 코더는 목표에 도달하기 위해 컴퓨터가 수행해야하는 모든 단계를 내려야합니다. C ++, Java, 심지어 Solidity와 같은 기존 프로그래밍 언어는 모두 명령형 프로그래밍 언어입니다. 이러한 종류의 프로그래밍 접근 방식을 알고리즘 프로그래밍이라고도합니다..

우리가 의미하는 바를 예로 들어 보겠습니다. C ++를 살펴 보겠습니다. 5와 3을 더하고 싶다고 가정합니다..

int a = 5;

int b = 3;

int c;

c = a + b;

따라서 보시다시피 추가 프로세스는 여러 단계를 거치며 각 단계는 개별적으로 차례로 실행되므로 프로그램의 상태를 지속적으로 변경합니다..

추가 프로세스에는 4 단계가 필요하며 단계는 다음과 같습니다.

  • 정수 a를 선언하고 값 5를 할당.

  • 정수 b를 선언하고 값 3을 할당.

  • 정수 c 선언.

  • 및 b의 값을 더하고 c에 저장.

함수형 프로그래밍 언어

두 번째 프로그래밍 언어 제품군은 기능적 언어입니다. 이 스타일의 프로그래밍은 문제 해결에 대한 기능적 접근 방식을 구축하기 위해 만들어졌습니다. 이러한 접근 방식을 선언적 프로그래밍이라고합니다..

그래서 함수형 프로그래밍은 어떻게 작동합니까??

함수 g (x)를 계산하는 데 사용하려는 함수 f (x)가 있고이를 사용하여 함수 h (x)와 함께 작동한다고 가정합니다. 순서대로 모든 문제를 해결하는 대신 다음과 같은 단일 함수로 모든 문제를 하나로 묶을 수 있습니다.

h (g (f (x)))

이것은 함수 적 접근을 수학적으로 추론하기 쉽게 만듭니다. 이것이 바로 기능적 프로그램이 스마트 계약 생성에 대한보다 안전한 접근 방식이어야하는 이유입니다. 이것은 또한 프로그램이 무엇을하고 어떻게 작동하는지 수학적으로 증명하는 것이 훨씬 더 쉽다는 것을 의미하는 더 간단한 형식적 검증에도 도움이됩니다. 이것은 Cardano에 “High Assurance Code”속성을 부여합니다..

이것이 바로 기능적 접근이 바람직한 이유입니다..

그리고 이것이 바로 Cardano가 Haskell을 사용하여 생태계를 코딩하고 Plutus를 스마트 계약을 위해 사용하는 것입니다. Haskell과 Plutus는 모두 기능적 언어입니다..

Plutus로 돌아 가기

Plutus는 Haskell의 더 높은 수준의 단순화 된 버전입니다. 이것은 Haskell과 마찬가지로 프로그래밍보다는 수학과 더 유사하다는 것을 의미합니다. Plutus는 예정된 사용을 위해

“금융 기관, 전자 거래를 수행하는 장소 및 기타 자금을 위태롭게하는 기타 금융 운영.”

자, 몇 가지 기본적인 Plutus 프로그래밍을 살펴 보겠습니다. 다음 코드는 Cardano 문서.

이 간단한 Plutus 프로그램은 덧셈, 곱셈, 계승 및 피보나치:

추가 : Nat -> Nat -> Nat {

0 추가 n = n;

더하기 (Suc m) n = Suc (add m n)

}

mul : Nat -> Nat -> Nat {

mul Zero _ = Zero;

mul (Suc m) n = 더하기 (mul m n) n

}

fac : Nat -> Nat {

fac Zero = Suc Zero;

fac (Suc n) = mul (Suc n) (fac n)

}

fib : Nat -> Nat {

fib Zero = Suc Zero;

fib (Suc Zero) = Suc Zero;

fib (Suc (Suc n)) = 추가 (fib n) (fib (Suc n))

}

코드 자체에서 기능적 접근 방식과 명령형 접근 방식의 차이점을 볼 수 있습니다..

결론

끊임없이 변화하는 암호 화폐의 세계 블록 체인 우리가 끊임없이 발가락에 있어야 함을 의미합니다. 이러한 새로운 프로그래밍 언어에 대한 지식은 모든 현상금 사냥꾼과 개발자에게 절대적으로 중요합니다..

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