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, // valuetoHex(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 명령어 및 채굴 (2) (0) | 2019.08.25 |
---|---|
[Ethereum] - geth 명령어 및 채굴 (6) | 2019.08.25 |
[Ethereum] - geth 서버 구축 (0) | 2019.08.25 |
[Ethereum] - 블록 체인과 Ethereum이란? (0) | 2019.08.25 |