개발자가 되고 싶은 사람

180611_bitcoin-cli-1

|

과제목표

  1. 비트코인 API 기능을 분석하여, backend 팀에서 사용자에게 서비스를 구현해주기 위한 환경을 구성하는데 필요한 기능을 이해한다.
  2. API기능을 이해하고, 사용자단에서 접근하기 쉬운 미들웨어 환경을 구성할 수 있도록 한다.

비트코인 코어의 JSON-RPC API사용하기(bitcoin-cli)

  • bitcoin-cli 는 비트코인 소스를 실행시키기 위한 tool
  • RPC(Remote Procedure Call)의 약자로 bitcoin core의 procedure를 http protocol을 이용하여 호출한다.
  • api reference
  • bitcoin-cli 를 사용하면 명령 줄에서 RPC 명령을 비트 코인으로 보낼 수 있다.
  • 사용가능한 JSON RPC 목록 확인 : bitcoin-cli help

현재 사용중인 bitcoin testnet version

  • 0.15 (최신 0.16)

ex

1. \$ `addmultisigaddress nrequired ["key",...] ( "account" )` ===> ( "account" ) 파라미터를 `("label")` 변경.
2. \$ `getnewaddress ( "account" )` ===> ( "account" ) 파라미터를 `("label")` 변경.
3. \$ `$ bitcoin-cli listtransactions "*"`  
   

deprecated되는 ‘account’ API (‘label’ and ‘account’ APIs for wallet).

  • 새 ‘label’API가 wallet에 도입됨.
  • 이는 사용되지 않을 ‘account’API를 대체하기위한 것.
  • ‘account’는 ‘-deprecatedrpc = accounts’ 인자로, V0.17에서 계속 사용될 수 있으며 V0.18에서 완전히 제거될 예정이다.
  • deprecated된 파라미터 account는 ‘lable’로 변경된다. ‘-deprecatedrpc = accounts’로 실행하는 경우에는 이전 버전과의 호환성을 고려한다.
  • 참고 : ‘label’ and ‘account’ APIs for wallet

변경사항

- ‘label’ RPC 메서드는 다음 기능적 차이점을 제외하고 ‘account’ 기능을 반영한다.

  • label은 주소 수신뿐만 아니라 모든 주소에서 설정할 수 있다. 이 기능은 이전에는 GUI를 통해서만 가능했다.
  • label은 setlabel RPC 메소드를 사용하여 모든 주소를 재 지정하여 삭제할 수 있다.
  • label에서 트랜잭션을 전송하거나 트랜잭션이 전송 된 레이블을 결정할 수는 없다.
  • label은 ‘balance’가 없다.

- Changes to RPC Methods

Deprecated Method New Method Notes
getaccount getaddressinfo getaddressinfo는 계정 이름 대신 주소 정보가있는 json 객체를 문자열로 반환합니다.
getaccountaddress getlabeladdress 만약 ‘label’이 이미 존재하지 않는다면, getlabeladdress는 디폴트로 에러를 던지지만, 기존 응용 프로그램과의 호환성을 위한 강제 옵션(force option)을 제공합니다.
getaddressesbyaccount getaddressesbylabel getaddressesbylabel은 문자열 목록 대신 key와 같은 주소를 가진 json 객체를 반환합니다.
getreceivedbyaccount getreceivedbylabel no change in behavior
listaccounts listlabels listlabelsbalance을 반환하거나 minconf 및 watchonly 인수를 허용하지 않습니다.
listreceivedbyaccount listreceivedbylabel 두 방법 모두 이전 버전과의 호환성을 위해 account fields와 함께 새 label fields를 반환합니다.
setaccount setlabel address가 address를 수신하지 못하면 오류를 제기하는 대신 모든 주소에 레이블을 할당 할 수 있습니다.
move n/a no replacement
sendfrom n/a no replacement

- no replacement 인 move, sendfrom

  • move, sendfromno replacement이다.

move 명령은 Bitcoin Core의 내부 account 시스템을 위한 것 입니다. 실제로 트랜잭션을 생성하지는 않으며 Bitcoin Core 내부의 account 중 2 개의 balance 만 변경합니다. move명령은 주소가 연결된 계정을 변경하는 것이고, 실제로 변경되는건 지갑 내부 데이터베이스 항목입니다. 결국, account 시스템이 제거 될 것이므로 더 이상 move 명령이 필요 없으며, RPC를 사용하여 Bitcoin을 실제로 보내려면 sendtoaddress 또는 sendmany를 사용해야합니다.

sendfrom도 deprecated되기 때문에 sendtoaddress 를 사용한다.

  • 참고 : https://bitcointalk.org/index.php?topic=1974458.0, http://chainquery.com/bitcoin-api/sendfrom, bitcoin-cli help sendfrom

- Changed Method

Changed Method Notes
addmultisigaddress account 파라미터를 label 파라미터로 변경. ‘-deprecatedrpc = accounts’를 실행하면 이전 버전과의 호환성을 고려한다.
getnewaddress account 파라미터를 label 파라미터로 변경. ‘-deprecatedrpc = accounts’를 실행하면 이전 버전과의 호환성을 고려한다.
listunspent label 필드를 반환. ‘-deprecatedrpc = accounts’로 실행하면 이전 버전과의 호환성을 위해 계정 필드가 반환.
listtransactions account 파라미터를 dummy 로 변경. dummy 매개변수는 *(string) 사용(-deprecatedrpc = accounts 를 사용하지 않을 경우).
sendmany account파라미터를dummy로 변경. dummy 매개변수는*`(string) 사용(-deprecatedrpc = accounts 를 사용하지 않을 경우).
getbalance account, minconfinclude_watchonly 매개 변수는 더 이상 사용되지 않으며 ‘-deprecatedrpc = accounts’로 실행하는 경우에만 사용 가능.

(ex)

bitcoin-cli change
$ addmultisigaddress nrequired ["key",...] ( "account" ) ( "account" ) 파라미터를 ("label")로 변경.
$ getnewaddress ( "account" ) ( "account" ) 파라미터를 ("label")로 변경.
$ bitcoin-cli listtransactions ( "account" ) ( "account" ) 파라미터를 "*"로 변경.

주로 쓰이는 명령어들

  • getnewaddress
  • getbalance
  • getinfo (DEPRECATED)
  • getrawtransaction
  • getaccount (DEPRECATED)
  • getaddressesbyaccount (DEPRECATED)
  • gettransaction
  • getblock
  • getblockcount
  • getblockhash
  • listtransactions
  • move (DEPRECATED)
  • sendfrom (DEPRECATED)
  • sendmany
  • sendtoaddress
  • validateaddress
  • listunspent
  • getwalletinfo
  • addmultisigaddress
  • createrawtransaction
  • signrawtransaction
  • sendrawtransaction
  • walletpassphrase

getnewaddress

  • getnewaddress ("account")
  • return : 지불을 받기 위한 새로운 비트코인 주소생성. 만약 account = specified (DEPRECATED), 주소록에 추가된다. 그래서 주소로부터 받은 지불금은 계좌에 적립된다.
  • arguments : account (string, optional) DEPRECATED.
  • result : (string) address : 새로운 비트코인 주소
  • ex : bitcoin-cli getnewaddress

    n4Nc1qzbgCDjyo7AFfDUguRpey9cqS5yTS

getbalance

  • getbalance ("account" minconf include_watchonly)
  • returns :

  • account ““은 파라미터가 없는것(디폴트) 과 다르다(?). 서버의 전체 잔액은 기본계정의 잔액과 다를 수 있다.
  • account != specified : 서버의 전체 이용가능한 잔액
  • account = specified (DEPRECATED) 계좌의 잔액 리턴. ( account, minconf 및 include_watchonly 매개 변수는 더 이상 사용되지 않으며 ‘-deprecatedrpc = accounts’로 실행하는 경우에만 사용할 수 있다.)

  • arguments :

  • account (string, optional) DEPRECATED
  • minconf (numeric, optional, default=1)
  • include_watchonly (bool, optional, default=false)

  • result : account (numeric) 이 계정에 대해 받은 btc의 총 금액.
  • ex : bitcoin-cli getbalance "*" 6

    1.33521885

getinfo(DEPRECATED)

  • DEPRECATED. : 0.16버전에선 더 이상 사용되지 않음.
  • replaced : 0.16업그레이드 전에는 getblockchaininfo, getnetworkinfo, and get walletinfo 사용
  • return : 다양한 상태정보가 포함된 객체들을 리턴
  • result : version, block, proxy, difficulty, testnet등의 정보를 object로 리턴함.

  • getblockchaininfo : 블록 체인 처리와 관련하여 다양한 상태 정보를 포함하는 객체를 반환
  • getnetworkinfo : P2P 네트워킹과 관련된 다양한 상태 정보를 포함하는 객체를 반환
  • getwalletinfo : 지갑 상태 정보를 포함하는 객체를 반환한다.

getrawtransaction

  • getrawtransaction "txid" (verbose)
  • mempool 트랜잭션에서만 작동.
  • mempool? : 비트코인 거래를 하기 위해 트랜잭션을 생성하고, 각 노드들에 해당 트랜잭션을 전파한다. 각 노드는 해당 트랜잭션이 유효한 거래인지 검증 후 ‘검증된’ 트랜잭션을 mempool에 업데이트 하게 된다.

    mempool은 아직 거래가 성립되지 않은, 즉 0 컨펌 상태의 트랜잭션들이 저장되는 공간.

  • return : 원시 거래(transaction) data.

  • verbose = true : (object) txid에 대한 정보 객체 리턴
  • verbose = false   omitted : (string) txid에 대한 직렬화되고 16진수로 인코딩된 문자열 반환.
  • arguments : 1. txid (string, required) : the transaction id , 2. verbose (bool, optional)
  • result : hex, txid, size, version, locktime, etc,, 에 대한 객체 리턴.

getaccount ( DEPRECATED.)

  • getaccount "address"
  • replace : getaddressinfo
  • arguments : address (string, required) 계정 조회용 비트 코인 주소.
  • return : 주어진 주소와 연관된 계좌 이름 반환.
  • result : (string) accountname : 계좌 주소

getaddressesbyaccount ( DEPRECATED.)

  • getaddresssesbyaccount "account"
  • replace : getaccount, getbalance, getaddressesbylabel
  • return : 주어진 계좌 주소의 리스트
  • arguments : account (string, required) 계좌 이름
  • result : (json array of string) 주어진 계좌와 관련된 비트코인 주소 리턴
  • ex : bitcoin-cli getaddressesbyaccount "tabby"

    [ (json array of string) “address” (string) a bitcoin address associated with the given account ,… ]

gettransaction

  • gettransaction "txid" (include_wathonly)
  • return : txid에 대한 지갑내의 거래정보 세부사항을 가져온다.
  • arguments :

  • “txid” (string, required) 거래(transaction) id,
  • “inclued_watchonly” (bool, optional, default=false) : 잔액계산과 세부사항에 inclued_watchonly를 포함 할지의 여부.

  • result : amount(numeric), confirmation, blockhash, blocktime, txid, details, hex 등의 정보 객체값들 리턴.
  • ex : bitcoin-cli gettransaction "1075db55d416d3ca199f55b6084e2115b9345e16c5cf302fc80e9d5fbf5d48d" false

getblock

  • getblock rpc는 로컬블럭 데이터 베이스의 특정한 헤더 해쉬 블럭값을 제이슨 객체형식으로 가져오거나, 직렬화된 블럭으로 가져온다.
  • getblock "blockhash" (verbosity)
  • arguments : 1. blockchain, 2.verbosity(다변)
  • returns & result :

  • verbosity = 0 : (string) 블럭 헤더의 해시, rpc바이트 순서로 16진수로 인코딩 된 값.
  • verbosity = 1 : (object) 블럭 해시에 대한 정보.
  • verbosity = 2 : (object) 블럭 해시에 대한 정보들과 각각의 거래(transaction)에 대한 정보들.

getblockcount

  • return : 가장 긴 블록체인의 블럭수를 리턴
  • result : (numeric) 현재 블록수

getblockhash

  • return : 제공된 최고 높이의 블록 체인에서 블록의 해시.
  • arguments : height (numeric) 인덱스의 높이
  • result : (string) 블럭 해시.
  • ex : bitcoin-cli getblockhash 1000

    00000000373403049c5fff2cd653590e8cbe6f7ac639db270e7d1a7503d698df

listtransactions

  • listtransactions ("account" count skip include_watchonly)
  • return : ‘계정’의 첫 번째 ‘트랜잭션’을 건너 뛰는 가장 최근의 트랜잭션을 ‘계산’합니다.
  • arguments :

  • account (string, optional) : DEPRECATED(account라는 파라미터 이름은 dummy로 변경, deprecatedrpc=accounts로 인자가 지정되지 않는 경우, * 문자열로 설정해야 한다. )
  • count (numeric, optional, default=10) 반활할 트랜잭션수
  • skip (numeric, optional, default=0) 건너뛸 트랜잭션수
  • include_watchonly (bool, optional, default=false) 보기 전용 주소에 대한 거래를 포함함.

  • result : count, address, label, fee, blockhash 등에 대한 json array 형식으로 반환
  • ex : bitcoin-cli listtransactions "*" 20 100

    [ { “account”: “7ebffe5e33d2455daaa246d65fb2dedd”, “category”: “move”, “time”: 1512092220, “amount”: -0.10000000, “otheraccount”: “evatransaction”, “comment”: “” }, … ]

move(DEPRECATED)

  • move "fromaccount" "toaccount" amount ( minconf "comment" )
  • replace : no replacement
  • return : 지갑의 한 계좌에서 다른 계좌로 지정된 금액을 이동.
  • arguments :

  • fromaccount (string, required) 자금 이동을 위한 계좌의 이름. ““를 이용해 default 계좌 이용.
  • toaccount (string, required) 자금을 이전할 계좌의 이름. ““를 이용해 default 계좌 이용.
  • amount (numeric) 계정간 이동하는 btc의 양.
  • (dummy) (numeric, optional) ingnore.
  • comment (string, optional) 지갑에만 저장되는 선택적 주석.

  • result : true / false : (boolean) 성공적이라면 true 반환.
  • ex : bitcoin-cli move "timotei" "akiko" 0.01 6 "happy birthday"

    true

sendfrom(DEPRECATED)

  • sendfrom "fromaccount" "toaddress" amount ( minconf "comment" "comment_to" )
  • replace : sendtoaddress 사용.
  • 금액을 계정에서 비트코인 주소로 보낸다.
  • walletpassphrase 호출로 지갑 암호를 설정해야한다.
  • arguments :

  • “fromaccount” (string, required) 송금할 계좌 이름
  • “toaddress” (string, required) 자금을 보낼 비트코인 주소.
  • amount (numeric or string, required) btc 금액.
  • minconf (numeric, optional, default=1) 최소한의 확인이 필요한 자금만 사용.
  • “comment” (string, optional) 거래가 저장되는 데 사용되는 주석.
  • “comment_to” (string, optional) 트랜잭션을 전송할 사람 또는 조직의 이름을 저장하기 위한 선택적 주석.

  • result : “txid” (string) 거래 id

    ex : bitcoin-cli sendfrom "tabby" "1M72Sfpbz1BPpXFHz9m3CdqATR44Jvaydd" 0.01 6 "donation" "seans outpost"

sendmany

  • sendmany "fromaccount" {"address":amount,...} ( minconf "comment" ["address",...] replaceable conf_target "estimate_mode")
  • return : 여러 번 보낸다. 양은 두배 정밀도 부동 소수점 숫자이다.
  • arguments :

  • “fromaccount” (string, required) DEPRECATED. 송금할 계좌. 디폴트 계정은 ““로 표기.
  • “amounts” (string, required) 주소와 계정을 가지는 json object

    { “address” : amount } (numeric or string) 비트코인 주소는 키, btc의 숫자값(string일 수도 있음)은 값.

  • minconf (numeric, optional, default=1) 최소한 여러번 확인된 잔액만 사용.
  • “comment” (string, optional) 주석
  • subtracfeefrom (array, optional) 주소들의 json array. 수수료는 선택한 각 주소의 금액에서 똑같이 공제된다.

    “address”, … subtract fee

  • replaceable
  • conf_target
  • “estimate_mode” (“unset”, “economical”, “conservative”)

  • result : “txid” (string) send의 트랜잭션 id. 주소 수에 관계 없이 단 하나의 트랜잭션만 생성.

    ex : bitcoin-cli sendmany "" "{\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XX\":0.01,\"1353tsE8YMTA4EuV7dgUXGjNFf9KpVvKHz\":0.02}" 1 "" "[\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XX\",\"1353tsE8YMTA4EuV7dgUXGjNFf9KpVvKHz\"]"

sendtoaddress

  • sendtoaddress "address" amount ( "comment" "comment_to" subtractfeefromamount replaceable conf_target "estimate_mode")
  • return : 주어진 주소로 금액을 보내기
  • result : “txid” (string) 트랜잭션 id

validateaddress “address”

  • 주어진 비트 코인 주소에 대한 정보를 반환.

listunspent

  • listunspent ( minconf maxconf ["addresses",...] [include_unsafe] [query_options])
  • return : 미확정된 트랜잭션 출력의 배열을 반환(minconf와 maxconf (포함) 확인 사이).

getwalletinfo

  • 지갑 상태 정보를 포함하는 객체를 반환한다.

    Result: { “walletname”: xxxxx, (string) the wallet name “walletversion”: xxxxx, (numeric) the wallet version “balance”: xxxxxxx, (numeric) the total confirmed balance of the wallet in BTC “unconfirmed_balance”: xxx, (numeric) the total unconfirmed balance of the wallet in BTC …. }

createrawtransaction

  • createrawtransaction [{"txid":"id","vout":n},...] {"address":amount,"data":"hex",...} ( locktime ) ( replaceable )

  • 주어진 입력을 소비하고 새로운 산출물을 생성하는 트랜잭션을 생성.
  • 출력은 주소 또는 데이터 일 수 있다.
  • 16 진수로 인코딩 된 원시 트랜잭션을 반환.
  • 트랜잭션의 입력은 서명되지 않았으며 지갑에 저장되거나 네트워크로 전송되지 않는다.

    Result: “transaction” (string) hex string of the transaction

signrawtransaction

  • signrawtransaction "hexstring" ( [{"txid":"id","vout":n,"scriptPubKey":"hex","redeemScript":"hex"},...]["privatekey1",...] sighashtype )`
  • 원시 트랜잭션에 대한 입력 서명 (serialized, hex-encoded).
  • 두번째 인자값(null일 수 있음.) : 이 트랜잭션에 의존하지만 아직 블록체인에 없을 수 있는 이전 트랙잭션 출력의 배열.
  • 세번째 인자값(null일 수 있음.) : 값이 주어진 경우, 트랜잭션 서명에 사용되는 유일한 키가 될 base58 인코딩의 private key 배열.

sendrawtransaction

  • sendrawtransaction "hexstring" ( allowhighfees )
  • 원시 트랜잭션 (직렬화, 16 진수 인코딩)을 로컬 노드 및 네트워크에 제출한다.
  • createrawtransactionsignrawtransaction 호출도 참조

walletpassphrase

  • walletpassphrase "passphrase" timeout
  • walletpassphrase RPC는 표시된 초 수 동안 지갑 암호 해독 키를 메모리에 저장한다.
  • Wallet이 이미 잠금 해제되어있는 동안 walletpassphrase 명령을 실행하면 이전 잠금보다 새로운 잠금 해제 시간이 설정된다.

Multisignature 개념

  • 다중서명을 통해 보안성을 높인다.
  • 여러개의 개인키를 발행하고, 이들이 모두 있어야만 가상계좌에 저장된 비트코인을 사용할 수 있도록 함.
  • 한 개의 금고에 여러 개 좌물쇠를 걸어놓고, 모든 좌물쇠를 열어야만 금고를 열 수 있는 것과 같은 원리.

Multisignature

createmultisig

  • createmultisig nrequired ["key",...]
  • m키의 n개의 서명이 필요한 다중 서명 주소를 만든다.(Creates a multi-signature address with n signature of m keys required.)
  • return : 주소와 redeemScript를 가진 json객체를 반환한다.

addmultisigaddress

  • addmultisigaddress nrequired ["key",...] ( "account" )
  • nrequired-to-sign 다중 서명 주소를 지갑에 추가.
  • 각 키는 Bitcoin 주소 또는 16 진수로 인코딩 된 공개 키 이다.
  • ‘account’가 지정되면 (DEPRECATED) 주소를 해당 계정에 할당.
  • account를 label로 지정. 만약’-deprecatedrpc=accounts’로 인자를 지정한다면, 호환성을 고려한다.

그 외 나머지…

< Blockchain 부분 >

getbestblockhash

  • return : 가장 긴 블록체인에서 가장 top 블록의 해시

getblock

  • getblock "blockhash" ( verbosity )
  • return : 블록 체인 처리와 관련하여 다양한 상태 정보를 포함하는 객체를 반환

getblockchaininfo

  • return : 블록 체인 처리와 관련하여 다양한 상태 정보를 포함하는 객체를 반환.

getblockhash height

  • return : height값에 따른 getblockhash 리턴
  • 제공된 블럭 높이에서 가장 좋은 블럭 체인의 블럭 해시를 반환.

getblockheader

  • getblockheader "hash" ( verbose )
  • verbose = false : 블록 헤더 해시에 대해 16진수로 인코딩된 직렬화 문자열 반환.
  • verbose = true : 블록 헤더 <해시>에 대한 정보가 있는 object를 반환한다.

getchaintips

  • return : 메인 체인과 orphaned braches를 포함한, 블록 트리에 대해 알려진 모든 팀에 대한 정보 반환.
  • result :

    { “height”: 1277367, “hash”: “000000000002121d27d63fc5a4ea958d74613c72ed952c73c2e318b01021cc8d”, “branchlen”: 1, “status”: “valid-fork” }, …

getchaintxstats

  • getchaintxstats ( nblocks blockhash )
  • return : 체인의 총 트랜잭션 수와 속도에 대한 통계 계산.
  • result :

    { “time”: xxxxx, (numeric) The timestamp for the statistics in UNIX format. “txcount”: xxxxx, (numeric) The total number of transactions in the chain up to that point. “txrate”: x.xx, (numeric) The average rate of transactions per second in the window. }

getdifficulty

  • 최소 작업 난이도의 배수로 작업 증명 난이도 반환.

getmempoolancestors

  • getmempoolancestors txid (verbose)
  • return : txid가 mempool에 있으면 모든 in-mempool 조상을 반환.
  • mempool? : 비트코인 거래를 하기 위해 트랜잭션을 생성하고, 각 노드들에 해당 트랜잭션을 전파한다. 각 노드는 해당 트랜잭션이 유효한 거래인지 검증 후 ‘검증된’ 트랜잭션을 mempool에 업데이트 하게 된다.

    mempool은 아직 거래가 성립되지 않은, 즉 0 컨펌 상태의 트랜잭션들이 저장되는 공간.

getmempooldescendants

  • getmempooldescendants txid (verbose)
  • txid가 mempool에 있으면 모든 mempool 하위 항목을 반환.

getmempoolentry

  • getmempoolentry txid
  • return : 주어진 트랜잭션에 대한 mempool 데이터를 반환.

getmempoolinfo

  • returns : TX 메모리 풀의 활성 상태에 대한 세부 정보를 반환.
  • result :

    { “size”: 9, “bytes”: 2694, “usage”: 13824, “maxmempool”: 300000000, “mempoolminfee”: 0.00000000 }

getrawmempool ( verbose )

  • return : 메모리 풀에 있는 모든 트랜잭션 id를 스트링의 json array 의 트랜잭션 id들을 반환.
  • hint : getmempoolentry를 사용하여 mempool에서 특정 트랜잭션을 가져옵니다.
  • result :

    bitcoin-testnet~$ bitcoin-cli getrawmempool [ “6fa1e740cdc6fe6b34a2f55dd5acee79dfa2e57e2e1007a9553bf6a2904a4028”, “cdf22cf76c6c6f38b13490d614d7843ad187408267191755091a644fb00fab0b” ]

gettxout “txid” n ( include_mempool )

  • return : 사용되지 않은 트랜잭션 출력에 대한 세부 정보를 반환.

gettxoutproof “txid”,…

  • return : txid가 블록에 포함된 16진수로 인코딩 된 증명을 반환.

gettxoutsetinfo

  • return : 사용되지 않은 트랜잭션 출력 세트에 대한 통계를 리턴. 이 call은 다소 시간이 걸릴 수 있다.

preciousblock “blockhash”

  • return : 동일한 작업으로 다른 블록보다 먼저 수신 된 것처럼 처리한다. 나중의 preciousblock 호출은 이전 호출을 무시. preciousblock의 효과는 다시 시작될 때까지 유지 되지 않는다.

pruneblockchain

  • result : (numeric) 마지막 블록의 높이를 잘라낸다.

verifychain ( checklevel nblocks )

verifytxoutproof “proof”

getmemoryinfo (“mode”)

  • return : 메모리 사용에 관한 정보를 포함한 object 반환.

    { “locked”: { “used”: 66784, “free”: 260896, “total”: 327680, “locked”: 65536, “chunks_used”: 2087, “chunks_free”: 2 } }

stop

  • 비트코인 서버를 중지.

uptime

  • return : 서버의 전체 가동 시간을 반환.

== Generating ==

generate nblocks ( maxtries )

  • 최대 nblocks 블록을 rpc 호출이 반환되기 전에 즉시 지갑의 주소로 보낸다.

generatetoaddress nblocks address (maxtries)

  • RPC 호출이 반환되기 전에 지정된 주소로 즉시 블록한다.

Mining 부분

getblocktemplate ( TemplateRequest )

  • return : 작업할 블록을 만드는데 필요한 데이터를 반환.

getmininginfo

  • return : 마이닝 관련 정보를 담고있는 json 객체.

getnetworkhashps ( nblocks height )

  • return : 마지막 n 블록을 기준으로 초당 예상 네트워크 해시를 반환합니다.

prioritisetransaction

  • 더 높은(또는 더 낮은) 우선 순위의 마이닝된 블록으로 트랜잭션을 허용.

submitblock “hexdata” ( “dummy” )

  • 네트워크에 새 블록을 제출하려고 시도.

== Network ==

addnode “node” “add|remove|onetry”

  • addnode목록에서 노드를 추가하거나 제거하려고 시도. 또는 노드에 한 번 연결을 시도.

clearbanned

  • 금지된 ip를 모두 지운다.

disconnectnode “[address]” [nodeid]

  • 즉시, 지정된 피어 노드에서 연결을 끊는다.
  • 엄밀히 말하면 ‘주소’와 ‘노드id’중 하나가 노드를 식별하기 위해 제공될 수 있다.
  • nodeid로 연결을 끊으려면 ‘address’를 빈문자열로 설정하거나 명명된 ‘nodeid’인수만 사용하여 호출한다.

getaddednodeinfo ( “node” )

  • return : 주어진 추가된 노드 또는 모든 더해진 노드에 대한 정보 반환(onetry addnodes 는 여기에 추가되어 있지 않음).

getconnectioncount

  • return : 다른 노드에 대한 연결 수를 반환.

getnettotals

  • return : 네트워크 트래픽에 관한 정보를 반환. 여기에는 바이 입력, 바이트 출력, 현재 시간도 포함된다.
  • result :

    { “totalbytesrecv”: 138314310, “totalbytessent”: 11219382, “timemillis”: 1528361212857, “uploadtarget”: { “timeframe”: 86400, “target”: 0, “target_reached”: false, “serve_historical_blocks”: true, “bytes_left_in_cycle”: 0, “time_left_in_cycle”: 0 } }

getnetworkinfo

  • return : p2p 네트워킹과 연관된 다양한 상태 정보가 포함된 object를 반환.

getpeerinfo

  • return : 연결된 각 네트워크 노드에 대한 데이터를 객체의 json 배열로 반환.

listbanned

  • 금지된 모든 ip/서브넷을 나열.

ping

  • ping을 측정하기 위해 다른 모든 노드에 ping을 보내도록 요청. getpeerinfo, pingtime 및 pingwait 필드에서 제공되는 결과는 10 진수 초이다. ping 명령은 다른 모든 명령과 함께 대기열에서 처리되므로 네트워크 ping뿐만 아니라 처리 백 로그를 측정한다.

setban “subnet” “add|remove” (bantime) (absolute)

  • 금지 목록에서 ip/서브넷을 추가하거나 제거하려고 시도.

setnetworkactive true|false

  • 모든 p2p 네트워크 활동을 비활성화/활성화 한다.

Test Scenario

목표 : testnet에서, wkim 계좌를 생성하여 2btc 전송하기.

  1. getblockchaininfo 를 통해 비트코인 네트워크의 노드, 지갑, 잔액 등 블록체인 데이터 베이스 기본 정보 확인.
  2. 최초 getbalance 확인.
  3. getnewaddress wkim 로 새 주소 생성
  4. getbalance wkim 새 계좌 잔고 확인.
  5. sendtoaddress wkim-address-value 2 송금 실행 (리턴값은 txid)
  6. listunspent 0 로 ‘미확정된’ 트랜잭션 확인.
    (발생한 txid, address에 대한 confirmations = 0, 시간이 좀 지난 후(3~5분) 전송이 되면 confirmations = 1로 바뀐다.)
  7. getbalance 송금 후 전체 잔액확인 (기존 잔액 - 송금액).
  8. getbalance wkim 수신 금액 확인.
  9. listunspent 0 로 , txid에 대한 confirmations값이 바뀐걸 확인.
  10. listtransactions 를 통해 방금 이뤄진 트랜잭션 내역을 확인.

check

  • 전체계좌 잔액 :
  • 수신계좌 잔액 :
  • 새 주소값 :
  • 발생한 txid :

180528_TIL

|

…mapGetters([“coinSettings”, “markets”]),

어디서 coinSettings 을 가져와서, 어떻게 데이터를 뿌리는지

이렇게 뿌리고 있는데 잘 모르겠음…

      return [
        { name: '전체', value: 'ALL' },
        ..._.map(this.coinSettings, coin => {
          return {
            name: `${coin.name} (${coin.code})`,
            value: coin.code
          };
        })
      ];
    },
  • 스크립트가 어떻게 돌아가는지를 몰랐었음.
  • 스프링 유레카 : 모니터링 가능하게 함스프링 유레카

blockchain

|

180524_TIL

|

RestTemplate, (exchange, postForObject)

  • responseEntity 오브젝트
  • postForObject : 지정된 객체를 URI 템플릿에 게시하여 새 리소스를 만들고 응답에서 찾은 표현을 반환합니다. URI 템플릿 변수는 주어진 URI 변수를 사용하여 확장됩니다.
  • exchange : 지정된 URI 템플리트에 HTTP 메소드를 실행하고 요청에 주어진 요청 엔티티를 기록한 다음 ResponseEntity로 응답을 리턴합니다. URI 템플릿 변수는 주어진 URI 변수를 사용하여 확장됩니다. 참고

gateway역할

msa

CQRS

vue.js

  • http://vuejs.kr/update/2017/01/08/using-vue-with-vuex-vue-rotuer/

소스 분석시

trade 서버도 어떻게 가는지 찾아보기!.
소스를 따라가다 보면
trade:init 으로 json object를 뿌림
websocket 형태로 실시간 데이터가 처리됨(거래소 거래량 확인)
이게 잡아먹는 데이터량이 엄청남(어떤분 800메가 잡아먹었다고 함. 처리되는 데이터량이 어마어마 하기때문에 cpu사용량 보면 업비트 같은곳 열어보고 확인해보면 사용량이 올라감.)

  • ? websocket 은 web(http)을 이용해서 socket 처럼 통신을 할 수 있게 한 기술입니다. 즉, 서버와 클라이언트의 1:1 통신입니다. 연결이 끊어지면 메세지가 사라진다거나…그런 경우도 있구요. 거기에 비해 STOMP 는 메세지 브로커이다 보니 1:N 의 관계일 수도 있고, 메세지를 서버에 저장해뒀다가 주기적으로 클라이언트가 가져가기도 하고…그런 메세지를 클라이언트에게 전송하기 위한 기술의 집합입니다.

blockchain

|

가상화폐 채굴(CPU, GPU, ASIC)

  • 가상화폐를 채굴하는 방식은 CPU, GPU, ASIC 채굴방식으로 나뉜다.
  • 각각의 채굴방식으로 나뉜다.

기타

  • 폴리글랏
  • NoSQL

채굴(Mining)이란

광산 = 블록체인 네트워크 석탄 = 블록안에 있는 해시 값(hash) 광부 = 해시 값을 구하는 채굴자(miner)

인강 1

  • 블록체인 동작원리(비트코인 기반)
  • genesis (최초값?)
  • data
  • proof of work(sha256)
  • cryptographic hash function

  • sha256 : 입력데이터가 달라짐에 따라 달라짐

-

  1. 개별거래(transaction)는 암호화(cryptography) 매커니즘으로 거래 상대방을 확인. (공개키/비공개키)
  2. 장부(ledger)는 소유주 변동 상황을 기록
  3. 일정한 주기로 일정 수(가령, 2004건)의 새로운 거래를 포함한 새로운 장부를 작성
  4. 누구나 새로운 장부를 작성하고 발표(publish) (가짜 장부가 발생할 수도 있다.)
  5. 새로운 장부로부터 제일 먼저 sha256 코드를 발굴한 사람(miner)이 일정수의 코인을 획득(계속해서 발행한 장부 증가)
  6. 장부 그 자체가 코인

거래 확인?!(5강)

  • 거래를 하기전 아래의 내용을 확인한다.

    1. 상대방이 진짜 자신이 주장하는 사람인가? identity
    2. 정말 그러한 자산을 가지고 있는가? ownership (위조된 장부인지 아닌지?) 이게 sha256 메커니즘
  • sha256은 해시코드 구글 이미지
  • reverse engineering은 불가능하다.
  • sha256은 쉽게 만들수 있다. 그것에 대한 안전장치가 필요하다.

public-key, private-key 두개 생김.

장부 위조를 방지하는 방어벽

  1. 첫번째 방어벽. 가령, data에 어떤 숫자를 추가해서, 맨 앞에 0이 30개가 포함된 sha256을 생성시킴. 이렇게 하면 마이닝은 그 어떤 숫자를 찾는 단순 반복 작업이 된다(삽질 또는 연필굴리기의 노력이 필요함.)

  2. 레이싱 메커니즘.(racing)

  • 가짜장부, 진짜 장부를 만드는 사람들이 생기고, 만드는 순간 두 장부사이의 레이싱이 생김
  • 하지만 이길 수 없는 구조라 방어벽을 깰 수 없다.

발행 코인의 수량

  • 첫 21만개 블럭의 마이너에게 50코인씩 지급, 매 21만 블럭마다 지급 코인을 1/2로 줄임. ==> 210000(50+25+12.5+…) = 21,000,000 블럭 생김
  1. 처음 시작한 사람 및 그룹의 막대한 이득 => 새로운 코인의 등장(2017년 12월 현재 1500종 이상) (경쟁자도 많아지고 암호도 점점 어려워 지기 때문에)
  2. miner(또는 거래소)에 수수료 지급. (거래는 계속 이루어 질 수 있다.)

채굴 난이도 조절 매커니즘

  1. 너무 쉬우면 위변조의 위험성이 있다.
  2. 너무 어려우면 새 장부를 업데이트 하는데 의미가 없다.
  3. 마이닝 10분 기준…(비트코인보다는 거의 다 작다.)
  4. 스스로 동작함.
  • moving average method

출처