#ifndef __indy__ledger_included__ #define __indy__ledger_included__ #include "indy_mod.h" #include "indy_types.h" typedef indy_error_t (*indyLedgerCustomTransactionParserCb)(const char* reply_from_node, const char* parsed_sp); typedef indy_error_t (*indyLedgerCustomFreeCb)(const char* reply_from_node); #ifdef __cplusplus extern "C" { #endif /// Signs and submits request message to validator pool. /// /// Adds submitter information to passed request json, signs it with submitter /// sign key (see wallet_sign), and sends signed request message /// to validator pool (see write_request). /// /// #Params /// command_handle: command handle to map callback to caller context. /// pool_handle: pool handle (created by open_pool_ledger). /// wallet_handle: wallet handle (created by open_wallet). /// submitter_did: Id of Identity stored in secured Wallet. /// request_json: Request data json. /// cb: Callback that takes command result as parameter. /// /// #Returns /// Request result as json. /// /// #Errors /// Common* /// Wallet* /// Ledger* /// Crypto* extern indy_error_t indy_sign_and_submit_request(indy_handle_t command_handle, indy_handle_t pool_handle, indy_handle_t wallet_handle, const char * submitter_did, const char * request_json, indy_str_cb str ); /// Publishes request message to validator pool (no signing, unlike sign_and_submit_request). /// /// The request is sent to the validator pool as is. It's assumed that it's already prepared. /// /// #Params /// command_handle: command handle to map callback to caller context. /// pool_handle: pool handle (created by open_pool_ledger). /// request_json: Request data json. /// cb: Callback that takes command result as parameter. /// /// #Returns /// Request result as json. /// /// #Errors /// Common* /// Ledger* extern indy_error_t indy_submit_request(indy_handle_t command_handle, indy_handle_t pool_handle, const char * request_json, indy_str_cb str ); /// Send action to particular nodes of validator pool. /// /// The list of requests can be send: /// POOL_RESTART /// GET_VALIDATOR_INFO /// /// The request is sent to the nodes as is. It's assumed that it's already prepared. /// /// #Params /// command_handle: command handle to map callback to caller context. /// pool_handle: pool handle (created by open_pool_ledger). /// request_json: Request data json. /// nodes: (Optional) List of node names to send the request. /// ["Node1", "Node2",...."NodeN"] /// timeout: (Optional) Time to wait respond from nodes (override the default timeout) (in sec). /// Pass -1 to use default timeout /// cb: Callback that takes command result as parameter. /// /// #Returns /// Request result as json. /// /// #Errors /// Common* /// Ledger* extern indy_error_t indy_submit_action(indy_handle_t command_handle, indy_handle_t pool_handle, const char * request_json, const char * nodes, indy_i32_t timeout, indy_str_cb str ); /// Signs request message. /// /// Adds submitter information to passed request json, signs it with submitter /// sign key (see wallet_sign). /// /// #Params /// command_handle: command handle to map callback to caller context. /// wallet_handle: wallet handle (created by open_wallet). /// submitter_did: Id of Identity stored in secured Wallet. /// request_json: Request data json. /// cb: Callback that takes command result as parameter. /// /// #Returns /// Signed request json. /// /// #Errors /// Common* /// Wallet* /// Ledger* /// Crypto* extern indy_error_t indy_sign_request(indy_handle_t command_handle, indy_handle_t wallet_handle, const char * submitter_did, const char * request_json, indy_str_cb str ); /// Multi signs request message. /// /// Adds submitter information to passed request json, signs it with submitter /// sign key (see wallet_sign). /// /// #Params /// command_handle: command handle to map callback to caller context. /// wallet_handle: wallet handle (created by open_wallet). /// submitter_did: Id of Identity stored in secured Wallet. /// request_json: Request data json. /// cb: Callback that takes command result as parameter. /// /// #Returns /// Signed request json. /// /// #Errors /// Common* /// Wallet* /// Ledger* /// Crypto* extern indy_error_t indy_multi_sign_request(indy_handle_t command_handle, indy_handle_t wallet_handle, const char * submitter_did, const char * request_json, indy_str_cb str ); /// Builds a request to get a DDO. /// /// #Params /// command_handle: command handle to map callback to caller context. /// submitter_did: (Optional) DID of the read request sender (if not provided then default Libindy DID will be used). /// target_did: Id of Identity stored in secured Wallet. /// cb: Callback that takes command result as parameter. /// /// #Returns /// Request result as json. /// /// #Errors /// Common* extern indy_error_t indy_build_get_ddo_request(indy_handle_t command_handle, const char * submitter_did, const char * target_did, indy_str_cb str ); /// Builds a NYM request. Request to create a new NYM record for a specific user. /// /// #Params /// command_handle: command handle to map callback to caller context. /// submitter_did: DID of the submitter stored in secured Wallet. /// target_did: Target DID as base58-encoded string for 16 or 32 bit DID value. /// verkey: Target identity verification key as base58-encoded string. /// alias: NYM's alias. /// role: Role of a user NYM record: /// null (common USER) /// TRUSTEE /// STEWARD /// TRUST_ANCHOR /// empty string to reset role /// cb: Callback that takes command result as parameter. /// /// #Returns /// Request result as json. /// /// #Errors /// Common* extern indy_error_t indy_build_nym_request(indy_handle_t command_handle, const char * submitter_did, const char * target_did, const char * verkey, const char * alias, const char * role, indy_str_cb str ); /// Builds an ATTRIB request. Request to add attribute to a NYM record. /// /// #Params /// command_handle: command handle to map callback to caller context. /// submitter_did: (Optional) DID of the read request sender (if not provided then default Libindy DID will be used). /// target_did: Target DID as base58-encoded string for 16 or 32 bit DID value. /// hash: (Optional) Hash of attribute data. /// raw: (Optional) Json, where key is attribute name and value is attribute value. /// enc: (Optional) Encrypted value attribute data. /// cb: Callback that takes command result as parameter. /// /// #Returns /// Request result as json. /// /// #Errors /// Common* extern indy_error_t indy_build_attrib_request(indy_handle_t command_handle, const char * submitter_did, const char * target_did, const char * hash, const char * raw, const char * enc, indy_str_cb str ); /// Builds a GET_ATTRIB request. Request to get information about an Attribute for the specified DID. /// /// #Params /// command_handle: command handle to map callback to caller context. /// submitter_did: (Optional) DID of the read request sender (if not provided then default Libindy DID will be used). /// target_did: Target DID as base58-encoded string for 16 or 32 bit DID value. /// raw: (Optional) Requested attribute name. /// hash: (Optional) Requested attribute hash. /// enc: (Optional) Requested attribute encrypted value. /// cb: Callback that takes command result as parameter. /// /// #Returns /// Request result as json. /// /// #Errors /// Common* extern indy_error_t indy_build_get_attrib_request(indy_handle_t command_handle, const char * submitter_did, const char * target_did, const char * hash, const char * raw, const char * enc, indy_str_cb str ); /// Builds a GET_NYM request. Request to get information about a DID (NYM). /// /// #Params /// command_handle: command handle to map callback to caller context. /// submitter_did:(Optional) DID of the read request sender (if not provided then default Libindy DID will be used). /// target_did: Target DID as base58-encoded string for 16 or 32 bit DID value. /// cb: Callback that takes command result as parameter. /// /// #Returns /// Request result as json. /// /// #Errors /// Common* extern indy_error_t indy_build_get_nym_request(indy_handle_t command_handle, const char * submitter_did, const char * target_did, indy_str_cb str ); /// Builds a SCHEMA request. Request to add Credential's schema. /// /// #Params /// command_handle: command handle to map callback to caller context. /// submitter_did: DID of the submitter stored in secured Wallet. /// data: Credential schema. /// { /// id: identifier of schema /// attrNames: array of attribute name strings /// name: Schema's name string /// version: Schema's version string, /// ver: Version of the Schema json /// } /// cb: Callback that takes command result as parameter. /// /// #Returns /// Request result as json. /// /// #Errors /// Common* extern indy_error_t indy_build_schema_request(indy_handle_t command_handle, const char * submitter_did, const char * data, indy_str_cb str ); /// Builds a GET_SCHEMA request. Request to get Credential's Schema. /// /// #Params /// command_handle: command handle to map callback to caller context. /// submitter_did: (Optional) DID of the read request sender (if not provided then default Libindy DID will be used). /// id: Schema ID in ledger /// cb: Callback that takes command result as parameter. /// /// #Returns /// Request result as json. /// /// #Errors /// Common* extern indy_error_t indy_build_get_schema_request(indy_handle_t command_handle, const char * submitter_did, const char * id, indy_str_cb str ); /// Parse a GET_SCHEMA response to get Schema in the format compatible with Anoncreds API. /// /// #Params /// command_handle: command handle to map callback to caller context. /// get_schema_response: response of GET_SCHEMA request. /// cb: Callback that takes command result as parameter. /// /// #Returns /// Schema Id and Schema json. /// { /// id: identifier of schema /// attrNames: array of attribute name strings /// name: Schema's name string /// version: Schema's version string /// ver: Version of the Schema json /// } /// /// #Errors /// Common* extern indy_error_t indy_parse_get_schema_response(indy_handle_t command_handle, const char * get_schema_response, indy_str_str_cb str ); /// Builds an CRED_DEF request. Request to add a Credential Definition (in particular, public key), /// that Issuer creates for a particular Credential Schema. /// /// #Params /// command_handle: command handle to map callback to caller context. /// submitter_did: DID of the submitter stored in secured Wallet. /// data: credential definition json /// { /// id: string - identifier of credential definition /// schemaId: string - identifier of stored in ledger schema /// type: string - type of the credential definition. CL is the only supported type now. /// tag: string - allows to distinct between credential definitions for the same issuer and schema /// value: Dictionary with Credential Definition's data: { /// primary: primary credential public key, /// Optional: revocation credential public key /// }, /// ver: Version of the CredDef json /// } /// cb: Callback that takes command result as parameter. /// /// #Returns /// Request result as json. /// /// #Errors /// Common* extern indy_error_t indy_build_cred_def_request(indy_handle_t command_handle, const char * submitter_did, const char * data, indy_str_cb str ); /// Builds a GET_CRED_DEF request. Request to get a Credential Definition (in particular, public key), /// that Issuer creates for a particular Credential Schema. /// /// #Params /// command_handle: command handle to map callback to caller context. /// submitter_did: (Optional) DID of the read request sender (if not provided then default Libindy DID will be used). /// id: Credential Definition ID in ledger. /// cb: Callback that takes command result as parameter. /// /// #Returns /// Request result as json. /// /// #Errors /// Common* extern indy_error_t indy_build_get_cred_def_request(indy_handle_t command_handle, const char * submitter_did, const char * id, indy_str_cb str ); /// Parse a GET_CRED_DEF response to get Credential Definition in the format compatible with Anoncreds API. /// /// #Params /// command_handle: command handle to map callback to caller context. /// get_cred_def_response: response of GET_CRED_DEF request. /// cb: Callback that takes command result as parameter. /// /// #Returns /// Credential Definition Id and Credential Definition json. /// { /// id: string - identifier of credential definition /// schemaId: string - identifier of stored in ledger schema /// type: string - type of the credential definition. CL is the only supported type now. /// tag: string - allows to distinct between credential definitions for the same issuer and schema /// value: Dictionary with Credential Definition's data: { /// primary: primary credential public key, /// Optional: revocation credential public key /// }, /// ver: Version of the Credential Definition json /// } /// /// #Errors /// Common* extern indy_error_t indy_parse_get_cred_def_response(indy_handle_t command_handle, const char * get_cred_def_response, indy_str_str_cb str ); /// Builds a NODE request. Request to add a new node to the pool, or updates existing in the pool. /// /// #Params /// command_handle: command handle to map callback to caller context. /// submitter_did: DID of the submitter stored in secured Wallet. /// target_did: Target Node's DID. It differs from submitter_did field. /// data: Data associated with the Node: { /// alias: string - Node's alias /// blskey: string - (Optional) BLS multi-signature key as base58-encoded string. /// blskey_pop: string - (Optional) BLS key proof of possession as base58-encoded string. /// client_ip: string - (Optional) Node's client listener IP address. /// client_port: string - (Optional) Node's client listener port. /// node_ip: string - (Optional) The IP address other Nodes use to communicate with this Node. /// node_port: string - (Optional) The port other Nodes use to communicate with this Node. /// services: array - (Optional) The service of the Node. VALIDATOR is the only supported one now. /// } /// cb: Callback that takes command result as parameter. /// /// #Returns /// Request result as json. /// /// #Errors /// Common* extern indy_error_t indy_build_node_request(indy_handle_t command_handle, const char * submitter_did, const char * target_did, const char * data, indy_str_cb str ); /// Builds a GET_VALIDATOR_INFO request. /// /// #Params /// command_handle: command handle to map callback to caller context. /// submitter_did: Id of Identity stored in secured Wallet. /// cb: Callback that takes command result as parameter. /// /// #Returns /// Request result as json. /// /// #Errors /// Common* extern indy_error_t indy_build_get_validator_info_request(indy_handle_t command_handle, const char * submitter_did, indy_str_cb str ); /// Builds a GET_TXN request. Request to get any transaction by its seq_no. /// /// #Params /// command_handle: command handle to map callback to caller context. /// submitter_did: (Optional) DID of the read request sender (if not provided then default Libindy DID will be used). /// ledger_type: (Optional) type of the ledger the requested transaction belongs to: /// DOMAIN - used default, /// POOL, /// CONFIG /// any number /// seq_no: seq_no of transaction in ledger. /// cb: Callback that takes command result as parameter. /// /// #Returns /// Request result as json. /// /// #Errors /// Common* extern indy_error_t indy_build_get_txn_request(indy_handle_t command_handle, const char * submitter_did, const char * ledger_type, indy_i32_t data, indy_str_cb str ); /// Builds a POOL_CONFIG request. Request to change Pool's configuration. /// /// #Params /// command_handle: command handle to map callback to caller context. /// submitter_did: DID of the submitter stored in secured Wallet. /// writes: Whether any write requests can be processed by the pool /// (if false, then pool goes to read-only state). True by default. /// force: Whether we should apply transaction (for example, move pool to read-only state) /// without waiting for consensus of this transaction. /// cb: Callback that takes command result as parameter. /// /// #Returns /// Request result as json. /// /// #Errors /// Common* extern indy_error_t indy_build_pool_config_request(indy_handle_t command_handle, const char * submitter_did, indy_bool_t writes, indy_bool_t force, indy_str_cb str ); /// Builds a POOL_RESTART request. /// /// #Params /// command_handle: command handle to map callback to caller context. /// submitter_did: Id of Identity stored in secured Wallet. /// action: Either start or cancel /// datetime: /// cb: Callback that takes command result as parameter. /// /// #Returns /// Request result as json. /// /// #Errors /// Common* extern indy_error_t indy_build_pool_restart_request(indy_handle_t command_handle, const char * submitter_did, const char * action, const char * datetime, indy_str_cb str ); /// Builds a POOL_UPGRADE request. Request to upgrade the Pool (sent by Trustee). /// It upgrades the specified Nodes (either all nodes in the Pool, or some specific ones). /// /// #Params /// command_handle: command handle to map callback to caller context. /// submitter_did: DID of the submitter stored in secured Wallet. /// name: Human-readable name for the upgrade. /// version: The version of indy-node package we perform upgrade to. /// Must be greater than existing one (or equal if reinstall flag is True). /// action: Either start or cancel. /// sha256: sha256 hash of the package. /// timeout: (Optional) Limits upgrade time on each Node. /// schedule: (Optional) Schedule of when to perform upgrade on each node. Map Node DIDs to upgrade time. /// justification: (Optional) justification string for this particular Upgrade. /// reinstall: Whether it's allowed to re-install the same version. False by default. /// force: Whether we should apply transaction (schedule Upgrade) without waiting /// for consensus of this transaction. /// package: (Optional) Package to be upgraded. /// cb: Callback that takes command result as parameter. /// /// #Returns /// Request result as json. /// /// #Errors /// Common* extern indy_error_t indy_build_pool_upgrade_request(indy_handle_t command_handle, const char * submitter_did, const char * name, const char * version, const char * action, const char * sha256, indy_i32_t timeout, const char * schedule, const char * justification, indy_bool_t reinstall, indy_bool_t force, const char * package_, indy_str_cb str ); /// Builds a REVOC_REG_DEF request. Request to add the definition of revocation registry /// to an exists credential definition. /// /// #Params /// command_handle: command handle to map callback to caller context. /// submitter_did: DID of the submitter stored in secured Wallet. /// data: Revocation Registry data: /// { /// "id": string - ID of the Revocation Registry, /// "revocDefType": string - Revocation Registry type (only CL_ACCUM is supported for now), /// "tag": string - Unique descriptive ID of the Registry, /// "credDefId": string - ID of the corresponding CredentialDefinition, /// "value": Registry-specific data { /// "issuanceType": string - Type of Issuance(ISSUANCE_BY_DEFAULT or ISSUANCE_ON_DEMAND), /// "maxCredNum": number - Maximum number of credentials the Registry can serve. /// "tailsHash": string - Hash of tails. /// "tailsLocation": string - Location of tails file. /// "publicKeys": - Registry's public key. /// }, /// "ver": string - version of revocation registry definition json. /// } /// cb: Callback that takes command result as parameter. /// /// #Returns /// Request result as json. /// /// #Errors /// Common* extern indy_error_t indy_build_revoc_reg_def_request(indy_handle_t command_handle, const char * submitter_did, const char * data, indy_str_cb str ); /// Builds a GET_REVOC_REG_DEF request. Request to get a revocation registry definition, /// that Issuer creates for a particular Credential Definition. /// /// #Params /// command_handle: command handle to map callback to caller context. /// submitter_did: (Optional) DID of the read request sender (if not provided then default Libindy DID will be used). /// id: ID of Revocation Registry Definition in ledger. /// cb: Callback that takes command result as parameter. /// /// #Returns /// Request result as json. /// /// #Errors /// Common* extern indy_error_t indy_build_get_revoc_reg_def_request(indy_handle_t command_handle, const char * submitter_did, const char * id, indy_str_cb str ); /// Parse a GET_REVOC_REG_DEF response to get Revocation Registry Definition in the format /// compatible with Anoncreds API. /// /// #Params /// command_handle: command handle to map callback to caller context. /// get_revoc_reg_def_response: response of GET_REVOC_REG_DEF request. /// cb: Callback that takes command result as parameter. /// /// #Returns /// Revocation Registry Definition Id and Revocation Registry Definition json. /// { /// "id": string - ID of the Revocation Registry, /// "revocDefType": string - Revocation Registry type (only CL_ACCUM is supported for now), /// "tag": string - Unique descriptive ID of the Registry, /// "credDefId": string - ID of the corresponding CredentialDefinition, /// "value": Registry-specific data { /// "issuanceType": string - Type of Issuance(ISSUANCE_BY_DEFAULT or ISSUANCE_ON_DEMAND), /// "maxCredNum": number - Maximum number of credentials the Registry can serve. /// "tailsHash": string - Hash of tails. /// "tailsLocation": string - Location of tails file. /// "publicKeys": - Registry's public key. /// }, /// "ver": string - version of revocation registry definition json. /// } /// /// #Errors /// Common* extern indy_error_t indy_parse_get_revoc_reg_def_response(indy_handle_t command_handle, const char * get_revoc_ref_def_response, indy_str_str_cb str ); /// Builds a REVOC_REG_ENTRY request. Request to add the RevocReg entry containing /// the new accumulator value and issued/revoked indices. /// This is just a delta of indices, not the whole list. /// So, it can be sent each time a new credential is issued/revoked. /// /// #Params /// command_handle: command handle to map callback to caller context. /// submitter_did: DID of the submitter stored in secured Wallet. /// revoc_reg_def_id: ID of the corresponding RevocRegDef. /// rev_def_type: Revocation Registry type (only CL_ACCUM is supported for now). /// value: Registry-specific data: { /// value: { /// prevAccum: string - previous accumulator value. /// accum: string - current accumulator value. /// issued: array - an array of issued indices. /// revoked: array an array of revoked indices. /// }, /// ver: string - version revocation registry entry json /// /// } /// cb: Callback that takes command result as parameter. /// /// #Returns /// Request result as json. /// /// #Errors /// Common* extern indy_error_t indy_build_revoc_reg_entry_request(indy_handle_t command_handle, const char * submitter_did, const char * revoc_reg_def_id, const char * rev_def_type, const char * value, indy_str_cb str ); /// Builds a GET_REVOC_REG request. Request to get the accumulated state of the Revocation Registry /// by ID. The state is defined by the given timestamp. /// /// #Params /// command_handle: command handle to map callback to caller context. /// submitter_did: (Optional) DID of the read request sender (if not provided then default Libindy DID will be used). /// revoc_reg_def_id: ID of the corresponding Revocation Registry Definition in ledger. /// timestamp: Requested time represented as a total number of seconds from Unix Epoch /// cb: Callback that takes command result as parameter. /// /// #Returns /// Request result as json. /// /// #Errors /// Common* extern indy_error_t indy_build_get_revoc_reg_request(indy_handle_t command_handle, const char * submitter_did, const char * revoc_reg_def_id, long long timestamp, indy_str_cb str ); /// Parse a GET_REVOC_REG response to get Revocation Registry in the format compatible with Anoncreds API. /// /// #Params /// command_handle: command handle to map callback to caller context. /// get_revoc_reg_response: response of GET_REVOC_REG request. /// cb: Callback that takes command result as parameter. /// /// #Returns /// Revocation Registry Definition Id, Revocation Registry json and Timestamp. /// { /// "value": Registry-specific data { /// "accum": string - current accumulator value /// }, /// "ver": string - version revocation registry json /// } /// /// #Errors /// Common* extern indy_error_t indy_parse_get_revoc_reg_response(indy_handle_t command_handle, const char * get_revoc_reg_response, indy_str_str_long_cb cb ); /// Builds a GET_REVOC_REG_DELTA request. Request to get the delta of the accumulated state of the Revocation Registry. /// The Delta is defined by from and to timestamp fields. /// If from is not specified, then the whole state till to will be returned. /// /// #Params /// command_handle: command handle to map callback to caller context. /// submitter_did: (Optional) DID of the read request sender (if not provided then default Libindy DID will be used). /// revoc_reg_def_id: ID of the corresponding Revocation Registry Definition in ledger. /// from: Requested time represented as a total number of seconds from Unix Epoch /// to: Requested time represented as a total number of seconds from Unix Epoch /// cb: Callback that takes command result as parameter. /// /// #Returns /// Request result as json. /// /// #Errors /// Common* extern indy_error_t indy_build_get_revoc_reg_delta_request(indy_handle_t command_handle, const char * submitter_did, const char * revoc_reg_def_id, long long from, long long to, indy_str_cb cb ); /// Parse a GET_REVOC_REG_DELTA response to get Revocation Registry Delta in the format compatible with Anoncreds API. /// /// #Params /// command_handle: command handle to map callback to caller context. /// get_revoc_reg_response: response of GET_REVOC_REG_DELTA request. /// cb: Callback that takes command result as parameter. /// /// #Returns /// Revocation Registry Definition Id, Revocation Registry Delta json and Timestamp. /// { /// "value": Registry-specific data { /// prevAccum: string - previous accumulator value. /// accum: string - current accumulator value. /// issued: array - an array of issued indices. /// revoked: array an array of revoked indices. /// }, /// "ver": string - version revocation registry delta json /// } /// /// #Errors /// Common* extern indy_error_t indy_parse_get_revoc_reg_delta_response(indy_handle_t command_handle, const char * get_revoc_reg_delta_response, indy_str_str_long_cb cb ); /// Register callbacks (see type description for `CustomTransactionParser` and `CustomFree` /// /// # params /// command_handle: command handle to map callback to caller context. /// txn_type: type of transaction to apply `parse` callback. /// parse: required callback to parse reply for state proof. /// free: required callback to deallocate memory. /// cb: Callback that takes command result as parameter. /// /// # returns /// Status of callbacks registration. /// /// # errors /// Common* extern indy_error_t indy_register_transaction_parser_for_sp(indy_handle_t command_handle, const char * txn_type, indyLedgerCustomTransactionParserCb parse_fn, indyLedgerCustomFreeCb free_rn, indy_empty_cb cb ); #ifdef __cplusplus } #endif #endif