_This PR is being continued from
https://github.com/paritytech/polkadot-sdk/pull/2206, which was closed
when the developer_hub was merged._
closes https://github.com/paritytech/polkadot-sdk-docs/issues/44
---
# Description
This PR adds a reference document to the `developer-hub` crate (see
https://github.com/paritytech/polkadot-sdk/pull/2102). This specific
reference document covers defensive programming practices common within
the context of developing a runtime with Substrate.
In particular, this covers the following areas:
- Default behavior of how Rust deals with numbers in general
- How to deal with floating point numbers in runtime / fixed point
arithmetic
- How to deal with Integer overflows
- General "safe math" / defensive programming practices for common
pallet development scenarios
- Defensive traits that exist within Substrate, i.e.,
`defensive_saturating_add `, `defensive_unwrap_or`
- More general defensive programming examples (keep it concise)
- Link to relevant examples where these practices are actually in
production / being used
- Unwrapping (or rather lack thereof) 101
todo
--
- [x] Apply feedback from previous PR
- [x] This may warrant a PR to append some of these docs to
`sp_arithmetic`
---------
Co-authored-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>
Co-authored-by: Gonçalo Pestana <g6pestana@gmail.com>
Co-authored-by: Kian Paimani <5588131+kianenigma@users.noreply.github.com>
Co-authored-by: Francisco Aguirre <franciscoaguirreperez@gmail.com>
Co-authored-by: Radha <86818441+DrW3RK@users.noreply.github.com>
This PR removes sp-std crate from substrate/primitives sub-directories.
For now crates that have `pub use` of sp-std or export macros that would
necessitate users of the macros to `extern crate alloc` have been
excluded from this PR.
There should be no breaking changes in this PR.
---------
Co-authored-by: Koute <koute@users.noreply.github.com>
* add serde_full feature flag
add serde_full to sp_runtime
add space to toml
add serde_full to application-crypto
add serde_full to arithmetic
fix arithmetic
add serde full to beefy
add serde full to consensus
add serde_full to core
add serdefull to finality grandpa
add serde_full to several primitives crates
make rpc no_std compatible
add scale info to runtime
make serializer no_std compatible
add serde full to storage
add full serde to version
add serde full to weights
add all serde_full features
add . to comment
add missing impl-serde
fix no-std build
fix build
add full_crypto to serde_full
serde_full also implements crypto
full_serde does not work with full_crytpo. needs std
no no_std serde impl possible
also for crypto std is necessary
no serde full for application crypto
fix arithmetic
fix tomls
fix some things
impl fmt for Signature
add serialize to Public
add impl_maybe_marker_serde_full
fix sp-application-crypto toml
add serde feature flag
fix clippy
fix toml grandpa
fix grandpa
rename if_std to if_serde
keystore is not no_std compatible
make keystore vrf no_std compatible
fix nopos-elections
fix rpc
fix serializer
fix test-primitives
fix version
add comment
add serde full only import for format string
remove all(serde_full and full_crypot) as serde_full enforces full_crypto
make comment better readable
even better comment
clean up rpc toml
clean up toml
clean up serializer toml
clean up storage toml
fix std build
update .lock
fix sp-version
move sp_std import
test extern crate alloc
replace sp_std with core
add missing core
sp_core: serde feature do not enforce full crypto
application-crypto: serde feature do not enforce full crypto
rename serde_full to serde
add dep:serde and alloc to default feature
add full_crypto and remove unnecessary debu/fmt impls for serde
update comment
remove obolsete change in display AccountId32
remove extra changes
minimize diff
revert keystore changes
remove std from keystore
remove full-crypto feature
fix serde import
fix comment
fix feature = serde
* rename serde_full to serde
* move #[doc(hidden)] back
* remove feature = full crypto require frm MultiSigner
* reorder serde and scale_info import
* fix bs58 missing alloc import in serde feature
* add `from_string` to serde feature and add unimplemented
* remove serde feature from fixed_point display
* Remove serde/alloc
Co-authored-by: Davide Galassi <davxy@datawok.net>
* Update primitives/consensus/babe/Cargo.toml
Co-authored-by: Bastian Köcher <git@kchr.de>
* Update primitives/arithmetic/src/fixed_point.rs
Co-authored-by: Bastian Köcher <git@kchr.de>
* revert `from_string`fixed impl back to std only
* remove duplicate runtime string impl
* use sp_std::alloc
* remove no_std compatible rpc
* remove no_std compatibility from serializer
* rename mpl_maybe_marker_serde to std_or_serde
* update .lock
* add sp-std to executor
* fix sp-std import
* fix sp_std::format import
* use crate import
* add serde feature
* Update primitives/core/src/lib.rs
---------
Co-authored-by: Davide Galassi <davxy@datawok.net>
Co-authored-by: Bastian Köcher <git@kchr.de>
* 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
* 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>
* Attempt to remove the where bounds.
* Fix further and further.
* Format better.
* Update primitives/npos-elections/src/lib.rs
* fix build
* remove unused
* Revamp npos-elections and implement phragmms
* Update primitives/npos-elections/src/phragmms.rs
* Fix build
* Some review grumbles
* Add some stuff for remote testing
* fix some of the grumbles.
* Add remote testing stuff.
* Cleanup
* fix docs
* Update primitives/arithmetic/src/rational.rs
Co-authored-by: Dan Forbes <dan@danforbes.dev>
* Small config change
* Better handling of approval_stake == 0
* Final touhces.
* Clean fuzzer a bit
* Clean fuzzer a bit
* Update primitives/npos-elections/src/balancing.rs
Co-authored-by: Shawn Tabrizi <shawntabrizi@gmail.com>
* Fix fuzzer.
* Better api for normalize
* Add noramlize_up
* A large number of small fixes.
* make it merge ready
* Fix warns
* bump
* Fix fuzzers a bit.
* Fix warns as well.
* Fix more tests.
Co-authored-by: Dan Forbes <dan@danforbes.dev>
Co-authored-by: Shawn Tabrizi <shawntabrizi@gmail.com>
* add normalize
* better api for normalize
* Some grumbles
* Update primitives/arithmetic/src/lib.rs
Co-authored-by: Guillaume Thiolliere <gui.thiolliere@gmail.com>
* More great review grumbles
* Way better doc for everything.
* Some improvement
* Update primitives/arithmetic/src/lib.rs
Co-authored-by: Bernhard Schuster <bernhard@ahoi.io>
Co-authored-by: Guillaume Thiolliere <gui.thiolliere@gmail.com>
Co-authored-by: Bernhard Schuster <bernhard@ahoi.io>
* Make post dispatch fee consistent with a direct calculation
* Remove unnecessary `saturated_into` calls
* Add test with negative multipliers
* Added regression test
* Test improvements
* Initial skeleton for offchain phragmen
* Basic compact encoding decoding for results
* add compact files
* Bring back Self::ensure_storage_upgraded();
* Make staking use compact stuff.
* First seemingly working version of reduce, full of todos
* Everything phragmen related works again.
* Signing made easier, still issues.
* Signing from offchain compile fine 😎
* make compact work with staked asssignment
* Evaluation basics are in place.
* Move reduce into crate. Document stuff
* move reduce into no_std
* Add files
* Remove other std deps. Runtime compiles
* Seemingly it is al stable; cycle implemented but not integrated.
* Add fuzzing code.
* Cleanup reduce a bit more.
* a metric ton of tests for staking; wip 🔨
* Implement a lot more of the tests.
* wip getting the unsigned stuff to work
* A bit gleanup for unsigned debug
* Clean and finalize compact code.
* Document reduce.
* Still problems with signing
* We officaly duct taped the transaction submission stuff. 🤓
* Deadlock with keys again
* Runtime builds
* Unsigned test works 🙌
* Some cleanups
* Make all the tests compile and stuff
* Minor cleanup
* fix more merge stuff
* Most tests work again.
* a very nasty bug in reduce
* Fix all integrations
* Fix more todos
* Revamp everything and everything
* Remove bogus test
* Some review grumbles.
* Some fixes
* Fix doc test
* loop for submission
* Fix cli, keyring etc.
* some cleanup
* Fix staking tests again
* fix per-things; bring patches from benchmarking
* better score prediction
* Add fuzzer, more patches.
* Some fixes
* More docs
* Remove unused generics
* Remove max-nominator footgun
* Better fuzzer
* Disable it ❌
* Bump.
* Another round of self-review
* Refactor a lot
* More major fixes in perThing
* Add new fuzz file
* Update lock
* fix fuzzing code.
* Fix nominator retain test
* Add slashing check
* Update frame/staking/src/tests.rs
Co-Authored-By: Joshy Orndorff <JoshOrndorff@users.noreply.github.com>
* Some formatting nits
* Review comments.
* Fix cargo file
* Almost all tests work again
* Update frame/staking/src/tests.rs
Co-Authored-By: thiolliere <gui.thiolliere@gmail.com>
* Fix review comments
* More review stuff
* Some nits
* Fix new staking / session / babe relation
* Update primitives/phragmen/src/lib.rs
Co-Authored-By: thiolliere <gui.thiolliere@gmail.com>
* Update primitives/phragmen/src/lib.rs
Co-Authored-By: thiolliere <gui.thiolliere@gmail.com>
* Update primitives/phragmen/compact/src/lib.rs
Co-Authored-By: thiolliere <gui.thiolliere@gmail.com>
* Some doc updates to slashing
* Fix derive
* Remove imports
* Remove unimplemented tests
* nits
* Remove dbg
* Better fuzzing params
* Remove unused pref map
* Deferred Slashing/Offence for offchain Phragmen (#5151)
* Some boilerplate
* Add test
* One more test
* Review comments
* Fix build
* review comments
* fix more
* fix build
* Some cleanups and self-reviews
* More minor self reviews
* Final nits
* Some merge fixes.
* opt comment
* Fix build
* Fix build again.
* Update frame/staking/fuzz/fuzz_targets/submit_solution.rs
Co-Authored-By: Gavin Wood <gavin@parity.io>
* Update frame/staking/src/slashing.rs
Co-Authored-By: Gavin Wood <gavin@parity.io>
* Update frame/staking/src/offchain_election.rs
Co-Authored-By: Gavin Wood <gavin@parity.io>
* Fix review comments
* fix test
* === 🔑 Revamp without staking key.
* final round of changes.
* Fix cargo-deny
* Update frame/staking/src/lib.rs
Co-Authored-By: Gavin Wood <gavin@parity.io>
Co-authored-by: Joshy Orndorff <JoshOrndorff@users.noreply.github.com>
Co-authored-by: thiolliere <gui.thiolliere@gmail.com>
Co-authored-by: Gavin Wood <gavin@parity.io>
* Give perthigns the trait it always deserved.
* Make staking and phragmen work with the new generic per_thing
* Make everything work together 🔨
* a bit of cleanup
* Clean usage
* Bump.
* Fix name
* fix grumbles
* hopefully fix the ui test
* Some grumbles
* revamp traits again
* Better naming again.