반응형


geth서버와 안드로이드 연동 / geth android 연동 / 안드로이드 / android / 트랜젝션 / geth trasaction data / android studio






안녕하세요. 이번 포스팅은 이전의 geth 서버를 안드로이드 스튜디오를 활용하여 사용하는 방법에 대해 알려드리겠습니다.

해당 부분은 올해 초에 처음 접하면서 공부를 했는데요.

어렵고 힘들었던 건 구글링을 해봐도 원하는 정보가 잘 나오지 않으며, 막상 찾았더라도 활용 측면에서 모르는 부분이 많아 어려웠습니다. ㅠㅠ

정말 정말 너무 어려워서 이런 부분에 대해 막히시는 분들을 위해 포스팅하게 되었습니다.

이쪽 관련하여 준비하시는 분들이라면 좋은 정보라 생각합니다.



포스팅에 앞서 안드로이드 스튜디오가 있다는 가정 하에 작성되었음을 알려드립니다.

혹여나 설치를 하셔야 하는 분들은 다음 링크를 통해 설치를 하시면 되겠습니다.

이번 포스팅 주제는 geth서버와 안드로이드 연동이지, 안드로이드 스튜디오 설치에 대한 주제가 아니기에 각종 설정들은 개인이 해주시면 감사하겠습니다.



https://developer.android.com/studio/?hl=ko






이제 준비는 끝이 났으니 포스팅 시작하겠습니다.



우선 geth 서버를 열어두고 시작하겠습니다.

명령어에 관한 설명은 이전 포스팅에 되어 있으니 참고하시고, 현재 필요한 명령어만 사용하겠습니다.



$ geth --datadir "경로" --identity "이름" --rpc --rpcaddr "IP" --rpcport "포트번호" --rpccorsdomain "*"  --port "30303" --nodiscover --rpcapi  "db,eth,net,web3,personal" --networkid 1818 --mine console




중요


안드로이드 스튜디오에서 사용할 것들은 IP와 포트번호입니다.


$ geth --datadir "경로" --identity "이름" --rpc --rpcaddr "192.168.0.2" --rpcport "8545" --rpccorsdomain "*"  --port "30303" --nodiscover --rpcapi  "db,eth,net,web3,personal" --networkid 1818 --mine console


다음과 같이 서버를 열었을 때를 예시로 들어 알려드리겠습니다.

또한, 처음 생성된 계좌를 admin으로 정하였다는 가정 하에 작성되어 있습니다.


(본인의 환경에 맞추어 작성하셔야 합니다.)



//서버 주소 및 포트번호

private String URL = "192.168.0.2:8545";


Web3j web3 = Web3jFactory.build(new HttpService(URL)); // defaults to http://localhost:포트번호/
Admin admin = AdminFactory.build(new HttpService(URL));


//계좌 정보 불러오기
EthAccounts ethAccounts = web3.ethAccounts().sendAsync().get(); //등록계좌정보
String accounts[] = ethAccounts.getAccounts().toArray(new String[0]);


//첫번째 계좌 락 해제
PersonalUnlockAccount personalUnlockAccount

= admin.personalUnlockAccount(accounts[0],"admin").sendAsync().get();


여기서 락을 해제하는 것은 트랜젝션을 발생시키기 위해서는 락을 해재한 후에 하여야 하기에 그렇습니다.

(이전 포스팅 참고 : https://goodplayer.tistory.com/9 )





String message = "message";

Transaction transaction = Transaction.createFunctionCallTransaction(
accounts[0],      //from
null, null, null, // nonce, gasPrice, gasLimit
accounts[1],     //to
null,             // value

toHex(message));    // data


우선 보낼 데이터를 작성하여 message라는 변수를 이용하였습니다.

주석에 적힌 것과 동일하게 차례대로 from, nonce, gasPrice, gasLimit, to, value, data 순으로 파라미터가 구성되어 있습니다.

(해당 소스 코드에 대한 내용은 아래에 링크해두겠습니다.)

트랜잭션 시 첫번째 계좌에서 두번째 계좌로 트랜잭션이 발생하도록 하였고, data 전송이 목적이기에 나머지 값들은 null로 지정하여 전송하였습니다. null로 하여도 무방합니다.

// string to hex
public String toHex(String arg) {
return String.format("%x", new BigInteger(1, arg.getBytes()));
}

해당 소스는 data 값이 hex값으로 저장되어야 하기에 string 값을 hex 값으로 변환해주는 코드입니다.




//트랜잭션 발생 및 트랜잭션 해시 저장
EthSendTransaction ethSendTransaction = web3.ethSendTransaction(transaction).sendAsync().get();
hash = ethSendTransaction.getTransactionHash();



EthSendTransaction을 통해 트랜잭션을 발생시키고, 이에 해당하는 해시 값을 저장할 수 있습니다.




안드로이드에서 geth 서버를 연동시켜 트랜잭션을 발생시키는 방법에 대해 알아보았는데요.

현재 소스 코드는 핵심 부분만 가져온 것이라 본인의 환경에 맞추어 작성하셔야 합니다.


전반적인 코드들은 아래의 사이트를 참고하여 작성되었습니다.

외국 사이트라 이해하는데 많은 어려움이.....



https://github.com/web3j/web3j





geth서버와 안드로이드 연동이 필수인 상황이여서 위의 결과물을 얻어내는 데에는 정말 3주 정도 걸린 거 같습니다.

저의 실력이 부족한 부분도 있었지만 정말 그 당시 정보가 턱없이 부족했습니다. ㅠㅠ

다행히도 이에 대한 해결 방법을 찾아내어 좋은 결과물을 만들어 냈습니다.

안드로이드뿐만아니라 웹을 통해서도 가능하니 무궁무진한 개발이 가능할 것으로 예상됩니다.

아이디어만 있다면 충분합니다. 



이상 이더리움의 geth 서버와 안드로이드 연동에 대한 포스팅을 마치겠습니다.

이상한 부분이나 질문있으시면 댓글로 남겨주시면 감사하겠습니다.^^





ps.

안드로이드와 geth 서버를 이용하여 모바일 투표 시스템을 개발하였는데, 기술적인 측면에서 나름 선방한 거 같습니다. 

디자인은 고려하지 않아서 ㅎㅎ














반응형
반응형


[Ethereum] - geth 명령어 및 채굴 / 이더리움 / 블록체인 / Ethereum / Blockchain / 채굴 / geth / 서버 구축







안녕하세요. 저번 포스팅에 이어 geth 명령어와 채굴에 대해 포스팅 하겠습니다.

geth 명령어는 매우 많기에 주로 쓰이는 것만 제가 간단히 소개해드리고, 필요한 부분은 공식 사이트나 github에 정리가 되어있기에 해당 사이트에 대해 링크를 올려두겠습니다.




1. geth 명령어

1-1. 자주 쓰이는 명령어

1-2. 공식 사이트


2. 채굴

2-1. 채굴이란?

2-2. 채굴






1. geth 명령어

1-1. 자주 쓰이는 명령어



여기서 자주 쓰이는 명령어는 제가 실습을 통해 자주 사용되거나 필요로 느끼는 부분들로 정리하였으며, 기타 타 블로그나 사이트에서도 주로 언급되는 명령어들로 정리하였습니다. 

(개인적인 주관이 들어간 부분이니 필요 부분만 챙겨가시고, 부족한 부분은 공식 사이트를 통해 얻어 가시길 바랍니다.)



현재 서버가 작동 중이며, 서버의 명령어를 입력하는 상태임을 알려드립니다.




personal.newAccount("이름") : 계좌 생성.



eth.accounts : 현재 등록된 계좌 확인.



첫 두개는 저번 포스팅 때 생성한 계좌이고, 세번째 계좌는 방금 전 생성된 계좌입니다.



miner.setEtherbase(personal.listAccounts[0]) : 채굴 시 보상 받는 계정.

(coinbase라고도 함)



첫 계좌에 정상적으로 실행된 것을 확인할 수 있습니다.




eth.getBalance(eth.accounts[0]) : 계정 잔액 조회.

(계좌가 순서대로 저장되어 있기에 [n]에 해당하는 n번째 계좌를 입력하시면 됩니다.)



저번 포스팅때 이 정도의 wei를 입금해둔 상태이기에 초기에 이 정도의 잔액이 존재합니다.

조회 시 그림과 같이 wei 단위로 표시되고 있는데 이를 ether 단위로 변환하여 출력할 수 있습니다.


web3.fromWei(eth.getBalance(eth.coinbase), "ether")

(coinbase : 현재 지정된 보상을 받는 계정. 채굴 시 보상 받는 계정입니다.)





eth.blockNumber : 생성된 블록 수 조회.




eth.getBlock(0) : 0번째 블록의 정보 출력.









personal.listWallets[0].status  : 계정의 상태를 출력. Locked or Unlocked.




계정의 Locked 해제 방법에는 여러개가 있는데 그 중 3가지 정도만 알려드리겠습니다.


web3.personal.unlockAccount(eth.coinbase)


web3.personal.unlockAccount(eth.coinbase, "계정명") 


personal.unlockAccount("주소")




다음과 같이 계정의 Locked가 해제되었습니다.



계정의 상태는 트랜젝션을 위해 필요합니다.

트랜젝션은 계좌 간의 거래인데 이때 Locked 상태이면 트랜젝션이 발생할 수 없기 때문에 해제를 우선적으로 해야 합니다.




eth.pendingTransactions : 처리해야 할 트랜젝션 목록.




현재 아무런 트랜젝션이 없기 때문에 공백으로 나타납니다.



eth.sendTransaction({from:eth.accounts[0], to:eth.accounts[1], value:web3.toWei(2,'ether'),data:web3.toHex("send messge")})

: 트랜젝션 명렁어. (from : 누가, to : 누구에게, value : 전송할 금액, data : 전송할 메세지)


현재 명령어는 첫번째 계좌가 두번째 계좌에게 2이더와 "send message"라는 데이터를 같이 전송하겠다 라는 명령어입니다.





트랜젝션 발생으로 트랜젝션에 해당하는 해쉬가 생성됩니다.

이 해쉬에 대한 정보는 다음과 같이 트랜젝션 목록에서 확인이 가능합니다.

(eth.getTransaction("해쉬")

input = data, value = 전송할 금액을 확인할 수 있습니다.




자주 쓰이는 명령어는 이 정도로 정리를 마치고, 공식 사이트에 대해 알려드리겠습니다.

(채굴에 관한 부분은 아래에 이어서 포스팅됩니다.)






2-2. 공식 사이트




https://github.com/ethereum/wiki/wiki/JavaScript-API



해당 사이트는 github에 wiki에 명령어에 대한 대부분의 설명이 기입되어 있습니다.

장점이 원시 소스 코드도 같이 확인을 할 수 있어 쉽게 이해할 수 있습니다.

(소스 코드이해는 전공자들에 한해서 입니다. ㅠㅠ)





https://web3js.readthedocs.io/en/1.0/web3-eth.html




해당 사이트는 web3js와 연동하여 geth에 관련된 명령어들이 정리되어 있습니다.

geth자체서버에서 구동하는데에 관련된 자료와 웹 서버의 코드에서 실행 가능하도록 명령어가 구성되어 있습니다.








2. 채굴

2-1. 채굴이란?



채굴 혹은 마이닝이라 불리는데 블록 체인 서버 내의 블록이 계속해서 생성되는데, 이 블록에 해당하는 해시를 찾아내는 작업을 채굴이라 합니다. 이에 대한 보상으로 코인을 지급하며 채굴의 난이도가 높아지거나 블록의 수가 많아질수록 블록에 대한 해시를 찾아내는데 많은 시간이 걸리기에 코인의 가치는 상승하게 됩니다.



ps.

블록에 대한 해시를 찾아낼 경우 해당 블록에 대한 정보 즉, 트랜젝션을 알 수 있습니다. 

따라서 51% 공격이라 하여 모든 블록의 51%이상의 해시를 얻어내면 공격이 가능하다는 공격 기법이 있습니다.


코인이 큰 가치가 있다 보니 채굴기에 대한 영향력도 커졌습니다.

이로 인해 많은 채굴기가 발생하였고, 많은 사람들이 채굴에 뛰어들어 큰 파장을 일으키기도 했습니다.

올해 초부터 망해가고 있지만.....






2-2. 채굴


geth 서버에서 채굴을 해보도록 합시다.


miner.start(n) : 채굴 시작. n은 쓰레드 개수를 의미합니다.



miner.stop() : 채굴 종료.


eth.mining : 채굴 여부 확인. true or false.







이상으로 geth 명령어 및 채굴에 대한 포스팅은 끝이 났습니다.

다음 포스팅으로는 안드로이드를 이용하여 geth 서버에 접속한 후 트랜젝션을 발생 시켜 보도록 하겠습니다.

즉, 모바일을 통해 생성된 정보들이 블록 체인에 저장되어 좀 더 안정된 정보를 가질 수 있다고 생각합니다.



전공자 입장에서도 생소하고 어려운 부분들이 많습니다.

천천히 따라오시면 좋은 성과가 있을 거라 생각합니다.


궁금하거나 이상한 부분이 있으면 댓글 달아주세요!!









반응형
반응형

[Ethereum] - geth 명령어 및 채굴 / 이더리움 / 블록체인 / Ethereum / Blockchain / 채굴 / geth / 서버 구축






안녕하세요. 이번 포스팅은 이전 포스팅에 이어 geth 사용법에 대해 알아 보도록 하겠습니다.

이전 포스팅이 geth 서버 구축을 통해서 private 망을 구성하는 것까지 하였습니다.

이어서 구축된 서버에서 필요한 명령어들과 제네시스 블록을 통한 계정 및 채굴에 대해 알아보도록 하겠습니다.





1. geth 구축

1-1. 계좌 생성

1-2. genesis 생성






1. geth 구축

1-1. 계좌 생성




우선 다음 명령어로 서버를 실행시키도록 하겠습니다.



$ geth --datadir "경로" --identity "이름" --rpc --rpcaddr "IP" --rpcport "포트번호" --rpccorsdomain "*"  --port "30303" --nodiscover --rpcapi  "db,eth,net,web3,personal" --networkid 1818 --mine console




정상적으로 입력하였다면 다음과 같은 오류를 보실 수 있으실 겁니다.





오류가 발생하는 것이 정상입니다.

(오류가 발생하지 않는다는 것은 이전에 geth실행 데이터가 남아 있기 때문입니다. 초기 실행 시 나타나지 않습니다.)



맨 처음 해야 할 것은 계좌를 생성하는 것입니다. 

계좌 생성 명령어는 다음과 같습니다.



$ geth --datadir 경로 account new


(ex. $ geth --datadir /home/goodple/test/blockchain account new)



해당 명령어 실행 시 다음과 같은 화면을 보실 수 있습니다.




암호를 입력하시면 밑에 Address로 계좌에 대한 해쉬를 얻을 수 있습니다.

(Passphrase : 부분을 입력할 때 창에 아무것도 입력이 되지 않으니 당황하지 마시고 입력하시면 됩니다.)




저는 총 두 번을 통해 계좌를 2개 생성하였습니다.




admin과 goodple 이라는 두 개의 계좌를 통해 이후 서로 간의 트랜젝션을 보여드릴 예정입니다.

우선 계좌 생성은 이렇게 마쳤고, 다음은 해당 계좌에 적당한 Ether(돈)을 넣어 줄 계획입니다.





1-2. genesis 생성


genesis.json이라 하여 초기 블록 생성을 통해 지정된 계좌에 돈과 블록에 대한 채굴 난이도 등을 설정할 수 있도록 하는 것입니다.

다음은 이에 해당하는 코드입니다.




{

    "config": {

        "chainId": 15,

        "homesteadBlock": 0,

        "eip155Block": 0,

        "eip158Block": 0

    },

    "difficulty": "200000000",

    "gasLimit": "2100000",

    "alloc": {

        "0xa88c497de1dd973ab119315131a3546f8eb493b0": { "balance": "300000000000000000000" },

        "0x49ab41363d4e08a29fae7b6e560650ceafff0e39": { "balance": "100000000000000000000" }

    }

}




chainId : 네트워크 상에서 각각의 망을 식별하는 식별자 입니다.


homesteadBlock : 이더리움의 두 번째 메인 릴리즈를 사용하기 위한 속성입니다.


eip155 : gas 비용에 관련된 하드포커 설정입니다.


eip158 : state cleaning 관련 설정입니다.


현재 모든 값이 0으로(false) 되어 있는데 사용하지 않겠다는 의미입니다. 

(config의 경우 이더리움 속성 설정이기에 기본 값으로 해두시면 되겠습니다.)


difficulty : 채굴 난이도 입니다.


gas limit : 한 블록에 가능한 gas 수치입니다.

(당연히 많으면 많을 수록 한 블록에 담을 수 있는 거래가 많아져 유용합니다.)


alloc : 생성된 계좌에 Ether를 입금시키는 것입니다.



소스 코드에 대한 자세한 내용은 다음의 링크에서 확인하실 수 있습니다.



(https://github.com/ethereum/go-ethereum/blob/eaff89291ce998ba4bf9b9816ca8a15c8b85f440/params/config.go#L104)





소스 코드에 대한 간략한 설명은 끝이 났습니다.

저희가 필요한 부분은 alloc 부분입니다.



 "0xa88c497de1dd973ab119315131a3546f8eb493b0": { "balance": "300000000000000000000" }



"계좌의 해쉬 값" : { "balance" : "입금할 금액"}



앞서 생성한 계좌의 해쉬 값을 넣어 자신이 원하는 만큼의 금액을 넣어주면 됩니다.

이때 금액의 단위는 wei로서 1 wei * 10^18 = 1 ether 입니다.



(출처 : http://ethdocs.org/en/latest/ether.html)




소스 코드를 자신의 코드로 변경하신 후 저장합니다.

저장 파일명은 genesis.json으로 해주시면 되겠습니다.

(파일명은 원하시는 것으로 해도 되지만, 이후 설명을 위해 고정 시키도록 하겠습니다.)




이제 초기 블록을 생성하고 등록된 계좌에 돈을 입금하기 위해 앞서 만든 json파일을 실행시키도록 하겠습니다.


$ geth --datadir geth 서버 경로 init genesis 경로/genesis.json 


(ex. $ geth --datadir /home/goodple/test/blockchain init /home/goodple/test/blockchain/genesis.json )




정상적으로 해당 genesis.json 파일이 실행된 것을 확인할 수 있습니다.




만약에


다음과 같은 오류가 발생한다면 




현재 geth 서버에 대한 데이터가 있기 때문에 발생하는 오류이므로, 초기 설정이기에 geth 서버에 관한 데이터를 모두 삭제하신 후에 계좌 생성부터 다시 시작하시면 됩니다.




모든 준비가 끝이 났으니 서버를 가동시켜 보겠습니다.



$ geth --datadir "경로" --identity "이름" --rpc --rpcaddr "IP" --rpcport "포트번호" --rpccorsdomain "*"  --port "30303" --nodiscover --rpcapi  "db,eth,net,web3,personal" --networkid 1818 --mine console




정상적으로 실행된 것을 확인할 수 있습니다.








서버 내에서 사용되는 명령어와 채굴에 대한 내용은 다음 포스팅으로 미루어야 할 거 같네요. ㅠㅠ

자세히 설명하다 보니 길이 길어져서 나눠야겠습니다.



이상 이번 포스팅은 마치겠습니다.

다음 포스팅은 geth 명령어와 채굴에 대해 포스팅 해보도록 하겠습니다.















반응형
반응형


[Ethereum] - geth 서버 구축 / 이더리움 / 블록체인 / Ethereum / Blockchain / 채굴 / geth / 서버 구축








안녕하세요 이번 포스팅은 이더리움의 Geth를 이용하여 Private 망을 구성해보겠습니다.

포스팅에 앞서 서버의 환경은 다음과 같습니다.



Ubuntu 16.04 (Virtual box)






1. go 설치



2. geth

2-1. geth 설치

2-2. geth 실행









1. go 설치




공식 사이트는 다음과 같습니다.



https://golang.org/dl/




해당 사이트에 접속하여 직접 다운로드를 하셔도 되고, 아래의 명령어를 통해 설치를 하셔도 무방합니다.

다음은 명령어를 통한 설치 방법입니다.



$ sudo apt-get install golang 




만약 해당 명령어가 오류가 발생하거나 설치가 되지 않는다면 다음 명령어를 통해 설치하시기 바랍니다.



$ sudo add-apt-repository ppa:longsleep/golang-backports


$ sudo apt-get update


$ sudo apt-get install golang-go




해당 파일 설치 위치는 /usr/lib/go-1.11.2 에서 확인해 보실 수 있습니다. 

(파일명의 경우 버전에 따라 상이하니 위치만 참고하시길 바랍니다.)



이것으로 go 언어 설치는 끝이 났습니다. 

설치에 관해 문제가 발생하거나 오류가 발생하시면 말씀해주세요.

최대한 해결해 드리겠습니다.






2. geth 

        2-1. geth 설치



geth의 경우 github와 공식 다운로드 사이트를 통해 설치가 가능합니다.

포스팅 기준으로 최신 버전은 1.8.18입니다.



다음은 Go Ethereum의 공식 사이트로서 리눅스, 맥, 윈도우 등 운영체제에 맞춰 설치를 하시면 되겠습니다.



https://geth.ethereum.org/downloads/






다음은 github를 통한 설치입니다.

공식 사이트는 다음과 같습니다.



https://github.com/ethereum/go-ethereum




다음의 명령어를 통해 설치를 합니다.



$ git clone -b release/1.8 https://github.com/ethereum/go-ethereum.git




설치 파일은 보통 터미널 위치에 설치되므로 확인하셔서 설치하시기 바랍니다.

폴더명은 go-ethereum으로 생성됩니다.



설치가 끝이 나면 다음의 명령어를 통해 압축을 풀어줍니다.



$ make geth



이제 모든 설치는 끝이 났습니다.




중요!!


만약 go언어의 버전과 geth 버전이 맞지 않을 경우 geth가 실행되지 않습니다.

따라서 go언어 설치 시 버전을 확인하시고 설치하시기 바랍니다.





다음과 같이 go 버전은 1.7 이상 버전을 사용해야 합니다. 





2-2. geth 실행



실행의 경우 두 가지로 나누어 설명해드리겠습니다.



우선 간단히 실행만 하실 경우 다음과 같은 명령를 사용하시면 됩니다.


$ geth --dev console



해당 명령어를 통해 geth가 정상적으로 작동하는 것을 볼 수 있습니다.

하지만 해당 서버에 대한 아무런 정보가 없기에 geth서버가 돌아가는 것과 명령어는 사용이 가능하지만, 외부의 접속과 데이터 디렉토리에 대한 문제가 발생합니다.



다음은 제가 사용하고 있는 방법 중 하나 입니다.


$ geth --datadir "경로" --identity "이름" --rpc --rpcaddr "IP" --rpcport "포트번호" --rpccorsdomain "*"  --port "30303" --nodiscover --rpcapi  "db,eth,net,web3,personal" --networkid 1818 --mine console



명령어가 상당히 복잡한데 간략히 설명해드리겠습니다.


--datadir "경로" : 해당 경로에 geth에 대한 데이터가 저장되게 됩니다.


--rpc : Remote procedure call의 약자로 원격 프로시저 호출입니다.


--rpcaddr "IP" : IP는 현재 사용 중인 IP를 입력하시면 됩니다.


--rpcport "포트번호" : 포트 번호는 원하시는 것으로 설정하시면 됩니다.


--rpccorsdomain "*" : 접속가능한 RPC 클라이언트 URL를 지정하는 것인데 "*"의 경우 전체 허용입니다. 


--port "30303" : 네트워크의 Listening Port를 지정합니다.


--nodiscover : 같은 제네시스 블록과 네트워크 ID에 있는 블록들이 연결되는 것을 방지합니다.


--rpcapi "db,eth,net,web3,personal" : rpc에 의해 접근 가능한 api(원격을 통해 geth내에서 사용가능한 명령어라고 보시면 됩니다.)


--networkid 1818 : 편하신 것으로 설정하시면 됩니다.


--mine : 채굴을 의미합니다.


--console : 명령어를 통해 실행입니다.



필요한 부분은 경로, 이름, IP, 포트 번호만 개인이 설정하셔서 사용하시면 됩니다. 명령어의 설명은 모르셔도 무방합니다.

(당장 사용하는 데에는 큰 지장이 없습니다. ㅎㅎ)




우선 설치부터 실행까지 모든 과정은 끝이 났습니다.

비 전공자의 입장에서 서버를 구축한다는 것은 매우 힘든 일이죠. ㅠㅠ

최대한 쉽게 설명하기 위해 정리를 해보았는데, 내용이 어렵거나 궁금하신 부분이 있으시면 댓글로 남겨주시면 답변해드리겠습니다. 


이상 이번 포스팅은 마치겠습니다.

다음 포스팅은 구축된 geth 서버를 이용하여 계정 생성과 채굴 등을 다루어 보도록 하겠습니다.






반응형
반응형

[Ethereum] - 블록 체인과 Ethereum이란? / 이더리움 / 블록체인 / Ethereum / Blockchain / 채굴 / geth / 서버 구축









안녕하세요. 이번 포스팅은 블록 체인의 기술 중 하나인 이더리움에 대해 포스팅하려고 합니다.

작년부터 올해 초까지 비트코인으로 떠들썩했던 기술이 바로 블록체인인데요.

블록 체인이 어떤 것인지 그리고 앞으로 포스팅될 내용인 이더리움을 통한 프라이빗 망을 구성하는 방법에 대해 포스팅하겠습니다.




1. 블록 체인

    1-1. 블록 체인이란?

    1-2. 블록 체인의 구조


2. 이더리움

    2-1. 이더리움이란?






1. 블록 체인

    1-1. 블록 체인이란?



  블록 체인은 흔히 말하는 분산 데이터 장부라고 불리며 비트코인에 주로 사용되고 있는데요.

이들은 P2P 방식을 기반으로 생성된 블록들이 체인 형태로 연결되어 있다고 해서 블록 체인이라고 명칭하게 되었습니다.

블록 체인은 모든 블록에 거래 과정 즉, 트랜젝션에 대한 정보가 저장되어 있으며, 누구나 해당 정보를 열람을 할 수 있지만, 변경이 불가능하여 보안성이 뛰어나다고 볼 수 있습니다. 


  흔히 말하는 비트코인은 이러한 블록 체인의 기술을 활용한 사례 중 하나이지, 비트코인 = 블록체인 같은 구조는 아닙니다.




    1-2 블록 체인의 구조



  블록은 계속해서 생성되며 다음과 같은 구조를 띄고 있다고 볼 수 있습니다. 초기 블록이 존재하며 이후 생겨나는 블록은 맨 처음에 이전 블록의 해쉬를 저장하며 가르키는 구조를 가지며, 이후 증명을 할 때 모든 블록의 정보가 일치하는 지를 확인하여 증명하기에 해커의 입장에서 이 모든 블록을 수정한다는 것은 시간적으로 매우 불가능하다 라는 것이 블록 체인의 장점 중 하나 입니다.








  따라서 이를 활용하고 있는 것이 앞서 말했듯이 비트코인입니다. 트랜젝션을 통해 거래 장부를 형성하여 이전의 은행과 같이 중앙형이 아닌 탈 중앙형을 가질 수 있게 됩니다. 거래를 하기 전 모든 블록의 정보를 가져와 해당 거래가 올바른 것 인지에 대해 증명하기에 투명한 거래를 유지할 수 있으며, 자신의 자산에 대한 신뢰성도 가질 수 있게 됩니다.







  포스팅의 주된 내용은 이더리움을 통한 블록 체인 서버 구축이므로 간략히 설명하고 넘어가겠습니다.

좀 더 자세한 내용을 원하시는 분이 많으면 추가적으로 수정하여 포스팅하도록 하겠습니다.







2. 이더리움

2-1. 이더리움이란?



  이더리움은 블록체인 기술을 기반으로 스마트 계약 기능을 구현한 하나의 오픈소스 플랫폼인데요. 흔히 불리는 Ether가 이덜이움의 기술을 토대로 나온 가상화폐입니다. 이더리움은 C++, 자바, 파이썬, GO 등의 언어로 개발되었으며, 해당 플랫폼을 통해 가상화폐뿐만아니라 전자투표, SNS등에 이용되고 있습니다.



  이더리움에 관한 내용은 공식 사이트를 통해 자세히 알아 볼 수 있습니다.



https://www.ethereum.org/




  제가 알려드릴 것은 이더리움의 기술 중 Geth라는 블록체인 서버를 통해 개인 사설 망 (private network)를 통해 개인이 직접 서버를 구축하여, 트랜젝션과 채굴을 통해 블록들이 어떻게 생성되고 쌓이게 되는 지에 대해 알아보는 것입니다.  이들은 거래에 대한 수수료를 Gas를 통해 책정되며, 실제 가상 화폐의 거래와 동일한 구조를 보여주는 좋은 사례가 될 것입니다.



 



이렇게 간략히 블록 체인과 이더리움에 대해 알아보았는데요.

제가 블록 체인을 활용하여 어플리케이션을 만들어 실습한 것을 토대로 작성할 예정입니다.

정보 전달에 있어 미흡한 부분이 있더라도 좋게 봐주셨으면 합니다. 

해당 게시글에 오류나 문제가 있으시면 말씀해주시면 수정하도록 하겠습니다.


구축에 대한 포스팅은 다음 포스팅부터 작성하도록 하겠습니다.



ps.


다음 포스팅에 앞서 해당 서버는 Ubuntu 16.04 버전에 구축하였으며, Geth는 go 언어를 기반으로 하기에 go언어와 geth를 설치하여 작동됨을 미리 알려드립니다.









반응형

+ Recent posts