Emanuele Valzano
0ce506ef1b
incrementing sufficient accounts references with saturating_add for safety. ( #2768 )
...
Even though it is difficult to overflow the sufficients variable, since
an attacker that is willing to rapidly increase the number must every
time deposit a minimum deposit of a given asset, it is safer to use
saturating_add().
---------
Co-authored-by: Bastian Köcher <git@kchr.de >
Co-authored-by: joe petrowski <25483142+joepetrowski@users.noreply.github.com >
2023-12-22 13:08:08 +01:00
Muharem Ismailov
2f98b56393
Pallets: Assets destroy_accounts releases the deposit ( #14443 )
...
* assset accounts destroy releases the deposit
* enumerate
* Update frame/assets/src/functions.rs
Co-authored-by: Kian Paimani <5588131+kianenigma@users.noreply.github.com >
* import defensive from frame_support
---------
Co-authored-by: Gavin Wood <gavin@parity.io >
Co-authored-by: Kian Paimani <5588131+kianenigma@users.noreply.github.com >
Co-authored-by: parity-processbot <>
2023-07-01 15:48:53 +00:00
Squirrel
41735589ee
it's always false... ( #13330 )
2023-06-09 12:11:25 +00:00
Koute
194c9edd4a
Remove the Copy bound on AssetId ( #14158 )
...
* Remove the `Copy` bound on `AssetId`
* Also relax the `Copy` bound in the assets pallet
* Fix warnings on the newest nightly Rust
* Remove some unnecessary `clone()`s
* Try to satisfy clippy
* Remove some more unnecessary `clone()`s
* Add more `.clone()`s for newly merged code
* Also add `clone()`s in the benchmarks
---------
Co-authored-by: parity-processbot <>
2023-05-23 11:34:04 +00:00
lanaivina
41dbed0b90
NFTs fractionalization ( #12565 )
...
* Copy Uniques into Nfts
* Connect new pallet
* Update weights
* Nfts: Multiple approvals (#12178 )
* multiple approvals
* clear
* tests & clean up
* fix in logic & fmt
* fix benchmarks
* deadline
* test deadline
* current_block + deadline
* update ApprovedTransfer event
* benchmark
* docs
* Update frame/nfts/src/lib.rs
Co-authored-by: Jegor Sidorenko <5252494+jsidorenko@users.noreply.github.com >
* fmt fix
* Update frame/nfts/src/lib.rs
Co-authored-by: Jegor Sidorenko <5252494+jsidorenko@users.noreply.github.com >
* update tests
* anyone can cancel
* Update frame/nfts/src/tests.rs
Co-authored-by: Jegor Sidorenko <5252494+jsidorenko@users.noreply.github.com >
* fmt
* fix logic
* unnecessary line
* ".git/.scripts/bench-bot.sh" pallet dev pallet_nfts
* Update frame/nfts/src/lib.rs
* Update lib.rs
* fmt
* Update frame/nfts/src/lib.rs
Co-authored-by: Squirrel <gilescope@gmail.com >
* Update frame/nfts/src/lib.rs
Co-authored-by: Squirrel <gilescope@gmail.com >
* fmt
* Update frame/nfts/src/lib.rs
Co-authored-by: Squirrel <gilescope@gmail.com >
* suggestion
* new line
* ".git/.scripts/bench-bot.sh" pallet dev pallet_nfts
Co-authored-by: Jegor Sidorenko <5252494+jsidorenko@users.noreply.github.com >
Co-authored-by: command-bot <>
Co-authored-by: Squirrel <gilescope@gmail.com >
* Fixes
* cargo fmt
* Fixes
* Fixes
* Fix CI
* Nfts: Fix Auto-Increment (#12223 )
* commit
* passing benchmarks
* clean up
* sync
* runtime implementation
* fix
* fmt
* fix benchmark
* cfg
* remove try-increment-id
* remove unused error
* impl Incrementable for unsigned types
* clean up
* fix in tests
* not needed anymore
* Use OptionQuery
Co-authored-by: Keith Yeung <kungfukeith11@gmail.com >
* Rename Origin to RuntimeOrigin
* [Uniques V2] Tips (#12168 )
* Allow to add tips when buying an NFT
* Chore
* Rework tips feature
* Add weights + benchmarks
* Convert tuple to struct
* Fix benchmark
* ".git/.scripts/bench-bot.sh" pallet dev pallet_nfts
* Update frame/nfts/src/benchmarking.rs
Co-authored-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io >
* Fix benchmarks
* Revert the bounded_vec![] approach
* ".git/.scripts/bench-bot.sh" pallet dev pallet_nfts
Co-authored-by: command-bot <>
Co-authored-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io >
* [Uniques V2] Atomic NFTs swap (#12285 )
* Atomic NFTs swap
* Fmt
* Fix benchmark
* Rename swap -> atomic_swap
* Update target balance
* Rollback
* Fix
* ".git/.scripts/bench-bot.sh" pallet dev pallet_nfts
* Make desired item optional
* Apply suggestions
* Update frame/nfts/src/features/atomic_swap.rs
Co-authored-by: Squirrel <gilescope@gmail.com >
* Rename fields
* Optimisation
* Add a comment
* deadline -> maybe_deadline
* Add docs
* Change comments
* Add price direction field
* ".git/.scripts/bench-bot.sh" pallet dev pallet_nfts
* Wrap price and direction
* Fix benchmarks
* Use ensure! instead of if {}
* Make duration param mandatory and limit it to MaxDeadlineDuration
* Make the code safer
* Fix clippy
* Chore
* Remove unused vars
* try
* try 2
* try 3
Co-authored-by: command-bot <>
Co-authored-by: Squirrel <gilescope@gmail.com >
* [Uniques V2] Feature flags (#12367 )
* Basics
* WIP: change the data format
* Refactor
* Remove redundant new() method
* Rename settings
* Enable tests
* Chore
* Change params order
* Delete the config on collection removal
* Chore
* Remove redundant system features
* Rename force_item_status to force_collection_status
* Update node runtime
* Chore
* Remove thaw_collection
* Chore
* Connect collection.is_frozen to config
* Allow to lock the collection in a new way
* Move free_holding into settings
* Connect collection's metadata locker to feature flags
* DRY
* Chore
* Connect pallet level feature flags
* Prepare tests for the new changes
* Implement Item settings
* Allow to lock the metadata or attributes of an item
* Common -> Settings
* Extract settings related code to a separate file
* Move feature flag checks inside the do_* methods
* Split settings.rs into parts
* Extract repeated code into macro
* Extract macros into their own file
* Chore
* Fix traits
* Fix traits
* Test SystemFeatures
* Fix benchmarks
* Add missing benchmark
* Fix node/runtime/lib.rs
* ".git/.scripts/bench-bot.sh" pallet dev pallet_nfts
* Keep item's config on burn if it's not empty
* Fix the merge artifacts
* Fmt
* Add SystemFeature::NoSwaps check
* Rename SystemFeatures to PalletFeatures
* Rename errors
* Add docs
* Change error message
* Rework pallet features
* Move macros
* Change comments
* Fmt
* Refactor Incrementable
* Use pub(crate) for do_* functions
* Update comments
* Refactor freeze and lock functions
* Rework Collection config and Item confg api
* Chore
* Make clippy happy
* Chore
* Update comment
* RequiredDeposit => DepositRequired
* Address comments
Co-authored-by: command-bot <>
* [Uniques V2] Refactor roles (#12437 )
* Basics
* WIP: change the data format
* Refactor
* Remove redundant new() method
* Rename settings
* Enable tests
* Chore
* Change params order
* Delete the config on collection removal
* Chore
* Remove redundant system features
* Rename force_item_status to force_collection_status
* Update node runtime
* Chore
* Remove thaw_collection
* Chore
* Connect collection.is_frozen to config
* Allow to lock the collection in a new way
* Move free_holding into settings
* Connect collection's metadata locker to feature flags
* DRY
* Chore
* Connect pallet level feature flags
* Prepare tests for the new changes
* Implement Item settings
* Allow to lock the metadata or attributes of an item
* Common -> Settings
* Extract settings related code to a separate file
* Move feature flag checks inside the do_* methods
* Split settings.rs into parts
* Extract repeated code into macro
* Extract macros into their own file
* Chore
* Fix traits
* Fix traits
* Test SystemFeatures
* Fix benchmarks
* Add missing benchmark
* Fix node/runtime/lib.rs
* ".git/.scripts/bench-bot.sh" pallet dev pallet_nfts
* Keep item's config on burn if it's not empty
* Fix the merge artifacts
* Fmt
* Add SystemFeature::NoSwaps check
* Refactor roles structure
* Rename SystemFeatures to PalletFeatures
* Rename errors
* Add docs
* Change error message
* Rework pallet features
* Move macros
* Change comments
* Fmt
* Refactor Incrementable
* Use pub(crate) for do_* functions
* Update comments
* Refactor freeze and lock functions
* Rework Collection config and Item confg api
* Chore
* Make clippy happy
* Chore
* Fix artifacts
* Address comments
* Further refactoring
* Add comments
* Add tests for group_roles_by_account()
* Update frame/nfts/src/impl_nonfungibles.rs
* Add test
* Replace Itertools group_by with a custom implementation
* ItemsNotTransferable => ItemsNonTransferable
* Update frame/nfts/src/features/roles.rs
Co-authored-by: Muharem Ismailov <ismailov.m.h@gmail.com >
* Address PR comments
* Add missed comment
Co-authored-by: command-bot <>
Co-authored-by: Muharem Ismailov <ismailov.m.h@gmail.com >
* Fix copy
* Remove storage_prefix
* Remove transactional
* Initial commit SFT pallet.
* Update comment
* [Uniques V2] Minting options (#12483 )
* Basics
* WIP: change the data format
* Refactor
* Remove redundant new() method
* Rename settings
* Enable tests
* Chore
* Change params order
* Delete the config on collection removal
* Chore
* Remove redundant system features
* Rename force_item_status to force_collection_status
* Update node runtime
* Chore
* Remove thaw_collection
* Chore
* Connect collection.is_frozen to config
* Allow to lock the collection in a new way
* Move free_holding into settings
* Connect collection's metadata locker to feature flags
* DRY
* Chore
* Connect pallet level feature flags
* Prepare tests for the new changes
* Implement Item settings
* Allow to lock the metadata or attributes of an item
* Common -> Settings
* Extract settings related code to a separate file
* Move feature flag checks inside the do_* methods
* Split settings.rs into parts
* Extract repeated code into macro
* Extract macros into their own file
* Chore
* Fix traits
* Fix traits
* Test SystemFeatures
* Fix benchmarks
* Add missing benchmark
* Fix node/runtime/lib.rs
* ".git/.scripts/bench-bot.sh" pallet dev pallet_nfts
* Keep item's config on burn if it's not empty
* Fix the merge artifacts
* Fmt
* Add SystemFeature::NoSwaps check
* Rename SystemFeatures to PalletFeatures
* Rename errors
* Add docs
* Change error message
* Change the format of CollectionConfig to store more data
* Move max supply to the CollectionConfig and allow to change it
* Remove ItemConfig from the mint() function and use the one set in mint settings
* Add different mint options
* Allow to change the mint settings
* Add a force_mint() method
* Check mint params
* Some optimisations
* Cover with tests
* Remove merge artifacts
* Chore
* Use the new has_role() method
* Rework item deposits
* More tests
* Refactoring
* Address comments
* Refactor lock_collection()
* Update frame/nfts/src/types.rs
Co-authored-by: Squirrel <gilescope@gmail.com >
* Update frame/nfts/src/types.rs
Co-authored-by: Squirrel <gilescope@gmail.com >
* Update frame/nfts/src/lib.rs
Co-authored-by: Squirrel <gilescope@gmail.com >
* Update frame/nfts/src/lib.rs
Co-authored-by: Squirrel <gilescope@gmail.com >
* Private => Issuer
* Add more tests
* Fix benchmarks
* Add benchmarks for new methods
* [Uniques v2] Refactoring (#12570 )
* Move do_set_price() and do_buy_item() to buy_sell.rs
* Move approvals to feature file
* Move metadata to feature files
* Move the rest of methods to feature files
* Remove artifacts
* Split force_collection_status into 2 methods
* Fix benchmarks
* Fix benchmarks
* Update deps
Co-authored-by: command-bot <>
Co-authored-by: Squirrel <gilescope@gmail.com >
* Rename module to NFT fractionalisation
* Loose coupling for pallet-assets
* cargo fmt
* [Uniques V2] Smart attributes (#12702 )
* Basics
* WIP: change the data format
* Refactor
* Remove redundant new() method
* Rename settings
* Enable tests
* Chore
* Change params order
* Delete the config on collection removal
* Chore
* Remove redundant system features
* Rename force_item_status to force_collection_status
* Update node runtime
* Chore
* Remove thaw_collection
* Chore
* Connect collection.is_frozen to config
* Allow to lock the collection in a new way
* Move free_holding into settings
* Connect collection's metadata locker to feature flags
* DRY
* Chore
* Connect pallet level feature flags
* Prepare tests for the new changes
* Implement Item settings
* Allow to lock the metadata or attributes of an item
* Common -> Settings
* Extract settings related code to a separate file
* Move feature flag checks inside the do_* methods
* Split settings.rs into parts
* Extract repeated code into macro
* Extract macros into their own file
* Chore
* Fix traits
* Fix traits
* Test SystemFeatures
* Fix benchmarks
* Add missing benchmark
* Fix node/runtime/lib.rs
* ".git/.scripts/bench-bot.sh" pallet dev pallet_nfts
* Keep item's config on burn if it's not empty
* Fix the merge artifacts
* Fmt
* Add SystemFeature::NoSwaps check
* Rename SystemFeatures to PalletFeatures
* Rename errors
* Add docs
* Change error message
* Change the format of CollectionConfig to store more data
* Move max supply to the CollectionConfig and allow to change it
* Remove ItemConfig from the mint() function and use the one set in mint settings
* Add different mint options
* Allow to change the mint settings
* Add a force_mint() method
* Check mint params
* Some optimisations
* Cover with tests
* Remove merge artifacts
* Chore
* Use the new has_role() method
* Rework item deposits
* More tests
* Refactoring
* Address comments
* Refactor lock_collection()
* Update frame/nfts/src/types.rs
Co-authored-by: Squirrel <gilescope@gmail.com >
* Update frame/nfts/src/types.rs
Co-authored-by: Squirrel <gilescope@gmail.com >
* Update frame/nfts/src/lib.rs
Co-authored-by: Squirrel <gilescope@gmail.com >
* Update frame/nfts/src/lib.rs
Co-authored-by: Squirrel <gilescope@gmail.com >
* Private => Issuer
* Add more tests
* Fix benchmarks
* Add benchmarks for new methods
* [Uniques v2] Refactoring (#12570 )
* Move do_set_price() and do_buy_item() to buy_sell.rs
* Move approvals to feature file
* Move metadata to feature files
* Move the rest of methods to feature files
* Remove artifacts
* Smart attributes
* Split force_collection_status into 2 methods
* Fix benchmarks
* Fix benchmarks
* Update deps
* Fix merge artifact
* Weights + benchmarks + docs
* Change params order
* Chore
* Update frame/nfts/src/lib.rs
Co-authored-by: Squirrel <gilescope@gmail.com >
* Update frame/nfts/src/lib.rs
Co-authored-by: Squirrel <gilescope@gmail.com >
* Update docs
* Update frame/nfts/src/lib.rs
Co-authored-by: Squirrel <gilescope@gmail.com >
* Add PalletId
* Chore
* Add tests
* More tests
* Add doc
* Update errors snapshots
* Ensure we track the owner_deposit field correctly
Co-authored-by: command-bot <>
Co-authored-by: Squirrel <gilescope@gmail.com >
* [Uniques V2] Final improvements (#12736 )
* Use KeyPrefixIterator instead of Box
* Change create_collection()
* Restrict from claiming NFTs twice
* Update Readme
* Remove dead code
* Refactoring
* Update readme
* Fix clippy
* Update frame/nfts/src/lib.rs
Co-authored-by: Squirrel <gilescope@gmail.com >
* ".git/.scripts/bench-bot.sh" pallet dev pallet_nfts
* Update docs
* Typo
* Fix benchmarks
* Add more docs
* Replace uniques with nfts, add minted volume storage
* DepositRequired setting should affect only the attributes within the CollectionOwner namespace
* Add unlock functionality
* [NFTs] Implement missed methods to set the attributes from other pallets (#12919 )
* Implement missed methods to set the attributes from other pallets
* Revert snapshots
* Update snapshot
* Update snapshot
* Revert snapshot changes
* Update snapshots
* Yet another snapshot update..
* Asset to NFT id storage mutations
* Minor fixes
* Minor comments
* cargo fmt
* Remove benchmarking, unused clone()
* Update frame/support/src/traits/tokens/nonfungible_v2.rs
Co-authored-by: joe petrowski <25483142+joepetrowski@users.noreply.github.com >
* Update frame/support/src/traits/tokens/nonfungible_v2.rs
Co-authored-by: joe petrowski <25483142+joepetrowski@users.noreply.github.com >
* Update frame/support/src/traits/tokens/nonfungible_v2.rs
Co-authored-by: joe petrowski <25483142+joepetrowski@users.noreply.github.com >
* Update frame/support/src/traits/tokens/nonfungibles_v2.rs
Co-authored-by: joe petrowski <25483142+joepetrowski@users.noreply.github.com >
* Update frame/nfts/src/lib.rs
Co-authored-by: joe petrowski <25483142+joepetrowski@users.noreply.github.com >
* Update frame/nfts/src/lib.rs
Co-authored-by: joe petrowski <25483142+joepetrowski@users.noreply.github.com >
* Update frame/nfts/src/lib.rs
Co-authored-by: joe petrowski <25483142+joepetrowski@users.noreply.github.com >
* Update frame/nfts/src/lib.rs
Co-authored-by: joe petrowski <25483142+joepetrowski@users.noreply.github.com >
* Update frame/nfts/src/lib.rs
Co-authored-by: joe petrowski <25483142+joepetrowski@users.noreply.github.com >
* Update frame/support/src/traits/tokens/nonfungible_v2.rs
* Update frame/nfts/src/lib.rs
Co-authored-by: joe petrowski <25483142+joepetrowski@users.noreply.github.com >
* Update frame/support/src/traits/tokens/nonfungibles_v2.rs
Co-authored-by: joe petrowski <25483142+joepetrowski@users.noreply.github.com >
* Update frame/nfts/src/lib.rs
Co-authored-by: joe petrowski <25483142+joepetrowski@users.noreply.github.com >
* Update frame/nfts/src/lib.rs
Co-authored-by: joe petrowski <25483142+joepetrowski@users.noreply.github.com >
* Update frame/nfts/src/lib.rs
Co-authored-by: joe petrowski <25483142+joepetrowski@users.noreply.github.com >
* Update frame/nfts/src/lib.rs
Co-authored-by: joe petrowski <25483142+joepetrowski@users.noreply.github.com >
* Address comments
* [NFTs] Add the new `owner` param to mint() method (#12997 )
* Add the new `owner` param to mint() method
* Fmt
* Address comments
* ".git/.scripts/bench-bot.sh" pallet dev pallet_nfts
* Fmt
* Update frame/nfts/src/common_functions.rs
Co-authored-by: joe petrowski <25483142+joepetrowski@users.noreply.github.com >
* Update frame/nfts/src/types.rs
Co-authored-by: joe petrowski <25483142+joepetrowski@users.noreply.github.com >
* Update frame/nfts/src/types.rs
Co-authored-by: joe petrowski <25483142+joepetrowski@users.noreply.github.com >
* Update frame/nfts/src/types.rs
Co-authored-by: joe petrowski <25483142+joepetrowski@users.noreply.github.com >
* Update frame/nfts/src/types.rs
Co-authored-by: joe petrowski <25483142+joepetrowski@users.noreply.github.com >
* Update frame/nfts/src/types.rs
Co-authored-by: joe petrowski <25483142+joepetrowski@users.noreply.github.com >
* Add call indexes
* Update snapshots
* Refactor nft fractionalisation pallet (#13008 )
* Refactoring
* Make it compile
* Add tests
* Rename
* Rework nfts locking
* Update cargo.lock
* Connect the latest changes to the runtime-kitchensink
* Add benchmarks, fix other issues
* Chore
* Chore 2
* Chore 3
* Add runtime-benchmarks
* Rename
* Set metadata
* Make fields public
* Chore
* Created asset shouldn't be sufficient
* Add documentation
* minor edit to docs
* Minor corrections
Co-authored-by: lana-shanghai <svetlana.konstantinovna@gmail.com >
* fmt
* Add fee reserved before creating an asset
* Use ReservableCurrency for fee deposit
* Improvements
* Revert fmt changes
* A bit more cleanup
* Consistent naming
* Make it more generic
* Leftover
* Use Vec<u8> instead of String
* Update to the latest + improve the Locker trait
* Refactor NFTs locker
* Replace Vec with BoundedVec, add clearer errors
* cargo fmt
* Add README about unlocking NFTs
* add constant definition
* add fortitude & precision to asset related functions
* fix mock and tests
* transfer ExistentialDeposit to pallet if it's balance is below
* Refactoring
* Simplify the locking mechanism
* Use PalletAttributes enum instead of the LOCKED_NFT_KEY
* Fix benchmark
* Add missing licence details
* Update Cargo.toml
* ".git/.scripts/commands/bench/bench.sh" pallet dev pallet_nft_fractionalization
* Apply suggestions from code review
Co-authored-by: joe petrowski <25483142+joepetrowski@users.noreply.github.com >
* Update frame/nft-fractionalization/README.md
Co-authored-by: joe petrowski <25483142+joepetrowski@users.noreply.github.com >
---------
Co-authored-by: Jegor Sidorenko <jegor@parity.io >
Co-authored-by: Sergej Sakac <73715684+Szegoo@users.noreply.github.com >
Co-authored-by: Jegor Sidorenko <5252494+jsidorenko@users.noreply.github.com >
Co-authored-by: Squirrel <gilescope@gmail.com >
Co-authored-by: Keith Yeung <kungfukeith11@gmail.com >
Co-authored-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io >
Co-authored-by: Muharem Ismailov <ismailov.m.h@gmail.com >
Co-authored-by: command-bot <>
Co-authored-by: joe petrowski <25483142+joepetrowski@users.noreply.github.com >
2023-05-23 07:17:48 +00:00
joe petrowski
be56fd3f53
Allow Creation of Asset Accounts That Don't Exist Yet and Add Blocked Status ( #13843 )
...
* prevent frozen accounts from receiving assets
* refund deposits correctly
* plus refund_other
* add benchmarks
* start migration work
* docs
* add migration logic
* fix freeze_creating benchmark
* support instanced migrations
* review
* correct deposit refund
* only allow depositor, admin, or account origin to refund deposits
* make sure refund actually removes account
* do refund changes
* Asset's account deposit owner (#13874 )
* assets deposit owner
* doc typo
* remove migration
* empty commit
* can transfer to frozen account
* remove allow_burn from refund_other
* storage version back to 1
* update doc
* fix benches
* update docs
* more tests
* Update frame/assets/src/types.rs
* refund updating the reason
* refactor
* separate refund and refund_foreign
* refunds, touch_other, tests
* fixes
* fmt
* ".git/.scripts/commands/bench/bench.sh" pallet dev pallet_assets
* tests: asserts asset account counts
* Account touch trait (#14063 )
* assets touch trait
* docs
* move touch trait into support/traits
* permissionless flag for do_touch
* Apply suggestions from code review
Co-authored-by: Kian Paimani <5588131+kianenigma@users.noreply.github.com >
* move trait to misc, drop option
* Apply suggestions from code review
Co-authored-by: Gavin Wood <gavin@parity.io >
* correct doc
* Update frame/assets/src/functions.rs
---------
Co-authored-by: Kian Paimani <5588131+kianenigma@users.noreply.github.com >
Co-authored-by: Gavin Wood <gavin@parity.io >
Co-authored-by: joe petrowski <25483142+joepetrowski@users.noreply.github.com >
* Block asset account (#14070 )
* replace is_fronzen flag by status enum
* block asset account
* remove redundant brackets
* fix typo
* fmt
* Apply suggestions from code review
Co-authored-by: Jegor Sidorenko <5252494+jsidorenko@users.noreply.github.com >
* rename permissionless to check_depositor
* doc fix
* use account id lookup instead account id
* add benchmark for touch_other
---------
Co-authored-by: muharem <ismailov.m.h@gmail.com >
Co-authored-by: command-bot <>
Co-authored-by: Kian Paimani <5588131+kianenigma@users.noreply.github.com >
Co-authored-by: Gavin Wood <gavin@parity.io >
Co-authored-by: Jegor Sidorenko <5252494+jsidorenko@users.noreply.github.com >
2023-05-08 10:17:35 +00:00
Gavin Wood
781ea7cbdc
Various minor fixes ( #13945 )
...
* Fix: Incorrect implementation of can_reserve check
* Fix: Incorrect migration of consumer counting for existing accounts with frozen amounts
* Fix: Inconsistent implementation between assets can_deposit and new_account
* Fixes
* Fixes
* Another fix
* Update tests.rs
* Update fungible_tests.rs
* Use `can_accrue_consumers` in the body of `can_inc_consumer`
---------
Co-authored-by: Keith Yeung <kungfukeith11@gmail.com >
Co-authored-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io >
Co-authored-by: parity-processbot <>
2023-04-26 14:26:07 +00:00
Gavin Wood
5d81f23f8f
Deprecate Currency; introduce holds and freezing into fungible traits ( #12951 )
...
* First reworking of fungibles API
* New API and docs
* More fungible::* API improvements
* New ref-counting logic for old API
* Missing files
* Fixes
* Use the new transfer logic
* Use fungibles for the dispatchables
* Use shelve/restore names
* Locking works with total balance.
* repotting and removal
* Separate Holds from Reserves
* Introduce freezes
* Missing files
* Tests for freezing
* Fix hold+freeze combo
* More tests
* Fee-free dispatchable for upgrading accounts
* Benchmarks and a few fixes
* Another test
* Docs and refactor to avoid blanket impls
* Repot
* Fit out ItemOf fully
* Add events to Balanced traits
* Introduced events into Hold traits
* Fix Assets pallet tests
* Assets benchmarks pass
* Missing files and fixes
* Fixes
* Fixes
* Benchmarks fixes
* Fix balance benchmarks
* Formatting
* Expose fungible sub modules
* Move NIS to fungible API
* Fix broken impl and add test
* Fix tests
* API for `transfer_and_hold`
* Use composite APIs
* Formatting
* Upgraded event
* Fixes
* Fixes
* Fixes
* Fixes
* Repot tests and some fixed
* Fix some bits
* Fix dust tests
* Rename `set_balance`
- `Balances::set_balance` becomes `Balances::force_set_balance`
- `Unbalanced::set_balance` becomes `Unbalances::write_balance`
* becomes
* Move dust handling to fungibles API
* Formatting
* Fixes and more refactoring
* Fixes
* Fixes
* Fixes
* Fixes
* Fixes
* Fixes
* Fixes
* Fixes
* Fixes
* Use reducible_balance for better correctness on fees
* Reducing hold to zero should remove entry.
* Add test
* Docs
* Update frame/support/src/traits/tokens/fungibles/hold.rs
Co-authored-by: Muharem Ismailov <ismailov.m.h@gmail.com >
* Update frame/support/src/traits/tokens/fungibles/regular.rs
Co-authored-by: Muharem Ismailov <ismailov.m.h@gmail.com >
* Update frame/support/src/traits/tokens/fungible/hold.rs
Co-authored-by: Muharem Ismailov <ismailov.m.h@gmail.com >
* Update frame/support/src/traits/tokens/fungible/regular.rs
Co-authored-by: Muharem Ismailov <ismailov.m.h@gmail.com >
* Docs
* Docs
* Docs
* Fix NIS benchmarks
* Doc comment
* Remove post_mutation
* Fix some tests
* Fix some grumbles
* Enumify bool args to fungible(s) functions
* Fix up assets and balances
* Formatting
* Fix contracts
* Fix tests & benchmarks build
* Typify minted boolean arg
* Typify on_hold boolean arg; renames
* Fix numerous tests
* Fix dependency issue
* Privatize dangerous API mutate_account
* Fix contracts (@alext - please check this commit)
* Remove println
* Fix tests for contracts
* Fix broken rename
* Fix broken rename
* Fix broken rename
* Docs
* Update frame/support/src/traits/tokens/fungible/hold.rs
Co-authored-by: Anthony Alaribe <anthonyalaribe@gmail.com >
* remove from_ref_time
* Update frame/executive/src/lib.rs
Co-authored-by: Anthony Alaribe <anthonyalaribe@gmail.com >
* Update frame/executive/src/lib.rs
Co-authored-by: Anthony Alaribe <anthonyalaribe@gmail.com >
* Reenable test
* Update frame/support/src/traits/tokens/fungibles/hold.rs
Co-authored-by: Anthony Alaribe <anthonyalaribe@gmail.com >
* Update frame/support/src/traits/tokens/fungible/hold.rs
Co-authored-by: Anthony Alaribe <anthonyalaribe@gmail.com >
* Update frame/support/src/traits/tokens/fungible/hold.rs
Co-authored-by: Anthony Alaribe <anthonyalaribe@gmail.com >
* Update frame/support/src/traits/tokens/fungible/hold.rs
Co-authored-by: Anthony Alaribe <anthonyalaribe@gmail.com >
* Update frame/support/src/traits/tokens/currency.rs
Co-authored-by: Anthony Alaribe <anthonyalaribe@gmail.com >
* Update frame/lottery/src/tests.rs
Co-authored-by: Anthony Alaribe <anthonyalaribe@gmail.com >
* Update frame/support/src/traits/tokens/fungible/mod.rs
Co-authored-by: Anthony Alaribe <anthonyalaribe@gmail.com >
* Update frame/support/src/traits/tokens/fungible/regular.rs
Co-authored-by: Anthony Alaribe <anthonyalaribe@gmail.com >
* Update frame/support/src/traits/tokens/fungibles/freeze.rs
Co-authored-by: Anthony Alaribe <anthonyalaribe@gmail.com >
* Update frame/support/src/traits/tokens/fungible/regular.rs
Co-authored-by: Anthony Alaribe <anthonyalaribe@gmail.com >
* Update frame/support/src/traits/tokens/fungibles/hold.rs
Co-authored-by: Anthony Alaribe <anthonyalaribe@gmail.com >
* Update frame/support/src/traits/tokens/fungibles/hold.rs
Co-authored-by: Anthony Alaribe <anthonyalaribe@gmail.com >
* Update frame/support/src/traits/tokens/fungibles/hold.rs
Co-authored-by: Anthony Alaribe <anthonyalaribe@gmail.com >
* Rename UnwantedRemoval to UnwantedAccountRemoval
* Docs
* Formatting
* Update frame/balances/src/lib.rs
Co-authored-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io >
* Update primitives/runtime/src/lib.rs
Co-authored-by: Keith Yeung <kungfukeith11@gmail.com >
* handle_raw_dust oes nothing
* Formatting
* Fixes
* Grumble
* Fixes
* Add test
* Add test
* Tests for reducible_balance
* Fixes
* Fix Salary
* Fixes
* Disable broken test
* Disable nicely
* Fixes
* Fixes
* Fixes
* Rename some events
* Fix nomination pools breakage
* Add compatibility stub for transfer tx
* Reinstate a safely compatible version of Balances set_balance
* Fixes
* Grumble
* Update frame/nis/src/lib.rs
Co-authored-by: Kian Paimani <5588131+kianenigma@users.noreply.github.com >
* ".git/.scripts/commands/bench/bench.sh" pallet dev pallet_balances
* disable flakey tests
* Update frame/balances/src/lib.rs
Co-authored-by: Kian Paimani <5588131+kianenigma@users.noreply.github.com >
* Grumbles
* Grumble
---------
Co-authored-by: Muharem Ismailov <ismailov.m.h@gmail.com >
Co-authored-by: Alexander Theißen <alex.theissen@me.com >
Co-authored-by: Anthony Alaribe <anthonyalaribe@gmail.com >
Co-authored-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io >
Co-authored-by: Keith Yeung <kungfukeith11@gmail.com >
Co-authored-by: Kian Paimani <5588131+kianenigma@users.noreply.github.com >
Co-authored-by: command-bot <>
2023-03-18 14:47:55 +00:00
Dino Pačandi
efd5d98e10
Pallet assets improvements ( #13543 )
2023-03-13 15:44:47 +00:00
Jegor Sidorenko
7981d4aa59
Return account's asset balances ( #13352 )
...
* Runtime method to get user's assets balances
* Fix test (typo)
* Update frame/assets/src/functions.rs
* Remove instance param
* Update frame/assets/src/functions.rs
Co-authored-by: Bastian Köcher <git@kchr.de >
* Remove instance param
* Refactor
* Chore
* Update doc
---------
Co-authored-by: Bastian Köcher <git@kchr.de >
Co-authored-by: parity-processbot <>
2023-03-02 13:58:41 +00:00
Vivek Pandya
bc53b9a03a
Remove years from copyright notes. ( #13415 )
...
* Change copyright year to 2023 from 2022
* Fix incorrect update of copyright year
* Remove years from copy right header
* Fix remaining files
* Fix typo in a header and remove update-copyright.sh
2023-02-21 18:46:41 +00:00
Bastian Köcher
fcc1994977
pallet-assets: Rename total_supply to amount ( #13229 )
...
* pallet-assets: Rename `total_supply` to `amount`
We are actually passing the `amount` on assets being minted and not the total supply.
Closes: https://github.com/paritytech/substrate/issues/13210
* ".git/.scripts/commands/fmt/fmt.sh"
* Fix compilation
* FMT
Co-authored-by: command-bot <>
2023-01-25 11:57:01 +00:00
Dino Pačandi
9cdb920462
Add CallbackHandle to pallet-assets ( #12307 )
...
* Add CallbackHandle to pallet-assets
* Address review comments
* Add use for sp_io::storage
* Rebase & review comments
* Fix UT
Co-authored-by: Hoon Kim <mail@hoonkim.me >
2022-12-21 14:03:49 +01:00
Anthony Alaribe
679d2dcd25
Asset Pallet: Support repeated destroys to safely destroy large assets ( #12310 )
...
* Support repeated destroys to safely destroy large assets
* require freezing accounts before destroying
* support only deleting asset as final stage when there's no assets left
* pre: introduce the RemoveKeyLimit config parameter
* debug_ensure empty account in the right if block
* update to having separate max values for accounts and approvals
* add tests and use RemoveKeyLimit constant
* add useful comments to the extrinsics, and calculate returned weight
* add benchmarking for start_destroy and finish destroy
* push failing benchmark logic
* add benchmark tests for new functions
* update weights via local benchmarks
* remove extra weight file
* Update frame/assets/src/lib.rs
Co-authored-by: joe petrowski <25483142+joepetrowski@users.noreply.github.com >
* Update frame/assets/src/types.rs
Co-authored-by: joe petrowski <25483142+joepetrowski@users.noreply.github.com >
* Update frame/assets/src/lib.rs
Co-authored-by: joe petrowski <25483142+joepetrowski@users.noreply.github.com >
* effect some changes from codereview
* use NotFrozen error
* remove origin checks, as anyone can complete destruction after owner has begun the process; Add live check for other extrinsics
* fix comments about Origin behaviour
* add AssetStatus docs
* modularize logic to allow calling logic in on_idle and on_initialize hooks
* introduce simple migration for assets details
* reintroduce logging in the migrations
* move deposit_Event out of the mutate block
* Update frame/assets/src/functions.rs
Co-authored-by: Muharem Ismailov <ismailov.m.h@gmail.com >
* Update frame/assets/src/migration.rs
Co-authored-by: Muharem Ismailov <ismailov.m.h@gmail.com >
* move AssetNotLive checkout out of the mutate blocks
* rename RemoveKeysLimit to RemoveItemsLimit
* update docs
* fix event name in benchmark
* fix cargo fmt.
* fix lint in benchmarking
* Empty commit to trigger CI
* Update frame/assets/src/lib.rs
Co-authored-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io >
* Update frame/assets/src/lib.rs
Co-authored-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io >
* Update frame/assets/src/functions.rs
Co-authored-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io >
* Update frame/assets/src/functions.rs
Co-authored-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io >
* Update frame/assets/src/functions.rs
Co-authored-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io >
* Update frame/assets/src/lib.rs
Co-authored-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io >
* Update frame/assets/src/functions.rs
Co-authored-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io >
* effect change suggested during code review
* move limit to a single location
* Update frame/assets/src/functions.rs
Co-authored-by: joe petrowski <25483142+joepetrowski@users.noreply.github.com >
* rename events
* fix weight typo, using rocksdb instead of T::DbWeight. Pending generating weights
* switch to using dead_account.len()
* rename event in the benchmarks
* empty to retrigger CI
* trigger CI to check cumulus dependency
* trigger CI for dependent cumulus
* Update frame/assets/src/migration.rs
Co-authored-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io >
* move is-frozen to the assetStatus enum (#12547 )
* add pre and post migration hooks
* update do_transfer logic to add new assert for more correct error messages
* trigger CI
* switch checking AssetStatus from checking Destroying state to checking live state
* fix error type in tests from Frozen to AssetNotLive
* trigger CI
* change ensure check for fn reducible_balance()
* change the error type to Error:<T,I>::IncorrectStatus to be clearer
* Trigger CI
Co-authored-by: joe petrowski <25483142+joepetrowski@users.noreply.github.com >
Co-authored-by: parity-processbot <>
Co-authored-by: Muharem Ismailov <ismailov.m.h@gmail.com >
Co-authored-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io >
2022-11-15 09:59:47 +00:00
Falco Hirschenberger
b581604aa7
Apply some clippy lints ( #11154 )
...
* Apply some clippy hints
* Revert clippy ci changes
* Update client/cli/src/commands/generate.rs
Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com >
* Update client/cli/src/commands/inspect_key.rs
Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com >
* Update client/db/src/bench.rs
Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com >
* Update client/db/src/bench.rs
Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com >
* Update client/service/src/client/block_rules.rs
Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com >
* Update client/service/src/client/block_rules.rs
Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com >
* Update client/network/src/transactions.rs
Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com >
* Update client/network/src/protocol.rs
Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com >
* Revert due to missing `or_default` function.
* Fix compilation and simplify code
* Undo change that corrupts benchmark.
* fix clippy
* Update client/service/test/src/lib.rs
Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com >
* Update client/state-db/src/noncanonical.rs
Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com >
* Update client/state-db/src/noncanonical.rs
remove leftovers!
* Update client/tracing/src/logging/directives.rs
Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com >
* Update utils/fork-tree/src/lib.rs
Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com >
* added needed ref
* Update frame/referenda/src/benchmarking.rs
* Simplify byte-vec creation
* let's just not overlap the ranges
* Correction
* cargo fmt
* Update utils/frame/benchmarking-cli/src/shared/stats.rs
Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com >
* Update utils/frame/benchmarking-cli/src/pallet/command.rs
Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com >
* Update utils/frame/benchmarking-cli/src/pallet/command.rs
Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com >
Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com >
Co-authored-by: Giles Cope <gilescope@gmail.com >
2022-04-30 21:28:27 +00:00
Bastian Köcher
2541efdbcc
pallet-asset: Fix transfer of a large amount of an asset ( #11241 )
...
* pallet-asset: Fix transfer of a large amount of an asset
Before this pr transferring a large amount of an asset would check that transferring the asset would
not overflow the supply of the asset. However, it doesn't make sense to check for asset supply
overflow when we just transfer from one account to another account and don't increase the supply in
any way. It also required to extend the `can_deposit` method of `fungible` and `fungibles` with a
`mint` parameter. If this parameter is set to `true`, it means we want to mint the amount of an
asset before transferring it into an account. For `can_withdraw` we don't need to add an extra
parameter, because withdrawing should never be able to underflow the supply. If that would happen,
it would mean that somewhere the supply wasn't increased while increasing the balance of an account.
* Update frame/assets/src/functions.rs
* Update frame/assets/src/functions.rs
* Update frame/assets/src/functions.rs
Co-authored-by: Shawn Tabrizi <shawntabrizi@gmail.com >
* FMT
Co-authored-by: Shawn Tabrizi <shawntabrizi@gmail.com >
2022-04-25 20:12:06 +02:00
stanly-johnson
7dca0e467c
pallet_assets : Remove event for no_op ( #11023 )
...
* remove no_op event
* ensure no transferred event emitted
Co-authored-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io >
2022-04-14 19:41:42 +00:00
Oliver Tale-Yazdi
b932e27e5b
Fix reentrancy of FrozenBalance::died hook ( #10473 )
...
* assets: execute `died` hook outside of mutate
Signed-off-by: Oliver Tale-Yazdi <oliver@tasty.limo >
* assets: extend tests for `died` hook
Signed-off-by: Oliver Tale-Yazdi <oliver@tasty.limo >
* assets: update doc of FrozenBalance::died
Signed-off-by: Oliver Tale-Yazdi <oliver@tasty.limo >
* assets: review fixes
- fix cases where `died` should not have been called
- use `Option<DeadConsequence>` instead of `DeadConsequence`
Signed-off-by: Oliver Tale-Yazdi <oliver@tasty.limo >
* assets: update comment in mock.rs
Signed-off-by: Oliver Tale-Yazdi <oliver@tasty.limo >
* assets: return `Remove` in dead_account
The return value is ignored in the only case that it is produced
by a call, but having it this way makes it more understandable.
Signed-off-by: Oliver Tale-Yazdi <oliver@tasty.limo >
2022-02-11 13:17:38 +00:00
girazoki
074ff19dbc
maybe_total_supply in pallet-assets ( #10799 )
...
* maybe_total_supply in pallet-assets
* Update frame/assets/src/functions.rs
Co-authored-by: Bastian Köcher <bkchr@users.noreply.github.com >
2022-02-05 11:06:44 +00:00
Bastian Köcher
f3662b4bba
Happy new year 2022 ( #10573 )
2022-01-03 09:22:14 +01:00
Gavin Wood
3dd8f83a3a
Insufficient asset quota and deposits ( #10382 )
...
* Allow asset accounts to exist by deposit
* Place limit on consumers (and therefore freebie asset accounts)
* Maximum number of assets
* Fixes
* Fixes
* Formatting
* Docs
* Formatting
* Destroyed assets are properly tidied
* Update frame/assets/src/types.rs
Co-authored-by: Guillaume Thiolliere <gui.thiolliere@gmail.com >
* Docs
* Docs
* Formatting
* Docs
* Docs
* Fixes
* Fixes
Co-authored-by: Guillaume Thiolliere <gui.thiolliere@gmail.com >
2021-12-09 13:22:54 +01:00
David Salami
120894fdb7
Add field names to pallet Event variants ( #9993 )
...
* convert pallet-assets events to struct types
* updated events of a couple pallets
* updated pallet event field names
* update pallet event field names
* updated events in test files
* cargo fmt
* minorfixes
* fix assertion error
* minor fix
* formatting fix
* fmt
2021-11-16 01:56:00 +00:00
girazoki
48a524c565
Add low level traits to retrieve name, symbol, decimals and allowance in pallet-assets ( #9757 )
...
* Add ERC20 compatible trait to retrieve name, symbol, decimals and allowance
* delegate instead of spender
* Remove erc20 trait and divide it into lower level traits
* add import
* approvals and metadata depend on fungibles
Co-authored-by: Shawn Tabrizi <shawntabrizi@gmail.com >
2021-10-07 14:29:48 +00:00
Shawn Tabrizi
f8a228859e
Fungibles and Non-Fungibles Create and Destroy Traits + Assets and Uniques Implementation ( #9844 )
...
* refactor `do_destroy`
* destroy trait
* refactor do_force_create
* impl create trait
* do not bleed weight into api
* Do the same for uniques
* add docs
2021-09-26 22:05:01 +00:00
Kian Paimani
abd08e29ce
Rewrap all comments to 100 line width ( #9490 )
...
* reformat everything again
* manual formatting
* last manual fix
* Fix build
2021-08-11 14:56:55 +00:00
Bastian Köcher
7b56ab15b4
Run cargo fmt on the whole code base ( #9394 )
...
* Run cargo fmt on the whole code base
* Second run
* Add CI check
* Fix compilation
* More unnecessary braces
* Handle weights
* Use --all
* Use correct attributes...
* Fix UI tests
* AHHHHHHHHH
* 🤦
* Docs
* Fix compilation
* 🤷
* Please stop
* 🤦 x 2
* More
* make rustfmt.toml consistent with polkadot
Co-authored-by: André Silva <andrerfosilva@gmail.com >
2021-07-21 14:32:32 +00:00
Shaun Wang
2a38b23062
Add arithmetic dispatch errors. ( #8726 )
...
* Add arithmetic dispatch errors.
* Replace custom overflow errors.
* Replace custom underflow and division by zero errors.
* Replace overflow/underflow in token error.
* Add token and arithmetic errors in dispatch error equality test.
* Trigger CI.
2021-05-10 10:14:02 +02:00
François Garillot
052be8bbef
Simplify some Option / Result / ? operator patterns ( #8653 )
...
* Simplify some Option / Result / ? operator patterns
When those match a combinator exactly.
Tool-aided by [comby-rust](https://github.com/huitseeker/comby-rust ).
* adjust after review
* adjust post-review
2021-04-23 13:36:10 +00:00
Daniel Olano
7527bd758c
Make pallet Assets instantiable ( #8483 )
...
* Make pallet Assets instantiable
* use instantiable benchmarks
Co-authored-by: Shawn Tabrizi <shawntabrizi@gmail.com >
2021-04-16 08:51:26 +00:00
Gavin Wood
d0eee4f1cb
Implement fungible::* for Balances ( #8454 )
...
* Reservable, Transferrable Fungible(s), plus adapters.
* Repot into new dir
* Imbalances for Fungibles
* Repot and balanced fungible.
* Clean up names and bridge-over Imbalanced.
* Repot frame_support::trait. Finally.
* Make build.
* Docs
* Good errors
* Fix tests. Implement fungible::Inspect for Balances.
* Implement additional traits for Balances.
* Revert UI test "fixes"
* Fix UI error
* Fix UI test
* More work on fungibles
* Fixes
* More work.
* Update lock
* Make fungible::reserved work for Balances
* Introduce Freezer to Assets, ready for a reserve & locks pallet. Some renaming/refactoring.
* Cleanup errors
* Imbalances working with Assets
* Test for freezer.
* Grumbles
* Grumbles
* Fixes
* Extra "side-car" data for a user's asset balance.
* Fix
* Fix test
* Fixes
* Line lengths
* Comments
* Update frame/assets/src/tests.rs
Co-authored-by: Shawn Tabrizi <shawntabrizi@gmail.com >
* Update frame/support/src/traits/tokens/fungibles.rs
Co-authored-by: Shawn Tabrizi <shawntabrizi@gmail.com >
* Update frame/assets/src/lib.rs
Co-authored-by: Shawn Tabrizi <shawntabrizi@gmail.com >
* Update frame/support/src/traits/tokens/fungible.rs
Co-authored-by: Shawn Tabrizi <shawntabrizi@gmail.com >
* Introduce `transfer_reserved`
* Rename fungible Reserve -> Hold, add flag structs
* Avoid the `melted` API - its too complex and gives little help
* Repot Assets pallet
Co-authored-by: Bastian Köcher <info@kchr.de >
Co-authored-by: Shawn Tabrizi <shawntabrizi@gmail.com >
2021-03-28 20:59:34 +02:00