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)과 접근 제어를 정의할 수 있습니다.
- Origin
- Request Header의 Origin과 Project 생성시 지정한 Origin이 일치하는 경우에만 API 호출 허용
-
origin 예:
https://www.example.com
- 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
- IP Whitelist
- Client의 IP와 Project 생성시 지정한 IP 값이 일치하는 경우에만 API 호출 허용
- 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 Console에 로그인 후 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 목록에서 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의 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.0
에 0x60d0902c428D0E197F97a756011Fd4893C1E57B0
가 아닌 다른 주소를 넣은 케이스)
//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를 준비합니다.
{
"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/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
)를 넣은 케이스)
//200 response
{
"status": "Submitted",
"transactionHash": "0xd6c256493b89698363f80f080a3d5038d0be7261628175dfd61e056b45a2657b"
}
호출 실패 (to
에 0x837Bbfa5dBCfD781c8EE45970d53F1F1198Bb6Bb
가 아닌 다른 주소를 넣은 케이스)
//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/v2/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/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인 케이스)
//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"
}
호출 실패 (from
에 0x59733a0943465fc4f5540b368d92a9d08472e959
가 아닌 다른 주소를 넣은 케이스)
//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=3
과 size=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 추가] 버튼을 클릭합니다.
danger
주의사항: 한 액션에 동일한 필드명을 가진 필터를 복수 적용하지 마십시오.
아래 사진에 보이는 것처럼 한 개의 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 | 사용자의 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 | 에셋 업로드 |