본문 바로가기

Blockchain

Decoding Input Data using Ethereum ABI in Rust use std::fs; use ethabi::Contract; use hex; fn main() { // input data let data = "0xa9059cbb000000000000000000000000d18a52ae66778bf9ece5515115875a313d45f0e900000000000000000000000000000000000000000000000000000000007fde60"; // remove hex prefix: 0x let prefix_removed_data = data.trim_start_matches("0x"); // get method id, 4 bytes from data let method_id = &prefix_removed_data[0..8]; println!("met..
거래 (Transaction) 1. 거래의 생성 거래는 간단하게 돈을 송금한다는 의사표시로 생각할 수 있으며, 실제로 제출되기 전까지는 금융 시스템 내에 보이지 않는다. 거래는 온라인 혹은 오프라인 상에서도 가능하며, 이는 거래의 내용과 서명이 체인상에서 발생하는 것이 아니라는 것을 의미한다. 즉 거래는 체인과 무관하게 발생하며, 이를 실제로 의미있는 거래가 되게 하기 위해서는 체인 상에 전파하는 것이 필요하다. 거래는 간단하게 그 거래의 내용이 존재하며, 서명으로 그 거래가 유효한 거래임을 표시하는 과정으로 구성되어 있다. 거래에는 개인키를 비롯하여 어떠한 민감한 정보가 포함되어 있지 않기 때문에 네트워크 상에서 공개되어도 무방하다. 2. 거래의 전송 비트코인 기준 거래의 크기는 300~400바이트 크기이며, 노드 중에 하나에 도달..
Diffie-Hellman key exchange with elliptic curves Alice와 Bob이 공유 비밀값을 구하기 위한 기본적인 Diffie-Hellman 교환은 다음의 절차를 따른다. 1. Alice와 Bob은 각자 자신의 기본키와 공개키인 (ka, Ka), (kb, Kb)를 생성한다. 서로 공개키를 교환하고, 개인키는 보관한다. 2. 다음의 내용은 명확하다. S = kaKb = kakbG = kbkaG = kbKa Alice는 개별적으로 S = kaKb를 연산할 수 있고, Bob은 S = kbKa를 연산할 수 있다. 이는 그들이 공유 비밀값으로서 이 S를 사용할 수 있다. 예를 들어 만일 Alice가 Bob에게 m이라는 메시지를 보내야하는 경우, Alice는 공유 비밀값 S를 h = H(S)와 같이 해싱한다. 그리고 x = m + h를 계산한 뒤, x를 Bob에게 전달한..
HD Wallet: Key Derivation 키를 유도하는 방식은 크게 3가지로 나누어진다. 첫번째는 부모 개인키에서 자식 개인키를 유도하는 경우, 두번째는 부모 공개키에서 자식 공개키를 유도하는 경우, 세번째는 부모 개인키에서 자식 공개키를 유도하는 경우이다. 부모 개인키에서 자식 개인키 유도 부모 개인키에서 유도할 때는 강화된 방식으로 유도하는 경우 부모의 개인키를 직접적으로 해시 함수의 입력값으로 사용하지만 일반 유도 방식에서는 부모의 개인키를 공개키로 전환하여 공개키를 입력 값으로 하여 자식키를 유도한다. 키를 유도할 때는 부모의 확장된 키(부모키, 부모의 체인 코드), 인덱스가 사용된다. CKDpriv((kpar, cpar), i) → (ki, ci) (kpar: 부모의 개인키, cpar: 부모의 체인 코드, i: 인덱스, ki: i번째 ..
암호학 - 마스터링 이더리움 개요 암호학은 수학의 한 분야로 이더리움의 기반 기술 암호화는 비밀 작성에 그치는 것이 아니며, 비밀을 드러내지 않고 지식을 증명(디지털 서명)하거나, 데이터의 진위성(해시를 통한 디지털 지문)을 증명할 수 있음이더리움 플랫폼과 노드 간 통신은 암호화되어 있지 않아 모두가 들여다 볼 수 있어 합의에 도달할 수 있음 향후에는 영 지식 증명과 동형 암호화 같은 고급 암호화 도구에 대한 도입 가능성이 있음 이번장에서는 현재 이더리움 암호 방식인 공개키 암호화(Public Key Cryptography, PKC)를 소개함 본론 키와 주소 이더리움의 두가지 계정 유형: 외부 소유 계정(Externally Owned Account, EOA)과 컨트랙트 계정(Contract) 디지털 개인키(private key), ..
What is Tendermint 이 문서는 Tendermint 오피셜 문서 중 What is Tendermint를 번역한 것으로 오번역되었거나 표현이 불분명한 부분에 대한 댓글은 언제든 환영합니다. 원문은 아래의 링크에서 확인하실 수 있습니다. What is Tendermint https://docs.tendermint.com/master/introduction/what-is-tendermint.html What is Tendermint | Tendermint Core What is Tendermint Tendermint is software for securely and consistently replicating an application on many machines. By securely, we mean that Tendermi..
Elemental Battles로 시작하는 EOS dApp 개발 (3) LESSON 2. Storing State and Login https://battles.eos.io/tutorial/lesson2/chapter1 LESSON1에서는 EOSIO에서 작동하는 스마트 컨트랙트와 실제 게임을 플레이하는 클라이언트 프로그램인 프론트 엔드 프로젝트를 구성해보았습니다. LESSON2에서는 이에 이어서 데이터 저장을 위한 멀티 인덱스 테이블을 생성해보고 테이블의 데이터를 변경하기 위한 액션이 어떻게 작성되는지를 살펴볼 것입니다. 또한 유저들의 게임 플레이를 위한 프론트 엔드 프로그램을 React와 Redux를 이용하여 작성해보겠습니다. 게임 플레이를 위해서 가장 먼저 해야할 작업은 바로 로그인을 하는 것입니다. 그렇기 때문에 로그인을 하기 위한 페이지를 프론트 엔드에 구현해보겠습니..
Elemental Battles로 시작하는 EOS dApp 개발 (2) LESSON 1. Smart Contract and Frontend Setup https://battles.eos.io/tutorial/lesson1/chapter1 LESSON1부터 본격적으로 개발이 시작됩니다. Elemental Battles는 앞서 언급한 것 같이 C++로 작성되는 스마트 컨트랙트와 Javascript 라이브러리인 React를 이용한 프론트 엔드 프로그램으로 구성되어 있습니다. 프론트 엔드 프로그램에는 state를 효율적으로 관리하기 위해 Redux가 적용되어 있습니다. 스마트 컨트랙트 세팅 Elemental Battles의 스마트 컨트랙트는 기본적으로 3개 파일로 구성됩니다. 첫번째는 cardgame.hpp입니다. cardgame.hpp는 스마트 컨트랙트를 정의하기 위한 헤더 파일..