Skip to content
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

New Asset System - Enable fee payment for CampaignAssets #1289

Merged
merged 99 commits into from
Apr 2, 2024

Conversation

sea212
Copy link
Member

@sea212 sea212 commented Mar 19, 2024

What does it do?

  • Implements Unbalanced for asset-router (this is necessary for CreditOf which is enforced by pallet-asset-tx-payment and within the Balanced trait)
  • Uses Assets instead of u32 as a transaction fee asset type
  • Implements fees for CampaignAssets.
    • Fees are derived as native_fee * fee_multiplier * campaign_asset_supply / ztg_supply to scale properly in a sense that more campaign asset tokens do not lead to more possible transactions and that possible transactions are always 100 times less than what would be possible with ZTG
    • A fee multiplier is capped to max(fee_multiplier, BASE). This prevents infinite transactions as fee_multiplier * campaign_asset_supply / ztg_supply would just infinitely grow smaller.
    • Fees are burned completely, as campaign assets have a limited lifetime.

What important points should reviewers know?

Is there something left for follow-up PRs?

  • Prepare merge into main
  • Future:
    • Remove lazy migration logic once all old outcome tokens were redeemed
    • Enable CustomAssets as base assets - requires more thinking because the admin account (which can be any user) can destroy the assets while they are in use within a market

What alternative implementations were considered?

  • Instead of implementing Unbalanced and using Assets for TxCharger, implementing TxCharger for Currencies and CampaignAssets. Does not work due to strict relationship of Config types in pallet-asset-tx-payment.

Are there relevant PRs or issues?

References

sea212 and others added 30 commits November 6, 2023 09:03
* Update versions (#1168)

* Add updated weights from reference machine (#1169)

* Add license header

Co-authored-by: Chralt <chralt.developer@gmail.com>

---------

Co-authored-by: Chralt <chralt.developer@gmail.com>
filter admin functions for main-net
* add debug assertions for missing slashes

* place debug_assert for unreserves
add some verify checks to court
…order book markets (#1185)

update contracts call filter
* fix court assertion for resolve_at

* remove unnecessary variable

* mirror mock and actual impl for DisputeResolution
* implement trusted market close

* remove unnecessary benchmark helper function

* Update zrml/prediction-markets/src/lib.rs

Co-authored-by: Malte Kliemann <mail@maltekliemann.com>

* remove unnecessary function

* check market end

* check auto close

* add invalid market status test

---------

Co-authored-by: Malte Kliemann <mail@maltekliemann.com>
* modify events for indexer

* gracefully handle panicers

* handle binary search by key error

* improve style
* handle own existential deposit errors

* use require_transactional

* correct benchmark and test min bet size amounts
* Replace `bmul` and `bdiv` with traited versions

* Restructure directories

* Replace `saturating_*` from neo-swaps

* Fix formatting

* Restructure zrml-swaps math

* Implement and test `b*`

* Fix formatting

* Use new math in orderbook-v1

* Replace checked multiplication with new math

* Use correct rounding in neo-swaps

* Add docs

* Update licenses

* Remove `fixed` module from `primitives`

* Fix formatting

* Update primitives/src/math/fixed.rs

Co-authored-by: Harald Heckmann <mail@haraldheckmann.de>

---------

Co-authored-by: Harald Heckmann <mail@haraldheckmann.de>
* add env_logger and add force-debug feature

* taplo fmt, fix copyrights

* Update zrml/styx/src/mock.rs

Co-authored-by: Malte Kliemann <mail@maltekliemann.com>

* Update zrml/rikiddo/src/mock.rs

Co-authored-by: Malte Kliemann <mail@maltekliemann.com>

* update comment to clarify logging

---------

Co-authored-by: Malte Kliemann <mail@maltekliemann.com>
* inflate defensively

* add tests

* Update zrml/court/src/tests.rs

Co-authored-by: Malte Kliemann <mail@maltekliemann.com>

* fix test

* fix test name

---------

Co-authored-by: Malte Kliemann <mail@maltekliemann.com>
* integrate market creator fees into orderbook

* edit tests

* update tests

* modify tests

* avoid order side

* Update primitives/src/traits/distribute_fees.rs

Co-authored-by: Malte Kliemann <mail@maltekliemann.com>

* remove asset and account from get_fee api call

* take base asset fees from fill_order

* adjust orderbook for taking fees in fill_order

* adjust without order side for fill_order

* adapt to avoid concept of order side

* adapt benchmarks, tests and weights, restructure

* use DispatchResult

* remove unused import

* do not adjust maker amount for place_order

* correct fuzz of orderbook

* check if maker_amount is zero

* fix order book name in benchmarks

* use remove instead of cancel order book

* correct order book test names

* update READMEs

* fmt

* add tests

* use minimum balance as min order size

* Update zrml/orderbook/README.md

Co-authored-by: Malte Kliemann <mail@maltekliemann.com>

* Update zrml/orderbook/README.md

Co-authored-by: Malte Kliemann <mail@maltekliemann.com>

* Apply suggestions from code review

Co-authored-by: Malte Kliemann <mail@maltekliemann.com>

* prettier orderbook md

* remove comments from benchmarks

* fix tests and benchmarks readibility

* use order book instead of orderbook

* clarify error message

* clarify comments

* rename is to ensure

* error for repatriate

* fix unnecessary clone

* correct mocks behaviour

* improve test

* improve test of near full fill error

* use turbofish syntax

* add filled_maker_amount to event

* split tests

* combine two functions, add docs

* abandon get_fees

* fix order book tests and mock

* remove check for impossible behaviour

* fix toml and benchs

* prepare migration

* add migration for order structure

* return zero fees if transfer fails

* delete unnecessary assert

* fix naming

* fix naming the second

* fix maker fill description

* add scoring rule check to remove order

* fix post_upgrade

* fix terminology

* Update zrml/orderbook/src/migrations.rs

Co-authored-by: Malte Kliemann <mail@maltekliemann.com>

* use storage root check in migration test

* Update zrml/orderbook/src/lib.rs

Co-authored-by: Harald Heckmann <mail@haraldheckmann.de>

* Update zrml/orderbook/src/lib.rs

Co-authored-by: Harald Heckmann <mail@haraldheckmann.de>

* Update zrml/orderbook/src/lib.rs

Co-authored-by: Harald Heckmann <mail@haraldheckmann.de>

* delete debug_assert

---------

Co-authored-by: Malte Kliemann <mail@maltekliemann.com>
Co-authored-by: Harald Heckmann <mail@haraldheckmann.de>
* Replace `bmul` and `bdiv` with traited versions

* Restructure directories

* Replace `saturating_*` from neo-swaps

* Fix formatting

* Restructure zrml-swaps math

* Implement and test `b*`

* Fix formatting

* Use new math in orderbook-v1

* Replace checked multiplication with new math

* Use correct rounding in neo-swaps

* Add docs

* Update licenses

* Remove `fixed` module from `primitives`

* Fix formatting

* .

* Rewrite math functions

* Remove training wheels

* Fix docs.pdf

* Fix quotes

* Add tests for buying

* Add tests for selling and improve error names

* Update docs

* Check adjusted amount in for numerical bounds

* Remove unused implementations

* Adjust docs

* Add stress test exploring various scenarios

* Add swap fees to stress test

* Add underscore separators

* Clean up

* Benchmark `buy` as function of `asset_count`

* Update benchmarks

* Clippy fix

* Fix benchmark tests

* Update benchmarks of zrml-prediction-markets

* Fix broken comment

* Add comment explaining benchmark spot prices

* Use clearer constants for `amount_in` in tests

* Update zrml/neo-swaps/src/traits/pool_operations.rs

Co-authored-by: Chralt <chralt.developer@gmail.com>

* Fix botched merge

* Fix merge

* Update benchmarks

* Update zrml/neo-swaps/docs/docs.tex

Co-authored-by: Harald Heckmann <mail@haraldheckmann.de>

* Apply suggestions from code review

Co-authored-by: Harald Heckmann <mail@haraldheckmann.de>

* Rename `Fixed` and clean up

* Hotfix exponential function and extend tests

* Complete math test suite

* Fix broken sentence

* Remove unused imports

* Extend `ln` test cases

* Merge & fix formatting

---------

Co-authored-by: Chralt <chralt.developer@gmail.com>
Co-authored-by: Harald Heckmann <mail@haraldheckmann.de>
* Replace `bmul` and `bdiv` with traited versions

* Restructure directories

* Replace `saturating_*` from neo-swaps

* Fix formatting

* Restructure zrml-swaps math

* Implement and test `b*`

* Fix formatting

* Use new math in orderbook-v1

* Replace checked multiplication with new math

* Use correct rounding in neo-swaps

* Add docs

* Update licenses

* Remove `fixed` module from `primitives`

* Fix formatting

* Add liquidity tree draft

* Fix compiler error in draft

* Clean up `propagate_fees`

* Add docs

* Reorganize

* Clean up, add max iterations

* Remove migrations

* Prepare switch to bounded vector

* Use `BoundedVec`

* Use bounded `BTreeMap` and insert `LiquidityTree` into neo-swaps

* Resolve TODO

* Clean up tests

* Add migration and fix clippy errors

* Make tree depth a generic

* Make tree depth a config parameter

* Update runtime complexities

* Add benchmarking utilities

* Fix runtime complexity for `deploy_pool`

* Add missing lazy propagation

* Fix comment

* Fix error type

* Add `join` benchmarking and fix a bug in `LiquidityTree`

* Clean up benchmarks

* Fix clippy issues

* Remove unnecessary type hint

* Fix bugs in liquidity tree

* Fix comments

* Some fixes in benchmarks

* Implement `BenchmarkHelper`

* Update benchmarks to use the LT

* Clean up and format

* Add testing framework for liquidity trees

* Add first extensive test and fix a bug

* Add more tests

* Clean up test

* Add news tests and use better numerics for ratio calculations

* Make docs more explicit

* Add tests for `exit`

* Add tests for deposit fees

* Add tests for getters

* Clean up tests some more

* Finalize liquidity tree tests

* Clean up comments

* Introduce exit fees

* Rewrite `exit_works`

* Fix liquidity parameter calculation

* Make test a bit more complex

* Test liquidity shares

* Clean up tests

* Update test for destruction

* Enhance `exit_destroys_pool` test

* More cleanup

* Add test for full tree

* Add tests for `join`

* Improve test

* Test withdrawal

* Clean up the test

* Add test for noop

* Add minimum relative liquidity

* Verify that buys deduct the correct amount of fees

* Add last tests

* Add notes about the liquidity tree

* Fix benchmarks

* Fix clippy errors

* Fix benchmarks

* Do more work on benchmarks

* Fix benchmarks, deduce max tree depth

* Remove already solved TODO

* Document macros

* Remove TODO (not a good idea to edit LaTeX docs now)

* Fix `bmul_bdiv`

* Make `bmul_bdiv_*` not implemented

* Double-check that there's a non-zero check for `ratio`

* Fix formatting

* Fix taplo formatting

* Remove TODO

* Remove TODOs and fix documents

* Update primitives/src/math/fixed.rs

Co-authored-by: Chralt <chralt.developer@gmail.com>

* Mark `SoloLp` as deprecated

* Update zrml/neo-swaps/README.md

Co-authored-by: Chralt <chralt.developer@gmail.com>

* Make `bmul_bdiv` a little more idiomatic

* Update zrml/neo-swaps/README.md

Co-authored-by: Chralt <chralt.developer@gmail.com>

* Update zrml/neo-swaps/README.md

Co-authored-by: Chralt <chralt.developer@gmail.com>

* Update zrml/neo-swaps/README.md

Co-authored-by: Chralt <chralt.developer@gmail.com>

* Update zrml/neo-swaps/README.md

Co-authored-by: Chralt <chralt.developer@gmail.com>

* Update zrml/neo-swaps/README.md

Co-authored-by: Chralt <chralt.developer@gmail.com>

* Update zrml/neo-swaps/README.md

Co-authored-by: Chralt <chralt.developer@gmail.com>

* Update zrml/neo-swaps/README.md

Co-authored-by: Chralt <chralt.developer@gmail.com>

* Rewrite and format `README.md`

* Fix comment about existential deposit

* Remove FIXME

* Add a check against misconfiguration of the pallet

* Fix field docstrings

* Add comment about `assert_ok_with_transaction`

* Update zrml/neo-swaps/src/mock.rs

Co-authored-by: Chralt <chralt.developer@gmail.com>

* Format code

* Fix comment

* Prettify extrinsic calls in benchmarks

* Improve code quality of `assert_pool_state!`

* Extend comment about order of abandoned nodes

* Clarify the meaning of "leaf" in `is_leaf`

* Rename `index_maybe` to `opt_index`

* Add unexpected storage overflow error for bounded objects

* Rename `UnclaimedFees` to `UnwithdrawnFees`

* Fix documentation

* Use enum to signal update direction in `update_descendant_stake`

* Add verification to `join_*` benchmarks

* Improve documentation

* Use builtin log

* Remove illegal token from `README.md`

* Update zrml/neo-swaps/src/types/liquidity_tree.rs

Co-authored-by: Chralt <chralt.developer@gmail.com>

* Fix unintentional doctest

* Improve `mutate_children`

* Add helpful comment

* Update zrml/neo-swaps/src/types/liquidity_tree.rs

Co-authored-by: Chralt <chralt.developer@gmail.com>

* Fix migration

* Fix balances in parachain mock

* use PartialEqNoBound and CloneNoBound for tree

* Fix formatting

* Make `debug_assert!` more clear

* Redesign node assignment

* Clean up comments

* Add some storage overflow errors

* Introduce `LiquidityTreeChildIndices`

* Remove outdated docs

* Rename `update_descendant_stake`

* Remove `Default` usage

* Make liquidity tree types `pub(crate)` where possible

* Make all fields of `Node` only `pub(crate)`

* Make `Node<T>` an associated type of `LiquidityTreeHelper`

* Update zrml/neo-swaps/src/lib.rs

Co-authored-by: Harald Heckmann <mail@haraldheckmann.de>

* Fix comment

* Update zrml/neo-swaps/src/types/liquidity_tree.rs

Co-authored-by: Harald Heckmann <mail@haraldheckmann.de>

* Fix tests

* Prettify `path_to_node`

* Add max iterations to `path_to_node`

* Add test for complex liquidity tree interactions

* Improve documentation of `LiquidityTreeChildIndices`

* Reorganize crate structure

* Update weights and fix formatting

---------

Co-authored-by: Chralt <chralt.developer@gmail.com>
Co-authored-by: Chralt98 <chralt98@gmail.com>
Co-authored-by: Harald Heckmann <mail@haraldheckmann.de>
* Fix padding of foreign fees in Zeitgeist runtime

* Fix padding of foreign fees in Battery Station runtime

* Format

* Update copyright

* Use adjusted_balance function
* Replace `bmul` and `bdiv` with traited versions

* Restructure directories

* Replace `saturating_*` from neo-swaps

* Fix formatting

* Restructure zrml-swaps math

* Implement and test `b*`

* Fix formatting

* Use new math in orderbook-v1

* Replace checked multiplication with new math

* Use correct rounding in neo-swaps

* Add docs

* Update licenses

* Remove `fixed` module from `primitives`

* Fix formatting

* .

* Rewrite math functions

* Remove training wheels

* Fix docs.pdf

* Fix quotes

* Add tests for buying

* Add tests for selling and improve error names

* Update docs

* Check adjusted amount in for numerical bounds

* Remove unused implementations

* Adjust docs

* Add stress test exploring various scenarios

* Add swap fees to stress test

* Add underscore separators

* Clean up

* Benchmark `buy` as function of `asset_count`

* Update benchmarks

* Clippy fix

* Fix benchmark tests

* Update benchmarks of zrml-prediction-markets

* Fix broken comment

* Add comment explaining benchmark spot prices

* Use clearer constants for `amount_in` in tests

* Update zrml/neo-swaps/src/traits/pool_operations.rs

Co-authored-by: Chralt <chralt.developer@gmail.com>

* Fix botched merge

* Fix merge

* Update benchmarks

* Remove `pool_*_subsidy`

* Remove `distribute_pool_share_rewards`

* Remove `end_subsidy_phase`

* Remove `destroy_pool_in_subsidy_phase`

* Remove `MinSubsidy*`

* Remove `SubsidyProviders`

* Remove `start_subsidy`

* Rewrite `create_pool`

* Rewrite `swap_exact_amount_in`

* Rewrite `swap_exact_amount_out`

* Rewrite utility functions

* Remove Rikiddo from weight calculation

* Remove Rikiddo from zrml-swaps

* Remove unused errors

* Remove `ScoringRule::Rikiddo...`

* Remove `*SubsidyPeriod`

* Remove Rikiddo-related storage and events

* Remove automatic opening of pools

* Remove `open_pool` from prediction-markets

* Remove `Swaps::close_pool` from prediction-markets

* Remove `clean_up_pool` from prediction-markets

* Remove `clean_up_pool` from `Swaps` trait

* Remove CPMM deployment from prediction-markets

* Remove automatic arbitrage

* Move `market_account` back to prediction-markets

* Remove unused market states

* Fix fuzz tests

* Implement market migration

* Minor changes

* Fix migration behavior

* Remove creator fees from swaps

* Fix try-runtime

* Fix clippy issues

* Remove `LiquidityMining` from swaps

* Fix `get_spot_prices`

* Take first step to remove `MarketCommons` from swaps

* Remove `MarketCommons` from swaps

* Rewrite `PoolStatus`

* Move `Pool*` to swaps

* Use `Bounded*` types in `Pool`

* Finish swaps migration

* Add missing files

* Fix formatting and clippy errors

* Remove `pool_status.rs`

* Ignore doctests

* Fix fuzz tests

* Add prediciton-markets migration

* Test prediction-markets migration

* Finish tests of the market-commons migration

* Add migrations to runtime and fix various errors

* Clean up

* Clean up

* Format code

* Fix pool migration behavior

* Remove `MarketId` from swaps

* Fix formatting

* Fix formatting

* Remove `CPMM` and allow other scoring rules on Battery Station

* Update macros/Cargo.toml

Co-authored-by: Harald Heckmann <mail@haraldheckmann.de>

* Update primitives/src/traits/zeitgeist_asset.rs

Co-authored-by: Harald Heckmann <mail@haraldheckmann.de>

* Update zrml/market-commons/src/migrations.rs

Co-authored-by: Harald Heckmann <mail@haraldheckmann.de>

* Update zrml/swaps/src/migrations.rs

Co-authored-by: Harald Heckmann <mail@haraldheckmann.de>

* Update zrml/swaps/src/migrations.rs

Co-authored-by: Harald Heckmann <mail@haraldheckmann.de>

* Update zrml/prediction-markets/src/migrations.rs

Co-authored-by: Harald Heckmann <mail@haraldheckmann.de>

* Update zrml/market-commons/src/migrations.rs

Co-authored-by: Harald Heckmann <mail@haraldheckmann.de>

* Clean up TODOs/FIXMEs

* Update changelog

* Make more changes to changelog

* Clear zrml-swaps storage

* Remove cfg-if dependency

* Fix formatting

* Trigger CI

* Update copyright notices

* Update docs/changelog_for_devs.md

Co-authored-by: Chralt <chralt.developer@gmail.com>

* Make benchmark helper only available if feature flags are set

* Remove `ZeitgeistAsset` trait

* Remove preliminary benchmarks with more steps

* Format code

* Fix copyright notice

---------

Co-authored-by: Chralt <chralt.developer@gmail.com>
Co-authored-by: Harald Heckmann <mail@haraldheckmann.de>
* Use hotfixed `exp`

* Reorganize tests

* Fix formatting

* Bump versions to v0.4.3

* Update spec versions

* Add missing version bumps

* Format

* Update licenses

---------

Co-authored-by: Malte Kliemann <mail@maltekliemann.com>
Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
* remove dangerous loop

* limit iterations of dangerous loop

* reintegrate last time frame storage item

* wip

* benchmark manual close and open

* fix stall test

* emit event and log for recovery time frame

* add tests

* add trailing comma

* Update zrml/prediction-markets/src/benchmarks.rs

Co-authored-by: Malte Kliemann <mail@maltekliemann.com>

* change should_be_closed condition

* Apply suggestions from code review

Co-authored-by: Malte Kliemann <mail@maltekliemann.com>

* change recursion limit line

* regard period not started yet

* add error tests

* correct benchmarks

* fix after merge and clippy

* use turbofish, add test checks

* remove manually open broken market

* correct errors and call index

* correct wrong error name

* correct position of call index

* correct error position

* update copyrights

* fix after merge

* Update zrml/prediction-markets/src/benchmarks.rs

Co-authored-by: Malte Kliemann <mail@maltekliemann.com>

* set market end for manual close

---------

Co-authored-by: Malte Kliemann <mail@maltekliemann.com>
Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
Reduce bencharm runs of Zeitgeist pallets

Running benchmarks of Zeitgeist pallets on the Zeitgeist reference machine currently takes four days.
…1235)

* Abstract `pool_exit` business logic into `do_*` function

* Add `force_pool_exit` and test

* Install call filters for zrml-swaps
…mutuel (#1223)

* Implement and test `bmul_bdiv_*`

* Use `bmul_bdiv_*` in pallets

* Update copyright
ci(Mergify): configuration update

Signed-off-by: Harald Heckmann <mail@haraldheckmann.de>
* Set in-progress when need and rerun CI in merge queue

---------

Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
* Avoid mergify deque

* Set review needed only shortly after Mergify commit
* Add tests to neo-swaps that check large buy/sell amounts at high liquidity

* Use new implementation of HydraDX's `exp`

* Add failure tests to neo-swaps's `math.rs`

* Fix formatting

* Update copyright notices

---------

Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
Copy link
Member

@Chralt98 Chralt98 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I have to admit that you cleaned up a lot of technical debt from me. So I love it, thanks for the learning experience!

Why don't you let the admin of the campaign asset define what the fee factor should look like? Ok, then users could spam transactions using the campaign asset. But if admins can create campaign assets out of thin air, then transactions could also be made on our chain for basically no cost, if the admin of the campaign asset is malicious. Just in general then: How does AssetHub solve this? I mean if users can create transactions, I assume fees are still paid in KSM or DOT then in order to prevent spamming transactions on-chain.

Fees are derived as native_fee * fee_multiplier * campaign_asset_supply / ztg_supply to scale properly in a sense that more campaign asset tokens do not lead to more possible transactions and that possible transactions are always 100 times less than what would be possible with ZTG

possible transactions are always 100 times less than what would be possible with ZTG

But the price of the underlying campaign asset is not known. So why this notion of having a relation to ZTG? Are the fees burned in ZTG or in campaign asset?

A fee multiplier is capped to max(fee_multiplier, BASE). This prevents infinite transactions as fee_multiplier * campaign_asset_supply / ztg_supply would just infinitely grow smaller.

I think with the current implementation of get_fee_factor_campaign_asset the fee factor can infinitely grow larger. campaign_asset_supply can be very large since you ensure ztg_supply / campaign_asset_supply < 100, which means if campaign_asset_supply grows to u128::MAX you would basically get u128::MAX / ztg_supply for the maximum fee factor, or am I wrong?

zrml/asset-router/src/tests/unbalanced.rs Show resolved Hide resolved
runtime/common/src/fees.rs Show resolved Hide resolved
runtime/common/src/fees.rs Outdated Show resolved Hide resolved
runtime/common/src/fees.rs Outdated Show resolved Hide resolved
runtime/common/src/fees.rs Outdated Show resolved Hide resolved
campaign_asset_supply.saturating_mul(fee_multiplier).bdiv(ztg_supply).map_err(
|_| {
TransactionValidityError::Invalid(InvalidTransaction::Custom(
CustomTxError::FeeConversionArith as u8,
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You might want to add a new error variant for identifying on the outer caller side, that the error occured here. You might call it FeeFactorArith.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

FeeConversionArith perfectly describes what is going on from my perspective. What you are suggesting here implies that we would create an unique error for every place in the code where an error is potentially thrown, even if another error already perfectly describes what is happening. Not going down that path 😁

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The reason I suggested this was that we once used the same error multiple times in the same function and therefore couldn't directly distinguish what has failed. In this case there are three possible places. But I think it's okay, since we can also distinguish where it was thrown ourselves to improve maintenance of errors on our side.

runtime/common/src/fees.rs Outdated Show resolved Hide resolved
if ztg_supply.saturating_div(campaign_asset_supply) >= fee_multiplier {
Ok(BASE)
} else {
campaign_asset_supply.saturating_mul(fee_multiplier).bdiv(ztg_supply).map_err(
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Shall FixedMulDiv be used here?

/// Performs fixed point multiplication and division, calculating `self * multiplier / divisor`.
pub trait FixedMulDiv
where
Self: Sized,
{
/// Calculates the fixed point product `self * multiplier / divisor` and rounds to the nearest
/// representable fixed point number.
fn bmul_bdiv(&self, multiplier: Self, divisor: Self) -> Result<Self, DispatchError>;
/// Calculates the fixed point product `self * multiplier / divisor` and rounds down.
fn bmul_bdiv_floor(&self, multiplier: Self, divisor: Self) -> Result<Self, DispatchError>;
/// Calculates the fixed point product `self * multiplier / divisor` and rounds up.
fn bmul_bdiv_ceil(&self, multiplier: Self, divisor: Self) -> Result<Self, DispatchError>;
}

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Assume the campaign_asset_supply is huge, then saturating_mul would lead to the biggest u128. Is the maximum campaign asset supply capped too?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The maximum campaign asset supply is not capped. I don't see any obvious issues with a supply of u128::MAX, as math seems to work anyways, fees are just reduced by up to CampaignAssetFeeMultiplier. If malicious behavior is detected council and technical committee can nuke the asset. Generally, it is probably advisable to assign admin accounts to either Zeitgeist or trusted accounts.
In regards to FixedMulDiv, I think bmul_bdiv is the wrong function here, because CampaignAssetFeeMultiplier has base 10 instead of BASE which bmul_bdiv requires.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One way to improve this, if we're interested in that, is to check for overflow when multiplying and divide first if the check is positive. Not sure if we care about that though.

@Chralt98 Chralt98 added s:revision-needed The pull requests must be revised and removed s:review-needed The pull request requires reviews labels Mar 28, 2024
Co-authored-by: Chralt <chralt.developer@gmail.com>
@mergify mergify bot added s:in-progress The pull requests is currently being worked on and removed s:revision-needed The pull requests must be revised labels Mar 28, 2024
@sea212
Copy link
Member Author

sea212 commented Mar 28, 2024

Why don't you let the admin of the campaign asset define what the fee factor should look like?

For the sake of simplicity (not having to maintain extra metadata), I decided to go with the current approach.

But the price of the underlying campaign asset is not known. So why this notion of having a relation to ZTG? Are the fees burned in ZTG or in campaign asset?

The fees are burned in campaign asset, but on the basis on the native fee, i.e. how much ZTG would have been paid. Essentially we need some way to determine how much campaign assets are burned, and I thought the given relationship is simple and effective because it scales with the total supply (users could have millions of campaign tokens, but pay thousands of fees per TX).

I think with the current implementation of get_fee_factor_campaign_asset the fee factor can infinitely grow larger. campaign_asset_supply can be very large since you ensure ztg_supply / campaign_asset_supply < 100, which means if campaign_asset_supply grows to u128::MAX you would basically get u128::MAX / ztg_supply for the maximum fee factor, or am I wrong?

You correctly defined the max value. Admin access to campaign assets should be given only to trusted accounts and limited by a specific amount of time. Council and TC might have to resolve during abusal.

@sea212 sea212 added s:review-needed The pull request requires reviews and removed s:in-progress The pull requests is currently being worked on labels Mar 29, 2024
@mergify mergify bot added s:in-progress The pull requests is currently being worked on and removed s:review-needed The pull request requires reviews labels Mar 29, 2024
@sea212 sea212 added s:review-needed The pull request requires reviews and removed s:in-progress The pull requests is currently being worked on labels Mar 29, 2024
@sea212 sea212 requested a review from Chralt98 March 29, 2024 09:12
@sea212 sea212 added s:in-progress The pull requests is currently being worked on and removed s:review-needed The pull request requires reviews labels Mar 29, 2024
@sea212 sea212 added s:review-needed The pull request requires reviews and removed s:in-progress The pull requests is currently being worked on labels Mar 29, 2024
@sea212 sea212 merged commit 6b1aef6 into sea212-new-asset-system Apr 2, 2024
7 of 12 checks passed
@sea212 sea212 deleted the sea212-new-asset-system-part-9 branch April 2, 2024 09:16
@sea212 sea212 added s:accepted This pull request is ready for merge and removed s:review-needed The pull request requires reviews labels Apr 2, 2024
@sea212 sea212 mentioned this pull request Apr 2, 2024
sea212 added a commit that referenced this pull request Apr 2, 2024
* New asset system - Separate asset types and add pallet-assets instances to runtime (#1177)

* Add new asset types

* Add custom assets to runtime

* Add market assets to runtime

* Add pallet_assets benchmark and weights

* Expose MarketAssets call enum

* Update todo comment to incluse issue number

* Add campaign assets instance to runtime

* Cargo fmt

* Taplo fmt

* Fix comments

Co-authored-by: Malte Kliemann <mail@maltekliemann.com>

* Adjust ForceOrigins

* Fix typo

* Update primitives/src/types.rs

Co-authored-by: Chralt <chralt.developer@gmail.com>

* Remove CombinatorialOutcome from PredictionMarketAsset

---------

Co-authored-by: Malte Kliemann <mail@maltekliemann.com>
Co-authored-by: Chralt <chralt.developer@gmail.com>

* New Asset System - Prepare extension of Asset Manager (#1181)

* Add new asset types

* Add custom assets to runtime

* Add market assets to runtime

* Add pallet_assets benchmark and weights

* Expose MarketAssets call enum

* Update todo comment to incluse issue number

* Add campaign assets instance to runtime

* Cargo fmt

* Taplo fmt

* Refine asset class types

* Use efficient asset types

* Add all variants to overarching Asset enum

* Make MarketId compactable

* Adjust SerdeWrapper

Soon to be deprecated

* Make Battery Station compileable

* Make Zeitgeist compileable

* Cleanup code

* Remove NewForeignAsset

Conversion to compact encoding implies massive migration effort

* Implement asset type conversions

* Add Currency asset class

* Remove deprecated SerdeWrapper

* Add Currencies asset class

Also renames existing CurrencyId to Assets

* Add scale codec index matching tests

* Add asset conversion tests

* Update docstring

* Improve assets module structure

* Update license

* Update copyright

* Repair errorneous merge

* Update license

* Remove CombinatorialOutcome

* Improve tests

* Improve variable names

* Prettify code

Co-authored-by: Malte Kliemann <mail@maltekliemann.com>

* Fix conversion CampaignAssetId <> CampaignAssetClass

* Reorder asset enum variants

* Update runtime/zeitgeist/src/parameters.rs

Co-authored-by: Chralt <chralt.developer@gmail.com>

* Improve CurrencyClass docstring

Co-authored-by: Malte Kliemann <mail@maltekliemann.com>

---------

Co-authored-by: Malte Kliemann <mail@maltekliemann.com>
Co-authored-by: Chralt <chralt.developer@gmail.com>

* New Asset System - Implement asset-router (#1189)

* Add new asset types

* Add custom assets to runtime

* Add market assets to runtime

* Add pallet_assets benchmark and weights

* Expose MarketAssets call enum

* Update todo comment to incluse issue number

* Add campaign assets instance to runtime

* Cargo fmt

* Taplo fmt

* Refine asset class types

* Use efficient asset types

* Add all variants to overarching Asset enum

* Make MarketId compactable

* Adjust SerdeWrapper

Soon to be deprecated

* Make Battery Station compileable

* Make Zeitgeist compileable

* Cleanup code

* Remove NewForeignAsset

Conversion to compact encoding implies massive migration effort

* Implement asset type conversions

* Add Currency asset class

* Remove deprecated SerdeWrapper

* Add Currencies asset class

Also renames existing CurrencyId to Assets

* Add scale codec index matching tests

* Add asset conversion tests

* Update docstring

* Improve assets module structure

* Update license

* Create asset-router pallet scaffold

* Start implementing all traits

* Implement MultiCurrency partially for asset-router

* Implement MultiCurrency for asset-router

* Implement MultiCurrencyExtended

* MultiLockableCurrency

* Implement MultiReservableCurrency

* Implement NamedMultiReservableCurrency

* Fix runtime

* Integrate asset-router in runtime

* Fix a couple of bugs

* Prepare asset-router test environment

* Start MultiCurrency test impl

* Complete MultiCurrency tests

* Add MultiCurrencyExtended tests

* Implement MultiReserveableCurrency tests

* Implement NamedMultiReserveableCurrency tests

* Implement MultiLockableCurrency tests

* Improve test structure

* Undo unnecessary change

* Format code

* Implement fungibles::{Create, Destroy, Inspect}

* Remove comment

* Add tests for Inspect impl

* Add tests for Create impl

* Add tests for Destroy impl

* Make asset types configurable

* Use less restricitve traits for pm AssetManager

* Make project compilable

* Merge branch 'sea212-new-asset-system' into sea212-new-asset-system-part-3

* Update licenses

* Repair tests partially

* Comment out irrelevant test

* Partially satisfy Clippy

* Adjust XCM to use Currencies

* Adjust XCM to use Currencies (zeitgeist runtime)

* Adjust prediction markets tests

* Adjust neo-swaps mock

* Satisfy Clippy

* Format code

* Update licenses

* Remove pallet-asset benchmark helper from mock

* Format code

* Repair tests with runtime-benchmarks

* Format code

* Remove TODO comment

* Implement log for unhandled errors in asset-router

* Use log target

* Improve and prettify readmes

* Use assert_noop! in favor of asset_err!

Co-authored-by: Malte Kliemann <mail@maltekliemann.com>

* Make sea212 codeowner of zrml/asset-router

* Fix typo

* Rename variable

* Better abs() overflow handling

* Check Bob's balance in MultiCurrency tests

* Fix Create test for Currencies

* Improve test precision

* Verify total issuance via direct pallet invocation

* Implement Inspect for Currencies

* Satisfy Clippy

---------

Co-authored-by: Malte Kliemann <mail@maltekliemann.com>

* New Asset System - Add managed asset destruction (#1201)

* Add new asset types

* Add custom assets to runtime

* Add market assets to runtime

* Add pallet_assets benchmark and weights

* Expose MarketAssets call enum

* Update todo comment to incluse issue number

* Add campaign assets instance to runtime

* Cargo fmt

* Taplo fmt

* Refine asset class types

* Use efficient asset types

* Add all variants to overarching Asset enum

* Make MarketId compactable

* Adjust SerdeWrapper

Soon to be deprecated

* Make Battery Station compileable

* Make Zeitgeist compileable

* Cleanup code

* Remove NewForeignAsset

Conversion to compact encoding implies massive migration effort

* Implement asset type conversions

* Add Currency asset class

* Remove deprecated SerdeWrapper

* Add Currencies asset class

Also renames existing CurrencyId to Assets

* Add scale codec index matching tests

* Add asset conversion tests

* Update docstring

* Improve assets module structure

* Update license

* Create asset-router pallet scaffold

* Start implementing all traits

* Implement MultiCurrency partially for asset-router

* Implement MultiCurrency for asset-router

* Implement MultiCurrencyExtended

* MultiLockableCurrency

* Implement MultiReservableCurrency

* Implement NamedMultiReservableCurrency

* Fix runtime

* Integrate asset-router in runtime

* Fix a couple of bugs

* Prepare asset-router test environment

* Start MultiCurrency test impl

* Complete MultiCurrency tests

* Add MultiCurrencyExtended tests

* Implement MultiReserveableCurrency tests

* Implement NamedMultiReserveableCurrency tests

* Implement MultiLockableCurrency tests

* Improve test structure

* Undo unnecessary change

* Format code

* Implement fungibles::{Create, Destroy, Inspect}

* Remove comment

* Add tests for Inspect impl

* Add tests for Create impl

* Add tests for Destroy impl

* Make asset types configurable

* Use less restricitve traits for pm AssetManager

* Make project compilable

* Create volatile assets in PM

* Start adjustment of PM tests

* Add ManagedDestroy trait

* Implement managed_destroy in asset-router

* Implement ManagedDestroy trait

* Implement on_idle asset destruction

* Finalize managed asset destruction

* Finalize managed asset destruction

* Handle duplicate destruction attempts

* Fix reverse logic

* Add managed destroy add asset test

* Add managed destroy multi add asset test

* Add destroy all assets on_idle tests

* Complete managed destroy tests

* Update AssetRouter config in runtime

* Repair PM mock

* Satisfy Clippy

* Use modified pallet-assets

* Use modified pallet-assets

The modified variant provides an additional trait and Config type, that are used to automate asset destruction

* Remove comments

* Remove empty line

* Mostly improve asset destruction code

* Finalize on_idle hook and adjust tests

* Improve project structure

* Rename files

* Add tests for custom types

* Satisfy CI

* Apply suggestions from code review

Co-authored-by: Chralt <chralt.developer@gmail.com>

* Use common function for impl ManagedDestroy

* Improve AssetInDestruction ordering & add test

* Format code

* Use require_transactional

* Use ensure!

* Use AssetIndestructible error and fix tests

* Don't execute on_idle if weight not enough to read storage

* Use DestroyApprovalWeight for approval destruction

Co-authored-by: Malte Kliemann <mail@maltekliemann.com>

* Reduce available weight to 0 when destroying accounts/approvals errors.

Co-authored-by: Malte Kliemann <mail@maltekliemann.com>

* Use more precise return type for handle_destroy functions

* Fix destruction state machine loop condition

Co-authored-by: Malte Kliemann <mail@maltekliemann.com>

* Log warning / test assert when loop safety guard is triggered

* Add outer asset destruction loop safety guard

* Revert loop condition overwrite

* Elaborate on managed asset destruction in readme

* Improved weight guards + tests

Also reduce the maximum storage proof size required, as it previously was 1/8 of the maximum PoV size per block on Polkadot

* Test that approvals are also destroyed

* Use constant for min extra computation time in on_idle

* Add more tests

* Add and use unreachable_non_terminating macro

* Refractor code

* Satisfy Clippy

* Fix unreachable_non_terminating macro

---------

Co-authored-by: Chralt <chralt.developer@gmail.com>
Co-authored-by: Malte Kliemann <mail@maltekliemann.com>

* New Asset System - Move lazy migration into asset-router (#1256)

* Merge Old* and New* asset variants

* Partially integrate lazy migration routing

* Integrate lazy migration routing

* Fix ExistentialDeposit mapping & Satisfy Clippy

* Improve code style

Co-authored-by: Chralt <chralt.developer@gmail.com>

* Improve style

Co-authored-by: Malte Kliemann <mail@maltekliemann.com>

* Improve style

Co-authored-by: Malte Kliemann <mail@maltekliemann.com>

* Add frame-support/try-runtime to asset-router

* Rename multicurrency* files to multi_currency*

* Test old-outcome currency branch

* Use reserved_balance_named in tests

* Including duplicate asset routing info in readme

* Update readme

---------

Co-authored-by: Chralt <chralt.developer@gmail.com>
Co-authored-by: Malte Kliemann <mail@maltekliemann.com>

* New asset system - Merge main (#1258)

* New Asset System - Add Sub Asset Classes and extended Market functionality (#1281)

* Add sub asset classes, extend Market, provide market transition trait

* Update asset-router

* Correct ParimutuelAssetClass docstring

* Add more docstrings to Market impl

* Add tests for MarketTransitionApi

* Implement try_into failure tests for assets

* Fix typo

* Add docstring to public func of Market struct

* New Asset System - Integrate into Prediction Markets and Parimutuel (#1282)

* Add sub asset classes, extend Market, provide market transition trait

* Update asset-router

* Integrate asset system into prediction-market, market-commons and parimutuel

- Market commons now uses the BaseAsset class for base assets
- Prediction markets now creates and destroys MarketAssets only if market.is_redeemable
- Prediction markets now calls OnStateTransition when transitioning it's state
- Parimutuel markets now implements StateTransitionApi
- Parimutuel markets now properly creates and destroys ParimutuelShares

* Apply suggestions from code review

Co-authored-by: Malte Kliemann <mail@maltekliemann.com>

* Use workspace for impl-trait-for-tuples

* Add on_activation and on_resolution weight to parimutuel

* Fix typo

* Prepare OnStateTransition tests

* Add OnStateTransition tests

* Update zrml/parimutuel/src/lib.rs

Co-authored-by: Chralt <chralt.developer@gmail.com>

---------

Co-authored-by: Malte Kliemann <mail@maltekliemann.com>
Co-authored-by: Chralt <chralt.developer@gmail.com>

* New Asset System - Integrate into remaining pallets (#1284)

* Add sub asset classes, extend Market, provide market transition trait

* Update asset-router

* Integrate asset system into prediction-market, market-commons and parimutuel

- Market commons now uses the BaseAsset class for base assets
- Prediction markets now creates and destroys MarketAssets only if market.is_redeemable
- Prediction markets now calls OnStateTransition when transitioning it's state
- Parimutuel markets now implements StateTransitionApi
- Parimutuel markets now properly creates and destroys ParimutuelShares

* Integrate new asset system into remaining pallets

* Update zrml/neo-swaps/src/tests/join.rs

Co-authored-by: Malte Kliemann <mail@maltekliemann.com>

---------

Co-authored-by: Malte Kliemann <mail@maltekliemann.com>

* New Asset System - Integrate into Orderbook/Court/GlobalDisputes (#1283)

* Add sub asset classes, extend Market, provide market transition trait

* Update asset-router

* Integrate asset system into prediction-market, market-commons and parimutuel

- Market commons now uses the BaseAsset class for base assets
- Prediction markets now creates and destroys MarketAssets only if market.is_redeemable
- Prediction markets now calls OnStateTransition when transitioning it's state
- Parimutuel markets now implements StateTransitionApi
- Parimutuel markets now properly creates and destroys ParimutuelShares

* Implement support for non-reservable assets in orderbook

* Format

* Fix unfillable / unremovable order bug

Co-authored-by: Chralt <chralt.developer@gmail.com>

* Check reserved balanced named

* Log when reserve is less than expected

---------

Co-authored-by: Chralt <chralt.developer@gmail.com>

* New Asset System - Integrate into XCM (#1287)

* Merge release v0.4.2 (#1174)

* Update versions (#1168)

* Add updated weights from reference machine (#1169)

* Add license header

Co-authored-by: Chralt <chralt.developer@gmail.com>

---------

Co-authored-by: Chralt <chralt.developer@gmail.com>

* Remove migrations (#1180)

* Filter admin functions for main-net (#1190)

filter admin functions for main-net

* Add debug assertions for slashes and reserves (#1188)

* add debug assertions for missing slashes

* place debug_assert for unreserves

* Add some verify checks to court (#1187)

add some verify checks to court

* Bypass battery stations contracts call filter for court, parimutuel, order book markets (#1185)

update contracts call filter

* Fix failing court benchmark (#1191)

* fix court assertion for resolve_at

* remove unnecessary variable

* mirror mock and actual impl for DisputeResolution

* Implement trusted market close (#1184)

* implement trusted market close

* remove unnecessary benchmark helper function

* Update zrml/prediction-markets/src/lib.rs

Co-authored-by: Malte Kliemann <mail@maltekliemann.com>

* remove unnecessary function

* check market end

* check auto close

* add invalid market status test

---------

Co-authored-by: Malte Kliemann <mail@maltekliemann.com>

* Modify court events for indexer (#1182)

* modify events for indexer

* gracefully handle panicers

* handle binary search by key error

* improve style

* Ensure MinBetSize after fee (#1193)

* handle own existential deposit errors

* use require_transactional

* correct benchmark and test min bet size amounts

* Replace fixed math operations with traited versions (#1149)

* Replace `bmul` and `bdiv` with traited versions

* Restructure directories

* Replace `saturating_*` from neo-swaps

* Fix formatting

* Restructure zrml-swaps math

* Implement and test `b*`

* Fix formatting

* Use new math in orderbook-v1

* Replace checked multiplication with new math

* Use correct rounding in neo-swaps

* Add docs

* Update licenses

* Remove `fixed` module from `primitives`

* Fix formatting

* Update primitives/src/math/fixed.rs

Co-authored-by: Harald Heckmann <mail@haraldheckmann.de>

---------

Co-authored-by: Harald Heckmann <mail@haraldheckmann.de>

* Add env_logger and add force-debug feature (#1205)

* add env_logger and add force-debug feature

* taplo fmt, fix copyrights

* Update zrml/styx/src/mock.rs

Co-authored-by: Malte Kliemann <mail@maltekliemann.com>

* Update zrml/rikiddo/src/mock.rs

Co-authored-by: Malte Kliemann <mail@maltekliemann.com>

* update comment to clarify logging

---------

Co-authored-by: Malte Kliemann <mail@maltekliemann.com>

* Inflate defensively (#1195)

* inflate defensively

* add tests

* Update zrml/court/src/tests.rs

Co-authored-by: Malte Kliemann <mail@maltekliemann.com>

* fix test

* fix test name

---------

Co-authored-by: Malte Kliemann <mail@maltekliemann.com>

* Maintain order book (#1183)

* integrate market creator fees into orderbook

* edit tests

* update tests

* modify tests

* avoid order side

* Update primitives/src/traits/distribute_fees.rs

Co-authored-by: Malte Kliemann <mail@maltekliemann.com>

* remove asset and account from get_fee api call

* take base asset fees from fill_order

* adjust orderbook for taking fees in fill_order

* adjust without order side for fill_order

* adapt to avoid concept of order side

* adapt benchmarks, tests and weights, restructure

* use DispatchResult

* remove unused import

* do not adjust maker amount for place_order

* correct fuzz of orderbook

* check if maker_amount is zero

* fix order book name in benchmarks

* use remove instead of cancel order book

* correct order book test names

* update READMEs

* fmt

* add tests

* use minimum balance as min order size

* Update zrml/orderbook/README.md

Co-authored-by: Malte Kliemann <mail@maltekliemann.com>

* Update zrml/orderbook/README.md

Co-authored-by: Malte Kliemann <mail@maltekliemann.com>

* Apply suggestions from code review

Co-authored-by: Malte Kliemann <mail@maltekliemann.com>

* prettier orderbook md

* remove comments from benchmarks

* fix tests and benchmarks readibility

* use order book instead of orderbook

* clarify error message

* clarify comments

* rename is to ensure

* error for repatriate

* fix unnecessary clone

* correct mocks behaviour

* improve test

* improve test of near full fill error

* use turbofish syntax

* add filled_maker_amount to event

* split tests

* combine two functions, add docs

* abandon get_fees

* fix order book tests and mock

* remove check for impossible behaviour

* fix toml and benchs

* prepare migration

* add migration for order structure

* return zero fees if transfer fails

* delete unnecessary assert

* fix naming

* fix naming the second

* fix maker fill description

* add scoring rule check to remove order

* fix post_upgrade

* fix terminology

* Update zrml/orderbook/src/migrations.rs

Co-authored-by: Malte Kliemann <mail@maltekliemann.com>

* use storage root check in migration test

* Update zrml/orderbook/src/lib.rs

Co-authored-by: Harald Heckmann <mail@haraldheckmann.de>

* Update zrml/orderbook/src/lib.rs

Co-authored-by: Harald Heckmann <mail@haraldheckmann.de>

* Update zrml/orderbook/src/lib.rs

Co-authored-by: Harald Heckmann <mail@haraldheckmann.de>

* delete debug_assert

---------

Co-authored-by: Malte Kliemann <mail@maltekliemann.com>
Co-authored-by: Harald Heckmann <mail@haraldheckmann.de>

* Implement AMM 2.0 (#1173)

* Replace `bmul` and `bdiv` with traited versions

* Restructure directories

* Replace `saturating_*` from neo-swaps

* Fix formatting

* Restructure zrml-swaps math

* Implement and test `b*`

* Fix formatting

* Use new math in orderbook-v1

* Replace checked multiplication with new math

* Use correct rounding in neo-swaps

* Add docs

* Update licenses

* Remove `fixed` module from `primitives`

* Fix formatting

* .

* Rewrite math functions

* Remove training wheels

* Fix docs.pdf

* Fix quotes

* Add tests for buying

* Add tests for selling and improve error names

* Update docs

* Check adjusted amount in for numerical bounds

* Remove unused implementations

* Adjust docs

* Add stress test exploring various scenarios

* Add swap fees to stress test

* Add underscore separators

* Clean up

* Benchmark `buy` as function of `asset_count`

* Update benchmarks

* Clippy fix

* Fix benchmark tests

* Update benchmarks of zrml-prediction-markets

* Fix broken comment

* Add comment explaining benchmark spot prices

* Use clearer constants for `amount_in` in tests

* Update zrml/neo-swaps/src/traits/pool_operations.rs

Co-authored-by: Chralt <chralt.developer@gmail.com>

* Fix botched merge

* Fix merge

* Update benchmarks

* Update zrml/neo-swaps/docs/docs.tex

Co-authored-by: Harald Heckmann <mail@haraldheckmann.de>

* Apply suggestions from code review

Co-authored-by: Harald Heckmann <mail@haraldheckmann.de>

* Rename `Fixed` and clean up

* Hotfix exponential function and extend tests

* Complete math test suite

* Fix broken sentence

* Remove unused imports

* Extend `ln` test cases

* Merge & fix formatting

---------

Co-authored-by: Chralt <chralt.developer@gmail.com>
Co-authored-by: Harald Heckmann <mail@haraldheckmann.de>

* Implement Liquidity Tree (#1178)

* Replace `bmul` and `bdiv` with traited versions

* Restructure directories

* Replace `saturating_*` from neo-swaps

* Fix formatting

* Restructure zrml-swaps math

* Implement and test `b*`

* Fix formatting

* Use new math in orderbook-v1

* Replace checked multiplication with new math

* Use correct rounding in neo-swaps

* Add docs

* Update licenses

* Remove `fixed` module from `primitives`

* Fix formatting

* Add liquidity tree draft

* Fix compiler error in draft

* Clean up `propagate_fees`

* Add docs

* Reorganize

* Clean up, add max iterations

* Remove migrations

* Prepare switch to bounded vector

* Use `BoundedVec`

* Use bounded `BTreeMap` and insert `LiquidityTree` into neo-swaps

* Resolve TODO

* Clean up tests

* Add migration and fix clippy errors

* Make tree depth a generic

* Make tree depth a config parameter

* Update runtime complexities

* Add benchmarking utilities

* Fix runtime complexity for `deploy_pool`

* Add missing lazy propagation

* Fix comment

* Fix error type

* Add `join` benchmarking and fix a bug in `LiquidityTree`

* Clean up benchmarks

* Fix clippy issues

* Remove unnecessary type hint

* Fix bugs in liquidity tree

* Fix comments

* Some fixes in benchmarks

* Implement `BenchmarkHelper`

* Update benchmarks to use the LT

* Clean up and format

* Add testing framework for liquidity trees

* Add first extensive test and fix a bug

* Add more tests

* Clean up test

* Add news tests and use better numerics for ratio calculations

* Make docs more explicit

* Add tests for `exit`

* Add tests for deposit fees

* Add tests for getters

* Clean up tests some more

* Finalize liquidity tree tests

* Clean up comments

* Introduce exit fees

* Rewrite `exit_works`

* Fix liquidity parameter calculation

* Make test a bit more complex

* Test liquidity shares

* Clean up tests

* Update test for destruction

* Enhance `exit_destroys_pool` test

* More cleanup

* Add test for full tree

* Add tests for `join`

* Improve test

* Test withdrawal

* Clean up the test

* Add test for noop

* Add minimum relative liquidity

* Verify that buys deduct the correct amount of fees

* Add last tests

* Add notes about the liquidity tree

* Fix benchmarks

* Fix clippy errors

* Fix benchmarks

* Do more work on benchmarks

* Fix benchmarks, deduce max tree depth

* Remove already solved TODO

* Document macros

* Remove TODO (not a good idea to edit LaTeX docs now)

* Fix `bmul_bdiv`

* Make `bmul_bdiv_*` not implemented

* Double-check that there's a non-zero check for `ratio`

* Fix formatting

* Fix taplo formatting

* Remove TODO

* Remove TODOs and fix documents

* Update primitives/src/math/fixed.rs

Co-authored-by: Chralt <chralt.developer@gmail.com>

* Mark `SoloLp` as deprecated

* Update zrml/neo-swaps/README.md

Co-authored-by: Chralt <chralt.developer@gmail.com>

* Make `bmul_bdiv` a little more idiomatic

* Update zrml/neo-swaps/README.md

Co-authored-by: Chralt <chralt.developer@gmail.com>

* Update zrml/neo-swaps/README.md

Co-authored-by: Chralt <chralt.developer@gmail.com>

* Update zrml/neo-swaps/README.md

Co-authored-by: Chralt <chralt.developer@gmail.com>

* Update zrml/neo-swaps/README.md

Co-authored-by: Chralt <chralt.developer@gmail.com>

* Update zrml/neo-swaps/README.md

Co-authored-by: Chralt <chralt.developer@gmail.com>

* Update zrml/neo-swaps/README.md

Co-authored-by: Chralt <chralt.developer@gmail.com>

* Update zrml/neo-swaps/README.md

Co-authored-by: Chralt <chralt.developer@gmail.com>

* Rewrite and format `README.md`

* Fix comment about existential deposit

* Remove FIXME

* Add a check against misconfiguration of the pallet

* Fix field docstrings

* Add comment about `assert_ok_with_transaction`

* Update zrml/neo-swaps/src/mock.rs

Co-authored-by: Chralt <chralt.developer@gmail.com>

* Format code

* Fix comment

* Prettify extrinsic calls in benchmarks

* Improve code quality of `assert_pool_state!`

* Extend comment about order of abandoned nodes

* Clarify the meaning of "leaf" in `is_leaf`

* Rename `index_maybe` to `opt_index`

* Add unexpected storage overflow error for bounded objects

* Rename `UnclaimedFees` to `UnwithdrawnFees`

* Fix documentation

* Use enum to signal update direction in `update_descendant_stake`

* Add verification to `join_*` benchmarks

* Improve documentation

* Use builtin log

* Remove illegal token from `README.md`

* Update zrml/neo-swaps/src/types/liquidity_tree.rs

Co-authored-by: Chralt <chralt.developer@gmail.com>

* Fix unintentional doctest

* Improve `mutate_children`

* Add helpful comment

* Update zrml/neo-swaps/src/types/liquidity_tree.rs

Co-authored-by: Chralt <chralt.developer@gmail.com>

* Fix migration

* Fix balances in parachain mock

* use PartialEqNoBound and CloneNoBound for tree

* Fix formatting

* Make `debug_assert!` more clear

* Redesign node assignment

* Clean up comments

* Add some storage overflow errors

* Introduce `LiquidityTreeChildIndices`

* Remove outdated docs

* Rename `update_descendant_stake`

* Remove `Default` usage

* Make liquidity tree types `pub(crate)` where possible

* Make all fields of `Node` only `pub(crate)`

* Make `Node<T>` an associated type of `LiquidityTreeHelper`

* Update zrml/neo-swaps/src/lib.rs

Co-authored-by: Harald Heckmann <mail@haraldheckmann.de>

* Fix comment

* Update zrml/neo-swaps/src/types/liquidity_tree.rs

Co-authored-by: Harald Heckmann <mail@haraldheckmann.de>

* Fix tests

* Prettify `path_to_node`

* Add max iterations to `path_to_node`

* Add test for complex liquidity tree interactions

* Improve documentation of `LiquidityTreeChildIndices`

* Reorganize crate structure

* Update weights and fix formatting

---------

Co-authored-by: Chralt <chralt.developer@gmail.com>
Co-authored-by: Chralt98 <chralt98@gmail.com>
Co-authored-by: Harald Heckmann <mail@haraldheckmann.de>

* Improve XCM fee handling (#1225)

* Fix padding of foreign fees in Zeitgeist runtime

* Fix padding of foreign fees in Battery Station runtime

* Format

* Update copyright

* Use adjusted_balance function

* Remove court and global disputes from call filter for the main-net (#1226)

* remove from call filter

* update copyright

* Sunset old AMMs and their pools (#1197)

* Replace `bmul` and `bdiv` with traited versions

* Restructure directories

* Replace `saturating_*` from neo-swaps

* Fix formatting

* Restructure zrml-swaps math

* Implement and test `b*`

* Fix formatting

* Use new math in orderbook-v1

* Replace checked multiplication with new math

* Use correct rounding in neo-swaps

* Add docs

* Update licenses

* Remove `fixed` module from `primitives`

* Fix formatting

* .

* Rewrite math functions

* Remove training wheels

* Fix docs.pdf

* Fix quotes

* Add tests for buying

* Add tests for selling and improve error names

* Update docs

* Check adjusted amount in for numerical bounds

* Remove unused implementations

* Adjust docs

* Add stress test exploring various scenarios

* Add swap fees to stress test

* Add underscore separators

* Clean up

* Benchmark `buy` as function of `asset_count`

* Update benchmarks

* Clippy fix

* Fix benchmark tests

* Update benchmarks of zrml-prediction-markets

* Fix broken comment

* Add comment explaining benchmark spot prices

* Use clearer constants for `amount_in` in tests

* Update zrml/neo-swaps/src/traits/pool_operations.rs

Co-authored-by: Chralt <chralt.developer@gmail.com>

* Fix botched merge

* Fix merge

* Update benchmarks

* Remove `pool_*_subsidy`

* Remove `distribute_pool_share_rewards`

* Remove `end_subsidy_phase`

* Remove `destroy_pool_in_subsidy_phase`

* Remove `MinSubsidy*`

* Remove `SubsidyProviders`

* Remove `start_subsidy`

* Rewrite `create_pool`

* Rewrite `swap_exact_amount_in`

* Rewrite `swap_exact_amount_out`

* Rewrite utility functions

* Remove Rikiddo from weight calculation

* Remove Rikiddo from zrml-swaps

* Remove unused errors

* Remove `ScoringRule::Rikiddo...`

* Remove `*SubsidyPeriod`

* Remove Rikiddo-related storage and events

* Remove automatic opening of pools

* Remove `open_pool` from prediction-markets

* Remove `Swaps::close_pool` from prediction-markets

* Remove `clean_up_pool` from prediction-markets

* Remove `clean_up_pool` from `Swaps` trait

* Remove CPMM deployment from prediction-markets

* Remove automatic arbitrage

* Move `market_account` back to prediction-markets

* Remove unused market states

* Fix fuzz tests

* Implement market migration

* Minor changes

* Fix migration behavior

* Remove creator fees from swaps

* Fix try-runtime

* Fix clippy issues

* Remove `LiquidityMining` from swaps

* Fix `get_spot_prices`

* Take first step to remove `MarketCommons` from swaps

* Remove `MarketCommons` from swaps

* Rewrite `PoolStatus`

* Move `Pool*` to swaps

* Use `Bounded*` types in `Pool`

* Finish swaps migration

* Add missing files

* Fix formatting and clippy errors

* Remove `pool_status.rs`

* Ignore doctests

* Fix fuzz tests

* Add prediciton-markets migration

* Test prediction-markets migration

* Finish tests of the market-commons migration

* Add migrations to runtime and fix various errors

* Clean up

* Clean up

* Format code

* Fix pool migration behavior

* Remove `MarketId` from swaps

* Fix formatting

* Fix formatting

* Remove `CPMM` and allow other scoring rules on Battery Station

* Update macros/Cargo.toml

Co-authored-by: Harald Heckmann <mail@haraldheckmann.de>

* Update primitives/src/traits/zeitgeist_asset.rs

Co-authored-by: Harald Heckmann <mail@haraldheckmann.de>

* Update zrml/market-commons/src/migrations.rs

Co-authored-by: Harald Heckmann <mail@haraldheckmann.de>

* Update zrml/swaps/src/migrations.rs

Co-authored-by: Harald Heckmann <mail@haraldheckmann.de>

* Update zrml/swaps/src/migrations.rs

Co-authored-by: Harald Heckmann <mail@haraldheckmann.de>

* Update zrml/prediction-markets/src/migrations.rs

Co-authored-by: Harald Heckmann <mail@haraldheckmann.de>

* Update zrml/market-commons/src/migrations.rs

Co-authored-by: Harald Heckmann <mail@haraldheckmann.de>

* Clean up TODOs/FIXMEs

* Update changelog

* Make more changes to changelog

* Clear zrml-swaps storage

* Remove cfg-if dependency

* Fix formatting

* Trigger CI

* Update copyright notices

* Update docs/changelog_for_devs.md

Co-authored-by: Chralt <chralt.developer@gmail.com>

* Make benchmark helper only available if feature flags are set

* Remove `ZeitgeistAsset` trait

* Remove preliminary benchmarks with more steps

* Format code

* Fix copyright notice

---------

Co-authored-by: Chralt <chralt.developer@gmail.com>
Co-authored-by: Harald Heckmann <mail@haraldheckmann.de>

* Merge release v0.4.3 (#1211)

* Use hotfixed `exp`

* Reorganize tests

* Fix formatting

* Bump versions to v0.4.3

* Update spec versions

* Add missing version bumps

* Format

* Update licenses

---------

Co-authored-by: Malte Kliemann <mail@maltekliemann.com>
Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>

* Reduce `market_status_manager` aka `on_initialize` iterations (#1160)

* remove dangerous loop

* limit iterations of dangerous loop

* reintegrate last time frame storage item

* wip

* benchmark manual close and open

* fix stall test

* emit event and log for recovery time frame

* add tests

* add trailing comma

* Update zrml/prediction-markets/src/benchmarks.rs

Co-authored-by: Malte Kliemann <mail@maltekliemann.com>

* change should_be_closed condition

* Apply suggestions from code review

Co-authored-by: Malte Kliemann <mail@maltekliemann.com>

* change recursion limit line

* regard period not started yet

* add error tests

* correct benchmarks

* fix after merge and clippy

* use turbofish, add test checks

* remove manually open broken market

* correct errors and call index

* correct wrong error name

* correct position of call index

* correct error position

* update copyrights

* fix after merge

* Update zrml/prediction-markets/src/benchmarks.rs

Co-authored-by: Malte Kliemann <mail@maltekliemann.com>

* set market end for manual close

---------

Co-authored-by: Malte Kliemann <mail@maltekliemann.com>
Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>

* Update style guide to streamline reviews (#1228)

* Reduce benchmark runs of Zeitgeist pallets (#1233)

Reduce bencharm runs of Zeitgeist pallets

Running benchmarks of Zeitgeist pallets on the Zeitgeist reference machine currently takes four days.

* Set inflation to more than zero for a full benchmark of handle_inflation (#1234)

Update benchmarks.rs

* Implement `force_pool_exit` and disable other zrml-swaps functions (#1235)

* Abstract `pool_exit` business logic into `do_*` function

* Add `force_pool_exit` and test

* Install call filters for zrml-swaps

* Implement and test `bmul_bdiv_*`; use in zrml-orderbook and zrml-parimutuel  (#1223)

* Implement and test `bmul_bdiv_*`

* Use `bmul_bdiv_*` in pallets

* Update copyright

* Utilize Merigify's Merge Queue (#1243)

ci(Mergify): configuration update

Signed-off-by: Harald Heckmann <mail@haraldheckmann.de>

* Set in-progress when needed and rerun CI in merge queue (#1244)

* Set in-progress when need and rerun CI in merge queue

---------

Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>

* Avoid mergify dequeue (#1245)

* Avoid mergify deque

* Set review needed only shortly after Mergify commit

* Extend neo-swaps tests and clean up `math.rs` (#1238)

* Add tests to neo-swaps that check large buy/sell amounts at high liquidity

* Use new implementation of HydraDX's `exp`

* Add failure tests to neo-swaps's `math.rs`

* Fix formatting

* Update copyright notices

---------

Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>

* Remove migrations and dead code (#1241)

Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>

* Reorganize prediction-market tests (#1242)

* Rename `tests.rs` to `old_tests.rs` to avoid naming conflicts

* Move `buy_complete_set` tests to new tests

* Clean up `buy_complete_set` tests

* Extract `sell_complete_set_tests`

* Clean up `sell_complete_set` tests

* Extract `admin_move_market_to_closed` tests

* Extract `create_market` tests

* Extract `admin_move_market_to_resolved` tests

* Remove superfluous test

* Extract more `create_market` tests

* Extract `approve_market` tests

* Extract `edit_market` tests

* Extract `edit_market` tests

* Add `on_market_close` tests

* Extract `manually_close_market` tests

* Extract `on_initialize` tests

* Extract `report` tests

* Extract `dispute` tests

* Extract `schedule_early_close` tests

* Extract `dispute_early_close` tests

* Extract `reject_early_close` tests

* Extract more `dispute` tests

* Extract `close_trusted_market` tests

* Extract `start_global_dispute` tests

* Extract `redeem_shares` tests and add missing tests

* Extract `on_resolution` and additional `redeem_shares` tests

* Move integration tests into new test module

* Automatically set block to `1` at the start of test

* Replace `crate::Config` with `Config`

* Access constant through `Config`

* Add TODOs for missing execution paths

* Fix formatting

---------

Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>

* Improve fee payment management (#1246)

* Improve fee payment management

* Make code compileable

* Do not remit TX fees for redeem_shares

Co-authored-by: Malte Kliemann <mail@maltekliemann.com>

---------

Co-authored-by: Malte Kliemann <mail@maltekliemann.com>
Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>

* Fix Rust and Discord badge (#1247)

Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>

* Fix neo-swaps doc strings (#1250)

* Improve `SellExecuted` documentation

* Clean up math in comments and doc strings

* Fix formatting

* Adjust style guide (loops) and add unreachable macro (#1252)

* Adjust style guide (loops) and add unreachable macro

* Add macros module to lib.rs

* Update docs/STYLE_GUIDE.md

Co-authored-by: Malte Kliemann <mail@maltekliemann.com>

* Move macro to zeitgeist-macros and add examples

---------

Co-authored-by: Malte Kliemann <mail@maltekliemann.com>

* Merge Old* and New* asset variants

* Partially integrate lazy migration routing

* Integrate lazy migration routing

* Fix ExistentialDeposit mapping & Satisfy Clippy

* Remove primitives/macros

* Filter certain asset destroy calls (they're managed)

* Integrate asset destruction into prediction markets

* Add BaseAssetClass

* Update prediction-markets & market-commons

* Update authorized

* Update liquidity-mining

* Update simple-disputes

* Update parimutuels (wip)

* Move functions into market struct and properly delete assets

* Add ParimutuelAssetClass

* Add parimutuel.rs

* Remove duplicate code

* Adjust asset type and managed destroy after refund in parimutuels

* Add MarketTransitionApi

This will allow prediction-markets to signal other pallets that state transitions happened

* Add MarketTransitionApi

* Implement MarketTransitionApi for Parimutuels

* Partially implement asset creation/destruction in parimutuels

* Add all asset creation / destruction tests to parimutuels

* Adjust Court

* Update global-disputes

* Update swaps

* Update neo-swaps

* Integrate OnStateTransition hooks into prediction-markets

* Use proper state transition weights

* Make cargo check succeed

* Partially update orderbook

* Update orderbook

* Update orderbook

* Finalize orderbook update

* Improve style

* Add XcmAssetClass

* Add sub asset classes, extend Market, provide market transition trait

* Update asset-router

* Integrate asset system into prediction-market, market-commons and parimutuel

- Market commons now uses the BaseAsset class for base assets
- Prediction markets now creates and destroys MarketAssets only if market.is_redeemable
- Prediction markets now calls OnStateTransition when transitioning it's state
- Parimutuel markets now implements StateTransitionApi
- Parimutuel markets now properly creates and destroys ParimutuelShares

* Implement support for non-reservable assets in orderbook

* Integrate new asset system into Battery Station XCM

* Integrate new asset system into Zeitgeist XCM

* Fix conditional import

* Format

* Fix unfillable / unremovable order bug

Co-authored-by: Chralt <chralt.developer@gmail.com>

* Make compileable

* Resolve one merge conflict

* Format

* Satisfy Clippy

---------

Signed-off-by: Harald Heckmann <mail@haraldheckmann.de>
Co-authored-by: Chralt <chralt.developer@gmail.com>
Co-authored-by: Malte Kliemann <mail@maltekliemann.com>
Co-authored-by: Chralt98 <chralt98@gmail.com>
Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>

* New Asset System - Enable fee payment for CampaignAssets (#1289)

* Merge release v0.4.2 (#1174)

* Update versions (#1168)

* Add updated weights from reference machine (#1169)

* Add license header

Co-authored-by: Chralt <chralt.developer@gmail.com>

---------

Co-authored-by: Chralt <chralt.developer@gmail.com>

* Remove migrations (#1180)

* Filter admin functions for main-net (#1190)

filter admin functions for main-net

* Add debug assertions for slashes and reserves (#1188)

* add debug assertions for missing slashes

* place debug_assert for unreserves

* Add some verify checks to court (#1187)

add some verify checks to court

* Bypass battery stations contracts call filter for court, parimutuel, order book markets (#1185)

update contracts call filter

* Fix failing court benchmark (#1191)

* fix court assertion for resolve_at

* remove unnecessary variable

* mirror mock and actual impl for DisputeResolution

* Implement trusted market close (#1184)

* implement trusted market close

* remove unnecessary benchmark helper function

* Update zrml/prediction-markets/src/lib.rs

Co-authored-by: Malte Kliemann <mail@maltekliemann.com>

* remove unnecessary function

* check market end

* check auto close

* add invalid market status test

---------

Co-authored-by: Malte Kliemann <mail@maltekliemann.com>

* Modify court events for indexer (#1182)

* modify events for indexer

* gracefully handle panicers

* handle binary search by key error

* improve style

* Ensure MinBetSize after fee (#1193)

* handle own existential deposit errors

* use require_transactional

* correct benchmark and test min bet size amounts

* Replace fixed math operations with traited versions (#1149)

* Replace `bmul` and `bdiv` with traited versions

* Restructure directories

* Replace `saturating_*` from neo-swaps

* Fix formatting

* Restructure zrml-swaps math

* Implement and test `b*`

* Fix formatting

* Use new math in orderbook-v1

* Replace checked multiplication with new math

* Use correct rounding in neo-swaps

* Add docs

* Update licenses

* Remove `fixed` module from `primitives`

* Fix formatting

* Update primitives/src/math/fixed.rs

Co-authored-by: Harald Heckmann <mail@haraldheckmann.de>

---------

Co-authored-by: Harald Heckmann <mail@haraldheckmann.de>

* Add env_logger and add force-debug feature (#1205)

* add env_logger and add force-debug feature

* taplo fmt, fix copyrights

* Update zrml/styx/src/mock.rs

Co-authored-by: Malte Kliemann <mail@maltekliemann.com>

* Update zrml/rikiddo/src/mock.rs

Co-authored-by: Malte Kliemann <mail@maltekliemann.com>

* update comment to clarify logging

---------

Co-authored-by: Malte Kliemann <mail@maltekliemann.com>

* Inflate defensively (#1195)

* inflate defensively

* add tests

* Update zrml/court/src/tests.rs

Co-authored-by: Malte Kliemann <mail@maltekliemann.com>

* fix test

* fix test name

---------

Co-authored-by: Malte Kliemann <mail@maltekliemann.com>

* Maintain order book (#1183)

* integrate market creator fees into orderbook

* edit tests

* update tests

* modify tests

* avoid order side

* Update primitives/src/traits/distribute_fees.rs

Co-authored-by: Malte Kliemann <mail@maltekliemann.com>

* remove asset and account from get_fee api call

* take base asset fees from fill_order

* adjust orderbook for taking fees in fill_order

* adjust without order side for fill_order

* adapt to avoid concept of order side

* adapt benchmarks, tests and weights, restructure

* use DispatchResult

* remove unused import

* do not adjust maker amount for place_order

* correct fuzz of orderbook

* check if maker_amount is zero

* fix order book name in benchmarks

* use remove instead of cancel order book

* correct order book test names

* update READMEs

* fmt

* add tests

* use minimum balance as min order size

* Update zrml/orderbook/README.md

Co-authored-by: Malte Kliemann <mail@maltekliemann.com>

* Update zrml/orderbook/README.md

Co-authored-by: Malte Kliemann <mail@maltekliemann.com>

* Apply suggestions from code review

Co-authored-by: Malte Kliemann <mail@maltekliemann.com>

* prettier orderbook md

* remove comments from benchmarks

* fix tests and benchmarks readibility

* use order book instead of orderbook

* clarify error message

* clarify comments

* rename is to ensure

* error for repatriate

* fix unnecessary clone

* correct mocks behaviour

* improve test

* improve test of near full fill error

* use turbofish syntax

* add filled_maker_amount to event

* split tests

* combine two functions, add docs

* abandon get_fees

* fix order book tests and mock

* remove check for impossible behaviour

* fix toml and benchs

* prepare migration

* add migration for order structure

* return zero fees if transfer fails

* delete unnecessary assert

* fix naming

* fix naming the second

* fix maker fill description

* add scoring rule check to remove order

* fix post_upgrade

* fix terminology

* Update zrml/orderbook/src/migrations.rs

Co-authored-by: Malte Kliemann <mail@maltekliemann.com>

* use storage root check in migration test

* Update zrml/orderbook/src/lib.rs

Co-authored-by: Harald Heckmann <mail@haraldheckmann.de>

* Update zrml/orderbook/src/lib.rs

Co-authored-by: Harald Heckmann <mail@haraldheckmann.de>

* Update zrml/orderbook/src/lib.rs

Co-authored-by: Harald Heckmann <mail@haraldheckmann.de>

* delete debug_assert

---------

Co-authored-by: Malte Kliemann <mail@maltekliemann.com>
Co-authored-by: Harald Heckmann <mail@haraldheckmann.de>

* Implement AMM 2.0 (#1173)

* Replace `bmul` and `bdiv` with traited versions

* Restructure directories

* Replace `saturating_*` from neo-swaps

* Fix formatting

* Restructure zrml-swaps math

* Implement and test `b*`

* Fix formatting

* Use new math in orderbook-v1

* Replace checked multiplication with new math

* Use correct rounding in neo-swaps

* Add docs

* Update licenses

* Remove `fixed` module from `primitives`

* Fix formatting

* .

* Rewrite math functions

* Remove training wheels

* Fix docs.pdf

* Fix quotes

* Add tests for buying

* Add tests for selling and improve error names

* Update docs

* Check adjusted amount in for numerical bounds

* Remove unused implementations

* Adjust docs

* Add stress test exploring various scenarios

* Add swap fees to stress test

* Add underscore separators

* Clean up

* Benchmark `buy` as function of `asset_count`

* Update benchmarks

* Clippy fix

* Fix benchmark tests

* Update benchmarks of zrml-prediction-markets

* Fix broken comment

* Add comment explaining benchmark spot prices

* Use clearer constants for `amount_in` in tests

* Update zrml/neo-swaps/src/traits/pool_operations.rs

Co-authored-by: Chralt <chralt.developer@gmail.com>

* Fix botched merge

* Fix merge

* Update benchmarks

* Update zrml/neo-swaps/docs/docs.tex

Co-authored-by: Harald Heckmann <mail@haraldheckmann.de>

* Apply suggestions from code review

Co-authored-by: Harald Heckmann <mail@haraldheckmann.de>

* Rename `Fixed` and clean up

* Hotfix exponential function and extend tests

* Complete math test suite

* Fix broken sentence

* Remove unused imports

* Extend `ln` test cases

* Merge & fix formatting

---------

Co-authored-by: Chralt <chralt.developer@gmail.com>
Co-authored-by: Harald Heckmann <mail@haraldheckmann.de>

* Implement Liquidity Tree (#1178)

* Replace `bmul` and `bdiv` with traited versions

* Restructure directories

* Replace `saturating_*` from neo-swaps

* Fix formatting

* Restructure zrml-swaps math

* Implement and test `b*`

* Fix formatting

* Use new math in orderbook-v1

* Replace checked multiplication with new math

* Use correct rounding in neo-swaps

* Add docs

* Update licenses

* Remove `fixed` module from `primitives`

* Fix formatting

* Add liquidity tree draft

* Fix compiler error in draft

* Clean up `propagate_fees`

* Add docs

* Reorganize

* Clean up, add max iterations

* Remove migrations

* Prepare switch to bounded vector

* Use `BoundedVec`

* Use bounded `BTreeMap` and insert `LiquidityTree` into neo-swaps

* Resolve TODO

* Clean up tests

* Add migration and fix clippy errors

* Make tree depth a generic

* Make tree depth a config parameter

* Update runtime complexities

* Add benchmarking utilities

* Fix runtime complexity for `deploy_pool`

* Add missing lazy propagation

* Fix comment

* Fix error type

* Add `join` benchmarking and fix a bug in `LiquidityTree`

* Clean up benchmarks

* Fix clippy issues

* Remove unnecessary type hint

* Fix bugs in liquidity tree

* Fix comments

* Some fixes in benchmarks

* Implement `BenchmarkHelper`

* Update benchmarks to use the LT

* Clean up and format

* Add testing framework for liquidity trees

* Add first extensive test and fix a bug

* Add more tests

* Clean up test

* Add news tests and use better numerics for ratio calculations

* Make docs more explicit

* Add tests for `exit`

* Add tests for deposit fees

* Add tests for getters

* Clean up tests some more

* Finalize liquidity tree tests

* Clean up comments

* Introduce exit fees

* Rewrite `exit_works`

* Fix liquidity parameter calculation

* Make test a bit more complex

* Test liquidity shares

* Clean up tests

* Update test for destruction

* Enhance `exit_destroys_pool` test

* More cleanup

* Add test for full tree

* Add tests for `join`

* Improve test

* Test withdrawal

* Clean up the test

* Add test for noop

* Add minimum relative liquidity

* Verify that buys deduct the correct amount of fees

* Add last tests

* Add notes about the liquidity tree

* Fix benchmarks

* Fix clippy errors

* Fix benchmarks

* Do more work on benchmarks

* Fix benchmarks, deduce max tree depth

* Remove already solved TODO

* Document macros

* Remove TODO (not a good idea to edit LaTeX docs now)

* Fix `bmul_bdiv`

* Make `bmul_bdiv_*` not implemented

* Double-check that there's a non-zero check for `ratio`

* Fix formatting

* Fix taplo formatting

* Remove TODO

* Remove TODOs and fix documents

* Update primitives/src/math/fixed.rs

Co-authored-by: Chralt <chralt.developer@gmail.com>

* Mark `SoloLp` as deprecated

* Update zrml/neo-swaps/README.md

Co-authored-by: Chralt <chralt.developer@gmail.com>

* Make `bmul_bdiv` a little more idiomatic

* Update zrml/neo-swaps/README.md

Co-authored-by: Chralt <chralt.developer@gmail.com>

* Update zrml/neo-swaps/README.md

Co-authored-by: Chralt <chralt.developer@gmail.com>

* Update zrml/neo-swaps/README.md

Co-authored-by: Chralt <chralt.developer@gmail.com>

* Update zrml/neo-swaps/README.md

Co-authored-by: Chralt <chralt.developer@gmail.com>

* Update zrml/neo-swaps/README.md

Co-authored-by: Chralt <chralt.developer@gmail.com>

* Update zrml/neo-swaps/README.md

Co-authored-by: Chralt <chralt.developer@gmail.com>

* Update zrml/neo-swaps/README.md

Co-authored-by: Chralt <chralt.developer@gmail.com>

* Rewrite and format `README.md`

* Fix comment about existential deposit

* Remove FIXME

* Add a check against misconfiguration of the pallet

* Fix field docstrings

* Add comment about `assert_ok_with_transaction`

* Update zrml/neo-swaps/src/mock.rs

Co-authored-by: Chralt <chralt.developer@gmail.com>

* Format code

* Fix comment

* Prettify extrinsic calls in benchmarks

* Improve code quality of `assert_pool_state!`

* Extend comment about order of abandoned nodes

* Clarify the meaning of "leaf" in `is_leaf`

* Rename `index_maybe` to `opt_index`

* Add unexpected storage overflow error for bounded objects

* Rename `UnclaimedFees` to `UnwithdrawnFees`

* Fix documentation

* Use enum to signal update direction in `update_descendant_stake`

* Add verification to `join_*` benchmarks

* Improve documentation

* Use builtin log

* Remove illegal token from `README.md`

* Update zrml/neo-swaps/src/types/liquidity_tree.rs

Co-authored-by: Chralt <chralt.developer@gmail.com>

* Fix unintentional doctest

* Improve `mutate_children`

* Add helpful comment

* Update zrml/neo-swaps/src/types/liquidity_tree.rs

Co-authored-by: Chralt <chralt.developer@gmail.com>

* Fix migration

* Fix balances in parachain mock

* use PartialEqNoBound and CloneNoBound for tree

* Fix formatting

* Make `debug_assert!` more clear

* Redesign node assignment

* Clean up comments

* Add some storage overflow errors

* Introduce `LiquidityTreeChildIndices`

* Remove outdated docs

* Rename `update_descendant_stake`

* Remove `Default` usage

* Make liquidity tree types `pub(crate)` where possible

* Make all fields of `Node` only `pub(crate)`

* Make `Node<T>` an associated type of `LiquidityTreeHelper`

* Update zrml/neo-swaps/src/lib.rs

Co-authored-by: Harald Heckmann <mail@haraldheckmann.de>

* Fix comment

* Update zrml/neo-swaps/src/types/liquidity_tree.rs

Co-authored-by: Harald Heckmann <mail@haraldheckmann.de>

* Fix tests

* Prettify `path_to_node`

* Add max iterations to `path_to_node`

* Add test for complex liquidity tree interactions

* Improve documentation of `LiquidityTreeChildIndices`

* Reorganize crate structure

* Update weights and fix formatting

---------

Co-authored-by: Chralt <chralt.developer@gmail.com>
Co-authored-by: Chralt98 <chralt98@gmail.com>
Co-authored-by: Harald Heckmann <mail@haraldheckmann.de>

* Improve XCM fee handling (#1225)

* Fix padding of foreign fees in Zeitgeist runtime

* Fix padding of foreign fees in Battery Station runtime

* Format

* Update copyright

* Use adjusted_balance function

* Remove court and global disputes from call filter for the main-net (#1226)

* remove from call filter

* update copyright

* Sunset old AMMs and their pools (#1197)

* Replace `bmul` and `bdiv` with traited versions

* Restructure directories

* Replace `saturating_*` from neo-swaps

* Fix formatting

* Restructure zrml-swaps math

* Implement and test `b*`

* Fix formatting

* Use new math in orderbook-v1

* Replace checked multiplication with new math

* Use correct rounding in neo-swaps

* Add docs

* Update licenses

* Remove `fixed` module from `primitives`

* Fix formatting

* .

* Rewrite math functions

* Remove training wheels

* Fix docs.pdf

* Fix quotes

* Add tests for buying

* Add tests for selling and improve error names

* Update docs

* Check adjusted amount in for numerical bounds

* Remove unused implementations

* Adjust docs

* Add stress test exploring various scenarios

* Add swap fees to stress test

* Add underscore separators

* Clean up

* Benchmark `buy` as function of `asset_count`

* Update benchmarks

* Clippy fix

* Fix benchmark tests

* Update benchmarks of zrml-prediction-markets

* Fix broken comment

* Add comment explaining benchmark spot prices

* Use clearer constants for `amount_in` in tests

* Update zrml/neo-swaps/src/traits/pool_operations.rs

Co-authored-by: Chralt <chralt.developer@gmail.com>

* Fix botched merge

* Fix merge

* Update benchmarks

* Remove `pool_*_subsidy`

* Remove `distribute_pool_share_rewards`

* Remove `end_subsidy_phase`

* Remove `destroy_pool_in_subsidy_phase`

* Remove `MinSubsidy*`

* Remove `SubsidyProviders`

* Remove `start_subsidy`

* Rewrite `create_pool`

* Rewrite `swap_exact_amount_in`

* Rewrite `swap_exact_amount_out`

* Rewrite utility functions

* Remove Rikiddo from weight calculation

* Remove Rikiddo from zrml-swaps

* Remove unused errors

* Remove `ScoringRule::Rikiddo...`

* Remove `*SubsidyPeriod`

* Remove Rikiddo-related storage and events

* Remove automatic opening of pools

* Remove `open_pool` from prediction-markets

* Remove `Swaps::close_pool` from prediction-markets

* Remove `clean_up_pool` from prediction-markets

* Remove `clean_up_pool` from `Swaps` trait

* Remove CPMM deployment from prediction-markets

* Remove automatic arbitrage

* Move `market_account` back to prediction-markets

* Remove unused market states

* Fix fuzz tests

* Implement market migration

* Minor changes

* Fix migration behavior

* Remove creator fees from swaps

* Fix try-runtime

* Fix clippy issues

* Remove `LiquidityMining` from swaps

* Fix `get_spot_prices`

* Take first step to remove `MarketCommons` from swaps

* Remove `MarketCommons` from swaps

* Rewrite `PoolStatus`

* Move `Pool*` to swaps

* Use `Bounded*` types in `Pool`

* Finish swaps migration

* Add missing files

* Fix formatting and clippy errors

* Remove `pool_status.rs`

* Ignore doctests

* Fix fuzz tests

* Add prediciton-markets migration

* Test prediction-markets migration

* Finish tests of the market-commons migration

* Add migrations to runtime and fix various errors

* Clean up

* Clean up

* Format code

* Fix pool migration behavior

* Remove `MarketId` from swaps

* Fix formatting

* Fix formatting

* Remove `CPMM` and allow other scoring rules on Battery Station

* Update macros/Cargo.toml

Co-authored-by: Harald Heckmann <mail@haraldheckmann.de>

* Update primitives/src/traits/zeitgeist_asset.rs

Co-authored-by: Harald Heckmann <mail@haraldheckmann.de>

* Update zrml/market-commons/src/migrations.rs

Co-authored-by: Harald Heckmann <mail@haraldheckmann.de>

* Update zrml/swaps/src/migrations.rs

Co-authored-by: Harald Heckmann <mail@haraldheckmann.de>

* Update zrml/swaps/src/migrations.rs

Co-authored-by: Harald Heckmann <mail@haraldheckmann.de>

* Update zrml/prediction-markets/src/migrations.rs

Co-authored-by: Harald Heckmann <mail@haraldheckmann.de>

* Update zrml/market-commons/src/migrations.rs

Co-authored-by: Harald Heckmann <mail@haraldheckmann.de>

* Clean up TODOs/FIXMEs

* Update changelog

* Make more changes to changelog

* Clear zrml-swaps storage

* Remove cfg-if dependency

* Fix formatting

* Trigger CI

* Update copyright notices

* Update docs/changelog_for_devs.md

Co-authored-by: Chralt <chralt.developer@gmail.com>

* Make benchmark helper only available if feature flags are set

* Remove `ZeitgeistAsset` trait

* Remove preliminary benchmarks with more steps

* Format code

* Fix copyright notice

---------

Co-authored-by: Chralt <chralt.developer@gmail.com>
Co-authored-by: Harald Heckmann <mail@haraldheckmann.de>

* Merge release v0.4.3 (#1211)

* Use hotfixed `exp`

* Reorganize tests

* Fix formatting

* Bump versions to v0.4.3

* Update spec versions

* Add missing version bumps

* Format

* Update licenses

---------

Co-authored-by: Malte Kliemann <mail@maltekliemann.com>
Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>

* Reduce `market_status_manager` aka `on_initialize` iterations (#1160)

* remove dangerous loop

* limit iterations of dangerous loop

* reintegrate last time frame storage item

* wip

* benchmark manual close and open

* fix stall test

* emit event and log for recovery time frame

* add tests

* add trailing comma

* Update zrml/prediction-markets/src/benchmarks.rs

Co-authored-by: Malte Kliemann <mail@maltekliemann.com>

* change should_be_closed condition

* Apply suggestions from code review

Co-authored-by: Malte Kliemann <mail@maltekliemann.com>

* change recursion limit line

* regard period not started yet

* add error tests

* correct benchmarks

* fix after merge and clippy

* use turbofish, add test checks

* remove manually open broken market

* correct errors and call index

* correct wrong error name

* correct position of call index

* correct error position

* update copyrights

* fix after merge

* Update zrml/prediction-markets/src/benchmarks.rs

Co-authored-by: Malte Kliemann <mail@maltekliemann.com>

* set market end for manual close

---------

Co-authored-by: Malte Kliemann <mail@maltekliemann.com>
Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>

* Update style guide to streamline reviews (#1228)

* Reduce benchmark runs of Zeitgeist pallets (#1233)

Reduce bencharm runs of Zeitgeist pallets

Running benchmarks of Zeitgeist pallets on the Zeitgeist reference machine currently takes four days.

* Set inflation to more than zero for a full benchmark of handle_inflation (#1234)

Update benchmarks.rs

* Implement `force_pool_exit` and disable other zrml-swaps functions (#1235)

* Abstract `pool_exit` business logic into `do_*` function

* Add `force_pool_exit` and test

* Install call filters for zrml-swaps

* Implement and test `bmul_bdiv_*`; use in zrml-orderbook and zrml-parimutuel  (#1223)

* Implement and test `bmul_bdiv_*`

* Use `bmul_bdiv_*` in pallets

* Update copyright

* Utilize Merigify's Merge Queue (#1243)

ci(Mergify): configuration update

Signed-off-by: Harald Heckmann <mail@haraldheckmann.de>

* Set in-progress when needed and rerun CI in merge queue (#1244)

* Set in-progress when need and rerun CI in merge queue

---------

Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>

* Avoid mergify dequeue (#1245)

* Avoid mergify deque

* Set review needed only shortly after Mergify commit

* Extend neo-swaps tests and clean up `math.rs` (#1238)

* Add tests to neo-swaps that check large buy/sell amounts at high liquidity

* Use new implementation of HydraDX's `exp`

* Add failure tests to neo-swaps's `math.rs`

* Fix formatting

* Update copyright notices

---------

Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>

* Remove migrations and dead code (#1241)

Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>

* Reorganize prediction-market tests (#1242)

* Rename `tests.rs` to `old_tests.rs` to avoid naming conflicts

* Move `buy_complete_set` tests to new tests

* Clean up `buy_complete_set` tests

* Extract `sell_complete_set_tests`

* Clean up `sell_complete_set` tests

* Extract `admin_move_market_to_closed` tests

* Extract `create_market` tests

* Extract `admin_move_market_to_resolved` tests

* Remove superfluous test

* Extract more `create_market` tests

* Extract `approve_market` tests

* Extract `edit_market` tests

* Extract `edit_market` tests

* Add…
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
s:accepted This pull request is ready for merge
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants