diff --git a/README.md b/README.md index c6cb8b54..eb2d2b7f 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,34 @@ -This repository contains documentation and artifacts defining the architecture for the Golem Project. +# Golem Architecture +This repository contains documentation and artifacts defining the protocol and architecture for the Golem Project. + + +This repository contains specification on protocol level and should be baseline for +future implementation. That means that implementation details of [yagna](https://github.com/golemfactory/yagna) +or SDKs should be documented in corresponding repositories, not here. + +## Content + +### [Daemon REST API](https://golemfactory.github.io/ya-client/) + +REST API specifications (OpenAPI, yaml) are maintained in [repository](https://github.com/golemfactory/ya-client/tree/master/specs). +Documentation is generated [here](https://golemfactory.github.io/ya-client/). +Read this documentation if you need to interact with daemon directly without using SDKs. + +### [Golem market protocol properties standards](./standards/README.md) + +Describes market protocol properties hierarchy and protocol design conventions. +Read if you are looking for meaning of specific properties. + +### [Features specification](./specs/README.md) + +Specification of Golem features. This directory contains unified description of protocol. +Read here if you want to know how certain features work, or you need to implement interactions +between Nodes on SDK on daemon level. + +### [Golem Amendment Proposals](./gaps/Readme.md) (GAPs) + +Process of proposing and discussing changes to Golem protocol. +Read this chapter if you want to observe progressive development of the protocol and motivations +behind design decisions. diff --git a/gaps/Readme.md b/gaps/Readme.md new file mode 100644 index 00000000..5c6c1c0f --- /dev/null +++ b/gaps/Readme.md @@ -0,0 +1,19 @@ +# Golem Amendment Proposals (GAPs) + +## List of approved GAPs + + +| Link | Description | Category | +|------------------------------------------------------------------------------|-------------------------|-------------------| +| [GAP-1](./gap-1_gap_process/gap-1_gap_process.md) | GAP process | Internal process | +| [GAP-3](./gap-3_mid_agreement_payments/gap-3_mid_agreement_payments.md) | Mid-Agreement payments | Payments | +| [GAP-4](./gap-4_comp_manifest/gap-4_comp_manifest.md) | Computation Manifest | Provider security | +| [GAP-5](./gap-5_payload_manifest/gap-5_payload_manifest.md) | Payload Manifest | Provider security | +| [GAP-6](./gap-6_tech_council_process/gap-6_tech_council_process.md) | Tech Council process | Internal process | +| [GAP-16](./gap-16_golem_deploy/gap-16_golem_deploy.md) | Golem deploy | | +| [GAP-17](./gap-17_offline_requestor_model/gap-17_offline_requestor_model.md) | Offline Requestor model | | +| [GAP-23](./gap-23_inbound_network_proxy/gap-23_inbound_network_proxy.md) | Inbound network proxy | | +| [GAP-25](./gap-25_golem_certificates/gap-25_golem_certificates.md) | Golem certificates | Provider security | +| [GAP-31](./gap-31_node_descriptor/gap-31_node_descriptor.md) | Node descriptor | Provider security | +| [GAP-32](./gap-32_experimental_features/gap-32_experimental_features.md) | Experimental features | Internal process | +| [GAP-35](./gap-35_gpu_pci_capability/gap-35_gpu_pci_capability.md) | GPU pci capability | | diff --git a/specs/README.md b/specs/README.md index f00d2053..06e0809a 100644 --- a/specs/README.md +++ b/specs/README.md @@ -1 +1,15 @@ -REST API specifications (OpenAPI, yaml) are maintained in https://github.com/golemfactory/ya-client/tree/master/specs . +# Specifications + +## [Capabilities](./capabilities.md) + +List of Golem capabilities. + +The Golem specification outlines a range of features that Golem Nodes have the option to implement. However, each implementation +retains the autonomy to select which features to incorporate. Capabilities provide the most detailed level at which decisions +can be made regarding which functionalities are included. + +## Features + +### Execution + +- [ExeUnit command progress reporting](./command-progress.md) \ No newline at end of file diff --git a/specs/capabilities.md b/specs/capabilities.md index 19c8bdc3..4c6a298c 100644 --- a/specs/capabilities.md +++ b/specs/capabilities.md @@ -1,7 +1,9 @@ # Golem Capability List -| Capability | Yagna package version | Backwards-compatible? | Description | -|-------------------------------|-----------------------|-----------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| Multi-Activity Agreement | 0.5.0 | Yes | Negotiate ability to create multiple activities under single Agreement. Use (which?) property in Demand/Offer to indicate node's support for Multi-Activity. If counterparty does not support Multi-Activity, the node falls back to single Activity per Agreement behaviour. | -| Restart Proposal Negotiations | 0.7.0 | Yes | Agent is allowed to restart negotiations, by sending `Counter Proposal`, after he rejected Proposal at some point. Counter-party will receive regular `ProposalEvent` in this case. Only Agent rejecting Proposal has initiative in restarting negotiations, rejected Agent can only wait for this to happen. To indicate, that Proposal rejection isn't final and negotiations can be restarted later, Agent can set `golem.proposal.rejection.is-final` (bool) field in `Reason` structure. If this value is set to false, Agent can free any state related to this negotiation. The same field can be set in `Reason` sent in `Reject Agreement` operation. Requestor can send new counter Proposal after some period of time or propose the same Agreement for the second time. (No change to specification) | -| Payment version protocol | 0.15.0 | No | [Payment protocol version](./payment_version.md) (`golem.com.payment.protocol.version`) shows what payment capabilities each node implements. New payment features require higher version. | + +| Capability | Backwards-compatible? | Description | Property | +|-------------------------------|-----------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------| +| Multi-Activity Agreement | Yes | Negotiate ability to create multiple activities under single Agreement. Use `golem.srv.caps.multi-activity` property in Demand/Offer to indicate node's support for Multi-Activity. If counterparty does not support Multi-Activity, the node falls back to single Activity per Agreement behaviour. | `golem.srv.caps.multi-activity` | +| Restart Proposal Negotiations | Yes | Agent is allowed to restart negotiations, by sending `Counter Proposal`, after he rejected Proposal at some point. Counter-party will receive regular `ProposalEvent` in this case. Only Agent rejecting Proposal has initiative in restarting negotiations, rejected Agent can only wait for this to happen. To indicate, that Proposal rejection isn't final and negotiations can be restarted later, Agent can set `golem.proposal.rejection.is-final` (bool) field in `Reason` structure. If this value is set to false, Agent can free any state related to this negotiation. The same field can be set in `Reason` sent in `Reject Agreement` operation. Requestor can send new counter Proposal after some period of time or propose the same Agreement for the second time. (No change to specification) | | +| Command progress reporting | Yes | ExeUnit can report progress of executed commands. [Specification](./command-progress.md) | `golem.activity.caps.transfer.report-progress` `golem.activity.caps.deploy.report-progress` | +| Payment version protocol | No | [Payment protocol version](./payment_version.md) (`golem.com.payment.protocol.version`) shows what payment capabilities each node implements. New payment features require higher version. | `golem.com.payment.protocol.version` | diff --git a/specs/command-progress.md b/specs/command-progress.md new file mode 100644 index 00000000..520c9c89 --- /dev/null +++ b/specs/command-progress.md @@ -0,0 +1,82 @@ +# Command progress reporting + +Downloading large images and files poses problem for Requestor controlling ExeUnit. +Since he doesn't have any information about Provider's internet bandwidth, there is no +way to estimate download time. Slow internet connection is indistinguishable from Provider +that just doesn't work and is unable to finish task. This results in wasted resources and +non-optimal Requestor behavior. + + +This specification describes generic mechanisms allowing to report progress of different +commands from ExeUnit to Reqeustors. Moreover, it describes current implementation of ExeUnit. + +## Specification + +### Capabilities + +ExeUnit supporting progress reporting should put following properties in the Offer: +- `golem.activity.caps.transfer.report-progress` - if he can report `transfer` command progress +- `golem.activity.caps.deploy.report-progress` - if he can report `deploy` command progress + +To support progress for any other command, specification should be extended with new properties. +Current ExeUnit implementation supports only these 2 commands. + +### Progress parameters + +To enable progress events Requestor agent has to attach progress parameters to [ExeScriptCommand](https://golemfactory.github.io/ya-client/?urls.primaryName=Activity%20API#model-RunCommand). +Example `deploy` and `transfer` command: +```json +[ + { + "deploy": { + "progress" : { "updateInterval" : "300ms", "updateStep" : null } + } + }, + { + "transfer": { + "from": "http://34.244.4.185:8000/LICENSE", + "to": "container:/input/file_in", + "progress" : { "updateInterval" : null, "updateStep" : 1048576 } + } + } +] +``` + +`ProgressArgs` structure is described [here](https://golemfactory.github.io/ya-client/index.html?urls.primaryName=Activity%20API#model-ProgressArgs). + + +### Listening to events + +Events will be available on [getStreamingBatchResults](https://golemfactory.github.io/ya-client/index.html?urls.primaryName=Activity%20API#/requestor_control/getExecBatchResults) endpoint (with `text/event-stream` accept header). +Event structure is defined [here](https://golemfactory.github.io/ya-client/index.html?urls.primaryName=Activity%20API#model-RuntimeEventKindProgress). + +Example: +```json +{ + "batch_id": "5c9a8f0e13dd49edb7fa570a10b1b14b", + "index": 0, + "timestamp": "2024-02-09T15:12:07.540318580", + "kind": { + "progress": { + "step": [ + 0, + 1 + ], + "message": "Transfer retried", + "progress": [ + 60, + 1024 + ], + "unit": "Bytes" + } + } +} +``` + +You must check specific ExeUnit documentation to know implementation details not covered +by this specification. + +## List of supporting ExeUnits + +- [ya-exe-unit](https://github.com/golemfactory/yagna/blob/master/docs/provider/exe-unit/command-progress.md) (`deploy` and `transfer` commands) +- [ya-runtime-ai](https://github.com/golemfactory/ya-runtime-ai) (only `deploy` command) diff --git a/standards/0-commons/golem/activity/caps.md b/standards/0-commons/golem/activity/caps.md index 4b5c88d6..d961613f 100644 --- a/standards/0-commons/golem/activity/caps.md +++ b/standards/0-commons/golem/activity/caps.md @@ -26,3 +26,17 @@ Indicates the data transmission protocols available for TRANSFER operation on th ### **Examples** * `golem.activity.caps.transfer.protocol:List=["https"]` - Declares availability of HTTPS protocol for data transfer * `golem.activity.caps.transfer.protocol=["http","https","gftp"]` - Declares availability of HTTP, HTTPS and "GFTP" protocols for file transfer + +## `golem.activity.caps.transfer.report-progress : bool [Fact]` + +### Describes: Offer + +Indicates that ExeUnit is capable of sending `transfer` command progress events according to protocol +described [here](https://github.com/golemfactory/yagna/blob/master/docs/provider/exe-unit/command-progress.md). + +## `golem.activity.caps.deploy.report-progress : bool [Fact]` + +### Describes: Offer + +Indicates that ExeUnit is capable of sending `deploy` command progress events according to protocol +described [here](https://github.com/golemfactory/yagna/blob/master/docs/provider/exe-unit/command-progress.md). diff --git a/standards/1-node/node/geo.md b/standards/1-node/node/geo.md index 728273ca..dabb417d 100644 --- a/standards/1-node/node/geo.md +++ b/standards/1-node/node/geo.md @@ -1,4 +1,8 @@ # Golem Identity Properties - Geography + +> [!NOTE] +> Unused + Namespace defining location/geography aspects of a Golem node. ## Common Properties diff --git a/standards/2-service/srv/comp.md b/standards/2-service/srv/comp.md index e7803e4e..37ad03f2 100644 --- a/standards/2-service/srv/comp.md +++ b/standards/2-service/srv/comp.md @@ -1,6 +1,9 @@ # Computation Platform properties Generic properties describing the Computation Platform aspects. +> [!NOTE] +> Unused + ## Common Properties (Not applicable) diff --git a/standards/README.md b/standards/README.md index e22e1e28..f839919f 100644 --- a/standards/README.md +++ b/standards/README.md @@ -29,6 +29,11 @@ The Golem Standards repository consists of following sections/categories: * [2-service](2-service) - A collection of namespaces containing properties which describe a Golem service or resource. A hierarchy of different **categories of services/resources** is defined. * [3-commercial](3-commercial) - A collection of namespaces containing properties which describe commercial aspects of Golem ecosystem. All properties referring to **pricing**, **payments** or **licenses** are defined here. +### Standard properties - Cheat sheet + +List fo Golem Factory supported properties: +[Cheat sheet](cheat_sheet.md) + ## Generic conventions ### ["Fact" vs "Negotiable" properties](#negotiable-properties) @@ -59,5 +64,3 @@ There are a couple of reasons for the `Negotiable` property convention: Properties (and usage conters) marked as `Deprecated` are still supported in the current version of the Standard, but will be removed in one of subsequent versions of the Standard. The deprecation rules as indicated in the [Golem Compatibility Policy](https://handbook.golem.network/see-also/compatibility-policy#deprecation-policy) shall be followed. -## Standard properties - Cheat sheet -[Cheat sheet](cheat_sheet.md) diff --git a/standards/cheat_sheet.md b/standards/cheat_sheet.md index 444ee388..2777c0a9 100644 --- a/standards/cheat_sheet.md +++ b/standards/cheat_sheet.md @@ -40,10 +40,12 @@ Namespace that describes Activity API capabilities, which can be perceived as "s ### Properties -| Property | Type | Applies to | Category | Description | -|---|---|---|---|---| -|**`golem.activity.caps.transfer.protocol`**|`List[String]`|Offer||Indicates the data transmission protocols available for TRANSFER operation on this Provider/ExeUnit. | ---- + +| Property | Type | Applies to | Category | Description | +|----------------------------------------------------|----------------|--------------|----------|------------------------------------------------------------------------------------------------------| +| **`golem.activity.caps.transfer.protocol`** | `List[String]` | Offer | | Indicates the data transmission protocols available for TRANSFER operation on this Provider/ExeUnit. | +| **`golem.activity.caps.transfer.report-progress`** | `Boolean` | Demand/Offer | | ExeUnit can report progress of executed commands. [Specification](./command-progress.md) | +| **`golem.activity.caps.deploy.report-progress`** | `Boolean` | Demand/Offer | | ExeUnit can report progress of executed commands. [Specification](./command-progress.md) | ## [`golem.inf.cpu`](0-commons/golem/inf/cpu.md) @@ -51,13 +53,18 @@ Specifications of CPU computing power assigned to a service. ### Properties -| Property | Type | Applies to | Category | Description | -|---|---|---|---|---| -|**`golem.inf.cpu.architecture`**|`String`|Offer||CPU architecture. | -|**`golem.inf.cpu.cores`**|`Number (int32)`|Offer||Total number of CPU cores assigned to service. It is a sum of CPU cores possibly from multiple CPUs. | -|**`golem.inf.cpu.threads`**|`Number (int32)`|Offer||Total number of CPU threads assigned to service. It is a sum of CPU threads possibly from multiple CPUs and cores. | -|**`golem.inf.cpu.capabilities`**|`List[String]`|Offer||CPU capability flags. For x86 architectures this property is populated with CPU features as returned by CPUID instruction. For full list, see here: https://github.com/golemfactory/ya-runtime-vm/blob/master/runtime/src/cpu.rs#L59 | ---- + +| Property | Type | Applies to | Category | Description | +|----------------------------------|------------------|------------|----------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| **`golem.inf.cpu.architecture`** | `String` | Offer | | CPU architecture. | +| **`golem.inf.cpu.cores`** | `Number (int32)` | Offer | | Total number of CPU cores assigned to service. It is a sum of CPU cores possibly from multiple CPUs. | +| **`golem.inf.cpu.threads`** | `Number (int32)` | Offer | | Total number of CPU threads assigned to service. It is a sum of CPU threads possibly from multiple CPUs and cores. | +| **`golem.inf.cpu.capabilities`** | `List[String]` | Offer | | CPU capability flags. For x86 architectures this property is populated with CPU features as returned by CPUID instruction. For full list, see here: https://github.com/golemfactory/ya-runtime-vm/blob/master/runtime/src/cpu.rs#L59 | +| **`golem.inf.cpu.brand`** | `String` | Offer | | | +| **`golem.inf.cpu.model`** | `String` | Offer | | | +| **`golem.inf.cpu.vendor`** | `String` | Offer | | | + + ## [`golem.inf.mem`](0-commons/golem/inf/mem.md) @@ -65,10 +72,11 @@ Specifications of operating memory assigned to a service. ### Properties -| Property | Type | Applies to | Category | Description | -|---|---|---|---|---| -|**`golem.inf.mem.gib`**|`Number (float)`|Offer||Amount of RAM available (in GiB). | ---- + +| Property | Type | Applies to | Category | Description | +|-------------------------|------------------|------------|----------|-----------------------------------| +| **`golem.inf.mem.gib`** | `Number (float)` | Offer | | Amount of RAM available (in GiB). | + ## [`golem.inf.storage`](0-commons/golem/inf/storage.md) @@ -76,10 +84,11 @@ Properties which describe storage properties of Golem service (hardware paramete ### Properties -| Property | Type | Applies to | Category | Description | -|---|---|---|---|---| -|**`golem.inf.storage.gib`**|`Number (float) [Negotiable]`|Offer||Storage available in GiB | ---- + +| Property | Type | Applies to | Category | Description | +|-----------------------------|-------------------------------|------------|----------|--------------------------| +| **`golem.inf.storage.gib`** | `Number (float) [Negotiable]` | Offer | | Storage available in GiB | + ## [`golem.runtime`](0-commons/golem/runtime.md) @@ -87,65 +96,45 @@ Specification of ExeUnit/Runtime to host the resources provided. ### Properties -| Property | Type | Applies to | Category | Description | -|---|---|---|---|---| -|**`golem.runtime.capabilities`**|`List[String]`|Offer||Indicates the supported capabilities of the ExeUnit/Runtime offered on the market. | -|**`golem.runtime.name`**|`String`|Offer||Indicates the ExeUnit/Runtime required/provided. | -|**`golem.runtime.version`**|`Version`|Offer||Version of the ExeUnit/Runtime required/provided. | ---- + +| Property | Type | Applies to | Category | Description | +|----------------------------------|----------------|------------|----------|------------------------------------------------------------------------------------| +| **`golem.runtime.capabilities`** | `List[String]` | Offer | | Indicates the supported capabilities of the ExeUnit/Runtime offered on the market. | +| **`golem.runtime.name`** | `String` | Offer | | Indicates the ExeUnit/Runtime required/provided. | +| **`golem.runtime.version`** | `Version` | Offer | | Version of the ExeUnit/Runtime required/provided. | + # Category: 1-node -## [`node.geo`](1-node/node/geo.md) +## [`node`](1-node/node.md) -Namespace defining location/geography aspects of a Golem node. +Namespace defining properties of a Golem node. ### Properties -| Property | Type | Applies to | Category | Description | -|---|---|---|---|---| -|**`golem.node.geo.country_code`**|`String`|Demand/Offer||Country of location of Golem node (expressed in [ISO 3166-1 Alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2#Officially_assigned_code_elements) country codes). | ---- -## [`node.id`](1-node/node/id.md) +| Property | Type | Applies to | Category | Description | +|--------------------------------|------------------|--------------|----------|------------------------------------------------------------------| +| **`golem.node.id.name`** | `String [Fact]` | Demand/Offer | | Name of the Golem Node's owning party. | +| **`golem.node.debug.subnet`** | `String [Fact]` | Demand/Offer | | Debug property for limiting Nodes we can match on market. | +| **`golem.node.net.is-public`** | `Boolean [Fact]` | Demand/Offer | | Indicates that Node has publicly exposed ports and can talk p2p. | -Namespace defining identity aspects of a Golem node. - -### Properties - -| Property | Type | Applies to | Category | Description | -|---|---|---|---|---| -|**`golem.node.id.name`**|`String [Fact]`|Demand/Offer||Name of the Golem Node's owning party. | ---- # Category: 2-service -## [`srv.app.eth`](2-service/srv/app/eth.md) - -This namespace defines properties describing Ethereum-related applications & services. -### Included Namespaces +## [`srv.caps`](2-service/srv/caps.md) -* [golem.activity](../../../0-commons/golem/activity.md) -* [golem.inf](../../../0-commons/golem/inf.md) +Namespace that describes capabilities of a Golem service. ### Properties -| Property | Type | Applies to | Category | Description | -|---|---|---|---|---| -|**`golem.srv.app.eth.network`**|`String`|Demand||For Ethereum node hosting services - indicates the Ethereum network that the Geth is requested to connect to. | ---- - -## [`srv.caps`](2-service/srv/caps.md) -Namespace that describes capabilities of a Golem service. +| Property | Type | Applies to | Category | Description | +|----------------------------------------------------|-----------|--------------|----------|---------------------------------------------------------------------------------------------------------------------| +| **`golem.srv.caps.multi-activity`** | `Boolean` | Demand/Offer | | Indicates the that the Provider supports the multi-activity Agreements. [Specification](./../specs/capabilities.md) | -### Properties -| Property | Type | Applies to | Category | Description | -|---|---|---|---|---| -|**`golem.srv.caps.multi-activity`**|`Boolean`|Demand/Offer||Indicates the that the Provider supports the multi-activity Agreements. | ---- ## [`srv.comp`](2-service/srv/comp.md) @@ -153,27 +142,13 @@ Generic properties describing the Computation Platform aspects. ### Properties -| Property | Type | Applies to | Category | Description | -|---|---|---|---|---| -|**`golem.srv.comp.expiration`**|`Number (int32)`|Demand||Indicates the expiration time of the Agreement which is being negotiated. This is expressed as Javascript timestamp (number of milliseconds since 1970-01-01 00:00:00 UTC, as returned by `Date.now()`) | -|**`golem.srv.comp.task_package`**|`String`|Demand||Indicates the URI of a package/binary which is to be executed by the Provider. This is a generic property, which, however, may be interpreted differently per each Computation Platform. Therefore, in a Computation Platform-specific namespace it is expected to specify the semantics of `golem.srv.comp.task_package` property for that Platform. | ---- - -## [`srv.comp.wasm`](2-service/srv/comp/wasm.md) -This namespace defines properties used to indicate ability to host and execute a WebAssembly program. +| Property | Type | Applies to | Category | Description | +|----------------------------------------|------------------|------------|----------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| **`golem.srv.comp.expiration`** | `Number (int32)` | Demand | | Indicates the expiration time of the Agreement which is being negotiated. This is expressed as Javascript timestamp (number of milliseconds since 1970-01-01 00:00:00 UTC, as returned by `Date.now()`) | +| **`golem.srv.comp.task_package`** | `String` | Demand | | Indicates the URI of a package/binary which is to be executed by the Provider. This is a generic property, which, however, may be interpreted differently per each Computation Platform. Therefore, in a Computation Platform-specific namespace it is expected to specify the semantics of `golem.srv.comp.task_package` property for that Platform. | +| **`golem.srv.comp.vm.package_format`** | `String` | Demand | | Format of vm image. | -### Included Namespaces - -* [golem.activity](../../../0-commons/golem/activity.md) -* [golem.inf](../../../0-commons/golem/inf.md) - -### Properties - -| Property | Type | Applies to | Category | Description | -|---|---|---|---|---| -|**`golem.srv.comp.wasm.wasi.version`**|`Version`|Offer||Indicates the version of WASI API supported by the runtime. | ---- # Category: 3-commercial @@ -183,13 +158,13 @@ Namespace with properties defining payment parameters. ### Properties -| Property | Type | Applies to | Category | Description | -|----------------------------------------------------------|---|---|---|---------------------------------------------------------------------------------------------| -| **`golem.com.payment.chosen-platform`** |`String`|Demand/Offer|| Payment Platform to be used for settlement of the Agreement. | -| **`golem.com.payment.debit-notes.accept-timeout?`** |`Number (int32)`|Demand/Offer|Negotiable| Indicates the timeout period (in seconds) for the Requestor to accept incoming Debit Notes. | -| **`golem.com.payment.platform..address`** |`String`|Demand/Offer|| The address of GLM payment receiver (Provider) for indicated payment platform. | + +| Property | Type | Applies to | Category | Description | +|----------------------------------------------------------|------------------|--------------|------------|---------------------------------------------------------------------------------------------| +| **`golem.com.payment.chosen-platform`** | `String` | Demand/Offer | | Payment Platform to be used for settlement of the Agreement. | +| **`golem.com.payment.debit-notes.accept-timeout?`** | `Number (int32)` | Demand/Offer | Negotiable | Indicates the timeout period (in seconds) for the Requestor to accept incoming Debit Notes. | +| **`golem.com.payment.platform..address`** | `String` | Demand/Offer | | The address of GLM payment receiver (Provider) for indicated payment platform. | | **`golem.com.payment.version`** |`Number (int32)`|Demand/Offer|| Version of the payment protocol (2 means multi-payments capabilities) | ---- ## [`com.pricing.model`](3-commercial/com/pricing/model.md) @@ -197,11 +172,12 @@ This namespace defines **pricing models** for Golem computation resources. ### Properties -| Property | Type | Applies to | Category | Description | -|---|---|---|---|---| -|**`golem.com.pricing.model`**|`String`|Offer||Type of pricing function describing the pricing model. | -|**`golem.com.pricing.model.linear.coeffs`**|`List[Number]`|Offer||Property to express coefficients for the linear pricing function. | ---- + +| Property | Type | Applies to | Category | Description | +|---------------------------------------------|----------------|------------|----------|-------------------------------------------------------------------| +| **`golem.com.pricing.model`** | `String` | Offer | | Type of pricing function describing the pricing model. | +| **`golem.com.pricing.model.linear.coeffs`** | `List[Number]` | Offer | | Property to express coefficients for the linear pricing function. | + ## [`com.scheme`](3-commercial/com/scheme.md) @@ -209,13 +185,13 @@ Payment schemes, which describe the "protocols" of payment for services/resource ### Properties -| Property | Type | Applies to | Category | Description | -|---|---|---|---|---| -|**`golem.com.scheme`**|`String`|Offer||Scheme of payments made for computing resources consumed. | -|**`golem.com.scheme.payu.interval_sec`**|`Number`|Offer||For "pay-as-you-use" payment scheme, indicates interval of invoices issued during the service usage. | -|**`golem.com.scheme.payu.debit-note.interval-sec?`**|`Number`|Demand/Offer|Negotiable, Experimental|For "pay-as-you-use" payment scheme, indicates interval of Debit Notes issued during the service usage. | -|**`golem.com.scheme.payu.payment-timeout-sec?`**|`Number`|Demand/Offer|Negotiable, Experimental|For "pay-as-you-use" payment scheme, indicates the maximum payment delay allowed after Debit Note or Invoice is issued. The Debit Notes' `paymentDueDate` field must be set by the Providar in alignment with the negotiated `payment-timeout-sec` value. | ---- + +| Property | Type | Applies to | Category | Description | +|------------------------------------------------------|----------|--------------|--------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| **`golem.com.scheme`** | `String` | Offer | | Scheme of payments made for computing resources consumed. | +| **`golem.com.scheme.payu.debit-note.interval-sec?`** | `Number` | Demand/Offer | Negotiable, Experimental | For "pay-as-you-use" payment scheme, indicates interval of Debit Notes issued during the service usage. | +| **`golem.com.scheme.payu.payment-timeout-sec?`** | `Number` | Demand/Offer | Negotiable, Experimental | For "pay-as-you-use" payment scheme, indicates the maximum payment delay allowed after Debit Note or Invoice is issued. The Debit Notes' `paymentDueDate` field must be set by the Providar in alignment with the negotiated `payment-timeout-sec` value. [Mid-Agreement payments Specification](./../gaps/gap-3_mid_agreement_payments/gap-3_mid_agreement_payments.md) | +| **`golem.com.scheme.payu.interval_sec`** | `Number` | Offer | Deprecated | For "pay-as-you-use" payment scheme, indicates interval of invoices issued during the service usage. | ## [`com.usage`](3-commercial/com/usage.md) @@ -223,15 +199,15 @@ Namespace defining service usage aspects (usage vector and counters). ### Properties -| Property | Type | Applies to | Category | Description | -|---|---|---|---|---| -|**`golem.com.usage.vector`**|`List[String]`|Offer||This property specifies the usage counters from which the service cost is calculated. | -|**`golem.usage.duration_sec`**|`Number (int32)`||Deprecated|Duration of Activity (in seconds). | -|**`golem.usage.duration-sec`**|`Number (int32)`|||Duration of Activity (in seconds). Replacement for deprecated `golem.usage.duration_sec`. | -|**`golem.usage.cpu_sec`**|`Number (int32)`||Deprecated|Duration of CPU time during Activity execution (in seconds). | -|**`golem.usage.cpu-sec`**|`Number (int32)`|||Duration of CPU time during Activity execution (in seconds). Replacement for deprecated `golem.usage.cpu_sec`. | -|**`golem.usage.gib`**|`Number (float)`|||Maximum level ("high water mark") of RAM memory usage during activity execution (in GBytes). | -|**`golem.usage.storage_gib`**|`Number (float)`||Deprecated|Maximum level ("high water mark") of storage usage during activity execution (in GBytes). | -|**`golem.usage.storage-gib`**|`Number (float)`|||Maximum level ("high water mark") of storage usage during activity execution (in GBytes). Replacement for deprecated `golem.usage.storage_gib`. | ---- + +| Property | Type | Applies to | Category | Description | +|--------------------------------|------------------|------------|------------|-------------------------------------------------------------------------------------------------------------------------------------------------| +| **`golem.com.usage.vector`** | `List[String]` | Offer | | This property specifies the usage counters from which the service cost is calculated. | +| **`golem.usage.duration-sec`** | `Number (int32)` | | | Duration of Activity (in seconds). Replacement for deprecated `golem.usage.duration_sec`. | +| **`golem.usage.cpu-sec`** | `Number (int32)` | | | Duration of CPU time during Activity execution (in seconds). Replacement for deprecated `golem.usage.cpu_sec`. | +| **`golem.usage.gib`** | `Number (float)` | | | Maximum level ("high water mark") of RAM memory usage during activity execution (in GBytes). | +| **`golem.usage.storage-gib`** | `Number (float)` | | | Maximum level ("high water mark") of storage usage during activity execution (in GBytes). Replacement for deprecated `golem.usage.storage_gib`. | +| **`golem.usage.duration_sec`** | `Number (int32)` | | Deprecated | Duration of Activity (in seconds). | +| **`golem.usage.cpu_sec`** | `Number (int32)` | | Deprecated | Duration of CPU time during Activity execution (in seconds). | +| **`golem.usage.storage_gib`** | `Number (float)` | | Deprecated | Maximum level ("high water mark") of storage usage during activity execution (in GBytes). |