정말 기초적인 geth 명령어를 사용하여

       블록체인에 데이터 저장하기

 

                    

 

 

앞선 포스팅의 내용을 이어서 작성하겠습니다.

 

 

 

 

사실 이전 포스팅에 있는

 

coinbase 계정을 다 적을 필요는 없습니다.

 

네 

 

낚이셨습니다.

 

성격이 급하신 분들은 급하신 대로 이 글을 보시고 편하게 하실겁니다.

 

geth 에서는 위와같이 아주 편리한 작업이 가능합니다.

 

eth.accounts[0]은 첫번째로 생성된 account를 나타내주고

 

eth.coinbase는 coinbase 계정, 즉 첫번째로 생성된 account를 나타내 줍니다.

 

 

 

 

 

4. 트랜잭션 발생하기( 보내기 )

 

 

 

이제 돈이 충분한 것을 알게 되었으니 

 

간단한 트랜잭션을 발생 해 보겠습니다.

 

 

eth.sendTransaction({

from:eth.accounts[0],

to:eth.accounts[1],

value:'10000000000'

})

 

 

 

ether로 보내고 싶으신 분들은

 

eth.sendTransaction({

from:eth.accounts[0],

to:eth.accounts[1],

value: web3.toWei(1, "ether")

})

 

* gas를 따로 기입해주셔도 되는데 

 

기입을 따로 하지 않을시, 자동으로 gas가 소모됩니다.

 

 

 

 

 

 

위 명령을 통해 트랜잭션을 발생하여 

 

eth.accounts[0] 즉, coinbase 계정에서 

 

eth.accounts[1] 계정으로 

 

10000000000 Wei

 

혹은

 

1 Ether

 

만큼의 balance값을 전송해 줍니다.

 

 

 

 

 

 

 

 

 

 

 

그리고 eth.accounts[1] 계정의 balance값을 확인해 보시면,

 

 

네, 없습니다.

 

아직 트랜잭션 풀에만 등록이 되었고 

 

채굴을 통해 배포되지 않았기 때문입니다.

 

 

 

 

 

 

 

 

 

 

위와 같이 eth.pendingTransactions를 사용해

 

트랜잭션 풀에 저장되어 있는 트랜잭션 정보를 확인 할 수 있습니다.

 

 

 

 

 

이제 채굴을 통해 

 

저 트랜잭션 풀에 위치한 트랜잭션을 채굴 해 봅시다.

 

 

다시 말씀드리지만, --dev 옵션으로 인해 정말 빠른속도로 채굴이 됩니다.

 

--dev옵션 없이 채굴을 진행하시면 몇분이 몇십분이 걸린다는걸 알 수 있습니다.

 

위와 같이 채굴을 통해 트랜잭션 풀에 위치해 있던 트랜잭션을

 

채굴해 내어 eth.pendingTransactions를 통해 확인하시면 

 

[ ] 를 확인하여 채굴 된 것을 알 수 있습니다.

 

 

 

이제 거래가 성사되고 (트랜잭션이 발생하고 이 트랜잭션이 채굴 되고)

 

accounts[1] 계정의 balance를 확인해 보시면

 

 

 

정확히 보낸 값인 10000000000이 보내진 것을 알 수 있습니다.

 

 

 

 

 

 

5. 원하는 데이터를 블록체인에 저장하기

 

 

 

이제 원하는 데이터(문자)를 트랜잭션에 실어 

 

전송해보도록 하겠습니다.

 

 

data 변수에 저장할 문자를 저장합니다.

 

* 굳이 이렇게 저장 할 필요는 없습니다.

 

 

 

 

 

그 뒤, eth.sendTransaction({}) 함수 안의 data에 

 

저장 할 문자를 입력 해 주고 채굴을 해줍니다.

 

직접 기입을 원하시는 분들은

 

  data : "datadatadata" 이렇게 적어주시면 됩니다.

 

*from만 존재해도 transaction은 전송이 됩니다.

 

 

 

 

 

 

 

 

방금 채굴된 트랜잭션의 정보를 확인해 봅시다.

 

먼저 eth.blockNumber로 현재 채굴된 블록의 갯수를 알아봅시다.

 

 

 

아마 저처럼 진행 하셨으면 2개의 블록이 채굴 되었을 겁니다.

 

 

 

 

 

 

그리고 이 블록의 정보를 보시면,

 

 

위와 같은 2번 블록의 정보를 상세히 보실수 있습니다.

 

여기서 보이시는 값중에

 

gasUsed : 90000     // 이 블록을 채굴 시 90000의 가스가 소모 되었다.

 

number : 2            // 2번째로 채굴된 블록이다.

 

transactions : [ ~ ]  // 이 블록안에 있는 트랜잭션들은 ~ 이 있다.

 

등의 상세한 정보를 알 수 있습니다.

 

 

 

 

 

몇번째 블록에 원하는 트랜잭션 존재하는지 알아 냈으니,

 

이제 트랜잭션의 정보를 추출하여

 

저장된 데이터를 불러와 보겠습니다.

 

 

 

 

eth.getTransactionFromBlock( )을 사용해 

 

원하는 트랜잭션이 존재하는 해당 블록의 숫자를 입력해 줍니다.

 

그리고

 

input 칸을 보시면

 

저희가 방금 전 넣었던 값인 

 

0xaaaaaaa~ 00000이 보이는걸 확인 하실 수 있습니다.

 

좀 더 깔끔하게 보기를 원하시는 분들은

 

 

위와같이 

 

eth.getTransactionFromBlock( ).input 을 사용하셔서

 

input 값만을 추출 할 수 있습니다.

 

 

 

 

 

 

 

물론 다른 정보들도 뒤에 .@ 로 사용하셔서 

 

추출하여 아래와 같이 확인 하실 수 있습니다.

 

 

 

 

 

 

 

 

 

 

이로써 제가 콘솔 창에서 사용했던 웬만한 

 

"간단한" 명령어들을 함께 확인해 보았습니다.

 

 

 

 

 

 

 

 

앞으로의 포스팅에서는 

 

멀티노드 구성을 하여 

 

여러 컴퓨터(virtual box)를 사용하여 블록체인을 서로 연결하여

 

블록체인 네트워크를 형성해 보도록 하겠습니다.

 

 

 

 

 

 

 

좀 더 상세한 정보를 원하시는 분들은

 

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

 

위 사이트에 들어가시면

 

원문으로 상세한 정보를 얻을 수 있습니다.

 

+ Recent posts