Wallet1 : Luniverse PKMS 연동하기

Luniverse PKMS 는 사용자의 개인키(Private Key)를 발급하고 서버상에서 안전하게 관리/서명할 수 있는 서비스입니다.

루니버스는 DApp에서 생성된 사용자의 개인키(Private Key)를 안전하게 보관하며 DApp 이 서명을 요청한 경우 서버상에 안전하게 보관중인 개인키(Private Key)를 이용해서 트랜잭션에 사인합니다.

루니버스 PKMS 를 사용할 시 최종 사용자(End User)는 트랜잭션에 서명할 때마다 개인키를 입력하거나 키스토어 파일을 읽어오고 패스페이즈를 입력할 필요가 없기 때문에 DApp 의 사용성이 크게 개선되며, 최종 사용자가 개인키를 분실하여 발생하는 리스크 역시 방지됩니다.

주소 발급 받기

  1. Luniverse PKMS 를 이용하기 위해서는 먼저 최종 사용자의 지갑주소를 발급받아야 합니다. 주소를 발급받기 위한 API 를 호출하기 위해서는 DApp 의 API Key 와 주소를 발급받을 사용자 식별번호가 필요합니다. 만약 DApp API Key 가 KcUSCE7iCZoJfud8iLdmBLdZBrRyVai4e5o6x8d9c4ZpYu2h5mwtmhEPm6285f23 이고, 사용자의 식별번호가 aacff550-4fa7-43c5-9f31-554db722e3a5 인 경우, 이 사용자의 PKMS 을 이용해서 주소를 발급받기 위해서는 TX API 를 아래와 같이 호출해야 합니다. ( 여러분의 DApp 을 위한 사용자 주소를 발급받기 위해서는 여러분의 DApp API Key 를 사용해야 합니다. DApp API Key 는 루니버스 콘솔에서 확인할 수 있습니다. )
curl -X POST 'https://dev-api.luniverse.io/tx/v1.0/wallets' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer KcUSCE7iCZoJfud8iLdmBLdZBrRyVai4e5o6x8d9c4ZpYu2h5mwtmhEPm6285f23' \
--data ' 
{
   "userKey": "aacff550-4fa7-43c5-9f31-554db722e3a5",
  "walletType": "LUNIVERSE"
}'
  1. 최종 사용자가 DApp에서 PKMS 로 지갑 주소 발급하기를 요청하면, DApp은 루니버스 TX API로 Wallet Address 발급을 요청합니다.

  2. 루니버스 TX API는 PKMS 에 Wallet Address 발급을 요청하고, PKMS 는 새로운 개인키(Private Key) 를 생성한 후 Wallet Address (EOA: External Owned Account) 를 TX API에 돌려줍니다.

  3. DApp은 사용자에게 Wallet Address를 반환합니다. Luniverse Account Bridge를 활용할 시 EOA 역시 루니버스에서 관리하도록 할 수 있습니다.

    Account Bridge 이용하기

트랜잭션 서명하기

  1. 최종 사용자가 트랜잭션을 발생시키면 DApp은 최종 사용자에게 트랜잭션 서명에 대한 확인을 요청하며 해당 사용자에 대한 본인 확인을 진행합니다.
  2. 최종 사용자가 트랜잭션 내용을 확인하고 본인인증 후 트랜잭션 실행을 요청하면 DApp은 TX API로 해당 트랜잭션을 루니버스로 요청합니다.

    *단, 본인 인증은 DApp에서 자율적으로 실행할 수 있으며, 자산 손실의 리스크가 적은 소액 트랜잭션의 경우 DApp의 판단으로 생략할 수도 있습니다.

curl -X POST 'https://stg-api.luniverse.io/tx/v1.0/transactions/transfer' \
--header 'Authorization: Bearer DApp_API_KEY' \
--header 'Content-Type: application/json' \
--data '{   "from": "0xab9ccaBe5075273d0D422236176ffb28A15C470F",
     "inputs": { 
               "receiverAddress": "0x3b1f1faa2bb0b913f9c50723d014c1bccc9b8020",
               "valueAmount": "1000000000000000000" 
     }
}'
{"result":true,
   "data":{
      "txId":"1550627053413683434",
      "txHash":"0x48a2392f58665252fe3a3f808b93110febf94daaef10a04e130beb212d5d0947",
     "reqTs":1550627053256
   }
}
  1. TX API는 루니버스 사이드체인 트랜잭션을 생성한 후에 Luniverse PKMS 로 사인을 요청합니다.
  2. Luniverse PKMS 는 입력된 트랜잭션에 사인하고 사인된 트랜잭션을 TX API에 반환합니다.
  3. TX API는 블록체인에 서명된 트랜잭션을 기록하고, 트랜젝션 해쉬값을 DApp으로 반환합니다.