Search
K

블록체인 API

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

시작하기

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

엔드포인

Protx 서비스를 위한 최종 호출 주소는 다음과 같습니다.
Service
Endpoint
Description
PROT 네트워크 트랜젝션 API
  • JsonRPC
PROT 네트워크 블록 정보 확인을 위한 API
  • JsonRPC
개인 키 관리를 위한 지갑 서비스
  • JsonRPC

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

Request
Response
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"
}
}'
{
"jsonrpc": "2.0",
"id": "1234",
"result": {
"resultCode": "200",
"resultMessage": "Success",
"resultData": {
"tempKey": "fc3d6024d6bca69fd54a138615b28e74"
}
}
}

프로토콜 오류

  • -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 modified 1yr ago