-
Notifications
You must be signed in to change notification settings - Fork 1k
Frontend MASP sustainability fee (backport #4790) #4990
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
Frontend MASP sustainability fee (backport #4790) #4990
Conversation
|
Cherry-pick of 3577719 has failed: Cherry-pick of 2418cf5 has failed: Cherry-pick of ce7150d has failed: Cherry-pick of a13d611 has failed: To fix up this pull request, you can check it out locally. See documentation: https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/reviewing-changes-in-pull-requests/checking-out-pull-requests-locally |
🧪 CI InsightsHere's what we observed from your CI run for 726af7c. 🟢 All jobs passed!But CI Insights is watching 👀 |
(cherry picked from commit 3577719)
(cherry picked from commit 1d0872f)
(cherry picked from commit b33f48b)
(cherry picked from commit 4b1398f)
(cherry picked from commit 2418cf5)
(cherry picked from commit 8b38f4b)
(cherry picked from commit 3cacd32)
(cherry picked from commit ce7150d)
(cherry picked from commit 718b77e)
(cherry picked from commit 8070560)
(cherry picked from commit f0c4925)
(cherry picked from commit c5fef2b)
(cherry picked from commit 2c82472)
(cherry picked from commit 2757e68)
3147b50 to
726af7c
Compare
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
Merge Queue Status
✅ The pull request has been merged This pull request spent 49 seconds in the queue, including 1 second waiting for CI. Required conditions to merge |
Describe your changes
Adds support for an optional masp frontend providers sustainability fees. This fee is supported as both a transparent and a shielded transfer (with the exception of incoming shielding IBC packets). To support it the followings have been changed:
Shielding and (IBC) unshielding
The sdk has been extended to allow specifying the entry for this fee. This is an optional target and a percentage which will be applied to all inputs. The sdk adjusts the input amounts to account for this extra fee.
There's one limitation for the IBC unshielding case. If the transaction ultimately fails (rejected by the target chain or timed out) we refund the amount of the unshielding to a disposable address. The frontend fees are not part of this amount and do not get refunded: to support this we'd need to temporarily escrow those tokens to an internal address and finalize the fee payment only once the target chain has confirmed the transaction to be successful (this would require some protocol support and should probably be done in conjunction with #4726). On top of this, the unshielding refunds are done to a disposable transparent address from which the user might want to reshield the tokens: this would incur in another frontend fee event leading to multiple fees applied to the same overall action.
Incoming IBC shielding packets
The optional target and percentage of the fee can be passed to the
gen_ibc_shielding_transferfunction. Since IBC is limited to a single token, the asset is automatically inferred to be the same of the transfer and fees are not supported when shielding nfts. The fee amount itself will be encoded as an additional shielded output of the MASP bundle so that we can avoid the need for protocol-breaking changes.Osmosis swaps
Osmosis swaps are ultimately collapsed to the above ibc cases and so the same rules apply. In case the swap was fully shielded the frontend provider should refrain from charging a fee since this should count as a fully shielded transaction.
Checklist before merging
breaking::labelsnamada-docsreponamada-indexerornamada-masp-indexer, a corresponding PR is opened in that repoThis is an automatic backport of pull request #4790 done by [Mergify](https://mergify.com).