개론
저는 원래 메인 개발언어가 Java입니다. 그리고 이번에 BlockChain을 개발할 기회가 생겼습니다. 그리고 여러 자료를 찾아봤습니다. 그런데 Ethereum과 통신하는 Client SDK의 Reference는 대부분이 javascript기반이었습니다. 이럴수가... Java로 개발하고 싶던 저는 계속 찾아보다가 Web3j라는 Java와 Ethereum의 통신을 해주는 프로젝트를 발견했고 사용하려고 했습니다. 여거서 또 문제가 발생했습니다. 이 프로젝트가 너무 Well-made 였기때문에 바로 사용하기는 너무 어려웠고 분석이 필요했습니다. 그래서 이 OpenSource Project를 사용하기 전에 공부를 겸해서 직접 만들어 봐야겠다 싶어서 만들어본 프로젝트가 지금의 Ethereum-With-Java-Version-Easy라는 프로젝트입니다. 다른 분들에게도 이 프로젝트가 도움이 되었으면 하는 바람을 가지고 공유하며, 만들어지는 과정을 알려드립니다.
6주로 나누어 연재할 게시물입니다.
- [ethereum]Ethereum 설치 및 실행
- [ethereum]Smart Contract(Lottery 시스템) 제작
- [ethereum]ethereum과 통신해보기
- [ethereum]Smart Contract(Lottery 시스템)과 통신해보기 - basic
- [ethereum]Smart Contract(Lottery 시스템)과 통신해보기 - event & log
- [ethereum & java]web3j를 통해 ethereum과 통신해보기
- [ethereum & java]Smart Contract(Lottery 시스템)과 web3j를 통해 통신해보기 - basic
- Smart Contract(Lottery 시스템)과 web3j를 통해 통신해보기 - event & log
Ethereum 설치(truffle / ganache-cli) 및 실행
Ethereum을 Local에서 테스트 할때 많이 사용되는 Ethereum 서버는 Geth와 Truffle로 나누어집니다. Geth는 Go언어로 만들어 졌고, Truffle은 Node.js로 만들어 졌습니다. 이번 프로젝트의 목적은 Java를 이용한 통신 테스트에 있기 때문에 좀 더 구축이 간단한 Truffl을 이용하겠습니다. ganache-cli는 ethereum의 Test Account등을 제공하므로 이것도 설치하겠습니다.
Node.js 설치
truffle은 Nodejs에서 돌아가는 시스템이므로 설치해주도록 합니다.
https://nodejs.org/en/
설치가 잘 되셨다면 아래 명령어를 통해 확인해봅니다.
$ ~ npm version
{
npm: '6.9.0',
ares: '1.15.0',
brotli: '1.0.7',
cldr: '35.1',
http_parser: '2.8.0',
icu: '64.2',
llhttp: '1.1.4',
modules: '72',
napi: '4',
nghttp2: '1.38.0',
node: '12.5.0',
openssl: '1.1.1c',
tz: '2019a',
unicode: '12.1',
uv: '1.29.1',
v8: '7.5.288.22-node.14',
zlib: '1.2.11'
}
버전이 달라도 크게 상관은 없겠지만, 되도록이면 맞춰주도록 합시다.
Truffle 설치
Truffle을 설치해주도록 합니다.
$ ~ npm install -g truffle
확인해 줍니다.
$ ~ truffle version
Truffle v5.0.2 (core: 5.0.2)
Solidity v0.5.0 (solc-js)
Node v12.5.0
ganache-cli 설치
ganache-cli를 설치해주도록 합니다.
npm install -g ganache-cli
확인.
$ ~ ganache-cli version
Ganache CLI v6.4.4 (ganache-core: 2.5.6)
ganache-cli 실행
ganeche-cli까지 설치했다면 이제 쉽게 ethereum 서버를 올릴 수 있습니다. 아래와 같은 명령어를 쳐봅시다!
ganache-cli -d -m tutorial
Available Accounts
==================
(0) 0xf76c9b7012c0a3870801eaaddb93b6352c8893db (~100 ETH)
(1) 0x84f43c88dc56510d043d5ee922d57549959c4c3c (~100 ETH)
(2) 0x7ec36bc569c4b6fd3ddd7b7ebc9e1edb2e736339 (~100 ETH)
(3) 0x7f98395e0f0470b4a6fbc7e8828897abbd093a00 (~100 ETH)
(4) 0xfca6a8a66e8fbcd2fcc1532f5eeedd34bf4a7e97 (~100 ETH)
(5) 0x4de841b154641c4d0bcea2cb1afc9d86779ffd0a (~100 ETH)
(6) 0x77041c20fe4b1240d8b13c29dc8f541efc576c08 (~100 ETH)
(7) 0x68126b29d36451f0e2fdc6bfecb404594099b669 (~100 ETH)
(8) 0x9fcbad0d39d77393ca6f4fe33e0b5f138e9df59a (~100 ETH)
(9) 0xcd4a6eca58edd41012cf0429e59e885bcb052ba1 (~100 ETH)
Private Keys
==================
(0) 0x8d22a0aa9c43da157ebc24bc7d70c26d198381e042ab93434757752e3f0ee8e5
(1) 0xfc953f0b751d43d825c8bdbe0cb96b5399785d63d665a8a08d4402d1744651eb
(2) 0xb29daad2e0a03bbe925d600a2096a9e4a36cc4135a5698663399049d358260da
(3) 0xd0a21a0c8bb03a589e01461470b8db428124bfd0674b2105480ea63b477d7f0f
(4) 0x2dffbad13afbc666a9c593920be3de59504923b2761cbe9a74b5b1c535fdcd45
(5) 0x9dad1cf63f92916dcb1d1e6162b32ef91622a3465e00b3cb73fe900ae6050272
(6) 0xda5ea07f6dd402aafeae6a079bef862e18ed2c2da2e7a8001434d7c19f3e9b8d
(7) 0xe9f7be5224efe8f29f849373fece147b84d041af027b91938ba6beae7c2233fd
(8) 0xaa6da5dce2bd70e453a2823a182f619d9cc1d919a044c0ade83707199c6e0018
(9) 0x800dcf712a622efcf37deff66439f1257055d50a79e2fd6414c5e8c9fd09c274
HD Wallet
==================
Mnemonic: tutorial
Base HD Path: m/44'/60'/0'/0/{account_index}
Gas Price
==================
20000000000
Gas Limit
==================
6721975
Listening on 127.0.0.1:8545
이렇게 출력되면 정상입니다. ganache-cli의 account는 언제 어디서 띄우든 동일합니다. 그래서 account의 변화를 신경쓰지 않아서 좋습니다. 그리고 만약 서버에서 8545 Port를 점유하고 있다면 서버가 올라가지 않으니 조심하시기바랍니다.
결론
오늘은 Etereum을 설치하고 실행하는 것을 확인해보았습니다.
다음주에는 Smart Contract를 작성하고 Compile, Migrate 해보도록 하겠습니다.
완성된 프로젝트 소스
git link : https://github.com/KoangHoYeom/Ethereum-With-Java-Ver.easy
README는 영어, README_KR은 한국어로 작성해두었습니다.
'기타 > 블록체인' 카테고리의 다른 글
[Ethereum]Ethereum의 Transaction 처리 Life Cycle 분석 (0) | 2019.08.23 |
---|---|
[ethereum] Smart Contract(Lottery 시스템)과 통신해보기 - basic (2) | 2019.08.21 |
[ethereum]ethereum과 통신해보기 (0) | 2019.08.12 |
Smart Contract(Lottery 시스템) 제작 _ 쉽게 수정 예정 (0) | 2019.08.08 |
솔리디티 함수(function)에 대해서_1. 가시성(visible) (0) | 2019.06.16 |
댓글