-
암호학 시리즈 #2 모듈러 연산과 암호학암호학 시리즈 2024. 2. 24. 18:48
Author : 최원혁 Intro 암호학은 엄청나게 큰 숫자를 반복적으로 연산하여 복호화를 아주 어렵게 또는 불가능하게 만드는 수학적 학문이다. 이 과정에서 무한(infinite)한 수를 대상으로 암호 체계를 구성하면 더 안전하리라 생각할 수도 있지만, 아무리 안전해도 만약 현대의 컴퓨터로 서명하거나 암호화하는 데에 너무 긴 시간이 걸린다면 그 활용 범위가 제한적이다. 때문에 수용 가능한 수준의 안전성을 담보하면서 효율적인 수준의 수체계와 연산 방식을 위해 유한(finite)한 개수를 가지는 범위를 선호한다. 이를 위해서 암호학에서는 기초 연산으로 modular 연산을 주로 이용한다. 기본 다지기 modular 연산을 한글로 ‘합동연산’이라 부르며 나머지 연산을 기반으로 하는 수학적 연산이다. 예를 들어..
-
EIP-150 : 이더리움의 63/64 Ruleevm 2024. 2. 22. 21:43
Author : 최원혁 본 내용은 EIP-150에 대한 내용을 다루고 있습니다. Intro 2016년 7월 20일에 이더리움 비잔티움 하드포크 당시, 업데이트된 이더리움 개선 제안(EIP)으로 EIP-150가 프로토콜에 반영된 적이 있다. 이는 스마트 컨트랙트의 함수 로직 내부에 외부 함수(다른 컨트렉트의 함수) 호출(external call) 시, 연산되는 가스비를 63/64 Rule 규칙을 도입하여 재정의하자는 내용으로, 이더리움 프로토콜 내에 큰 변화를 주는 의미있는 EIP였다. 지금부터 EIP-150와 63/64 Rule 규칙이 어떤것인지 알아보자. EIP-150 이더리움 공식 Github에 나와있는 EIP-150의 제목은 “IO(input/output)이 많은 작업의 가스 비용 변화(Gas co..
-
EIP-2718 : 이더리움의 트랜잭션 유형별 Type & Payloadevm 2024. 2. 20. 17:37
Author : 최원혁 본 게시글은 EIP-2718 & EIP-1559 & EIP-2930 & EIP-2929에 대한 내용을 다루고 있습니다. Intro 이더리움의 블록체인은 우리가 보내는 트랜잭션에 작성된 내용을 참고하여 우리가 원하는 동작을 수행한다. 해당 내용은 정해진 표준이 존재하며, 여러 가지 유형이 존재한다. 블록체인 노드는 표준에서 벗어난 트랜잭션은 받아들이지 않는다. 때문에 올바른 트랜잭션을 전송하기 위해서는 이더리움에서 인정하는 표준 양식에 대해 숙지하고 있어야 하는 것이 중요하다. 이번 포스트를 통해 이더리움이 어떤 트랜잭션 표준을 따르는지에 대해 알아보자. Transaction Type & Payload 이더리움의 Transaction은 크게 Transaction Type(이하 Typ..
-
블록체인 암호학 #1 : 확장된 유클리드 알고리즘암호학 시리즈 2024. 2. 14. 12:20
Author : 최원혁 Intro 블록체인의 보안성, 합의 알고리즘 디지털 서명, 지갑 등 블록체인의 기본적인 개념과 기능은 전부 암호학으로 구현되어 있다. 블록체인과 암호학은 아주 밀접한 관련이 있는 두 분야이다. 개발자들이 암호학의 원리를 잘 이해하고 실수 없이 코딩할 수 있도록 도움을 주기 위해 암호학에 대한 이해가 필요하다고 생각한다. 논문의 영역과 개발자에게 필요한 지식의 영역 그 경계선까지, 즉 어느정도 심도 깊게 내용을 다룰 예정이다. 기본 다지기 암호학을 위해 유클리드 알고리즘을 처음으로 배우는 이유는 다음 시리즈에 다룰 모듈러 연산을 이해하기 위함이다. 특히 모듈러 연산은 이더리움 블록체인에서 사용하는 타워 곡선 암호학(Elliptic Curve Cryptography:ECC)을 이해하기..
-
Solidity 릴리즈 노트 | 0.8.20 versionSolidity 릴리즈 노트 2024. 2. 11. 00:00
Author : 최원혁 "Solidity 릴리즈 노트"는 스마트 컨트랙트 개발 및 버그 측면에서 필요한 업데이트 내용만 정리합니다. Important Fixed EVM 컴파일러의 기본(default) version이 “Shanghai”로 설정되며, EVM에 "Shanghai” version이 추가됩니다. 이제 바이트코드에 새로운 Opcode PUSH0가 포함됩니다. Yul EVM Code에서 codesize를 사용하여 Stack에 0을 추가하는 경우 PUSH0를 사용합니다. New opcode PUSH0 by EIP-3855 이더리움 상하이 업그레이드의 EIP-3855에 따라 새로운 Opcode PUSH0가 추가됬다. 이에 따라 Solidity 0.8.20을 배포하여 바이트 코드 및 inline-asse..
-
EIP-3855 : EVM의 새로운 Opcode PUSH0을 소개합니다evm 2024. 2. 10. 17:34
Author : 최원혁 Intro 한국 시간 2023년 4월 13일 목요일, 이더리움은 상하이 업그레이드를 통해 실행 레이어(execution layer)에 새로운 표준(EIP)를 반영한다. 이 중에서도 EIP-3855가 추가되어 새로운 Opcode PUSH0를 이더리움 가상 머신(EVM)에 도입한다. Opcode PUSH0 상하이 업데이트 이후, geth Github의 opcodes.go를 보면 PUSH0(0x5f)를 확인할 수 있다. 기능은 아주 간단하다. EVM Stack 최상단에 0(0x00)을 추가한다. Bytescode로 컴파일(compile)된 코드에서 Stack 최상단에 0을 추가해야하는 경우는 생각보다 굉장히 빈번하다. 특히, memory나 storage의 offset을 정의할때 0이 필..
-
Deploy Smart Contract 원리 및 Opcode 해석 : Creation Code & Runtime Codeevm 2024. 2. 7. 22:53
Author : 최원혁 Intro Remix 또는 Hardhat 같은 프레임워크로 간단하게 스마트 컨트랙트 배포를 경험해본적이 있을 것이다. 하지만 컨트랙트 배포(Deploy)는 Low-Level 수준에서 보면 복잡하고 읽기 힘든 Opcode에 따라 동작하게된다. 이런 복잡하고 머리 아픈 저수준 바이트코드를 왜 해석해야는지 의문이 들수도 있다. 글쓴이는 Factory Pattern에서 다양한 컨트랙트를 개발하는 요즘 트렌드를 보며 Creation Code와 Runtime Code를 저수준에서 해석할수 있는 역량이 필요하다고 생각했다. 또한, Minimal Proxy(ERC-1167)처럼 스마트컨트랙트 로직을 전부 Opcode로 구현하는 경우도 있다. 이러한 계기로 이번 주제를 통해 스마트컨트랙트 배포에 ..