티스토리 뷰

반응형
이 글은 Hyperledger Indy의 공식 문서를 번역한 것입니다.
원본 사이트 : https://hyperledger-indy.readthedocs.io/projects/node/en/latest/requests.html

 

이 문서는 지원되는 클라이언트의 Request(쓰기 및 읽기)에 관한 것입니다. 트랜잭션 및 원장(내부)에 대한 트랜잭션에 관심이 있는 경우, transaction을 살펴보십시오.

indy-sdk는 아래에 지정된 형식을 예상합니다.

role에 대한 역할 및 권한(roles and permissions)과 각 유형의 트랜잭션을 생성할 수 있는 사람을 참조하십시오.

 

Common Request Structure(공통 Request 구조)

각 Request(쓰기 및 읽기)은 다수의 공통 메타 데이터 필드가 있는 JSON입니다.

{
    'operation': {
        'type': <request type>,
        <request-specific fields>
    },
    
    'identifier': <author DID>,
    `endorser`: <endorser DID>, 
    'reqId': <req_id unique integer>,
    'protocolVersion': 2,
    'signature': <signature_value>,
    # 'signatures': {
    #      `did1`: <sig1>,
    #      `did2`: <sig2>,
    #  }    
           
}
  • operation (json): request 별 작업 json
    • type: request 유형은 다음 값 중 하나입니다.
      • write requests (transactions):
        • NODE = “0”
        • NYM = “1”
        • TXN_AUTHOR_AGREEMENT = “4”
        • TXN_AUTHOR_AGREEMENT_AML = “5”
        • ATTRIB = “100”
        • SCHEMA = “101”
        • CLAIM_DEF = “102”
        • POOL_UPGRADE = “109”
        • NODE_UPGRADE = “110”
        • POOL_CONFIG = “111”
        • REVOC_REG_DEF = “113”
        • REVOC_REG_ENTRY = “114”
        • AUTH_RULE = “120”
        • AUTH_RULES = “122”
      • read requests:
        • GET_TXN = “3”
        • GET_TXN_AUTHOR_AGREEMENT = “6”
        • GET_TXN_AUTHOR_AGREEMENT_AML = “7”
        • GET_ATTR = “104”
        • GET_NYM = “105”
        • GET_SCHEMA = “107”
        • GET_CLAIM_DEF = “108”
        • GET_REVOC_REG_DEF = “115”
        • GET_REVOC_REG = “116”
        • GET_REVOC_REG_DELTA = “117”
        • GET_AUTH_RULE = “121”
    • 요청 별 데이터
  • identifier (base58-encoded string): 16 또는 32 비트 DID 값에 대한 base58 인코딩 문자열인 트랜잭션 작성자의 Identifier. 읽기 request의 경우 읽기 request submitter입니다. 모든 DID일 수 있습니다(NYM txn으로 원장에 필요하지 않음). 쓰기 request의 경우 트랜잭션 작성자입니다. identifier 대신 트랜잭션을 제출하는 endorser 필드와 다를 수 있습니다. endorser가 없는 경우 작성자(identifier)는 endorser의 역할을 수행하고 자신의 request를 제출합니다. 또한 일부 request(예: NYM)의 경우 dest 필드와 다를 수 있습니다. 여기서 dest는 대상 identifier(예: 새로 생성된 DID의 identifier)입니다. 예:
    • identifier는 쓰기 권한이 없는 트랜잭션 작성자의 DID입니다. endorser는 Endorser 역할(즉, 쓰기 권한이 있는 사용자)의 DID입니다.
    • 새로운 NYM 생성: identifier는 새로운 DID를 생성하는 Endorser의 DID이며 dest는 새로 생성된 DID입니다.
  • reqId (integer): 트랜잭션 request의 고유 ID 번호
  • protocolVersion (integer; optional): 클라이언트-노드 프로토콜의 버전. 각각의 새로운 버전은 Request/Reply/Data에 새로운 기능을 도입할 수 있습니다. 클라이언트와 다른 노드의 버전이 다를 수 있으므로 클라이언트와 노드 간의 역 호환성을 지원하려면 이 필드가 필요합니다.
  • signature (base58-encoded string; signatures 필드와 상호 배타적): submitter의 서명. 읽기 request에는 필요하지 않습니다.
  • signatures (map of base58-encoded string; signature 필드와 상호 배타적): 다중 서명 사례의 submitter 서명. 클라이언트의 identifier가 key이고 base58로 인코딩 된 서명 문자열이 value인 map입니다. 읽기 request에는 필요하지 않습니다.

아래에서 각 request 유형에 대한 각 request 별 데이터의 형식을 찾으십시오.

 

Common Write Request Structure(공통 쓰기 Request 구조)

Domain 및 플러그인에 의해 추가된 원장에 대한 쓰기 request에는 추가 트랜잭션 작성자 계약(Transaction Author Agreement) 승인 필드가 있을 수 있습니다.:

{
    'operation': {
        'type': <request type>,
        <request-specific fields>
    },
    
    'identifier': <author DID>,
    'endorser': <endorser DID>,
    'reqId': <req_id unique integer>,
    'taaAcceptance': {
        'taaDigest': <digest hex string>,
        'mechanism': <mechaism string>,
        'time': <time integer>
     }
    'protocolVersion': 2,
    'signature': <signature_value>,
    # 'signatures': {
    #      `did1`: <sig1>,
    #      `did2`: <sig2>,
    #  }    
           
}

쓰기 request를 위한 추가(선택 사항) 필드:

  • endorser (base58-encoded string, optional): Endorser의 identifier(DID)는 원본 작성자(identifier)를 대신하여 16 비트 또는 32 비트 DID 값에 대한 base58 인코딩 문자열로 트랜잭션을 제출합니다. endorser가 없는 경우 작성자(identifier)는 endorser의 역할을 수행하고 자신의 request를 제출합니다. endorser가 있는 경우 작성자(identifier)와 Endorser(endorser) 모두가 트랜잭션을 다중 서명해야합니다.
  • taaAcceptance (dict, optional): 트랜잭션 작성자 계약이 set/enabled 된 경우 Domain 및 플러그인 추가 원장의 모든 트랜잭션(쓰기 request)에는 최신 트랜잭션 작성자 계약에 대한 승인이 포함되어야합니다.
    • taaDigest (SHA256 hex digest string): 원장에 대한 최신 트랜잭션 작성자 계약의 SHA256 16진 다이제스트. 다이제스트는 TRANSACTION_AUTHOR_AGREEMENT의 version과 text를 연결하여 계산됩니다.
    • mechanism (string): 서명을 수락하는 데 사용되는 메커니즘. 원장의 최신 트랜잭션 작성자 계약 수락 메커니즘 목록에 있어야합니다.
    • time (integer as POSIX timestamp): 트랜잭션 작성자 계약 승인 시간

 

Reply Structure for Write Requests(쓰기 Request에 대한 Reply 구조)

각 쓰기 request에는 여러 가지 공통 메타 데이터 필드가 있습니다. 이러한 필드의 대부분은 실제로 원장 트랜잭션의 메타 데이터 필드입니다(transactions 참조).

{
    'op': 'REPLY', 
    'result': {
        "ver": <...>,
        "txn": {
            "type": <...>,
            "protocolVersion": <...>,
            
            "data": {
                "ver": <...>,
                <txn-specific fields>
            },
            
            "metadata": {
                "reqId": <...>,
                "from": <...>,
                "endorser": <...>,
                "digest": <...>,
                "payloadDigest": <...>,
                "taaAcceptance": {
                    "taaDigest": <...>,
                    "mechanism": <...>,
                    "time": <...>
                 }
            },
        },
        "txnMetadata": {
            "txnTime": <...>,
            "seqNo": <...>,  
            "txnId": <...>
        },
        "reqSignature": {
            "type": <...>,
            "values": [{
                "from": <...>,
                "value": <...>
            }]
        }
    
        'rootHash': '5ecipNPSztrk6X77fYPdepzFRUvLdqBuSqv4M9Mcv2Vn',
        'auditPath': ['Cdsoz17SVqPodKpe6xmY2ZgJ9UcywFDZTRgWSAYM96iA', '3phchUcMsnKFk2eZmcySAWm2T5rnzZdEypW7A5SKi1Qt'],
    }
}
  • ver (string): 컨텐츠를 진화시킬 수 있는 트랜잭션 버전. 모든 하위 필드의 내용은 버전에 따라 달라질 수 있습니다.
  • txn (dict): 트랜잭션 별 페이로드(데이터)
    • type (enum number as string): 지원되는 트랜잭션 유형:
      • NODE = “0”
      • NYM = “1”
      • TXN_AUTHOR_AGREEMENT = “4”
      • TXN_AUTHOR_AGREEMENT_AML = “5”
      • ATTRIB = “100”
      • SCHEMA = “101”
      • CLAIM_DEF = “102”
      • POOL_UPGRADE = “109”
      • NODE_UPGRADE = “110”
      • POOL_CONFIG = “111”
      • REVOC_REG_DEF = “113”
      • REVOC_REG_DEF = “114”
      • AUTH_RULE = “120”
    • protocolVersion (integer; optional): 클라이언트-노드 또는 노드-노드 프로토콜의 버전. 각각의 새로운 버전은 요청/응답/데이터에 새로운 기능을 도입할 수 있습니다. 클라이언트와 다른 노드의 버전이 다를 수 있으므로 클라이언트와 노드 간의 역 호환성을 지원하려면 이 필드가 필요합니다.
    • data (dict): 트랜잭션 별 데이터 필드(각 트랜잭션에 대해서는 다음 섹션 참조).
    • metadata (dict): Request에서 온 메타 데이터
      • from (base58-encoded string): 16 또는 32 비트 DID 값에 대한 base58 인코딩 문자열인 트랜잭션 작성자의 Identifier(DID)입니다. Identifier 대신 트랜잭션을 제출하는 endorser 필드와 다를 수 있습니다. endorser가 없는 경우 작성자(Identifier)는 endorser의 역할을 수행하고 자신의 request를 제출합니다. 또한 일부 요청(예: NYM)의 경우 dest 필드와 다를 수 있습니다. 여기서 dest는 타겟 Identifier(예: 새로 생성된 DID Identifier)입니다.
      • 예:
        • identifier는 쓰기 권한이 없는 트랜잭션 작성자의 DID입니다. endorser는 Endorser 역할(즉, 쓰기 권한이 있는 사용자)의 DID입니다.)
        • 새로운 NYM 생성: identifier는 새로운 DID를 생성하는 Endorser의 DID이며 dest는 새로 생성된 DID입니다.
      • reqId (integer): 트랜잭션 request의 고유 ID 번호
      • digest (SHA256 hex digest string): 초기 request의 모든 필드에 대한 SHA256 해시 16진 다이제스트(서명 포함)
      • payloadDigest (SHA256 hex digest string): 초기 request에서 페이로드 필드의 SHA256 해시 16진 다이제스트. 서명 및 플러그인이 추가된 것을 제외한 모든 필드
      • endorser (base58-encoded string, optional): endorser의 identifier(DID)는 원본 작성자(identifier)를 대신하여 16 비트 또는 32 비트 DID 값에 대한 base58 인코딩 문자열로 트랜잭션을 제출합니다. endorser가 없는 경우 작성자(identifier)는 endorser의 역할을 수행하고 자신의 request를 제출합니다. endorser가 있는 경우 작성자(identifier)와 Endorser(endorser) 모두가 트랜잭션을 다중 서명해야합니다.
      • taaAcceptance (dict, optional): 트랜잭션 작성자 계약이 set/enabled 된 경우 Domain 및 플러그인 추가 원장의 모든 트랜잭션(쓰기 request)에는 최신 트랜잭션 작성자 계약에 대한 승인이 포함되어야합니다.
- `taaDigest` (SHA256 hex digest string): 원장에 대한 최신 트랜잭션 작성자 계약의 SHA256 16진 다이제스트.
- `mechanism` (string): 서명을 수락하는 데 사용되는 메커니즘. 원장의 최신 트랜잭션 작성자 계약 수락 메커니즘 목록에 있어야합니다.
- `time` (integer as POSIX timestamp): 트랜잭션 작성자 계약 승인 시간
  • txnMetadata (dict): 트랜잭션에 첨부된 메타 데이터
    • txnTime (integer as POSIX timestamp): 트랜잭션이 POSIX 타임 스탬프로 원장에 기록된 시간
    • seqNo (integer): 원장 트랜잭션의 고유한 시퀀스 번호
    • txnId (string, optional): State Trie key(주소 또는 설명 데이터)인 Txn ID. 원장 내에서 고유해야합니다.
  • reqSignature (dict): 트랜잭션 request에 대한 submitter의 서명(txn 필드)
    • type (string enum):
      • ED25519: ed25519 서명
      • ED25519_MULTI: 멀티서명 케이스의 ed25519 서명
    • values (list):
      • from (base58-encoded string): 16 바이트 또는 32 바이트 DID 값에 대한 base58 인코딩 문자열인 서명자의 Identifier(DID)
      • value (base58-encoded string): 서명 값
  • rootHash (base58-encoded hash string): base58로 인코딩 된 원장의 머클 트리 루트 해시
  • auditPath (array of base58-encoded hash strings): base58로 인코딩 된 해시 문자열의 배열로서 원장의 머클 트리 검사 증명(이것은 새로운 트랜잭션이 원장이 추가되었는지 검증하기 위한 암호화 proof입니다.)
  • 각 트랜잭션 유형에 대해 transactions에 정의된 트랜잭션 별 필드

 

Reply Structure for Read Requests(except GET_TXN) (읽기 Request에 대한 Reply 구조(GET_TXN 제외))

아래의 구조는 GET_TXN에는 적용되지 않습니다.

읽기 request에 대한 각 Reply에는 여러 가지 공통 메타 데이터 필드와 state-proof 관련 필드가 있습니다. 이러한 필드 중 일부는 실제로 원장 트랜잭션의 메타 데이터 필드입니다(transactions 참조).

이러한 공동 메타 데이터 값은 실제 데이터와 동일한 수준으로 결과의 JSON에 추가됩니다.

TODO: 실제 트랜잭션 데이터와 메타 데이터를 다른 수준으로 구별하고 분리하는 것을 고려하십시오.

{
    'op': 'REPLY', 
    'result': {
        'type': '105',
        'identifier': 'L5AD5g65TDQr1PPHHRoiGf',
        'reqId': 1514214863899317,
        
        'seqNo': 10,
        'txnTime': 1514214795,

        'state_proof': {
            'root_hash': '7Wdj3rrMCZ1R1M78H4xK5jxikmdUUGW2kbfJQ1HoEpK',
            'proof_nodes': '+QHl+FGAgICg0he/hjc9t/tPFzmCrb2T+nHnN0cRwqPKqZEc3pw2iCaAoAsA80p3oFwfl4dDaKkNI8z8weRsSaS9Y8n3HoardRzxgICAgICAgICAgID4naAgwxDOAEoIq+wUHr5h9jjSAIPDjS7SEG1NvWJbToxVQbh6+Hi4dnsiaWRlbnRpZmllciI6Ikw1QUQ1ZzY1VERRcjFQUEhIUm9pR2YiLCJyb2xlIjpudWxsLCJzZXFObyI6MTAsInR4blRpbWUiOjE1MTQyMTQ3OTUsInZlcmtleSI6In42dWV3Um03MmRXN1pUWFdObUFkUjFtIn348YCAgKDKj6ZIi+Ob9HXBy/CULIerYmmnnK2A6hN1u4ofU2eihKBna5MOCHiaObMfghjsZ8KBSbC6EpTFruD02fuGKlF1q4CAgICgBk8Cpc14mIr78WguSeT7+/rLT8qykKxzI4IO5ZMQwSmAoLsEwI+BkQFBiPsN8F610IjAg3+MVMbBjzugJKDo4NhYoFJ0ln1wq3FTWO0iw1zoUcO3FPjSh5ytvf1jvSxxcmJxoF0Hy14HfsVll8qa9aQ8T740lPFLR431oSefGorqgM5ioK1TJOr6JuvtBNByVMRv+rjhklCp6nkleiyLIq8vZYRcgIA=', 
            'multi_signature': {
                'value': {
                    'timestamp': 1514214795,
                    'ledger_id': 1, 
                    'txn_root_hash': 'DqQ7G4fgDHBfdfVLrE6DCdYyyED1fY5oKw76aDeFsLVr',
                    'pool_state_root_hash': 'TfMhX3KDjrqq94Wj7BHV9sZrgivZyjbHJ3cGRG4h1Zj',
                    'state_root_hash': '7Wdj3rrMCZ1R1M78H4xK5jxikmdUUGW2kbfJQ1HoEpK'
                },
                'signature': 'RTyxbErBLcmTHBLj1rYCAEpMMkLnL65kchGni2tQczqzomYWZx9QQpLvnvNN5rD2nXkqaVW3USGak1vyAgvj2ecAKXQZXwcfosmnsBvRrH3M2M7cJeZSVWJCACfxMWuxAoMRtuaE2ABuDz6NFcUctXcSa4rdZFkxh5GoLYFqU4og6b',
                'participants': ['Delta', 'Gamma', 'Alpha']
            }
        },
        
        'data': <transaction-specific data>,
        
        <request-specific data>
}
  • type (enum number as string): 지원되는 트랜잭션 유형:
    • GET_TXN = “3”
    • GET_TXN_AUTHOR_AGREEMENT = “6”
    • GET_TXN_AUTHOR_AGREEMENT_AML = “7”
    • GET_ATTR = “104”
    • GET_NYM = “105”
    • GET_SCHEMA = “107”
    • GET_CLAIM_DEF = “108”
    • GET_REVOC_REG_DEF = “115”
    • GET_REVOC_REG = “116”
    • GET_REVOC_REG_DELTA = “117”
    • GET_AUTH_RULE = “121”
  • identifier (base58-encoded string): 읽기 Request에 있던 request submitter의 DID 읽기(트랜잭션 작성자를 정의하는 data의 identifier와 다를 수 있음)
  • reqId (integer): 읽기 Request에서와 같이(원장에 트랜잭션을 쓰는 데 사용되는 요청을 정의하는 data의 reqId와 다를 수 있음)
  • seqNo (integer): 원장에 저장된 트랜잭션의 고유한 일련 번호
  • txnTime (integer as POSIX timestamp): POSIX 타임 스탬프로 트랜잭션이 원장에 기록된 시간
  • state_proof (dict): State의 BLS 다중 서명을 사용한 State proof:
    • root_hash (base58-encoded string): 반환된 트랜잭션이 속한 원장에 대한 state trie 루트 해시
    • proof_nodes (base64-encoded string): 지정된 root_hash를 사용하여 state trie에 대해 리턴된 트랜잭션에 대한 state proof
    • multi_signature (dict): 지정된 state trie 루트 해시에 대한 BLS 다중 서명
      • value (dict): BLS 다중 서명이 생성된 값
        • timestamp (integer as POSIX timestamp): state의 마지막 업데이트
        • ledger_id (integer enum): 반환된 트랜잭션이 속한 원장의 ID(Pool=0; Domain=1; Config=2)
        • txn_root_hash (base58-encoded string): 반환된 트랜잭션이 속한 원장의 루트 해시
        • state_root_hash (base58-encoded string): 반환된 트랜잭션이 속한 원장에 대한 state trie 루트 해시
        • pool_state_root_hash (base58-encoded string): BLS 다중 서명이 생성된 시점에 Pool의 상태를 가져오기 위한 pool state trie 루트 해시
      • signature (base58-encoded string): 지정된 root_hash를 사용하여 state trie에 대한 BLS 다중 서명
      • participants (array os strings): BLS 다중 서명에 참여한 노드의 별칭(참여 노드 수는 n-f 이상)
  • data (json or dict): 트랜잭션 별 데이터(각 트랜잭션 유형별 transactions 참조)
  • 읽기 request에 나타나는 request 별 필드

 

Write Requests(쓰기 Request)

각 request 유형에 대한 각 request 별 데이터의 형식입니다.

 

NYM

특정 사용자, endorser, steward 또는 trustee에 대한 새로운 NYM 레코드를 생성합니다. trustee 및 steward만 새로운 endorser를 만들 수 있으며 trustee만이 다른 trustee를 만들 수 있습니다(roles 참조).

request는 새로운 DID 작성, 검증 키 설정 및 회전, 역할 설정 및 변경에 사용될 수 있습니다.

  • dest (base58-encoded string): 16 또는 32 바이트 DID 값에 대한 base58 인코딩 문자열로 된 Target DID. identifier가 submitter의 DID인 identifier 메타 데이터 필드와 다를 수 있습니다. 이들이 동일한 경우(비허가형의 경우), 새로 생성된 verkey로 트랜잭션에 서명해야합니다. 예: identifier는 새로운 DID를 작성하는 Endorser의 DID이고, dest는 새로 작성된 DID입니다.
  • role (enum number as string; optional): 작성되는 사용자 NYM 레코드의 역할. 다음 숫자 중 하나입니다.
    • None (common USER)
    • “0” (TRUSTEE)
    • “2” (STEWARD)
    • “101” (ENDORSER)
    • “201” (NETWORK_MONITOR)
  • Trustee는 NYM의 역할을 None으로 변경할 수 있습니다. 이렇게 하면 쓰기가 금지됩니다(roles 참조).
  • verkey (base58-encoded string, possibly starting with “~”; optional): base58로 인코딩 된 문자열인 Target 검증 키. "~"로 시작할 수 있습니다. 즉, verkey는 축약형이며 디코딩 시 16 바이트 길이여야하고, 그렇지 않으면 디코드 시 32 바이트 길이의 full verkey입니다. 설정되지 않은 경우 target identifier(dest)가 32 비트 암호화 CID(더 이상 사용되지 않음)이거나 후견되어 있는 사용자입니다(아직 identifier를 소유하지 않음). verkey는 소유자에 의해 None으로 변경될 수 있습니다. 즉, 이 사용자는 후견되는 상태로 돌아갑니다.
  • alias (string; optional): NYM의 별칭

지정된 DID(dest)와 NYM 트랜잭션이 없으면 새로운 DID 생성으로 간주될 수 있습니다.

지정된 DID(dest)의 NYM 트랜잭션이 있는 경우, 이는 기존 DID의 업데이트입니다. 이 경우 재정의하려는 값만 지정할 수 있습니다. 지정되지 않은 모든 값은 동일하게 유지됩니다. 따라서 키 회전(key rotation)을 수행해야하는 경우 DID 소유자는 dest 및 verkey만으로 NYM 요청을 보내야합니다. 역할(role)과 별칭(alias)는 동일하게 유지됩니다.

Request 예:

{
    'operation': {
        'type': '1'
        'dest': 'GEzcdDLhCpGCYRHW82kjHd',
        'role': '101',
        'verkey': '~HmUWn928bnFT6Ephf65YXv'
    },
    
    'identifier': 'L5AD5g65TDQr1PPHHRoiGf',
    'reqId': 1514213797569745,
    'protocolVersion': 2,
    'signature': '49W5WP5jr7x1fZhtpAhHFbuUDqUYZ3AKht88gUjrz8TEJZr5MZUPjskpfBFdboLPZXKjbGjutoVascfKiMD5W7Ba',
}

Reply 예:

{
    'op': 'REPLY', 
    'result': {
        "ver": 1,
        "txn": {
            "type":"1",
            "protocolVersion":2,
            
            "data": {
                "ver": 1,
                "dest":"GEzcdDLhCpGCYRHW82kjHd",
                "verkey":"~HmUWn928bnFT6Ephf65YXv",
                "role":101,
            },
            
            "metadata": {
                "reqId":1514213797569745,
                "from":"L5AD5g65TDQr1PPHHRoiGf",
                "digest":"6cee82226c6e276c983f46d03e3b3d10436d90b67bf33dc67ce9901b44dbc97c",
                "payloadDigest": "21f0f5c158ed6ad49ff855baf09a2ef9b4ed1a8015ac24bccc2e0106cd905685"
            },
        },
        "txnMetadata": {
            "txnTime":1513945121,
            "seqNo": 10,
            "txnId": "N22KY2Dyvmuu2PyyqSFKue|01"
        },
        "reqSignature": {
            "type": "ED25519",
            "values": [{
                "from": "L5AD5g65TDQr1PPHHRoiGf",
                "value": "49W5WP5jr7x1fZhtpAhHFbuUDqUYZ3AKht88gUjrz8TEJZr5MZUPjskpfBFdboLPZXKjbGjutoVascfKiMD5W7Ba"
            }]
        }
		
        'rootHash': '5ecipNPSztrk6X77fYPdepzFRUvLdqBuSqv4M9Mcv2Vn',
        'auditPath': ['Cdsoz17SVqPodKpe6xmY2ZgJ9UcywFDZTRgWSAYM96iA', '3phchUcMsnKFk2eZmcySAWm2T5rnzZdEypW7A5SKi1Qt'],
		
        'dest': 'N22KY2Dyvmuu2PyyqSFKue',
        'role': '101',
        'verkey': '31V83xQnJDkZTSvm796X4MnzZFtUc96Tq6GJtuVkFQBE'
    }
}

 

ATTRIB

NYM 레코드에 속성을 추가합니다.

  • dest (base58-encoded string): 16 또는 32 바이트 DID 값에 대한 base58 인코딩 문자열인 Target DID. identifier가 submitter의 DID인 identifier 메타 데이터 필드와 다릅니다. 예: identifier는 DID에 대한 속성을 설정하는 Endorser의 DID이고 dest는 속성을 설정하는 DID입니다.
  • raw (json; mutually exclusive with hash and enc): raw 데이터는 json으로 표시되며 여기서 key는 속성 이름이고 value는 속성 값입니다.
  • hash (sha256 hash string; mutually exclusive with raw and enc): 속성 데이터의 해시
  • enc (string; mutually exclusive with raw and hash): 암호화 된 속성 데이터

Request 예:

{
    'operation': {
        'type': '100'
        'dest': 'N22KY2Dyvmuu2PyyqSFKue',
        'raw': '{"name": "Alice"}'
    },
    
    'identifier': 'L5AD5g65TDQr1PPHHRoiGf',
    'reqId': 1514213797569745,
    'protocolVersion': 2,
    'signature': '49W5WP5jr7x1fZhtpAhHFbuUDqUYZ3AKht88gUjrz8TEJZr5MZUPjskpfBFdboLPZXKjbGjutoVascfKiMD5W7Ba',
}

Reply 예:

{
    'op': 'REPLY', 
    'result': {
        "ver": 1,
        "txn": {
            "type":"100",
            "protocolVersion":2,
            
            "data": {
                "ver":1,
                "dest":"N22KY2Dyvmuu2PyyqSFKue",
                'raw': '{"name":"Alice"}'
            },
            
            "metadata": {
                "reqId":1514213797569745,
                "from":"L5AD5g65TDQr1PPHHRoiGf",
                "digest":"6cee82226c6e276c983f46d03e3b3d10436d90b67bf33dc67ce9901b44dbc97c",
                "payloadDigest": "21f0f5c158ed6ad49ff855baf09a2ef9b4ed1a8015ac24bccc2e0106cd905685"
            },
        },
        "txnMetadata": {
            "txnTime":1513945121,
            "seqNo": 10,  
            "txnId": "N22KY2Dyvmuu2PyyqSFKue|02"
        },
        "reqSignature": {
            "type": "ED25519",
            "values": [{
                "from": "L5AD5g65TDQr1PPHHRoiGf",
                "value": "49W5WP5jr7x1fZhtpAhHFbuUDqUYZ3AKht88gUjrz8TEJZr5MZUPjskpfBFdboLPZXKjbGjutoVascfKiMD5W7Ba"
            }]
        }    
    
        'rootHash': '5ecipNPSztrk6X77fYPdepzFRUvLdqBuSqv4M9Mcv2Vn',
        'auditPath': ['Cdsoz17SVqPodKpe6xmY2ZgJ9UcywFDZTRgWSAYM96iA', '3phchUcMsnKFk2eZmcySAWm2T5rnzZdEypW7A5SKi1Qt'],
		
    }
}

 

SCHEMA

Claim의 schema를 추가합니다.

기존 schema를 업데이트 할 수 없습니다. 따라서 schema를 발전시켜야하는 경우 새로운 버전 또는 이름을 가진 새 schema를 작성해야합니다.

  • data (dict): Schema 데이터가 포함된 사전:
    • attr_names: 속성 이름 문자열의 배열 (최대 125 개의 속성)
    • name: Schame 이름 문자열
    • version: Schame 버전 문자열

Request 예:

{
    'operation': {
        'type': '101',
        'data': {
            'version': '1.0',
            'name': 'Degree',
            'attr_names': ['undergrad', 'last_name', 'first_name', 'birth_date', 'postgrad', 'expiry_date']
        },
    },

    'identifier': 'L5AD5g65TDQr1PPHHRoiGf',
    'endorser': 'D6HG5g65TDQr1PPHHRoiGf',
    'reqId': 1514280215504647,
    'protocolVersion': 2,
    'signature': '5ZTp9g4SP6t73rH2s8zgmtqdXyTuSMWwkLvfV1FD6ddHCpwTY5SAsp8YmLWnTgDnPXfJue3vJBWjy89bSHvyMSdS'
}

Reply 예:

{
    'op': 'REPLY', 
    'result': {
        "ver": 1,
        "txn": {
            "type":"101",
            "protocolVersion":2,
            
            "data": {
                "ver":1,
                "data": {
                    "name": "Degree",
                    "version": "1.0",
                    'attr_names': ['undergrad', 'last_name', 'first_name', 'birth_date', 'postgrad', 'expiry_date']
                }
            },
            
            "metadata": {
                "reqId":1514280215504647,
                "from":"L5AD5g65TDQr1PPHHRoiGf",
                "endorser": "D6HG5g65TDQr1PPHHRoiGf",
                "digest":"6cee82226c6e276c983f46d03e3b3d10436d90b67bf33dc67ce9901b44dbc97c",
                "payloadDigest": "21f0f5c158ed6ad49ff855baf09a2ef9b4ed1a8015ac24bccc2e0106cd905685"
            },
        },
        "txnMetadata": {
            "txnTime":1513945121,
            "seqNo": 10,  
            "txnId":"L5AD5g65TDQr1PPHHRoiGf1|Degree|1.0",
        },
        "reqSignature": {
            "type": "ED25519",
            "values": [{
                "from": "L5AD5g65TDQr1PPHHRoiGf",
                "value": "5ZTp9g4SP6t73rH2s8zgmtqdXyTuSMWwkLvfV1FD6ddHCpwTY5SAsp8YmLWnTgDnPXfJue3vJBWjy89bSHvyMSdS"
            }]
        }
 		
        'rootHash': '5vasvo2NUAD7Gq8RVxJZg1s9F7cBpuem1VgHKaFP8oBm',
        'auditPath': ['Cdsoz17SVqPodKpe6xmY2ZgJ9UcywFDZTRgWSAYM96iA', '66BCs5tG7qnfK6egnDsvcx2VSNH6z1Mfo9WmhLSExS6b'],
		
    }
}

 

CLAIM_DEF

Issuer가 특정 Claim Schema에 대해 만들고 게시하는 claim definition(특히 공개 키)를 추가합니다.

기존 Claim Def에서 data를 업데이트 할 수 없습니다. 따라서 Claim Def를 발전시켜야하는 경우(예: 키를 회전해야하는 경우), 새로운 Issuer DID(identifier)를 통해 새로운 Claim Def를 만들어야합니다.

  • data (dict): Claim Definition 데이터가 있는 사전:
    • primary (dict): primary claim의 공개 키
    • revocation (dict): 해지 claim의 공개 키
  • ref (string): claim definition이 작성되는 Schema 트랜잭션의 시퀀스 번호
  • signature_type (string): claim definition의 유형(claim 서명). CL(Camenisch-Lysyanskaya)은 현재 유일하게 지원되는 유형입니다.
  • tag (string, optional): 동일한 DID에서 발급한 동일한 Schema 및 유형에 대해 여러 개의 공개 키를 갖는 고유한 태그. 지정하지 않으면 기본(default) 태그인 tag가 사용됩니다.

Request 예:

{
    'operation': {
        'type': '102',
        'signature_type': 'CL',
        'ref': 10,
        'tag': 'some_tag',    
        'data': {
            'primary': ....,
            'revocation': ....
        }
    },
    
    'identifier': 'L5AD5g65TDQr1PPHHRoiGf',
    'endorser': 'D6HG5g65TDQr1PPHHRoiGf',
    'reqId': 1514280215504647,
    'protocolVersion': 2,
    'signature': '5ZTp9g4SP6t73rH2s8zgmtqdXyTuSMWwkLvfV1FD6ddHCpwTY5SAsp8YmLWnTgDnPXfJue3vJBWjy89bSHvyMSdS'
}

Reply 예:

{
    'op': 'REPLY', 
    'result': {
        "ver": 1,
        "txn": {
            "type":"102",
            "protocolVersion":2,
            
            "data": {
                "ver":1,
                "signature_type":"CL",
                'ref': 10,    
                'tag': 'some_tag',
                'data': {
                    'primary': ....,
                    'revocation': ....
                }
            },
            
            "metadata": {
                "reqId":1514280215504647,
                "from":"L5AD5g65TDQr1PPHHRoiGf",
                "endorser": "D6HG5g65TDQr1PPHHRoiGf",
                "digest":"6cee82226c6e276c983f46d03e3b3d10436d90b67bf33dc67ce9901b44dbc97c",
                "payloadDigest": "21f0f5c158ed6ad49ff855baf09a2ef9b4ed1a8015ac24bccc2e0106cd905685"
            },
        },
        "txnMetadata": {
            "txnTime":1513945121,
            "seqNo": 10,  
            "txnId":"HHAD5g65TDQr1PPHHRoiGf2L5AD5g65TDQr1PPHHRoiGf1|Degree1|CL|key1",
        },
        "reqSignature": {
            "type": "ED25519",
            "values": [{
                "from": "L5AD5g65TDQr1PPHHRoiGf",
                "value": "5ZTp9g4SP6t73rH2s8zgmtqdXyTuSMWwkLvfV1FD6ddHCpwTY5SAsp8YmLWnTgDnPXfJue3vJBWjy89bSHvyMSdS"
            }]
        },
        
        'rootHash': '5vasvo2NUAD7Gq8RVxJZg1s9F7cBpuem1VgHKaFP8oBm',
        'auditPath': ['Cdsoz17SVqPodKpe6xmY2ZgJ9UcywFDZTRgWSAYM96iA', '66BCs5tG7qnfK6egnDsvcx2VSNH6z1Mfo9WmhLSExS6b'],
        
    }
}

 

REVOC_REG_DEF

Issuer가 특정 Claim Definition에 대해 생성 및 게시하는 해지 레지스트리 Definition을 추가합니다. 여기에는 공개 키, 레지스트리에 포함할 수 있는 최대 credential 수, Claim Def에 대한 참조 및 일부 해지 레지스트리 특정 데이터가 포함됩니다.

  • value (dict): 해지 레지스트리 정의 데이터가 있는 사전
    • maxCredNum (integer): 해지 레지스트리가 처리할 수 있는 최대 credential 수
    • tailsHash (string): tails file의 digest
    • tailsLocation (string): tails file의 위치(URL)
    • issuanceType (string enum): credential 해지 전략을 정의합니다. 다음과 같은 값을 가질 수 있습니다.
      • ISSUANCE_BY_DEFAULT: 모든 credential은 처음에 발급된 것으로 간주되므로 해지할 때만 해지 레지스트리를 업데이트(REVOC_REG_ENTRY txn 전송)해야합니다. 해지 레지스트리는 이 경우, 해지된 credential 인덱스만 저장합니다. 예상되는 해지 조치 수가 예상되는 발행 조치 수보다 적은 경우에 사용하는 것이 좋습니다.
      • ISSUANCE_ON_DEMAND: 초기에 발급된 credential이 없으므로 발급 및 해지마다 해지 레지스트리를 업데이트(REVOC_REG_ENTRY txn 전송)해야합니다. 이 경우, 해지 레지스트리는 발급된 credential 인덱스만 저장합니다. 예상되는 발행 조치 수가 예상 해지 조치 수보다 적은 경우 사용하는 것이 좋습니다.
    • publicKeys (dict): 해지 레지스트리의 공개 키
  • id (string): 해지 레지스트리 Definition의 고유한 identifier(현재 state trie의 키가 사용됨)
  • credDefId (string): 해당 Credential Definition의 고유한 identifier(현재 state trie의 키가 사용됨)
  • revocDefType (string enum): 해지 유형. CL_ACCUM(Camenisch-Lysyanskaya Accumulator)은 현재 유일하게 지원되는 유형입니다.
  • tag (string): 동일한 Credential Definition 및 동일한 DID에서 발급한 유형에 대해 여러 해지 레지스트리 Definition을 갖는 고유한 태그.

Request 예:

{
    'operation': {
        'type': '113',
        'id': 'L5AD5g65TDQr1PPHHRoiGf:3:FC4aWomrA13YyvYC1Mxw7:3:CL:14:some_tag:CL_ACCUM:tag1',
        'credDefId': 'FC4aWomrA13YyvYC1Mxw7:3:CL:14:some_tag'
        'revocDefType': 'CL_ACCUM',
        'tag': 'tag1',
        'value': {
            'maxCredNum': 1000000,
            'tailsHash': '6619ad3cf7e02fc29931a5cdc7bb70ba4b9283bda3badae297',
            'tailsLocation': 'http://tails.location.com',
            'issuanceType': 'ISSUANCE_BY_DEFAULT',
            'publicKeys': {},
        },
    },
    
    'identifier': 'L5AD5g65TDQr1PPHHRoiGf',
    'endorser': 'D6HG5g65TDQr1PPHHRoiGf',
    'reqId': 1514280215504647,
    'protocolVersion': 2,
    'signature': '5ZTp9g4SP6t73rH2s8zgmtqdXyTuSMWwkLvfV1FD6ddHCpwTY5SAsp8YmLWnTgDnPXfJue3vJBWjy89bSHvyMSdS'
}

Reply 예:

{
    'op': 'REPLY', 
    'result': {
        "ver": 1,
        "txn": {
            "type":"113",
            "protocolVersion":2,
            
            "data": {
                "ver":1,
                'id': 'L5AD5g65TDQr1PPHHRoiGf:3:FC4aWomrA13YyvYC1Mxw7:3:CL:14:some_tag:CL_ACCUM:tag1',
                'credDefId': 'FC4aWomrA13YyvYC1Mxw7:3:CL:14:some_tag'
                'revocDefType': 'CL_ACCUM',
                'tag': 'tag1',
                'value': {
                    'maxCredNum': 1000000,
                    'tailsHash': '6619ad3cf7e02fc29931a5cdc7bb70ba4b9283bda3badae297',
                    'tailsLocation': 'http://tails.location.com',
                    'issuanceType': 'ISSUANCE_BY_DEFAULT',
                    'publicKeys': {},
                },
            },
            
            "metadata": {
                "reqId":1514280215504647,
                "from":"L5AD5g65TDQr1PPHHRoiGf",
                "endorser": "D6HG5g65TDQr1PPHHRoiGf",
                "digest":"6cee82226c6e276c983f46d03e3b3d10436d90b67bf33dc67ce9901b44dbc97c",
                "payloadDigest": "21f0f5c158ed6ad49ff855baf09a2ef9b4ed1a8015ac24bccc2e0106cd905685"
            },
        },
        "txnMetadata": {
            "txnTime":1513945121,
            "seqNo": 10,  
            "txnId":"L5AD5g65TDQr1PPHHRoiGf:3:FC4aWomrA13YyvYC1Mxw7:3:CL:14:some_tag:CL_ACCUM:tag1",
        },
        "reqSignature": {
            "type": "ED25519",
            "values": [{
                "from": "L5AD5g65TDQr1PPHHRoiGf",
                "value": "5ZTp9g4SP6t73rH2s8zgmtqdXyTuSMWwkLvfV1FD6ddHCpwTY5SAsp8YmLWnTgDnPXfJue3vJBWjy89bSHvyMSdS"
            }]
        },
        
        'rootHash': '5vasvo2NUAD7Gq8RVxJZg1s9F7cBpuem1VgHKaFP8oBm',
        'auditPath': ['Cdsoz17SVqPodKpe6xmY2ZgJ9UcywFDZTRgWSAYM96iA', '66BCs5tG7qnfK6egnDsvcx2VSNH6z1Mfo9WmhLSExS6b'],
        
    }
}

 

REVOC_REG_ENTRY

새로운 누산기 값과 발행/해지된(issued/revoked) 인덱스를 포함하는 RevocReg 항목입니다. 이것은 전체 목록이 아닌 지수의 델타입니다. 따라서 새로운 claim이 발행/해지될 때마다 전송될 수 있습니다.

  • value (dict): 해지 레지스트리 데이터가 있는 사전:
    • accum (string): 현재 누산기 값
    • prevAccum (string): 이전 누산기 값; 현재 값과 비교하여 txn이 일치하지 않으면 거부됩니다. dirty writes 및 누산기 업데이트를 피해야합니다.
    • issued (list of integers): 발행된 인덱스의 배역(유형이 ISSUANCE_BY_DEFAULT이면 absent/empty일 수 있음); 이것은 델타입니다; state로 누적됩니다.
    • revoked (list of integers): 해지된 인덱스 배열(델타; state에 누적됨)
  • revocRegDefId (string): 해당 해지 레지스트리 Definition의 고유한 identifier(현재 state trie의 키가 사용됨)
  • revocDefType (string enum): 해지 유형. CL_ACCUM(Camenisch-Lysyanskaya Accumulator)은 현재 유일하게 지원되는 유형입니다.

Request 예:

{
    'operation': {
        'type': '114',
            'revocRegDefId': 'L5AD5g65TDQr1PPHHRoiGf:3:FC4aWomrA13YyvYC1Mxw7:3:CL:14:some_tag:CL_ACCUM:tag1'
            'revocDefType': 'CL_ACCUM',
            'value': {
                'accum': 'accum_value',
                'prevAccum': 'prev_acuum_value',
                'issued': [],
                'revoked': [10, 36, 3478],
            },
    },
    
    'identifier': 'L5AD5g65TDQr1PPHHRoiGf',
    'endorser': 'D6HG5g65TDQr1PPHHRoiGf',
    'reqId': 1514280215504647,
    'protocolVersion': 2,
    'signature': '5ZTp9g4SP6t73rH2s8zgmtqdXyTuSMWwkLvfV1FD6ddHCpwTY5SAsp8YmLWnTgDnPXfJue3vJBWjy89bSHvyMSdS'
}

Reply 예:

{
    'op': 'REPLY', 
    'result': {
        "ver": 1,
        "txn": {
            "type":"114",
            "protocolVersion":2,
            
            "data": {
                "ver":1,
                'revocRegDefId': 'L5AD5g65TDQr1PPHHRoiGf:3:FC4aWomrA13YyvYC1Mxw7:3:CL:14:some_tag:CL_ACCUM:tag1'
                'revocDefType': 'CL_ACCUM',
                'value': {
                    'accum': 'accum_value',
                    'prevAccum': 'prev_acuum_value',
                    'issued': [],
                    'revoked': [10, 36, 3478],
                },
            },
            
            "metadata": {
                "reqId":1514280215504647,
                "from":"L5AD5g65TDQr1PPHHRoiGf",
                "endorser": "D6HG5g65TDQr1PPHHRoiGf",
                "digest":"6cee82226c6e276c983f46d03e3b3d10436d90b67bf33dc67ce9901b44dbc97c",
                "payloadDigest": "21f0f5c158ed6ad49ff855baf09a2ef9b4ed1a8015ac24bccc2e0106cd905685"
            },
        },
        "txnMetadata": {
            "txnTime":1513945121,
            "seqNo": 10,  
            "txnId":"5:L5AD5g65TDQr1PPHHRoiGf:3:FC4aWomrA13YyvYC1Mxw7:3:CL:14:some_tag:CL_ACCUM:tag1",
        },
        "reqSignature": {
            "type": "ED25519",
            "values": [{
                "from": "L5AD5g65TDQr1PPHHRoiGf",
                "value": "5ZTp9g4SP6t73rH2s8zgmtqdXyTuSMWwkLvfV1FD6ddHCpwTY5SAsp8YmLWnTgDnPXfJue3vJBWjy89bSHvyMSdS"
            }]
        },
        
        'rootHash': '5vasvo2NUAD7Gq8RVxJZg1s9F7cBpuem1VgHKaFP8oBm',
        'auditPath': ['Cdsoz17SVqPodKpe6xmY2ZgJ9UcywFDZTRgWSAYM96iA', '66BCs5tG7qnfK6egnDsvcx2VSNH6z1Mfo9WmhLSExS6b'],
        
    }
}

 

NODE

pool에 새로운 노드를 추가하거나 기존 노드를 업데이트합니다.

  • data (dict): Node와 관련된 데이터:
    • alias (string): Node의 별칭
    • blskey (base58-encoded string; optional): base58로 인코딩 된 문자열인 BLS 다중 서명 키(BLS 서명 및 state proof 지원에 필요)
    • client_ip (string; optional): Node의 클라이언트 리스너 IP 주소. 즉, 읽기 및 쓰기 request를 보낼 때 클라이언트가 노드에 연결하는 데 사용하는 IP(TCP를 사용한 ZMQ)
    • client_port (string; optional): Node의 클라이언트 리스너 포트. 클라이언트가 읽기 및 쓰기 request를 보낼 때 노드에 연결하는 데 사용하는 포트(TCP를 사용한 ZMQ)
    • node_ip (string; optional): 다른 Node가 이 Node와 통신하는 데 사용하는 IP 주소. 여기에는 클라이언트가 허용되지 않습니다.(TCP를 사용한 ZMQ)
    • node_port (string; optional): 다른 Node가 이 Node와 통신하는 데 사용하는 포트.여기에는 클라이언트가 허용되지 않습니다.(TCP를 사용한 ZMQ)
    • services (array of strings; optional): Node의 서비스. 현재 유일하게 VALIDATOR만 지원됩니다.
  • dest (base58-encoded string): 16 또는 32 바이트 DID 값에 대한 base58 인코딩 된 문자열인 Target Node의 verkey. identifier 메타 데이터 필드와 다릅니다. 여기서 identifier는 트랜잭션 submitter의 DID(Steward의 DID)입니다. 예: identifier는 새로운 Node를 작성하는 Steward의 DID이며 dest는 이 Node의 verkey입니다.

지정된 Node ID(dest)의 NODE 트랜잭션이 없는 경우, 새로운 NODE 생성으로 간주될 수 있습니다.

지정된 Node ID(dest)의 NODE 트랜잭션이 있는 경우, 이는 기존 NODE의 업데이트입니다. 이 경우 재정의하려는 값만 지정할 수 있습니다. 지정되지 않은 모든 값은 동일하게 유지됩니다. 따라서 Steward가 BLS 키를 화전하려는 경우 data에 dest 및 새로운 blskey를 넣어 NODE 트랜잭션을 전송하는 것으로 충분합니다. data에 다른 모든 필드를 지정할 필요는 없으며 동일하게 유지됩니다.

Request 예:

{
    'operation': {
        'type': '0'
     	'data': {
     		'alias': 'Node1',
     		'client_ip': '127.0.0.1',
     		'client_port': 7588,
     		'node_ip': '127.0.0.1', 
     		'node_port': 7587,
     		'blskey': '00000000000000000000000000000000',
     		'services': ['VALIDATOR']}
     	} ,
     	'dest': '6HoV7DUEfNDiUP4ENnSC4yePja8w7JDQJ5uzVgyW4nL8'
    },
    
    'identifier': '21BPzYYrFzbuECcBV3M1FH',
    'reqId': 1514304094738044,
    'protocolVersion': 2,
    'signature': '3YVzDtSxxnowVwAXZmxCG2fz1A38j1qLrwKmGEG653GZw7KJRBX57Stc1oxQZqqu9mCqFLa7aBzt4MKXk4MeunVj',
}

Reply 예:

{
    'op': 'REPLY', 
    'result': {
        "ver": 1,
        "txn": {
            "type":0,
            "protocolVersion":2,
            
            "data": {
                "ver":1,
                'data': {
                    'alias': 'Node1',
                    'client_ip': '127.0.0.1',
                    'client_port': 7588,
                    'node_ip': '127.0.0.1', 
                    'node_port': 7587,
                    'blskey': '00000000000000000000000000000000',
                    'services': ['VALIDATOR']}
                } ,
                'dest': '6HoV7DUEfNDiUP4ENnSC4yePja8w7JDQJ5uzVgyW4nL8'
            },
            
            "metadata": {
                "reqId":1514304094738044,
                "from":"21BPzYYrFzbuECcBV3M1FH",
                "digest":"6cee82226c6e276c983f46d03e3b3d10436d90b67bf33dc67ce9901b44dbc97c",
                "payloadDigest": "21f0f5c158ed6ad49ff855baf09a2ef9b4ed1a8015ac24bccc2e0106cd905685"
            },
        },
        "txnMetadata": {
            "txnTime":1513945121,
            "seqNo": 10,  
        },
        "reqSignature": {
            "type": "ED25519",
            "values": [{
                "from": "21BPzYYrFzbuECcBV3M1FH",
                "value": "3YVzDtSxxnowVwAXZmxCG2fz1A38j1qLrwKmGEG653GZw7KJRBX57Stc1oxQZqqu9mCqFLa7aBzt4MKXk4MeunVj"
            }]
        }
 		
        'rootHash': 'DvpkQ2aADvQawmrzvTTjF9eKQxjDkrCbQDszMRbgJ6zV',
        'auditPath': ['6GdvJfqTekMvzwi9wuEpfqMLzuN1T91kvgRBQLUzjkt6'],
    }
}

 

POOL_UPGRADE

Pool을 업그레이드하는 명령(Trustee가 전송). 지정된 Node(Pool의 모든 노드 또는 특정 노드)를 업그레이드합니다.

  • name (string): 사람이 읽을 수 있는 업그레이드 이름
  • action (enum: start or cancel): 업그레이드를 시작하거나 취소합니다.
  • version (string): 업그레이드를 수행하는 indy-node 패키지의 버전. 기존 것보다 커야합니다(또는 reinstall 플래그가 True인 경우도 동일)
  • schedule (dict of node DIDs to timestamps): 각 노드에서 업그레이드를 수행할 일정. 이것은 Node DID가 key이고, 업그레이드 시간이 value인 map입니다(아래 예 참조). force 플래그가 False이면 각 업그레이드 간의 시간 차이가 5분 이상이어야합니다(각 Node에 충분한 시간을 제공하고 업그레이드 중에 전체 Pool이 다운되지 않도록 해야합니다).
  • sha256 (sha256 hash string): 패키지의 sha256 해시
  • force (boolean; optional): 이 트랜잭션의 합의(consensus)를 기다리지 않고 트랜잭션(스케줄 업그레이드)을 적용해야하는지 여부. false인 경우 트랜잭션은 원장에 작성된 후에만 적용됩니다. 그렇지 않으면 합의의 결과에 관계없이 적용되며 각 Node의 업그레이드 schedule에는 제한이 없습니다. 따라서 True로 설정하면 전체 Pool을 동시에 업그레이드할 수 있습니다. 기본적으로는 False입니다. 정당한 이유 없이 True로 설정하지 마십시오.
  • reinstall (boolean; optional): 동일한 버전을 다시 설치할 수 있는지 여부. 기본적으로 False.
  • timeout (integer; optional): 각 Node에서 업그레이드 시간을 제한합니다.
  • justification (string; optional): 이 특정 업그레이드에 대한 선택적 정렬 문자열

Request 예:

{
    'operation': {
        'type': '109'
        'name': `upgrade-13`,
        'action': `start`,
        'version': `1.3`,
        'schedule': {"4yC546FFzorLPgTNTc6V43DnpFrR8uHvtunBxb2Suaa2":"2017-12-25T10:25:58.271857+00:00","AtDfpKFe1RPgcr5nnYBw1Wxkgyn8Zjyh5MzFoEUTeoV3":"2017-12-25T10:26:16.271857+00:00","DG5M4zFm33Shrhjj6JB7nmx9BoNJUq219UXDfvwBDPe2":"2017-12-25T10:26:25.271857+00:00","JpYerf4CssDrH76z7jyQPJLnZ1vwYgvKbvcp16AB5RQ":"2017-12-25T10:26:07.271857+00:00"},
        'sha256': `db34a72a90d026dae49c3b3f0436c8d3963476c77468ad955845a1ccf7b03f55`,
        'force': false,
        'reinstall': false,
        'timeout': 1
    },
    
    'identifier': '21BPzYYrFzbuECcBV3M1FH',
    'reqId': 1514304094738044,
    'protocolVersion': 2,
    'signature': '3YVzDtSxxnowVwAXZmxCG2fz1A38j1qLrwKmGEG653GZw7KJRBX57Stc1oxQZqqu9mCqFLa7aBzt4MKXk4MeunVj',
}

Reply 예:

{
    'op': 'REPLY', 
    'result': {
        "ver": 1,
        "txn": {
            "type":109,
            "protocolVersion":2,
            
            "data": {
                "ver":1,
                "name":"upgrade-13",
                "action":"start",
                "version":"1.3",
                "schedule":{"4yC546FFzorLPgTNTc6V43DnpFrR8uHvtunBxb2Suaa2":"2017-12-25T10:25:58.271857+00:00","AtDfpKFe1RPgcr5nnYBw1Wxkgyn8Zjyh5MzFoEUTeoV3":"2017-12-25T10:26:16.271857+00:00","DG5M4zFm33Shrhjj6JB7nmx9BoNJUq219UXDfvwBDPe2":"2017-12-25T10:26:25.271857+00:00","JpYerf4CssDrH76z7jyQPJLnZ1vwYgvKbvcp16AB5RQ":"2017-12-25T10:26:07.271857+00:00"},
                "sha256":"db34a72a90d026dae49c3b3f0436c8d3963476c77468ad955845a1ccf7b03f55",
                "force":false,
                "reinstall":false,
                "timeout":1,
                "justification":null,
            },
            
            "metadata": {
                "reqId":1514304094738044,
                "from":"21BPzYYrFzbuECcBV3M1FH",
                "digest":"6cee82226c6e276c983f46d03e3b3d10436d90b67bf33dc67ce9901b44dbc97c",
                "payloadDigest": "21f0f5c158ed6ad49ff855baf09a2ef9b4ed1a8015ac24bccc2e0106cd905685"
            },
        },
        "txnMetadata": {
            "txnTime":1513945121,
            "seqNo": 10,  
        },
        "reqSignature": {
            "type": "ED25519",
            "values": [{
                "from": "21BPzYYrFzbuECcBV3M1FH",
                "value": "3YVzDtSxxnowVwAXZmxCG2fz1A38j1qLrwKmGEG653GZw7KJRBX57Stc1oxQZqqu9mCqFLa7aBzt4MKXk4MeunVj"
            }]
        },
        
        'rootHash': 'DvpkQ2aADvQawmrzvTTjF9eKQxjDkrCbQDszMRbgJ6zV',
        'auditPath': ['6GdvJfqTekMvzwi9wuEpfqMLzuN1T91kvgRBQLUzjkt6'],
    }
}

 

POOL_CONFIG

Pool 구성을 변경하는 명령

  • writes (boolean): pool에서 쓰기 요청을 처리할 수 있는지 여부(false인 경우 pool은 읽기 전용 상태가 됨). 기본적으로 True.
  • force (boolean; optional): 이 트랜잭션의 합의(consensus)를 기다리지 않고 트랜잭션(스케줄 업그레이드)을 적용해야하는지 여부. false인 경우 트랜잭션은 원장에 작성된 후에만 적용됩니다. 그렇지 않으면 합의의 결과에 관계없이 적용됩니다. 기본적으로는 False입니다. 정당한 이유 없이 True로 설정하지 마십시오.

Request 예:

{
    'operation': {
        'type': '111'
        'writes':false,
        'force':true
    },
    
    'identifier': '21BPzYYrFzbuECcBV3M1FH',
    'reqId': 1514304094738044,
    'protocolVersion': 2,
    'signature': '3YVzDtSxxnowVwAXZmxCG2fz1A38j1qLrwKmGEG653GZw7KJRBX57Stc1oxQZqqu9mCqFLa7aBzt4MKXk4MeunVj',
}

Reply 예:

{
    'op': 'REPLY', 
    'result': {
        "ver":1,
        "txn": {
            "type":111,
            "protocolVersion":2,
            
            "data": {
                "ver":1,
                "writes":false,
                "force":true,
            },
            
            "metadata": {
                "reqId":1514304094738044,
                "from":"21BPzYYrFzbuECcBV3M1FH",
                "digest":"6cee82226c6e276c983f46d03e3b3d10436d90b67bf33dc67ce9901b44dbc97c",
                "payloadDigest": "21f0f5c158ed6ad49ff855baf09a2ef9b4ed1a8015ac24bccc2e0106cd905685"
            },
        },
        "txnMetadata": {
            "txnTime":1513945121,
            "seqNo": 10,  
        },
        "reqSignature": {
            "type": "ED25519",
            "values": [{
                "from": "21BPzYYrFzbuECcBV3M1FH",
                "value": "3YVzDtSxxnowVwAXZmxCG2fz1A38j1qLrwKmGEG653GZw7KJRBX57Stc1oxQZqqu9mCqFLa7aBzt4MKXk4MeunVj"
            }]
        },
        
        'rootHash': 'DvpkQ2aADvQawmrzvTTjF9eKQxjDkrCbQDszMRbgJ6zV',
        'auditPath': ['6GdvJfqTekMvzwi9wuEpfqMLzuN1T91kvgRBQLUzjkt6'],
    }
}

 

AUTH_RULE

인증 규칙을 변경하는 명령입니다. 내부 인증 규칙은 key-value 사전에 저장됩니다.:  {action} -> {auth_constraint}

작업 목록은 정적이며 auth_rules.md에서 찾을 수 있습니다. 모든 작업에 대한 기본 인증 제약 조건이 있습니다(auth_rules.md에 정의됨).

AUTH_RULE 명령으로 인증 제약 조건을 변경할 수 있습니다. 따라서 이 명령으로 새 작업을 등록할 수 없습니다. 그러나 특정 작업에 대한 인증 제약 조건(values)을 무시할 수 있습니다.

GET_AUTH_RULE 출력의 목록 요소는 AUTH_RULE에 대한 입력(필요한 변경 사항)으로 사용될 수 있습니다.

트랜잭션 형식이 올바르지 않으면 클라이언트는 request에 대한 NACK 메시지를 수신합니다. 클라이언트는 다음에 대해 NACK을 받습니다.

  • 잘못된 형식의 request;
  • "ADD" 작업이 있지만 "old_value"가 있는 request;
  • "old_value" 없이 "EDIT" 작업이 있는 request;
  • auth_rule에 없는 키를 가진 request.

다음 입력 매개 변수는 auth_rules.md의 인증 규칙과 일치해야합니다.:

  • auth_type (string enum): 인증 제약(Auth Constraint)을 변경할 트랜잭션 유형. (예: "0", "1", ...). txn 유형 enum 값을 찾으려면 트랜잭션 설명을 참조하십시오.
  • auth_action (enum: ADD or EDIT): 이것이 새 트랜잭션을 추가하는지 또는 기존 트랜잭션을 편집하는지 여부.
  • field (string): 주어진 특정 필드를 편집하는 인증 제약(Auth Constraint)을 설정. *는 모든 인증 규칙이 모든 필드에 적용되도록 지정하는 데 사용할 수 있습니다.
  • old_value (string; optional): 필드의 이전 값으로 new_value로 변경할 수 있습니다. auth_action에만 EDIT이 표시되어야합니다. *는 이전 값이 중요하지 않은 경우에 사용할 수 있습니다.
  • new_value (string): 필드를 채우는 데 사용할 수 있는 새로운 값. *은 이전 값이 중요하지 않은 경우에 사용할 수 있습니다.

constraint_id 필드는 작업에 대해 원하는 인증 제약(Auth Constraint)을 정의할 수 있는 위치입니다.:

  • constraint (dict)
    • constraint_id (string enum): 제약 유형(Constraint Type). 현재 다음과 같은 제약 유형이 지원됩니다.:
  - 'ROLE': 주어진 role 중 몇 개의 서명이 필요한지 정의하는 제약
  - 'OR': auth_constraints의 모든 제약 조건에 대한 논리적 분리
  - 'AND': auth_constraints의 모든 제약 조건에 대한 논리적 연결
  - 'FORBIDDEN': 허용되지 않는 작업에 대한 제약
  •  
    • - 'ROLE': 주어진 role 중 몇 개의 서명이 필요한지 정의하는 제약 - 'OR': auth_constraints의 모든 제약 조건에 대한 논리적 분리 - 'AND': auth_constraints의 모든 제약 조건에 대한 논리적 연결 - 'FORBIDDEN': 허용되지 않는 작업에 대한 제약

    • 'constraint_id': 'OR' 또는 'constraint_id': 'AND'인 경우의 필드:
      • auth_constraints (list): 제약 조건 목록. 여러 개의 중첩 제약 조건이 재귀적으로 지원됩니다.
    • 'constraint_id': 'ROLE'인 경우의 필드:
      • role (string enum): 누가(어떤 role) 작업을 수행할 수 있을 것인가. 역할 코드와 이름 간의 매핑에 대한 NYM 트랜잭션 설명을 살펴보십시오.
      • sig_count (int): 작업을 수행하는 데 필요한 서명 수
      • need_to_be_owner (boolean): 사용자가 트랜잭션의 owner여야 하는지 여부를 확인하는 플래그(예: 트랜잭션을 변경하려면 steward가 노드의 소유자여야 함). owner의 개념은 모든 인증 규칙마다 다릅니다. 자세한 내용은 auth_rules.md를 참조하십시오.
      • off_ledger_signature (boolean, optional, False by default): 원장에 없는 key에 대한 서명이 필요한 수의 유효한 서명을 검증하는 동안 승인되는지 여부. True로 설정될 수 있는 예는 비허가형(permissionless) 모드에서 새로운 DID를 작성하는 것입니다. 즉, 원장에 identifier가 없고 새로 작성된 verkey가 서명 확인에 사용되는 경우입니다. 다른 예는 암호(identifier는 verkey와 동일)로 서명하지만 아직 지원되지 않습니다. 이 필드의 값이 False(기본값)이고 필요한 서명 수가 0보다 큰 경우 트랜잭션 작성자의 DID(identifier)가 원장에 있어야합니다(NYM txn에 해당).
      • metadata (dict; optional): 제약 조건의 추가 매개 변수에 대한 사전. 플러그인에서 추가적인 제한을 설정하는 데 사용할 수 있습니다.
    • 'constraint_id': 'FORBIDDEN'인 경우의 필드: 필드가 없습니다.

Request 예:

NODE 트랜잭션의 service 필드 값을 [VALIDATOR]에서 [](노드 수준 내리기)로 변경하는 예를 살펴보겠습니다. Auth Constraint를 설정하여 두 개의 TRUSTEE 또는 이 트랜잭션의 소유자(원래 작성자)인 하나의 STEWARD만 작업을 수행할 수 있습니다.

{
    'operation': {
        'type':'120',
        'auth_type': '0', 
        'auth_action': 'EDIT',
        'field' :'services',
        'old_value': [VALIDATOR],
        'new_value': []
        'constraint':{
              'constraint_id': 'OR',
              'auth_constraints': [{'constraint_id': 'ROLE', 
                                    'role': '0',
                                    'sig_count': 2, 
                                    'need_to_be_owner': False, 
                                    'metadata': {}}, 
                                   
                                   {'constraint_id': 'ROLE', 
                                    'role': '2',
                                    'sig_count': 1, 
                                    'need_to_be_owner': True, 
                                    'metadata': {}}
                                   ]
        }, 
    },
    
    'identifier': '21BPzYYrFzbuECcBV3M1FH',
    'reqId': 1514304094738044,
    'protocolVersion': 2,
    'signature': '3YVzDtSxxnowVwAXZmxCG2fz1A38j1qLrwKmGEG653GZw7KJRBX57Stc1oxQZqqu9mCqFLa7aBzt4MKXk4MeunVj'
}

Reply 예:

{     'op':'REPLY',
      'result':{  
         'txnMetadata':{  
            'seqNo':1,
            'txnTime':1551776783
         },
         'reqSignature':{  
            'values':[  
               {  
                  'value':'4j99V2BNRX1dn2QhnR8L9C3W9XQt1W3ScD1pyYaqD1NUnDVhbFGS3cw8dHRe5uVk8W7DoFtHb81ekMs9t9e76Fg',
                  'from':'M9BJDuS24bqbJNvBRsoGg3'
               }
            ],
            'type':'ED25519'
         },
         'txn':{  
            'data':{  
                'auth_type': '0', 
                'auth_action': 'EDIT',
                'field' :'services',
                'old_value': [VALIDATOR],
                'new_value': []            
                'constraint':{  
                          'constraint_id': 'OR',
                          'auth_constraints': [{'constraint_id': 'ROLE', 
                                                'role': '0',
                                                'sig_count': 2, 
                                                'need_to_be_owner': False, 
                                                'metadata': {}}, 
                                               
                                               {'constraint_id': 'ROLE', 
                                                'role': '2',
                                                'sig_count': 1, 
                                                'need_to_be_owner': True, 
                                                'metadata': {}}
                                               ]
                }, 
            },
            'protocolVersion':2,
            'metadata':{  
               'from':'M9BJDuS24bqbJNvBRsoGg3',
               'digest':'ea13f0a310c7f4494d2828bccbc8ff0bd8b77d0c0bfb1ed9a84104bf55ad0436',
               'payloadDigest': '21f0f5c158ed6ad49ff855baf09a2ef9b4ed1a8015ac24bccc2e0106cd905685',
               'reqId':711182024
            },
            'type':'120'
         },
         'ver':'1',
         'rootHash':'GJNfknLWDAb8R93cgAX3Bw6CYDo23HBhiwZnzb4fHtyi',
         'auditPath':['6GdvJfqTekMvzwi9wuEpfqMLzuN1T91kvgRBQLUzjkt6']
      }
   }

 

AUTH_RULES

하나의 트랜잭션으로 여러 AUTH_RULE을 설정하는 명령. 트랜잭션 AUTH_RULES는 몇 가지 AUTH_RULE 트랜잭션으로 나뉘지 않으며 요청에 포함된 전체 규칙 세트를 사용하여 하나의 트랜잭션으로 원장에 기록됩니다. 내부 인증 규칙은 key-value로 사전에 저장됩니다.: {action} -> {auth_constraint}

작업 목록은 정적이며 auth_rules.md에서 찾을 수 있습니다. 모든 작업에 대한 기본 인증 제약(Auth Constraint) 조건이 있습니다(auth_rules.md에 정의어있음).

AUTH_RULES 명령으로 인증 제약(Auth Constraint)을 변경할 수 있습니다. 따라서 이 명령으로 새로운 작업을 등록할 수 없습니다. 그러나 지정된 작업에 대한 인증 제약(Auth Constraint) (values)을 재정의할 수 있습니다.

GET_AUTH_RULE 출력의 목록 요소는 AUTH_RULES의 rules 필드에 대한 입력(필요한 변경 사항)으로 사용될 수 있습니다.

하나의 규칙이 올바르지 않으면 클라이언트는 모든 규칙과 함께 request에 대한 NACK 메시지를 받습니다. 클라이언트는 다음에 대해 NACK을 받습니다.

  • 잘못된 형식의 request;
  • "ADD" 작업이 있지만 "old_value"가 있는 request;
  • "old_value" 없이 "EDIT" 작업이 있는 request;
  • auth_rule에 없는 키를 가진 request.
  • rules 필드에는 인증 규칙 목록이 있습니다. 하나의 규칙에는 auth_rules.md의 인증 규칙과 일치해야하는 다음과 같은 매개 변수 목록이 있습니다.:
    • auth_type (string enum): 인증 제약(Auth Constraint)을 변경할 트랜잭션 유형. (예: "0", "1", ...). txn 유형 enum 값을 찾으려면 트랜잭션 설명을 참조하십시오.
    • auth_action (enum: ADD or EDIT): 이것이 새 트랜잭션을 추가하는지 또는 기존 트랜잭션을 편집하는지 여부.
    • field (string): 주어진 특정 필드를 편집하는 인증 제약(Auth Constraint)을 설정. *는 모든 인증 규칙이 모든 필드에 적용되도록 지정하는 데 사용할 수 있습니다.
    • old_value (string; optional): 필드의 이전 값으로 new_value로 변경할 수 있습니다. auth_action에만 EDIT이 표시되어야합니다. *는 이전 값이 중요하지 않은 경우에 사용할 수 있습니다.
    • new_value (string): 필드를 채우는 데 사용할 수 있는 새로운 값. *은 이전 값이 중요하지 않은 경우에 사용할 수 있습니다.

constraint_id 필드는 작업에 대해 원하는 인증 제약(Auth Constraint)을 정의할 수 있는 위치입니다.:

  • constraint (dict)
    • constraint_id (string enum): 제약 유형(Constraint Type). 현재 다음과 같은 제약 유형이 지원됩니다.:
  - 'ROLE': 주어진 role 중 몇 개의 서명이 필요한지 정의하는 제약
  - 'OR': auth_constraints의 모든 제약 조건에 대한 논리적 분리
  - 'AND': auth_constraints의 모든 제약 조건에 대한 논리적 연결
  - 'FORBIDDEN': 허용되지 않는 작업에 대한 제약
  •  
    • constraint_id': 'OR' 또는 'constraint_id': 'AND'인 경우의 필드:
      • auth_constraints (list): 제약 조건 목록. 여러 개의 중첩 제약 조건이 재귀적으로 지원됩니다.
    • 'constraint_id': 'ROLE'인 경우의 필드:
      • role (string enum): 누가(어떤 role) 작업을 수행할 수 있을 것인가. 역할 코드와 이름 간의 매핑
      • sig_count (int): 작업을 수행하는 데 필요한 서명 수에 대한 NYM 트랜잭션 설명을 살펴보십시오.
      • need_to_be_owner (boolean): 사용자가 트랜잭션의 owner여야 하는지 여부를 확인하는 플래그(예: 트랜잭션을 변경하려면 steward가 노드의 소유자여야 함). owner의 개념은 모든 인증 규칙마다 다릅니다. 자세한 내용은 auth_rules.md를 참조하십시오.
      • off_ledger_signature (boolean, optional, False by default): 원장에 없는 key에 대한 서명이 필요한 수의 유효한 서명을 검증하는 동안 승인되는지 여부. True로 설정될 수 있는 예는 비허가형(permissionless) 모드에서 새로운 DID를 작성하는 것입니다. 즉, 원장에 identifier가 없고 새로 작성된 verkey가 서명 확인에 사용되는 경우입니다. 다른 예는 암호(identifier는 verkey와 동일)로 서명하지만 아직 지원되지 않습니다. 이 필드의 값이 False(기본값)이고 필요한 서명 수가 0보다 큰 경우 트랜잭션 작성자의 DID(identifier)가 원장에 있어야합니다(NYM txn에 해당).
      • metadata (dict; optional): 제약 조건의 추가 매개 변수에 대한 사전. 플러그인에서 추가적인 제한을 설정하는 데 사용할 수 있습니다.
    • 'constraint_id': 'FORBIDDEN'인 경우의 필드: 필드가 없습니다.

Request 예:

{
    'operation': {
           'type':'122',
           'rules': [
                {'constraint':{  
                     'constraint_id': 'OR',
                     'auth_constraints': [{'constraint_id': 'ROLE', 
                                           'role': '0',
                                           'sig_count': 1, 
                                           'need_to_be_owner': False, 
                                           'metadata': {}}, 
                                                               
                                           {'constraint_id': 'ROLE', 
                                            'role': '2',
                                            'sig_count': 1, 
                                            'need_to_be_owner': True, 
                                            'metadata': {}}
                                           ]
                   }, 
                 'field' :'services',
                 'auth_type': '0', 
                 'auth_action': 'EDIT',
                 'old_value': [VALIDATOR],
                 'new_value': []
                },
                ...
           ]
    },
    
    'identifier': '21BPzYYrFzbuECcBV3M1FH',
    'reqId': 1514304094738044,
    'protocolVersion': 1,
    'signature': '3YVzDtSxxnowVwAXZmxCG2fz1A38j1qLrwKmGEG653GZw7KJRBX57Stc1oxQZqqu9mCqFLa7aBzt4MKXk4MeunVj'
}

Reply 예:

{     'op':'REPLY',
      'result':{  
         'txnMetadata':{  
            'seqNo':1,
            'txnTime':1551776783
         },
         'reqSignature':{  
            'values':[  
               {  
                  'value':'4j99V2BNRX1dn2QhnR8L9C3W9XQt1W3ScD1pyYaqD1NUnDVhbFGS3cw8dHRe5uVk8W7DoFtHb81ekMs9t9e76Fg',
                  'from':'M9BJDuS24bqbJNvBRsoGg3'
               }
            ],
            'type':'ED25519'
         },
         'txn':{  
            'type':'122',
            'data':{
               'rules': [
                    {'constraint':{  
                         'constraint_id': 'OR',
                         'auth_constraints': [{'constraint_id': 'ROLE', 
                                               'role': '0',
                                               'sig_count': 1, 
                                               'need_to_be_owner': False, 
                                               'metadata': {}}, 
                                                                   
                                               {'constraint_id': 'ROLE', 
                                                'role': '2',
                                                'sig_count': 1, 
                                                'need_to_be_owner': True, 
                                                'metadata': {}}
                                               ]
                       }, 
                     'field' :'services',
                     'auth_type': '0', 
                     'auth_action': 'EDIT',
                     'old_value': [VALIDATOR],
                     'new_value': []
                    },
                    ...
               ]
            }
            'protocolVersion':2,
            'metadata':{  
               'from':'M9BJDuS24bqbJNvBRsoGg3',
               'digest':'ea13f0a310c7f4494d2828bccbc8ff0bd8b77d0c0bfb1ed9a84104bf55ad0436',
               'reqId':711182024
            }
         },
         'ver':'1',
         'rootHash':'GJNfknLWDAb8R93cgAX3Bw6CYDo23HBhiwZnzb4fHtyi',
         'auditPath':[  

         ]
      }
   }

 

TRANSACTION_AUTHOR_AGREEMENT

pool에 대한 트랜잭션 작성자 계약을 설정(enabling/disablig)합니다. 트랜잭션 작성자 계약이 설정되면 Domain 원장(트랜잭션)에 대한 모든 쓰기 요청에는 트랜잭션 작성자가 서명한 최신 트랜잭션 작성자 계약의 다이제스트를 가리키는 추가 메타 데이터가 포함되어야합니다.

트랜잭션 작성자 계약이 설정되어 있지 않거나 disabled 된 경우 추가 메타 데이터가 필요하지 않습니다.

빈 텍스트로 계약을 설정하면 트랜잭션 작성자 계약을 disabled 처리할 수 있습니다.

각 트랜잭션 작성자 계약에는 고유한 버전이 있습니다.

TRANSACTION_AUTHOR_AGREEMENT txn을 제출하기 전에 원장에 최소 하나의 TRANSACTION_AUTHOR_AGREEMENT_AML을 설정해야합니다.

  • version (string): 트랜잭션 작성자 계약의 고유 버전
  • text (string): 트랜잭션 작성자 계약의 텍스트

Request 예:

{
    'operation': {
        'type': '4'
        'version': '1.0',
        'text': 'Please read carefully before writing anything to the ledger',
    },
    
    'identifier': '21BPzYYrFzbuECcBV3M1FH',
    'reqId': 1514304094738044,
    'protocolVersion': 2,
    'signature': '3YVzDtSxxnowVwAXZmxCG2fz1A38j1qLrwKmGEG653GZw7KJRBX57Stc1oxQZqqu9mCqFLa7aBzt4MKXk4MeunVj',
}

Reply 예:

{
    'op': 'REPLY', 
    'result': {
        "ver":1,
        "txn": {
            "type":4,
            "protocolVersion":2,
            
            "data": {
                "ver":1,
                'version': '1.0',
                'text': 'Please read carefully before writing anything to the ledger',
            },
            
            "metadata": {
                "reqId":1514304094738044,
                "from":"21BPzYYrFzbuECcBV3M1FH",
                "digest":"6cee82226c6e276c983f46d03e3b3d10436d90b67bf33dc67ce9901b44dbc97c",
                "payloadDigest": "21f0f5c158ed6ad49ff855baf09a2ef9b4ed1a8015ac24bccc2e0106cd905685",
            },
        },
        "txnMetadata": {
            "txnTime":1513945121,
            "seqNo": 10,  
        },
        "reqSignature": {
            "type": "ED25519",
            "values": [{
                "from": "21BPzYYrFzbuECcBV3M1FH",
                "value": "3YVzDtSxxnowVwAXZmxCG2fz1A38j1qLrwKmGEG653GZw7KJRBX57Stc1oxQZqqu9mCqFLa7aBzt4MKXk4MeunVj"
            }]
        },
        
        'rootHash': 'DvpkQ2aADvQawmrzvTTjF9eKQxjDkrCbQDszMRbgJ6zV',
        'auditPath': ['6GdvJfqTekMvzwi9wuEpfqMLzuN1T91kvgRBQLUzjkt6'],
    }
}

 

TRANSACTION_AUTHOR_AGREEMENT_AML

트랜잭션 작성자 계약에 대한 수락 메커니즘 목록을 설정합니다.

트랜잭션 작성자 계약이 수락되어야하는 각 쓰기 요청은 원장의 최신 목록에 있는 메커니즘을 가리켜야합니다. 선택된 메커니즘은 쓰기 request 작성자(트랜잭션 작성자 계약 다이제스트와 함께)에 의해 서명됩니다.

각 수락 메커니즘 목록에는 고유한 버전이 있습니다.

  • version (string): 트랜잭션 작성자 계약 수락 메커니즘 목록의 고유한 버전
  • aml (dict): 수락 메커니즘은 <acceptance mechanism label>: <acceptance mechanism description> 형식으로 데이터를 나열합니다.
  • amlContext (string, optional): 수락 메커니즘 목록에 대한 컨텍스트 정보(외부 자원의 URL일 수 있음)

Request 예:

{
    'operation': {
        'type': '5'
        "version": "1.0",
        "aml": {
            "EULA": "Included in the EULA for the product being used",
            "Service Agreement": "Included in the agreement with the service provider managing the transaction",
            "Click Agreement": "Agreed through the UI at the time of submission",
            "Session Agreement": "Agreed at wallet instantiation or login"
        },
        "amlContext": "http://aml-context-descr"
    },
    
    'identifier': '21BPzYYrFzbuECcBV3M1FH',
    'reqId': 1514304094738044,
    'protocolVersion': 2,
    'signature': '3YVzDtSxxnowVwAXZmxCG2fz1A38j1qLrwKmGEG653GZw7KJRBX57Stc1oxQZqqu9mCqFLa7aBzt4MKXk4MeunVj',
}

Reply 예:

{
    'op': 'REPLY', 
    'result': {
        "ver":1,
        "txn": {
            "type":5,
            "protocolVersion":2,
            
            "data": {
                "ver":1,
                "version": "1.0",
                "aml": {
                    "EULA": "Included in the EULA for the product being used",
                    "Service Agreement": "Included in the agreement with the service provider managing the transaction",
                    "Click Agreement": "Agreed through the UI at the time of submission",
                    "Session Agreement": "Agreed at wallet instantiation or login"
                },
                "amlContext": "http://aml-context-descr"
            },
            
            "metadata": {
                "reqId":1514304094738044,
                "from":"21BPzYYrFzbuECcBV3M1FH",
                "digest":"6cee82226c6e276c983f46d03e3b3d10436d90b67bf33dc67ce9901b44dbc97c",
                "payloadDigest": "21f0f5c158ed6ad49ff855baf09a2ef9b4ed1a8015ac24bccc2e0106cd905685",
            },
        },
        "txnMetadata": {
            "txnTime":1513945121,
            "seqNo": 10,  
        },
        "reqSignature": {
            "type": "ED25519",
            "values": [{
                "from": "21BPzYYrFzbuECcBV3M1FH",
                "value": "3YVzDtSxxnowVwAXZmxCG2fz1A38j1qLrwKmGEG653GZw7KJRBX57Stc1oxQZqqu9mCqFLa7aBzt4MKXk4MeunVj"
            }]
        },
        
        'rootHash': 'DvpkQ2aADvQawmrzvTTjF9eKQxjDkrCbQDszMRbgJ6zV',
        'auditPath': ['6GdvJfqTekMvzwi9wuEpfqMLzuN1T91kvgRBQLUzjkt6'],
    }
}

 

Read Requests(읽기 Request)

GET_NYM

DID(NYM)에 대한 정보를 가져옵니다.

  • dest (base58-encoded string): 16 또는 32 바이트 DID 값에 대한 base58 인코딩 문자열인 Target DID. identifier가 submitter의 DID인 identifier 메타 데이터 필드와 다릅니다. 예: identifier는 읽기 request 발신자의 DID이고 dest는 요청된 DID입니다.

Request 예:

{
    'operation': {
        'type': '105'
        'dest': '2VkbBskPNNyWrLrZq7DBhk'
    },
    
    'identifier': 'L5AD5g65TDQr1PPHHRoiGf',
    'reqId': 1514308188474704,
    'protocolVersion': 2
}

Reply 예:

{
    'op': 'REPLY', 
    'result': {
        'type': '105',
        'identifier': 'L5AD5g65TDQr1PPHHRoiGf',
        'reqId': 1514308188474704,
        
        'seqNo': 10,
        'txnTime': 1514214795,

        'state_proof': {
            'root_hash': '81bGgr7FDSsf4ymdqaWzfnN86TETmkUKH4dj4AqnokrH',
            'proof_nodes': '+QHl+FGAgICg0he/hjc9t/tPFzmCrb2T+nHnN0cRwqPKqZEc3pw2iCaAoAsA80p3oFwfl4dDaKkNI8z8weRsSaS9Y8n3HoardRzxgICAgICAgICAgID4naAgwxDOAEoIq+wUHr5h9jjSAIPDjS7SEG1NvWJbToxVQbh6+Hi4dnsiaWRlbnRpZmllciI6Ikw1QUQ1ZzY1VERRcjFQUEhIUm9pR2YiLCJyb2xlIjpudWxsLCJzZXFObyI6MTAsInR4blRpbWUiOjE1MTQyMTQ3OTUsInZlcmtleSI6In42dWV3Um03MmRXN1pUWFdObUFkUjFtIn348YCAgKDKj6ZIi+Ob9HXBy/CULIerYmmnnK2A6hN1u4ofU2eihKBna5MOCHiaObMfghjsZ8KBSbC6EpTFruD02fuGKlF1q4CAgICgBk8Cpc14mIr78WguSeT7+/rLT8qykKxzI4IO5ZMQwSmAoLsEwI+BkQFBiPsN8F610IjAg3+MVMbBjzugJKDo4NhYoFJ0ln1wq3FTWO0iw1zoUcO3FPjSh5ytvf1jvSxxcmJxoF0Hy14HfsVll8qa9aQ8T740lPFLR431oSefGorqgM5ioK1TJOr6JuvtBNByVMRv+rjhklCp6nkleiyLIq8vZYRcgIA=', 
            'multi_signature': {
                'value': {
                    'timestamp': 1514308168,
                    'ledger_id': 1, 
                    'txn_root_hash': '4Y2DpBPSsgwd5CVE8Z2zZZKS4M6n9AbisT3jYvCYyC2y',
                    'pool_state_root_hash': '9fzzkqU25JbgxycNYwUqKmM3LT8KsvUFkSSowD4pHpoK',
                    'state_root_hash': '81bGgr7FDSsf4ymdqaWzfnN86TETmkUKH4dj4AqnokrH'
                },
                'signature': 'REbtR8NvQy3dDRZLoTtzjHNx9ar65ttzk4jMqikwQiL1sPcHK4JAqrqVmhRLtw6Ed3iKuP4v8tgjA2BEvoyLTX6vB6vN4CqtFLqJaPJqMNZvr9tA5Lm6ZHBeEsH1QQLBYnWSAtXt658PotLUEp38sNxRh21t1zavbYcyV8AmxuVTg3',
                'participants': ['Delta', 'Gamma', 'Alpha']
            }
        },
        
        'data': '{"dest":"2VkbBskPNNyWrLrZq7DBhk","identifier":"L5AD5g65TDQr1PPHHRoiGf","role":null,"seqNo":10,"txnTime":1514308168,"verkey":"~6hAzy6ubo3qutnnw5A12RF"}',
        
        'dest': '2VkbBskPNNyWrLrZq7DBhk'
    }
}

 

GET_ATTRIB

지정된 DID의 속성에 대한 정보를 가져옵니다.

NOTE: hash 및 enc 속성에 대한 GET_ATTRIB는 "존재 증명(proof of existence)"과 유사합니다. 즉, 응답 데이터에 요청된 값만 포함됩니다.

  • dest (base58-encoded string): 16 또는 32 바이트 DID 값에 대한 base58 인코딩 문자열인 Target DID. identifier가 submitter의 DID인 identifier 메타 데이터 필드와 다릅니다. 예: identifier는 읽기 request 발신자의 DID이고 dest는 속성을 얻는 DID입니다.
  • raw (string; mutually exclusive with hash and enc): 요청된 속성 이름
  • hash (sha256 hash string; mutually exclusive with raw and enc):요청된 속성 해시
  • enc (string; mutually exclusive with raw and hash): 암호화 된 속성

Request 예:

{
    'operation': {
        'type': '104'
        'dest': 'AH4RRiPR78DUrCWatnCW2w',
        'raw': 'dateOfBirth'
    },
    
    'identifier': 'L5AD5g65TDQr1PPHHRoiGf',
    'reqId': 1514308188474704,
    'protocolVersion': 2
}

Reply 예:

{
    'op': 'REPLY', 
    'result': {
        'type': '104',
        'identifier': 'L5AD5g65TDQr1PPHHRoiGf',
        'reqId': 1514308188474704,
        
        'seqNo': 10,
        'txnTime': 1514214795,

        'state_proof': {
            'root_hash': '81bGgr7FDSsf4ymdqaWzfnN86TETmkUKH4dj4AqnokrH',
            'proof_nodes': '+QHl+FGAgICg0he/hjc9t/tPFzmCrb2T+nHnN0cRwqPKqZEc3pw2iCaAoAsA80p3oFwfl4dDaKkNI8z8weRsSaS9Y8n3HoardRzxgICAgICAgICAgID4naAgwxDOAEoIq+wUHr5h9jjSAIPDjS7SEG1NvWJbToxVQbh6+Hi4dnsiaWRlbnRpZmllciI6Ikw1QUQ1ZzY1VERRcjFQUEhIUm9pR2YiLCJyb2xlIjpudWxsLCJzZXFObyI6MTAsInR4blRpbWUiOjE1MTQyMTQ3OTUsInZlcmtleSI6In42dWV3Um03MmRXN1pUWFdObUFkUjFtIn348YCAgKDKj6ZIi+Ob9HXBy/CULIerYmmnnK2A6hN1u4ofU2eihKBna5MOCHiaObMfghjsZ8KBSbC6EpTFruD02fuGKlF1q4CAgICgBk8Cpc14mIr78WguSeT7+/rLT8qykKxzI4IO5ZMQwSmAoLsEwI+BkQFBiPsN8F610IjAg3+MVMbBjzugJKDo4NhYoFJ0ln1wq3FTWO0iw1zoUcO3FPjSh5ytvf1jvSxxcmJxoF0Hy14HfsVll8qa9aQ8T740lPFLR431oSefGorqgM5ioK1TJOr6JuvtBNByVMRv+rjhklCp6nkleiyLIq8vZYRcgIA=', 
            'multi_signature': {
                'value': {
                    'timestamp': 1514308168,
                    'ledger_id': 1, 
                    'txn_root_hash': '4Y2DpBPSsgwd5CVE8Z2zZZKS4M6n9AbisT3jYvCYyC2y',
                    'pool_state_root_hash': '9fzzkqU25JbgxycNYwUqKmM3LT8KsvUFkSSowD4pHpoK',
                    'state_root_hash': '81bGgr7FDSsf4ymdqaWzfnN86TETmkUKH4dj4AqnokrH'
                },
                'signature': 'REbtR8NvQy3dDRZLoTtzjHNx9ar65ttzk4jMqikwQiL1sPcHK4JAqrqVmhRLtw6Ed3iKuP4v8tgjA2BEvoyLTX6vB6vN4CqtFLqJaPJqMNZvr9tA5Lm6ZHBeEsH1QQLBYnWSAtXt658PotLUEp38sNxRh21t1zavbYcyV8AmxuVTg3',
                'participants': ['Delta', 'Gamma', 'Alpha']
            }
        },
        
        'data': '{"dateOfBirth":{"dayOfMonth":23,"month":5,"year":1984}}',
        
        'dest': 'AH4RRiPR78DUrCWatnCW2w',
        'raw': 'dateOfBirth'
    }
}

 

GET_SCHEMA

Claim의 Schema를 가져옵니다.

  • dest (base58-encoded string): 16 또는 32 바이트 DID 값에 대한 base58 인코딩 문자열인 Schema Issuer의 DID. identifier가 submitter의 DID인 identifier 메타 데이터 필드와 다릅니다. 예: identifier는 읽기 request 발신자의 DID이고 dest는 Schema Issuer의 DID입니다.
  • data (dict):
    • name (string): Schema의 이름 문자열
    • version (string): Schema의 버전 문자열

Request 예:

{
    'operation': {
        'type': '107'
        'dest': '2VkbBskPNNyWrLrZq7DBhk',
        'data': {
            'name': 'Degree',
             'version': '1.0'
        },
    },
    
    'identifier': 'L5AD5g65TDQr1PPHHRoiGf',
    'reqId': 1514308188474704,
    'protocolVersion': 2
}

Reply 예:

{
    'op': 'REPLY', 
    'result': {
        'type': '107',
        'identifier': 'L5AD5g65TDQr1PPHHRoiGf',
        'reqId': 1514308188474704,
        
        'seqNo': 10,
        'txnTime': 1514214795,

        'state_proof': {
            'root_hash': '81bGgr7FDSsf4ymdqaWzfnN86TETmkUKH4dj4AqnokrH',
            'proof_nodes': '+QHl+FGAgICg0he/hjc9t/tPFzmCrb2T+nHnN0cRwqPKqZEc3pw2iCaAoAsA80p3oFwfl4dDaKkNI8z8weRsSaS9Y8n3HoardRzxgICAgICAgICAgID4naAgwxDOAEoIq+wUHr5h9jjSAIPDjS7SEG1NvWJbToxVQbh6+Hi4dnsiaWRlbnRpZmllciI6Ikw1QUQ1ZzY1VERRcjFQUEhIUm9pR2YiLCJyb2xlIjpudWxsLCJzZXFObyI6MTAsInR4blRpbWUiOjE1MTQyMTQ3OTUsInZlcmtleSI6In42dWV3Um03MmRXN1pUWFdObUFkUjFtIn348YCAgKDKj6ZIi+Ob9HXBy/CULIerYmmnnK2A6hN1u4ofU2eihKBna5MOCHiaObMfghjsZ8KBSbC6EpTFruD02fuGKlF1q4CAgICgBk8Cpc14mIr78WguSeT7+/rLT8qykKxzI4IO5ZMQwSmAoLsEwI+BkQFBiPsN8F610IjAg3+MVMbBjzugJKDo4NhYoFJ0ln1wq3FTWO0iw1zoUcO3FPjSh5ytvf1jvSxxcmJxoF0Hy14HfsVll8qa9aQ8T740lPFLR431oSefGorqgM5ioK1TJOr6JuvtBNByVMRv+rjhklCp6nkleiyLIq8vZYRcgIA=', 
            'multi_signature': {
                'value': {
                    'timestamp': 1514308168,
                    'ledger_id': 1, 
                    'txn_root_hash': '4Y2DpBPSsgwd5CVE8Z2zZZKS4M6n9AbisT3jYvCYyC2y',
                    'pool_state_root_hash': '9fzzkqU25JbgxycNYwUqKmM3LT8KsvUFkSSowD4pHpoK',
                    'state_root_hash': '81bGgr7FDSsf4ymdqaWzfnN86TETmkUKH4dj4AqnokrH'
                },
                'signature': 'REbtR8NvQy3dDRZLoTtzjHNx9ar65ttzk4jMqikwQiL1sPcHK4JAqrqVmhRLtw6Ed3iKuP4v8tgjA2BEvoyLTX6vB6vN4CqtFLqJaPJqMNZvr9tA5Lm6ZHBeEsH1QQLBYnWSAtXt658PotLUEp38sNxRh21t1zavbYcyV8AmxuVTg3',
                'participants': ['Delta', 'Gamma', 'Alpha']
            }
        },
        
        'data': {
            'name': 'Degree',
            'version': '1.0',
            'attr_names': ['attrib1', 'attrib2', 'attrib3']
        }, 
        
        'dest': '2VkbBskPNNyWrLrZq7DBhk'
    }
}

 

GET_CLAIM_DEF

Claim Definition을 가져옵니다.

  • origin (base58-encoded string): 16 또는 32 바이트 DID 값에 대한 base58 인코딩 문자열인 Claim Definition Issuer의 DID
  • ref (string): claim definition이 작성되는 Schema 트랜잭션의 시퀀스 번호
  • signature_type (string): claim definition 유형. CL (Camenisch-Lysyanskaya)은 현재 유일하게 지원되는 유형입니다.
  • tag (string, optional): 동일한 DID에서 발급한 동일한 Schema 및 유형에 대해 여러 개의 공개 키를 갖는 고유한 태그. 지정하지 않으면 기본 태그인 tag가 사용됩니다.

Request 예:

{
    'operation': {
        'type': '108'
        'signature_type': 'CL',
        'origin': '2VkbBskPNNyWrLrZq7DBhk',
        'ref': 10,
        'tag': 'some_tag',
    },
    
    'identifier': 'L5AD5g65TDQr1PPHHRoiGf',
    'reqId': 1514308188474704,
    'protocolVersion': 2
}

Reply 예:

{
    'op': 'REPLY', 
    'result': {
        'type': '108',
        'identifier': 'L5AD5g65TDQr1PPHHRoiGf',
        'reqId': 1514308188474704,
        
        'seqNo': 10,
        'txnTime': 1514214795,

        'state_proof': {
            'root_hash': '81bGgr7FDSsf4ymdqaWzfnN86TETmkUKH4dj4AqnokrH',
            'proof_nodes': '+QHl+FGAgICg0he/hjc9t/tPFzmCrb2T+nHnN0cRwqPKqZEc3pw2iCaAoAsA80p3oFwfl4dDaKkNI8z8weRsSaS9Y8n3HoardRzxgICAgICAgICAgID4naAgwxDOAEoIq+wUHr5h9jjSAIPDjS7SEG1NvWJbToxVQbh6+Hi4dnsiaWRlbnRpZmllciI6Ikw1QUQ1ZzY1VERRcjFQUEhIUm9pR2YiLCJyb2xlIjpudWxsLCJzZXFObyI6MTAsInR4blRpbWUiOjE1MTQyMTQ3OTUsInZlcmtleSI6In42dWV3Um03MmRXN1pUWFdObUFkUjFtIn348YCAgKDKj6ZIi+Ob9HXBy/CULIerYmmnnK2A6hN1u4ofU2eihKBna5MOCHiaObMfghjsZ8KBSbC6EpTFruD02fuGKlF1q4CAgICgBk8Cpc14mIr78WguSeT7+/rLT8qykKxzI4IO5ZMQwSmAoLsEwI+BkQFBiPsN8F610IjAg3+MVMbBjzugJKDo4NhYoFJ0ln1wq3FTWO0iw1zoUcO3FPjSh5ytvf1jvSxxcmJxoF0Hy14HfsVll8qa9aQ8T740lPFLR431oSefGorqgM5ioK1TJOr6JuvtBNByVMRv+rjhklCp6nkleiyLIq8vZYRcgIA=', 
            'multi_signature': {
                'value': {
                    'timestamp': 1514308168,
                    'ledger_id': 1, 
                    'txn_root_hash': '4Y2DpBPSsgwd5CVE8Z2zZZKS4M6n9AbisT3jYvCYyC2y',
                    'pool_state_root_hash': '9fzzkqU25JbgxycNYwUqKmM3LT8KsvUFkSSowD4pHpoK',
                    'state_root_hash': '81bGgr7FDSsf4ymdqaWzfnN86TETmkUKH4dj4AqnokrH'
                },
                'signature': 'REbtR8NvQy3dDRZLoTtzjHNx9ar65ttzk4jMqikwQiL1sPcHK4JAqrqVmhRLtw6Ed3iKuP4v8tgjA2BEvoyLTX6vB6vN4CqtFLqJaPJqMNZvr9tA5Lm6ZHBeEsH1QQLBYnWSAtXt658PotLUEp38sNxRh21t1zavbYcyV8AmxuVTg3',
                'participants': ['Delta', 'Gamma', 'Alpha']
            }
        },
        
        'data': {
            'primary': ...,
            'revocation': ...
        },
        
        'signature_type': 'CL',
        'origin': '2VkbBskPNNyWrLrZq7DBhk',
        'ref': 10,
        'tag': 'some_tag'
    }
}

 

GET_REVOC_REG_DEF

Issuer가 특정 Claim Definition에 대해 생성 및 게시하는 해지 레지스트리 Definition을 가져옵니다.

  • id (string): 해지 레지스트리 Definition의 고유한 identifier(현재 state trie의 키가 사용됨)

Request 예:

{
    'operation': {
        'type': '115'
        'id': 'L5AD5g65TDQr1PPHHRoiGf:3:FC4aWomrA13YyvYC1Mxw7:3:CL:14:some_tag:CL_ACCUM:tag1',
    },
    
    'identifier': 'T6AD5g65TDQr1PPHHRoiGf',
    'reqId': 1514308188474704,
    'protocolVersion': 2
}

Reply 예:

{
    'op': 'REPLY', 
    'result': {
        'type': '115',
        'identifier': 'T6AD5g65TDQr1PPHHRoiGf',
        'reqId': 1514308188474704,
        
        'id': 'L5AD5g65TDQr1PPHHRoiGf:3:FC4aWomrA13YyvYC1Mxw7:3:CL:14:some_tag:CL_ACCUM:tag1',
        
        'seqNo': 10,
        'txnTime': 1514214795,
        
        'data': {
            'id': 'L5AD5g65TDQr1PPHHRoiGf:3:FC4aWomrA13YyvYC1Mxw7:3:CL:14:some_tag:CL_ACCUM:tag1',
            'credDefId': 'FC4aWomrA13YyvYC1Mxw7:3:CL:14:some_tag'
            'revocDefType': 'CL_ACCUM',
            'tag': 'tag1',
            'value': {
                'maxCredNum': 1000000,
                'tailsHash': '6619ad3cf7e02fc29931a5cdc7bb70ba4b9283bda3badae297',
                'tailsLocation': 'http://tails.location.com',
                'issuanceType': 'ISSUANCE_BY_DEFAULT',
                'publicKeys': {},
            },
        },
        

        'state_proof': {
            'root_hash': '81bGgr7FDSsf4ymdqaWzfnN86TETmkUKH4dj4AqnokrH',
            'proof_nodes': '+QHl+FGAgICg0he/hjc9t/tPFzmCrb2T+nHnN0cRwqPKqZEc3pw2iCaAoAsA80p3oFwfl4dDaKkNI8z8weRsSaS9Y8n3HoardRzxgICAgICAgICAgID4naAgwxDOAEoIq+wUHr5h9jjSAIPDjS7SEG1NvWJbToxVQbh6+Hi4dnsiaWRlbnRpZmllciI6Ikw1QUQ1ZzY1VERRcjFQUEhIUm9pR2YiLCJyb2xlIjpudWxsLCJzZXFObyI6MTAsInR4blRpbWUiOjE1MTQyMTQ3OTUsInZlcmtleSI6In42dWV3Um03MmRXN1pUWFdObUFkUjFtIn348YCAgKDKj6ZIi+Ob9HXBy/CULIerYmmnnK2A6hN1u4ofU2eihKBna5MOCHiaObMfghjsZ8KBSbC6EpTFruD02fuGKlF1q4CAgICgBk8Cpc14mIr78WguSeT7+/rLT8qykKxzI4IO5ZMQwSmAoLsEwI+BkQFBiPsN8F610IjAg3+MVMbBjzugJKDo4NhYoFJ0ln1wq3FTWO0iw1zoUcO3FPjSh5ytvf1jvSxxcmJxoF0Hy14HfsVll8qa9aQ8T740lPFLR431oSefGorqgM5ioK1TJOr6JuvtBNByVMRv+rjhklCp6nkleiyLIq8vZYRcgIA=', 
            'multi_signature': {
                'value': {
                    'timestamp': 1514308168,
                    'ledger_id': 1, 
                    'txn_root_hash': '4Y2DpBPSsgwd5CVE8Z2zZZKS4M6n9AbisT3jYvCYyC2y',
                    'pool_state_root_hash': '9fzzkqU25JbgxycNYwUqKmM3LT8KsvUFkSSowD4pHpoK',
                    'state_root_hash': '81bGgr7FDSsf4ymdqaWzfnN86TETmkUKH4dj4AqnokrH'
                },
                'signature': 'REbtR8NvQy3dDRZLoTtzjHNx9ar65ttzk4jMqikwQiL1sPcHK4JAqrqVmhRLtw6Ed3iKuP4v8tgjA2BEvoyLTX6vB6vN4CqtFLqJaPJqMNZvr9tA5Lm6ZHBeEsH1QQLBYnWSAtXt658PotLUEp38sNxRh21t1zavbYcyV8AmxuVTg3',
                'participants': ['Delta', 'Gamma', 'Alpha']
            }
        },
        

    }
}

 

GET_REVOC_REG

해지 레지스트리 누산기를 가져옵니다.

  • revocRegDefId (string): 해당 해지 레지스트리 Definition의 고유한 identifier(현재 state trie의 키가 사용됨)
  • timestamp (integer as POSIX timestamp): 누산기 값을 가져오려는 시간(원장 관점)

Request 예:

{
    'operation': {
        'type': '116'
        'revocRegDefId': 'L5AD5g65TDQr1PPHHRoiGf:3:FC4aWomrA13YyvYC1Mxw7:3:CL:14:some_tag:CL_ACCUM:tag1',
        'timestamp': 1514214800
    },
    
    'identifier': 'T6AD5g65TDQr1PPHHRoiGf',
    'reqId': 1514308188474704,
    'protocolVersion': 2
}

Reply 예:

{
    'op': 'REPLY', 
    'result': {
        'type': '116',
        'identifier': 'T6AD5g65TDQr1PPHHRoiGf',
        'reqId': 1514308188474704,
        
        'revocRegDefId': 'L5AD5g65TDQr1PPHHRoiGf:3:FC4aWomrA13YyvYC1Mxw7:3:CL:14:some_tag:CL_ACCUM:tag1',
        'timestamp': 1514214800
        
        'seqNo': 10,
        'txnTime': 1514214795,
        
        'data': {
            'id': 'L5AD5g65TDQr1PPHHRoiGf:3:FC4aWomrA13YyvYC1Mxw7:3:CL:14:some_tag:CL_ACCUM:tag1',
            'revocRegDefId': 'L5AD5g65TDQr1PPHHRoiGf:3:FC4aWomrA13YyvYC1Mxw7:3:CL:14:some_tag:CL_ACCUM:tag1'
            'revocDefType': 'CL_ACCUM',
            'value': {
                'accum': 'accum_value',
            },
        },
        

        'state_proof': {
            'root_hash': '81bGgr7FDSsf4ymdqaWzfnN86TETmkUKH4dj4AqnokrH',
            'proof_nodes': '+QHl+FGAgICg0he/hjc9t/tPFzmCrb2T+nHnN0cRwqPKqZEc3pw2iCaAoAsA80p3oFwfl4dDaKkNI8z8weRsSaS9Y8n3HoardRzxgICAgICAgICAgID4naAgwxDOAEoIq+wUHr5h9jjSAIPDjS7SEG1NvWJbToxVQbh6+Hi4dnsiaWRlbnRpZmllciI6Ikw1QUQ1ZzY1VERRcjFQUEhIUm9pR2YiLCJyb2xlIjpudWxsLCJzZXFObyI6MTAsInR4blRpbWUiOjE1MTQyMTQ3OTUsInZlcmtleSI6In42dWV3Um03MmRXN1pUWFdObUFkUjFtIn348YCAgKDKj6ZIi+Ob9HXBy/CULIerYmmnnK2A6hN1u4ofU2eihKBna5MOCHiaObMfghjsZ8KBSbC6EpTFruD02fuGKlF1q4CAgICgBk8Cpc14mIr78WguSeT7+/rLT8qykKxzI4IO5ZMQwSmAoLsEwI+BkQFBiPsN8F610IjAg3+MVMbBjzugJKDo4NhYoFJ0ln1wq3FTWO0iw1zoUcO3FPjSh5ytvf1jvSxxcmJxoF0Hy14HfsVll8qa9aQ8T740lPFLR431oSefGorqgM5ioK1TJOr6JuvtBNByVMRv+rjhklCp6nkleiyLIq8vZYRcgIA=', 
            'multi_signature': {
                'value': {
                    'timestamp': 1514308168,
                    'ledger_id': 1, 
                    'txn_root_hash': '4Y2DpBPSsgwd5CVE8Z2zZZKS4M6n9AbisT3jYvCYyC2y',
                    'pool_state_root_hash': '9fzzkqU25JbgxycNYwUqKmM3LT8KsvUFkSSowD4pHpoK',
                    'state_root_hash': '81bGgr7FDSsf4ymdqaWzfnN86TETmkUKH4dj4AqnokrH'
                },
                'signature': 'REbtR8NvQy3dDRZLoTtzjHNx9ar65ttzk4jMqikwQiL1sPcHK4JAqrqVmhRLtw6Ed3iKuP4v8tgjA2BEvoyLTX6vB6vN4CqtFLqJaPJqMNZvr9tA5Lm6ZHBeEsH1QQLBYnWSAtXt658PotLUEp38sNxRh21t1zavbYcyV8AmxuVTg3',
                'participants': ['Delta', 'Gamma', 'Alpha']
            }
        },
        

    }
}

 

GET_REVOC_REG_DELTA

지정된 시간 간격(from과 to)에 대한 해지 레지스트리 델타(누적 값 및 발급/해지된 인덱스의 델타)를 가져옵니다.

from을 설정하지 않으면 지정된 시간 동안 전체 레지스트리(누적 및 현재 발행/해지된 인덱스)가 반환됩니다(to).

  • revocRegDefId (string): 해당 해지 레지스트리 Definition의 고유한 identifier(현재 state trie의 키가 사용됨)
  • from (integer as POSIX timestamp, optional): 누적 및 인덱스를 반환하려는 후의 시간(원장 관점) 즉, 델타 간격의 왼쪽 경계입니다. absent일 수 있습니다. 이는 to까지 모든 인덱스 및 누적까지 반환되어야함을 의미합니다.
  • to (integer as POSIX timestamp): 누적 및 인덱스를 반환하려는 전의 시간(원장 관점) 즉, 델타 간격의 오른쪽 경계입니다.

from이 설정되면 accum_from 값에 대한 추가 state proof는 stateProofFrom에 반환되고 공통 state proof는 accum_to에 대한 것입니다. 두 state proof는 모두 누산기 값에 대해서만 반환됩니다. 클라이언트는 주어진 accum_from 및 델타 인덱스에서 accum_to를 계산하고, 계산된 accum_to가 리턴된 델타와 동일한 지 확인하여 리턴된 델타도 올바른지 확인해야합니다.

from을 설정하지 않으면 누적(accum) 값과 전체 인덱스 목록 모두에 대한 하나의 state proof(일반적으로)가 있습니다.

from 및 to를 모두 설정한 Request 예:

{
    'operation': {
        'type': '117'
        'revocRegDefId': 'L5AD5g65TDQr1PPHHRoiGf:3:FC4aWomrA13YyvYC1Mxw7:3:CL:14:some_tag:CL_ACCUM:tag1',
        'from': 1514214100
        'to': 1514214900
    },
    
    'identifier': 'T6AD5g65TDQr1PPHHRoiGf',
    'reqId': 1514308188474704,
    'protocolVersion': 2
}

from 및 to를 모두 설정한 Reply 예:

{
    'op': 'REPLY', 
    'result': {
        'type': '117',
        'identifier': 'T6AD5g65TDQr1PPHHRoiGf',
        'reqId': 1514308188474704,
        
        'revocRegDefId': 'L5AD5g65TDQr1PPHHRoiGf:3:FC4aWomrA13YyvYC1Mxw7:3:CL:14:some_tag:CL_ACCUM:tag1',
        'from': 1514214100
        'to': 1514214900
        
        'seqNo': 18,
        'txnTime': 1514214795,
        
        'data': {
            'revocDefType': 'CL_ACCUM',
            'revocRegDefId': 'L5AD5g65TDQr1PPHHRoiGf:3:FC4aWomrA13YyvYC1Mxw7:3:CL:14:some_tag:CL_ACCUM:tag1',
            'value': {
               'accum_to': {
                   'revocDefType': 'CL_ACCUM', 
                   'revocRegDefId': 'L5AD5g65TDQr1PPHHRoiGf:3:FC4aWomrA13YyvYC1Mxw7:3:CL:14:some_tag:CL_ACCUM:tag1', 
                   'txnTime': 1514214795, 
                   'seqNo': 18,
                   'value': {
                      'accum': '9a512a7624'
                   }
                },
                'revoked': [10, 11],
                'issued': [1, 2, 3], 
                'accum_from': {
                    'revocDefType': 'CL_ACCUM',
                    'revocRegDefId': 'L5AD5g65TDQr1PPHHRoiGf:3:FC4aWomrA13YyvYC1Mxw7:3:CL:14:some_tag:CL_ACCUM:tag1', 
                    'txnTime': 1514214105, 
                    'seqNo': 16, 
                    'value': {
                       'accum': 'be080bd74b'
                    }
                 }
            },
            'stateProofFrom': {
                'multi_signature': {
                     'participants': ['Delta', 'Gamma', 'Alpha'],
                     'signature': 'QpP4oVm2MLQ7SzLVZknuFjneXfqYj6UStn3oQtCdSiKiYuS4n1kxRphKRDMwmS7LGeXgUmy3C8GtcVM5X9SN9qLr2MBApjpPtKE9DkBTwyieh3vN1UMq1Kwx2Jkz7vcSJNH2WzjEKSUnpFLEJk4mpFaibqd1xX2hrwruxzSDUi2uCT', 
                     'value': {
                         'state_root_hash': '2sfnQcEKkjw78KYnGJyk5Gw9gtwESvX6NdFFPEiQYQsz', 
                         'ledger_id': 1,
                         'pool_state_root_hash': 'JDt3NNrZenx3x41oxsvhWeuSFFerdyqEvQUWyGdHX7gx',
                         'timestamp': 1514214105, 
                         'txn_root_hash': 'FCkntnPqfaGx4fCX5tTdWeLr1mXdFuZnTNuEehiet32z'
                     }
                },
                'root_hash': '2sfnQcEKkjw78KYnGJyk5Gw9gtwESvX6NdFFPEiQYQsz',
                'proof_nodes': '+QLB+QE3uFEgOk1TaktUV2tQTHRZb1BFYVRGMVRVRGI6NDpNU2pLVFdrUEx0WW9QRWFURjFUVURiOjM6Q0w6MTM6c29tZV90YWc6Q0xfQUNDVU06YTk4ZWO44vjguN57ImxzbiI6MTYsImx1dCI6MTU1ODUyNDEzMSwidmFsIjp7InJldm9jRGVmVHlwZSI6IkNMX0FDQ1VNIiwicmV2b2NSZWdEZWZJZCI6Ik1TaktUV2tQTHRZb1BFYVRGMVRVRGI6NDpNU2pLVFdrUEx0WW9QRWFURjFUVURiOjM6Q0w6MTM6c29tZV90YWc6Q0xfQUNDVU06YTk4ZWMiLCJzZXFObyI6MTYsInR4blRpbWUiOjE1NTg1MjQxMzEsInZhbHVlIjp7ImFjY3VtIjoiYmUwODBiZDc0YiJ9fX34UYCAgICAoAgDh8v1CXNEJGFl302RO98x8R6Ozscy0ZFdRpiCobh3oCnaxHyPnZq6E+mbnfU6oC994Wv1nh7sf0pQOp5g93tbgICAgICAgICAgPkBMYCAgKBmZE7e2jSrhTw9usjxZcAb25uSisJV+TzkbXNUypyJvaA/KAFG4RQqB9dAGRfTgly2XjXvPCeVr7vBn6FSkN7sH4CAoBGxQDip9XfEC/CkgimSkkhCeMm9XnkxxwWiMJwzuhAjgKAmh0g8FUI60e7NBwTu7ukdfz6kaON6u9U87kTeTlPcXICgsk2X2G6MlVhEqMEzthWAT4ey6qRaKXpOuMZOA1kMODagQdHobiexMaAwqtI7P5bbfqNkQEoZD79m6z43DEGQGL6gXQfLXgd+xWWXypr1pDxPvjSU8UtHjfWhJ58aiuqAzmKgyee3YL7GFFd+5oxG9b/q4od/mRjFpLdXKR3YG2o/hAygRIVVdoVD0dpqktsN8kSc03UhYiI76nxdCejX+CV4OX6A'
            }
        },
        

        'state_proof': {
            'root_hash': '81bGgr7FDSsf4ymdqaWzfnN86TETmkUKH4dj4AqnokrH',
            'proof_nodes': '+QHl+FGAgICg0he/hjc9t/tPFzmCrb2T+nHnN0cRwqPKqZEc3pw2iCaAoAsA80p3oFwfl4dDaKkNI8z8weRsSaS9Y8n3HoardRzxgICAgICAgICAgID4naAgwxDOAEoIq+wUHr5h9jjSAIPDjS7SEG1NvWJbToxVQbh6+Hi4dnsiaWRlbnRpZmllciI6Ikw1QUQ1ZzY1VERRcjFQUEhIUm9pR2YiLCJyb2xlIjpudWxsLCJzZXFObyI6MTAsInR4blRpbWUiOjE1MTQyMTQ3OTUsInZlcmtleSI6In42dWV3Um03MmRXN1pUWFdObUFkUjFtIn348YCAgKDKj6ZIi+Ob9HXBy/CULIerYmmnnK2A6hN1u4ofU2eihKBna5MOCHiaObMfghjsZ8KBSbC6EpTFruD02fuGKlF1q4CAgICgBk8Cpc14mIr78WguSeT7+/rLT8qykKxzI4IO5ZMQwSmAoLsEwI+BkQFBiPsN8F610IjAg3+MVMbBjzugJKDo4NhYoFJ0ln1wq3FTWO0iw1zoUcO3FPjSh5ytvf1jvSxxcmJxoF0Hy14HfsVll8qa9aQ8T740lPFLR431oSefGorqgM5ioK1TJOr6JuvtBNByVMRv+rjhklCp6nkleiyLIq8vZYRcgIA=', 
            'multi_signature': {
                'value': {
                    'timestamp': 1514308168,
                    'ledger_id': 1, 
                    'txn_root_hash': '4Y2DpBPSsgwd5CVE8Z2zZZKS4M6n9AbisT3jYvCYyC2y',
                    'pool_state_root_hash': '9fzzkqU25JbgxycNYwUqKmM3LT8KsvUFkSSowD4pHpoK',
                    'state_root_hash': '81bGgr7FDSsf4ymdqaWzfnN86TETmkUKH4dj4AqnokrH'
                },
                'signature': 'REbtR8NvQy3dDRZLoTtzjHNx9ar65ttzk4jMqikwQiL1sPcHK4JAqrqVmhRLtw6Ed3iKuP4v8tgjA2BEvoyLTX6vB6vN4CqtFLqJaPJqMNZvr9tA5Lm6ZHBeEsH1QQLBYnWSAtXt658PotLUEp38sNxRh21t1zavbYcyV8AmxuVTg3',
                'participants': ['Delta', 'Gamma', 'Alpha']
            }
        },
        

    }
}

to만 설정한 Request 예:

{
    'operation': {
        'type': '117'
        'revocRegDefId': 'L5AD5g65TDQr1PPHHRoiGf:3:FC4aWomrA13YyvYC1Mxw7:3:CL:14:some_tag:CL_ACCUM:tag1',
        'to': 1514214900
    },
    
    'identifier': 'T6AD5g65TDQr1PPHHRoiGf',
    'reqId': 1514308188474704,
    'protocolVersion': 2
}

to만 설정한 Reply 예:

{
    'op': 'REPLY', 
    'result': {
        'type': '117',
        'identifier': 'T6AD5g65TDQr1PPHHRoiGf',
        'reqId': 1514308188474704,
        
        'revocRegDefId': 'L5AD5g65TDQr1PPHHRoiGf:3:FC4aWomrA13YyvYC1Mxw7:3:CL:14:some_tag:CL_ACCUM:tag1',
        'to': 1514214900
        
        'seqNo': 18,
        'txnTime': 1514214795,
        
        'data': {
            'revocDefType': 'CL_ACCUM',
            'revocRegDefId': 'L5AD5g65TDQr1PPHHRoiGf:3:FC4aWomrA13YyvYC1Mxw7:3:CL:14:some_tag:CL_ACCUM:tag1',
            'value': {
               'accum_to': {
                   'revocDefType': 'CL_ACCUM', 
                   'revocRegDefId': 'L5AD5g65TDQr1PPHHRoiGf:3:FC4aWomrA13YyvYC1Mxw7:3:CL:14:some_tag:CL_ACCUM:tag1', 
                   'txnTime': 1514214795, 
                   'seqNo': 18,
                   'value': {
                      'accum': '9a512a7624'
                   }
                },
                'issued': [],
                'revoked': [1, 2, 3, 4, 5]
        },
        

        'state_proof': {
            'root_hash': '81bGgr7FDSsf4ymdqaWzfnN86TETmkUKH4dj4AqnokrH',
            'proof_nodes': '+QHl+FGAgICg0he/hjc9t/tPFzmCrb2T+nHnN0cRwqPKqZEc3pw2iCaAoAsA80p3oFwfl4dDaKkNI8z8weRsSaS9Y8n3HoardRzxgICAgICAgICAgID4naAgwxDOAEoIq+wUHr5h9jjSAIPDjS7SEG1NvWJbToxVQbh6+Hi4dnsiaWRlbnRpZmllciI6Ikw1QUQ1ZzY1VERRcjFQUEhIUm9pR2YiLCJyb2xlIjpudWxsLCJzZXFObyI6MTAsInR4blRpbWUiOjE1MTQyMTQ3OTUsInZlcmtleSI6In42dWV3Um03MmRXN1pUWFdObUFkUjFtIn348YCAgKDKj6ZIi+Ob9HXBy/CULIerYmmnnK2A6hN1u4ofU2eihKBna5MOCHiaObMfghjsZ8KBSbC6EpTFruD02fuGKlF1q4CAgICgBk8Cpc14mIr78WguSeT7+/rLT8qykKxzI4IO5ZMQwSmAoLsEwI+BkQFBiPsN8F610IjAg3+MVMbBjzugJKDo4NhYoFJ0ln1wq3FTWO0iw1zoUcO3FPjSh5ytvf1jvSxxcmJxoF0Hy14HfsVll8qa9aQ8T740lPFLR431oSefGorqgM5ioK1TJOr6JuvtBNByVMRv+rjhklCp6nkleiyLIq8vZYRcgIA=', 
            'multi_signature': {
                'value': {
                    'timestamp': 1514308168,
                    'ledger_id': 1, 
                    'txn_root_hash': '4Y2DpBPSsgwd5CVE8Z2zZZKS4M6n9AbisT3jYvCYyC2y',
                    'pool_state_root_hash': '9fzzkqU25JbgxycNYwUqKmM3LT8KsvUFkSSowD4pHpoK',
                    'state_root_hash': '81bGgr7FDSsf4ymdqaWzfnN86TETmkUKH4dj4AqnokrH'
                },
                'signature': 'REbtR8NvQy3dDRZLoTtzjHNx9ar65ttzk4jMqikwQiL1sPcHK4JAqrqVmhRLtw6Ed3iKuP4v8tgjA2BEvoyLTX6vB6vN4CqtFLqJaPJqMNZvr9tA5Lm6ZHBeEsH1QQLBYnWSAtXt658PotLUEp38sNxRh21t1zavbYcyV8AmxuVTg3',
                'participants': ['Delta', 'Gamma', 'Alpha']
            }
        },
        

    }
}

 

GET_AUTH_RULE

원장에서 인증 규칙 또는 전체 규칙 목록에 대한 인증 제약 조건을 얻기 위한 request. 제약 조건 형식은 AUTH_RULE transaction에 설명되어 있습니다.

인증규칙 세트는 정적이며 auth_rules.md에서 찾을 수 있습니다. 이것은 변경 및 편집될 수 있는 제약 조건(constraint) 부분입니다.

request 빌더에서 두 가지 옵션이 가능합니다.:

  • request에 전체 매개 변수 목록이 있는 경우(아마도 ADD 작업에 필요하지 않으므로 old_value가 없는 경우), reply에 이 키에 대한 하나의 제약 조건이 포함됩니다.
  • request에 txn_type 이외의 필드가 포함되어 있지 않으면 response에 전체 인증 규칙 목록이 포함됩니다.

reply는 제약 조건이 있는 인증 규칙 목록입니다. 이는 매개 특정 작업을 위한 변수가 있는 GET_AUTH_RULE의 경우 한 요소 목록이 됩니다.

각 출력 목록 요소는 AUTH_RULE의 입력과 동일하므로 GET_AUTH_RULE 출력 목록 요소는 AUTH_RULE의 입력(필수 변경 사항)으로 사용될 수 있습니다.

  • auth_action (enum: ADD or EDIT; optional): 작업 유형: 새 항목을 추가하거나 기존 항목을 편집하십시오.
  • auth_type (string; optional): 권한을 변경할 거래 유형 (예: “0”, “1”, …)
  • field (string; optional): 주어진 트랜잭션 필드의 값을 편집(추가)할 수 있는 권한 변경. *는 모든 필드로 사용할 수 있습니다.
  • old_value (string; optional): new_value로 변경할 수 있는 필드의 이전 값. EDIT 작업에만 적합합니다.
  • new_value (string; optional): 필드를 채우는 데 사용할 수 있는 새로운 값.

(하나의 규칙을 얻기 위한) Request 예:

  {  
      'reqId':572495653,
      'signature':'366f89ehxLuxPySGcHppxbURWRcmXVdkHeHrjtPKNYSRKnvaxzUXF8CEUWy9KU251u5bmnRL3TKvQiZgjwouTJYH',
      'identifier':'M9BJDuS24bqbJNvBRsoGg3',
      'operation':{  
            'auth_type': '0', 
            'auth_action': 'EDIT',
            'field' :'services',
            'old_value': [VALIDATOR],
            'new_value': []
      },
      'protocolVersion':2
   }

(하나의 규칙을 얻기 위한) Reply 예:

{  
      'op':'REPLY',
      'result':{  
         'type':'121',
         'auth_type': '0', 
         'auth_action': 'EDIT',
         'field' :'services',
         'old_value': [VALIDATOR],
         'new_value': []
         
         'reqId':441933878,
         'identifier':'M9BJDuS24bqbJNvBRsoGg3',
         
         'data':[  
              {
                'auth_type': '0', 
                'auth_action': 'EDIT',
                'field' :'services',
                'old_value': [VALIDATOR],
                'new_value': []
                'constraint':{
                      'constraint_id': 'OR',
                      'auth_constraints': [{'constraint_id': 'ROLE', 
                                            'role': '0',
                                            'sig_count': 2, 
                                            'need_to_be_owner': False, 
                                            'metadata': {}}, 
                                           
                                           {'constraint_id': 'ROLE', 
                                            'role': '2',
                                            'sig_count': 1, 
                                            'need_to_be_owner': True, 
                                            'metadata': {}}
                                           ]
                }, 
              }
         ],

         'state_proof':{  
            'proof_nodes':'+Pz4+pUgQURELS0xLS1yb2xlLS0qLS0xMDG44vjguN57ImF1dGhfY29uc3RyYWludHMiOlt7ImNvbnN0cmFpbnRfaWQiOiJST0xFIiwibWV0YWRhdGEiOnt9LCJuZWVkX3RvX2JlX293bmVyIjpmYWxzZSwicm9sZSI6IjAiLCJzaWdfY291bnQiOjF9LHsiY29uc3RyYWludF9pZCI6IlJPTEUiLCJtZXRhZGF0YSI6e30sIm5lZWRfdG9fYmVfb3duZXIiOmZhbHNlLCJyb2xlIjoiMiIsInNpZ19jb3VudCI6MX1dLCJjb25zdHJhaW50X2lkIjoiQU5EIn0=',
            'root_hash':'DauPq3KR6QFnkaAgcfgoMvvWR6UTdHKZgzbjepqWaBqF',
            'multi_signature':{  
               'signature':'RNsPhUuPwwtA7NEf4VySCg1Fb2NpwapXrY8d64TLsRHR9rQ5ecGhRd89NTHabh8qEQ8Fs1XWawHjbSZ95RUYsJwx8PEXQcFEDGN3jc5VY31Q5rGg3aeBdFFxgYo11cZjrk6H7Md7N8fjHrKRdxo6TzDKSszJTNM1EAPLzyC6kKCnF9',
               'value':{  
                  'state_root_hash':'DauPq3KR6QFnkaAgcfgoMvvWR6UTdHKZgzbjepqWaBqF',
                  'pool_state_root_hash':'9L5CbxzhsNrZeGSJGVVpsC56JpuS5DGdUqfsFsR1RsFQ',
                  'timestamp':1552395470,
                  'txn_root_hash':'4CowHvnk2Axy2HWcYmT8b88A1Sgk45x7yHAzNnxowN9h',
                  'ledger_id':2
               },
               'participants':[  
                  'Beta',
                  'Gamma',
                  'Delta'
               ]
            }
         },
      }
}

(모든 규칙을 얻기 위한) Request 예:

  {  
      'reqId':575407732,
      'signature':'4AheMmtrfoHuAEtg5VsFPGe1j2w1UYxAvShRmfsCTSHnBDoA5EbmCa2xZzZVQjQGUFbYr65uznu1iUQhW22RNb1X',
      'identifier':'M9BJDuS24bqbJNvBRsoGg3',
      'operation':{  
         'type':'121'
      },
      'protocolVersion':2
  }

(모든 규칙을 얻기 위한) Reply 예:

   {  
      'op':'REPLY',
      'result':{
         'type':'121',
           
         'reqId':575407732,
         'identifier':'M9BJDuS24bqbJNvBRsoGg3'

         'data':[  
              {
                'auth_type': '0', 
                'auth_action': 'EDIT',
                'field' :'services',
                'old_value': [VALIDATOR],
                'new_value': []
                'constraint':{
                      'constraint_id': 'OR',
                      'auth_constraints': [{'constraint_id': 'ROLE', 
                                            'role': '0',
                                            'sig_count': 2, 
                                            'need_to_be_owner': False, 
                                            'metadata': {}}, 
                                           
                                           {'constraint_id': 'ROLE', 
                                            'role': '2',
                                            'sig_count': 1, 
                                            'need_to_be_owner': True, 
                                            'metadata': {}}
                                           ]
                }, 
              },
              {
                'auth_type': '102', 
                'auth_action': 'ADD',
                'field' :'*',
                'new_value': '*'
                'constraint':{
                    'constraint_id': 'ROLE', 
                    'role': '2',
                    'sig_count': 1, 
                    'need_to_be_owner': False, 
                    'metadata': {}
                }, 
              },
              ........
         ],

      }
   }

 

GET_TRANSACTION_AUTHOR_AGREEMENT

트랜잭션 작성자 계약을 가져옵니다.

  • 입력 매개 변수가 설정되지 않은 경우 최신(현재) 트랜잭션 작성자 계약을 가져옵니다.
  • digest가 설정된 경우 그것의 다이제스트를 이용하여 트랜잭션 작성자 계약을 가져옵니다. 다이제스트는 TRANSACTION_AUTHOR_AGREEMENT의 version과 text를 연결하여 계산됩니다.
  • version이 설정된 경우 버전별로 트랜잭션 작성자 계약을 가져옵니다.
  • timestamp가 설정된 경우 지정된 시간(원장 관점)의 최신(현재) 트랜잭션 작성자 계약을 가져옵니다.

모든 입력 매개 변수는 선택 사항이며 상호 배타적입니다.

  • digest (sha256 digest hex string): TRANSACTION_AUTHOR_AGREEMENT의 version과 text를 연결하여 계산한 트랜잭션 작성자 계약의 sha256 해시 다이제스트 16진수 문자열입니다.
  • version (string): 트랜잭션 작성자 계약의 고유한 버전
  • timestamp (integer as POSIX timestamp): 트랜잭션 작성자 계약이 주문된 시간(원장에 기록된 시간).

Request 예:

{
    'operation': {
        'type': '6'
        'version': '1.0',
    },
    
    'identifier': 'L5AD5g65TDQr1PPHHRoiGf',
    'reqId': 1514308188474704,
    'protocolVersion': 2
}

Reply 예:

{
    'op': 'REPLY', 
    'result': {
        'type': '6',
        'identifier': 'L5AD5g65TDQr1PPHHRoiGf',
        'reqId': 1514308188474704,
        
        'version': '1.0',
        
        'seqNo': 10,
        'txnTime': 1514214795,

        'data': {
            "version": "1.0",
            "text": "Please read carefully before writing anything to the ledger",
        },

        'state_proof': {
            'root_hash': '81bGgr7FDSsf4ymdqaWzfnN86TETmkUKH4dj4AqnokrH',
            'proof_nodes': '+QHl+FGAgICg0he/hjc9t/tPFzmCrb2T+nHnN0cRwqPKqZEc3pw2iCaAoAsA80p3oFwfl4dDaKkNI8z8weRsSaS9Y8n3HoardRzxgICAgICAgICAgID4naAgwxDOAEoIq+wUHr5h9jjSAIPDjS7SEG1NvWJbToxVQbh6+Hi4dnsiaWRlbnRpZmllciI6Ikw1QUQ1ZzY1VERRcjFQUEhIUm9pR2YiLCJyb2xlIjpudWxsLCJzZXFObyI6MTAsInR4blRpbWUiOjE1MTQyMTQ3OTUsInZlcmtleSI6In42dWV3Um03MmRXN1pUWFdObUFkUjFtIn348YCAgKDKj6ZIi+Ob9HXBy/CULIerYmmnnK2A6hN1u4ofU2eihKBna5MOCHiaObMfghjsZ8KBSbC6EpTFruD02fuGKlF1q4CAgICgBk8Cpc14mIr78WguSeT7+/rLT8qykKxzI4IO5ZMQwSmAoLsEwI+BkQFBiPsN8F610IjAg3+MVMbBjzugJKDo4NhYoFJ0ln1wq3FTWO0iw1zoUcO3FPjSh5ytvf1jvSxxcmJxoF0Hy14HfsVll8qa9aQ8T740lPFLR431oSefGorqgM5ioK1TJOr6JuvtBNByVMRv+rjhklCp6nkleiyLIq8vZYRcgIA=', 
            'multi_signature': {
                'value': {
                    'timestamp': 1514308168,
                    'ledger_id': 2, 
                    'txn_root_hash': '4Y2DpBPSsgwd5CVE8Z2zZZKS4M6n9AbisT3jYvCYyC2y',
                    'pool_state_root_hash': '9fzzkqU25JbgxycNYwUqKmM3LT8KsvUFkSSowD4pHpoK',
                    'state_root_hash': '81bGgr7FDSsf4ymdqaWzfnN86TETmkUKH4dj4AqnokrH'
                },
                'signature': 'REbtR8NvQy3dDRZLoTtzjHNx9ar65ttzk4jMqikwQiL1sPcHK4JAqrqVmhRLtw6Ed3iKuP4v8tgjA2BEvoyLTX6vB6vN4CqtFLqJaPJqMNZvr9tA5Lm6ZHBeEsH1QQLBYnWSAtXt658PotLUEp38sNxRh21t1zavbYcyV8AmxuVTg3',
                'participants': ['Delta', 'Gamma', 'Alpha']
            }
        },
        
       
    }
}

 

GET_TRANSACTION_AUTHOR_AGREEMENT_AML

트랜잭션 작성자 계약 승인 메커니즘 목록을 가져옵니다.

  • 입력 매개 변수가 설정되지 않은 경우 최신(현재) 트랜잭션 작성자 계약 승인 메커니즘 목록을 가져옵니다.
  • version이 설정된 경우 버전별로 트랜잭션 작성자 계약 승인 메커니즘 목록을 가져옵니다.
  • timestamp가 설정된 경우 지정된 시간(원장 관점)에 최신(현재) 트랜잭션 작성자 계약 승인 메커니즘 목록을 가져옵니다.

모든 입력 매개 변수는 선택 사항이며 상호 배타적입니다.

  • version (string): 트랜잭션 작성자 계약 승인 메커니즘 목록의 고유한 버전
  • timestamp (integer as POSIX timestamp): 트랜잭션 작성자 계약 승인

Request 예:

{
    'operation': {
        'type': '7'
        'version': '1.0',
    },
    
    'identifier': 'L5AD5g65TDQr1PPHHRoiGf',
    'reqId': 1514308188474704,
    'protocolVersion': 2
}

Reply 예:

{
    'op': 'REPLY', 
    'result': {
        'type': '7',
        'identifier': 'L5AD5g65TDQr1PPHHRoiGf',
        'reqId': 1514308188474704,
        
        'version': '1.0',
        
        'seqNo': 10,
        'txnTime': 1514214795,

        'data': {
            "version": "1.0",
            "aml": {
                "EULA": "Included in the EULA for the product being used",
                "Service Agreement": "Included in the agreement with the service provider managing the transaction",
                "Click Agreement": "Agreed through the UI at the time of submission",
                "Session Agreement": "Agreed at wallet instantiation or login"
            },
            "amlContext": "http://aml-context-descr"
        },

        'state_proof': {
            'root_hash': '81bGgr7FDSsf4ymdqaWzfnN86TETmkUKH4dj4AqnokrH',
            'proof_nodes': '+QHl+FGAgICg0he/hjc9t/tPFzmCrb2T+nHnN0cRwqPKqZEc3pw2iCaAoAsA80p3oFwfl4dDaKkNI8z8weRsSaS9Y8n3HoardRzxgICAgICAgICAgID4naAgwxDOAEoIq+wUHr5h9jjSAIPDjS7SEG1NvWJbToxVQbh6+Hi4dnsiaWRlbnRpZmllciI6Ikw1QUQ1ZzY1VERRcjFQUEhIUm9pR2YiLCJyb2xlIjpudWxsLCJzZXFObyI6MTAsInR4blRpbWUiOjE1MTQyMTQ3OTUsInZlcmtleSI6In42dWV3Um03MmRXN1pUWFdObUFkUjFtIn348YCAgKDKj6ZIi+Ob9HXBy/CULIerYmmnnK2A6hN1u4ofU2eihKBna5MOCHiaObMfghjsZ8KBSbC6EpTFruD02fuGKlF1q4CAgICgBk8Cpc14mIr78WguSeT7+/rLT8qykKxzI4IO5ZMQwSmAoLsEwI+BkQFBiPsN8F610IjAg3+MVMbBjzugJKDo4NhYoFJ0ln1wq3FTWO0iw1zoUcO3FPjSh5ytvf1jvSxxcmJxoF0Hy14HfsVll8qa9aQ8T740lPFLR431oSefGorqgM5ioK1TJOr6JuvtBNByVMRv+rjhklCp6nkleiyLIq8vZYRcgIA=', 
            'multi_signature': {
                'value': {
                    'timestamp': 1514308168,
                    'ledger_id': 2, 
                    'txn_root_hash': '4Y2DpBPSsgwd5CVE8Z2zZZKS4M6n9AbisT3jYvCYyC2y',
                    'pool_state_root_hash': '9fzzkqU25JbgxycNYwUqKmM3LT8KsvUFkSSowD4pHpoK',
                    'state_root_hash': '81bGgr7FDSsf4ymdqaWzfnN86TETmkUKH4dj4AqnokrH'
                },
                'signature': 'REbtR8NvQy3dDRZLoTtzjHNx9ar65ttzk4jMqikwQiL1sPcHK4JAqrqVmhRLtw6Ed3iKuP4v8tgjA2BEvoyLTX6vB6vN4CqtFLqJaPJqMNZvr9tA5Lm6ZHBeEsH1QQLBYnWSAtXt658PotLUEp38sNxRh21t1zavbYcyV8AmxuVTg3',
                'participants': ['Delta', 'Gamma', 'Alpha']
            }
        },
        
       
    }
}

 

GET_TXN

시퀀스 번호로 원장에서 트랜잭션을 가져오려는 generic request

  • ledgerId (int enum): 요청된 트랜잭션이 속한 원장의 ID ((Pool=0; Domain=1; Config=2).
  • data (int): 원장에 저장된 요청된 트랜잭션의 시퀀스 번호

Request 예 (seqNo=9인 NYM txn 요청):

{
    'operation': {
        'type': '3',
        'ledgerId': 1,
        'data': 9
    },
    
    'identifier': 'MSjKTWkPLtYoPEaTF1TUDb',
    'reqId': 1514311281279625,
    'protocolVersion': 2
}

Reply 예 (seqNo=9인 NYM txn 요청의 return):

{
    "op": "REPLY", 
    "result": {
        "type": "3",
        "identifier": "MSjKTWkPLtYoPEaTF1TUDb",
        "reqId": 1514311352551755,
       
        "seqNo": 9,

        "data": {
            "ver": 1,
            "txn": {
                "type":"1",
                "protocolVersion":2,
        
                "data": {
                    "ver": 1,
                    "dest":"GEzcdDLhCpGCYRHW82kjHd",
                    "verkey":"~HmUWn928bnFT6Ephf65YXv",
                    "role":101,
                },
        
                "metadata": {
                    "reqId":1513945121191691,
                    "from":"L5AD5g65TDQr1PPHHRoiGf",
                    "digest": "4ba05d9b2c27e52aa8778708fb4b3e5d7001eecd02784d8e311d27b9090d9453",
                    "payloadDigest": "21f0f5c158ed6ad49ff855baf09a2ef9b4ed1a8015ac24bccc2e0106cd905685",
                    "taaAcceptance": {
                        "taaDigest": "6sh15d9b2c27e52aa8778708fb4b3e5d7001eecd02784d8e311d27b9090d9453",
                        "mechanism": "EULA",
                        "time": 1513942017
                     }
                },
            },
            "txnMetadata": {
                "txnTime":1513945121,
                "seqNo": 10,
                "txnId": "N22KY2Dyvmuu2PyyqSFKue|01"
            },
            "reqSignature": {
                "type": "ED25519",
                "values": [{
                    "from": "L5AD5g65TDQr1PPHHRoiGf",
                    "value": "4X3skpoEK2DRgZxQ9PwuEvCJpL8JHdQ8X4HDDFyztgqE15DM2ZnkvrAh9bQY16egVinZTzwHqznmnkaFM4jjyDgd"
                }]
            }
        
            "rootHash": "5ecipNPSztrk6X77fYPdepzFRUvLdqBuSqv4M9Mcv2Vn",
            "auditPath": ["Cdsoz17SVqPodKpe6xmY2ZgJ9UcywFDZTRgWSAYM96iA", "3phchUcMsnKFk2eZmcySAWm2T5rnzZdEypW7A5SKi1Qt"],
        }
        
        "type": "3",
        "reqId": 1514311281279625,
        "identifier": "MSjKTWkPLtYoPEaTF1TUDb",
        "seqNo": 9,
    }
}

 

Action Requests(액션 Request)

POOL_RESTART

"datetime" 필드(Trustee가 보낸)에 지정된 시간에 모든 노드를 자시 시작하는 명령

  • datetime (string): datetime 형식의 재시작 시간. 가능한 빨리 다시 시작하려면 "datetime" 필드 없이 메시지를 보내거나 이 위치에 "0" 또는 ""(빈 문자열) 또는 과거 날짜를 입력하십시오. 재시작은 즉시 수행되며 Reply로 응답을 받을 수 있는 것은 아닙니다.
  • action (enum: start or cancel): Restart를 시작하거나 취소합니다.

Request 예:

{
    "reqId": 98262,
    "signature": "cNAkmqSySHTckJg5rhtdyda3z1fQcV6ZVo1rvcd8mKmm7Fn4hnRChebts1ur7rGPrXeF1Q3B9N7PATYzwQNzdZZ",
    "protocolVersion": 1,
    "identifier": "M9BJDuS24bqbJNvBRsoGg3",
    "operation": {
            "datetime": "2018-03-29T15:38:34.464106+00:00",
            "action": "start",
            "type": "118"
    }
}

Reply 예:

{
    "reqId": 98262,
    "signature": "cNAkmqSySHTckJg5rhtdyda3z1fQcV6ZVo1rvcd8mKmm7Fn4hnRChebts1ur7rGPrXeF1Q3B9N7PATYzwQNzdZZ",
    "protocolVersion": 1,
    "identifier": "M9BJDuS24bqbJNvBRsoGg3",
    "operation": {
            "datetime": "2018-03-29T15:38:34.464106+00:00",
            "action": "start",
            "type": "118"
    }
}

 

VALIDATOR_INFO

명령은 합의(consensus) 없이 모든 연결된 노드에서 정보를 제공합니다.

Request 예:

{
    "reqId": 98262,
    "signature": "cNAkmqSySHTckJg5rhtdyda3z1fQcV6ZVo1rvcd8mKmm7Fn4hnRChebts1ur7rGPrXeF1Q3B9N7PATYzwQNzdZZ",
    "protocolVersion": 1,
    "identifier": "M9BJDuS24bqbJNvBRsoGg3",
    "operation": {
            "datetime": "2018-03-29T15:38:34.464106+00:00",
            "action": "start",
            "type": "118"
    }
}

Reply 예:

{
    'op': 'REPLY',
    'result': {
            'reqId': 83193,
            'data': { <Json with node info> },
            'type': '119',
            'identifier': 'M9BJDuS24bqbJNvBRsoGg3'
    }
}

 

 

반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함