Skip to content

Commit

Permalink
New Asset System - Integrate into XCM (#1287)
Browse files Browse the repository at this point in the history
* Merge release v0.4.2 (#1174)

* Update versions (#1168)

* Add updated weights from reference machine (#1169)

* Add license header

Co-authored-by: Chralt <[email protected]>

---------

Co-authored-by: Chralt <[email protected]>

* 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 <[email protected]>

* remove unnecessary function

* check market end

* check auto close

* add invalid market status test

---------

Co-authored-by: Malte Kliemann <[email protected]>

* 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 <[email protected]>

---------

Co-authored-by: Harald Heckmann <[email protected]>

* 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 <[email protected]>

* Update zrml/rikiddo/src/mock.rs

Co-authored-by: Malte Kliemann <[email protected]>

* update comment to clarify logging

---------

Co-authored-by: Malte Kliemann <[email protected]>

* Inflate defensively (#1195)

* inflate defensively

* add tests

* Update zrml/court/src/tests.rs

Co-authored-by: Malte Kliemann <[email protected]>

* fix test

* fix test name

---------

Co-authored-by: Malte Kliemann <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* Update zrml/orderbook/README.md

Co-authored-by: Malte Kliemann <[email protected]>

* Apply suggestions from code review

Co-authored-by: Malte Kliemann <[email protected]>

* 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 <[email protected]>

* use storage root check in migration test

* Update zrml/orderbook/src/lib.rs

Co-authored-by: Harald Heckmann <[email protected]>

* Update zrml/orderbook/src/lib.rs

Co-authored-by: Harald Heckmann <[email protected]>

* Update zrml/orderbook/src/lib.rs

Co-authored-by: Harald Heckmann <[email protected]>

* delete debug_assert

---------

Co-authored-by: Malte Kliemann <[email protected]>
Co-authored-by: Harald Heckmann <[email protected]>

* 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 <[email protected]>

* Fix botched merge

* Fix merge

* Update benchmarks

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

Co-authored-by: Harald Heckmann <[email protected]>

* Apply suggestions from code review

Co-authored-by: Harald Heckmann <[email protected]>

* 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 <[email protected]>
Co-authored-by: Harald Heckmann <[email protected]>

* 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 <[email protected]>

* Mark `SoloLp` as deprecated

* Update zrml/neo-swaps/README.md

Co-authored-by: Chralt <[email protected]>

* Make `bmul_bdiv` a little more idiomatic

* Update zrml/neo-swaps/README.md

Co-authored-by: Chralt <[email protected]>

* Update zrml/neo-swaps/README.md

Co-authored-by: Chralt <[email protected]>

* Update zrml/neo-swaps/README.md

Co-authored-by: Chralt <[email protected]>

* Update zrml/neo-swaps/README.md

Co-authored-by: Chralt <[email protected]>

* Update zrml/neo-swaps/README.md

Co-authored-by: Chralt <[email protected]>

* Update zrml/neo-swaps/README.md

Co-authored-by: Chralt <[email protected]>

* Update zrml/neo-swaps/README.md

Co-authored-by: Chralt <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* Fix unintentional doctest

* Improve `mutate_children`

* Add helpful comment

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

Co-authored-by: Chralt <[email protected]>

* 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 <[email protected]>

* Fix comment

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

Co-authored-by: Harald Heckmann <[email protected]>

* 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 <[email protected]>
Co-authored-by: Chralt98 <[email protected]>
Co-authored-by: Harald Heckmann <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>

* Update primitives/src/traits/zeitgeist_asset.rs

Co-authored-by: Harald Heckmann <[email protected]>

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

Co-authored-by: Harald Heckmann <[email protected]>

* Update zrml/swaps/src/migrations.rs

Co-authored-by: Harald Heckmann <[email protected]>

* Update zrml/swaps/src/migrations.rs

Co-authored-by: Harald Heckmann <[email protected]>

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

Co-authored-by: Harald Heckmann <[email protected]>

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

Co-authored-by: Harald Heckmann <[email protected]>

* 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 <[email protected]>

* 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 <[email protected]>
Co-authored-by: Harald Heckmann <[email protected]>

* 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 <[email protected]>
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 <[email protected]>

* change should_be_closed condition

* Apply suggestions from code review

Co-authored-by: Malte Kliemann <[email protected]>

* 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 <[email protected]>

* set market end for manual close

---------

Co-authored-by: Malte Kliemann <[email protected]>
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 <[email protected]>

* 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 <[email protected]>

---------

Co-authored-by: Malte Kliemann <[email protected]>
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 <[email protected]>

* Move macro to zeitgeist-macros and add examples

---------

Co-authored-by: Malte Kliemann <[email protected]>

* 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 <[email protected]>

* Make compileable

* Resolve one merge conflict

* Format

* Satisfy Clippy

---------

Signed-off-by: Harald Heckmann <[email protected]>
Co-authored-by: Chralt <[email protected]>
Co-authored-by: Malte Kliemann <[email protected]>
Co-authored-by: Chralt98 <[email protected]>
Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
  • Loading branch information
5 people authored Mar 26, 2024
1 parent 7fd695e commit 7a751ec
Show file tree
Hide file tree
Showing 22 changed files with 379 additions and 246 deletions.
5 changes: 4 additions & 1 deletion primitives/src/types.rs
Original file line number Diff line number Diff line change
Expand Up @@ -104,9 +104,12 @@ pub type Currencies = CurrencyClass<MarketId>;
/// Asset type representing assets used by prediction markets.
pub type MarketAsset = MarketAssetClass<MarketId>;

/// Asset type representing types used in parimutuel markets.
/// Asset type representing assets used in parimutuel markets.
pub type ParimutuelAsset = ParimutuelAssetClass<MarketId>;

/// Asset type representing assets that can be transferred via XCM.
pub type XcmAsset = XcmAssetClass;

/// The asset id specifically used for pallet_assets_tx_payment for
/// paying transaction fees in different assets.
/// Since the polkadot extension and wallets can't handle custom asset ids other than just u32,
Expand Down
10 changes: 5 additions & 5 deletions runtime/battery-station/src/integration_tests/xcm/setup.rs
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ use xcm::{
latest::{Junction::Parachain, Junctions::X2, MultiLocation},
VersionedMultiLocation,
};
use zeitgeist_primitives::types::{Currencies, CustomMetadata};
use zeitgeist_primitives::types::{CustomMetadata, XcmAsset};

pub(super) struct ExtBuilder {
balances: Vec<(AccountId, Assets, Balance)>,
Expand Down Expand Up @@ -106,10 +106,10 @@ pub const BOB: AccountId32 = AccountId32::new([1u8; 32]);
pub const PARA_ID_SIBLING: u32 = 3000;

/// IDs that are used to represent tokens from other chains
pub const FOREIGN_ZTG_ID: Currencies = Currencies::ForeignAsset(0);
pub const FOREIGN_PARENT_ID: Currencies = Currencies::ForeignAsset(1);
pub const FOREIGN_SIBLING_ID: Currencies = Currencies::ForeignAsset(2);
pub const BTC_ID: Currencies = Currencies::ForeignAsset(3);
pub const FOREIGN_ZTG_ID: XcmAsset = XcmAsset::ForeignAsset(0);
pub const FOREIGN_PARENT_ID: XcmAsset = XcmAsset::ForeignAsset(1);
pub const FOREIGN_SIBLING_ID: XcmAsset = XcmAsset::ForeignAsset(2);
pub const BTC_ID: XcmAsset = XcmAsset::ForeignAsset(3);

#[inline]
pub(super) const fn ztg(amount: Balance) -> Balance {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,82 +26,97 @@ use crate::{
test_net::Zeitgeist,
},
xcm_config::config::{battery_station, general_key, AssetConvert},
Assets,
Assets, CustomMetadata, ScalarPosition, XcmAsset,
};

use core::fmt::Debug;
use frame_support::assert_err;
use sp_runtime::traits::Convert as C2;
use test_case::test_case;
use xcm::latest::{Junction::*, Junctions::*, MultiLocation};
use xcm_emulator::TestExt;
use xcm_executor::traits::Convert as C1;

#[test]
fn convert_native() {
fn convert_common_native<T>(expected: T)
where
T: Copy + Debug + PartialEq,
AssetConvert: C1<MultiLocation, T> + C2<T, Option<MultiLocation>>,
{
assert_eq!(battery_station::KEY.to_vec(), vec![0, 1]);

// The way Ztg is represented relative within the Zeitgeist runtime
let ztg_location_inner: MultiLocation =
MultiLocation::new(0, X1(general_key(battery_station::KEY)));

assert_eq!(<AssetConvert as C1<_, _>>::convert(ztg_location_inner), Ok(Assets::Ztg));
assert_eq!(<AssetConvert as C1<_, _>>::convert(ztg_location_inner), Ok(expected));

// The canonical way Ztg is represented out in the wild
Zeitgeist::execute_with(|| {
assert_eq!(
<AssetConvert as C2<_, _>>::convert(Assets::Ztg),
Some(foreign_ztg_multilocation())
)
assert_eq!(<AssetConvert as C2<_, _>>::convert(expected), Some(foreign_ztg_multilocation()))
});
}

#[test]
fn convert_any_registered_parent_multilocation() {
fn convert_common_non_native<T>(
expected: T,
multilocation: MultiLocation,
register: fn(Option<CustomMetadata>),
) where
T: Copy + Debug + PartialEq,
AssetConvert: C1<MultiLocation, T> + C2<T, Option<MultiLocation>>,
{
Zeitgeist::execute_with(|| {
assert_err!(
<AssetConvert as C1<_, _>>::convert(foreign_parent_multilocation()),
foreign_parent_multilocation()
);

assert_eq!(<AssetConvert as C2<_, _>>::convert(Assets::from(FOREIGN_PARENT_ID)), None);

assert_err!(<AssetConvert as C1<_, _>>::convert(multilocation), multilocation);
assert_eq!(<AssetConvert as C2<_, _>>::convert(expected), None);
// Register parent as foreign asset in the Zeitgeist parachain
register_foreign_parent(None);

assert_eq!(
<AssetConvert as C1<_, _>>::convert(foreign_parent_multilocation()),
Ok(FOREIGN_PARENT_ID.into()),
);

assert_eq!(
<AssetConvert as C2<_, _>>::convert(Assets::from(FOREIGN_PARENT_ID)),
Some(foreign_parent_multilocation())
);
register(None);
assert_eq!(<AssetConvert as C1<_, _>>::convert(multilocation), Ok(expected));
assert_eq!(<AssetConvert as C2<_, _>>::convert(expected), Some(multilocation));
});
}

#[test]
fn convert_any_registered_sibling_multilocation() {
Zeitgeist::execute_with(|| {
assert_err!(
<AssetConvert as C1<_, _>>::convert(foreign_sibling_multilocation()),
foreign_sibling_multilocation()
);
fn convert_native_assets() {
convert_common_native(Assets::Ztg);
}

assert_eq!(<AssetConvert as C2<_, _>>::convert(Assets::from(FOREIGN_SIBLING_ID)), None);
#[test]
fn convert_native_xcm_assets() {
convert_common_native(XcmAsset::Ztg);
}

// Register sibling as foreign asset in the Zeitgeist parachain
register_foreign_sibling(None);
#[test]
fn convert_any_registered_parent_multilocation_assets() {
convert_common_non_native(
Assets::from(FOREIGN_PARENT_ID),
foreign_parent_multilocation(),
register_foreign_parent,
);
}

assert_eq!(
<AssetConvert as C1<_, _>>::convert(foreign_sibling_multilocation()),
Ok(FOREIGN_SIBLING_ID.into()),
);
#[test]
fn convert_any_registered_parent_multilocation_xcm_assets() {
convert_common_non_native(
XcmAsset::try_from(Assets::from(FOREIGN_PARENT_ID)).unwrap(),
foreign_parent_multilocation(),
register_foreign_parent,
);
}

assert_eq!(
<AssetConvert as C2<_, _>>::convert(Assets::from(FOREIGN_SIBLING_ID)),
Some(foreign_sibling_multilocation())
);
});
#[test]
fn convert_any_registered_sibling_multilocation_assets() {
convert_common_non_native(
Assets::from(FOREIGN_SIBLING_ID),
foreign_sibling_multilocation(),
register_foreign_sibling,
);
}

#[test]
fn convert_any_registered_sibling_multilocation_xcm_assets() {
convert_common_non_native(
XcmAsset::try_from(Assets::from(FOREIGN_SIBLING_ID)).unwrap(),
foreign_sibling_multilocation(),
register_foreign_sibling,
);
}

#[test]
Expand All @@ -110,13 +125,46 @@ fn convert_unkown_multilocation() {
MultiLocation::new(1, X2(Parachain(battery_station::ID), general_key(&[42])));

Zeitgeist::execute_with(|| {
assert!(<AssetConvert as C1<_, _>>::convert(unknown_location).is_err());
assert!(<AssetConvert as C1<_, Assets>>::convert(unknown_location).is_err());
});
}

#[test]
fn convert_unsupported_currency() {
Zeitgeist::execute_with(|| {
assert_eq!(<AssetConvert as C2<_, _>>::convert(Assets::PoolShare(42)), None)
});
#[test_case(
Assets::CategoricalOutcome(7, 8);
"assets_categorical"
)]
#[test_case(
Assets::ScalarOutcome(7, ScalarPosition::Long);
"assets_scalar"
)]
#[test_case(
Assets::PoolShare(7);
"assets_pool_share"
)]
#[test_case(
Assets::ForeignAsset(7);
"assets_foreign"
)]
#[test_case(
Assets::ParimutuelShare(7, 8);
"assets_parimutuel_share"
)]
#[test_case(
Assets::CampaignAsset(7);
"assets_campaign_asset"
)]
#[test_case(
Assets::CustomAsset(7);
"assets_custom_asset"
)]
#[test_case(
XcmAsset::ForeignAsset(7);
"xcm_assets_foreign"
)]
fn convert_unsupported_asset<T>(asset: T)
where
T: Copy + Debug + PartialEq,
AssetConvert: C2<T, Option<MultiLocation>>,
{
Zeitgeist::execute_with(|| assert_eq!(<AssetConvert as C2<_, _>>::convert(asset), None));
}
Loading

0 comments on commit 7a751ec

Please sign in to comment.