블록체인 API

이장에는 개발을 위한 리소스가 포함되어 있습니다. 토큰/블록 API 및 유용한 튜토리얼을 포함합니다.

시작하기

Protx는 다양한 문제를 해결하기 위해 PROT 플랫폼에서 함께 작동하는 API 컬렉션을 제공합니다. 개발자는 비즈니스 요구를 충족하기 위해 PROT 플랫폼을 사용하여 솔루션을 구축할 수 있습니다.

엔드포인

Protx 서비스를 위한 최종 호출 주소는 다음과 같습니다.

JsonRPC

JSON-RPC는 상태 비저장, 경량 원격 프로시저 호출(RPC) 프로토콜입니다. 이 규격은 주로 여러 데이터 구조와 그 처리에 관한 규칙을 정의한다. 동일한 프로세스 내에서, 소켓을 통해, http를 통해, 또는 다양한 메시지 전달 환경에서 개념을 사용할 수 있다는 점에서 전송에 구애받지 않는다. 데이터 형식으로 JSON(RFC 4627)을 사용합니다. 데이터 형식으로는 JSON (RFC 4627) 를 사용합니다.

RPC 호출은 요청 개체를 서버로 보내는 것으로 나타납니다. Request 개체에는 다음과 같은 구성원이 있습니다:

  • jsonrpc JSON-RPC 프로토콜의 버전을 지정하는 문자열입니다. 정확히 "2.0"이어야 합니다.

  • method 호출할 메서드의 이름을 포함하는 문자열입니다. 단어 rpc로 시작하고 마침표 문자(U+002E 또는 ASCII 46)로 시작하는 메서드 이름은 rpc-internal 메서드 및 확장용으로 예약되어 있으므로 다른 용도로 사용해서는 안 됩니다.

  • params 메서드를 호출하는 동안 사용할 매개 변수 값을 유지하는 구조화 값입니다. 이 파라메터는 생략할 수 있습니다.

  • id 클라이언트가 설정한 식별자로 문자열, 번호 또는 NULL 값을 포함해야 합니다(포함된 경우). 포함되지 않은 경우 통지로 간주됩니다. 일반적으로 값은 Null이 아니어야 하며 숫자는 분수 부분을 포함하지 않아야 합니다.

요청 본문:

{
    "jsonrpc": "2.0",
    "id": "7723",
    "method": "methodName",
    "params": {
        "key":"value"
    }
}

응답 (성공):

{
    "jsonrpc":"2.0",
    "id": "7723",
    "result":{
        "TransactionID": "705e0c42118e8007dd5271a7c90bcff3a8ce496a6da6d5bb74e16655a1f3d01d",
        "resultData": "ec141e57d14ea0bbb0cb6a9c37abf06a7e323d77e170b0862d8575bebee078909999fd881ead6d208567cc5179f57b6833069cea332a7d2c3b359fbde85229c4"
    }
}

응답 값 (프로토콜 오류 시):

{
    "jsonrpc": "2.0",
    "id": "7723",
    "error": {
        "code": -32700,
        "msg": "parse error. not well formed"
    }
}

응답 값 (서비스 오류 ):

{
  "jsonrpc":"2.0",
  "id":"7723",
  "result":{
    "resultCode": "500",
    "resultMessage": "Error Message",
    "resultData": ""
  }
}

Example

curl --location --request POST 'https://test-api.protx.io/token' \
--header 'Content-Type: application/json' \
--data-raw '{
    "jsonrpc": "2.0",
    "id": "1234",
    "method": "net_getTempKey",
    "params": {
        "address": "0xf9acd4c2d6a358113bfec174e34d2af01323028a",
        "keyType": "transfer"
    }
}'

프로토콜 오류

  • -32700 : 구문 오류. 폼 형식이 일치하지 않음

  • -32701 : 구문 오류. 지원하지 않는 인코딩

  • -32702 : 구문 오류. 인코딩 시 케릭터 셋 다름

  • -32600 : 서버 오류. xml-rpc 오류. 스펙이 다름.

  • -32601 : 서버 오류. 메소드 없음

  • -32602 : 서버 오류. 메소드 파라메터가 비 정상적임

  • -32603 : 서버 오류. 내부 xml-rpc 오류

  • -32500 : 어플리케이션 오류

  • -32400 : 시스템 오류

  • -32300 : 통신 오류

주소와 비밀키

createAddress를 사용하여 서버 지갑에 새 개인 키를 만들 수 있습니다. createAddress는 생성된 주소, 니모닉 및 secretKey 값을 반환합니다. importAddress를 사용하여 아카이브된 니모닉에서 개인 키를 복원할 수 있습니다.

secretKey는 serverWallet을 사용시 필요합니다. 서버 Wallet 사용 시 인증이 필요한 경우 해시(tempKey + "|" + secretKey)를 통해 생성된 hashKey를 서버 Wallet으로 전송하여 지갑 내부에 저장된 secretKey와 전달된 tempKey를 사용하여 인증합니다.

hashKey = CryptoUtil.getSah256(tempKey +"|" + secretKey)

서명하는 방법

create와 같은 트랜잭션을 생성하는 API를 사용하는 경우토큰 및 전송에서는 서명을 매개 변수로 만들고 전달해야 합니다. signData를 호출하여 서명을 만들 수 있습니다. 예를 들어 전송입니다. "fromAddress | toAddress | mount | hashKey"로 구성된 문자열을 sha256으로 해시하고 결과를 16진수 문자열로 만들었습니다. signData에 이 문자열을 매개 변수로 전달하여 서명 값을 가져올 수 있습니다.

String data = fromAddress + "|" + toAddress + "|" + amount + "|" + tempKey + "|" + hashKey;log.debug("data=" + data);
String hashData = CryptoUtil.getSha256(data);
resultMessage = tokenApiService.signData(fromAddress, hashData, tempKey, hashKey);

...

public static String getSha256(String msg) throws NoSuchAlgorithmException {
  MessageDigest md = MessageDigest.getInstance("SHA-256");
  md.update(msg.getBytes());
  byte[] mdBytes = md.digest();
  String mdStr = bytesToHex(mdBytes);
  return mdStr;
}

Last updated