전체 글
-
이더리움 - 상태변환단계 및 코드실행 설명블록체인 2018. 7. 31. 23:15
상태변환함수 이더리움을 송금했다고 했을 때 계정의 상태가 어떻게 변하는지 아래에서 설명합니다.상태변환 단계트랜잭션이 형식에 제대로 맞는지(즉, 올바른 개수의 값을 가지고 있는지) 체크하고, 서명이 유효한지, nonce가 발신처 계정의 nonce와 일치하는지를 체크. 그렇지 않다면 오류를 반환gaslimit * gasprice 로 트랜잭션 수수료를 계산하고, 서명으로부터 발신처 주소를 결정발신처 계정 잔고에서 위에서 구한 트랜잭션 수수료를 빼고 발신자 nonce를 증가. 발신처 잔고가 충분하지 않으면 오류를 반환GAS = gaslimit 으로 초기화 한 후, 트랜잭션에서 사용된 바이트에 대한 값을 지불하기 위해 바이트당 gas의 특정 양을 차감발신처 계정에서 수신처 계정으로 트랜잭션 값을 보냄. 수신처 계..
-
Tree공부/자료구조 2018. 7. 31. 22:04
Tree 구조 트리는 위와 같은 구조를 갖고 있습니다.용어node: 트리에서 데이터를 의미branch(link): 노드와 노드를 연결root node: 최상위 노드interior node: 자기자신 아래에 연결된 노드가 있는 형태leaf node: 자기자신 아래에 노드가 더이상 연결되어있지 않은 형태parent: child 노드들이 연결되어 있는 상위 노드child: 부모노드 아래에 연결되어 있는 노드sibling: 부모노드 아래에 존재하며 동일한 레벨에 있는 노드degree (노드의 degree): 자기자신 아래에 연결된 노드가 몇개가 있는지depth: 루트에서 어떤 노드에 도달하기까지 거쳐야 하는 branch(link)의 수level: 트리의 특정 depth를 가지는 노드의 집합height: 루트노드..
-
Stack, Queue, Circular Queue공부/자료구조 2018. 7. 30. 23:02
StackLIFO(Last-In-First-Out) - 가장 마지막에 들어온 데이터가 가장 먼저 나감 stack에서 데이터의 삽입, 삭제를 push와 pop으로 부름stack을 구현하기 위해선, 초기에 pop이 되지 않도록 array가 비어 있는지 확인하는 함수 (isEmpty)가 필요. 타입선언 언어라면 어레이의 사이즈를 정하기 때문에 어레이에 데이터가 가득 찼는지 확인하는 함수 (isFull)이 필요.QueueFIFO(First-In-First-Out) - 가장 먼저 들어온 데이터가 가장 먼저 나감 위 그림에서 f(front)는 데이터의 시작위치를 가리키고 r(rear)은 현재 입력된 데이터의 위치를 가리킴 stack과 유사하게 어레이가 비어있는지 확인하는 함수 (isEmpty)와 가득 찼는지 확인하..
-
ADT, 복잡도(시간복잡도, 공간복잡도), 빅오 분석법공부/자료구조 2018. 7. 29. 23:38
추상화(Abstraction) - 중요한 속성만 포함하는 개체.즉 가장 중요한 것에 초점을 두고 그 이외의 부가적인 것은 무시함.ADT - Abstract Data Type한 개의 특별한 데이터 타입의 데이터 표현과 그 타입의 연산을 제공하는 부 프로그램만을 포함하는 클로저이다. 한마디로 사용자에게는 연산에 대한 형식과 제약조건만 알려주고 실제로 어떻게 처리되는지는 표현하지 않는 기능타입 객체의 표현은 숨겨지고 타입의 정의에서 연산 제공타입 선언과 연산들은 단일 구문 단위에 포함자바의 클래스 타입이라 볼 수 있음 ADT에서 중요한 것은 어떻게 구현되는지는 몰라도 무엇을 하는지 알면 사용자는 만들 수 있다는 점.복잡도 (Complexity)프로그램의 실행이 얼마나 오래 걸리는가 (= time complex..
-
이더리움 - 계정(Account), 트랜잭션(Transaction), 메시지 (Message)블록체인 2018. 7. 29. 02:15
이더리움 계정 (Account)이더리움 계정에는 20바이트의 주소와 정보를 직접 전달해주는 상태변환을 가지고 있으며 다음 네 개의 필드가 존재합니다.nonce: 각 트랜잭션이 오직 한번만 처리되게 하는 카운터value: 계정의 현재 ether 잔고contract code: 계정의 컨트랙트코드 (값이 없을 수 있음)storage: 계정의 저장공간 (초기설정에는 비어있음)이더리움의 계정에는 2가지 종류가 있습니다. 외부 소유 계정(External Owned Account - EOA)과 계약 계정(Contract Account - CA)입니다. EOA는 누군가가 소유하고 있는 지갑과 같은 계정이라고 생각하시면 됩니다. CA는 배포된 코드와 저장공간이 추가로 존재하며 스마트 컨트랙트 역할을 할 수 있습니다. 두..
-
[PostgreSQL] 조회조건 그대로 정렬하기 (Custom order by)DB/PostgreSQL 2018. 7. 28. 23:10
정렬을 사용자가 원하는대로 하길 원하거나, WHERE절에 건 조건 그대로 정렬이 되기를 원할 때, 아래와 같은 방법으로 처리할 수 있습니다. 1. array_position 사용하기PostgreSQL의 버전이 9.5 이상일 경우 array_position 함수를 사용하여 구현할 수 있습니다. SELECT * FROM test WHERE pk IN (1, 3, 4, 6, 2) ORDER BY ARRAY_POSITION(ARRAY[1, 3, 4, 6, 2], pk)위 구문을 사용할 때 주의할 점은 array에 들어가는 데이터 타입과 조회를 하고자 하는 컬럼의 타입이 동일해야 합니다.ARRAY_POSITION(ARRAY[1::bigint, 3::bigint], 1::int) - 에러 array_position..
-
이더리움이란?블록체인 2018. 7. 28. 16:57
비트코인의 한계튜링불완전성: 비트코인 스크립트 언어로 할 수 있는 작업이 많긴 하지만, 모든 경우의 프로그래밍을 다 지원하지는 않습니다. 거래 증명을 할 때 무한 순환에 빠지는 것을 막기 위해 while이나 for와 같은 순환(loop) 명령 카테고리가 빠져 있습니다. 이론적으로는 튜링불완전성은 개발자가 극복할 수 있지만 (if 문과 같은 반복문으로) 코드상 공간낭비와 개발자의 시간낭비, 실수 등 아주 비효율적입니다.가치무지하다: UTXO 스크립트만으로는 거래의 인출 액수를 세밀하게 통제할 방법이 없습니다. 그 이유는 http://brownbears.tistory.com/382?category=281929 에서 자세히 확인할 수 있습니다.다양한 상태를 표현할 수 없다: UTXO가 표현할 수 있는 상태는 ..
-
비트코인 - UTXO란?블록체인 2018. 7. 24. 22:07
UTXO란 Unspent Transaction Output 의 약자로, 아직 쓰지않은 잔액 이라는 의미입니다. 비트코인 네트워크에서는 잔액이라는 개념은 애초에 존재하지 않고, 트랜잭션에 의한 결과물들의 합을 잔액이라는 개념으로 사용하는데 이를 UTXO 데이터로 대체합니다. 각 지갑의 UTXO들은 해당 지갑 주인(소유주)에 대해 공개키 암호로 잠겨있습니다.UTXO 거래 예시 아래는 UTXO를 설명하기 위한 예시입니다. A, B가 F에게 각 1BTC, 2BTC를 송금해주고 C, D, E가 G에게 3BTC, 4BTC, 10BTC를 송금을 하면 F와 G는 각 UTXO가 2개, 3개가 되어 총 UTXO가 5개 생성됩니다.다음 아래는 G가 H에게 9BTC를 보내려고 하는 그림입니다. 먼저 G가 가진 UTXO 중 9..
-
양자컴퓨터란?블록체인 2018. 7. 23. 22:11
양자컴퓨터란?양자컴퓨터는 연산 체계 자체가 기존의 컴퓨터와 전혀 다른 방식으로 작동하는 컴퓨터입니다. 기존의 방식은 비트로 0, 1로만 표현되며 비트는 둘 중 하나만 가질 수 있습니다. 반면 양자컴퓨터은 0, 1, 그리고 0과 1의 조합을 동시에 나타내고 저장할 수 있는 양자 비트(quantum bits), -이를 줄여서 큐비트(qubits)라고도 말함- 를 이용하여 데이터를 처리합니다. 이러한 두 상태의 중첩이 가능해짐에 따라 양자 컴퓨터는 바이너리 비트를 이용하여 모든 정보를 0 아니면 1로만 저장할 수 있는 전통적인 컴퓨터보다 훨씬 더 데이터 처리의 속도를 가속화 할 수 있습니다. 즉, 양자컴퓨터는 양자 컴퓨터는 모든 가능한 상태가 중첩되어 얽혀있는 상태 -이를 양자 결집 상태(quantum-coh..
-
블록체인 타임스탬프블록체인 2018. 7. 18. 23:36
블록체인에 해당하는 개념은 “타임 스탬프 서버”라는 부분에 설명되어 있습니다. 이로 인해 블록체인과 타임스탬프는 상당히 큰 연관성이 있어 보인다는 것을 알 수 있습니다.그렇다면, “타임 스탬프” 개념에 대해서 다시 생각해 봅시다. 일반적인 타임스탬프(Timestamp)라고 하면 “2018-04-05 13:00:00”등의 형식으로 표현되는 날짜와 시간이 적힌 문자열이라고 생각하게 됩니다. 실제 생활에서는 독자가 여행을 가기 위해 KTX 티켓을 예매하기 위해 시간을 선택하면 그것을 누가 언제 몇시 몇분에 탑승을 위한 계약 내용에 날짜와 같이 저장되는 것이 타임스탬프의 한 종류라고 봐도 됩니다. 타임스탬프의 역할은 어떤 이슈가 일어난 날짜와 시간을 기록하여 사실 존재를 증명하는 전후 관계를 보장하는 것입니다...