안녕하세요 스크립토 6기 이희제입니다.
이번 시간에는 바이퍼라는 컨트랙트용 프로그래밍 언어에 대해서 알아보겠습니다.
솔리디티와 비교하면서 진행하도록 하겠습니다.
✅ 이더리움 스마트 컨트랙트는 취약점을 가지고 있는데 3가지 유형으로 나눌 수 있습니다.
💡 바이퍼는 안전한 코드를 작성하기 쉽게 해줍니다. 즉, 오독을 하기 쉽거나 취약점이 있는 코들르 작성하기 어렵게 합니다.
✅ 바이퍼가 안전하지 않은 코드 작성을 방지하는 방법 중 하나는 의도적으로 솔리디티의 기능 중 일부를 생략하는 것입니다.
지금부터 어떤 기능들이 생략되었는지 살펴보겠습니다.
stageTimeConfirmation
변경자가 적용이 된다.nextStage()
라는 다른 함수를 호출해 SafeStage
에서 DangerStage
로 stage
변수가 변경되었다.바이퍼는 변경자를 모두 없애버렸습니다. 바이퍼의 권장사항은 만일 변경자를 검증만을 위해 사용했던 것이라면, 대신에 간단히 인라인(inline) 체크를 사용해서 함수의 일부부으로 포함해 검증하는 것입니다.
솔리디티는 객체 지향 프로그래밍의 핵심 기능인 다중 상속과 다형성(polymorphism)을 지원하지만, 바이퍼는 이를 지원하지 않습니다.
바이퍼는 다중 상속이 코드를 이해하기 어렵도록 너무 복잡하게 만든다는 견해를 가지고 있습니다.
인라인 어셈블리를 통해 솔리디티 프로그램이 EVM 명령어에 직접 접근하여 작업을 수행할 수 있습니다.
메모리 위치 0x80에 3을 더하는 예시 : 3 0x80 mload add 0x80 mstore
바이퍼는 가독성 손실이 아주 큰 문제라고 생각하므로 인라인 어셈블리를 지원하지 않습니다.
함수 오버로딩을 통해 개발자는 여러 함수를 같은 이름으로 작성할 수 있습니다.
어떤 함수가 사용될지는 제공되는 인수의 유형에 따라 다릅니다.
바이퍼는 함수 오버로딩을 지원하지 않습니다.
- 형변환에는 암시적 형변환과 명시적 형변환의 두 가지 종류가 있습니다.
- 암시적 형변환은 종종 컴파일 타임에 수행됩니다.
- 바이퍼는 암시적 형변환을 허용하지 않습니다.
솔리디티에서는 명시적으로 형변환을 할 수 있습니다.
➡️ 상위 비트가 제거된 것을 확인할 수 있습니다.
바이퍼에는 명시적 형변환을 수행하는 convert 함수가 있습니다.
바이퍼는 전제 조건, 사후 조건, 상태 변경을 명시적으로 처리합니다.
바이퍼를 가지고 스마트 컨트랙트를 작성할 때 개발자는 다음의 세 가지 사항을 검토해야 합니다.
이더리움 상태 변수의 현재 상태/조건은 무엇인가?
배포하기 전 코드를 논리적으로 단계별로 실행하고 다른 컨트랙트와의 상호작용을 포함하여 코드를 실행할 때 발생할 수 있는 모든 영구적인 결과, 그에 따른 효과, 시나리오를 고려.
✅ 바이퍼에서는 다음과 같은 장식자를 함수의 시작 부분에서 사용할 수 있습니다.
✅ 모든 함수, 변수 등을 포함하여 모든 바이퍼 스마트 컨트랙트 코드는 한곳에 존재합니다.
먼저 선언이 돼 있어야 호출을 할 수 있습니다.
지금까지 바이퍼에 대해서 간략히 알아보았습니다.
감사합니다.