KAS Project 생성, 수정, 관리

이 페이지는 Project 생성, Action & Filter 추가, Credential 재발급 방법을 안내합니다. 또한 본 튜토리얼의 대상은 KAS에 가입을 완료한 회원입니다. 아직 KAS에 가입하지 않으셨다면, KAS 가입, 인증, 권한, SDK 설치를 참고하여 가입을 진행해주시기 바랍니다.

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

    • Request Header의 Origin과 Project 생성시 지정한 Origin이 일치하는 경우에만 API 호출 허용

    • origin 예: https://www.example.com

    2) User-Agent

    • Request Header의 User-Agent와 Project 생성시 지정한 User-Agent가 일치하는 경우에만 API 호출 허용

    • 지정한 User-Agent 문자열로 시작되는 경우(prefix match)에만 호출 허용

    • 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

    3) IP Whitelist

    • Client의 IP와 Project 생성시 지정한 IP 값이 일치하는 경우에만 API 호출 허용

    4) KAS Action

    • Action : Project 생성시 지정한 API 액션에 대해서만 호출 허용

    • SubAction : Project 생성시 지정한 subaction에 대해서만 호출 허용 (Node RPC 메소드와 같이 subaction이 필요한 액션 사용시 작성)

    • Filters

      • body : Request Body의 내용과 Project 생성시 지정한 Body의 내용이 일치하는 경우에만 API 호출 허용

      • query : Request Query의 내용과 Project 생성시 지정한 Query의 내용이 일치하는 경우에만 API 호출 허용

      • rlp : Request Body에 적힌 RLP의 내용과 Project 생성시 지정한 RLP의 패턴이 일치하는 경우에만 API 호출 허용

Project 생성하기

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

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

프로젝트 생성을 완료하면 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 목록에서 생성한 Project ID와 해당 프로젝트에 대한 간략한 정보가 목록에 나타난 것을 확인할 수 있습니다. 추후 프로젝트의 내용을 수정하고 싶을 경우 해당 ID를 클릭하여 Project 상세정보메뉴에서 수정할 수 있습니다.

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

Project Action & Filter 추가하기

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

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

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

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

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

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

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

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

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

Project Key 재발급

기존에 생성된 프로젝트의 Key를 재발급 하고 싶을 경우 MyPage > Project 메뉴에서 해당 프로젝트를 선택 후 Project 상세정보에서 "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)

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

cURL 예:

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)

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

cURL 예:

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 만 허용됩니다. 필요한 경우 프로젝트 상세정보에서 수정할 수 있습니다.

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

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

  • 잔액을 확인할 계정 주소

  • Quantity Tag (예: ["latest", "earliest"])

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

{
  "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, 패턴으로는 특정 계정 주소를 입력합니다.

입력을 마친 후 Action & Filter 추가 버튼을 누릅니다.

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

cURL 예:

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)를 넣은 케이스)

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

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

//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): 토큰을 받는 사람의 클레이튼 계정 주소

  • Token ID (id): 토큰의 고유번호

  • Token URI (uri): 토큰 정보를 담은 JSON 파일의 위치를 URI로 표현한 값

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

{
  "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, 패턴은 희망하는 특정 계정 주소를 입력합니다.

입력을 마친 후 Action & Filter 추가 버튼을 누릅니다.

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

cURL 예 :

curl --location --request POST 'https://kip17-api.klaytnapi.com/v1/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)를 넣은 케이스)

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

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

//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를 참고 부탁드립니다.

입력을 마친 후 Action & Filter 추가 버튼을 누릅니다.

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

cURL 예 : (KIP17:ListContractsInDeployerPool)

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

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

//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이 아닌 케이스)

//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를 입력합니다.

입력을 마친 후 Action & Filter 추가 버튼을 누릅니다.

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

cURL 예 :

curl --location --request GET 'http://kip17-api.klaytnapi.com/v1/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인 케이스)

//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가 아닌 다른 값을 넣은 케이스)

//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인 경우만 허용하는 예시입니다.

{
    "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값을 얻을 수 있습니다.

{
0x10f88e028505d21dba00830f42409460d0902c428d0e197f97a756011fd4893c1e57b0891211111111111111119459733a0943465fc4f5540b368d92a9d08472e959853078313233f847f8458207f5a076d842c247cc55e3a4becff0f11fc99b14d8730bf24620c33d77819a504166f6a04e1359142cbf87965648d813505d211bd3e6b0b5618f93e1a4e6ed6e8b1af17d
}

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

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

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

입력을 마친 후 Action & Filter 추가 버튼을 누릅니다.

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

cURL 예 :

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)를 넣은 케이스)

//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가 아닌 다른 주소를 넣은 케이스)

//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는 비워둡니다.

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

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

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

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

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

입력을 마친 후 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 추가 버튼을 클릭합니다.

size=5 허용

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

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

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

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

사용자의 클레이튼 계정 및 키 보유 개수

wallet:stat:GetAccountCountByKRN

GET

/v2/stat/count/krn

사용자의 특정 계정 저장소 내에 클레이튼 계정 보유 개수

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

/v1/contract

KIP-17 컨트랙트 배포

kip17::ListContractsInDeployerPool

GET

/v1/contract

KIP-17 컨트랙트 목록 조회

kip17::GetContract

GET

/v1/contract/:caoa

KIP-17 컨트랙트 정보 조회

kip17::MintToken

POST

/v1/contract/:caoa/token

KIP-17 컨트랙트 토큰 발행

kip17::ListTokensInContract

GET

/v1/contract/:caoa/token

KIP-17 컨트랙트의 토큰 발행 목록 조회

kip17::GetToken

GET

/v1/contract/:caoa/token/:token-id

KIP-17 컨트랙트의 특정 토큰 정보 조회

kip17::TransferToken

POST

/v1/contract/:caoa/token/:token-id

KIP-17 토큰 전송

kip17::BurnToken

DELETE

/v1/contract/:caoa/token/:token-id

KIP-17 토큰 소각

kip17::ApproveToken

POST

/v1/contract/:caoa/approve/:token-id

토큰 전송 승인

kip17::ApproveAll

POST

/v1/contract/:caoa/approveall

모든 토큰 전송 승인

kip17::GetOwnerTokens

GET

/v1/contract/:caoa/owner/:owner

특정 토큰 소유자가 소유한 토큰 목록 조회

kip17::GetTokenHistory

GET

/v1/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

/v1/contract

KIP-37 컨트랙트 목록 조회

kip37:externalApi:HandleDeployContract

POST

/v1/contract

KIP-37 컨트랙트 배포

kip37:externalApi:HandleImportContract

POST

/v1/contract/import

KIP-37 컨트랙트 Import

kip37:externalApi:HandleGetContract

GET

/v1/contract/:caoa

KIP-37 컨트랙트 정보 조회

kip37:externalApi:HandleUpdateContract

PUT

/v1/contract/:caoa

KIP-37 컨트랙트 정보 수정

kip37:externalApi:HandleApproveAll

POST

/v1/contract/:contract-address-or-alias/approveall

KIP-37 컨트랙트 모든 토큰 전송 승인

kip37:externalApi:HandlePauseContract

POST

/v1/contract/:contract-address-or-alias/pause

KIP-37 컨트랙트 정지

kip37:externalApi:HandleUnpauseContract

POST

/v1/contract/:contract-address-or-alias/unpause

KIP-37 컨트랙트 재개

kip37:externalApi:HandleCreateToken

POST

/v1/contract/:contract-address-or-alias/token

KIP-37 토큰 생성

kip37:externalApi:HandleGetTokens

GET

/v1/contract/:contract-address-or-alias/token

KIP-37 토큰 목록 조회

kip37:externalApi:HandleMintTokens

POST

/v1/contract/:contract-address-or-alias/token/mint

KIP-37 토큰 추가 발행

kip37:externalApi:HandleTransferTokens

POST

/v1/contract/:contract-address-or-alias/token/transfer

KIP-37 토큰 전송

kip37:externalApi:HandleBurnTokens

DELETE

/v1/contract/:contract-address-or-alias/token

KIP-37 토큰 소각

kip37:externalApi:HandlePauseToken

POST

/v1/contract/:contract-address-or-alias/token/pause/:token-id

KIP-37 토큰 정지

kip37:externalApi:HandleUnpauseToken

POST

/v1/contract/:contract-address-or-alias/token/unpause/:token-id

KIP-37 토큰 재개

kip37:externalApi:HandleGetTokenOwnershipsByOwner

GET

/v1/contract/:contract-address-or-alias/owner/:owner-address/token

KIP-37 특정 계정이 소유한 토큰 목록 조회

kip37:externalApi:HandleGetDefaultDeployer

GET

/v1/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

에셋 업로드

Last updated