Project

개요

Project란 KAS 리소스에 대한 액세스 권한을 안전하게 제어할 수 있는 서비스입니다. Project 생성을 통해 KAS 리소스 접근 및 API 사용을 제어할 수 있습니다.

KAS Credential과의 차이

KAS 계정을 통해 발급받은 API 인증 키는 루트 사용자 자격 증명으로, KAS 서비스 및 리소스에 대한 완전한 접근이 가능합니다. 하지만 Project 서비스를 통해 생성된 Project ID와 Project Key를 사용하면 API의 사용을 제한하고, 구체적인 가용 액션(API) 및 하위 액션을 정의할 수 있습니다.

Project 서비스의 기능

Project 서비스는 다음 기능을 제공합니다.

KAS 계정의 리소스 공유

  • 루트 사용자의 API 인증 키를 공유하지 않고, KAS 계정의 리소스를 관리하고 사용할 수 있습니다.

가용 액션(API) 및 하위 액션 접근 제어: 필터링

  • 가용 액션(API) 및 하위 액션 정의(필터링)란 API 호출 접근 제어에 대한 명세를 의미합니다.
  • Project를 통해 다음과 같이 가용 액션(API)과 접근 제어를 정의할 수 있습니다.
    1. Origin
    2. Request Header의 Origin과 Project 생성시 지정한 Origin이 일치하는 경우에만 API 호출 허용
    3. origin 예: https://www.example.com
    4. User-Agent
    5. Request Header의 User-Agent와 Project 생성시 지정한 User-Agent가 일치하는 경우에만 API 호출 허용
    6. 지정한 User-Agent 문자열로 시작되는 경우(prefix match)에만 호출 허용
    7. User-Agent 예: Chrome : Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36
    8. IP Whitelist
    9. Client의 IP와 Project 생성시 지정한 IP 값이 일치하는 경우에만 API 호출 허용
    10. KAS Action
    11. Action : Project 생성시 지정한 API 액션에 대해서만 호출 허용
    12. SubAction : Project 생성시 지정한 subaction에 대해서만 호출 허용 (Node RPC 메소드와 같이 subaction이 필요한 액션 사용시 작성)
    13. Filters
      • body : Request Body의 내용과 Project 생성시 지정한 Body의 내용이 일치하는 경우에만 API 호출 허용
      • query : Request Query의 내용과 Project 생성시 지정한 Query의 내용이 일치하는 경우에만 API 호출 허용
      • rlp : Request Body에 적힌 RLP의 내용과 Project 생성시 지정한 RLP의 패턴이 일치하는 경우에만 API 호출 허용

Project 생성

Project를 생성하려면 KAS Console에 로그인 후 My Page > Project 메뉴를 클릭합니다.

프로젝트 생성

[Project 생성] 버튼을 클릭 후 프로젝트 생성시 필요한 기본 정보인 Name, Description, Origins, IP Whitelist, User Agent를 입력합니다. 이후 [생성] 버튼을 클릭하면 Project가 생성됩니다.

프로젝트 생성-2

프로젝트 생성을 완료하면 Project ID와 Project Key가 생성됩니다. [다운로드] 버튼을 클릭하여 {Project-ID}.json이라는 파일명으로 생성된 인증키를 다운받습니다.

프로젝트 생성 후 인증키 다운로드

발급된 Project ID와 Project Key은 최초 생성 시 한 번만 확인할 수 있습니다. 따라서, 최초 생성 시 반드시 Project ID와 Project Key를 안전한 곳에 복사 또는 다운로드해 관리해야 합니다. Project ID와 Project Key는 AccessKey ID와 Secret AccessKey를 인코딩하여 API 호출 시 Basic 인증 방식의 호출 헤더에 사용합니다.

Project를 생성 후 콘솔의 My Page > Project를 선택합니다. Project 목록에서 ID, Name 그리고 Description을 확인할 수 있습니다.

프로젝트 수정

danger

Project ID와 Projecy Key가 있으면 Project 생성시 지정한 요구 명세를 충족하는 KAS 서비스를 사용할 수 있습니다. KAS/Kaia 계정 보안을 위해 Project Key를 타인과 함부로 공유하지 말고 주의해 관리하십시오.

Project Action & Filter 추가

처음 Project를 생성하고 나면 Action & Filter 정보가 없습니다.

info

Action & Filter가 설정되지 않은 Project ID와 Key로는 어떠한 KAS의 리소스에도 접근할 수 없습니다. 따라서 클라이언트가 희망하는 Action과 Filter를 추가해야 합니다.

Project 상세정보 > Actions & Filters 메뉴에서 [Action & Filter 추가] 버튼을 클릭합니다.

액션, 필터 추가

Action Bar를 클릭하여 추가하고자 하는 KAS Action을 선택합니다.

Sub Action을 추가해야 하는 KAS Action의 경우 동일한 방식으로 추가합니다.

Action 선택

해당 Action의 Body, Query, RLP에 대한 필터가 필요한 경우 Filter의 이름과 Filter의 패턴을 입력 후 오른쪽의 [추가] 버튼을 클릭합니다.

Action Filter 추가

위 예시와 같이 kip17::GetContract의 Query Parameter 중 Size필드를 5로 설정할 경우 해당 Project ID와 Key를 통해 kip17::GetContrac를 호출시 query parameter인 size를 5로 설정한 경우에만 호출이 허용됩니다.

위와 동일한 방식으로, Body의 필드와 패턴, RLP의 필드와 패턴을 설정할 경우, 설정된 요구 명세를 충족한 API 호출에 대해서만 접근을 허용할 수 있습니다.

원하는 Action과 Filter를 모두 입력 후 저장하고 싶다면, 입력을 마친 후 [Action & Filter 추가] 버튼을 클릭합니다.

Action Filter 저장

Project Key 재발급

기존에 생성된 프로젝트의 Key를 재발급 하고 싶을 경우 MyPage > Project 메뉴에서 해당 프로젝트를 선택 후 Project 상세정보에서 [Key 재발급] 버튼을 클릭합니다.

ID&KEY 재발급

필터링 예제

참고 : Project 생성 시 필터 이름은 GJSON Path Syntax를 지원합니다.

UserAgent 필터링

User-Agent를 지정하여 프로젝트를 생성할 수 있습니다. User-Agent는 prefix로 검증하며, 조건을 충족한 User-Agent가 헤더에 추가된 API 호출만 허용됩니다.

예: User-Agent를 PostmanRuntime로 설정할 경우:

  • PostmanRuntime/7.280 (PASS)
  • PostmanRuntim/7.280 (FAIL)
  • Postman/7.280 (FAIL)

필요한 경우 프로젝트 상세정보에서 수정할 수 있습니다.

UserAgent 필터링

cURL 예:

Copy
Copied
curl --location --request GET '{{path}}' \
--header 'x-chain-id: {{chain-id}}' \
--header 'Authorization: Basic = {{your basic authorization}}' \
--header 'User-Agent: PostmanRuntime/7.28.0' \
...

Origin 필터링

Origin을 지정하여 프로젝트를 생성할 수 있습니다. 이후 해당 Origin이 헤더에 추가된 API 호출만 허용됩니다. 입력된 문자열이 정확이 일치해야 하는점 주의하시기 바랍니다.

예: Origin를 https://www.example.com로 설정할 경우:

  • https://www.example.com (PASS)
  • http://www.example.com (FAIL)
  • https://foo.example (FAIL)

필요한 경우 프로젝트 상세정보에서 수정할 수 있습니다.

Origin 필터링

cURL 예:

Copy
Copied
curl --location --request GET '{{path}}' \
--header 'x-chain-id: {{chain-id}}' \
--header 'Authorization: Basic = {{your basic authorization}}' \
--header 'Origin: https://www.example.com' \
...

IP 필터링

IP를 지정하여 프로젝트를 생성할 수 있습니다. 이후 해당 IP로터 호출된 API 만 허용됩니다. 필요한 경우 프로젝트 상세정보에서 수정할 수 있습니다.

IP 필터링

Body Filtering 1: Node API - CallRPC : 특정 계정에 대한 klay_getBalance 호출만 허용

Node API를 통해 klay_getBalance를 호출할 때는 아래의 매개변수가 필요합니다.

  • 잔액을 확인할 계정 주소
  • Quantity Tag (예: ["latest", "earliest"] )

위를 전달하기 위해 params필드 명에 매개변수를 담아 아래와 같은 Body를 준비합니다.

Copy
Copied
{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "klay_getBalance",
  "params": ["0x60d0902c428D0E197F97a756011Fd4893C1E57B0", "latest"]
}

특정 계정에 대해 klay_getBalance 호출을 허용하기 위해 우선 프로젝트 목록에서 프로젝트를 선택 후 Actions & Filters 메뉴를 선택합니다.

사진에 보여지는 것처럼 Action에는 node::CallRPC, Sub Action으로 klay_getBalance를 선택 후, Action Filter로 Body type을 선택합니다. 필터 이름은 계정 주소를 params 배열의 0번째 index에 입력하기 때문에 0번째 index를 의미하는 params.0, 패턴으로는 특정 계정 주소를 입력합니다.

Node API 필터링

입력을 마친 후 [Action & Filter 추가] 버튼을 클릭합니다.

이후 해당 Project ID/Key로 API 호출시, 해당 계정 주소에 대한 호출만 허용됩니다.

cURL 예:

Copy
Copied
curl --location --request POST 'https://node-api.klaytnapi.com/v1/klaytn' \
--header 'x-chain-id: {{chain-id}}' \
--header 'Authorization: Basic {{your authorization}}' \
--header 'Content-Type: application/json' \
--data-raw '{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "klay_getBalance",
  "params": ["0x60d0902c428D0E197F97a756011Fd4893C1E57B0", "latest"]
}'

호출 성공 (params.0에 설정한 주소(0x60d0902c428D0E197F97a756011Fd4893C1E57B0)를 넣은 케이스)

Copy
Copied
//200 response
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": "0x4"
}

호출 실패 (params.00x60d0902c428D0E197F97a756011Fd4893C1E57B0가 아닌 다른 주소를 넣은 케이스)

Copy
Copied
//401 response
{
  "code": 1010040,
  "message": "your request does not satisfy rules set to the project"
}

Body Filtering 2: KIP17 API - 특정 어카운트에 대해서만 토큰 발행 허용

KIP17 API를 통해 KIP-17 컨트랙트 토큰 발행를 호출할 때는 아래의 매개변수가 필요합니다.

  • Recipient ( to ): 토큰을 받는 사람의 Klaytn 계정 주소
  • Token ID ( id ): 토큰의 고유번호
  • Token URI ( uri ): 토큰 정보를 담은 JSON 파일의 위치를 URI로 표현한 값

위를 전달하기 위해 아래와 같은 Body를 준비합니다.

Copy
Copied
{
  "to": "0x837Bbfa5dBCfD781c8EE45970d53F1F1198Bb6Bb",
  "id": "0x1",
  "uri": "https://kas-kip17-metadata.klaytnapi.com/e8546c71-2623-170e-fb5c-99c.json"
}

특정 계정에 대해 토큰 발행을 허용하기 위해 프로젝트 목록에서 프로젝트를 선택 후 Action & Filters 메뉴를 선택합니다.

사진에 보여지는 것처럼 Action으로 kip17::MintToken을 선택합니다. Sub Action이 없는 액션이기 때문에 스킵하고, Action Filter로 Body type을 선택, 필터 이름은 to, 패턴은 희망하는 특정 계정 주소를 입력합니다.

KIP17 토큰 발행 필터링

입력을 마친 후 [Action & Filter 추가] 버튼을 클릭합니다.

이후 해당 Project ID/Key로 API 호출시, 해당 계정 주소에 대한 호출만 허용됩니다.

cURL 예 :

Copy
Copied
curl --location --request POST 'https://kip17-api.klaytnapi.com/v2/contract/{{your contract alias}}/token' \
--header 'x-chain-id: {{chain-id}}' \
--header 'Authorization: Basic {{your authorization}}' \
--header 'Content-Type: application/json' \
--data-raw '{
"to": "0x837Bbfa5dBCfD781c8EE45970d53F1F1198Bb6Bb",
"id": "0x3",
"uri": "https://www.example.com"
}'

호출 성공 (to에 설정한 주소(0x837Bbfa5dBCfD781c8EE45970d53F1F1198Bb6Bb)를 넣은 케이스)

Copy
Copied
//200 response
{
  "status": "Submitted",
  "transactionHash": "0xd6c256493b89698363f80f080a3d5038d0be7261628175dfd61e056b45a2657b"
}

호출 실패 (to0x837Bbfa5dBCfD781c8EE45970d53F1F1198Bb6Bb가 아닌 다른 주소를 넣은 케이스)

Copy
Copied
//401 response
{
  "code": 1010040,
  "message": "your request does not satisfy rules set to the project"
}

Query Filtering 1: 특정 chain-id 호출만 허용

프로젝트 목록에서 프로젝트를 선택 후 Actions & Filters 메뉴를 선택합니다.

사진에 보여지는 것처럼 Action으로 원하는 액션을 선택합니다 (예: kip17::MintToken)을 선택합니다. Sub Action이 없는 액션이기 때문에 스킵하고, Action Filter로 Query type을 선택, 필터 이름은 chain-id, 패턴은 희망하는 chain-id를 입력합니다. 사용할 수 있는 query type은 해당하는 API Reference를 참고 부탁드립니다.

chain-id 필터링

입력을 마친 후 [Action & Filter 추가] 버튼을 클릭합니다.

이후 해당 Project ID/Key로 API 호출시, 해당 Query Parameter로 해당 chain-id가 입력된 호출만 허용됩니다.

cURL 예 : (KIP17:ListContractsInDeployerPool)

Copy
Copied
curl --location --request GET 'https://kip17-api.klaytnapi.com/v2/contract?chain-id=1001' \
--header 'x-chain-id: 1001' \
--header 'Authorization: Basic {{your authorization}}'

호출 성공 (chain-id가 1001인 케이스)

Copy
Copied
//200 response
{
  "cursor": "",
  "items": [
    {
      "address": "0x8c467e64972627809080646cd6e99e65e97a4b34",
      "alias": "katelin-ottilie",
      "chainId": "1001",
      "name": "ProjectAPIToken2",
      "symbol": "Jessyca"
    },
    {
      "address": "0x7ebb8374affe6abfd0cff4f1e79a6d2f36d57d9b",
      "alias": "eldred-william",
      "chainId": "1001",
      "name": "ProjectAPIToken2",
      "symbol": "Logan"
    }
  ]
}

호출 실패 (chain-id가 1001이 아닌 케이스)

Copy
Copied
//401 response
{
  "code": 1010040,
  "message": "your request does not satisfy rules set to the project"
}

Query Filtering 2: KIP-17 토큰 히스토리 조회시 size=5만 허용

프로젝트 목록에서 프로젝트를 선택 후 Actions & Filters 메뉴를 선택합니다.

사진에 보여지는 것처럼 Action으로 kip17::GetTokenHistory를 선택합니다. Sub Action이 없는 액션이기 때문에 스킵하고, Action Filter로 Query type을 선택, 필터 이름은 size, 패턴은 희망하는 5를 입력합니다.

조회 size 필터링

입력을 마친 후 [Action & Filter 추가] 버튼을 클릭합니다.

이후 해당 Project ID/Key로 API 호출시, 해당 Query Parameter로 size=5로 입력된 호출만 허용됩니다.

cURL 예 :

Copy
Copied
curl --location --request GET 'http://kip17-api.klaytnapi.com/v2/contract/{{your contract alias}}/token/{{your token-id}}/history?size=5' \
--header 'x-chain-id: {{x-chain-id}}' \
--header 'Authorization: Basic {{your authorization}}'

호출 성공 (size가 5인 케이스)

Copy
Copied
//200 response
{
  "cursor": "",
  "items": [
    {
      "from": "0x0000000000000000000000000000000000000000",
      "timestamp": 1621833241,
      "to": "0x8abe38707b1ea6cd6a2fda8d710e733a819bcd8d"
    },
    {
      "from": "0x8abe38707b1ea6cd6a2fda8d710e733a819bcd8d",
      "timestamp": 162183332,
      "to": "0x3vcdew707b1ea6cd6a2fda8d710e733a819bcd8d"
    },
    {
      "from": "0x3vcdew707b1ea6cd6a2fda8d710e733a819bcd8d",
      "timestamp": 1621833321,
      "to": "0x8abe38707b1ea6cd6a2fda8d710e733a819bcd8d"
    },
    {
      "from": "0x3vcdew707b1ea6cd6a2fda8d710e733a819bcd8d",
      "timestamp": 1621833651,
      "to": "0x8abe38707b1ea6cd6a2fda8d710e733a819bcd8d"
    },
    {
      "from": "0x3vcdew707b1ea6cd6a2fda8d710e733a819bcd8d",
      "timestamp": 1621833931,
      "to": "0x8abe38707b1ea6cd6a2fda8d710e733a819bcd8d"
    }
  ]
}

호출 실패 (size가 5가 아닌 다른 값을 넣은 케이스)

Copy
Copied
//401 response
{
  "code": 1010040,
  "message": "your request does not satisfy rules set to the project"
}

RLP Filtering: Wallet API 클레이 전송 트랜잭션 from 계정 필터링

프로젝트 목록에서 프로젝트를 선택 후 Actions & Filters 메뉴를 선택합니다.

사진에 보여지는 것처럼 Action으로 wallet:tx:basic-RLPTx를 선택합니다. Sub Action이 없는 액션이기 때문에 스킵하고, Action Filter로 rlp type을 선택, 필터 이름은 {Body에서 rlp 필드 위치(gjson지원)}#rlp#{rlp 인코딩된 body에서의 필드(gjson 지원)}, 패턴으로는 희망하는 계정 주소를 입력합니다.

아래는 from 필드의 계정 주소가 0x59733a0943465fc4f5540b368d92a9d08472e959인 경우만 허용하는 예시입니다.

Copy
Copied
{
  "from": "0x59733a0943465fc4f5540b368d92a9d08472e959",
  "gas": 1000000,
  "gasPrice": "0x5d21dba00",
  "input": "0x3078313233",
  "nonce": 2,
  "signatures": [
    {
      "R": "0x76d842c247cc55e3a4becff0f11fc99b14d8730bf24620c33d77819a504166f6",
      "S": "0x4e1359142cbf87965648d813505d211bd3e6b0b5618f93e1a4e6ed6e8b1af17d",
      "V": "0x7f5"
    }
  ],
  "to": "0x60d0902c428d0e197f97a756011fd4893c1e57b0",
  "typeInt": 16,
  "value": "0x121111111111111111"
}

위의 JSON object를 RLP 인코딩하면 아래의 rlp값을 얻을 수 있습니다.

Copy
Copied
{
0x10f88e028505d21dba00830f42409460d0902c428d0e197f97a756011fd4893c1e57b0891211111111111111119459733a0943465fc4f5540b368d92a9d08472e959853078313233f847f8458207f5a076d842c247cc55e3a4becff0f11fc99b14d8730bf24620c33d77819a504166f6a04e1359142cbf87965648d813505d211bd3e6b0b5618f93e1a4e6ed6e8b1af17d
}

따라서 아래와 같은 Body를 입력해 wallet:tx:basic-RLPTx를 요청할 수 있습니다.

Copy
Copied
{
  "rlp": "0x10f88e028505d21dba00830f42409460d0902c428d0e197f97a756011fd4893c1e57b0891211111111111111119459733a0943465fc4f5540b368d92a9d08472e959853078313233f847f8458207f5a076d842c247cc55e3a4becff0f11fc99b14d8730bf24620c33d77819a504166f6a04e1359142cbf87965648d813505d211bd3e6b0b5618f93e1a4e6ed6e8b1af17d",
  "submit": true
}

아래 사진처럼 Filter 이름은 rlp#rlp#from, 패턴은 0x59733a0943465fc4f5540b368d92a9d08472e959를 입력합니다.

RLP 필터링

입력을 마친 후 [Action & Filter 추가] 버튼을 클릭합니다.

이후 해당 Project ID/Key로 API 호출시, 해당 계정 주소에 대한 호출만 허용됩니다.

cURL 예 :

Copy
Copied
curl --location --request POST 'https://wallet-api.klaytnapi.com/v2/tx/rlp' \
--header 'x-chain-id: 1001' \
--header 'Authorization: Basic {your authorization}' \
--header 'Content-Type: application/json' \
--data-raw '{
    "rlp": "0x10f88e028505d21dba00830f42409460d0902c428d0e197f97a756011fd4893c1e57b0891211111111111111119459733a0943465fc4f5540b368d92a9d08472e959853078313233f847f8458207f5a076d842c247cc55e3a4becff0f11fc99b14d8730bf24620c33d77819a504166f6a04e1359142cbf87965648d813505d211bd3e6b0b5618f93e1a4e6ed6e8b1af17d",
    "submit": true
}'
...

호출 성공 (from에 설정한 주소(0x59733a0943465fc4f5540b368d92a9d08472e959)를 넣은 케이스)

Copy
Copied
//200 response
{
  "from": "0x59733a0943465fc4f5540b368d92a9d08472e959",
  "gas": 1000000,
  "gasPrice": "0x5d21dba00",
  "input": "0x3078313233",
  "nonce": 2,
  "rlp": "0x10f88e028505d21dba00830f42409460d0902c428d0e197f97a756011fd4893c1e57b0891211111111111111119459733a0943465fc4f5540b368d92a9d08472e959853078313233f847f8458207f5a076d842c247cc55e3a4becff0f11fc99b14d8730bf24620c33d77819a504166f6a04e1359142cbf87965648d813505d211bd3e6b0b5618f93e1a4e6ed6e8b1af17d",
  "signatures": [
    {
      "R": "0x76d842c247cc55e3a4becff0f11fc99b14d8730bf24620c33d77819a504166f6",
      "S": "0x4e1359142cbf87965648d813505d211bd3e6b0b5618f93e1a4e6ed6e8b1af17d",
      "V": "0x7f5"
    }
  ],
  "status": "Submitted",
  "to": "0x60d0902c428d0e197f97a756011fd4893c1e57b0",
  "transactionHash": "0x9a36190fa34c2433687db9e3fc9a699cd9c7b3d195a1867ef77c242351789893",
  "typeInt": 16,
  "value": "0x121111111111111111"
}

호출 실패 (from0x59733a0943465fc4f5540b368d92a9d08472e959가 아닌 다른 주소를 넣은 케이스)

Copy
Copied
//401 response
{
  "code": 1010040,
  "message": "your request does not satisfy rules set to the project"
}

특정 액션에 대한 호출 모두 허용

필터 없이 특정 액션의 모든 호출을 허용하려면 Sub Action과 Action Filter 칸을 비워두고 등록합니다. 아래 두 가지 케이스를 예로 설명하겠습니다.

특정 액션만 허용

1. Node API의 모든 메서드 호출 허용

발급받은 Project ID/Key를 통해 node::CallRPC액션에 대한 모든 호출을 허용할 수 있습니다.

프로젝트 목록에서 프로젝트를 선택 후 Actions & Filters 메뉴를 선택합니다.

아래 사진에 보이는 것처럼 Action으로는 node::CallRPC를 선택하고, Sub Action과 Action Filter는 비워둡니다.

Node API 필터링 - 1

입력을 마친 후 [Action & Filter 추가] 버튼을 클릭합니다.

이후 해당 Project ID/Key로 node::CallRPC액션 호출시 모든 요청이 허용됩니다.

2. KIP-17 토큰 발행 모두 허용

발급받은 Project ID/Key를 통해 kip17::MintToken액션에 대한 모든 호출을 허용할 수 있습니다. 우선 프로젝트 목록에서 프로젝트를 선택한 후 Actions & Filters 메뉴를 선택합니다.

아래 사진에 보이는 것처럼 Action으로 kip17::MintToken을 선택합니다. Sub Action이 없는 액션이기 때문에 생략하고, Action Filter도 비워둡니다.

KIP17 토큰 발행 필터링 - 1

입력을 마친 후 [Action & Filter 추가] 버튼을 클릭합니다.

이후 해당 Project ID/Key로 API 호출 시 모든 요청이 허용됩니다.

특정 액션에 대해 여러 필터 허용

KIP-17 토큰 히스토리 조회 시 특정 개수만 허용

프로젝트는 특정 액션에 대해 복수의 필터를 허용할 수 있습니다. 예를 들어 KIP-17 토큰 히스토리 조회시 size=3size=5두 개의 필터를 적용할 수 있습니다. 프로젝트 목록에서 프로젝트를 선택 후 Actions & Filters 메뉴를 선택합니다.

size=3 허용

아래 사진에 보이는 것처럼 Action으로 kip17::GetTokenHistory를 선택합니다. 해당 액션에는 Sub Action이 없기 때문에 생략하고, Action Filter로 Query type을 선택하여 Filter 이름에는 size, 패턴에는 3을 입력한 후 [추가] 버튼을 클릭합니다. 입력을 마치면 [Action & Filter 추가] 버튼을 클릭합니다.

KIP17 토큰 조회 필터링 - 1

size=5 허용

아래 사진에 보여지는 것처럼 kip17:GetTokenHistory에 size=3으로 설정된 액션이 추가된 것을 확인합니다. 추가로 Action으로 kip17::GetTokenHistory를 선택합니다. Action Filter로 Query type을 선택, Filter 이름에는 size, 패턴에는 5를 입력한 후 [추가] 버튼을 클릭합니다. 입력을 마치면 [Action & Filter 추가] 버튼을 클릭합니다.

KIP17 토큰 조회 필터링 - 2

danger

주의사항: 한 액션에 동일한 필드명을 가진 필터를 복수 적용하지 마십시오.

아래 사진에 보이는 것처럼 한 개의 kip17::GetTokenHistory 액션에 대해 복수의 size 필터를 추가할 경우, kip17::GetTokenHistory 액션에 대한 모든 호출이 허용되지 않습니다.

KIP17 토큰 조회 필터링 - 3

KAS 액션 정의

Anchor API

도메인 : https://anchor-api.klaytnapi.com

Anchor API에 대한 자세한 설명은 Anchor API Reference를 참고합니다.

액션 ID API PATH 설명
anchor:operator:RetrieveOperators GET /v1/operator 모든 오퍼레이터 목록 조회
anchor:operator:RetrieveOperator GET /v1/operator/:operator-id 특정 오퍼레이터 조회
anchor:block:AnchorBlock POST /v1/anchor 앵커링 트랜잭션 생성
anchor:block:RetrieveTxs GET /v1/operator/:operator-id/tx 오퍼레이터로 앵커링 트랜잭션 목록 조회
anchor:block:RetrieveTxByHash GET /v1/operator/:operator-id/tx/:transaction-hash 트랜잭션 해시로 앵커링 트랜잭션 조회
anchor:block:RetrieveTxByPayload GET /v1/operator/:operator-id/payload/:payload-id 페이로드로 앵커링 트랜잭션 조회

Node API

도메인 : https://node-api.klaytnapi.com

Node API에 대한 자세한 설명은 Node API Reference를 참고합니다.

액션 ID API PATH 설명
node::CallRPC POST /v1/klaytn JSON RPC 호출
node::GetFtContractMetadata GET /v1/metadata/ft/:address FT 컨트랙트 조회
node::GetNftContractMetadata GET /v1/metadata/nft/:address NFT 컨트랙트 조회
node::GetNftMetadata GET /v1/metadata/nft/:address/:id NFT 조회

Token Hisotry API

도메인 : https://th-api.klaytnapi.com

Token History API에 대한 자세한 설명은 Token History API Reference를 참고합니다.

액션 ID API PATH 설명
th:preset-pool:GetTransfersByPresetPools GET /v2/transfer 토큰 송수신 기록 조회
th::GetTransfersByTxHash GET /v2/transfer/tx/:txHash 트랜잭션 해시로 토큰 송수신 기록 조회
th::GetTransfersByAddress GET /v2/transfer/account/:address EOA로 토큰 송수신 기록 조회
th::GetContractFts GET /v2/contract/ft 모든 FT 컨트랙트 정보 목록 조회
th::GetContractFt GET /v2/contract/ft/:ftAddress 특정 FT 컨트랙트 정보 조회
th::GetContractNfts GET /v2/contract/nft 모든 NFT 컨트랙트 정보 목록 조회
th::GetContractNft GET /v2/contract/nft/:nftAddress 특정 NFT 컨트랙트 정보 조회
th::GetContractMts GET /v2/contract/mt 모든 MT 컨트랙트 정보 목록 조회
th::GetContractMt GET /v2/contract/mt/:mtAddress 특정 MT 컨트랙트 정보 조회
th::GetContractNftTokens GET /v2/contract/nft/:nftAddress/token 특정 NFT 컨트랙트의 모든 토큰 정보 조회
th::GetContractNftTokensByOwner GET /v2/contract/nft/:nftAddress/owner/:ownerAddress 특정 EOA가 가진 모든 NFT 토큰 정보 조회
th::GetContractNftToken GET /v2/contract/nft/:nftAddress/token/:tokenId 특정 NFT 토큰 정보 조회
th::GetContractMtTokens GET /v2/contract/mt/:mtAddress/token 특정 MT 컨트랙트의 모든 토큰 정보 조회
th::GetContractMtTokensById GET /v2/contract/mt/:mtAddress/token/:tokenId 특정 MT의 모든 소유자 기록 조회
th::GetContractMtTokensByOwner GET /v2/contract/mt/:mtAddress/owner/:ownerAddress 특정 EOA가 가진 모든 MT 토큰 정보 조회
th::GetContractMtTokenByOwner GET /v2/contract/mt/:mtAddress/owner/:ownerAddress/token/:tokenId 특정 EOA가 가진 MT 토큰 정보 조회 조회
th::GetContractNftTokenHistory GET /v2/contract/nft/:nftAddress/token/:tokenId/history 특정 NFT 소유권 변경 기록 조회
th::GetAccountContracts GET /v2/account/:address/contract 특정 EOA가 가진 컨트랙트 정보 조회
th::GetAccountTokens GET /v2/account/:address/token 특정 EOA가 가진 토큰 정보 조회

Wallet API

도메인 : https://wallet-api.klaytnapi.com

Wallet API에 대한 자세한 설명은 Wallet API Reference를 참고합니다.

액션 ID API PATH 설명
wallet::CreateAccount POST /v2/account 기본 계정 생성
wallet:account:GetAccounts GET /v2/account 계정 목록 조회
wallet:account:GetAccount GET /v2/account/:address 계정 조회
wallet:account:DeleteAccount DELETE /v2/account/:address 계정 삭제
wallet:account:DisableAccount PUT /v2/account/:address/disable 계정 비활성화
wallet:account:EnableAccount PUT /v2/account/:address/enable 계정 활성화
wallet:account:SignTx POST /v2/account/:address/tx/:tx_id/sign 트랜잭션 사인
wallet:account:UpdateToMultisigAccount PUT /v2/account/:address/multisig Multisig 계정 업데이트
wallet:account:GetAssociatedAccountsWithPubKey GET /v2/pubkey/:public_key/account 공개키 연관 계정 조회
wallet:account:CreateFeePayerAccount POST /v2/feepayer 대납 계정 생성
wallet:account:GetFeePayerAccounts GET /v2/feepayer 대납 계정 목록 조회
wallet:account:GetFeePayerAccount GET /v2/feepayer/:address 대납 계정 조회
wallet:account:DeleteFeePayerAccount DELETE /v2/feepayer/:address 대납 계정 삭제
wallet:tx:basic-LegacyTx POST /v2/tx/legacy 레거시 트랜잭션 발생
wallet:tx:basic-ValueTransferTx POST /v2/tx/value 클레이 전송 트랜잭션
wallet:tx:basic-ContractDeployTx POST /v2/tx/contract/deploy 컨트랙트 배포 트랜잭션
wallet:tx:basic-ContractExecuteTx POST /v2/tx/contract/execute 컨트랙트 배포 트랜잭션
wallet:tx:basic-CancelTx DELETE /v2/tx 트랜잭션 취소
wallet:tx:basic-AnchorTx POST /v2/tx/anchor 앵커링 트랜잭션
wallet:tx:basic-RLPTx POST /v2/tx/rlp RLP를 이용한 트랜잭션
wallet:tx:basic-UpdateAccountTx PUT /v2/tx/account 계정 업데이트 트랜잭션
wallet:tx:GetTxInfo GET /v2/tx/:tx_hash 트랜잭션 조회
wallet:tx:ContractCall POST /v2/tx/contract/call 컨트랙트 호출
wallet:tx:fd-FDValueTransferTx POST /v2/tx/fd/value 글로벌 대납 클레이 전송 트랜잭션
wallet:tx:fd-FDContractDeployTx POST /v2/tx/fd/contract/deploy 글로벌 대납 컨트랙트 배포 트랜잭션
wallet:tx:fd-FDContractExecuteTx POST /v2/tx/fd/contract/execute 글로벌 대납 컨트랙트 실행 트랜잭션
wallet:tx:fd-FDCancelTx DELETE /v2/tx/fd 글로벌 대납 취소 트랜잭션
wallet:tx:fd-FDAnchorTx POST /v2/tx/fd/anchor 글로벌 대납 앵커링 트랜잭션
wallet:tx:fd-FDRLPTx POST /v2/tx/fd/rlp 글로벌 대납 RLP를 이용한 트랜잭션
wallet:tx:fd-FDUpdateAccountTx PUT /v2/tx/fd/account 글로벌 대납 계정 업데이트 트랜잭션
wallet:tx:fduser-UserFDValueTransferTx POST /v2/tx/fd-user/value 유저 대납 클레이 전송 트랜잭션
wallet:tx:fduser-UserFDContractDeployTx POST /v2/tx/fd-user/contract/deploy 유저 대납 컨트랙트 배포 트랜잭션
wallet:tx:fduser-UserFDContractExecuteTx POST /v2/tx/fd-user/contract/execute 유저 대납 컨트랙트 실행 트랜잭션
wallet:tx:fduser-UserFDCancelTx DELETE /v2/tx/fd-user 유저 대납 취소 트랜잭션
wallet:tx:fduser-UserFDAnchorTx POST /v2/tx/fd-user/anchor 유저 대납 앵커링 트랜잭션
wallet:tx:fduser-UserFDRLPTx POST /v2/tx/fd-user/rlp 유저 대납 RLP를 이용한 트랜잭션
wallet:tx:fduser-UserFDUpdateAccountTx PUT /v2/tx/fd-user/account 유저 대납 계정 업데이트 트랜잭션
wallet:tx:GetMultisigTxInfo GET /v2/multisig/account/:address/tx 보류중인 트랜잭션 조회
wallet:tx:SignMultisigTx POST /v2/multisig/account/:address/tx/:tx_id/sign 보류중인 트랙잭션에 서명
wallet:tx:SignMultisigTxBySig POST /v2/multisig/tx/:tx_id/sign 준비된 서명 값으로 트랙잭션 서명
wallet:stat:GetAccountCount GET /v2/stat/count 사용자의 Klaytn 계정 및 키 보유 개수
wallet:stat:GetAccountCountByKRN GET /v2/stat/count/krn 사용자의 특정 계정 저장소 내에 Klaytn 계정 보유 개수
wallet:key:CreateKey POST /v2/key 키 생성
wallet:key:GetKey GET /v2/key/:key_id 키 조회
wallet:key:DeleteKey DELETE /v2/key/:key_id 키 삭제
wallet:key:SignData POST /v2/key/:key_id/sign 키를 이용한 데이터 서명
wallet:account:RegisterAccounts POST /v2/registration/account 계정 등록

KIP-17 API

도메인 : https://kip17-api.klaytnapi.com

KIP-17 API에 대한 자세한 설명은 KIP-17 API Reference를 참고합니다.

액션 ID API PATH 설명
kip17::DeployContract POST /v2/contract KIP-17 컨트랙트 배포
kip17::ListContractsInDeployerPool GET /v2/contract KIP-17 컨트랙트 목록 조회
kip17::GetContract GET /v2/contract/:caoa KIP-17 컨트랙트 정보 조회
kip17::MintToken POST /v2/contract/:caoa/token KIP-17 컨트랙트 토큰 발행
kip17::ListTokensInContract GET /v2/contract/:caoa/token KIP-17 컨트랙트의 토큰 발행 목록 조회
kip17::GetToken GET /v2/contract/:caoa/token/:token-id KIP-17 컨트랙트의 특정 토큰 정보 조회
kip17::TransferToken POST /v2/contract/:caoa/token/:token-id KIP-17 토큰 전송
kip17::BurnToken DELETE /v2/contract/:caoa/token/:token-id KIP-17 토큰 소각
kip17::ApproveToken POST /v2/contract/:caoa/approve/:token-id 토큰 전송 승인
kip17::ApproveAll POST /v2/contract/:caoa/approveall 모든 토큰 전송 승인
kip17::GetOwnerTokens GET /v2/contract/:caoa/owner/:owner 특정 토큰 소유자가 소유한 토큰 목록 조회
kip17::GetTokenHistory GET /v2/contract/:caoa/token/:token-id/history 토큰 소유권 변경 기록 조회

KIP-7 API

도메인 : https://kip7-api.klaytnapi.com

KIP-7 API에 대한 자세한 설명은 KIP-7 API Reference를 참고합니다.

액션 ID API PATH 설명
kip7::ListContractsInDeployerPool GET /v1/contract KIP-7 컨트랙트 목록 조회
kip7::DeployContract POST /v1/contract KIP-7 컨트랙트 배포
kip7::GetContract GET /v1/contract/:caoa KIP-7 컨트랙트 정보 조회
kip7::PauseContract POST /v1/contract/:caoa/pause KIP-7 컨트랙트 정지
kip7::UnpauseContract POST /v1/contract/:caoa/unpause KIP-7 컨트랙트 재개
kip7::MintToken POST /v1/contract/:caoa/mint KIP-7 토큰 생성
kip7::TransferToken POST /v1/contract/:caoa/transfer KIP-7 토큰 전송
kip7::TransferFromToken POST /v1/contract/:caoa/transfer-from KIP-7 토큰 대리 전송
kip7::GetTokenBalance GET /v1/contract/:caoa/account/:owner/balance KIP-7 토큰 잔액 조회
kip7::ApproveToken POST /v1/contract/:caoa/approve 토큰 전송 승인
kip7::GetAllowanceToken GET /v1/contract/:caoa/account/:owner/allowance/:spender KIP-7 승인된 토큰 수량 조회
kip7::BurnToken DELETE /v1/contract/:caoa/burn KIP-7 토큰 소각
kip7::BurnFromToken DELETE /v1/contract/:caoa/burn-from KIP-7 승인된 토큰 소각
kip7::GetDefaultDeployer GET /v1/deployer/default 컨트랙트 배포 기본 계정 조회

KIP-37 API

도메인: https://kip37-api.klaytnapi.com

KIP-37 API에 대한 자세한 설명은 KIP-37 API Reference를 참고하세요.

액션 ID API PATH 설명
kip37:externalApi:HandleGetContracts GET /v2/contract KIP-37 컨트랙트 목록 조회
kip37:externalApi:HandleDeployContract POST /v2/contract KIP-37 컨트랙트 배포
kip37:externalApi:HandleImportContract POST /v2/contract/import KIP-37 컨트랙트 Import
kip37:externalApi:HandleGetContract GET /v2/contract/:caoa KIP-37 컨트랙트 정보 조회
kip37:externalApi:HandleUpdateContract PUT /v2/contract/:caoa KIP-37 컨트랙트 정보 수정
kip37:externalApi:HandleApproveAll POST /v2/contract/:contract-address-or-alias/approveall KIP-37 컨트랙트 모든 토큰 전송 승인
kip37:externalApi:HandlePauseContract POST /v2/contract/:contract-address-or-alias/pause KIP-37 컨트랙트 정지
kip37:externalApi:HandleUnpauseContract POST /v2/contract/:contract-address-or-alias/unpause KIP-37 컨트랙트 재개
kip37:externalApi:HandleCreateToken POST /v2/contract/:contract-address-or-alias/token KIP-37 토큰 생성
kip37:externalApi:HandleGetTokens GET /v2/contract/:contract-address-or-alias/token KIP-37 토큰 목록 조회
kip37:externalApi:HandleMintTokens POST /v2/contract/:contract-address-or-alias/token/mint KIP-37 토큰 추가 발행
kip37:externalApi:HandleTransferTokens POST /v2/contract/:contract-address-or-alias/token/transfer KIP-37 토큰 전송
kip37:externalApi:HandleBurnTokens DELETE /v2/contract/:contract-address-or-alias/token KIP-37 토큰 소각
kip37:externalApi:HandlePauseToken POST /v2/contract/:contract-address-or-alias/token/pause/:token-id KIP-37 토큰 정지
kip37:externalApi:HandleUnpauseToken POST /v2/contract/:contract-address-or-alias/token/unpause/:token-id KIP-37 토큰 재개
kip37:externalApi:HandleGetTokenOwnershipsByOwner GET /v2/contract/:contract-address-or-alias/owner/:owner-address/token KIP-37 특정 계정이 소유한 토큰 목록 조회
kip37:externalApi:HandleGetDefaultDeployer GET /v2/deployer/default 컨트랙트 배포 기본 계정 조회

Metadata API

도메인: https://metadata-api.klaytnapi.com

Metadata API에 대한 자세한 설명은 Metadata API Reference를 참고하세요.

액션 ID API PATH 설명
metadata:externalApi:UploadMetadata POST /v1/metadata 메타데이터 업로드
metadata:externalApi:UploadAsset POST /v1/metadata/asset 에셋 업로드