분류 전체보기
-
이더리움 - 계정(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 티켓을 예매하기 위해 시간을 선택하면 그것을 누가 언제 몇시 몇분에 탑승을 위한 계약 내용에 날짜와 같이 저장되는 것이 타임스탬프의 한 종류라고 봐도 됩니다. 타임스탬프의 역할은 어떤 이슈가 일어난 날짜와 시간을 기록하여 사실 존재를 증명하는 전후 관계를 보장하는 것입니다...
-
51% 공격(Attack)이란?블록체인 2018. 7. 17. 22:03
51% 공격(Attack)이란?51% 공격은 작업증명 (PoW) 알고리즘에서 나오는 용어입니다. 비트코인은 작업증명(PoW)을 사용해서 연산을 통해 일종의 문제를 가장 빨리 푼 노드에게 블록을 추가시킬수 있는 권한을 줍니다. 이때 나머지 노드들은 해당 블록이 유효한 거래인지 승인을 하게 됩니다. 절반 이상의 승인을 거치면 유효한 거래로 확인하고 블록을 블록체인에 연결, 모든 노드에게 전파하게 됩니다. 그런데 블록체인 전체 연산량의 50%이상을 보유한 채굴자는 압도적인 채굴량을 바탕으로 전체 네트워크를 마음대로 결정할 수 있게되며 51%공격을 감행할 수 있습니다. 예A: 비트코인 네트워크 전체 해시 파워 중 51% 이상을 가진 채굴자 및 거래자B: 일반 거래자A가 B에게 악의적인 생각을 가지고 BTC를 판..
-
엔디안(Endian)이란?공부 2018. 7. 15. 01:04
엔디안이란?엔디안(Endian)은 컴퓨터의 메모리와 같은 1차원의 공간에 여러 개의 연속된 대상을 배열하는 방법을 뜻하며, 바이트를 배열하는 방법을 특히 바이트 순서(Byte order)라 합니다. 엔디안은 보통 큰 단위가 앞에 나오는 빅 엔디안(Big-endian)과 작은 단위가 앞에 나오는 리틀 엔디안(Little-endian)으로 나눌 수 있으며, 두 경우에 속하지 않거나 둘을 모두 지원하는 것을 미들 엔디안(Middle-endian)이라 부르기도 합니다. 사람이 숫자를 쓰는 방법과 같이 큰 단위의 바이트가 앞에 오는 방식이 빅 엔디안입니다. 빅 엔디안리틀 엔디안0x123412 3434 120x1a3ecd1a 3e cdcd 3e 1a16진수는 2개가 1바이트이므로 묶어서 계산합니다.장단점빅 엔디안은..
-
[Django] ORM으로 Order by 에 null first, last 기능 구현언어/파이썬 & 장고 2018. 7. 14. 23:30
Postgresql에서는 order by 부분에 null값이 가장 먼저 나올지, 나중에 나올지 설정할 수 있습니다. order by의 예는 아래와 같습니다.SELECT name FROM test ORDER BY name DESC NULLS FIRST; 해당 쿼리는 name 컬럼에 null값인 행을 가장 앞으로 정렬하게되는 쿼리입니다. 아래는 위 쿼리를 Django ORM으로 똑같이 표현한 예입니다.from django.db.models import F Test.objects.order_by(F('name').desc(nulls_first=True))null값을 가장 뒤로 보내고 싶으면 nulls_first 부분을 nulls_last로 변경해주면 됩니다.
-
[Django] ORM으로 Aggregation 함수와 Group by 사용언어/파이썬 & 장고 2018. 7. 14. 23:29
쿼리에서 aggregation함수(count(), max(), first() 등등) 와 필요한 컬럼을 출력하는 방법은 아래와 같습니다.SELECT name AS changed_name, count(count) FROM test GROUP BY name; 위와 같은 쿼리는 아래와 같이 장고 ORM으로 표현할 수 있습니다.queryset = Test.objects.values('name').annotate( max_count=Count('count'), changed_name=F('name') ).values('max_count', 'changed_name') aggregation 함수를 사용하기 전, group by를 진행할 필드를 지정해 줍니다.queryset = Test.objects.values('n..