Docs

Golem's Docs

Brief overview

Concent is Golem’s network service, which aims to improve the integrity and security of the marketplace. Concent Service is not obligatory and Golem will work without it. If you are a provider, Concent Service will make sure that you are paid for the computational power you have used to perform assigned computations. If on the other hand, you act as a requestor, Concent Service will ensure that such payments are enforced only for correct results. In the ideal interaction, in which the providers and requestors behave according to the protocol and respond positively to any messages, the Concent Service does not intervene.

You can think of the Concent Service like an arbitrator or mediator in a dispute between actors in the network. If something wrong happens, the affected party can seek mediation from the Concent Service and the service will intervene on their behalf to resolve the issue.

Requirements

To use the Concent Service, you will need to: accept Concent Service terms & conditions. have some GNT (used for the actual deposit) and a small amount of ETH (used for gas) available on your account to submit a deposit to the Concent Service.

How does it work?

The flow of funds to the Concent Service is represented in the form of Deposits. To increase fairness in the network, you may opt-in to pledge a small amount of your funds to the Concent Service as a promise of ethical behavior in the network. Other Golem nodes may verify the presence of such a deposit and be more eager to work with you, knowing that there’s an objective party they can turn to in case their partner misbehaves.

Concent Service will ensure that users are paid for the work they do in the network - and - that the results that they get are correctly verified. All history of fund transfers with the Concent Service will be visible in the Deposits tab of your payments history.

When will Concent Service intervene?

1. Enforcing reports on the completion of a task If you act as a provider and your node cannot establish a connection with the requestor through the usual peer-to-peer communication channel to report the successful completion of their assigned task, it will seek assistance from the Concent Service in relaying that information back to the requestor, and more importantly, acknowledgment that the message was received can later be used to seek payment for the provided service.

2. Enforcing results download In case problems arise while downloading results from providers, a requestor node will reach out to the Concent Service which in turn will ask the provider to upload their results to the Concent Node. Once the upload finishes, Concent will verify its integrity and make the results available for download by the requestor so the computation task’s flow may resume.

On the other hand, should the Concent itself fail to acquire the results, it will provide the requestor with a proof of this failure which the requestor may later use, should the provider still seek payment for the task afterward.

3. Force acceptance of the results If for any reason, some time after the results are delivered to the requestor (either through normal communications - or - through Concent’s mediation in the scenarios above), the provider doesn’t receive a response regarding the result of verification, they will again use the Concent Service to acquire a verdict.

Normally, the Concent Service will ask the requestor to provide the verdict and if it is provided - whether it’s an acceptance or rejection of the results - that verdict is then relayed back to the provider.

It may happen that the requestor will go offline before they communicate their decision. In this use case, Concent Service will automatically assume acceptance of the results and will pay the provider on the requestor’s behalf using the requestor’s deposit.

4. Additional verification Should the requestor reject the provider’s computation result, an honest provider will obviously want to verify that decision with an objective party. Since verification is computationally expensive to the Concent Service, to prevent abuse of the service, in order to trigger this use case, the provider must submit their own deposit to the Concent Service.

After the Concent Service ensures that both parties have the required deposits and that the original resources package from the requestor and the result package from the provider are both uploaded with their integrity is intact, the Concent Service will run its own verification of the results and thus check if the rejection was justified.

Should the Concent Service decide that the results of this computation were wrongly rejected, it will force payment from the requestor to the provider by transferring the adequate amount from the requestor’s deposit while at the same time using the same deposit to cover their own verification fee.

On the other hand, if the Concent’s own verification results in a failure, the Concent Service will be forced to cover the verification fee using the provider’s deposit.

5. Force payment Every node that acts in the network as a requestor has the appropriate time to make the payment for tasks they commission to providers. Once this time expires, providers may ask the Concent Service to force payment for such tasks using the requestors deposits.

In this situation, Concent Service will search the Ethereum blockchain to see if indeed the payment for said tasks hadn’t been made directly and will only use the deposit if it fails to identify matching transactions.

Mentioned above are current Concent Service use cases. They will expand in time, and all new implemented use cases will be described here in the documentation.

Can I request tasks without Concent Service?

Yes, you can, but we strongly encourage you to use it to improve fairness in the network. Even when you are using Golem with Concent Service, you will be able to commision tasks without Concent Service, as there is an opt-out option implemented for each task in a task creation process.

Is Concent service free?

If your node is not manifesting malicious behavior in the network, the only cost you will be charged with is transaction fees between you and the Concent Service. Payments from Deposit are going to be distributed through providers and requestors in regular amount.

Why is Deposit amount higher than the cost of task?

To ensure that you have enough funds to participate in the network. The real cost of a task is unchanging. The cost of the first Deposit payment made with Concent Service will be four times higher than the price of your task. Future Deposit payments will be based on the total cost of your jobs and the amount of funds in the Deposit. Providers using Concent Service will check if requestors have no less than twice the amount of funds in their Deposit for covering a task payment. In case they do not, the Concent Service will update the Deposit to match this requirement.

I can afford a task, but not a Deposit

If you have enough tokens on your account to create a task you will have an option to either: top up your account with the required amount to continue with Concent Service or compute this particular task without the Concent Service.

Can I withdraw my tokens from the Deposit?

Yes, you can. If you decide that you don't want to use the Concent Service anymore or maybe you decide to leave the Golem Network altogether, you can stop the Concent Service and later withdraw all of your tokens from your GNT account to external wallet.

There’s a caveat though - to mitigate possible attacks where a party would submit a deposit only for the moment of task submission to withdraw it a short while later, all deposits are time-locked. At the moment you disable the Concent Service in your Golem client, the deposited funds are put in a “pending withdrawal” status and need to wait 48 hours until they’re actually transferred back to the originating wallet.

Unless of course, the user re-enables the Concent Service in their client before that time passes - in which case the deposit is locked again and a subsequent action to disable the Concent Service once more will start the 48-hour waiting period anew.

How do I stop Concent Service?

You can easily find opt-out switch in Concent Service tab in Golem GUI settings tab. Just turn it off, and confirm that you don’t want to use it anymore.

You can also stop the Concent Service without unlocking your deposit which may reduce future deposit creation transaction fee if you would like to use the service in the future. In this case, reusing the Concent Service will not cost you any additional fees.

How much can I save by not unlocking my deposit?

The whole process of withdrawing and recreating the deposit may cost up to 200k of gas (for 10 Gwei and ETH price $100 it would be $0.2)

Also after turning Concent Service off when the deposited funds are in a 48h “pending withdrawal” time period, you will be able to relock your funds. Relocking the deposit may cost up to 80k of gas (for 10 Gwei and ETH price $100 it would be $0.08).

What will happen with my tasks in the network when I turn Concent Service off?

All tasks in the network that you have commissioned while the Concent Service was enabled will be treated as such and act accordingly and the aforementioned time-locking of deposits will ensure that any payments using deposits can still happen before the task’s timeout elapses. All future tasks will be created without Concent Service though until Concent Service is explicitly enabled once again.

I have stopped Concent Service, but I don't see GNT in my wallet!

Transaction to and from Concent Service can take some time, so please be patient, as we can assure you that all of your tokens will be transferred from the Deposit to your GNT account.

Additionally, as mentioned earlier, all deposits are time-locked and the transfers from the deposit to the user’s wallet are scheduled only after a specific time after the Concent is disabled in the user’s Golem client.

If the delay is higher than 48 hours, it probably means that at the moment there are too many transactions in Ethereum. You can read more about possible delay reasons here