계좌 생성
지갑을 가지고 온 뒤 Account가 없을 경우 Account를 생성해 주어야 한다. 기존의 Account가 존재할 경우 AccountManager의 getAccount를 이용하여 Account 정보들을 가지고 올 수 있다.
Account를 생성하기 위해서는 CoinNetworkInfo 객체가 필요하다. 이를 통해 어떤 코인에 대한 계정을 생성할 것 인지, 또한 테스트넷 기반인지 메인넷 기반인지를 설정할 수 있다.
CoinNetworkInfo coinNetworkInfo = new CoinNetworkInfo(
CoinType.ETH, //코인 종류
EthereumNetworkType.ROPSTEN, //네트워크 종류
rpcAddress //노드 정보
);
CoinNetworkInfo 객체는 위와같이 생성한다. 현재 삼성 블록체인 SDK는 이더리움만 지원하고 있으므로 위 설정에서 네트워크 종류와 노드 정보만 바꿔주면 될 것 이다.
본 포스팅에서는 ROPSTEN 테스트넷을 기반으로 실행하도록 한다.
노드정보같은 경우는 rpc 통신을 할 노드의 주소를 적어주면 되는데 geth를 돌리고 있을경우 그 rpc connectiion point를 적어주면 되고 infura를 사용하여 그 정보를 적어주어도 된다.
이때 인터넷을 사용하기 때문에 인터넷 퍼미션에 대한 허가를 줘야 한다. 메니페스트 파일에서 설정하도록 하자.
인터넷을 사용하는 이유는 SDK 가 HDWALLET 기반으로 생성되었기 때문이다. HDWALLET에 의거하여 생성된 Account가 사용된 적이 있는지에 대한 질의를 노드에게 하게 된다.
mSblockchain.getAccountManager()
.generateNewAccount(wallet, coinNetworkInfo)
.setCallback(new ListenableFutureTask.Callback<Account>() {
@Override
public void onSuccess(Account account) {
Log.d("Account Information", account.toString());
}
@Override
public void onFailure(@NotNull ExecutionException e) {
}
@Override
public void onCancelled(@NotNull InterruptedException e) {
}
});
Acocunt는 위와같이 생성한다. 맨 처음 생성한 mSblockchain 객체의 getAccountManager 메소드를 통해 AccountManager를 가지고 오고 generateNewAccount를 생성한다.
그러면 그에대한 콜백으로 만들어진 Account에 대한 정보를 반환하게 된다.
I/SBlockchain: AccountManagerImpl.generateNewAccount() result: EthereumAccount(tokenAddress=null) Account(coinType=ETH, networkType=ROPSTEN, address='0x7844********************************0a12', hdPath=m/44'/60'/0'/0/1, walletId=0x1412********************************************************28dc)
정상적으로 Account가 생성되었다면 위와 같은 로그가 생성된다. 만일 위 로그가 발생하지 않는다면 onFailure 또는 onCancelled 의 exception을 print시켜서 어떤 에러가 뜨는지 확인해 보도록 하자.
E/SBlockchain: SBlockChainException.SDK version : 1.0.00
AccountManagerImpl:Failed to create new account. There's unused one.
E/SBlockchain: com.samsung.android.sdk.blockchain.exception.AccountException: Failed to create new account. There's unused one.
at com.samsung.android.sdk.blockchain.i.f.b(SourceFile:224)
at com.samsung.android.sdk.blockchain.i.f.a(SourceFile:36)
at com.samsung.android.sdk.blockchain.i.f$c.a(SourceFile:82)
at com.samsung.android.sdk.blockchain.i.f$c.call(SourceFile:36)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:919)
모든게 정상인것 같은데 위와 같은 오류가 날 수 있다. 삼성 SDK는 한번 만들어진 Account가 사용되지 않은 상태에서 새로운 Account를 생성하고자 하면 저런 에러를 발생시킨다. 따라서 기존에 있는 Account 중 사용하지 않은 Account를 이용하여 트랜젝션을 하나라도 발생시킨 후 실행하면 된다.
계좌 가져오기
만들어진 Account를 가지고 오는것은 더운 간단하다. AccountManager 인스턴스를 가지고 온 뒤 get Account 메소드를 실행해 주면 된다.
private void getAccounts() {
List<Account> lists = mSblockchain.getAccountManager()
.getAccounts(wallet.getWalletId(), CoinType.ETH, EthereumNetworkType.ROPSTEN);
// Arrays.toString(new LIst[]{accounts};
for(int i=0; i<lists.size(); i++) {
Account account = lists.get(i);
Log.d("Accounts", account.toString());
}
}
이와 같은 방식으로 Account 정보들을 가지고 올 수 있게 된다.
I/SBlockchain: AccountManagerImpl.getAccounts() walletId: 0x1412**********..., coinType: ETH, networkType: ROPSTEN
I/SBlockchain: AccountManagerImpl.getAccounts() result: [EthereumAccount(tokenAddress=null) Account(coinType=ETH, networkType=ROPSTEN, address='0x7844********************************0a12', hdPath=m/44'/60'/0'/0/1, walletId=0x1412********************************************************28dc)]
D/Accounts0: EthereumAccount(tokenAddress=null) Account(coinType=ETH, networkType=ROPSTEN, address='0x7844********************************0a12', hdPath=m/44'/60'/0'/0/1, walletId=0x1412********************************************************28dc)
정상적으로 Account 정보를 가지고 오면 다음과 같은 로그를 확인할 수 있다. 현재 생성된 Account가 하나뿐이기 때문에 하나의 Account 정보만 불러오는것을 알 수 있다.
이때 우리가 생성한 Wallet address를 우리는 확인할 수 없다.
이때 디버거를 사용하여 이를 해결할 수 있다.
Account 객체를 출력하는 부분에 breakpoint를 걸고 그 객체를 확인해 보자.

위와같이 별표된 정보들이 보인다. 메타마스크와 파우셋을 통해 위 address에 이더를 보내고 테스트를 진행 할 것이다.
위 address는 테스트용 address이기 때문에 저기로 돈 보내지 말고 제 계좌로 넣어주세요 감사합니다.

메타마스크를 통해 삼성 blockchain sdk 를 통해 생성한 Account로 4 이더리움을 전송하였다.
이제 우리는 테스트를 할 자금을 확보하였다.
'개발 > 삼성 블록체인 플랫폼 SDK' 카테고리의 다른 글
삼성 블록체인 플랫폼 SDK 사용하기 (4) Payment (0) | 2020.02.11 |
---|---|
삼성 블록체인 플랫폼 SDK 사용하기 (2) Wallet Connect (0) | 2020.02.11 |
삼성 블록체인 플랫폼 SDK 사용하기 (1) 설정 (0) | 2020.02.11 |
댓글