본문 바로가기
개발/삼성 블록체인 플랫폼 SDK

삼성 블록체인 플랫폼 SDK 사용하기 (2) Wallet Connect

by 손너잘 2020. 2. 11.
셋팅이 끝났으면 본격적으로 개발을 진행해 보자.
 
먼저 기능들을 구현하기 위해 우리는 간단한 GUI를 생성할 것 이다.
 
본 포스팅은 기본적인 안드로이드 개발이 가능하다는 전제로 작성되기 때문에 위와 같은 GUI쯤은 뚝딱 만들 수 있을것이라 생각된다.
 
먼저 삼성 블록체인 SDK를 사용해 주기 위해서는 삼성 블록체인 객체를 불러와야 한다.
 
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Toolbar toolbar = findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
 
 
    FloatingActionButton fab = findViewById(R.id.fab);
    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                    .setAction("Action", null).show();
        }
    });
 
    try {
        mSblockchain = new SBlockchain();
        mSblockchain.initialize(this);
    } catch (SsdkUnsupportedException e) {
        if (e.getErrorType() == SsdkUnsupportedException.VENDOR_NOT_SUPPORTED) {
            Log.e("error", "Platform SDK is not support this evice");
        }
    }
 
}
 
onCreate 메소드에 삼성 블록체인 SDK를 iinitialize해 주었다. 이때 발생하는 exception은 해당 블록체인 sdk를 사용할 수 있는 단말인지 확인하는 exception이다.
initialize에는 context가 하나 필요하다. getContext()를 통해 context를 가지고 올 수도 있지만 편의를 위해 this를 이용하였다.
또한 나중에 Button에 대한 listener를 통해 SBlockchain 객체를 사용해야 하기 때문에 mSBlockchin 변수는 클래스 변수로 설정한 뒤 사용하도록 하겠다.
 
먼저 CONNECT 기능을 먼저 작성하도록 한다.
Connect 기능은 지갑과 본 SDK를 연결해 주는 역할을 한다.  따라서 이를 가능하게 해주는 HardwareWalletManager라는 객체를 생성한 후 그 안에 있는 connect라는 메소드를 호출하여야 한다.
 
connectBtn.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        mSblockchain.getHardwareWalletManager()
                .connect(HardwareWalletType.SAMSUNG, true)
                .setCallback(new ListenableFutureTask.Callback<HardwareWallet>() {
                    @Override
                    public void onSuccess(HardwareWallet hardwareWallet) {
                        wallet = hardwareWallet;
                    }
 
 
                    @Override
                    public void onFailure(ExecutionException e) {
                    }
 
 
                    @Override
                    public void onCancelled(InterruptedException e) {
                    }
                });
    }
});
 
connect 버튼에 대한 리스너로 위와 같이 작성을 해 주었다.  connect 메소드를 불러오는데에는 2가지 파라메터가 필요하다. 
 
  • hardwareWalletType : 어느 월렛을 사용할지에 대한 설정
  • reset : 삼성 블록체인 SDK를 사용하면 내부적으로 저장되는 Cache 파일이 생성되게 된다. 이 데이터를 제거할지 안할지에 대한 파라메터 정보이다. 생성되는 Cache 파일은 생성된 account에 관련된 정보이다. 현재 sdk의 구조상 hdwallet에 의거하여 새로운 Account를 생성하고 있는데 generateAccount를 할 경우 hd wallet의 생성 정보를 클라이언트 입장에서 직접적으로 파악하기 어렵기 때문에 노드에 질의하여 생성된 account 가 사용된 적 있는 account인지 확인하게 된다 (hd wallet에 대해 공부하면 이해하기 수월할 것 이다). 이때 발생하는 네트워크 오버해드를 줄이기 위해 이 정보를 내부적으로 캐싱하고 있으며 이 정보를 wallet을 가져올 때 초기화 하고 노드로 부터 다시 질의할 것 인지, 아니면 캐싱된 정보를 사용할 것 인지에 대한 파라메터이다.
 
본 SDK는 현재 3가지의 Wallet 종류를 지원하고 있다.
Ledger사의 NanoX 콜드월렛(USB, BLUETOOTH)과 Samsung keysotre에서 제공하는 콜드월렛이 그것이다.
본 포스팅은 Samsung의 keystore를 사용할 것 이기 때문에 HardwareWalletType을 SAMSUNG으로 넣어주었다.
 
지갑과 연결하는 기능은 비동기적으로 작동한다. USB라든지 내부 저장소와 connection을 하는데에 동기적으로 작동하게 되면 어플리케이션 자체가 pending되기 때문이다.
따라서 setCallback 메소드를 이용하여 작업 완료후의 작업을 작성해 주어야 한다.  setCallBack 메소드를 호출한 뒤 ListenableFutureTask.Callback<Hardwarewallet>() {} 객체를 통해 컨트롤 해 준다.
 
callback함수로 hardwareWallet에 대한 인스턴스가 반환된다. 이를 사용하기 위해 미리 선언해준 전역변수 wallet에 이 인스턴스를 넣어주었다..
 
이를 통해 Wallet과  SDK를 연결하는 방법에 대하여 알아보았다. 이 예제는 각 기능에 대해 단계별로 실행해보기 위해 method 별로 작성되었지만, 실제로 이 과정은 wallet을 사용하기 위해 기본적으로 이루어 져야 하는 과정이기 때문에 개발할 때에는 UX에 맞게 개발되어야 할 것이다.
 
 
 
 
 

댓글