KAS Docs - 4

Lumi·2021년 11월 29일
0

Klaytn

목록 보기
5/10
post-thumbnail

🔥 주제 설명

이번에는 KAS API에 다루어 보겠다.

https://docs.klaytnapi.com/basics/api

🔥 API 인증키

API 인증키는 사용자가 본인이 맞는지를 증명하기 위해서 사용이 ㅇ된다.

앞서 말했던 인증 키를 활용하게 된다.

  • Security - Credential 메뉴에서 발급 가능하다.

KAS API를 호출하는 방식이다.

// KAS API를 사용할 때에 사용할 chainId와 인증 키를 세팅

caver.initKASAPI(1001, `${AccessKey ID}`, `${Secret AccessKey}`)

🔥 페이지네이션

API를 호출해 데이터를 불러올 떄 모든 데이터를 한번에 가져오기 어려울 떄가 있다.

  • 예를들면 애플리케이션이 수천개의 계정을 관리할 떄 모든 계정 목록을 조회하는 것은 어려울 것이다.

그러기 떄문에 API를 여러 번 호출하여 지정된 개수만큼 데이터를 분환하여 불러오는데, 보통 페이지 단위로 나눠 불러오기 떄문에 페이지네이션이라고 한다.

가져오는 데이터가 너무 많으면 나눠서 가져온다는 의미이다.

KAS는 커서 기반 페이지네이션을 사용한다.

어떤 API가 쿼리를 받을떄 size는 API응답으로 받을 데이터 갯수, cursor는 다음번 API호출시 이어서 받고 싶은 데이터 위치이다.

먼저 API를 호출할 떄 size를 입력하고 원하는 갯수만큼 데이터를 받는다.

그리고 API 응답값에 포함된 cursor값을 API를 다시 호출할떄 쿼리파라미터로 입력하면 방금 받은 데이터 이후의 데이터를 이어 받을수 있다.

즉 처음에는 size를 입력해 값을 받고 받는 값에서 cursor를 이용하여 데이터를 이어 받게 된다.

get요청이다.

"https://wallet-api.klaytnapi.com/v2/account?size=5&cursor=&to-timestamp=0&to-timestamp=0"

time값에 0을 입력하거나 입력을 하지 않으면 모든 시간 범위를 포함하게 된다.

모든 데이터를 가져올 경우에는 이처럼 cursor값은 빈 값을 주게 된다.

🔥 KRN

KAS 모든 리소스를 식별하기 위한 고유한 값이다.

KAS에서 리소스란 실제로 사용하려는 자원을 의미한다.

  • 계정, PReset, 수수료 대납 계정 등등

KAS를 사용할 떄에는 가장 빈번하게 접근하는 자원은 바로 계정 저장소 자원이다.

특정 저장소에 있는 계정만을 사용하고자 한다면 반드시 KRN값을 API호출 헤더에 사용하여야 한다.

krn은 다음과 같은 형식을 따른다.

krn:{chain-id}:{service-name}:{account-id}:{resource-type}:{resource-id}

-- 예시 --

krn:1001:wallet:6698d79e-78ee-439a-815d-f293ec6ae736:account-pool:RayKim

chain-id : 리소스가 존재하는 체인 ID

  • 8217(메인넷), 1001(테스트넷)

service-name : 리소스를 통해 제공되는 서비스 이름

  • node, wallet, anchor

account-id : KAS계정을 식별하는 ID

resource-type : 리소스 타입

  • 서비스별로 다른 타입이 존재한다.

resource-id : 리소스를 식별하는 ID

resource-id값은 사용자가 만든 계정 저장소의 이름을 말한다.

  • 만약 기본으로 제공되는 저장소를 활용하면 default가 된다.

사용자들은 API로 클레이튼에 트랜잭션을 보낼 수가 있다.

이떄 특정 계정 저장소를 선택하고 계정으로 트랜잭션을 보낼수가 있다.

  • 이떄 KRN값이 필요한 것이다.
post요청이다.

"https://wallet-api.klaytnapi.com/v2/tx/value"-u ${your_accessKeyId}:${your_secretAccessKey}

header값

--header "x-chain-id: 1001" 
--header "x-krn: krn:1001:wallet:b73717b4-2bad-4cbe-9517-951ca5af3a15:account-pool:RayKim"
--header "Content-Type: application/json" 

data값

  "from": "0x5bb85d4032354E88020595AFAFC081C24098202e",
  "value": "0x100",
  "to": "0x2F87Ba64de5526F7880F21481Effbf950f70005c",
  "memo": "memo",
  "nonce": 0,
  "gasLimit": 1000000,
  "submit": true

이런식으로 전송을 하게 되면 계정 저장소에 있는 계정들 중에서 해당 주소주소에 맞는 지갑끼리 거래가 이루어 지게 된다.

🔥 트랜잭션 전송 수수료 대납

KAS에서 제공하는 수수료 대납 방식은 2가지 이다.

🌪 UserFeePayer 사용

수수료 대납 계정을 따로 만들어서 트랜잭션을 발생 시켰을떄 이 계쩡으로 수수료를 대신 납부하는 방식이다.

  • 트랜잭션을 전송하는 API를 만들떄 feePayer파라미터에 대납 계정 주소를 입력한다.

🌪 GlobalFeePayer

KAS에서 일단 수수료를 대신 납부하고 후에 비용을 청구를 하는 것이다.

GlobalFeePayer이란 KAS에서 제공하는 대납 계정이며 이것을 사용하면 수수료 대납 계정이 존재하지 않아도 트랜잭션을 전송 가능하다.

🔥 SDK

여러 개발 환경에서 KAS를 쉽게 사용하도록 제공되는 개발 도구이다.

Caver의 확장 라이브러리이며 Caver와 마찬가지로 JS, Java를 지원한다.

profile
[기술 블로그가 아닌 하루하루 기록용 블로그]

0개의 댓글