keep-network / keep-core

The smart contracts and reference client behind the Keep network
https://keep.network
MIT License
118 stars 73 forks source link

RFC 12 Implementation: Proposal generation #3747

Closed lukasz-zimnoch closed 9 months ago

lukasz-zimnoch commented 9 months ago

Refs: https://github.com/keep-network/tbtc-v2/issues/737 Depends on: https://github.com/keep-network/keep-core/pull/3745

Here we present the third part of the changes meant to implement RFC 12: Decentralized wallet coordination in the tBTC wallet client. This pull request focuses on proposal generation.

Remove wallet coordination from the maintainer module

So far, the maintainer bot implemented in the pkg/maintainer package was responsible for wallet coordination. The logic was living in the pkg/maintainer/wallet sub-package. As the maintainer bot is no longer responsible for wallet coordination, we are detaching the wallet coordination from there. This has also an impact on the maintainer-cli. Commands responsible for deposit sweep and redemption proposal submission are no longer available.

Move code from pkg/maintainer/wallet package to pkg/tbtcpg

Although the maintainer no longer uses the wallet coordination code, that code is still useful for the new coordination mechanism. It contains the logic necessary to produce coordination proposals. Hence, we moved it to the new pkg/tbtcpg package and exposed an entry point component ProposalGenerator that implements the tbtc.CoordinationProposalGenerator interface. Thanks to that, the pkg/tbtc package can use the code from pkg/tbtcpg to generate coordination proposals.

Ideally, the code from pkg/tbtcpg should be embedded into pkg/tbtc. However, both packages are not compatible out of the box. Merging them would require a lot of breaking changes. As RFC 12 implementation is already a complex task, we decided to keep pkg/tbtcpg as a separate being for now, to reduce risk.

Last but not least, the code in pkg/tbtcpg was simplified. This code no longer needs to handle proposals for multiple wallets at the same time so focusing on a single wallet allowed us to remove redundant code and facilitate further maintenance.

Wire up pkg/tbtcpg package to pkg/tbtc

As mentioned in the previous section, the pkg/tbtcpg implements the tbtc.CoordinationProposalGenerator interface so it can be used to generate proposals within the new coordination mechanism. This was achieved by injecting the tbtcpg.ProposalGenerator as a dependency to tbtc.node, during the setup process.

Next steps

The next steps on the way towards RFC 12 implementation are: