API 사용
ChainZ API를 사용하는 방법에 대해 설명합니다.
준비 사항
1. ChainZ Service 가입 후, 인증 정보 생성을 통해 Authorization 정보와 API 키를 갖고 있어야 합니다.
2. Authorization 정보를 이용하여 ChainZ API 인증 서버로 부터 액세스 토큰을 발급 받아야 합니다.
API 사용 절차
Account API 사용하기
공통 설정
ChainZ Account API URL:
account-api.chainz.biz
사전 조건
Chain ID 필요
입력 정보
액세스 토큰 & API 키
User ID - 사업자의 계정 식별 정보
Chain ID - Blockchain 식별 정보
1. 사용자의 Blockchain account를 생성하려면 터미널에서 다음과 같이 입력합니다.
curl -X POST \
"https://{ChainZ Account API URL}/api/v1/accounts" \
-H "accept: application/json" \
-H "Authorization: Bearer {액세스 토큰}" \
-H "x-api-key: {API 키}"
-H 'Content-Type: application/json' \
-d '{
"userId": "{User ID}",
"chainId": "{Chain ID}"
}'
{
"id": "e0a476e3-8a1f-41a9-b67d-98703e816fe7",
"userId": "test",
"chainId": "8768cb29-2417-4281-84b1-924b82ebb720",
"address": "0x508b8bc6c521e24c2eedd0f2280c7021b752efdb",
"status": "ACTIVE"
}
2. 사용자의 Blockchain account 정보를 보려면 터미널에서 다음과 같이 입력합니다.
curl -X GET \
"https://{ChainZ Account API URL}/api/v1/accounts?userId={User ID}&chainId={Chain ID}" \
-H "accept: application/json" \
-H "Authorization: Bearer {액세스 토큰}" \
-H "x-api-key: {API 키}"
{
"totalCount": 1,
"data": [
{
"providerCode": "A1B1C1D1",
"id": "051f3e8d-67ab-4d26-a42e-805b3b048e86",
"userId": "user0001",
"chainId": "5a9d9e56-ef2b-401c-a026-cedeed1ce457",
"address": "0x5b55bac99d5d6678a35d1f9bd1ede1ad799d6902",
"status": "ACTIVE",
"createdAt": "2021-05-19T20:19:48.000Z",
"updatedAt": "2021-05-20T05:19:48.000Z"
}
]
}
Contract API 사용하기
공통 설정
ChainZ Contract API URL:
contract-api.chainz.biz
사전 조건(Smart Contract 빌드 정보 등)
Smart Contract의 artifacts 중 ABI 및 bytecode 필요
입력 정보
액세스 토큰 & API 키
ABI - Smart Contract build artifacts
Bytecode - Smart Contract build artifacts
1. Smart Contract 빌드 정보(Artifacts) 등록
curl -X 'POST' \
'https://{ChainZ Contract API URL}/api/v1/contract/artifacts' \
-H 'accept: application/json' \
-H 'Authorization: Bearer {액세스 토큰}' \
-H 'x-api-key: {API 키}' \
-H 'Content-Type: application/json' \
-d '{
"name": "storage",
"version": "1.0.0",
"abi": [{"inputs":[],"name":"retrieve","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"num","type":"uint256"}],"name":"store","outputs":[],"stateMutability":"nonpayable","type":"function"}],
"bytecode": "608060405234801561001057600080fd5b5061012f806100206000396000f3fe6080604052348015600f57600080fd5b506004361060325760003560e01c80632e64cec11460375780636057361d146051575b600080fd5b603d6069565b6040516048919060c2565b60405180910390f35b6067600480360381019060639190608f565b6072565b005b60008054905090565b8060008190555050565b60008135905060898160e5565b92915050565b60006020828403121560a057600080fd5b600060ac84828501607c565b91505092915050565b60bc8160db565b82525050565b600060208201905060d5600083018460b5565b92915050565b6000819050919050565b60ec8160db565b811460f657600080fd5b5056fea264697066735822122062db17618d746a1967495ede611efc2c1e881cb29cbd6b40b23bd35a720c134c64736f6c63430008010033"
}'
{
"id": "e5024600-c7eb-4327-959a-3ef8e09f0152",
"providerCode": "A1B1C1D1",
"name": "storage",
"version": "1.0.0",
"abi": [
{
"inputs": [],
"name": "retrieve",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "num",
"type": "uint256"
}
],
"name": "store",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
}
],
"bytecode": "608060405234801561001057600080fd5b5061012f806100206000396000f3fe6080604052348015600f57600080fd5b506004361060325760003560e01c80632e64cec11460375780636057361d146051575b600080fd5b603d6069565b6040516048919060c2565b60405180910390f35b6067600480360381019060639190608f565b6072565b005b60008054905090565b8060008190555050565b60008135905060898160e5565b92915050565b60006020828403121560a057600080fd5b600060ac84828501607c565b91505092915050565b60bc8160db565b82525050565b600060208201905060d5600083018460b5565b92915050565b6000819050919050565b60ec8160db565b811460f657600080fd5b5056fea264697066735822122062db17618d746a1967495ede611efc2c1e881cb29cbd6b40b23bd35a720c134c64736f6c63430008010033",
"upgradable": false,
"status": "CREATED",
"createdAt": "2021-05-31T03:33:30.531Z",
"updatedAt": "2021-05-31T03:33:30.531Z"
}
Transaction API 사용하기하
공통 설정
ChainZ Transaction API URL:
tx-api.chainz.biz
사전 조건
Chain ID 필요
서명이 필요한 Transaction 일 경우
Account API를 통한 Account 생성(From Address)
Contract Transaction 일 경우
Contract API 를 통해 등록된 Contract ID
입력 정보
액세스 토큰 & API 키
Chain ID - Blockchain 식별 정보
Client Request ID - Request 의 사업자 고유 식별 정보
...
Request ID - Request 의 고유한 식별 정보
Callback URL - Callback 받을 서버 HTTP Endpoint 주소. (Optional)
1. Transaction API를 사용하여 Transaction을 전송합니다. Response로 받은 ID 값(RequestID)으로 Transaction 의 처리 상태를 확인할 수 있습니다.
curl -X POST "https://{ChainZ Transaction API URL}/api/v1/transactions/contract-deployment" \
-H "accept: application/json" \
-H "x-api-key: {API 키}" \
-H "Authorization: Bearer {액세스 토큰}" \
-H "Content-Type: application/json" \
-d "{\"chain\":\"3033f611-5b06-4661-a4d1-d375bd8e442c\",\"clientReqId\":\"3fa85f64-5717-4562-b3fc-2c963f66aff6\",\"maxRetry\":3,\"isSync\":false,\"params\":{\"from\":\"0xceed092e9d5b134d3aff067dc049b937d0facf4a\",\"contractId\":\"e5024600-c7eb-4327-959a-3ef8e09f0152\",\"initParams\":[]}}"
Transaction 전송 시에 UUID는 다르게 발송해야 합니다. 여러 번 테스트가 필요하면, 기존에 쓴 UUID에서 한 두개 문자만 변경한 후 테스트를 하세요.
{
"status": "REQUESTED",
"log": "{\"type\":\"CONTRACT_DEPLOYMENT\",\"isSync\":false,\"maxRetry\":3}",
"timestamp": "2021-05-31T05:07:27.706Z",
"id": "07b28242-735d-49f1-a05f-357ee7a86682"
}
2. Transaction의 처리 상태를 조회하려면 다음과 같이 합니다.
Transaction 조회 API(/api/v1/transactions/{reqId}/logs)를 사용하여 Log 정보를 확인합니다.
curl -X GET "https://{ChainZ Transaction API URL}/api/v1/transactions/{Request ID}/logs" \
-H "accept: application/json" \
-H "x-api-key: {API 키}" \
-H "Authorization: Bearer {액세스 토큰}"
{
"logList": [
{
"status": "REQUESTED",
"log": "{\"type\":\"CONTRACT_DEPLOYMENT\",\"isSync\":false,\"maxRetry\":3}",
"timestamp": "2021-05-31T04:52:21.593Z"
},
{
"status": "SUCCEEDED",
"log": "{\"type\":\"CONTRACT_DEPLOYMENT\",\"isSync\":false,\"maxRetry\":3,\"txReceipt\":{\"blockHash\":\"0x7ff42b2c456eb03d57a72e5e17a83da9316c43ea5363409870686eea9f726a9b\",\"blockNumber\":\"0x2bef4\",\"contractAddress\":\"0x72ede34c09a5aa7276b8d655223d35a38fcb79ce\",\"cumulativeGasUsed\":\"0x1d023\",\"from\":\"0xceed092e9d5b134d3aff067dc049b937d0facf4a\",\"gasUsed\":\"0x1d023\",\"logs\":[],\"logsBloom\":\"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"status\":\"0x1\",\"to\":null,\"transactionHash\":\"0x7b0b826c5ec221a8dd616c17648e42b1e009e0efdc224ee63b5011c24da4ae64\",\"transactionIndex\":\"0x0\"}}",
"timestamp": "2021-05-31T04:52:23.779Z"
}
],
"requestId": "c648c217-1260-4223-ba2c-9bdd0ee9b6e8",
"pCode": "MW012345"
}
Response Data 의 status 정보가 'SUCCEEDED' 상태인 log 정보를 JSON Parsing하면 txReceipt정보에서 Transaction Receipt 확인이 가능합니다.
{
"type": "CONTRACT_DEPLOYMENT",
"isSync": false,
"maxRetry": 3,
"txReceipt": {
"blockHash": "0x7ff42b2c456eb03d57a72e5e17a83da9316c43ea5363409870686eea9f726a9b",
"blockNumber": "0x2bef4",
"contractAddress": "0x72ede34c09a5aa7276b8d655223d35a38fcb79ce",
"cumulativeGasUsed": "0x1d023",
"from": "0xceed092e9d5b134d3aff067dc049b937d0facf4a",
"gasUsed": "0x1d023",
"logs": [],
"logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"status": "0x1",
"to": null,
"transactionHash": "0x7b0b826c5ec221a8dd616c17648e42b1e009e0efdc224ee63b5011c24da4ae64",
"transactionIndex": "0x0"
}
}
txReceipt 정보 중, lockHash, blockNumber, transactionHash 정보를 가지고 Block Explorer에서 상세 정보를 확인 할 수 있습니다. 자세한 사항은 Block Explorer 사용 항목을 참고하시기 바랍니다.
Token API 사용하기
공통 설정
ChainZ Token API URL:
token-api.chainz.biz
토큰 컨트랙트 배포
Token Contract를 배포 하기 위해 다음과 같이 입력합니다.
사전 조건
Token API 혹은 Account API를 통한 Sender Account 생성
입력 정보
Chain ID - Blockchain 식별 정보
Client Request ID - Request 의 사업자 고유 식별 정보
Sender - 토큰 컨트랙트 배포 계정
Owner - 토큰 컨트랙트 소유 계정이며, 초기 발행량 보유
Name - 토큰 이름
Symbol - 토큰 기호
Amount - 토큰 초기 발행량
curl -X 'POST' \
'https://{ChainZ Token API URL}/api/v1/chains/{Chain ID}/deployments' \
-H 'accept: application/json' \
-H 'Authorization: Bearer {액세스 토큰}' \
-H 'x-api-key: {API 키}' \
-H 'Content-Type: application/json' \
-d '{
"clientReqId": "3fa85f64-5717-4562-b3fc-29682566afa6",
"sender": "0xf5bea619d23d0dbd95488aa3a8e3e76a8bc7568d",
"owner": "0xf5bea619d23d0dbd95488aa3a8e3e76a8bc7568d",
"name": "Test Token",
"symbol": "TST",
"amount": 100000000000
}'
{
"providerCode": "BQHQ6700",
"chainId": "{Chain ID}",
"clientReqId": "3fa85f64-5717-4562-b3fc-29682566afa6",
"sender": "0xf5bea619d23d0dbd95488aa3a8e3e76a8bc7568d",
"owner": "0xf5bea619d23d0dbd95488aa3a8e3e76a8bc7568d",
"name": "Test Token",
"symbol": "TST",
"amount": 100000000000,
"contractAddress": "0x46850f87a6df4fd83a7a70f7936da4b5129ce280",
"txHash": "0x5c1cd8bb5ac9f129b73c4434adb2f7cd11905d58f690b03b1c87babe41c41ac8",
"blockNumber": 2072977,
"status": "SUCCESS",
"createdAt": "2021-07-27T00:07:52.660Z"
}
토큰 전송
보유한 Token 을 상대방에게 전송하고자 할 경우 다음과 같이 입력합니다.
사전 조건
Token Contract 배포 주소
Token API 혹은 Account API를 통한 Account 생성(sender)
입력 정보
Chain ID - Blockchain 식별 정보
Contract Address - 토큰 컨트랙트 주소
Client Request ID - Request 의 사업자 고유 식별 정보
Sender - 토큰을 보내는 계정 주소
Recipient - 토큰을 받을 계정 주소
Amount - 전송할 토큰
curl -X 'POST' \
'https://{ChainZ Token API URL}/api/v1/chains/{Chain ID}/contracts/0x46850f87a6df4fd83a7a70f7936da4b5129ce280/transfer' \
-H 'accept: application/json' \
-H 'Authorization: Bearer {Access Token}' \
-H 'x-api-key: {API Key}' \
-H 'Content-Type: application/json' \
-d '{
"clientReqId": "3fa85f64-5717-4562-b3fc-2c962326afa6",
"sender": "0xf5bea619d23d0dbd95488aa3a8e3e76a8bc7568d",
"recipient": "0x82567d516a119a12262737397caff457f6725700",
"amount": 1
}'
{
"providerCode": "BQHQ6700",
"contractAddress": "0x46850f87a6df4fd83a7a70f7936da4b5129ce280",
"chainId": {Chain ID},
"clientReqId": "3fa85f64-5717-4562-b3fc-2c962326afa6",
"sender": "0xf5bea619d23d0dbd95488aa3a8e3e76a8bc7568d",
"recipient": "0x82567d516a119a12262737397caff457f6725700",
"amount": 1,
"txHash": "0x0318cff466e5965279f873e1ba1d2b4705e2dd7695d285a0909e927614d49c52",
"blockNumber": 2073925,
"status": "SUCCESS",
"createdAt": "2021-07-27T00:39:33.283Z"
}
토큰 잔액 조회
보유한 Token의 잔액을 조회 하기 위해 다음과 같이 입력합니다.
사전 조건
Token Contract 배포 주소
입력 정보
Chain ID - Blockchain 식별 정보
Contract Address - 토큰 컨트랙트 주소
Owner Address - 잔액을 조회하고자 하는 계정 주소
curl -X 'GET' \
'https://{ChainZ Token API URL}/api/v1/chains/{Chain ID}/contracts/0x46850f87a6df4fd83a7a70f7936da4b5129ce280/balanceOf/0xf5bea619d23d0dbd95488aa3a8e3e76a8bc7568d' \
-H 'accept: application/json' \
-H 'Authorization: Bearer {Access Token}' \
-H 'x-api-key: {API Key}'
100000000000
Last updated
Was this helpful?