-
Notifications
You must be signed in to change notification settings - Fork 12
Description
At the moment, rails are created by the operator contract. This is convenient as it means the client can:
- Create a single logical deal.
- Submit that single deal to various service contracts.
- Have those service contracts create the necessary rails.
All in one step.
Furthermore, it makes it possible for the service contract/operator to create rails asynchronously without the involvement of the client. E.g., the client hands their data over to some intermediary and signs some deal intent, but then walks away and lets the intermediary work with the service contract to establish the actual rail once some yet-unknown SP takes the deal.
However, there's one key downside: control. The client can limit the damage an evil/broken operator can do by limiting the allowances they give to the operator however:
- Managing these allowances is overhead so I expect clients will set them pretty high.
- The operator contract maintains quite a bit of control here which could have legal implications (e.g., if some group retains the ability to upgrade the operator contract).
An alternative approach is to have the client create all payment rails, configuring some maximum rate/lockup per rail. The operator would then be allowed to:
- Increase/decrease the rate within the maximum rate.
- Pay out one-time payments out of some fixed lockup specified by the client.
The client would be allowed to:
- Add to the fixed lockup.
- Increase the maximum payout rate.
- Terminate the rail.
Under the covers, this would behave mostly the same way as the current design, just with slightly different rules on who can do what.
An alternative is to fix all this with more abstraction: stick a contract in-between the upgradable contract and the payment contract.
- The operator/allowance model stays the same.
- The intermediate contract acts as the main operator, delegating rail creation permissions to the client and rate-increase permissions to the "real" operator.
Unfortunately, this increases complexity and doesn't do away with the allowance. On the other hand, we can probably hide a lot of the details from the user here.
Metadata
Metadata
Assignees
Labels
Type
Projects
Status