안녕하세요~
저번 글에 이어서 알파벳 P - 마지막 까지의 내용입니다.
출처 : https://github.com/oleganza/bitcoin-papers/blob/master/BitcoinGlossary.md
** 원작자에 의해 배포 및 수정 가능
===================================================================
Paper Wallet
콜드 스토리지의 형태로, 비트코인 주소에 대한 개인키가 종이에 적혀있는 형태. (암호화 되기도 하며, 암호화 되지 않기도 한다.) 그리고 일단 만들어지면 모든 키의 흔적들은 삭제된다. Bitcoin을 다시 얻으려면, 지갑 프로그램에 키를 반드시 입력해서, 트랜젝션을 서명할 수 있도록 해야 한다. Casascius Coins 참고.
Proof-of-Work (PoW)
계산하기 어려운 과정을 통해서, 상당한 양의 컴퓨터의 에너지를 이용하여 만들어내는 것. Bitcoin에서 block header에 대한 hash이다. 해쉬가 현재의 target 보다 낮을 때에만 유효한 것으로 간주되며, (어느 정도의 zero bits로부터 시작됨) 각각의 블록은 이전의 블록을 참조하므로, 직전의 proof-of-work 블록과 연결되어 블록체인을 형성한다.
proof-of-work가 필수적인 것은 아니지만, 대체적인 트랜젝션 기록을 동일한 축적된 작업으로 하는 것이 경제적으로 불가능하도록 만드는 과정이기 때문에 중요하다. 각 클라이언트는 개별적으로 유효한 블록 중에서 가장 어려운 블록체인이 무엇인지 선정하여 “true” history of transaction으로 정할 수 있다. (블록을 제공하는 어떠한 곳도 믿을 필요가 없다.)
굉장히 많은 수준의 계산력을 보유하는 것은 클라이언트들에 의한 규칙에 어긋나지 않는다. 잘못 만들어진 블록, 혹은 유효하지 않은 트랜젝션을 포함한 블록들은 얼마나 어렵게 만들었는지에 무관하게 reject된다.
Private Key (Privkey)
256비트의 숫자로, ECDSA 알고리즘에서 이용되어, 특정 금액의 bitcoin의 소유주를 증명하기 위한 트랜젝션 서명을 만드는 데에 활용된다. 또 임의의 타원 곡선 계산 과정에서도 사용된다. 개인키는 지갑 프로그램에 저장되며, 일반적으로 pass phrase로 암호화된다. 개인키들은 완전히 랜덤일 수도(Key Pool 참고) 있으며, 단일의 비밀스러운 숫자로부터 만들어질 수도(“seed”) 있다. Deterministic Wallet 참고.
공개키(Public Key (Pubkey))
개인키에 의하여 이미 정해진 “generator”지점을 곱합으로써 발생하는, 타원곡선 secp256k1의 한 점이다. 일반적으로 256비트 숫자의 쌍으로 이루어지지만(“압축되지 않은 공개 키”), 1개의 256비트 숫자로 압축될 수도 있다. (CPU가 압축을 푸는 데에는 약간의 시간이 소요된다.) 공개 키의 특별한 해쉬는 address라고 불린다. 일반적인 Bitcoin 트랜젝션의 output scripts에서는 공개키와 주소를 포함하고, input scripts에서는 서명을 포함한다.
Relaying Transactions
연결된 Bicoin 노드는 새로운 트랜젝션을 서로 최선의 방식으로 연결시킨다. 일부 트랜젝션은 모든 node에 대해서 연결되지 않을 수도 있다. 예를 들어 non-standard 트랜젝션, 최소한의 fee가 없는 트랜젝션 등이다. Bitcoin 메시지 프로토콜 외에도 트랜젝션을 보낼 수 있는 방법이 존재한다. 직접적으로 채굴자에게 전송할 수도 있으며, 스스로 채굴할 수도 있다. 또는 누군가에게 전송하고, 릴레이 및 채굴을 요청할 수도 있다.
Reorg, Reorganization
노드 내부의 이벤트로, main chain의 1개 혹은 그 이상의 블록들이 orphaned될 때 발생한다. 일반적으로 새롭게 받아들여진 블록들은 기존의 main chain을 연장한다. 때때로(1주에 4-6번 가량) 일부 블록들은 동일한 height를 나타내며, 거의 동시에 단기간에 만들어지며, 일부 노드는 해당 블록을 main chain 의 일부로 볼 수 있지만 곧 더 난이도가 높은 블로긍로 교체될 것이다. orphaned 블록의 각각의 트랜젝션은 (만약 이미 main chian block에 속해 있다면) 유효하지 않게 되거나, 컨펌되지 않은 상태로 변경되며 mempool로 이동한다. 51퍼센트 공격이라는 큰 버그 상황에서, reorganizaion은 1개 이상의 블록을 reorganize하는 것을 포함할 수 있다.
Reward
채굴자가 새로운 블록에서 자신의 것이라고 주장할 수 있는 생성된 Bitcoin의 양. 블록의 최초 트랜젝션을 통해 채굴자는 현재 허가된 리워드를 자신의 것이라고 주장할 수 있으며, 그 블록에서의 모든 transaction fee를 주장할 수 있다. reward는 210,000블록 마다 반으로 감소한다. 약 매 4년마다 감소한다. 2014. 7. 27.에 리워드는 25BTC(최초의 반감기는 2012. 12.)였다. 보안상의 이유로, 100 개의 블록이 혀재의 블록 위에 쌓이기 이전에 리워드는 소비될 수 없다.
Satoshi
Bitcoin을 만든 제작자 Satoshi Nakamoto의 이름이며, 트랜젝션에서 사용되는 가장 작은 단위의 이름. 1 bitcoin(BTC)는 1억 satoshi에 해당한다.
Satoshi Nakamoto
최초로 Bitcoin을 개발한 사람의 가명. 만든 사람이 누구이고 얼마나 많은 사람이 만들었는지, 국적, 나이에 대해서는 수많은 추측이 존재한다. 하지만 아직까지 그 사람이 누구인지 단정지을 만한 결정적인 증거는 없었다.
Script
단순한 turing-불완전 프로그래밍 언어로써, 트랜젝션 input과 output에 사용된다. scripts는 Forth-like stack machine에 의하여 해석된다. 각 오퍼레이션에서 stack의 데이터를 조작한다. 대부분의 script는 표준 패턴을 따르며, transaction input에 포함된 전자서명을 이전의 transaction output의 공개키와 비교하여 확인한다. 두 개의 서명들과 공개키들은 script를 활용하여 공급된다. script는 복잡한 조건을 포함하는 경우도 있으나, 전송되는 금액을 바꾸기는 불가능하다. 금액은 별도의 Transaction output 필드에 저장된다.
scriptSig
트랜젝션 input script를 위한 bitcoind의 Original name. 일반적으로 Input script에서는 Bitcoin이 이전의 트랜젝션에서 송신되었다는 것을 증명하기 위하여 서명을 담고 있다.
scriptPubKey
트랜젝션 Output script를 위한 Original name. 일반적으로 Output script에서는 공개키(또는 해쉬, Address 참고)를 담고 있으며, 상응하는 개인키의 소유주만이 Output된 Bitcoin을 얻을 수 있다.
Sequence
트랜젝션 input에서 32비트 미서명 정수로, 오래된 버전의 트랜젝션을 새로운 버전으로 바꾸는 데에 사용된다. locktime이 0이 아닐 경우에만 사용된다. sequence number가 0xFFFFFFFF이 아닌 다음에서야 트랜젝션은 유효해진다. 기본값으로, sequence 는 0xFFFFFFFF이다.
서명(Signature)
공개키를 가진 특정인에 의하여 특정한 데이터가 인정받았음을 입증하는 일련의 Byte. Bitcoin은 ECDSA를 트랜젝션 서명에 사용한다. Bitcoin의 금액은 트랜젝션의 체인을 통하여 전송된다. 모든 트랜젝션은 이전의 트랜젝션에서 결정된 공개키에 상응하는 서명을 반드시 제공해야 한다. 비밀 개인키를 갖고 있는 정당한 소유주만이 상응하는 공개키에 대해서 Bitcoin을 지불할 수 있다.
Simplified Payment Verification (SPV)
전체 블록체인을 저장할 필요 없이 트랜젝션의 유효성을 검사하는 방법으로, 외부 서비스도 필요하지 않다. merkle tree에서 뿌리 방향으로 향하는 모든 남매 해쉬들과 부모 해쉬는 반드시 존재해야 한다. SPV 클라이언트는 가장 난이도가 높은 block header의 chain을 신뢰하며, 만약 트랜젝션이 특정 block header에 속할 경우 유효성이 확인된다. SPV가 모든 트랜젝션의 유효성을 확인할 수 있는 것은 아니다. 51퍼센트의 공격은 double spend를 (full node처럼) 발생시킬 수 있으나, 또한 어디에서도 만들어지지 않은 완전히 비유효한 지불을 만들기도 한다. 그러나 이러한 종류의 공격은 굉장히 비용이 많이 들며, 이득을 보기 어려울 것이다. Bitcoinj 라이브러리에는 SPV 기능이적용되어 있다.
Secret key
암호 지갑에서 사용되는 개인키, 암호키로써 Bitcoin 프로토콜이 암호화를 요구하지는 않는다. 따라서 Screet Key는 일반적인 태렌젝션을 사용하기 위해 트랜젝션에 서명하는 데에 사용되며 사실 일반적으로 priavte key를 의미한다.
Soft Fork
hard fork(예 : 채굴 수수료 정책 변경)가 아닌 소프트웨어 정책의 중요한 변화. Hard fork / Fork 참조
Spam
부정확한 p2p 메시지(유효하지 않은 트랜젝션의 전송 등)로, DoS 공격으로 간주될 수 있다. 유효한 트랜젝션이지만 굉장히 작은 금액을 보내거나, 낮은 mining fee를 나타내는 것을 일부 사람들은 Dust라고 부른다. 프로토콜 자체는 어떠한 트랜젝션이 릴레이 및 채굴하기에 가치있는지 결정할 수 없으며, 모든 node들이 결정할 수 있다. 블록체인의 유효한 트랜젝션인 경우, 블록에 남아있으려면 반드시 node에 의하여 받아들여져야 한다. 따라서 트랜젝션에 대한 검열은 컨펌 딜레이가 늘어나는 상황만 발생시킨다. 수신자들은 특정 주소를 blacklist 처리(일부 주소로부터의 지불을 받기를 거부함) 할 수 있지만, mixing 기술을 사용하는 것이 편리하다.
Spent Output
트랜젝션 output은, 또 다른 유효한 트렌젝션이 이 output을 참조할 때 단지 1번만 지불될 수 있다. 또 다른 트랜젝션이 동일한 output을 전송할 때, 이미 최초의 트랜젝션을 관찰한 node에게 거부당할 것이다. Proof-of-work 방식의 블록체인 시스템에서, 모든 노드는 최초의 트랜젝션에 대해서 동의하는 것이 가능하다. 모든 output이 지불된 경우에, 전체 트랜젝션은 지불된 것으로 간주된다.
Split
블록체인이 나뉘는 것. Fork. 참고
SPV
Simplified Payment Verification 참고
Standard Transaction
일부 트랜젝션은 standard로 간주되며, 대부분의 node로부터 채굴 및 릴레이된다. 좀 더 복잡한 트랜젝션은 버그를 유발하거나, 네트워크 DoS 공격에 취약하며, 따라서 그러한 것은 non-standard로 간주되며, 대부분의 node로부터 채굴 및 릴레이되지 않는다. standard와 non-standard 모두 일단 블록체인에 포함되기만 하면 유효하며, 모든 node에 의하여 인식될 것이다. Standard 트랜젝션이 되려면 1)공개키를 보낸다. 2) 주소로 전송한다. 3) P2Sh 주소로 전송한다. 4) N이 3 또는 더 적을 경우 M-of-N 멀티 서명 트랜젝션으로 전송한다.
Target
256 비트의 숫자로, 유효하기 위한 최대값으로 block header보다 작아야 한다. target이 낮을수록, 유효한 해쉬를 찾기 위한 난이도는 상승한다. 최대의(가장 쉬운) target은 0x00000000FFFF0000000000000000000000000000000000000000000000000000이다. 난이도와 target은 2016블럭마다 조정되며(약 2주), 이는 clock close 시간을 매 10분으로 맞추기 위한 것이다.
Testnet
Bitcoin 네트워크를 테스트하는 데에 사용되는 파라미터의 집합. Testnet은 mainnet과 유사하지만, 다른 제네시스 블록을 보유한다.(몇 번 리셋 되었으며, 최신의 testnet은 testnet3이다.) Testnet에서는 약간 다른 주소 포맷을 사용하여 main Bitcoin 주소와 차이점을 갖게 되며, 모든 node는 non-standard 트랜젝션을 릴레이하고 채굴한다.
Testnet3
또 다른 genesis block을 가지고 있는 testnet의 최신버전
Timestamp
UNIX timestamp는 GMT 1970. 1. 1.에서 출발하여 시간을 초단위로 표한한 표준적인 표현방식. 일반적으로 32비트 signed integer에 저장된다.
Transaction
비트코인이 한 주인에게서 다른 주인으로 어떻게 이동하였는지를 나타내는 이진법의 숫자 덩어리. 트랜젝션은 blockchain에 기록된다. 모든 트랜젝션(Coinbase 트랜젝션을 제외)은 한 개 이상의 이전의 트랜젝션을 참조하며(inputs) 이러한 비트코인을 어떻게 소비할 지에 대한 더 많은 규칙들(outputs). Transaction Input과 Transaction Output 참고.
Transaction Fee
“채굴자 수수료”로 알려져있으며, 트랜젝션을 만든 사람이 채굴자(block 속에 트래젝션을 저장함)에게 지불하는 비용이다. fee는 output 금액의 총 합과 input 금애그이 총 합의 차이로 표현된다. 전통적인 지불 시스템과 다르게 채굴자들은 명시적으로 fee를 요구하지 않으며, 대부분의 채굴자들은 자유로운 트랜젝션을 허용한다. 모든 채굴자들은 fee에 대해 서로 경쟁하고 있으며, 모든 트랜젝션은 block 속에서 자리를 얻기 위해 경젱한다. 대부분의 클라이언트에 저자오딘 soft rules은 채굴 및 릴레이에 대하여 kilobyte 당 최소 fee를 규정하고 있다.(DoS 공격과 스팸 방지). 일반적으로 fee는 트랜젝션의 우선순위에 영향을 준다. 2014. 6. 27. 기준으로, 블록당 평균 fee는 0.1BTC 이하였다. Reward 참조
Transaction Input
트랜젝션의 일부로, 직전의 트랜젝션 output을 참조하며, 그 output에 대한 소유권을 증명할 수 있는 script를 포함한다. 그 스크립트는 일반적으로 서명을 포함하며 따라서 scriptSig라고 불린다. Input은 이전의 Output을 완전히 지불해버린다. 따라서 만약 이전의 output만큼만 지불해야 하는 상황이라면, 해당 거래에서 여분의 change output을 통해서 남는 부분을 소유주에게 되돌려주어야 한다. (동일한 / 다른 주소 하에서). Coinbase 트랜젝션은 하나의 input만을 다른 트랜젝션이나 스크립트를 참조하지 않는다.
Transaction Output
전송될 금액, 스크립트(추가적인 지불 가능)가 포함된 Output이다. 그 스크립트는 일반적으로 공개키(주소, 공개키의 해쉬)를 포함하며, 서명을 확인하는 opcode를 담고 있다. 상응하는 개인키의 주인만이 누군가에게 돈을 좀 더 지불하는 또 다른 트랜젝션을 만들어낼 수 있다. 모든 트랜젝션에서, Output 금액의 총 합은 모든 Input 금액과 같거나 작아야 한다. Change 참고.
Tx
Transaction. 참고.
Txin
Transaction Input. 참고.
Txout
Transaction Output 참고.
Unconfirmed Transaction
어떠한 블록에도 속해있지 않은 트랜젝션. 또한 “0-컨펌”트랜잭션이라고 불린다. 컨펌되지 않은 트랜젝션들은 node에 의해 릴레이되며, mempools 내부에서 존재한다. 컨펌되지 않은 트랜젝션은 node가 버리거나, blcokchian에서 찾거나, 스스로 blockchain에 포함되기 전까지 mempool에 존재한다. (채굴자가 아닌 경우.) Confirmaton Number 참조.
UTXO Set
미지불 트랜젝션 output을 모아 놓은 것. 일반적으로 아직 지불되지 않은 transaction output의 계속 증가하는 index를 최적화하는 논의에서 많이 등장하는 용어이다. 효율적으로 새롭게 만들어진 트랜젝션을 유효화하는 데에 중요한 역할을 한다. 새로운 트랜젝션의 rate가 일정하게 유지되더라도, 미지불 output을 위치하고, 확인하는 데에 드는 시간은 상승한다.
기술적인 해결책으로, 효율적인 indexing 알고리즘, 고성능의 하드웨어 등이다. BitcoinQT는 예를 들어 사용자의 키에 일치하는 output의 인덱스만을 보유하며, 다른 거래를 유효화할 때에 전체 블록체인을 스캔한다. 어떤 웹 지갑 서비스의 개발자가 말하길, UTXO의 전체 인덱스를 유지하고 있으며, 사이즈는 100GB정도이다. 반면 blockchain의 사이즈는 단지 8GB 정도이다.
일부 사람들은 사회적 방식으로 해결하려 한다. 예를 들어서 dust(채굴, 릴레이 하는 데에 요구되는 transaction fee보다 적은 output을 포함하는 트랜젝션) 트랜잭션을 채굴하거나 릴레이하는 것을 거부하는 것이다.
VarInt
Bitcoin에 적용될 경우 다른 의미를 나타내므로 헷갈릴 수 있다. SompactSize 참고.
Wallet
트랜젝션 서명에 대해서 개인키의 보관을 도와주는 프로그램이나 서비스. 지갑에서는 Bitcoin을 직접적으로 보관하지 않고, 블록체인에 기록된다. “Bitcoin을 저장하는 것”은 일반적으로 키를 저장하는 것이다.
Web Wallet
지갑의 기능을 제공하는 서비스. 비트코인을 보관, 전송, 수신받을 수 있다. 지갑 공급자를 신뢰하는 경우에만, Bitcoin을 안전하게 저장하고, 필요한 시점에 인출할 수 있다. 웹 지갑을 만들기는 쉽지만, 해킹이나 장부 조작을 당할 수도 있다. 가장 안전하고, 유명한 웹 지갑은 Blockchain.info이다. 온라인 거래소들도 지갑 기능을 제공하므로, 또한 웹 지갑으로 간주될 수 있다. 웹 지갑에 큰 단위의 비트코인을 보관하는 것을 추천하지 않는다.
XBT
1Bitcoin에 대한 비공식 화폐 코드(=100,000,000 사토시). 일부 사람들은 BTC와의 혼란을 막기 위하여 0.01Bitcoin으로 사용하였다. There were rumors that Bloomberg tests XBT as a ticker for 1 Bitcoin, but currently there is only ticker XBTFUND for SecondMarket's Bitcoin Investment Trust. See also BTC.
0-Confirmation (Zero-Confirmation)
Unconfirmed Transaction과 Confirmation Number 참고.
51% Attack
50%> 공격, Double Spend 공격과 같은 의미이다. 공격자가 지불을 한 뒤에, 상인이 컨펌의 일부를 받아들이고 서비스를 제공한다. 그리고 나서 공격자는 트랜젝션 이전의 블록으로부터 시작하는, 평행하는 블록을 채굴하기 시작한다. 이러한 평행하는 블록체인은 그 이후 일부 다른 주소에서 동일한 output을 소비하는 트랜젝션들을 포함한다. 평행하는 체인의 난이도가 더 올라가면, 모든 노드에 의하여 main chain으로 간주되며, 원래의 트랜젝션은 유효하지 않게 된다. 50퍼센트 이상의 Hashrate를 보유하게 됨으로써, 어떠한 길이의 체인이든 탈취할 수 있다. 엄격하게 말하면 “50퍼센트 초과”이며, 51퍼센트는 아니다. 또 심지어 40퍼센트의 Hashrate만 보유해도 double spend 공격을 할 수 있지만, 성공할 확률이 100퍼센트는 아니며, 상인이 요구하는 컨펌의 숫자가 늘어남에 따라 해킹 성공확률은 엄청나게 감소한다.
이러한 공격은 이론적이라고 간주되는데, 왜냐하면 50퍼센트 이상의 hashrate를 보유하는 비용이 double spend로부터 얻을 수 있는 이익보다 커서 손해기이 때문이다. 또 다른 방식의 공격은 빈 블록들을 채굴하여 네트워크를 불안정하게 만들고 모든 거래를 불가능하게 만드는 것이다. “정직한”채굴자들이 비정상적이라고 생각되는 블록들을 “블랙리스트”하면 이러한 공격에서 회복될 수 있다. 일부 정상적인 상황 하에서 채굴자들과 마이닝풀은 블록과 트랜젝션을 검열하지 않는다. 검열하게 되면 Bitcoin에 대한 신뢰도가 떨어지고, 따라서 투자가 감소할 수도 있다. 51퍼센트 공격은 또한 현재의 특정 블록을 다시 만들어내는 것을 방지하는 체크포인트를 사용하여 상쇄될 수 있다.