비트코인과블록체인 2016.5 이동산 (mountie@paygate.net)
비트코인이란무엇인가? 비트코인이란무엇인가? 분산화된 P2P 시스템기반디지털가상화폐다 비트코인은전세계어느누구와도빠르게거래할수있는가상화폐다 비트코인은실험적인가상화폐다 비트코인은플랫폼이다 평균적으로 10 분마다블록증가 총비트코인공급량 : 2100 만 BTC (2040 년도달 ) 왜비트코인인가? 편의성 국경없는거래가능 국가통화정책에대한불신 자생적커뮤니티와생태계가제공하는신뢰 비트코인의역사 1980~90 년대익명 e-cash 1998 년 Wei Dai 의 B-money 2005 년 Hall Finney 의재사용가능한작업증명 2008.10.31 : 사토시비트코인논문 2008.11.9 : sourceforge.net 에비트코인프로젝트등록 2009.1.3 : 제네시스블록생성 2010.5.21 : 피자두판 1 만 BTC 로구매 2012.12.6 : 유럽에서처음으로비트코인거래소가은행업허가취득 2013.8.19 : 독일재무부가비트코인을합법화폐로인정
Bitcoin-Core Full Client
비트코인작동원리 비트코인거래 복식부기와유사 : 차변 ( 입력값, 이전거래의출력값이입력값이됨 ), 대변 ( 출력값, 총합은입력값의총합보다약간작야야함, 차액은거래수수료 ) 일반적인거래유형 1:1거래 : 잔액은다시 Sender에게돌아옴 n:1거래 : 여러입력값을하나의출력값으로합치는거래 1:n거래 : 하나의입력값을여러개출력값으로 거래의구성 지갑어플리케이션 : 거래진행에적절한입력값과출력값을선택하는로직구현 올바른입력값얻기 : 소비되지않은거래출력값에근거여러개를모아서지불하거나큰돈지불후잔돈받기 잔돈받기는출력값을자기자신으로하는것 출력값생성하기 스크립트형태 스크립트포함내용 : 돈받는사람의공개키 에대응하는키 ( 개인키 ) 를이용해서명을하는누구에게나지불가능하다 거래수수료스크립트 : 따로명시되지않음. 잔액을전액받는것이아니라 0.0001BTC 만큼공제한잔액을돌려받으면됨 거래내역을장부에추가
비트코인작동원리 (2) 비트코인채굴하기 채굴과정을거쳐블록에포함됨 입증하는데엄청난수학적계산필요 검증은많은계산불필요 Proof-of-Work : CPU GPU ASIC 거래소비하기 단순지불검증 (SPV) Lightweight client 해당거래가블록체인내에존재하고그후채굴된블록이여러개있다는점을승인 출력값을참조해서입력값을정한후소비 블록에담겨있는거래채굴하기 임시풀에거래들을추가 우선순위 : 오래된것위주, 거래수수료가일정기준치이상일때 각채굴자는네트워크로부터이전블록을박데되면이전경쟁라우드에서채굴에실패했다는사실을알게됨 채굴자는자신의블록에특별한거래하나를포함 채굴자에대한보상. 한블록에는대략 400~500 개거래포함
비트코인주소 의미 개인키및공개키쌍을보유한소유주를나타낼수있고 Pay-to-Script-Hash(P2SH) 등여러다른대상을나타낼수도있다 Bitcoin Address Base58Check(RIPEMD160(SHA256(Public Key))) with 0x00 version prefix Base58Check 에는용도구분을위한 Prefix 를사전정의해두고있음. https://en.bitcoin.it/wiki/list_of_address_prefixes 꾸미기주소 메시지를포함하는유효비트코인주소 꾸미기주소생성 1IoveBPzz..adlfajldfs Love라는단어가포함되도록주소생성 수십억개의후보를생성하고테스트 꾸미기풀의주소채굴자들에게요청, 대가로비트코인지불 Base58 & Base58Check Base58 : Base64에서혼란유발문자 ( 숫자0, 영문O, 숫자1, 영문I, + 부호, / 부호 Base58Check 내장된오류검사코드포함 (4자리체크섬값 ) 버전 byte 접두부추가 비트코인주소 : 0x00 (16진수) 1 (Base58결과값) Pay-to-Script-Hash 주소 : 0x05, 3 비트코인테스트넷주소 0x6F, m or n 개인키 WIF 0x80, 5 K L BIF38암호화개인키 0x0142, 6P BIP32 확장공개키 0x0488B21E, xpub checksum = SHA256(SHA256(prefix+data)) checksum중첫4글자만사용 https://en.bitcoin.it/wiki/base58check_encoding
비트코인주소 (2) 개인키포맷종류 Hex : 접두부없음, 64 개의 16 진법수 WIF : 접두부 5, Base58Check encoding WIF- 압축형 : 접두부 K or L, 공개키가양수 / 음수여부로구분, 인코딩전접미부 0x01 추가암호화된개인키 (BIP0038) 목적 개인키를안전하게백업매체에저장 지갑간전송을시행 노출될수있는어떠한조건에서도비밀이유지될수있도록패스프레이즈를이용해개인키를암호화 Base58Check로개인키를인코딩하는데필요한공동표준을제안 AES를암호표준으로이용 WIF형태개인키를입력값으로이용 (Base58Check 접두부 5 로시작 ) 암호화된 BIP0038 암호화결과값의 Base58Check( 접두부 : 6P) cold storage에이용됨 BIP0038 암호화개인키가담긴종이지갑 공개키포맷 압축공개키 타원곡선암호에서 x좌표만알면 Y값은계산가능 x좌표만저장 접두부 (02 : y 값이양수일때, 03 : y 값이음수일때 ) 비압축공개키 x,y 좌표모두저장, 접두부 04 Pay-to-Script hash(p2sh) 다중서명주소 전통적인비트코인주소 : 숫자 1로시작, 공개키로부터생성, 공개키는개인키에서생성 P2SH 주소 : 숫자 3으로시작, 비트코인거래의수령인을공개키소유주가아닌스크립트의해시로지정 BIP0016이후널리채택, 주소자체에기능추가기회제공 소유권증명 : 공개키해시, 개인키서명, 스크립트실행 script hash = RIPEMD160(SHA256(script)) 접두부 5를가진 Base58Check로인코딩되며 결과적으로 3으로시작하는주소를얻게됨 가장흔한구현으로다중서명주소
비트코인지갑 비결정적 ( 무작위 ) 지갑 무작위로개인키모아놓는장소 Type-O nondeterministic wallet 개인키만많은지갑 결정적 ( 종자 ) 지갑 common seed 이용개인키생성 common seed 만있으면개인키복원가능한구조 연상기호코드워드 연상기호코드란결정적지갑을얻기위해종자로이용한난수를표현하는 ( 인코딩하는 ) 영어단어열 단어열만있으면종자를재현가능 종자에서지갑과추출키전부재현가능 BIP0039 에서정의 계층결정적지갑 (HD 지갑 ) 트리구조에서생성된키를담고있음 장점 : 트리구조, 공개키에대응하는개인키접근없이공개키열생성가능 HD지갑은근원종자 (root seed) 한개로부터생성됨 개인자식키유도하기 CKD: Child Key Delivation 일방해시함수기반다음항목포함 : 부모개인키혹은부모공개키 (ECDSA 비압축키 ), 체인코드라는이름의종자 (256bit), 색인번호 절차 부모공개키 + 체인코드 + 색인번호로 HMAC- SHA512 알고리즘통해 512비트해시생성 해시출력값중오른쪽반의 256비트는자식키생성을위한체인키 해시와색인번호로구성된왼쪽반의 256비트는자식개인키를생성하기위해부모개인키에더해짐 색인번호변경시부모키이용해서다른자식키생성가능 각부모키는 20억개의자식키보유가능 트리구조로확대하면무한대확장
비트코인지갑 (HD 지갑 - 계속 ) 확장키 키유도함수는세가지입력값을기반으로트리구조의자식키생성 : 키, 체인코드, 목표자식의색인번호 키 + 체인코드를확장키라고부름공개자식키유도하기 개인키없이도공개부모키로부터공개자식키를얻을수있음 두가지자식공개키얻는방법 개인키로부터얻는방법 부모공개키로부터직접얻는방법 매우안전한서버어플리케이션 무한개의공개키와비트코인주소생성가능 생성된비트코인주소로송금된돈을절대소비불가능 그러나안전한서버에서는확장개인키이용해서거래서명가능단절된자식키유도하기 위험성 : 확장공개키와체인코드로자식개인키유출위험, 부모체인코드와함께자식개인키유출시자식개인키전부유출되는위험성 대책 : 단절유도법이용 ( 부모공개키를사용하지않고부모개인키사용해서자식체인코드생성 ) 마스터키의위험을방지하기위해서마스터키의 1세대자식들은항상단절유도법통해생성 정규유도와단절유도의색인번호 정규유도법에서사용색인번호 : 0 ~ 2 의 31 승 -1 단절유도법에서사용색인번호 : 2 의 31 승 ~ 2 의 32 승 -1 HD 지갑키식별자 ( 경로 ) HD 지갑에들어있는키는명명규칙인경로 (path) 를이용해서식별됨 트리구조의각단계는슬래시 (/) 로구분 마스터개인키에서나온개인키들은소문자 m 으로시작 마스터공개키에서나온공개키들은대문자 M 으로시작 첫번째자식개인키는 "m/0", 첫번째자식공개키는 M/0, 손자키는 m/0/1 HD 지갑트리구조탐색하기 HD 지갑에서는 20 억개의정규자식및 20 억개의단절자식보유가능 트리구조탐색의어려움 BIP0043 에서구조제안 : m / purpose' / coin_type' / account' / change / address_index purpose 는항상 44 로고정 coin_type : m/44'/0'(bitcoin), m/44'/1' (Testnet), m/44'/2' (Litecoin) account: 회계나조직적인용도구분 change: 0( 수신공개키주소 ), 1( 잔액받기위한용도 )
비트코인거래 거래의수명주기 거래생성 승인을의미하는서명을한건이상받아야함 네트워크에해당거래알림 네트워크노드가해당거래를검증하고계속전파 채굴노드에서블록검증후블록체인에기록 그다음에생성되는블록들에의해확인 ( 승인 ) 을받고나면 해당거래는블록체인에영구적으로기록 거래생성하는것은수표발행과유사. 수표에수취인및금액기록 = 거래의사데이터생성 수표에서명 = 거래서명 수표전달 = 전파 비트코인네트워크에거래전송하기 비트코인거래는본질적으로 300~400바이트크기 개인정보가없어서공개적으로전송가능 Bluetooth, NFC, 바코드, Radio 신호 port# 8333 네트워크에연결된다른노드에의해거래가유효화됨 거래구조 거래는입력값이라고불리는자금원에서부터출력값으로불리는목적지까지가치의전송을인코딩하는데이터구조 필드 버전 : 4byte, 해당거래가따르는규칙을명시 입력값카운터 : 1~9바이트 (Var Int), 포함된입력값의개수 입력값 : 가변적, 하나이상의거래입력값 출력값카운터 : 포함된출력값의개수, 1~9바이트 출력값 : 하나이상의출력값 잠금시간 : 유닉스타임스템프나블록개수, 4바이트 0 ~ 5억미만 : 블록의높이로해석됨, 블록높이가명시된높이가되기전까지는거래는블록체인에포함되지않는다는것을의미 5억이상인경우 : 유닉스기준일자타임스탬프로해석됨, 수표에날짜를늦춰적는것과같음
비트코인거래 (2) 거래출력값과입력값 소비되지않은거래출력값 UTXO, Unspent Transaction Output 블록체인상에기록되어있음 비트코인네트워크는수백만개에달하는 UTXO중에서이용가능한 UTXO 전부를추적한다 현실적으로특정소유주에대해서잠겨있는 UTXO 가여기저기산재해있음 20BTC에서 1BTC지불하는예제 입력값으로 20BTC전액을소비하고 2개의출력값 : 1BTC는수신자에게, 19BTC는자기자신에게 coinbase 거래는예외 각블록내의첫번째거래, 채굴에성공한채굴자에의해생성, 채굴에대한보상 입력값이없고출력값만생성되기때문 거래출력값 출력값은블록체인에기록 OP_RETURN 을제외하고대부분 UTXO UTXO 출력값구성 비트코인금액 : 사토시단위로표현되는비트코인가치 잠금스크립트크기 잠금스크립트 : 특정금액을소비하기위해충족되어야하는조건규정 거래입력값 UTXO 에대한지시자 (pointer) 역할을한다 UTXO 소비위한소비조건충족하는해제스크립트포함 ( 통상서명 ) 지불금액결합을위한알고리즘은지갑프로그램에따라서다양 구조 거래해시 : 소비될 UTXO를담고있는거래에대한지시자 출력값인덱스 : 소비될 UTXO의색인번호 ( 최초는 0) 해제스크립트크기 해제스크립트 일련번호 : 현재미사용. 대부분 0xFFFFFFFF로설정
비트코인거래 (3) 거래수수료 비트코인단위로표현되는거래가치보다는 킬로바이트단위의거래크기를근거로계산됨 처리우선순위에영향을미침 수수료가높으면우선처리 최소거래수수료 0.0001BTC 혹은 1킬로바이트당 1mBTC의 10분의 1 거래대부분의크기는 1KB 미만 여러개의입력값과출력값을포함한경우데이터가커짐 거래에수수료추가하기 입력값총합에서출력값총합을제하고남은금액 커피값이 0.015BTC, 수수료 0.001BTC라면 입력값은 0.016BTC 출력값은 0.015BTC 거래사슬과고아거래 이전거래 ( 부모거래 ) 출력값을소비하여다음거래 ( 자식거래 ) 를위한출력값을생성 자식거래가부모거래보다먼저도착할수도있음 즉출력값에상응하는 UTXO가아직도달하지앟았음 이경우고아거래풀 (Orphan transaction pool) 에넣어둠 부모거래가노드에도착하면자식거래를재유효화함 DoS공격방식 부모없는자식거래를대량발생 프로그램속에최대보관자식거래수정하고있음
비트코인거래스크립트언어 stackable language like Forth 지불거래스크립트대부분은 Pay-to-Public-Key-Hash( 공개키에매핑되는개인키로만서명가능 ) 거래유효화를위한스크립트언어생성 스크립트구성 ( 잠금 + 해제 ) 잠금스크립트 : 출력값에위치, scriptpubkey라고부르기도함 해제스크립트 : 잠금스크립트가출력값에놓아둔조건을해결하거나충족시켜서출력값이소비될수있도록하는스크립트, scriptsig 모든비트코인클라이언트는잠금스크립트와해제스크립트를함께실행해서거래를유효화시킴 최초 : 잠금 / 해제를서로연결해서실행, 보안상이유로변경 현재 : 해제스크립트는스택실행엔진을이용하여실행됨 오류가없으면잠금스크립트실행 튜링불완전성 : 의도적으로기능이제한됨 무상태형검증 스크립트언어는 stateless 스크립트실행전 / 후에저장되는상태가없음 reverse-polish notation을따르는스택기반의실행언어 https://en.bitcoin.it/wiki/script 범위가한정되도록고안된매우단순한언어 ( 다양한하드웨어 ) 스택 (stack) 데이터구조기반 두가지연산 : Push and Pop 각항목을왼쪽에서오른쪽으로처리하면서스크립트를실행 숫자 ( 데이터상수 ) 는스택상부에기록 OP_ADD : 스택에서두항목을가지고나와서두값을더하고그합계를스택의상부에기록 조건부연산자들 : 조건평가후 TRUE / FALSE 생성 OP_EQUAL: 동일하면 1(TRUE), 불일치 0(FALSE) 2 3 OP_ADD 5 OP_EQUAL : 2와 3을더하고그결과값이 5와동일한지비교 잠금스크립트예 : 3 OP_ADD 5 OP_EQUAL 해제스크립트예 : 2 해제스크립트 + 잠금스크립트결과값이 OP_TRUE 면유효한거래로인정 스택상부의결과값이 TRUE이거나 0이아닌숫자이거나스크립트실행이후스택이비어있다면거래는유효
5 가지표준거래 pay-to-public-key-hash P2PKH 공개키해시를이용해출력값에대한예상지출을실행하는잠금스크립트포함 디지털서명사용해서해제가능 OP_DUP OP_HASH160 <Public Key Hash> OP_EQUAL OP_CHECKSIG Pay-to-Public-Key 잠금스크립트내에공개키가저장되어길이가짧아짐 coinbase 거래에자주나타남 ( 채굴자들이생성하는거래 ) 잠금스크립트 : <Public key A> OP_CHECKSIG 해제스크립트 : <Signature from Private KeyA> 복합스크립트 : <Signature from Private KeyA> <Public Key A> OP_CHECKSIG 다중서명 (OP_CHECKMULTISIG) OP_0 <SignatureB> <SignatureC> 2 <PublicKeyA> <PublicKeyB> <PublicKeyC> 3 OP_CHECKMULTISIG 예상지출로설정된 3개의공개키중에서 2개의공개키에대응하는 2개의개인키로부터나온유효서명을해제스크립트가보유하고있는지여부 pay-to-script-hash OP_CHECKMULTISIG의번거로운단점해소 P2SH : 해당출력값이소비된후에제공되며해시와일치하는스크립트로지불 P2SH가있는스크립트 리딤스크립트 : 2 PubKey1 PubKey2 PubKey3 PubKey4 PubKey5 5 OP_CHECKMULTISIG 잠금스크립트 : OP_HASH160 <20 bytes hash of redeem script> OP_EQUAL 해제스크립트 : Sig1 Sig2 <redeem script> Pay-to-script-hash 주소 : BIP0013에서규정, 접두부 3 장점 거래크기줄임 P2SH는스크립트를만드는부담을송신자가아니라수취인에게부담시킴 긴스크립트수수료비용부담을수취인으로옮긴다 수취인은거래의출력값을소비하기위해서는길이가긴리딤스크립트를거래의입력값에포함시켜야한다
5 가지표준거래 (OP_RETURN) 목적지주소 20바이트공간을자유목적으로사용해서소비될수없는 UTXO를생성 목적지주소는데이터용으로사용됨 문제발생 그래서 OP_RETURN 도입합의 40바이트크기 실제로는 80바이트 https://en.bitcoin.it/wiki/op_return UTXO 세트에저장될필요없음 UTXO 메모리풀절감 OP_RETURN 응용 SHA256 32byte 8바이트접두부 Proof-of-Existence DOCPROOF 접두부사용 해제스크립트가없음 but input 스크립트는서명값포함? only single OP_RETURN but 다른지불스크립트와함께사용가능
비트코인네트워크 P2P 네트워크아키텍처 노드의유형및역할 4가지기능 : 라우팅, 블록체인데이터베이스, 채굴, 지갑서비스 라우팅 : 모든노드가보유, 거래와블록을검증하고전파, 이웃노드와의연결을유지 단순지불검증 (SPV): 라이트웨이트노드 채굴노드 네트워크검색 포트 8333 연결후 버전메세지전송 핸드세이크시작 (Protocol_version, nlocalservices, ntime, addryou, addrme, subver, Best Height) 연결승인 : verack 이웃노드없으면 seed node에접속 최초블록은클라이언트소프트웨어에내장 단순지불검증 (SPV) 노드 비트코인지갑의가장흔한형태 이웃노드의존 거래유효성검증가능 but 소비여부를검증할수없음 머클경로이용존재하는거래의유효성검증가능 누가어떤주소검색하는지알기때문에프라이버시문제있음 블룸필터 (Bloom filter) 기능으로해결시도 블룸필터 : 확율적검색필터, 프라이버시보호하면서검색패턴을표현하기위한효율적인방법제공 지갑내주소에만반응하는필터생성후관련데이터만수신 거래풀 메모리풀이라고도함 미승인거래로이루어진임시목록보관 UTXO중에서는 2009년도날짜것도있음 비상메시지 거래사용안되지만대부분노드에서실행 비상경보방송시스템 멀티블록분기를발생시킨심각한데이터베이스버그가나타난 2013년초에사용됨
블록체인 블록체인내의블록각각은 SHA256 Hash를통해서생성됨 여러개의자식블록이블록체인분기가발생하는동안생성 다른채굴자들에의해거의동시로다른블록들이발견되는경우. 일시적상황 블록구조 블록크기 : 4바이트 블록헤더 : 80바이트 이전블록해시값, 난이도, 타임스탬프, nonce 거래카우터 : 1~9바이트 거래 : 가변적 블록식별자 : 블록헤더해시와블록높이 블록암호화해시 : SHA256 블록헤더를 2회해싱후확보 실제로블록의데이터구조에포함되어있지않음 네트웍전송시에도미포함, 각노드에의해계산됨 블록체인내에서의위치파악 : 블록높이확인. 데이터구조의일부가아니라서저장안됨 최초블록 2009년생성 클라이언트소프트웨어내에고정적으로인코딩 새로생성된블록들을전송받고나면유효성검사후기존블록체인에연결. 새로생성된블록헤더검사후이전블록해시찾음 머클트리 이진해시트리 ( 암호해시를담고있음 ) 규모가큰데이터집합의완전성을효율적으로요약하고검증하는데사용되는데이터구조 거래데이터를해싱해서나온결과값두개를연결한해시두개를연결한해시. 계속두개의해시를연결한값을해시해서루트를찾아감 홀수개라면마지막거래해시를복사해서짝수로만듬 블록내에수백건에서수천건의거래에대한단일머클루트생성후특정거래가블록내에포함됨을임증 노드가 Log2(N) 개의 32바이트해시생성해서루트연결 머클트리와단순지불검증 (SPV) 머클트리는 SPV노드에서널리사용됨 SPV Node는블록헤더만을다운로드함 거래가블록내에포함되어있는지여부검증위해머클경로사용 풀블록 ( 약 1MB) 의 1000분의 1수준
비트코인채굴 채굴자들의보상 새블록에서새로운코인생성 4년마다 (210,000블록마다) 줄어듬 최초 50BTC, 2012.11 25BTC, 2016 12.5 BTC, 2040년종료 거래수수료 : 입력값과출력값차이만큼 통화공급은채굴을통해서이루어짐 채굴의목적 : 블록을만들어주는역할, 거래검증및승인 분산화된합의 각풀노드마다독립된검증실시 검증된거래들을새로운블록에독립적으로추가 모든노드들이새블록을독립적으로검증한후체인에블록을연결 각노드는모든거래를독립적으로검증 채굴노드는새로운블록구성노력 새로운블록을수신했다는것은경쟁패배의미 10분마다새블록생성. 검증된거래는노드의메모리풀또는거래풀에추가 거래의나이, 수수료등고려우선순위에따른후보거래구성 생성거래 ( 혹은 coinbase 거래 ) 입력값으로 UTXO를쓰지않음 구조 : 거래해시, 출력값인덱스, 코인베이스데이터크기, 코인베이스데이터, 일련번호 코인베이스데이터의나머지부분은채굴자들이원하는방식으로사용될수있음. 마지막부분은 BIP0016 지지의사표명의표시로 P2SH추가 블록헤더구성하기 6개의헤더 : 버전, 이전블록해시, 머클루트, 타임스탬프, 난이도목표, 난스 코인베이스에대한보상금과수수료 거래수수료총액계산 : 블록에추가된거래의입력값과출력값총액의차액으로계산 coinbase reward 블록높이에근거매 210,000블록마다절반으로줄어듬. 반감기는최대 64회허용
비트코인채굴 (2) 블록채굴은블록헤더를반복적으로해싱해서해시결과값이특정목표치와일치할때까지하나의매개변수를변화시키는과정 작업증명알고리즘 해쉬값을찾아내는과정 원하는난이도설정 : 얼마나많은리딩비트가 0이어야하는지를나타낸수치 난이도표기법 난이도목표값을계수 / 지수포맷으로표현 첫두자리의 16진수는지수를나타내고다음여섯자리 16진수는계수를나타냄 난이도목표및목표재설정 평균블록생성시간 10분을기준으로함. 난이도가높은것으로작업했다는증명 전기료및전기료를내기위해사용되는통화에대한비트코인환율과밀접하게관련있음 블록채굴성공확율높이기위해 ASIC 이용추세 각노드에서새블록을검증 : 난이도등 부정직하게생성된블록은다른노드에서거부 블록체인을수집해서선택하기 블록을체인안에모아서가장많은작업증명을보유하고있는체인을선택 누적난이도가가장큰값을가진블록들로구성된체인이면어떠한것이라도메인체인이됨 가장많은블록을담고있으면메인체인이된다 고아블록은부모블록이도착할때까지풀에저장 블록체인분기 블록들이다른시간에다른노드에도착할수있기때문에분기발생 분기방지를위해서 각노드는항상작업증명을가장많이시행한블록체인을선택해서연장하려고함 분기를잘못선택하면잘못된노드가되버림 대부분한블록이내에서해결됨 채굴과해싱레이스 해싱파워증대로추가난스솔루션필요 난스값 40억개모두투입해서블록을못찾게됨 코인베이스거래에추가난스추가해서해결 협력을위한채굴풀이용하기도함. ( 풀관리자가존재 ) P2Pool
Thinking 1:n 거래시수수료는? n:1 의경우 one transaction coinbase 거래를채굴업자가임의로높이면무슨일이발생? 노드에서거부 SHA256 upgrade? 합의에의해 how many blockchain nodes? HD 지갑의트리구조대신 SNS 구조채택가능성? 한블록에들어가는거래는몇개? https://blockchain. info/charts/n-transactions-per-block, 최소 400 개에서 2 천개정도까지 reward 는수학적으로어떻게부여되나? 거래수수료로는부족해보임 Bitcoin HSM? one private key and multiple public key? private - public key pair, 하나의개인키에서 2 개이상공개키생성가능 ( 압축공개키, 비압축공개키 ) 타원곡선암호지원? ECDSA Base58Check version prefix 의약속된코드목록이있는가? https://en.bitcoin.it/wiki/list_of_address_prefixes OP_RETURN 40bytes max? prefix + 32byte hash, Base58Check format? 실제 80 바이트 OP_RETURN fee 는어떻게지불? 데이터암호화키관리솔루션에 HD 지갑의키관리방식응용 BIP0038 암호화개인키는어떤알고리즘사용? bitcoin script : https://en.bitcoin.it/wiki/script https://www.cs.princeton. edu/~tongbinw/bitcoinide/build/editor.html bitcoin address 로도메인생성, 인증서발급, bitcoin address 에대한공식적인 KYC 제공. bitaddress.org BIP 에 formatting small numbers 제안 https://github. com/bitcoin/bips/blob/master/readme.mediawiki P2SH 와 OP_RETURN 함께사용 OP_PUSH <data> OP_DROP 으로사용.
감사합니다.