From 33b4df24bd987239a68615b702f24a19be105efd Mon Sep 17 00:00:00 2001 From: Kamil Koczurek Date: Tue, 30 Jul 2024 10:11:23 +0200 Subject: [PATCH 1/7] Add deposit documentation --- src/pages/docs/golem/payments/deposits.md | 21 +++++++++++++++++++++ src/pages/docs/golem/payments/index.md | 3 ++- 2 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 src/pages/docs/golem/payments/deposits.md diff --git a/src/pages/docs/golem/payments/deposits.md b/src/pages/docs/golem/payments/deposits.md new file mode 100644 index 000000000..8979e50ca --- /dev/null +++ b/src/pages/docs/golem/payments/deposits.md @@ -0,0 +1,21 @@ +# Deposits + +Yagna offers a way to pay for tasks indirectly or through a contract, as the Golem protocol does not require funds for the provider to be sent from the requestors wallet, which we support via the so-called Depoists. The use-case covered is creating services on top of Golem that allow end-users to pay for tasks orchestrated by the service, without having the service hold funds by itself at any point in time. + +## Conceputal scheme of operation + +1. The end user is guided by the service to created a deposit on a contract, which locks some amount of funds for a specific timeframe while allowing the service to transfer those funds. +2. The service (acting as a requestor) performs work on Golem, and whenever the provider requests funds (either via a mid-agreement payment or an invoice), the funds are transferred from the deposit to the provider. +3. When work is done, the deposit is closed and the extra funds are transferred back to the end-user. + +## Extendability + +While we provide an implementation of the [deposit contract interface](https://holesky.etherscan.io/address/0x7167E731b0031d4326d46C8D1E1c2E111227aB5f#code), the interface is flexible and allows different service-specific features to be implemented. In our example, a flat fee for the service is added, so that the payment for the service may be contractually bound to the service performing its duty. + +## Example service + +A service for scanning files for viruses is implemented at [https://deposit.dev.golem.network](https://deposit.dev.golem.network). The source code is [located here](https://github.com/golemfactory/deposit-payment-example). + +## Specification + +The interface and examples of use are documented in [golem-architecture](https://github.com/golemfactory/golem-architecture/blob/scx1332/deposits/specs/deposits.md). \ No newline at end of file diff --git a/src/pages/docs/golem/payments/index.md b/src/pages/docs/golem/payments/index.md index 61d45d01d..c60783f2e 100644 --- a/src/pages/docs/golem/payments/index.md +++ b/src/pages/docs/golem/payments/index.md @@ -91,5 +91,6 @@ For other options, refer to the [erc20 driver README.md](https://github.com/gole {% docnavigation title="Next steps" %} - [Layer 2 payments](/docs/golem/payments/layer-2-payments) +- [Deposits](/docs/golem/payments/deposits) -{% /docnavigation %} +{% /docnavigation %} \ No newline at end of file From a077b90b6fb0bb7c66ab77f4f41d95dc08532860 Mon Sep 17 00:00:00 2001 From: Kamil Koczurek Date: Tue, 30 Jul 2024 10:16:23 +0200 Subject: [PATCH 2/7] fix build --- src/pages/docs/golem/payments/deposits.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/pages/docs/golem/payments/deposits.md b/src/pages/docs/golem/payments/deposits.md index 8979e50ca..cf1bd2729 100644 --- a/src/pages/docs/golem/payments/deposits.md +++ b/src/pages/docs/golem/payments/deposits.md @@ -1,3 +1,10 @@ +--- +title: Deposits +description: Indirect payments from end-user to provider with limited requestor involvement. +pageTitle: Golem Network's Deposits - Indirect ERC20 Payments +type: Guide +--- + # Deposits Yagna offers a way to pay for tasks indirectly or through a contract, as the Golem protocol does not require funds for the provider to be sent from the requestors wallet, which we support via the so-called Depoists. The use-case covered is creating services on top of Golem that allow end-users to pay for tasks orchestrated by the service, without having the service hold funds by itself at any point in time. From 175396d4aa5f412850fa80e78e191b91cf612e77 Mon Sep 17 00:00:00 2001 From: golmek <126684244+golmek@users.noreply.github.com> Date: Tue, 30 Jul 2024 17:07:28 +0200 Subject: [PATCH 3/7] Update deposits.md --- src/pages/docs/golem/payments/deposits.md | 30 ++++++++++++++++------- 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/src/pages/docs/golem/payments/deposits.md b/src/pages/docs/golem/payments/deposits.md index cf1bd2729..2e91d32be 100644 --- a/src/pages/docs/golem/payments/deposits.md +++ b/src/pages/docs/golem/payments/deposits.md @@ -7,22 +7,34 @@ type: Guide # Deposits -Yagna offers a way to pay for tasks indirectly or through a contract, as the Golem protocol does not require funds for the provider to be sent from the requestors wallet, which we support via the so-called Depoists. The use-case covered is creating services on top of Golem that allow end-users to pay for tasks orchestrated by the service, without having the service hold funds by itself at any point in time. +In a classic Golem Payment scheme, there is a single cashflow from Requestor to Provider. Consequently, Requestor is the entity which is responsible for providing funds (GLM + MATIC/ETH) needed to cover Provider's invoices. + +![image](https://github.com/user-attachments/assets/256f8021-edfc-4dfd-b383-f432335be6d3) + + +Since Yagna 0.16, Golem offers a new way to pay for tasks indirectly (via a smart contract) called Deposits. As a result Golem protocol does not require funds for the Provider to be sent from the Requestors wallet. This new payment method covers a use-case whre services created on top of Golem allows end-users to pay for tasks orchestrated by the service. + +![image](https://github.com/user-attachments/assets/56a9fca4-5d92-4900-88db-3121c9a2cfad) + + +In this scenario: + +- Requestor is becoming a Service Owner, who runs Yagna to provide services to the End-sers. Because Provider is payed from End-user funds via Smart Contract, Service Owner does not need to hold any GLM on his wallet at any point in time. MATIC/ETH tokens are still needed to cover trasnactional costs. +- Provider role remains intact. The only difference is new source of payment, it is Smart Contract. +- End user is a new role. A person who wants to use Services build on top of Golem Network but is not intrested in setting up and maintaining Yagna node. This role requires some crypto wallet (for instance Metamask) with GLM and MATIC/ETH tokens to create Deposit, which will be used to cover Provider's costs. Thankfully, Metamask setup and required tokens might be easily obtained by End-User via Golem Onboarding Portal - https://glm.golem.network/ + +What is important, thanks to the Deposit Smart Contract, we are also able to introduce new cashflow from End-user to Service Owner/Requestor. This new cashflow might be used by Service Owner/Requestor to introduce optional service fee, which can be used to make Service Owner/Requestor role profitable. ## Conceputal scheme of operation -1. The end user is guided by the service to created a deposit on a contract, which locks some amount of funds for a specific timeframe while allowing the service to transfer those funds. -2. The service (acting as a requestor) performs work on Golem, and whenever the provider requests funds (either via a mid-agreement payment or an invoice), the funds are transferred from the deposit to the provider. +1. The End-user is guided by the Service deployed by Service Owner to created a deposit on a Smart Contract. Deposit locks some amount of funds for a specific timeframe while allowing the service to transfer those funds. Optionally Deposit might also lock some Service Owner Fee, which will be released after Deposit is closed. +2. The Service (acting as a Requestor) performs work on Golem, and whenever the provider requests funds (either via a mid-agreement payment or an invoice), the funds are transferred from the deposit to the provider. 3. When work is done, the deposit is closed and the extra funds are transferred back to the end-user. ## Extendability -While we provide an implementation of the [deposit contract interface](https://holesky.etherscan.io/address/0x7167E731b0031d4326d46C8D1E1c2E111227aB5f#code), the interface is flexible and allows different service-specific features to be implemented. In our example, a flat fee for the service is added, so that the payment for the service may be contractually bound to the service performing its duty. - -## Example service - -A service for scanning files for viruses is implemented at [https://deposit.dev.golem.network](https://deposit.dev.golem.network). The source code is [located here](https://github.com/golemfactory/deposit-payment-example). +We provide an implementation of the deposit contract interface on both [holesky](https://holesky.etherscan.io/address/0x7167E731b0031d4326d46C8D1E1c2E111227aB5f#code) and [polygon](https://holesky.etherscan.io/address/0x7167E731b0031d4326d46C8D1E1c2E111227aB5f#code). Those implementations are ready to be used out of the box. However interface is flexible and allows different service-specific features to be implemented. In our example, a flat fee for the service is added, so that the payment for the service may be contractually bound to the service performing its duty. ## Specification -The interface and examples of use are documented in [golem-architecture](https://github.com/golemfactory/golem-architecture/blob/scx1332/deposits/specs/deposits.md). \ No newline at end of file +The interface and examples of use are documented in [golem-architecture](https://github.com/golemfactory/golem-architecture/blob/scx1332/deposits/specs/deposits.md). From 556afe8d28764059ab19c66ae8d25ec7a817ef02 Mon Sep 17 00:00:00 2001 From: jalas167 Date: Wed, 31 Jul 2024 10:30:15 +0200 Subject: [PATCH 4/7] Deposits- updates --- public/golem/payments/deposit-payment.png | Bin 0 -> 15807 bytes public/golem/payments/direct-payment.png | Bin 0 -> 6409 bytes src/navigation/docs.js | 4 +++ src/pages/docs/golem/payments/deposits.md | 29 +++++++++++----------- src/pages/docs/golem/payments/index.md | 7 ++++-- 5 files changed, 23 insertions(+), 17 deletions(-) create mode 100644 public/golem/payments/deposit-payment.png create mode 100644 public/golem/payments/direct-payment.png diff --git a/public/golem/payments/deposit-payment.png b/public/golem/payments/deposit-payment.png new file mode 100644 index 0000000000000000000000000000000000000000..cf6cbdcc7d8a2cff7dce2aaabead352d94a5eac6 GIT binary patch literal 15807 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 literal 0 HcmV?d00001 diff --git a/public/golem/payments/direct-payment.png b/public/golem/payments/direct-payment.png new file mode 100644 index 0000000000000000000000000000000000000000..2a03866b5755984514570b8510098f0c3bd92a17 GIT binary patch literal 6409 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 literal 0 HcmV?d00001 diff --git a/src/navigation/docs.js b/src/navigation/docs.js index d0297bba6..163b2f9f4 100644 --- a/src/navigation/docs.js +++ b/src/navigation/docs.js @@ -681,6 +681,10 @@ export const navigation = [ title: 'Layer 2 Payments', href: '/docs/golem/payments/layer-2-payments', }, + { + title: 'Deposits', + href: '/docs/golem/payments/deposits', + }, { title: 'Golem token conversion', href: '/docs/golem/payments/golem-token-conversion', diff --git a/src/pages/docs/golem/payments/deposits.md b/src/pages/docs/golem/payments/deposits.md index 2e91d32be..41a5991c1 100644 --- a/src/pages/docs/golem/payments/deposits.md +++ b/src/pages/docs/golem/payments/deposits.md @@ -7,33 +7,32 @@ type: Guide # Deposits -In a classic Golem Payment scheme, there is a single cashflow from Requestor to Provider. Consequently, Requestor is the entity which is responsible for providing funds (GLM + MATIC/ETH) needed to cover Provider's invoices. +In a classic Golem Payment scheme, there is a single cash flow from Requestor to Provider. Consequently, the Requestor is the entity responsible for providing funds (GLM + MATIC/ETH) needed to cover the Provider's invoices. -![image](https://github.com/user-attachments/assets/256f8021-edfc-4dfd-b383-f432335be6d3) +![image](/golem/payments/direct-payment.png) +Since Yagna 0.16, Golem offers a new way to pay for tasks indirectly (via a smart contract) called Deposits. As a result, the Golem protocol does not require funds for the Provider to be sent from the Requestor wallet. This new payment method covers a use-case where services created on top of Golem allow end-users to pay for tasks orchestrated by the service. -Since Yagna 0.16, Golem offers a new way to pay for tasks indirectly (via a smart contract) called Deposits. As a result Golem protocol does not require funds for the Provider to be sent from the Requestors wallet. This new payment method covers a use-case whre services created on top of Golem allows end-users to pay for tasks orchestrated by the service. - -![image](https://github.com/user-attachments/assets/56a9fca4-5d92-4900-88db-3121c9a2cfad) - +![image](/golem/payments/deposit-payment.png) In this scenario: -- Requestor is becoming a Service Owner, who runs Yagna to provide services to the End-sers. Because Provider is payed from End-user funds via Smart Contract, Service Owner does not need to hold any GLM on his wallet at any point in time. MATIC/ETH tokens are still needed to cover trasnactional costs. -- Provider role remains intact. The only difference is new source of payment, it is Smart Contract. -- End user is a new role. A person who wants to use Services build on top of Golem Network but is not intrested in setting up and maintaining Yagna node. This role requires some crypto wallet (for instance Metamask) with GLM and MATIC/ETH tokens to create Deposit, which will be used to cover Provider's costs. Thankfully, Metamask setup and required tokens might be easily obtained by End-User via Golem Onboarding Portal - https://glm.golem.network/ +- Requestor is becoming a **Service Owner**, who runs Yagna to provide services to the **End Users**. Because the Provider is paid from End-user funds via Smart Contract, the Service Owner does not need to hold any GLM in his wallet at any point in time. MATIC/ETH tokens are still needed to cover transaction costs, however. +- **Provider** role remains intact. The only difference is a new source of payment, it is a Smart Contract. +- The **End User** role is a new one. A person who wants to use Services built on top of the Golem Network but is not interested in setting up and maintaining the Yagna node. This role requires some crypto wallet (for instance Metamask) with GLM and MATIC/ETH tokens to create a **Deposit**, which will be used to cover the Provider's costs. Thankfully, Metamask setup and required tokens might be easily obtained by End-User via Golem Onboarding Portal - https://glm.golem.network/ -What is important, thanks to the Deposit Smart Contract, we are also able to introduce new cashflow from End-user to Service Owner/Requestor. This new cashflow might be used by Service Owner/Requestor to introduce optional service fee, which can be used to make Service Owner/Requestor role profitable. +What is important, thanks to the Deposit Smart Contract, we are also able to introduce new cash flow from End-User to Service Owner/Requestor. This new cash flow might be used by the Service Owner/Requestor to introduce an optional service fee, which can be used to make the Service Owner/Requestor role profitable. -## Conceputal scheme of operation +## Conceptual scheme of operation -1. The End-user is guided by the Service deployed by Service Owner to created a deposit on a Smart Contract. Deposit locks some amount of funds for a specific timeframe while allowing the service to transfer those funds. Optionally Deposit might also lock some Service Owner Fee, which will be released after Deposit is closed. -2. The Service (acting as a Requestor) performs work on Golem, and whenever the provider requests funds (either via a mid-agreement payment or an invoice), the funds are transferred from the deposit to the provider. -3. When work is done, the deposit is closed and the extra funds are transferred back to the end-user. +1. The Service Owner deploys the service. +2. The Service End-user creates a deposit on a Smart Contract. ( The service should guide the Ent User through the required steps). Deposit locks some amount of funds for a specific timeframe while allowing the service to transfer those funds. Optionally Deposit might also lock some Service Owner Fee, which will be released after the Deposit is closed. +3. The Service (acting as a Requestor) performs work on Golem, and whenever the provider requests funds (either via a mid-agreement payment or an invoice), the funds are transferred from the deposit to the provider. +4. When work is done or the deposit timeframe expires, the deposit is closed and the extra funds are transferred back to the end-user. ## Extendability -We provide an implementation of the deposit contract interface on both [holesky](https://holesky.etherscan.io/address/0x7167E731b0031d4326d46C8D1E1c2E111227aB5f#code) and [polygon](https://holesky.etherscan.io/address/0x7167E731b0031d4326d46C8D1E1c2E111227aB5f#code). Those implementations are ready to be used out of the box. However interface is flexible and allows different service-specific features to be implemented. In our example, a flat fee for the service is added, so that the payment for the service may be contractually bound to the service performing its duty. +We provide an implementation of the deposit contract interface on both [holesky](https://holesky.etherscan.io/address/0x7167E731b0031d4326d46C8D1E1c2E111227aB5f#code) and [polygon](https://holesky.etherscan.io/address/0x7167E731b0031d4326d46C8D1E1c2E111227aB5f#code). Those implementations are ready to be used out of the box. However, the interface is flexible and allows different service-specific features to be implemented. In our example, a flat fee for the service is added, so that the payment for the service may be contractually bound to the service performing its duty. ## Specification diff --git a/src/pages/docs/golem/payments/index.md b/src/pages/docs/golem/payments/index.md index c60783f2e..266d3ccee 100644 --- a/src/pages/docs/golem/payments/index.md +++ b/src/pages/docs/golem/payments/index.md @@ -88,9 +88,12 @@ your `.env` file or explicitly set the ENV variable `ERC20_SENDOUT_INTERVAL_SECS For other options, refer to the [erc20 driver README.md](https://github.com/golemfactory/yagna/blob/master/core/payment-driver/erc20/Readme.md). +## Deposits + +In a classic Golem Payment scheme, the Requestor is the entity that is responsible for providing funds (GLM + MATIC/ETH) needed to cover the Provider's invoices. Since Yagna 0.16, Golem offers a new way to pay for tasks: indirectly (via a smart contract) called Deposits. Read more on this feature in this [Guide](/docs/golem/payments/deposits). + {% docnavigation title="Next steps" %} - [Layer 2 payments](/docs/golem/payments/layer-2-payments) -- [Deposits](/docs/golem/payments/deposits) -{% /docnavigation %} \ No newline at end of file +{% /docnavigation %} From 3a01511739c619396d6353375a2b1b606e42eb50 Mon Sep 17 00:00:00 2001 From: Kamil Koczurek Date: Wed, 31 Jul 2024 11:50:49 +0200 Subject: [PATCH 5/7] fix typo --- src/pages/docs/golem/payments/deposits.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/docs/golem/payments/deposits.md b/src/pages/docs/golem/payments/deposits.md index 41a5991c1..ea2ac1e37 100644 --- a/src/pages/docs/golem/payments/deposits.md +++ b/src/pages/docs/golem/payments/deposits.md @@ -26,7 +26,7 @@ What is important, thanks to the Deposit Smart Contract, we are also able to int ## Conceptual scheme of operation 1. The Service Owner deploys the service. -2. The Service End-user creates a deposit on a Smart Contract. ( The service should guide the Ent User through the required steps). Deposit locks some amount of funds for a specific timeframe while allowing the service to transfer those funds. Optionally Deposit might also lock some Service Owner Fee, which will be released after the Deposit is closed. +2. The Service End-user creates a deposit on a Smart Contract. (The service should guide the Ent User through the required steps). Deposit locks some amount of funds for a specific timeframe while allowing the service to transfer those funds. Optionally Deposit might also lock some Service Owner Fee, which will be released after the Deposit is closed. 3. The Service (acting as a Requestor) performs work on Golem, and whenever the provider requests funds (either via a mid-agreement payment or an invoice), the funds are transferred from the deposit to the provider. 4. When work is done or the deposit timeframe expires, the deposit is closed and the extra funds are transferred back to the end-user. From b34f191c827d02be91935c7adc4c4755757070e6 Mon Sep 17 00:00:00 2001 From: Kamil Koczurek Date: Tue, 6 Aug 2024 10:55:20 +0200 Subject: [PATCH 6/7] deposits: change golem-architecture link to master --- src/pages/docs/golem/payments/deposits.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/docs/golem/payments/deposits.md b/src/pages/docs/golem/payments/deposits.md index ea2ac1e37..ef275a47f 100644 --- a/src/pages/docs/golem/payments/deposits.md +++ b/src/pages/docs/golem/payments/deposits.md @@ -36,4 +36,4 @@ We provide an implementation of the deposit contract interface on both [holesky] ## Specification -The interface and examples of use are documented in [golem-architecture](https://github.com/golemfactory/golem-architecture/blob/scx1332/deposits/specs/deposits.md). +The interface and examples of use are documented in [golem-architecture](https://github.com/golemfactory/golem-architecture/blob/master/specs/deposits.md). From 40a4b854736e0ffa18f9620454f957012974dfcd Mon Sep 17 00:00:00 2001 From: Kamil Koczurek Date: Tue, 6 Aug 2024 11:00:10 +0200 Subject: [PATCH 7/7] deposits: update deployed contract urls --- src/pages/docs/golem/payments/deposits.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/docs/golem/payments/deposits.md b/src/pages/docs/golem/payments/deposits.md index ef275a47f..e2db1b153 100644 --- a/src/pages/docs/golem/payments/deposits.md +++ b/src/pages/docs/golem/payments/deposits.md @@ -32,7 +32,7 @@ What is important, thanks to the Deposit Smart Contract, we are also able to int ## Extendability -We provide an implementation of the deposit contract interface on both [holesky](https://holesky.etherscan.io/address/0x7167E731b0031d4326d46C8D1E1c2E111227aB5f#code) and [polygon](https://holesky.etherscan.io/address/0x7167E731b0031d4326d46C8D1E1c2E111227aB5f#code). Those implementations are ready to be used out of the box. However, the interface is flexible and allows different service-specific features to be implemented. In our example, a flat fee for the service is added, so that the payment for the service may be contractually bound to the service performing its duty. +We provide an implementation of the deposit contract interface on [ethereum](https://etherscan.io/address/0xE440b576088d0a18340CAe5B2cff43502f1Cf588#code), [polygon](https://polygonscan.com/address/0x57ff7451E008647cbDB84e652B00ef05856Dba23#code), [holesky testnet](https://holesky.etherscan.io/address/0x63704675f72A47a7a183112700Cb48d4B0A94332#code), [sepolia testnet](https://sepolia.etherscan.io/address/0x35cA714deFa9482521659Cf9ee41F087f005335b#code) and [amoy testnet](https://amoy.polygonscan.com/address/0x6f25b6ad18a7c368aaffdd77303ba325fd31aafe#code). Those implementations are ready to be used out of the box. However, the interface is flexible and allows different service-specific features to be implemented. In our example, a flat fee for the service is added, so that the payment for the service may be contractually bound to the service performing its duty. ## Specification