-
Notifications
You must be signed in to change notification settings - Fork 16
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Transcoder withdrawal address #4
Comments
Related concept: is there any merit in the "cold" address (withdrawl address), being able to submit a tx which replaces the "hot" address? The reason is that the hot address could be easily compromised...but if so then maybe only short term damage could be done if replaced quickly. Don't want to derail the discussion around the above, but I guess this issue is a place for discussion before actually submitting the PR proposal. |
I like it. Another note about overloading |
Another potentially simpler alternative to minimize damage would be to allow the withdrawal address to invoke the
Not necessarily - there could be a single separate setter function for updating rates while |
At the moment, transcoders use a single address for the following purposes:
BondingManager.reward()
,JobsManager.claimWork()
andJobsManger.verify()
that validate that the sender address is the transcoder's identifier addressTranscoders can instead use one address as their identifier address (so that contract functions can validate that the transcoder is the sender) and use one address as their withdrawal address.
There are a number of benefits that come with allowing a transcoder to specify a withdrawal address that is distinct from its identifier address
transcoder node and designate one party to be the transcoder node operator with any earnings
generated being transferred into this multisig wallet. Multisig wallet funds could then be spent if 2 of 3
parties agree.
could agree to be members of the DAO which owns the transcoder node and designate one party to be the transcoder node operator with any earnings being transferred into the DAO. An initial
implementation of the DAO might use a simple voting application to allow community members to
authorize the use of DAO funds. The DAO could be upgraded to use alternative applications such as
liquid democracy to govern the use of DAO funds
From an implementation point of view this would require an additional
withdrawalAddress
in the transcoder struct in the BondingManager contract. This value ofwithdrawalAddress
could be specified when invoking theBondingManager.transcoder()
function. (One note here is that theBondingManager.transcoder()
would become even more overloaded in this case because it is used not only to register as a transcoder, but also for changing rates and now setting a withdrawal address. It might be worth splitting up the function into two separate functions, one for registering with a withdrawal address and one for setting rates).BondingManager.withdrawStake()
would check if the sender has awithdrawalAddress
as a transcoder - if so, the function will ask the Minter to transfer LPT rewards towithdrawalAddress
, if not the function will ask the Minter to transfer LPT rewards to the sender address.BondingManager.withdrawFees()
would work similarly.BondingManager is delegate proxied meaning any changes during an upgrade will have to be storage layout compatible. At the moment, the addition of
withdrawalAddress
to the transcoder struct should be acceptable because the transcoder struct is only used in a mapping and not in any arrays and we would be adding an additional storage variable and not deleting or replacing any existing ones (we would need to make sure it comes after all existing variables in the transcoder struct!).The text was updated successfully, but these errors were encountered: