mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-04-26 16:57:58 +00:00
Defensive Programming in Substrate Reference Document (#2615)
_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 commit is contained in:
@@ -16,6 +16,33 @@
|
||||
// limitations under the License.
|
||||
|
||||
//! Decimal Fixed Point implementations for Substrate runtime.
|
||||
//! Similar to types that implement [`PerThing`](crate::per_things), these are also
|
||||
//! fixed-point types, however, they are able to represent larger fractions:
|
||||
#![doc = docify::embed!("./src/lib.rs", fixed_u64)]
|
||||
//!
|
||||
//! ### Fixed Point Types in Practice
|
||||
//!
|
||||
//! If one needs to exceed the value of one (1), then
|
||||
//! [`FixedU64`](FixedU64) (and its signed and `u128` counterparts) can be utilized.
|
||||
//! Take for example this very rudimentary pricing mechanism, where we wish to calculate the demand
|
||||
//! / supply to get a price for some on-chain compute:
|
||||
#![doc = docify::embed!(
|
||||
"./src/lib.rs",
|
||||
fixed_u64_block_computation_example
|
||||
)]
|
||||
//!
|
||||
//! For a much more comprehensive example, be sure to look at the source for broker (the "coretime")
|
||||
//! pallet.
|
||||
//!
|
||||
//! #### Fixed Point Types in Practice
|
||||
//!
|
||||
//! Just as with [`PerThing`](PerThing), you can also perform regular mathematical
|
||||
//! expressions:
|
||||
#![doc = docify::embed!(
|
||||
"./src/lib.rs",
|
||||
fixed_u64_operation_example
|
||||
)]
|
||||
//!
|
||||
|
||||
use crate::{
|
||||
helpers_128bit::{multiply_by_rational_with_rounding, sqrt},
|
||||
|
||||
Reference in New Issue
Block a user