FRAME Weights with Storage Metadata (#9471)

* weights with metadata

* fix

* fix contract test

* skip metadata tag

* special handling for `frame_system`

* cargo run --quiet --release --features=runtime-benchmarks --manifest-path=bin/node/cli/Cargo.toml -- benchmark --chain=dev --steps=50 --repeat=20 --pallet=frame_system --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --output=./frame/system/src/weights.rs --template=./.maintain/frame-weight-template.hbs

* add skip metadata to contracts

* cargo run --quiet --release --features=runtime-benchmarks --manifest-path=bin/node/cli/Cargo.toml -- benchmark --chain=dev --steps=50 --repeat=20 --pallet=pallet_contracts --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --output=./frame/contracts/src/weights.rs --template=./.maintain/frame-weight-template.hbs

* fix contract test

* cargo run --quiet --release --features=runtime-benchmarks --manifest-path=bin/node/cli/Cargo.toml -- benchmark --chain=dev --steps=50 --repeat=20 --pallet=pallet_democracy --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --output=./frame/democracy/src/weights.rs --template=./.maintain/frame-weight-template.hbs

* cargo run --quiet --release --features=runtime-benchmarks --manifest-path=bin/node/cli/Cargo.toml -- benchmark --chain=dev --steps=50 --repeat=20 --pallet=pallet_bounties --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --output=./frame/bounties/src/weights.rs --template=./.maintain/frame-weight-template.hbs

* expose component information

* fix test generation

* refactor list benchmarks

* move component selection out of runtime

* add benchmark verification

* missing feature

* cargo run --quiet --release --features=runtime-benchmarks --manifest-path=bin/node/cli/Cargo.toml -- benchmark --chain=dev --steps=50 --repeat=20 --pallet=pallet_bounties --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --output=./frame/bounties/src/weights.rs --template=./.maintain/frame-weight-template.hbs

* cargo run --quiet --release --features=runtime-benchmarks --manifest-path=bin/node/cli/Cargo.toml -- benchmark --chain=dev --steps=50 --repeat=20 --pallet=pallet_democracy --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --output=./frame/democracy/src/weights.rs --template=./.maintain/frame-weight-template.hbs

* add internal repeats

* update weights with internal repeats

* fix warning

* return error with pov

* try without tracking

* Revert "return error with pov"

This reverts commit 44c36cbbd3c6818f36f377e3e291f1df156e40f7.

* Revert "try without tracking"

This reverts commit f401c44aebff2232389d8d307b20924891e5d77d.

* Revert "Revert "try without tracking""

This reverts commit 4b4e05929802ad3e8154e107359447634e5fb21b.

* state without tracking

* fix build

* temp test

* split db and timing benchmarks

* extend db results?

* default repeat is internal

* cargo run --quiet --release --features=runtime-benchmarks --manifest-path=bin/node/cli/Cargo.toml -- benchmark --chain=dev --steps=50 --repeat=20 --pallet=pallet_democracy --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --output=./frame/democracy/src/weights.rs --template=./.maintain/frame-weight-template.hbs

* fix warning

* bump linked hash map

* use linked hash map for storage tracker

* cargo run --quiet --release --features=runtime-benchmarks --manifest-path=bin/node/cli/Cargo.toml -- benchmark --chain=dev --steps=50 --repeat=20 --pallet=pallet_democracy --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --output=./frame/democracy/src/weights.rs --template=./.maintain/frame-weight-template.hbs

* remove conflicting short command

* cargo run --quiet --release --features=runtime-benchmarks --manifest-path=bin/node/cli/Cargo.toml -- benchmark --chain=dev --steps=50 --repeat=20 --pallet=pallet_democracy --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --output=./frame/democracy/src/weights.rs --template=./.maintain/frame-weight-template.hbs

* missed one linked hashmap

* cargo run --quiet --release --features=runtime-benchmarks --manifest-path=bin/node/cli/Cargo.toml -- benchmark --chain=dev --steps=50 --repeat=20 --pallet=pallet_bounties --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --output=./frame/bounties/src/weights.rs --template=./.maintain/frame-weight-template.hbs

* cargo run --quiet --release --features=runtime-benchmarks --manifest-path=bin/node/cli/Cargo.toml -- benchmark --chain=dev --steps=50 --repeat=20 --pallet=pallet_bounties --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --output=./frame/bounties/src/weights.rs --template=./.maintain/frame-weight-template.hbs

* cargo run --quiet --release --features=runtime-benchmarks --manifest-path=bin/node/cli/Cargo.toml -- benchmark --chain=dev --steps=50 --repeat=20 --pallet=pallet_election_provider_multi_phase --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --output=./frame/election-provider-multi-phase/src/weights.rs --template=./.maintain/frame-weight-template.hbs

* new weights with latest changes

* Update frame/benchmarking/src/utils.rs

Co-authored-by: Parity Benchmarking Bot <admin@parity.io>
This commit is contained in:
Shawn Tabrizi
2021-08-07 18:05:12 +02:00
committed by GitHub
parent 38db14089b
commit 0489c1768c
44 changed files with 3956 additions and 2182 deletions
+149 -79
View File
@@ -18,7 +18,7 @@
//! Autogenerated weights for pallet_collective
//!
//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev
//! DATE: 2021-07-13, STEPS: `[50, ]`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]`
//! DATE: 2021-08-07, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]`
//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 128
// Executed Command:
@@ -60,97 +60,132 @@ pub trait WeightInfo {
/// Weights for pallet_collective using the Substrate node and recommended hardware.
pub struct SubstrateWeight<T>(PhantomData<T>);
impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
// Storage: Instance1Collective Members (r:1 w:1)
// Storage: Instance1Collective Proposals (r:1 w:0)
// Storage: Instance1Collective Voting (r:100 w:100)
// Storage: Instance1Collective Prime (r:0 w:1)
fn set_members(m: u32, n: u32, p: u32, ) -> Weight {
(0 as Weight)
// Standard Error: 5_000
.saturating_add((14_534_000 as Weight).saturating_mul(m as Weight))
// Standard Error: 5_000
.saturating_add((160_000 as Weight).saturating_mul(n as Weight))
// Standard Error: 5_000
.saturating_add((20_189_000 as Weight).saturating_mul(p as Weight))
// Standard Error: 4_000
.saturating_add((14_084_000 as Weight).saturating_mul(m as Weight))
// Standard Error: 4_000
.saturating_add((161_000 as Weight).saturating_mul(n as Weight))
// Standard Error: 4_000
.saturating_add((19_201_000 as Weight).saturating_mul(p as Weight))
.saturating_add(T::DbWeight::get().reads(2 as Weight))
.saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(p as Weight)))
.saturating_add(T::DbWeight::get().writes(2 as Weight))
.saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(p as Weight)))
}
// Storage: Instance1Collective Members (r:1 w:0)
fn execute(b: u32, m: u32, ) -> Weight {
(23_177_000 as Weight)
(22_748_000 as Weight)
// Standard Error: 0
.saturating_add((3_000 as Weight).saturating_mul(b as Weight))
// Standard Error: 0
.saturating_add((89_000 as Weight).saturating_mul(m as Weight))
.saturating_add((92_000 as Weight).saturating_mul(m as Weight))
.saturating_add(T::DbWeight::get().reads(1 as Weight))
}
// Storage: Instance1Collective Members (r:1 w:0)
// Storage: Instance1Collective ProposalOf (r:1 w:0)
fn propose_execute(b: u32, m: u32, ) -> Weight {
(28_063_000 as Weight)
(27_465_000 as Weight)
// Standard Error: 0
.saturating_add((3_000 as Weight).saturating_mul(b as Weight))
// Standard Error: 0
.saturating_add((174_000 as Weight).saturating_mul(m as Weight))
.saturating_add((178_000 as Weight).saturating_mul(m as Weight))
.saturating_add(T::DbWeight::get().reads(2 as Weight))
}
// Storage: Instance1Collective Members (r:1 w:0)
// Storage: Instance1Collective ProposalOf (r:1 w:1)
// Storage: Instance1Collective Proposals (r:1 w:1)
// Storage: Instance1Collective ProposalCount (r:1 w:1)
// Storage: Instance1Collective Voting (r:0 w:1)
fn propose_proposed(b: u32, m: u32, p: u32, ) -> Weight {
(46_515_000 as Weight)
(39_869_000 as Weight)
// Standard Error: 0
.saturating_add((5_000 as Weight).saturating_mul(b as Weight))
// Standard Error: 2_000
.saturating_add((91_000 as Weight).saturating_mul(m as Weight))
// Standard Error: 2_000
.saturating_add((486_000 as Weight).saturating_mul(p as Weight))
.saturating_add((8_000 as Weight).saturating_mul(b as Weight))
// Standard Error: 1_000
.saturating_add((107_000 as Weight).saturating_mul(m as Weight))
// Standard Error: 1_000
.saturating_add((406_000 as Weight).saturating_mul(p as Weight))
.saturating_add(T::DbWeight::get().reads(4 as Weight))
.saturating_add(T::DbWeight::get().writes(4 as Weight))
}
// Storage: Instance1Collective Members (r:1 w:0)
// Storage: Instance1Collective Voting (r:1 w:1)
fn vote(m: u32, ) -> Weight {
(38_491_000 as Weight)
// Standard Error: 0
.saturating_add((209_000 as Weight).saturating_mul(m as Weight))
(37_387_000 as Weight)
// Standard Error: 2_000
.saturating_add((223_000 as Weight).saturating_mul(m as Weight))
.saturating_add(T::DbWeight::get().reads(2 as Weight))
.saturating_add(T::DbWeight::get().writes(1 as Weight))
}
// Storage: Instance1Collective Voting (r:1 w:1)
// Storage: Instance1Collective Members (r:1 w:0)
// Storage: Instance1Collective Proposals (r:1 w:1)
// Storage: Instance1Collective ProposalOf (r:0 w:1)
fn close_early_disapproved(m: u32, p: u32, ) -> Weight {
(44_903_000 as Weight)
// Standard Error: 0
.saturating_add((181_000 as Weight).saturating_mul(m as Weight))
// Standard Error: 0
.saturating_add((350_000 as Weight).saturating_mul(p as Weight))
(45_670_000 as Weight)
// Standard Error: 1_000
.saturating_add((170_000 as Weight).saturating_mul(m as Weight))
// Standard Error: 1_000
.saturating_add((358_000 as Weight).saturating_mul(p as Weight))
.saturating_add(T::DbWeight::get().reads(3 as Weight))
.saturating_add(T::DbWeight::get().writes(3 as Weight))
}
// Storage: Instance1Collective Voting (r:1 w:1)
// Storage: Instance1Collective Members (r:1 w:0)
// Storage: Instance1Collective ProposalOf (r:1 w:1)
// Storage: Instance1Collective Proposals (r:1 w:1)
fn close_early_approved(b: u32, m: u32, p: u32, ) -> Weight {
(57_416_000 as Weight)
(52_529_000 as Weight)
// Standard Error: 0
.saturating_add((4_000 as Weight).saturating_mul(b as Weight))
.saturating_add((7_000 as Weight).saturating_mul(b as Weight))
// Standard Error: 1_000
.saturating_add((217_000 as Weight).saturating_mul(m as Weight))
.saturating_add((206_000 as Weight).saturating_mul(m as Weight))
// Standard Error: 1_000
.saturating_add((485_000 as Weight).saturating_mul(p as Weight))
.saturating_add((412_000 as Weight).saturating_mul(p as Weight))
.saturating_add(T::DbWeight::get().reads(4 as Weight))
.saturating_add(T::DbWeight::get().writes(3 as Weight))
}
// Storage: Instance1Collective Voting (r:1 w:1)
// Storage: Instance1Collective Members (r:1 w:0)
// Storage: Instance1Collective Prime (r:1 w:0)
// Storage: Instance1Collective Proposals (r:1 w:1)
// Storage: Instance1Collective ProposalOf (r:0 w:1)
fn close_disapproved(m: u32, p: u32, ) -> Weight {
(50_134_000 as Weight)
// Standard Error: 0
.saturating_add((189_000 as Weight).saturating_mul(m as Weight))
// Standard Error: 0
.saturating_add((487_000 as Weight).saturating_mul(p as Weight))
(50_427_000 as Weight)
// Standard Error: 1_000
.saturating_add((170_000 as Weight).saturating_mul(m as Weight))
// Standard Error: 1_000
.saturating_add((354_000 as Weight).saturating_mul(p as Weight))
.saturating_add(T::DbWeight::get().reads(4 as Weight))
.saturating_add(T::DbWeight::get().writes(3 as Weight))
}
// Storage: Instance1Collective Voting (r:1 w:1)
// Storage: Instance1Collective Members (r:1 w:0)
// Storage: Instance1Collective Prime (r:1 w:0)
// Storage: Instance1Collective ProposalOf (r:1 w:1)
// Storage: Instance1Collective Proposals (r:1 w:1)
fn close_approved(b: u32, m: u32, p: u32, ) -> Weight {
(65_901_000 as Weight)
(57_031_000 as Weight)
// Standard Error: 0
.saturating_add((4_000 as Weight).saturating_mul(b as Weight))
.saturating_add((7_000 as Weight).saturating_mul(b as Weight))
// Standard Error: 1_000
.saturating_add((186_000 as Weight).saturating_mul(m as Weight))
.saturating_add((208_000 as Weight).saturating_mul(m as Weight))
// Standard Error: 1_000
.saturating_add((482_000 as Weight).saturating_mul(p as Weight))
.saturating_add((408_000 as Weight).saturating_mul(p as Weight))
.saturating_add(T::DbWeight::get().reads(5 as Weight))
.saturating_add(T::DbWeight::get().writes(3 as Weight))
}
// Storage: Instance1Collective Proposals (r:1 w:1)
// Storage: Instance1Collective Voting (r:0 w:1)
// Storage: Instance1Collective ProposalOf (r:0 w:1)
fn disapprove_proposal(p: u32, ) -> Weight {
(28_849_000 as Weight)
(27_458_000 as Weight)
// Standard Error: 1_000
.saturating_add((494_000 as Weight).saturating_mul(p as Weight))
.saturating_add((402_000 as Weight).saturating_mul(p as Weight))
.saturating_add(T::DbWeight::get().reads(1 as Weight))
.saturating_add(T::DbWeight::get().writes(3 as Weight))
}
@@ -158,97 +193,132 @@ impl<T: frame_system::Config> WeightInfo for SubstrateWeight<T> {
// For backwards compatibility and tests
impl WeightInfo for () {
// Storage: Instance1Collective Members (r:1 w:1)
// Storage: Instance1Collective Proposals (r:1 w:0)
// Storage: Instance1Collective Voting (r:100 w:100)
// Storage: Instance1Collective Prime (r:0 w:1)
fn set_members(m: u32, n: u32, p: u32, ) -> Weight {
(0 as Weight)
// Standard Error: 5_000
.saturating_add((14_534_000 as Weight).saturating_mul(m as Weight))
// Standard Error: 5_000
.saturating_add((160_000 as Weight).saturating_mul(n as Weight))
// Standard Error: 5_000
.saturating_add((20_189_000 as Weight).saturating_mul(p as Weight))
// Standard Error: 4_000
.saturating_add((14_084_000 as Weight).saturating_mul(m as Weight))
// Standard Error: 4_000
.saturating_add((161_000 as Weight).saturating_mul(n as Weight))
// Standard Error: 4_000
.saturating_add((19_201_000 as Weight).saturating_mul(p as Weight))
.saturating_add(RocksDbWeight::get().reads(2 as Weight))
.saturating_add(RocksDbWeight::get().reads((1 as Weight).saturating_mul(p as Weight)))
.saturating_add(RocksDbWeight::get().writes(2 as Weight))
.saturating_add(RocksDbWeight::get().writes((1 as Weight).saturating_mul(p as Weight)))
}
// Storage: Instance1Collective Members (r:1 w:0)
fn execute(b: u32, m: u32, ) -> Weight {
(23_177_000 as Weight)
(22_748_000 as Weight)
// Standard Error: 0
.saturating_add((3_000 as Weight).saturating_mul(b as Weight))
// Standard Error: 0
.saturating_add((89_000 as Weight).saturating_mul(m as Weight))
.saturating_add((92_000 as Weight).saturating_mul(m as Weight))
.saturating_add(RocksDbWeight::get().reads(1 as Weight))
}
// Storage: Instance1Collective Members (r:1 w:0)
// Storage: Instance1Collective ProposalOf (r:1 w:0)
fn propose_execute(b: u32, m: u32, ) -> Weight {
(28_063_000 as Weight)
(27_465_000 as Weight)
// Standard Error: 0
.saturating_add((3_000 as Weight).saturating_mul(b as Weight))
// Standard Error: 0
.saturating_add((174_000 as Weight).saturating_mul(m as Weight))
.saturating_add((178_000 as Weight).saturating_mul(m as Weight))
.saturating_add(RocksDbWeight::get().reads(2 as Weight))
}
// Storage: Instance1Collective Members (r:1 w:0)
// Storage: Instance1Collective ProposalOf (r:1 w:1)
// Storage: Instance1Collective Proposals (r:1 w:1)
// Storage: Instance1Collective ProposalCount (r:1 w:1)
// Storage: Instance1Collective Voting (r:0 w:1)
fn propose_proposed(b: u32, m: u32, p: u32, ) -> Weight {
(46_515_000 as Weight)
(39_869_000 as Weight)
// Standard Error: 0
.saturating_add((5_000 as Weight).saturating_mul(b as Weight))
// Standard Error: 2_000
.saturating_add((91_000 as Weight).saturating_mul(m as Weight))
// Standard Error: 2_000
.saturating_add((486_000 as Weight).saturating_mul(p as Weight))
.saturating_add((8_000 as Weight).saturating_mul(b as Weight))
// Standard Error: 1_000
.saturating_add((107_000 as Weight).saturating_mul(m as Weight))
// Standard Error: 1_000
.saturating_add((406_000 as Weight).saturating_mul(p as Weight))
.saturating_add(RocksDbWeight::get().reads(4 as Weight))
.saturating_add(RocksDbWeight::get().writes(4 as Weight))
}
// Storage: Instance1Collective Members (r:1 w:0)
// Storage: Instance1Collective Voting (r:1 w:1)
fn vote(m: u32, ) -> Weight {
(38_491_000 as Weight)
// Standard Error: 0
.saturating_add((209_000 as Weight).saturating_mul(m as Weight))
(37_387_000 as Weight)
// Standard Error: 2_000
.saturating_add((223_000 as Weight).saturating_mul(m as Weight))
.saturating_add(RocksDbWeight::get().reads(2 as Weight))
.saturating_add(RocksDbWeight::get().writes(1 as Weight))
}
// Storage: Instance1Collective Voting (r:1 w:1)
// Storage: Instance1Collective Members (r:1 w:0)
// Storage: Instance1Collective Proposals (r:1 w:1)
// Storage: Instance1Collective ProposalOf (r:0 w:1)
fn close_early_disapproved(m: u32, p: u32, ) -> Weight {
(44_903_000 as Weight)
// Standard Error: 0
.saturating_add((181_000 as Weight).saturating_mul(m as Weight))
// Standard Error: 0
.saturating_add((350_000 as Weight).saturating_mul(p as Weight))
(45_670_000 as Weight)
// Standard Error: 1_000
.saturating_add((170_000 as Weight).saturating_mul(m as Weight))
// Standard Error: 1_000
.saturating_add((358_000 as Weight).saturating_mul(p as Weight))
.saturating_add(RocksDbWeight::get().reads(3 as Weight))
.saturating_add(RocksDbWeight::get().writes(3 as Weight))
}
// Storage: Instance1Collective Voting (r:1 w:1)
// Storage: Instance1Collective Members (r:1 w:0)
// Storage: Instance1Collective ProposalOf (r:1 w:1)
// Storage: Instance1Collective Proposals (r:1 w:1)
fn close_early_approved(b: u32, m: u32, p: u32, ) -> Weight {
(57_416_000 as Weight)
(52_529_000 as Weight)
// Standard Error: 0
.saturating_add((4_000 as Weight).saturating_mul(b as Weight))
.saturating_add((7_000 as Weight).saturating_mul(b as Weight))
// Standard Error: 1_000
.saturating_add((217_000 as Weight).saturating_mul(m as Weight))
.saturating_add((206_000 as Weight).saturating_mul(m as Weight))
// Standard Error: 1_000
.saturating_add((485_000 as Weight).saturating_mul(p as Weight))
.saturating_add((412_000 as Weight).saturating_mul(p as Weight))
.saturating_add(RocksDbWeight::get().reads(4 as Weight))
.saturating_add(RocksDbWeight::get().writes(3 as Weight))
}
// Storage: Instance1Collective Voting (r:1 w:1)
// Storage: Instance1Collective Members (r:1 w:0)
// Storage: Instance1Collective Prime (r:1 w:0)
// Storage: Instance1Collective Proposals (r:1 w:1)
// Storage: Instance1Collective ProposalOf (r:0 w:1)
fn close_disapproved(m: u32, p: u32, ) -> Weight {
(50_134_000 as Weight)
// Standard Error: 0
.saturating_add((189_000 as Weight).saturating_mul(m as Weight))
// Standard Error: 0
.saturating_add((487_000 as Weight).saturating_mul(p as Weight))
(50_427_000 as Weight)
// Standard Error: 1_000
.saturating_add((170_000 as Weight).saturating_mul(m as Weight))
// Standard Error: 1_000
.saturating_add((354_000 as Weight).saturating_mul(p as Weight))
.saturating_add(RocksDbWeight::get().reads(4 as Weight))
.saturating_add(RocksDbWeight::get().writes(3 as Weight))
}
// Storage: Instance1Collective Voting (r:1 w:1)
// Storage: Instance1Collective Members (r:1 w:0)
// Storage: Instance1Collective Prime (r:1 w:0)
// Storage: Instance1Collective ProposalOf (r:1 w:1)
// Storage: Instance1Collective Proposals (r:1 w:1)
fn close_approved(b: u32, m: u32, p: u32, ) -> Weight {
(65_901_000 as Weight)
(57_031_000 as Weight)
// Standard Error: 0
.saturating_add((4_000 as Weight).saturating_mul(b as Weight))
.saturating_add((7_000 as Weight).saturating_mul(b as Weight))
// Standard Error: 1_000
.saturating_add((186_000 as Weight).saturating_mul(m as Weight))
.saturating_add((208_000 as Weight).saturating_mul(m as Weight))
// Standard Error: 1_000
.saturating_add((482_000 as Weight).saturating_mul(p as Weight))
.saturating_add((408_000 as Weight).saturating_mul(p as Weight))
.saturating_add(RocksDbWeight::get().reads(5 as Weight))
.saturating_add(RocksDbWeight::get().writes(3 as Weight))
}
// Storage: Instance1Collective Proposals (r:1 w:1)
// Storage: Instance1Collective Voting (r:0 w:1)
// Storage: Instance1Collective ProposalOf (r:0 w:1)
fn disapprove_proposal(p: u32, ) -> Weight {
(28_849_000 as Weight)
(27_458_000 as Weight)
// Standard Error: 1_000
.saturating_add((494_000 as Weight).saturating_mul(p as Weight))
.saturating_add((402_000 as Weight).saturating_mul(p as Weight))
.saturating_add(RocksDbWeight::get().reads(1 as Weight))
.saturating_add(RocksDbWeight::get().writes(3 as Weight))
}