Tutorials

클레이튼 온라인 툴킷 사용해보기 #2: RoleBased 기능 사용하기

👋 클레이튼 온라인 툴킷 시리즈#1 멀티시그#2 RoleBased 기능 사용하기

클레이튼의 DevRel 팀에서는 더 많은 분들이 툴킷을 사용해볼 수 있도록 “클레이튼 온라인 툴킷 사용해보기” 시리즈를 준비했습니다. 두 번째 아티클에서는 RoleBased 사용 방법에 대해서 다룰 예정입니다.

클레이튼 온라인 툴킷을 사용하여 계정을 생성하고, 그 계정의 키를 각각의 role로 업데이트한 뒤 이 키들을 사용하여 실제 트랜잭션을 전송해보겠습니다. 클레이튼 만의 특별한 RoleBased 키에 대해 더 잘 알고 싶다면 이 포스팅을 미리 참고해주세요.

확인 사항

  1. 업데이트 할 계정이 필요합니다. 이 글에서는 이 계정을 Sender라고 칭하겠습니다. 새로운 계정은 아래 계정 생성 후 키스토어 다운로드 하기를 따라 생성하실 수 있습니다. Sender는 transaction fee를 지불할 수 있는 KLAY를 소유하고 있어야 합니다. 계정 업데이트 트랜잭션이 처리되면, 이 Sender 계정의 주소는 그대로 사용하되 개인키가 바뀌게 됩니다.
  2. RoleTransaction, RoleAccountUpdate 그리고 RoleFeePayer 각 역할 별로 사용될 개인키들이 필요합니다. 각 개인키는 1번에서와 마찬가지로 아래 계정 생성 후 키스토어 다운로드 하기를 따라 생성한 뒤, 키스토어 파일을 다운받으실 수 있습니다. 키스토어를 다운 받을 때 설정한 비밀번호를 잘 보관하시길 바랍니다.
  3. 여러 개의 키로 서명해야 하는 경우 **가중치(weight)**와 **임계치(threshold)**를 설정해야합니다. 각 역할 별로 다양한 임계치를 지정할 수 있습니다. 이번 포스팅에서는 하나의 키로만 서명을 하는 트랜잭션을 사용해 보겠습니다.

계정 생성 후 키스토어 다운로드 하기: 링크

1. 계정 생성하기

Single / Multiple / Role-Based 중 Single 버튼이 선택 되어 있는지 확인합니다. 이 세 개는 클레이튼에서 제공하는 주소와 개인 키를 포함하는 키링(keyring)의 종류를 의미합니다. SingleKeyring은 사용자가 개인 키 하나로 서명을 하는 것입니다. Multiple Keyring은 사용자가 다수의 개인키로 서명하는 것이고, Role-based Keysing은 역할에 따른 개인키로 서명을 하게 됩니다. 자세한 설명은 클레이튼 문서를 참고하시길 바랍니다. 이 글에서는 Role-Based 키로 계정을 업데이트 하기 위해 Single Keyring을 생성해서 사용하겠습니다.

Generate Key 버튼을 누르면 개인키와 주소가 생성됩니다. 이 때 함께 생성되는 주소(Address)는 개인키 — 공개키 키쌍의 공개키에서 파생되는 주소 입니다.

2. 키스토어 다운받기

생성하고자 하는 키스토어 포맷에 맞게 Generate Keystore(v3), Generate Keystore(v4) 버튼 중 하나를 선택해서 누르면, 각 버전의 키스토어 파일이 생성되고 내용이 아래 텍스트칸에 뜹니다. Download 버튼을 누르면 “keystore-{address}-{year}-{month}-{day}.json” 이름으로 파일이 저장됩니다.

3. KLAY 받기

트랜잭션을 보내기 위해 KLAY가 필요합니다. 테스트넷을 사용하는 경우 https://baobab.wallet.klaytn.foundation/faucet에서 KLAY를 받습니다.

다운로드 이후 새로운 계정을 생성하고 싶으시면 위 절차를 반복하면 됩니다.

계정을 RoleBased 키로 업데이트 하기: 링크

이 페이지는 Upload Sender Keystore File, Upload Keystore File for Private Keys, Update Account 세 개의 섹션으로 구성되어 있습니다. 첫 번째 섹션에서는 Sender의 트랜잭션 서명을 위해 Sender의 키스토어를 업로드 하고, 두 번째 섹션에서는 RoleBased로 업데이트할 개인키 들을 업로드 하고, 마지막 섹션에서는 계정 업데이트 트랜잭션을 전송할 수 있습니다.

  1. 키스토어 업로드

먼저 Mainnet, Testnet 중 어느 네트워크에서 진행할 지 선택합니다.

업데이트 할 계정(Sender)의 키스토어 파일을 업로드 하고, 해당 키스토어 파일의 패스워드를 입력하고 Decrypt 버튼을 누릅니다. 패스워드가 제대로 입력된 경우 Decryption succeeds! 라는 메시지가 뜨고, 틀린경우 Error: Key derivation failed 라는 에러 메시지가 뜰 것 입니다. 이렇게 Sender의 키스토어 파일을 업로드 하는 것은 완료되었습니다.

2. 역할별 업데이트할 키스토어 업로드

이제 RoleTransaction, RoleAccountUpdate 그리고 RoleFeePayer로 사용할 개인키들을 설정해보도록 하겠습니다. 업데이트 할 때 사용될 개인키의 키스토어 파일을 업로드 하고 Password를 입력한 뒤 Decrypt 버튼을 누릅니다. 최초 RoleBased 계정 업데이트를 하는 경우 세 role 중 하나라도 빈 칸으로 두면 오류가 발생하기 때문에 각각 전부 키스토어를 업로드합니다.

키스토어를 하나씩 추가하면 Update Account 섹션 내의 Decrypted Keystore List 아래에 파일 이름이 추가되는 걸 볼 수 있습니다. 이 추가된 개인키들은 각각의 역할을 부여 받게 됩니다.

3. 계정 업데이트하기

이 과정이 끝나고 나면 Account Update 섹션으로 넘어가서 진행합니다. Account Update 버튼을 누르게 되면, 계정 업데이트 트랜잭션이 전송되고, 처리될 때까지 Account Update 버튼은 비활성화 됩니다. 트랜잭션이 처리된 후 성공하면, Account is successfully updated! 라는 메시지가 뜹니다. 성공했다는 메시지와 함께 아래에 트랜잭션 해시값이 나타납니다. 클릭하면 해당 트랜잭션을 Klaytnfinder에서 확인하실 수 있습니다. 실패한다면 에러메시지가 뜰 것입니다.

4. 트랜잭션 확인하기

Sender 계정의 주소를 사용해서 KlaytnFinder 나 Klaytnscope에서 계정 업데이트 트랜잭션을 확인하실 수 있습니다.

RoleTransaction 키를 사용해서 KLAY 전송하기 : 링크

계정을 업데이트 했으니, 그 중 RoleTransaction 역할을 받은 키를 사용해서 KLAY를 전송해보도록 하겠습니다. 업데이트가 성공적이었다면 다른 역할로 업데이트 된 키를 사용했을 때는 트랜잭션 전송에 실패할 것입니다.

이 페이지는 트랜잭션 정보를 입력하고 서명 및 전송을 하는 Transaction Information 섹션, 서명에 필요한 개인키들을 업로드 하는 Upload Keystore File 섹션, 그리고 업로드된 키스토어 파일들을 확인하고 삭제할 수 있는 Decrypted Keystore List 섹션으로 이루어져 있습니다.

1. 트랜잭션 정보 입력

Mainnet, Testnet 중 어느 네트워크에서 진행할 지 선택합니다. 이 예시에서는 KLAY를 보내겠습니다. KLAY를 보내는 주소와 받는 주소를 입력하고, 보낼 KLAY의 수량을 입력합니다.

2. 키스토어 파일 업로드

Upload Keystore File섹션에서 KLAY를 보낼 Sender가 서명할 때 필요한 개인키의 키스토어 파일들을 업로드 합니다. 트랜잭션 전송을 해볼 것임으로, 위에서 RoleTransaction으로 업데이트 된 키스토어를 업로드 해야 합니다. 이때 키의 역할이 기억나지 않는다면 여기에서 확인해보실 수 있습니다.

이제 앞서 RoleTransaction으로 업데이트했던 keystore1.json 파일을 업로드해보겠습니다. Password를 입력한 뒤 Decrypt 버튼을 누른 뒤 성공적으로 해독이 되면, 아래 Decrypted Keystore List 섹션에서 추가 되는걸 보실 수 있습니다. Remove 버튼을 눌러서 삭제를 할 수도 있습니다. 서명에 필요한 키의 개수만큼 키스토어 파일 업로드를 통해 개인키를 추가하실 수 있습니다.

3. 트랜잭션 서명

필요한 키가 모두 업로드 되면 다시 Transaction Information 섹션으로 돌아가서 Sign Transaction 버튼을 눌러 트랜잭션에 서명을 합니다. 성공적으로 서명이 되면 Transaction hash값과 함께 Transaction is signed! 라는 메시지가 뜹니다.

4. 트랜잭션 전송

서명이 완료된 이후, Send Transaction 버튼을 누르게 되면 서명된 트랜잭션이 네트워크에 전송됩니다. 처리가 완료되면, Transaction is confirmed! 라는 메시지와 함께 트랜잭션의 hash값이 뜹니다. 이 hash값을 클릭하면 KlaytnFinder에서 해당 transaction 페이지를 볼 수 있습니다.

5. 다른 역할 키스토어 사용해보기

이전 섹션에서 RoleAccountUpdate로 업데이트된 키스토어를 사용하여 KLAY 전송 트랜잭션을 보내보겠습니다.

위의 3, 4번 과정을 동일하게 수행했을 때 Send Transaction에서 오류가 발생합니다. 즉, 업데이트가 제대로 되었음을 확인할 수 있습니다.

오늘은 클레이튼 온라인 툴킷을 사용하여 RoleBased 키로 업데이트하는 기능을 알아보았습니다. 다음 편도 기대해주세요. 이번 아티클에 대한 질문이나 클레이튼에 대한 궁금증이 있으시면 클레이튼 포럼에 남겨주세요.

참고 자료

  1. Medium blog: [Caver] Caver로 Klaytn 계정의 키를 바꾸는 방법 #3 — AccountKeyRoleBased
  2. Medium blog: Klaytn 사용성 개선 Series #4: 플랫폼에서의 role-based key 지원
  3. 클레이튼 계정 관련 docs: https://ko.docs.klaytn.foundation/klaytn/design/accounts
  4. 클레이튼 키링 관련 (caver-js): https://ko.docs.klaytn.foundation/dapp/sdk/caver-js/api-references/caver.wallet/keyring
  5. Account Update Code Example: https://github.com/klaytn/caver-js-examples/tree/master/account/update_account_with_account_key_role_based