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 - Separate asset types and add pallet-assets instances to runtime #1177

Merged
merged 14 commits into from
Dec 22, 2023

Conversation

sea212
Copy link
Member

@sea212 sea212 commented Nov 1, 2023

What does it do?

  • It creates new asset types
    • u128 for user created assets and campaign assets
    • MarketAssets that represent any kind of volatile asset that is used during a market lifecycle
  • It adds pallet-assets to the runtime
    • One instance as Assets, this is the general instance that anyone can utilize to create new asset classes.
    • One instance as CampaignAssets, this is a permissioned instance that prohibits creation of asset using dispatchable calls. Only code, root, 2/3 council or all tech committee can trigger the creation of a new campaign assets. Campaign assets are special in that they are sufficient to create accounts and can be used to pay fees (to be implemented)
    • One instance as MarketAssets, this is a permissioned instance that prohibits creation of asset using dispatchable calls. Only code, root or 2/3 tech committee can trigger the creation of a new asset, such as MarketAsset::CategoricalOutcome(0,0)
  • It adds custom pallet-assets weights and add pallet-assets to the benchmarking scripts

What important points should reviewers know?

Is there something left for follow-up PRs?

  • Properly configure pallet-assets RemoveItemsLimit #1176
  • This is part 1 of multipe PRs that complete the new asset system. Logic that is still missing:
    • Make existing pallets use the new asset system.
    • Lazy migrate existing market assets: Pallets will continue using orml-tokens for existing market until all those existing market assets expired. Reason: Too many accounts hold existing market assets, migrating will be expensive and cannot be executed atomatically. During migration, the storage trie that hold old market asset information will most likely be manipulated by user interaction.
    • Abstract ordinary token functions like transferring, reserving/freezing, etc. in AssetManager.
    • Paying fees using CampaignAssets.
    • Using Assets and CampaignAssets as base assets in prediction markets.
    • Properly creating and destroying MarketAssets in pallets such as prediction markets.
    • Adjust Asset types in many pallets, such as xcm related pallets (should only allow ZTG and ForeignAsset(id) for now), orml-tokens, etc.
    • Future: Remove outcome asset classes from the old asset structure once all associated outcome tokens expired.

What alternative implementations were considered?

  • Using one asset class enum and one pallet instance for pallet-instance with a CreateOrigin that knows which origins can create which asset class. Using instances instead seemed like a cleaner approach that logically separates asset classes with different purposes and restrictions.

Are there relevant PRs or issues?

References

@sea212 sea212 changed the title Sea212 new asset system part 1 New asset system - Separate asset types and add pallet-assets instances to runtime Nov 1, 2023
@sea212 sea212 self-assigned this Nov 1, 2023
@sea212 sea212 added this to the v0.4.3 milestone Nov 1, 2023
@sea212 sea212 added the s:review-needed The pull request requires reviews label Nov 1, 2023
@codecov-commenter
Copy link

codecov-commenter commented Nov 1, 2023

Codecov Report

Attention: 7 lines in your changes are missing coverage. Please review.

Comparison is base (76d6a23) 93.47% compared to head (e7c912c) 93.45%.

Files Patch % Lines
primitives/src/asset.rs 0.00% 7 Missing ⚠️

❗ Your organization needs to install the Codecov GitHub app to enable full functionality.

Additional details and impacted files
@@                     Coverage Diff                     @@
##           sea212-new-asset-system    #1177      +/-   ##
===========================================================
- Coverage                    93.47%   93.45%   -0.02%     
===========================================================
  Files                          121      121              
  Lines                        34264    34271       +7     
===========================================================
  Hits                         32028    32028              
- Misses                        2236     2243       +7     
Flag Coverage Δ
tests 93.45% <0.00%> (-0.02%) ⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

@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 Nov 2, 2023
@sea212 sea212 added s:review-needed The pull request requires reviews s:in-progress The pull requests is currently being worked on and removed s:in-progress The pull requests is currently being worked on s:review-needed The pull request requires reviews labels Nov 2, 2023
@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 Nov 2, 2023
primitives/src/asset.rs Outdated Show resolved Hide resolved
runtime/battery-station/src/parameters.rs Outdated Show resolved Hide resolved
runtime/battery-station/src/parameters.rs Outdated Show resolved Hide resolved
runtime/zeitgeist/src/parameters.rs Outdated Show resolved Hide resolved
Comment on lines 688 to 691
type ForceOrigin = EitherOfDiverse<
EnsureRootOrTwoThirdsCouncil,
EnsureRootOrAllTechnicalCommittee,
>;
Copy link
Member

Choose a reason for hiding this comment

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

I think we should use the same ForceOrigin for all pallets. The distinction between Council and Tech Comm isn't there right now anyways.

Copy link
Member Author

Choose a reason for hiding this comment

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

I disagree for the following reasons:

  1. The CampaignAsset class is much more powerful, as it allows to spawn assets that can be used to pay transaction fees. Thus it should require at least higher privileges than other asset classes to be created.
  2. There are distinctions:
    a. While other asset classes use the ForceOrigin solely to technically correct faults, the CampaignAsset class uses the ForceOrigin to realize business decisions (pushing into directions by utilizing campaigns)
    b. The Council is different from the Technical Committee (TC), even on Zeitgeist. In contrast to the TC, the Council contains all members of the executive. Currently the Council consists of 5 members, with an required agreement from the Council of at least 2/3 to spawn campaign assets, at least two members of the executive have to agree, thus also mapping agreement within the executive of Zeitgeist to move forward with campaigns.

I decided to add the TC to allow assistance in regards to technical aspects, such as cleaning up campaign assets after a campaign is over. However, I think granting the (complete) TC the ForceOrigin power invalidates my second argument. I am leaning towards removing the TC completely from the ForceOrigin of the CampaignAsset class. What's your opinion?

This makes me think about point 1. though. The MarketAssets have the ForceOrigin TwoThirdsOrTechnicalCommittee. Obviously MarketAssets have an even more tangible value. MarketAssets should never be managed directly as the pallets control the whole lifecycle of market assets such as outcome tokens or pool shares. I added this because I wanted to give the TC the opportunity to hotfix some inconsistent states introduced by pallets. Thinking more about it though, I think the TC should not have the power to manage market assets. What's your opinion?

Makes me also question right now if it makes sense at all to add the TC to any ForceOrigin, including CustomAssets. After all, with the help of the Council the TC is capable of spawning a referendum with a short period until dispatch.

Copy link
Member

Choose a reason for hiding this comment

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

I'm okay with all of these options. As long as there are no elections, I don't see any difference between the Council and TC. In the long run (assuming elections take place), I'd prefer if the TC did not have control over market assets. This is based on the assumption that until then, all bugs will have been fixed or can be fixed by governance rather than TC intervention.

Copy link
Member Author

Choose a reason for hiding this comment

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

Does it make more sense like this: a86c36a

Idea: Still convinced about at least 2/3 Council for CampaignAssets, full tech committee for MarketAssets (due to the potential impact) and 2/3 technical committee for CustomAssets.

runtime/zeitgeist/src/parameters.rs Outdated Show resolved Hide resolved
runtime/battery-station/src/parameters.rs Outdated Show resolved Hide resolved
Co-authored-by: Malte Kliemann <mail@maltekliemann.com>
@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 Nov 6, 2023
@sea212 sea212 removed the s:in-progress The pull requests is currently being worked on label Nov 7, 2023
@sea212 sea212 added s:review-needed The pull request requires reviews s:in-progress The pull requests is currently being worked on and removed s:review-needed The pull request requires reviews labels Nov 7, 2023
@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 Nov 8, 2023
runtime/common/src/lib.rs Show resolved Hide resolved
runtime/common/src/lib.rs Show resolved Hide resolved
primitives/src/types.rs Outdated Show resolved Hide resolved
Co-authored-by: Chralt <chralt.developer@gmail.com>
#[cfg_attr(feature = "std", derive(serde::Deserialize, serde::Serialize))]
#[cfg_attr(feature = "std", serde(rename_all = "camelCase"))]
#[derive(Clone, Copy, Debug, Decode, Default, Eq, Encode, MaxEncodedLen, PartialEq, TypeInfo)]
pub enum PredictionMarketAsset<MI: MaxEncodedLen> {
Copy link
Member

Choose a reason for hiding this comment

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

Suggested change
pub enum PredictionMarketAsset<MI: MaxEncodedLen> {
pub enum PredictionMarketAsset<MI> {

Not sure if that's a good idea, but I don't think we need this requirement here.

Copy link
Member

Choose a reason for hiding this comment

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

I guess it's for convenience?

Copy link
Member Author

Choose a reason for hiding this comment

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

We will need that for MaxEncodedLen implementation for the Pool struct.

Copy link
Member

Choose a reason for hiding this comment

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

Ok, I think we can get rid of this after merging #1197

primitives/src/asset.rs Outdated Show resolved Hide resolved
@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 Dec 22, 2023
@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 Dec 22, 2023
@sea212 sea212 added s:accepted This pull request is ready for merge and removed s:review-needed The pull request requires reviews labels Dec 22, 2023
@mergify mergify bot merged commit 3c95d8b into sea212-new-asset-system Dec 22, 2023
23 checks passed
@mergify mergify bot deleted the sea212-new-asset-system-part-1 branch December 22, 2023 15:07
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.

4 participants