Service

Service module allows you to define, bind, invoke services on the IRIS Hub. Read more about iService.

可用命令

Name Description
define Define a new service
definition Query a service definition
bind Bind a service
binding Query a service binding
bindings Query all bindings of a service definition
set-withdraw-addr Set a withdrawal address for a provider
withdraw-addr Query the withdrawal address of a provider
update-binding Update an existing service binding
disable Disable an available service binding
enable Enable an unavailable service binding
refund-deposit Refund all deposit from a service binding
call Initiate a service call
request Query a request by the request ID
requests Query active requests by the service binding or request context ID
respond Respond to a service request
response Query a response by the request ID
responses Query active responses by the request context ID and batch counter
request-context Query a request context
update Update a request context
pause Pause a running request context
start Start a paused request context
kill Terminate a request context
fees Query the earned fees of a provider
withdraw-fees Withdraw the earned fees of a provider
schema Query the system schema by the schema name
params Query values set as service parameters.

iris tx service define

Define a new service.

iris tx service define [flags]

Flags:

Name, shorthand Default Description Required
--name Service name Yes
--description Service description
--author-description Service author description
--tags Service tags
--schemas Content or file path of service interface schemas Yes

define a service

iris tx service define \
    --name=<service name> \
    --description=<service description> \
    --author-description=<author description>
    --tags=tag1,tag2 \
    --schemas=<schemas content or path/to/schemas.json> \
    --chain-id=irishub \
    --from=<key-name> \
    --fees=0.3iris

Schemas content example

{
    "input": {
        "$schema": "http://json-schema.org/draft-04/schema#",
        "title": "BioIdentify service input body",
        "description": "BioIdentify service input body specification",
        "type": "object",
        "properties": {
            "id": {
                "description": "id",
                "type": "string"
            },
            "name": {
                "description": "name",
                "type": "string"
            },
            "data": {
                "description": "data",
                "type": "string"
            }
        },
        "required": [
            "id",
            "data"
        ]
    },
    "output": {
        "$schema": "http://json-schema.org/draft-04/schema#",
        "title": "BioIdentify service output body",
        "description": "BioIdentify service output body specification",
        "type": "object",
        "properties": {
            "data": {
                "description": "result data",
                "type": "string"
            }
        },
        "required": [
            "data"
        ]
    }
}

iris query service definition

Query a service definition.

iris query service definition [service-name] [flags]

Query a service definition

Query the detailed info of the service definition with the specified service name.

iris query service definition <service name>

iris tx service bind

Bind a service.

iris tx service bind [flags]

Flags:

Name, shorthand Default Description Required
--service-name Service name Yes
--deposit Deposit of the binding Yes
--pricing Pricing content or file path, which is an instance of Irishub Service Pricing JSON Schema Yes
--qos Minimum response time Yes
--options Non-functional requirements options Yes
--provider Provider address, default to the owner

Bind an existing service definition

The deposit needs to satisfy the minimum deposit requirement, which is the maximal one between price * MinDepositMultiple and MinDeposit (MinDepositMultiple and MinDeposit are the system parameters, which can be modified through the governance).

iris tx service bind \
    --service-name=<service name> \
    --deposit=10000iris \
    --pricing=<pricing content or path/to/pricing.json> \
    --qos=50 \
    --options=<non-functional requirements options content or path/to/options.json> \
    --chain-id=irishub \
    --from=<key-name> \
    --fees=0.3iris

Pricing content example

{
    "price": "1iris"
}

iris query service binding

Query a service binding.

iris query service binding <service name> <provider>

iris query service bindings

Query all bindings of a service definition.

iris query service bindings [service-name] [flags]

Query service binding list

iris query service bindings <service name> <owner address>

iris tx service update-binding

Update a service binding.

iris tx service update-binding [service-name] [provider-address] [flags]

Flags:

Name, shorthand Default Description Required
--deposit Deposit added for the binding, not updated if empty
--pricing Pricing content or file path, which is an instance of Irishub Service Pricing JSON Schema, not updated if empty
--qos Minimum response time, not updated if set to 0
--options Non-functional requirements options

Update an existing service binding

The following example updates the service binding with the additional 10 IRIS deposit

iris tx service update-binding <service-name> <provider-address> \
    --deposit=10iris \
    --options=<non-functional requirements options content or path/to/options.json> \
    --pricing='{"price":"1iris"}' \
    --qos=50 \
    --chain-id=<chain-id> \
    --from=<key name> \
    --fees=0.3iris

iris tx service set-withdraw-addr

Set a withdrawal address for a provider.

iris tx service set-withdraw-addr [withdrawal-address] [flags]

iris query service withdraw-addr

Query the withdrawal address of a provider.

iris query service withdraw-addr [provider] [flags]

iris tx service disable

Disable an available service binding.

iris tx service disable [service-name] [provider-address] [flags]

iris tx service enable

Enable an unavailable service binding.

iris tx service enable [service-name] [provider-address] [flags]

Flags:

Name, shorthand Default Description Required
--deposit deposit added for enabling the binding

Enable an unavailable service binding

The following example enables an unavailable service binding with the additional 10 IRIS deposit.

iris tx service enable <service name> <provider-address> --chain-id=irishub --from=<key-name> --fees=0.3iris --deposit=10iris

iris tx service refund-deposit

Refund all deposits from a service binding.

iris tx service refund-deposit [service-name] [provider-address] [flags]

Refund all deposits from an unavailable service binding

Before refunding, you should disable the service binding first.

iris tx service refund-deposit <service name> <provider-address> --chain-id=irishub --from=<key-name> --fees=0.3iris

iris tx service call

Initiate a service call.

iris tx service call [flags]

Flags:

Name, shorthand Default Description Required
--service-name Service name Yes
--providers Provider list to request Yes
--service-fee-cap Maximum service fee to pay for a single request Yes
--data Content or file path of the request input, which is an Input JSON Schema instance Yes
--timeout Request timeout Yes
--repeated false Indicate if the reqeust is repetitive (Temporarily disabled in irishub-v1.0.0, will be activated after a few versions)
--frequency Request frequency when repeated, default to timeout
--total Request count when repeated, -1 means unlimited

Initiate a service invocation request

iris tx service call \
    --service-name=<service name> \
    --providers=<provider list> \
    --service-fee-cap=1iris \
    --data=<request input or path/to/input.json> \
    --timeout=100 \
    --repeated \
    --frequency=150 \
    --total=100 \
    --chain-id=irishub \
    --from=<key name> \
    --fees=0.3iris

Input example

{
    "header": {
        ...
    },
    "body": {
        "id": "1",
        "name": "irisnet",
        "data": "facedata"
    }
}

iris query service request

Query a request by the request ID.

iris query service request [request-id] [flags]

Query a service request

iris query service request <request-id>

TIP

You can retrieve the request-id in [Query request_id through rpc interface](#Query request_id through rpc interface) or [iris query service requests](#iris query service requests).

Query request_id through rpc interface

Query block_results according to block height through rpc interface, find new_batch_request_provider in end_block_events, decode the result with base64 to get request_id.

curl -X POST -d '{"jsonrpc":"2.0","id":1,"method":"block_results","params":["10604"]}' http://localhost:26657

iris query service requests

Query active requests by the service binding or request context ID.

iris query service requests [service-name] [provider] | [request-context-id] [batch-counter] [flags]

Query active requests of a service binding

iris query service requests <service name> <provider>

Query service requests by the request context ID and batch counter

iris query service requests <request-context-id> <batch-counter>

iris tx service respond

Respond to a service request.

iris tx service respond [flags]

Flags:

Name, shorthand Default Description Required
--request-id ID of the request to respond to Yes
--result Content or file path of the response result, which is an instance of Irishub Service Result JSON Schema Yes
--data Content or file path of the response output, which is an Output JSON Schema instance

Respond to a service request

iris tx service respond \
    --request-id=<request-id> \
    --result=<response result or path/to/result.json> \
    --data=<response output or path/to/output.json>
    --chain-id=irishub \
    --from=<key-name> \
    --fees=0.3iris

TIP

You can retrieve the request-id in [Query request_id through rpc interface](#Query request_id through rpc interface) or [iris query service requests](#iris query service requests).

Result example

{
    "code": 200,
    "message": ""
}

Output example

{
    "header": {
        ...
    },
    "body": {
        "data": "userdata"
    }
}

iris query service response

Query a service response.

iris query service response [request-id] [flags]

TIP

You can retrieve the request-id in [Query request_id through rpc interface](#Query request_id through rpc interface) or [iris query service requests](#iris query service requests).

iris query service responses

Query active responses by the request context ID and batch counter.

iris query service responses [request-context-id] [batch-counter] [flags]

Query responses by the request context ID and batch counter

iris query service responses <request-context-id> <batch-counter>

iris query service request-context

Query a request context.

iris query service request-context [request-context-id] [flags]

Query a request context

iris query service request-context <request-context-id>

TIP

You can retrieve the request-context-id in the result of service call

iris tx service update

Update a request context.

iris tx service update [request-context-id] [flags]

Flags:

Name, shorthand Default Description Required
--providers Provider list to request, not updated if empty
--service-fee-cap Maximum service fee to pay for a single request, not updated if empty
--timeout Request timeout, not updated if set to 0
--frequency Request frequency, not updated if set to 0
--total Request count, not updated if set to 0

Update a request context

iris tx service update <request-context-id> \
    --providers=<provider list> \
    --service-fee-cap=1iris \
    --timeout=0 \
    --frequency=150 \
    --total=100 \
    --chain-id=irishub \
    --from=<key name> \
    --fees=0.3iris

iris tx service pause

Pause a running request context.

iris tx service pause [request-context-id] [flags]

Pause a running request context

iris tx service pause <request-context-id>

iris tx service start

Start a paused request context.

iris tx service start [request-context-id] [flags]

Start a paused request context

iris tx service start <request-context-id>

iris tx service kill

Terminate a request context.

iris tx service kill [request-context-id] [flags]

Kill a request context

iris tx service kill <request-context-id>

iris query service fees

Query the earned fees of a provider.

iris query service fees [provider] [flags]

iris tx service withdraw-fees

Withdraw the earned fees of a provider.

iris tx service withdraw-fees [provider-address] [flags]

iris query service schema

Query the system schema by the schema name, only pricing and result allowed.

iris query service schema [schema-name] [flags]

Query the service pricing schema

iris query service schema pricing

Query the response result schema

iris query service schema result

iris query service params

Query values set as service parameters.

iris query service params [flags]