Smart Contract 배포 및 조회

앞서 등록 및 생성한 정보를 활용하여 Smart Contract를 블록체인에 배포합니다.

사전 조건

1. ChainZ API Service를 사용하기 위한 인증이 되어 있어야 합니다. 자세한 사항은 Getting Started > 인증 정보 생성 Getting Started > 액세스 토큰 발급 항목을 참고하시기 바랍니다.

2. 발급된 액세스 토큰이 유효 기간 내에 있어야 합니다.

3. Contract Artifact(ABI, Bytecode 및 추가 정보)가 ChainZ API Service에 등록되어 있어야 합니다. 자세한 사항은 'Contract Artifact 정보 등록 및 조회' 항목을 참고하시기 바립니다.

4. Account API를 통해 생성한 Account의 Address를 알고 있어야 합니다. 자세한 사항은 'Account 생성 및 조회' 항목을 참고하시기 바랍니다.

Smart Contract 배포 및 조회

Smart Contract 배포

1. API 정보

Transaction API의 callContractFunction을 사용합니다(참고 링크).

2. 입력 정보

  • 액세스 토큰 & API 키

  • ChainID - Blockchain 식별 정보

  • clientReqId - Request 의 사업자 고유 식별 정보

  • params - From Account의 Address, Contract ID, 초기값 매개변수

3. Smart Contract 배포 예시

Transaction API를 사용하여 Transaction을 전송합니다.

# Transaction API(Smart Contract 배포) 사용 예시 - Request
curl -X POST "https://tx-api.chainz.biz/api/v1/transactions/contract-deployment" \
    -H  "accept: application/json" \
    -H  "x-api-key: {API 키}" \
    -H  "Authorization: Bearer {액세스 토큰}" \
    -H  "Content-Type: application/json" \
    -d "{
            "chain": "8768cb29-2417-4281-84b1-924b82ebb720",
            "clientReqId": "dc397f5d-6eb6-49e2-a4b4-b603b29c4729",
            "params": {
                "from": "0xbdc1776dd12feda8cc0f85fec65ea9e6ec906791",
                "contractId": "745c7625-1467-4b66-ae9f-a9f8664f418c",
                "initParams": [
                ],
                "gas": "200000",
                "gasPrice": "0"
            },
            "maxRetry": 3,
            "isSync": true
        }"

clientReqId(Client Request ID) 생성 규칙은 UUID(Universally Unique IDentifier: 범용 고유 식별자) 규칙을 따릅니다. 테스트용 UUID는 다음을 참고하여 생성하시기 바랍니다.

# Transaction API(Smart Contract 배포) 사용 예시 - Response
{
    "status": "SUCCEEDED",
    "log": "{\"type\":\"CONTRACT_DEPLOYMENT\",\"isSync\":true,\"maxRetry\":3,\"txReceipt\":{\"blockHash\":\"0xfb461d242230abea4163284ae89ef4bb385446ba0aaa7cf8270ce39a140fc2b1\",\"blockNumber\":\"0x2b9a0f\",\"contractAddress\":\"0x64a0b1f26453e9fe70f03eb1a039664432da464f\",\"cumulativeGasUsed\":\"0x1d023\",\"from\":\"0xbdc1776dd12feda8cc0f85fec65ea9e6ec906791\",\"gasUsed\":\"0x1d023\",\"logs\":[],\"logsBloom\":\"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"status\":\"0x1\",\"to\":null,\"transactionHash\":\"0xa7651c822cb1eab6f8114dda801e2d8977226c86898e5d533dfc150a97548493\",\"transactionIndex\":\"0x0\"}}",
    "timestamp": "2021-09-30T09:29:28.959Z",
    "id": "98f9ee15-25c3-4bb4-900d-ed15411b4fc7"
}
  • Response로 받은 ID 값(RequestID)은 Transaction 의 처리 상태를 확인할 때 사용합니다.

Smart Contract 배포 상태 조회

1. API 정보

Transaction API의 findTxLogsByReqId 사용합니다(참고 링크).

2. 입력 정보

  • 액세스 토큰 & API 키

  • ChainID - Blockchain 식별 정보

  • clientReqId - Request 의 사업자 고유 식별 정보

  • params - From Account의 Address, Contract ID, 초기값 매개변수

3. Smart Contract 배포 상태 조회 예시

# Transaction API(Tx Receipt 조회) 사용 예시 - Request
curl -X GET "https://tx-api.chainz.biz/api/v1/transactions/98f9ee15-25c3-4bb4-900d-ed15411b4fc7
/logs" \
    -H  "accept: application/json" \
    -H  "x-api-key: {API 키}" \
    -H  "Authorization: Bearer {액세스 토큰}"
# Transaction API(Tx Receipt 조회) 사용 예시 - Response
{
    "logList": [
        {
            "status": "REQUESTED",
            "log": "{\"type\":\"CONTRACT_DEPLOYMENT\",\"isSync\":true,\"maxRetry\":3}",
            "timestamp": "2021-09-30T09:29:26.812Z"
        },
        {
            "status": "SUCCEEDED",
            "log": "{\"type\":\"CONTRACT_DEPLOYMENT\",\"isSync\":true,\"maxRetry\":3,\"txReceipt\":{\"blockHash\":\"0xfb461d242230abea4163284ae89ef4bb385446ba0aaa7cf8270ce39a140fc2b1\",\"blockNumber\":\"0x2b9a0f\",\"contractAddress\":\"0x64a0b1f26453e9fe70f03eb1a039664432da464f\",\"cumulativeGasUsed\":\"0x1d023\",\"from\":\"0xbdc1776dd12feda8cc0f85fec65ea9e6ec906791\",\"gasUsed\":\"0x1d023\",\"logs\":[],\"logsBloom\":\"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\",\"status\":\"0x1\",\"to\":null,\"transactionHash\":\"0xa7651c822cb1eab6f8114dda801e2d8977226c86898e5d533dfc150a97548493\",\"transactionIndex\":\"0x0\"}}",
            "timestamp": "2021-09-30T09:29:28.959Z"
        }
    ],
    "requestId": "98f9ee15-25c3-4bb4-900d-ed15411b4fc7",
    "pCode": "DGFK6277"
}

4. log 정보 분석

Response Data 의 status 정보가 'SUCCEEDED' 상태인 log 정보의 모든 역슬래시(\)를 제거 후,

{"type":"CONTRACT_DEPLOYMENT","isSync":true,"maxRetry":3,"txReceipt":{"blockHash":"0xfb461d242230abea4163284ae89ef4bb385446ba0aaa7cf8270ce39a140fc2b1","blockNumber":"0x2b9a0f","contractAddress":"0x64a0b1f26453e9fe70f03eb1a039664432da464f","cumulativeGasUsed":"0x1d023","from":"0xbdc1776dd12feda8cc0f85fec65ea9e6ec906791","gasUsed":"0x1d023","logs":[],"logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","status":"0x1","to":null,"transactionHash":"0xa7651c822cb1eab6f8114dda801e2d8977226c86898e5d533dfc150a97548493","transactionIndex":"0x0"}}

JSON Parser(https://jsonformatter.org/json-parser)에서 JSON 형식으로 포맷팅합니다.

"txReceipt" 정보를 보면 Transaction Receipt 상세 정보를 확인할 수 있습니다.

status가 'SUCCEEDED' 상태인 log를 JSON Parsing한 예시
{
  "type": "CONTRACT_DEPLOYMENT",
  "isSync": true,
  "maxRetry": 3,
  "txReceipt": {
    "blockHash": "0xfb461d242230abea4163284ae89ef4bb385446ba0aaa7cf8270ce39a140fc2b1",
    "blockNumber": "0x2b9a0f",
    "contractAddress": "0x64a0b1f26453e9fe70f03eb1a039664432da464f",
    "cumulativeGasUsed": "0x1d023",
    "from": "0xbdc1776dd12feda8cc0f85fec65ea9e6ec906791",
    "gasUsed": "0x1d023",
    "logs": [],
    "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
    "status": "0x1",
    "to": null,
    "transactionHash": "0xa7651c822cb1eab6f8114dda801e2d8977226c86898e5d533dfc150a97548493",
    "transactionIndex": "0x0"
  }
}

txReceipt 정보 중, blockHash, blockNumber, transactionHash 정보를 가지고 Block Explorer에서 상세 정보를 확인 할 수 있습니다.

Block Explorer에서 조회

Block Explorer에서 Transaction 상세 정보를 조회할 수 있습니다.

메인넷 Block Explorer URL: https://block-explorer.chainz.biz

테스트넷 Block Explorer URL: https://test-block-explorer.chainz.biz

1. Block Hash로 검색

샘플 Block Hash: 0xfb461d242230abea4163284ae89ef4bb385446ba0aaa7cf8270ce39a140fc2b1

2. 조회 결과 화면

  • 보다 자세한 사항은 Getting Started > Block Explorer 사용 항목을 참고하시기 바랍니다.

Last updated

Was this helpful?