Browse Source

Merge branch 'olympia' into drop_obsolete_pallets_fix_tests2

# Conflicts:
#	runtime/src/tests/proposals_integration/mod.rs
Shamil Gadelshin 4 years ago
parent
commit
2830c459f4
32 changed files with 349 additions and 507 deletions
  1. 100 77
      Cargo.lock
  2. 1 4
      node/src/chain_spec/mod.rs
  3. 2 1
      runtime-modules/constitution/Cargo.toml
  4. 55 0
      runtime-modules/constitution/src/benchmarking.rs
  5. 22 2
      runtime-modules/constitution/src/lib.rs
  6. 7 0
      runtime-modules/constitution/src/tests/mocks.rs
  7. 1 1
      runtime-modules/constitution/src/tests/mod.rs
  8. 2 3
      runtime-modules/governance/src/mock.rs
  9. 1 16
      runtime-modules/membership/src/genesis.rs
  10. 26 146
      runtime-modules/membership/src/lib.rs
  11. 3 3
      runtime-modules/membership/src/mock.rs
  12. 28 95
      runtime-modules/membership/src/tests.rs
  13. 2 2
      runtime-modules/proposals/codex/src/tests/mock.rs
  14. 2 2
      runtime-modules/proposals/discussion/src/tests/mock.rs
  15. 2 2
      runtime-modules/proposals/engine/src/tests/mock/mod.rs
  16. 2 2
      runtime-modules/service-discovery/src/mock.rs
  17. 1 1
      runtime-modules/staking-handler/src/lib.rs
  18. 2 2
      runtime-modules/staking-handler/src/mock.rs
  19. 2 3
      runtime-modules/storage/src/tests/mock.rs
  20. 2 6
      runtime-modules/working-group/src/tests/fixtures.rs
  21. 3 3
      runtime-modules/working-group/src/tests/mock.rs
  22. 5 4
      runtime/Cargo.toml
  23. 5 55
      runtime/src/integration/proposals/council_origin_validator.rs
  24. 4 39
      runtime/src/integration/proposals/membership_origin_validator.rs
  25. 3 3
      runtime/src/integration/proposals/proposal_encoder.rs
  26. 5 6
      runtime/src/lib.rs
  27. 2 0
      runtime/src/runtime_api.rs
  28. 35 2
      runtime/src/tests/mod.rs
  29. 3 26
      runtime/src/tests/proposals_integration/mod.rs
  30. 1 0
      runtime/src/weights/mod.rs
  31. 15 0
      runtime/src/weights/pallet_constitution.rs
  32. 5 1
      scripts/generate-weights.sh

+ 100 - 77
Cargo.lock

@@ -239,9 +239,9 @@ dependencies = [
 
 [[package]]
 name = "async-io"
-version = "1.2.0"
+version = "1.3.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "40a0b2bb8ae20fede194e779150fe283f65a4a08461b496de546ec366b174ad9"
+checksum = "9315f8f07556761c3e48fec2e6b276004acf426e6dc068b2c2251854d65ee0fd"
 dependencies = [
  "concurrent-queue",
  "fastrand",
@@ -276,7 +276,7 @@ dependencies = [
  "async-io",
  "async-mutex",
  "blocking",
- "crossbeam-utils 0.8.0",
+ "crossbeam-utils 0.8.1",
  "futures-channel",
  "futures-core",
  "futures-io",
@@ -287,7 +287,7 @@ dependencies = [
  "memchr",
  "num_cpus",
  "once_cell 1.5.2",
- "pin-project-lite",
+ "pin-project-lite 0.1.11",
  "pin-utils",
  "slab",
  "wasm-bindgen-futures",
@@ -313,9 +313,9 @@ dependencies = [
 
 [[package]]
 name = "async-trait"
-version = "0.1.41"
+version = "0.1.42"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b246867b8b3b6ae56035f1eb1ed557c1d8eae97f0d53696138a50fa0e3a3b8c0"
+checksum = "8d3a45e77e34375a7923b1e8febb049bb011f064714a8e17a1a616fef01da13d"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -389,6 +389,12 @@ version = "0.12.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "3441f0f7b02788e948e47f457ca01f1d7e6d92c693bc132c22b087d3141c03ff"
 
+[[package]]
+name = "base64"
+version = "0.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd"
+
 [[package]]
 name = "bindgen"
 version = "0.54.0"
@@ -791,9 +797,9 @@ dependencies = [
 
 [[package]]
 name = "const-random"
-version = "0.1.11"
+version = "0.1.12"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "02dc82c12dc2ee6e1ded861cf7d582b46f66f796d1b6c93fa28b911ead95da02"
+checksum = "486d435a7351580347279f374cb8a3c16937485441db80181357b7c4d70f17ed"
 dependencies = [
  "const-random-macro",
  "proc-macro-hack",
@@ -801,12 +807,14 @@ dependencies = [
 
 [[package]]
 name = "const-random-macro"
-version = "0.1.11"
+version = "0.1.12"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fc757bbb9544aa296c2ae00c679e81f886b37e28e59097defe0cf524306f6685"
+checksum = "49a84d8ff70e3ec52311109b019c27672b4c1929e4cf7c18bcf0cd9fb5e230be"
 dependencies = [
  "getrandom 0.2.0",
+ "lazy_static",
  "proc-macro-hack",
+ "tiny-keccak",
 ]
 
 [[package]]
@@ -859,7 +867,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "dca26ee1f8d361640700bde38b2c37d8c22b3ce2d360e1fc1c74ea4b0aa7d775"
 dependencies = [
  "cfg-if 1.0.0",
- "crossbeam-utils 0.8.0",
+ "crossbeam-utils 0.8.1",
 ]
 
 [[package]]
@@ -880,8 +888,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "94af6efb46fef72616855b036a624cf27ba656ffc9be1b9a3c931cfc7749a9a9"
 dependencies = [
  "cfg-if 1.0.0",
- "crossbeam-epoch 0.9.0",
- "crossbeam-utils 0.8.0",
+ "crossbeam-epoch 0.9.1",
+ "crossbeam-utils 0.8.1",
 ]
 
 [[package]]
@@ -895,21 +903,21 @@ dependencies = [
  "crossbeam-utils 0.7.2",
  "lazy_static",
  "maybe-uninit",
- "memoffset",
+ "memoffset 0.5.6",
  "scopeguard 1.1.0",
 ]
 
 [[package]]
 name = "crossbeam-epoch"
-version = "0.9.0"
+version = "0.9.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ec0f606a85340376eef0d6d8fec399e6d4a544d648386c6645eb6d0653b27d9f"
+checksum = "a1aaa739f95311c2c7887a76863f500026092fb1dce0161dab577e559ef3569d"
 dependencies = [
  "cfg-if 1.0.0",
  "const_fn",
- "crossbeam-utils 0.8.0",
+ "crossbeam-utils 0.8.1",
  "lazy_static",
- "memoffset",
+ "memoffset 0.6.1",
  "scopeguard 1.1.0",
 ]
 
@@ -937,13 +945,12 @@ dependencies = [
 
 [[package]]
 name = "crossbeam-utils"
-version = "0.8.0"
+version = "0.8.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ec91540d98355f690a86367e566ecad2e9e579f230230eb7c21398372be73ea5"
+checksum = "02d96d1e189ef58269ebe5b97953da3274d83a93af647c2ddd6f9dab28cedb8d"
 dependencies = [
  "autocfg 1.0.1",
  "cfg-if 1.0.0",
- "const_fn",
  "lazy_static",
 ]
 
@@ -1485,9 +1492,9 @@ dependencies = [
 
 [[package]]
 name = "fs-swap"
-version = "0.2.4"
+version = "0.2.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "921d332c89b3b61a826de38c61ee5b6e02c56806cade1b0e5d81bd71f57a71bb"
+checksum = "5839fda247e24ca4919c87c71dd5ca658f1f39e4f06829f80e3f15c3bafcfc2c"
 dependencies = [
  "lazy_static",
  "libc",
@@ -1624,7 +1631,7 @@ dependencies = [
  "futures-io",
  "memchr",
  "parking",
- "pin-project-lite",
+ "pin-project-lite 0.1.11",
  "waker-fn",
 ]
 
@@ -2398,9 +2405,9 @@ dependencies = [
 
 [[package]]
 name = "js-sys"
-version = "0.3.45"
+version = "0.3.46"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ca059e81d9486668f12d455a4ea6daa600bd408134cd17e3d3fb5a32d1f016f8"
+checksum = "cf3d7383929f7c9c7c2d0fa596f325832df98c3704f2c60553080f7127a58175"
 dependencies = [
  "wasm-bindgen",
 ]
@@ -3265,6 +3272,15 @@ dependencies = [
  "autocfg 1.0.1",
 ]
 
+[[package]]
+name = "memoffset"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "157b4208e3059a8f9e78d559edc658e13df41410cb3ae03979c83130067fdd87"
+dependencies = [
+ "autocfg 1.0.1",
+]
+
 [[package]]
 name = "memory-db"
 version = "0.24.1"
@@ -3337,7 +3353,7 @@ dependencies = [
  "kernel32-sys",
  "libc",
  "log",
- "miow 0.2.1",
+ "miow 0.2.2",
  "net2",
  "slab",
  "winapi 0.2.8",
@@ -3380,9 +3396,9 @@ dependencies = [
 
 [[package]]
 name = "miow"
-version = "0.2.1"
+version = "0.2.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8c1f2f3b1cf331de6896aabf6e9d55dca90356cc9960cca7eaaf408a355ae919"
+checksum = "ebd808424166322d4a38da87083bfddd3ac4c131334ed55856112eb06d46944d"
 dependencies = [
  "kernel32-sys",
  "net2",
@@ -3473,9 +3489,9 @@ dependencies = [
 
 [[package]]
 name = "net2"
-version = "0.2.35"
+version = "0.2.36"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3ebc3ec692ed7c9a255596c67808dee269f64655d8baf7b4f0638e51ba1d6853"
+checksum = "d7cf75f38f16cb05ea017784dc6dbfd354f76c223dba37701734c4f5a9337d02"
 dependencies = [
  "cfg-if 0.1.10",
  "libc",
@@ -3736,6 +3752,7 @@ dependencies = [
 name = "pallet-constitution"
 version = "1.0.0"
 dependencies = [
+ "frame-benchmarking",
  "frame-support",
  "frame-system",
  "parity-scale-codec",
@@ -4619,6 +4636,12 @@ version = "0.1.11"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "c917123afa01924fc84bb20c4c03f004d9c38e5127e3c039bbf7f4b9c76a2f6b"
 
+[[package]]
+name = "pin-project-lite"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6b063f57ec186e6140e2b8b6921e5f1bd89c7356dda5b33acc5401203ca6131c"
+
 [[package]]
 name = "pin-utils"
 version = "0.1.0"
@@ -4661,11 +4684,11 @@ dependencies = [
 
 [[package]]
 name = "polyval"
-version = "0.4.1"
+version = "0.4.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a5884790f1ce3553ad55fec37b5aaac5882e0e845a2612df744d6c85c9bf046c"
+checksum = "b3fd900a291ceb8b99799cc8cd3d1d3403a51721e015bc533528b2ceafcc443c"
 dependencies = [
- "cfg-if 0.1.10",
+ "cfg-if 1.0.0",
  "universal-hash",
 ]
 
@@ -4820,7 +4843,7 @@ checksum = "77de3c815e5a160b1539c6592796801df2043ae35e123b46d73380cfa57af858"
 dependencies = [
  "futures-core",
  "futures-sink",
- "pin-project-lite",
+ "pin-project-lite 0.1.11",
 ]
 
 [[package]]
@@ -5058,7 +5081,7 @@ checksum = "9ab346ac5921dc62ffa9f89b7a773907511cdfa5490c572ae9be1be33e8afa4a"
 dependencies = [
  "crossbeam-channel",
  "crossbeam-deque 0.8.0",
- "crossbeam-utils 0.8.0",
+ "crossbeam-utils 0.8.1",
  "lazy_static",
  "num_cpus",
 ]
@@ -5154,9 +5177,9 @@ checksum = "e005d658ad26eacc2b6c506dfde519f4e277e328d0eb3379ca61647d70a8f531"
 
 [[package]]
 name = "ring"
-version = "0.16.16"
+version = "0.16.18"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b72b84d47e8ec5a4f2872e8262b8f8256c5be1c938a7d6d3a867a3ba8f722f74"
+checksum = "70017ed5c555d79ee3538fc63ca09c70ad8f317dcadc1adc2c496b60c22bb24f"
 dependencies = [
  "cc",
  "libc",
@@ -5189,14 +5212,14 @@ dependencies = [
 
 [[package]]
 name = "rust-argon2"
-version = "0.8.2"
+version = "0.8.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9dab61250775933275e84053ac235621dfb739556d5c54a2f2e9313b7cf43a19"
+checksum = "4b18820d944b33caa75a71378964ac46f58517c92b6ae5f762636247c09e78fb"
 dependencies = [
- "base64 0.12.3",
+ "base64 0.13.0",
  "blake2b_simd",
  "constant_time_eq",
- "crossbeam-utils 0.7.2",
+ "crossbeam-utils 0.8.1",
 ]
 
 [[package]]
@@ -6450,9 +6473,9 @@ checksum = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8"
 
 [[package]]
 name = "slog"
-version = "2.5.2"
+version = "2.7.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1cc9c640a4adbfbcc11ffb95efe5aa7af7309e002adab54b185507dbf2377b99"
+checksum = "8347046d4ebd943127157b94d63abb990fcf729dc4e9978927fdf4ac3c998d06"
 dependencies = [
  "erased-serde",
 ]
@@ -6527,11 +6550,11 @@ dependencies = [
 
 [[package]]
 name = "socket2"
-version = "0.3.16"
+version = "0.3.17"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7fd8b795c389288baa5f355489c65e71fd48a02104600d15c4cfbc561e9e429d"
+checksum = "2c29947abdee2a218277abeca306f25789c938e500ea5a9d4b12a5a504466902"
 dependencies = [
- "cfg-if 0.1.10",
+ "cfg-if 1.0.0",
  "libc",
  "redox_syscall",
  "winapi 0.3.9",
@@ -7239,9 +7262,9 @@ checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
 
 [[package]]
 name = "structopt"
-version = "0.3.20"
+version = "0.3.21"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "126d630294ec449fae0b16f964e35bf3c74f940da9dca17ee9b905f7b3112eb8"
+checksum = "5277acd7ee46e63e5168a80734c9f6ee81b1367a7d8772a2d765df2a3705d28c"
 dependencies = [
  "clap",
  "lazy_static",
@@ -7250,9 +7273,9 @@ dependencies = [
 
 [[package]]
 name = "structopt-derive"
-version = "0.4.13"
+version = "0.4.14"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "65e51c492f9e23a220534971ff5afc14037289de430e3c83f9daf6a1b6ae91e8"
+checksum = "5ba9cdfda491b814720b6b06e0cac513d922fc407582032e8706e9f137976f90"
 dependencies = [
  "heck",
  "proc-macro-error",
@@ -7492,9 +7515,9 @@ checksum = "343f3f510c2915908f155e94f17220b19ccfacf2a64a2a5d8004f2c3e311e7fd"
 
 [[package]]
 name = "syn"
-version = "1.0.48"
+version = "1.0.53"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cc371affeffc477f42a221a1e4297aedcea33d47d19b61455588bd9d8f6b19ac"
+checksum = "8833e20724c24de12bbaba5ad230ea61c3eafb05b881c7c9d3cfe8638b187e68"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -7680,7 +7703,7 @@ dependencies = [
  "mio",
  "mio-uds",
  "num_cpus",
- "pin-project-lite",
+ "pin-project-lite 0.1.11",
  "signal-hook-registry",
  "slab",
  "winapi 0.3.9",
@@ -7921,7 +7944,7 @@ dependencies = [
  "futures-core",
  "futures-sink",
  "log",
- "pin-project-lite",
+ "pin-project-lite 0.1.11",
  "tokio 0.2.23",
 ]
 
@@ -7942,13 +7965,13 @@ checksum = "e987b6bf443f4b5b3b6f38704195592cca41c5bb7aedd3c3693c7081f8289860"
 
 [[package]]
 name = "tracing"
-version = "0.1.21"
+version = "0.1.22"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b0987850db3733619253fe60e17cb59b82d37c7e6c0236bb81e4d6b87c879f27"
+checksum = "9f47026cdc4080c07e49b37087de021820269d996f581aac150ef9e5583eefe3"
 dependencies = [
- "cfg-if 0.1.10",
+ "cfg-if 1.0.0",
  "log",
- "pin-project-lite",
+ "pin-project-lite 0.2.0",
  "tracing-attributes",
  "tracing-core",
 ]
@@ -8112,9 +8135,9 @@ dependencies = [
 
 [[package]]
 name = "unicode-segmentation"
-version = "1.7.0"
+version = "1.7.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "db8716a166f290ff49dabc18b44aa407cb7c6dbe1aa0971b44b8a24b0ca35aae"
+checksum = "bb0d2e7be6ae3a5fa87eed5fb451aff96f2573d2694942e40543ae0bbe19c796"
 
 [[package]]
 name = "unicode-width"
@@ -8260,19 +8283,19 @@ checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f"
 
 [[package]]
 name = "wasm-bindgen"
-version = "0.2.68"
+version = "0.2.69"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1ac64ead5ea5f05873d7c12b545865ca2b8d28adfc50a49b84770a3a97265d42"
+checksum = "3cd364751395ca0f68cafb17666eee36b63077fb5ecd972bbcd74c90c4bf736e"
 dependencies = [
- "cfg-if 0.1.10",
+ "cfg-if 1.0.0",
  "wasm-bindgen-macro",
 ]
 
 [[package]]
 name = "wasm-bindgen-backend"
-version = "0.2.68"
+version = "0.2.69"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f22b422e2a757c35a73774860af8e112bff612ce6cb604224e8e47641a9e4f68"
+checksum = "1114f89ab1f4106e5b55e688b828c0ab0ea593a1ea7c094b141b14cbaaec2d62"
 dependencies = [
  "bumpalo",
  "lazy_static",
@@ -8285,11 +8308,11 @@ dependencies = [
 
 [[package]]
 name = "wasm-bindgen-futures"
-version = "0.4.18"
+version = "0.4.19"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b7866cab0aa01de1edf8b5d7936938a7e397ee50ce24119aef3e1eaa3b6171da"
+checksum = "1fe9756085a84584ee9457a002b7cdfe0bfff169f45d2591d8be1345a6780e35"
 dependencies = [
- "cfg-if 0.1.10",
+ "cfg-if 1.0.0",
  "js-sys",
  "wasm-bindgen",
  "web-sys",
@@ -8297,9 +8320,9 @@ dependencies = [
 
 [[package]]
 name = "wasm-bindgen-macro"
-version = "0.2.68"
+version = "0.2.69"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6b13312a745c08c469f0b292dd2fcd6411dba5f7160f593da6ef69b64e407038"
+checksum = "7a6ac8995ead1f084a8dea1e65f194d0973800c7f571f6edd70adf06ecf77084"
 dependencies = [
  "quote",
  "wasm-bindgen-macro-support",
@@ -8307,9 +8330,9 @@ dependencies = [
 
 [[package]]
 name = "wasm-bindgen-macro-support"
-version = "0.2.68"
+version = "0.2.69"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f249f06ef7ee334cc3b8ff031bfc11ec99d00f34d86da7498396dc1e3b1498fe"
+checksum = "b5a48c72f299d80557c7c62e37e7225369ecc0c963964059509fbafe917c7549"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -8320,9 +8343,9 @@ dependencies = [
 
 [[package]]
 name = "wasm-bindgen-shared"
-version = "0.2.68"
+version = "0.2.69"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1d649a3145108d7d3fbcde896a468d1bd636791823c9921135218ad89be08307"
+checksum = "7e7811dd7f9398f14cc76efd356f98f03aa30419dea46aa810d71e819fc97158"
 
 [[package]]
 name = "wasm-timer"
@@ -8364,9 +8387,9 @@ dependencies = [
 
 [[package]]
 name = "web-sys"
-version = "0.3.45"
+version = "0.3.46"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4bf6ef87ad7ae8008e15a355ce696bed26012b7caa21605188cfd8214ab51e2d"
+checksum = "222b1ef9334f92a21d3fb53dc3fd80f30836959a90f9274a626d7e06315ba3c3"
 dependencies = [
  "js-sys",
  "wasm-bindgen",

+ 1 - 4
node/src/chain_spec/mod.rs

@@ -281,10 +281,7 @@ pub fn testnet_genesis(
                 min_voting_stake: 100,
             },
         }),
-        membership: Some(MembersConfig {
-            default_paid_membership_fee: 100u128,
-            members,
-        }),
+        membership: Some(MembersConfig { members }),
         forum: Some(forum_config),
         data_object_type_registry: Some(DataObjectTypeRegistryConfig {
             first_data_object_type_id: 1,

+ 2 - 1
runtime-modules/constitution/Cargo.toml

@@ -11,14 +11,15 @@ sp-std = { package = 'sp-std', default-features = false, git = 'https://github.c
 frame-support = { package = 'frame-support', default-features = false, git = 'https://github.com/paritytech/substrate.git', rev = 'a200cdb93c6af5763b9c7bf313fa708764ac88ca'}
 frame_system = { package = 'frame-system', default-features = false, git = 'https://github.com/paritytech/substrate.git', rev = 'a200cdb93c6af5763b9c7bf313fa708764ac88ca'}
 sp-runtime = { package = 'sp-runtime', default-features = false, git = 'https://github.com/paritytech/substrate.git', rev = 'a200cdb93c6af5763b9c7bf313fa708764ac88ca'}
+frame-benchmarking = { package = 'frame-benchmarking', default-features = false, git = 'https://github.com/paritytech/substrate.git', rev = 'a200cdb93c6af5763b9c7bf313fa708764ac88ca', optional = true}
 
 [dev-dependencies]
 sp-io = { package = 'sp-io', default-features = false, git = 'https://github.com/paritytech/substrate.git', rev = 'a200cdb93c6af5763b9c7bf313fa708764ac88ca'}
 sp-core = { package = 'sp-core', default-features = false, git = 'https://github.com/paritytech/substrate.git', rev = 'a200cdb93c6af5763b9c7bf313fa708764ac88ca'}
 
-
 [features]
 default = ['std']
+runtime-benchmarks = ["frame-benchmarking"]
 std = [
     'serde',
     'codec/std',

+ 55 - 0
runtime-modules/constitution/src/benchmarking.rs

@@ -0,0 +1,55 @@
+#![cfg(feature = "runtime-benchmarks")]
+
+use crate::{Call, ConstitutionInfo, Event, Module, Trait};
+use frame_benchmarking::benchmarks;
+use frame_system::Module as System;
+use frame_system::{EventRecord, RawOrigin};
+use sp_runtime::traits::Hash;
+use sp_std::boxed::Box;
+use sp_std::vec;
+use sp_std::vec::Vec;
+
+fn assert_last_event<T: Trait>(generic_event: <T as Trait>::Event) {
+    let events = System::<T>::events();
+    let system_event: <T as frame_system::Trait>::Event = generic_event.into();
+    // compare to the last event record
+    let EventRecord { event, .. } = &events[events.len() - 1];
+    assert_eq!(event, &system_event);
+}
+
+const MAX_BYTES: u32 = 50000;
+
+benchmarks! {
+    _{ }
+
+    amend_constitution{
+        let i in 1 .. MAX_BYTES;
+        let text = vec![0u8].repeat(i as usize);
+
+    }: _ (RawOrigin::Root, text.clone())
+    verify {
+            let hashed = T::Hashing::hash(&text);
+            let hash = hashed.as_ref().to_vec();
+
+            let constitution_info = ConstitutionInfo{
+                text_hash: hash.clone(),
+            };
+
+            assert_eq!(Module::<T>::constitution(), constitution_info);
+            assert_last_event::<T>(Event::ConstutionAmended(hash).into());
+    }
+}
+
+#[cfg(test)]
+mod tests {
+    use super::*;
+    use crate::tests::mocks::{build_test_externalities, Test};
+    use frame_support::assert_ok;
+
+    #[test]
+    fn amend_constitution() {
+        build_test_externalities().execute_with(|| {
+            assert_ok!(test_benchmark_amend_constitution::<Test>());
+        });
+    }
+}

+ 22 - 2
runtime-modules/constitution/src/lib.rs

@@ -8,18 +8,33 @@
 #![cfg_attr(not(feature = "std"), no_std)]
 
 #[cfg(test)]
-mod tests;
+pub(crate) mod tests;
+
+mod benchmarking;
 
 use codec::{Decode, Encode};
+use frame_support::weights::Weight;
 use frame_support::{decl_event, decl_module, decl_storage};
 use frame_system::ensure_root;
 #[cfg(feature = "std")]
 use serde::{Deserialize, Serialize};
 use sp_runtime::traits::Hash;
+use sp_runtime::SaturatedConversion;
 use sp_std::vec::Vec;
 
+/// pallet_constitution WeightInfo.
+/// Note: This was auto generated through the benchmark CLI using the `--weight-trait` flag
+pub trait WeightInfo {
+    fn amend_constitution(i: u32) -> Weight;
+}
+
+type WeightInfoConstitution<T> = <T as Trait>::WeightInfo;
+
 pub trait Trait: frame_system::Trait {
     type Event: From<Event> + Into<<Self as frame_system::Trait>::Event>;
+
+    /// Weight information for extrinsics in this pallet.
+    type WeightInfo: WeightInfo;
 }
 
 /// Contains constitution text hash and its amendment number.
@@ -50,7 +65,12 @@ decl_module! {
         fn deposit_event() = default;
 
         /// Sets the current constitution hash. Requires root origin.
-        #[weight = 10_000_000] // TODO: adjust weight
+        /// # <weight>
+        /// - Complexity: `O(C)` where C is the length of the constitution text.
+        /// - Db reads: 0
+        /// - Db writes: 1 (constant value)
+        /// # </weight>
+        #[weight = WeightInfoConstitution::<T>::amend_constitution(constitution_text.len().saturated_into())]
         fn amend_constitution(origin, constitution_text: Vec<u8>) {
             ensure_root(origin)?;
 

+ 7 - 0
runtime-modules/constitution/src/tests/mocks.rs

@@ -64,6 +64,13 @@ impl frame_system::Trait for Test {
 
 impl Trait for Test {
     type Event = TestEvent;
+    type WeightInfo = ();
+}
+
+impl crate::WeightInfo for () {
+    fn amend_constitution(_: u32) -> u64 {
+        0
+    }
 }
 
 pub fn build_test_externalities() -> sp_io::TestExternalities {

+ 1 - 1
runtime-modules/constitution/src/tests/mod.rs

@@ -1,6 +1,6 @@
 #![cfg(test)]
 
-mod mocks;
+pub(crate) mod mocks;
 
 use crate::{ConstitutionInfo, Event};
 use frame_support::dispatch::DispatchResult;

+ 2 - 3
runtime-modules/governance/src/mock.rs

@@ -25,6 +25,7 @@ parameter_types! {
     pub const MaximumBlockLength: u32 = 2 * 1024;
     pub const AvailableBlockRatio: Perbill = Perbill::one();
     pub const MinimumPeriod: u64 = 5;
+    pub const MembershipFee: u64 = 100;
 }
 
 impl frame_system::Trait for Test {
@@ -74,9 +75,8 @@ impl election::Trait for Test {
 impl membership::Trait for Test {
     type Event = ();
     type MemberId = u64;
-    type SubscriptionId = u32;
-    type PaidTermId = u32;
     type ActorId = u32;
+    type MembershipFee = MembershipFee;
 }
 impl minting::Trait for Test {
     type Currency = Balances;
@@ -115,7 +115,6 @@ pub fn initial_test_ext() -> sp_io::TestExternalities {
         .unwrap();
 
     let members_config_builder = membership::genesis::GenesisConfigBuilder::<Test>::default()
-        .default_paid_membership_fee(0)
         .members(vec![
             // member_id, account_id
             (0, 1),

+ 1 - 16
runtime-modules/membership/src/genesis.rs

@@ -1,7 +1,6 @@
 #![cfg(feature = "std")]
 
 use crate::{GenesisConfig, Trait};
-use common::currency::BalanceOf;
 use serde::{Deserialize, Serialize};
 
 #[derive(Clone, Serialize, Deserialize)]
@@ -17,29 +16,16 @@ pub struct Member<MemberId, AccountId, Moment> {
 
 /// Builder fo membership module genesis configuration.
 pub struct GenesisConfigBuilder<T: Trait> {
-    default_paid_membership_fee: BalanceOf<T>,
     members: Vec<(T::MemberId, T::AccountId)>,
 }
 
 impl<T: Trait> Default for GenesisConfigBuilder<T> {
     fn default() -> Self {
-        Self {
-            default_paid_membership_fee: BalanceOf::<T>::default(), // Was 100, will this break any tests??
-            members: vec![],
-        }
+        Self { members: vec![] }
     }
 }
 
 impl<T: Trait> GenesisConfigBuilder<T> {
-    /// Assign default paid membeship fee
-    pub fn default_paid_membership_fee(
-        mut self,
-        default_paid_membership_fee: BalanceOf<T>,
-    ) -> Self {
-        self.default_paid_membership_fee = default_paid_membership_fee;
-        self
-    }
-
     /// Assign a collection of MemberId and AccountId pairs, used to derive mock member at genesis
     pub fn members(mut self, members: Vec<(T::MemberId, T::AccountId)>) -> Self {
         self.members = members;
@@ -67,7 +53,6 @@ impl<T: Trait> GenesisConfigBuilder<T> {
     /// Construct GenesisConfig for mocked testing purposes only
     pub fn build(&self) -> GenesisConfig<T> {
         GenesisConfig::<T> {
-            default_paid_membership_fee: self.default_paid_membership_fee,
             members: self.generate_mock_members(),
         }
     }

+ 26 - 146
runtime-modules/membership/src/lib.rs

@@ -1,31 +1,27 @@
 // Ensure we're `no_std` when compiling for Wasm.
 #![cfg_attr(not(feature = "std"), no_std)]
-// Clippy linter requirement.
-// Disable it because of the substrate lib design
-// Example:  pub PaidMembershipTermsById get(paid_membership_terms_by_id) build(|config: &GenesisConfig<T>| {}
-#![allow(clippy::redundant_closure_call)]
 
 pub mod genesis;
 pub(crate) mod mock;
 mod tests;
 
 use codec::{Codec, Decode, Encode};
-use frame_support::traits::Currency;
+use frame_support::traits::{Currency, Get};
 use frame_support::{decl_event, decl_module, decl_storage, ensure, Parameter};
-use frame_system::{ensure_root, ensure_signed};
+use frame_system::ensure_signed;
 use sp_arithmetic::traits::{BaseArithmetic, One};
 use sp_runtime::traits::{MaybeSerialize, Member};
 use sp_std::borrow::ToOwned;
-use sp_std::vec;
 use sp_std::vec::Vec;
 
-use common::currency::{BalanceOf, GovernanceCurrency};
+// Balance type alias
+type BalanceOf<T> = <T as balances::Trait>::Balance;
 
 //TODO: Convert errors to the Substrate decl_error! macro.
 /// Result with string error message. This exists for backward compatibility purpose.
 pub type DispatchResult = Result<(), &'static str>;
 
-pub trait Trait: frame_system::Trait + GovernanceCurrency + pallet_timestamp::Trait {
+pub trait Trait: frame_system::Trait + balances::Trait + pallet_timestamp::Trait {
     type Event: From<Event<Self>> + Into<<Self as frame_system::Trait>::Event>;
 
     type MemberId: Parameter
@@ -37,24 +33,6 @@ pub trait Trait: frame_system::Trait + GovernanceCurrency + pallet_timestamp::Tr
         + MaybeSerialize
         + PartialEq;
 
-    type PaidTermId: Parameter
-        + Member
-        + BaseArithmetic
-        + Codec
-        + Default
-        + Copy
-        + MaybeSerialize
-        + PartialEq;
-
-    type SubscriptionId: Parameter
-        + Member
-        + BaseArithmetic
-        + Codec
-        + Default
-        + Copy
-        + MaybeSerialize
-        + PartialEq;
-
     /// Describes the common type for the working group members (workers).
     type ActorId: Parameter
         + Member
@@ -65,12 +43,10 @@ pub trait Trait: frame_system::Trait + GovernanceCurrency + pallet_timestamp::Tr
         + MaybeSerialize
         + PartialEq
         + Ord;
-}
-
-const FIRST_PAID_TERMS_ID: u8 = 1;
 
-// Default paid membership terms
-pub const DEFAULT_PAID_TERM_ID: u8 = 0;
+    /// Defines the default membership fee.
+    type MembershipFee: Get<BalanceOf<Self>>;
+}
 
 // Default user info constraints
 const DEFAULT_MIN_HANDLE_LENGTH: u32 = 5;
@@ -82,14 +58,12 @@ const DEFAULT_MAX_ABOUT_TEXT_LENGTH: u32 = 2048;
 pub type Membership<T> = MembershipObject<
     <T as frame_system::Trait>::BlockNumber,
     <T as pallet_timestamp::Trait>::Moment,
-    <T as Trait>::PaidTermId,
-    <T as Trait>::SubscriptionId,
     <T as frame_system::Trait>::AccountId,
 >;
 
 #[derive(Encode, Decode, Default)]
 /// Stored information about a registered user
-pub struct MembershipObject<BlockNumber, Moment, PaidTermId, SubscriptionId, AccountId> {
+pub struct MembershipObject<BlockNumber, Moment, AccountId> {
     /// The unique handle chosen by member
     pub handle: Vec<u8>,
 
@@ -106,13 +80,7 @@ pub struct MembershipObject<BlockNumber, Moment, PaidTermId, SubscriptionId, Acc
     pub registered_at_time: Moment,
 
     /// How the member was registered
-    pub entry: EntryMethod<PaidTermId, AccountId>,
-
-    /// Whether the member is suspended or not.
-    pub suspended: bool,
-
-    /// The type of subscription the member has purchased if any.
-    pub subscription: Option<SubscriptionId>,
+    pub entry: EntryMethod,
 
     /// Member's root account id. Only the root account is permitted to set a new root account
     /// and update the controller account. Other modules may only allow certain actions if
@@ -134,28 +102,19 @@ struct ValidatedUserInfo {
 }
 
 #[derive(Encode, Decode, Debug, PartialEq)]
-pub enum EntryMethod<PaidTermId, AccountId> {
-    Paid(PaidTermId),
-    Screening(AccountId),
+pub enum EntryMethod {
+    Paid,
     Genesis,
 }
 
 /// Must be default constructible because it indirectly is a value in a storage map.
 /// ***SHOULD NEVER ACTUALLY GET CALLED, IS REQUIRED TO DUE BAD STORAGE MODEL IN SUBSTRATE***
-impl<PaidTermId, AccountId> Default for EntryMethod<PaidTermId, AccountId> {
+impl Default for EntryMethod {
     fn default() -> Self {
         Self::Genesis
     }
 }
 
-#[derive(Encode, Decode, Eq, PartialEq, Default)]
-pub struct PaidMembershipTerms<Balance> {
-    /// Quantity of native tokens which must be provably burned
-    pub fee: Balance,
-    /// String of capped length describing human readable conditions which are being agreed upon
-    pub text: Vec<u8>,
-}
-
 decl_storage! {
     trait Store for Module<T: Trait> as Membership {
         /// MemberId to assign to next member that is added to the registry, and is also the
@@ -178,34 +137,9 @@ decl_storage! {
         pub MemberIdByHandle get(fn handles) : map hasher(blake2_128_concat)
             Vec<u8> => T::MemberId;
 
-        /// Next paid membership terms id
-        pub NextPaidMembershipTermsId get(fn next_paid_membership_terms_id) :
-            T::PaidTermId = T::PaidTermId::from(FIRST_PAID_TERMS_ID);
-
-        /// Paid membership terms record
-        // Remember to add _genesis_phantom_data: std::marker::PhantomData{} to membership
-        // genesis config if not providing config() or extra_genesis
-        pub PaidMembershipTermsById get(fn paid_membership_terms_by_id) build(|config: &GenesisConfig<T>| {
-            // This method only gets called when initializing storage, and is
-            // compiled as native code. (Will be called when building `raw` chainspec)
-            // So it can't be relied upon to initialize storage for runtimes updates.
-            // Initialization for updated runtime is done in run_migration()
-            let terms = PaidMembershipTerms {
-                fee:  config.default_paid_membership_fee,
-                text: Vec::default(),
-            };
-            vec![(T::PaidTermId::from(DEFAULT_PAID_TERM_ID), terms)]
-        }) : map hasher(blake2_128_concat) T::PaidTermId => PaidMembershipTerms<BalanceOf<T>>;
-
-        /// Active Paid membership terms
-        pub ActivePaidMembershipTerms get(fn active_paid_membership_terms) :
-            Vec<T::PaidTermId> = vec![T::PaidTermId::from(DEFAULT_PAID_TERM_ID)];
-
         /// Is the platform is accepting new members or not
         pub NewMembershipsAllowed get(fn new_memberships_allowed) : bool = true;
 
-        pub ScreeningAuthority get(fn screening_authority) : T::AccountId;
-
         // User Input Validation parameters - do these really need to be state variables
         // I don't see a need to adjust these in future?
         pub MinHandleLength get(fn min_handle_length) : u32 = DEFAULT_MIN_HANDLE_LENGTH;
@@ -215,7 +149,6 @@ decl_storage! {
 
     }
     add_extra_genesis {
-        config(default_paid_membership_fee): BalanceOf<T>;
         config(members) : Vec<genesis::Member<T::MemberId, T::AccountId, T::Moment>>;
         build(|config: &GenesisConfig<T>| {
             for member in &config.members {
@@ -234,6 +167,8 @@ decl_storage! {
                     member.registered_at_time
                 ).expect("Importing Member Failed");
 
+
+
                 // ensure imported member id matches assigned id
                 assert_eq!(member_id, member.member_id, "Import Member Failed: MemberId Incorrect");
             }
@@ -259,11 +194,13 @@ decl_module! {
     pub struct Module<T: Trait> for enum Call where origin: T::Origin {
         fn deposit_event() = default;
 
+        /// Exports const - membership fee.
+        const MembershipFee: BalanceOf<T> = T::MembershipFee::get();
+
         /// Non-members can buy membership
         #[weight = 10_000_000] // TODO: adjust weight
         pub fn buy_membership(
             origin,
-            paid_terms_id: T::PaidTermId,
             handle: Option<Vec<u8>>,
             avatar_uri: Option<Vec<u8>>,
             about: Option<Vec<u8>>
@@ -273,11 +210,13 @@ decl_module! {
             // make sure we are accepting new memberships
             ensure!(Self::new_memberships_allowed(), "new members not allowed");
 
-            // ensure paid_terms_id is active
-            let terms = Self::ensure_active_terms_id(paid_terms_id)?;
+            let fee = T::MembershipFee::get();
 
             // ensure enough free balance to cover terms fees
-            ensure!(T::Currency::can_slash(&who, terms.fee), "not enough balance to buy membership");
+            ensure!(
+                balances::Module::<T>::usable_balance(&who) >= fee,
+                "not enough balance to buy membership"
+            );
 
             let user_info = Self::check_user_registration_info(handle, avatar_uri, about)?;
 
@@ -285,12 +224,12 @@ decl_module! {
                 &who,
                 &who,
                 &user_info,
-                EntryMethod::Paid(paid_terms_id),
+                EntryMethod::Paid,
                 <frame_system::Module<T>>::block_number(),
                 <pallet_timestamp::Module<T>>::now()
             )?;
 
-            let _ = T::Currency::slash(&who, terms.fee);
+            let _ = balances::Module::<T>::slash(&who, fee);
 
             Self::deposit_event(RawEvent::MemberRegistered(member_id, who));
         }
@@ -405,47 +344,6 @@ decl_module! {
                 Self::deposit_event(RawEvent::MemberSetRootAccount(member_id, new_root_account));
             }
         }
-
-        #[weight = 10_000_000] // TODO: adjust weight
-        pub fn add_screened_member(
-            origin,
-            new_member_account: T::AccountId,
-            handle: Option<Vec<u8>>,
-            avatar_uri: Option<Vec<u8>>,
-            about: Option<Vec<u8>>
-        ) {
-            // ensure sender is screening authority
-            let sender = ensure_signed(origin)?;
-
-            if <ScreeningAuthority<T>>::exists() {
-                ensure!(sender == Self::screening_authority(), "not screener");
-            } else {
-                // no screening authority defined. Cannot accept this request
-                return Err("no screening authority defined".into());
-            }
-
-            // make sure we are accepting new memberships
-            ensure!(Self::new_memberships_allowed(), "new members not allowed");
-
-            let user_info = Self::check_user_registration_info(handle, avatar_uri, about)?;
-
-            let member_id = Self::insert_member(
-                &new_member_account,
-                &new_member_account,
-                &user_info,
-                EntryMethod::Screening(sender),
-                <frame_system::Module<T>>::block_number(),
-                <pallet_timestamp::Module<T>>::now()
-            )?;
-
-            Self::deposit_event(RawEvent::MemberRegistered(member_id, new_member_account));
-        }
-
-        #[weight = 10_000_000] // TODO: adjust weight
-        pub fn set_screening_authority(origin, authority: T::AccountId) {
-            ensure_root(origin)?;
-            <ScreeningAuthority<T>>::put(authority);
-        }
     }
 }
 
@@ -504,22 +402,6 @@ impl<T: Trait> Module<T> {
             || <MemberIdsByControllerAccountId<T>>::contains_key(who)
     }
 
-    fn ensure_active_terms_id(
-        terms_id: T::PaidTermId,
-    ) -> Result<PaidMembershipTerms<BalanceOf<T>>, &'static str> {
-        let active_terms = Self::active_paid_membership_terms();
-        ensure!(
-            active_terms.iter().any(|&id| id == terms_id),
-            "paid terms id not active"
-        );
-
-        if <PaidMembershipTermsById<T>>::contains_key(terms_id) {
-            Ok(Self::paid_membership_terms_by_id(terms_id))
-        } else {
-            Err("paid membership term id does not exist")
-        }
-    }
-
     #[allow(clippy::ptr_arg)] // cannot change to the "&[u8]" suggested by clippy
     fn ensure_unique_handle(handle: &Vec<u8>) -> DispatchResult {
         ensure!(
@@ -580,7 +462,7 @@ impl<T: Trait> Module<T> {
         root_account: &T::AccountId,
         controller_account: &T::AccountId,
         user_info: &ValidatedUserInfo,
-        entry_method: EntryMethod<T::PaidTermId, T::AccountId>,
+        entry_method: EntryMethod,
         registered_at_block: T::BlockNumber,
         registered_at_time: T::Moment,
     ) -> Result<T::MemberId, &'static str> {
@@ -595,8 +477,6 @@ impl<T: Trait> Module<T> {
             registered_at_block,
             registered_at_time,
             entry: entry_method,
-            suspended: false,
-            subscription: None,
             root_account: root_account.clone(),
             controller_account: controller_account.clone(),
         };

+ 3 - 3
runtime-modules/membership/src/mock.rs

@@ -1,6 +1,6 @@
 #![cfg(test)]
 
-pub use crate::{GenesisConfig, Trait, DEFAULT_PAID_TERM_ID};
+pub use crate::{GenesisConfig, Trait};
 
 pub use frame_support::traits::Currency;
 use frame_support::{impl_outer_origin, parameter_types};
@@ -66,6 +66,7 @@ impl pallet_timestamp::Trait for Test {
 
 parameter_types! {
     pub const ExistentialDeposit: u32 = 0;
+    pub const MembershipFee: u64 = 100;
 }
 
 impl balances::Trait for Test {
@@ -85,9 +86,8 @@ impl GovernanceCurrency for Test {
 impl Trait for Test {
     type Event = ();
     type MemberId = u64;
-    type PaidTermId = u32;
-    type SubscriptionId = u32;
     type ActorId = u32;
+    type MembershipFee = MembershipFee;
 }
 
 pub struct TestExternalitiesBuilder<T: Trait> {

+ 28 - 95
runtime-modules/membership/src/tests.rs

@@ -3,6 +3,7 @@
 use super::genesis;
 use super::mock::*;
 
+use frame_support::traits::{LockIdentifier, LockableCurrency, WithdrawReasons};
 use frame_support::*;
 
 fn get_membership_by_id(member_id: u64) -> crate::Membership<Test> {
@@ -56,7 +57,6 @@ fn buy_default_membership_as_alice() -> crate::DispatchResult {
     let info = get_alice_info();
     Members::buy_membership(
         Origin::signed(ALICE_ACCOUNT_ID),
-        DEFAULT_PAID_TERM_ID as u32,
         info.handle,
         info.avatar_uri,
         info.about,
@@ -68,46 +68,15 @@ fn set_alice_free_balance(balance: u64) {
     let _ = Balances::deposit_creating(&ALICE_ACCOUNT_ID, balance);
 }
 
-#[test]
-fn initial_state() {
-    const DEFAULT_FEE: u64 = 500;
-    let initial_members = [(0, 1), (1, 2), (2, 3)];
-
-    TestExternalitiesBuilder::<Test>::default()
-        .set_membership_config(
-            genesis::GenesisConfigBuilder::default()
-                .default_paid_membership_fee(DEFAULT_FEE)
-                .members(initial_members.to_vec())
-                .build(),
-        )
-        .build()
-        .execute_with(|| {
-            let default_terms = if <crate::PaidMembershipTermsById<Test>>::contains_key(
-                DEFAULT_PAID_TERM_ID as u32,
-            ) {
-                Members::paid_membership_terms_by_id(DEFAULT_PAID_TERM_ID as u32)
-            } else {
-                panic!("default terms not initialized");
-            };
-
-            assert_eq!(default_terms.fee, DEFAULT_FEE);
-        });
-}
-
 #[test]
 fn buy_membership() {
-    const DEFAULT_FEE: u64 = 500;
     const SURPLUS_BALANCE: u64 = 500;
 
     TestExternalitiesBuilder::<Test>::default()
-        .set_membership_config(
-            genesis::GenesisConfigBuilder::default()
-                .default_paid_membership_fee(DEFAULT_FEE)
-                .build(),
-        )
+        .set_membership_config(genesis::GenesisConfigBuilder::default().build())
         .build()
         .execute_with(|| {
-            let initial_balance = DEFAULT_FEE + SURPLUS_BALANCE;
+            let initial_balance = MembershipFee::get() + SURPLUS_BALANCE;
             set_alice_free_balance(initial_balance);
 
             let next_member_id = Members::members_created();
@@ -136,17 +105,29 @@ fn buy_membership() {
 
 #[test]
 fn buy_membership_fails_without_enough_balance() {
-    const DEFAULT_FEE: u64 = 500;
+    TestExternalitiesBuilder::<Test>::default()
+        .set_membership_config(genesis::GenesisConfigBuilder::default().build())
+        .build()
+        .execute_with(|| {
+            let initial_balance = MembershipFee::get() - 1;
+            set_alice_free_balance(initial_balance);
+
+            assert_dispatch_error_message(
+                buy_default_membership_as_alice(),
+                "not enough balance to buy membership",
+            );
+        });
+}
 
+#[test]
+fn buy_membership_fails_without_enough_balance_with_locked_balance() {
     TestExternalitiesBuilder::<Test>::default()
-        .set_membership_config(
-            genesis::GenesisConfigBuilder::default()
-                .default_paid_membership_fee(DEFAULT_FEE)
-                .build(),
-        )
+        .set_membership_config(genesis::GenesisConfigBuilder::default().build())
         .build()
         .execute_with(|| {
-            let initial_balance = DEFAULT_FEE - 1;
+            let initial_balance = MembershipFee::get();
+            let lock_id = LockIdentifier::default();
+            Balances::set_lock(lock_id, &ALICE_ACCOUNT_ID, 1, WithdrawReasons::all());
             set_alice_free_balance(initial_balance);
 
             assert_dispatch_error_message(
@@ -158,17 +139,11 @@ fn buy_membership_fails_without_enough_balance() {
 
 #[test]
 fn new_memberships_allowed_flag() {
-    const DEFAULT_FEE: u64 = 500;
-
     TestExternalitiesBuilder::<Test>::default()
-        .set_membership_config(
-            genesis::GenesisConfigBuilder::default()
-                .default_paid_membership_fee(DEFAULT_FEE)
-                .build(),
-        )
+        .set_membership_config(genesis::GenesisConfigBuilder::default().build())
         .build()
         .execute_with(|| {
-            let initial_balance = DEFAULT_FEE + 1;
+            let initial_balance = MembershipFee::get() + 1;
             set_alice_free_balance(initial_balance);
 
             crate::NewMembershipsAllowed::put(false);
@@ -182,18 +157,13 @@ fn new_memberships_allowed_flag() {
 
 #[test]
 fn unique_handles() {
-    const DEFAULT_FEE: u64 = 500;
     const SURPLUS_BALANCE: u64 = 500;
 
     TestExternalitiesBuilder::<Test>::default()
-        .set_membership_config(
-            genesis::GenesisConfigBuilder::default()
-                .default_paid_membership_fee(DEFAULT_FEE)
-                .build(),
-        )
+        .set_membership_config(genesis::GenesisConfigBuilder::default().build())
         .build()
         .execute_with(|| {
-            let initial_balance = DEFAULT_FEE + SURPLUS_BALANCE;
+            let initial_balance = MembershipFee::get() + SURPLUS_BALANCE;
             set_alice_free_balance(initial_balance);
 
             // alice's handle already taken
@@ -209,18 +179,13 @@ fn unique_handles() {
 
 #[test]
 fn update_profile() {
-    const DEFAULT_FEE: u64 = 500;
     const SURPLUS_BALANCE: u64 = 500;
 
     TestExternalitiesBuilder::<Test>::default()
-        .set_membership_config(
-            genesis::GenesisConfigBuilder::default()
-                .default_paid_membership_fee(DEFAULT_FEE)
-                .build(),
-        )
+        .set_membership_config(genesis::GenesisConfigBuilder::default().build())
         .build()
         .execute_with(|| {
-            let initial_balance = DEFAULT_FEE + SURPLUS_BALANCE;
+            let initial_balance = MembershipFee::get() + SURPLUS_BALANCE;
             set_alice_free_balance(initial_balance);
 
             let next_member_id = Members::members_created();
@@ -243,38 +208,6 @@ fn update_profile() {
         });
 }
 
-#[test]
-fn add_screened_member() {
-    TestExternalitiesBuilder::<Test>::default()
-        .set_membership_config(genesis::GenesisConfigBuilder::default().build())
-        .build()
-        .execute_with(|| {
-            let screening_authority = 5;
-            <crate::ScreeningAuthority<Test>>::put(&screening_authority);
-
-            let next_member_id = Members::members_created();
-
-            let info = get_alice_info();
-            assert_ok!(Members::add_screened_member(
-                Origin::signed(screening_authority),
-                ALICE_ACCOUNT_ID,
-                info.handle,
-                info.avatar_uri,
-                info.about
-            ));
-
-            let profile = get_membership_by_id(next_member_id);
-
-            assert_eq!(Some(profile.handle), get_alice_info().handle);
-            assert_eq!(Some(profile.avatar_uri), get_alice_info().avatar_uri);
-            assert_eq!(Some(profile.about), get_alice_info().about);
-            assert_eq!(
-                crate::EntryMethod::Screening(screening_authority),
-                profile.entry
-            );
-        });
-}
-
 #[test]
 fn set_controller_key() {
     let initial_members = [(0, ALICE_ACCOUNT_ID)];

+ 2 - 2
runtime-modules/proposals/codex/src/tests/mock.rs

@@ -47,12 +47,12 @@ impl common::currency::GovernanceCurrency for Test {
 impl membership::Trait for Test {
     type Event = ();
     type MemberId = u64;
-    type PaidTermId = u64;
-    type SubscriptionId = u64;
     type ActorId = u64;
+    type MembershipFee = MembershipFee;
 }
 
 parameter_types! {
+    pub const MembershipFee: u64 = 100;
     pub const ExistentialDeposit: u32 = 0;
 }
 

+ 2 - 2
runtime-modules/proposals/discussion/src/tests/mock.rs

@@ -56,6 +56,7 @@ parameter_types! {
     pub const TransferFee: u32 = 0;
     pub const CreationFee: u32 = 0;
     pub const MaxWhiteListSize: u32 = 4;
+    pub const MembershipFee: u64 = 100;
 }
 
 impl balances::Trait for Test {
@@ -75,9 +76,8 @@ impl common::currency::GovernanceCurrency for Test {
 impl membership::Trait for Test {
     type Event = TestEvent;
     type MemberId = u64;
-    type PaidTermId = u64;
-    type SubscriptionId = u64;
     type ActorId = u64;
+    type MembershipFee = MembershipFee;
 }
 
 impl crate::Trait for Test {

+ 2 - 2
runtime-modules/proposals/engine/src/tests/mock/mod.rs

@@ -78,14 +78,14 @@ parameter_types! {
     pub const DescriptionMaxLength: u32 = 10000;
     pub const MaxActiveProposalLimit: u32 = 100;
     pub const LockId: LockIdentifier = [1; 8];
+    pub const MembershipFee: u64 = 100;
 }
 
 impl membership::Trait for Test {
     type Event = TestEvent;
     type MemberId = u64;
-    type PaidTermId = u64;
-    type SubscriptionId = u64;
     type ActorId = u64;
+    type MembershipFee = MembershipFee;
 }
 
 impl crate::Trait for Test {

+ 2 - 2
runtime-modules/service-discovery/src/mock.rs

@@ -51,6 +51,7 @@ parameter_types! {
     pub const AvailableBlockRatio: Perbill = Perbill::one();
     pub const MinimumPeriod: u64 = 5;
     pub const ExistentialDeposit: u32 = 0;
+    pub const MembershipFee: u64 = 100;
 }
 
 impl frame_system::Trait for Test {
@@ -93,9 +94,8 @@ impl minting::Trait for Test {
 impl membership::Trait for Test {
     type Event = MetaEvent;
     type MemberId = u64;
-    type PaidTermId = u64;
-    type SubscriptionId = u64;
     type ActorId = u64;
+    type MembershipFee = MembershipFee;
 }
 
 impl common::currency::GovernanceCurrency for Test {

+ 1 - 1
runtime-modules/staking-handler/src/lib.rs

@@ -80,7 +80,7 @@ impl<
     }
 
     fn unlock(account_id: &T::AccountId) {
-        T::Currency::remove_lock(LockId::get(), &account_id);
+        <pallet_balances::Module<T>>::remove_lock(LockId::get(), &account_id);
     }
 
     fn slash(account_id: &T::AccountId, amount: Option<BalanceOf<T>>) -> BalanceOf<T> {

+ 2 - 2
runtime-modules/staking-handler/src/mock.rs

@@ -22,6 +22,7 @@ parameter_types! {
     pub const AvailableBlockRatio: Perbill = Perbill::one();
     pub const MinimumPeriod: u64 = 5;
     pub const ExistentialDeposit: u32 = 0;
+    pub const MembershipFee: u64 = 100;
 }
 
 // Workaround for https://github.com/rust-lang/rust/issues/26925 - remove when sorted.
@@ -69,9 +70,8 @@ impl pallet_balances::Trait for Test {
 impl membership::Trait for Test {
     type Event = ();
     type MemberId = u64;
-    type PaidTermId = u64;
-    type SubscriptionId = u64;
     type ActorId = u64;
+    type MembershipFee = MembershipFee;
 }
 
 impl common::currency::GovernanceCurrency for Test {

+ 2 - 3
runtime-modules/storage/src/tests/mock.rs

@@ -152,6 +152,7 @@ impl GovernanceCurrency for Test {
 parameter_types! {
     pub const MaxWorkerNumberLimit: u32 = 3;
     pub const LockId: LockIdentifier = [2; 8];
+    pub const MembershipFee: u64 = 100;
 }
 
 impl working_group::Trait<StorageWorkingGroupInstance> for Test {
@@ -200,9 +201,8 @@ impl data_object_storage_registry::Trait for Test {
 impl membership::Trait for Test {
     type Event = MetaEvent;
     type MemberId = u64;
-    type SubscriptionId = u32;
-    type PaidTermId = u32;
     type ActorId = u32;
+    type MembershipFee = MembershipFee;
 }
 
 impl minting::Trait for Test {
@@ -269,7 +269,6 @@ impl ExtBuilder {
         .unwrap();
 
         membership::GenesisConfig::<Test> {
-            default_paid_membership_fee: 0,
             members: vec![membership::genesis::Member {
                 member_id: 0,
                 root_account: 1,

+ 2 - 6
runtime-modules/working-group/src/tests/fixtures.rs

@@ -232,15 +232,11 @@ impl ApplyOnOpeningFixture {
 }
 
 pub fn setup_members(count: u8) {
-    let authority_account_id = 1;
-    Membership::set_screening_authority(RawOrigin::Root.into(), authority_account_id).unwrap();
-
     for i in 0..count {
         let account_id: u64 = i as u64;
         let handle: [u8; 20] = [i; 20];
-        Membership::add_screened_member(
-            RawOrigin::Signed(authority_account_id).into(),
-            account_id,
+        Membership::buy_membership(
+            RawOrigin::Signed(account_id).into(),
             Some(handle.to_vec()),
             None,
             None,

+ 3 - 3
runtime-modules/working-group/src/tests/mock.rs

@@ -38,6 +38,7 @@ parameter_types! {
     pub const AvailableBlockRatio: Perbill = Perbill::one();
     pub const MinimumPeriod: u64 = 5;
     pub const ExistentialDeposit: u32 = 0;
+    pub const MembershipFee: u64 = 0;
 }
 
 // Workaround for https://github.com/rust-lang/rust/issues/26925 - remove when sorted.
@@ -96,14 +97,13 @@ impl balances::Trait for Test {
 impl membership::Trait for Test {
     type Event = TestEvent;
     type MemberId = u64;
-    type PaidTermId = u64;
-    type SubscriptionId = u64;
     type ActorId = u64;
+    type MembershipFee = MembershipFee;
 }
 
-pub type Membership = membership::Module<Test>;
 pub type Balances = balances::Module<Test>;
 pub type System = frame_system::Module<Test>;
+pub type Membership = membership::Module<Test>;
 
 parameter_types! {
     pub const RewardPeriod: u32 = 2;

+ 5 - 4
runtime/Cargo.toml

@@ -11,7 +11,6 @@ version = '7.8.0'
 serde = { version = "1.0.101", optional = true, features = ["derive"] }
 lazy_static = {version = "1.4.0", features = ["spin_no_std"] }
 lite-json = { version = '0.1.3', default-features = false}
-hex-literal = { optional = true, version = '0.3.1' }
 codec = { package = 'parity-scale-codec', version = '1.3.4', default-features = false, features = ['derive'] }
 
 # Substrate primitives
@@ -60,6 +59,7 @@ frame-benchmarking = { git = 'https://github.com/paritytech/substrate.git', rev
 frame-system-benchmarking = { git = 'https://github.com/paritytech/substrate.git', rev = 'a200cdb93c6af5763b9c7bf313fa708764ac88ca', default-features = false, optional = true }
 pallet-offences-benchmarking = { git = 'https://github.com/paritytech/substrate.git', rev = 'a200cdb93c6af5763b9c7bf313fa708764ac88ca', default-features = false, optional = true }
 pallet-session-benchmarking = { git = 'https://github.com/paritytech/substrate.git', rev = 'a200cdb93c6af5763b9c7bf313fa708764ac88ca', default-features = false, optional = true }
+hex-literal = { optional = true, version = '0.3.1' }
 
 # Joystream
 common = { package = 'pallet-common', default-features = false, path = '../runtime-modules/common'}
@@ -76,7 +76,7 @@ proposals-engine = { package = 'pallet-proposals-engine', default-features = fal
 proposals-discussion = { package = 'pallet-proposals-discussion', default-features = false, path = '../runtime-modules/proposals/discussion'}
 proposals-codex = { package = 'pallet-proposals-codex', default-features = false, path = '../runtime-modules/proposals/codex'}
 content-directory = { package = 'pallet-content-directory', default-features = false, path = '../runtime-modules/content-directory' }
-constitution = { package = 'pallet-constitution', default-features = false, path = '../runtime-modules/constitution' }
+pallet_constitution = { package = 'pallet-constitution', default-features = false, path = '../runtime-modules/constitution' }
 staking-handler = { package = 'staking-handler', default-features = false, path = '../runtime-modules/staking-handler'}
 
 [dev-dependencies]
@@ -150,7 +150,7 @@ std = [
     'proposals-discussion/std',
     'proposals-codex/std',
     'content-directory/std',
-    'constitution/std',
+    'pallet_constitution/std',
     'staking-handler/std',
 ]
 runtime-benchmarks = [
@@ -168,7 +168,8 @@ runtime-benchmarks = [
     "pallet-utility/runtime-benchmarks",
     "proposals-discussion/runtime-benchmarks",
     "proposals-engine/runtime-benchmarks",
-    "hex-literal",
+    "pallet_constitution/runtime-benchmarks",
+    "hex-literal"
 ]
 
 

+ 5 - 55
runtime/src/integration/proposals/council_origin_validator.rs

@@ -52,17 +52,9 @@ mod tests {
     use proposals_engine::VotersParameters;
     use sp_runtime::AccountId32;
 
-    type Council = governance::council::Module<Runtime>;
-
-    fn initial_test_ext() -> sp_io::TestExternalities {
-        let t = frame_system::GenesisConfig::default()
-            .build_storage::<Runtime>()
-            .unwrap();
-
-        t.into()
-    }
+    use crate::tests::{initial_test_ext, insert_member};
 
-    type Membership = membership::Module<Runtime>;
+    type Council = governance::council::Module<Runtime>;
 
     #[test]
     fn council_origin_validator_fails_with_unregistered_member() {
@@ -93,21 +85,7 @@ mod tests {
 
             let account_id = AccountId32::default();
             let origin = RawOrigin::Signed(account_id.clone());
-            let authority_account_id = AccountId32::default();
-            Membership::set_screening_authority(
-                RawOrigin::Root.into(),
-                authority_account_id.clone(),
-            )
-            .unwrap();
-
-            Membership::add_screened_member(
-                RawOrigin::Signed(authority_account_id).into(),
-                account_id.clone(),
-                Some(b"handle".to_vec()),
-                None,
-                None,
-            )
-            .unwrap();
+            insert_member(account_id.clone());
             let member_id = 0; // newly created member_id
 
             let validation_result =
@@ -123,21 +101,7 @@ mod tests {
             let account_id = AccountId32::default();
             let error =
                 "Membership validation failed: given account doesn't match with profile accounts";
-            let authority_account_id = AccountId32::default();
-            Membership::set_screening_authority(
-                RawOrigin::Root.into(),
-                authority_account_id.clone(),
-            )
-            .unwrap();
-
-            Membership::add_screened_member(
-                RawOrigin::Signed(authority_account_id).into(),
-                account_id.clone(),
-                Some(b"handle".to_vec()),
-                None,
-                None,
-            )
-            .unwrap();
+            insert_member(account_id);
             let member_id = 0; // newly created member_id
 
             let invalid_account_id: [u8; 32] = [2; 32];
@@ -156,21 +120,7 @@ mod tests {
             let account_id = AccountId32::default();
             let origin = RawOrigin::Signed(account_id.clone());
             let error = "Council validation failed: account id doesn't belong to a council member";
-            let authority_account_id = AccountId32::default();
-            Membership::set_screening_authority(
-                RawOrigin::Root.into(),
-                authority_account_id.clone(),
-            )
-            .unwrap();
-
-            Membership::add_screened_member(
-                RawOrigin::Signed(authority_account_id).into(),
-                account_id,
-                Some(b"handle".to_vec()),
-                None,
-                None,
-            )
-            .unwrap();
+            insert_member(account_id);
             let member_id = 0; // newly created member_id
 
             let validation_result =

+ 4 - 39
runtime/src/integration/proposals/membership_origin_validator.rs

@@ -53,15 +53,7 @@ mod tests {
     use frame_system::RawOrigin;
     use sp_runtime::AccountId32;
 
-    type Membership = membership::Module<Runtime>;
-
-    fn initial_test_ext() -> sp_io::TestExternalities {
-        let t = frame_system::GenesisConfig::default()
-            .build_storage::<Runtime>()
-            .unwrap();
-
-        t.into()
-    }
+    use crate::tests::{initial_test_ext, insert_member};
 
     #[test]
     fn membership_origin_validator_fails_with_unregistered_member() {
@@ -82,21 +74,7 @@ mod tests {
         initial_test_ext().execute_with(|| {
             let account_id = AccountId32::default();
             let origin = RawOrigin::Signed(account_id.clone());
-            let authority_account_id = AccountId32::default();
-            Membership::set_screening_authority(
-                RawOrigin::Root.into(),
-                authority_account_id.clone(),
-            )
-            .unwrap();
-
-            Membership::add_screened_member(
-                RawOrigin::Signed(authority_account_id).into(),
-                account_id.clone(),
-                Some(b"handle".to_vec()),
-                None,
-                None,
-            )
-            .unwrap();
+            insert_member(account_id.clone());
             let member_id = 0; // newly created member_id
 
             let validation_result =
@@ -112,21 +90,8 @@ mod tests {
             let account_id = AccountId32::default();
             let error =
                 "Membership validation failed: given account doesn't match with profile accounts";
-            let authority_account_id = AccountId32::default();
-            Membership::set_screening_authority(
-                RawOrigin::Root.into(),
-                authority_account_id.clone(),
-            )
-            .unwrap();
-
-            Membership::add_screened_member(
-                RawOrigin::Signed(authority_account_id).into(),
-                account_id,
-                Some(b"handle".to_vec()),
-                None,
-                None,
-            )
-            .unwrap();
+
+            insert_member(account_id.clone());
             let member_id = 0; // newly created member_id
 
             let invalid_account_id: [u8; 32] = [2; 32];

+ 3 - 3
runtime/src/integration/proposals/proposal_encoder.rs

@@ -89,9 +89,9 @@ impl ProposalEncoder<Runtime> for ExtrinsicProposalEncoder {
                     Wg::terminate_role_call(terminate_role_params)
                 )
             }
-            ProposalDetails::AmendConstitution(constitution_text) => {
-                Call::Constitution(constitution::Call::amend_constitution(constitution_text))
-            }
+            ProposalDetails::AmendConstitution(constitution_text) => Call::Constitution(
+                pallet_constitution::Call::amend_constitution(constitution_text),
+            ),
         };
 
         call.encode()

+ 5 - 6
runtime/src/lib.rs

@@ -242,7 +242,6 @@ parameter_types! {
     pub const ExistentialDeposit: u128 = 0;
     pub const TransferFee: u128 = 0;
     pub const CreationFee: u128 = 0;
-    pub const InitialMembersBalance: u32 = 2000;
     pub const MaxLocks: u32 = 50;
 }
 
@@ -479,6 +478,7 @@ impl memo::Trait for Runtime {
 
 parameter_types! {
     pub const MaxObjectsPerInjection: u32 = 100;
+    pub const MembershipFee: Balance = 100;
 }
 
 impl storage::data_object_type_registry::Trait for Runtime {
@@ -504,14 +504,12 @@ impl storage::data_object_storage_registry::Trait for Runtime {
 impl membership::Trait for Runtime {
     type Event = Event;
     type MemberId = MemberId;
-    type PaidTermId = u64;
-    type SubscriptionId = u64;
     type ActorId = ActorId;
+    type MembershipFee = MembershipFee;
 }
 
 parameter_types! {
     pub const MaxCategoryDepth: u64 = 5;
-
     pub const MaxSubcategories: u64 = 20;
     pub const MaxThreadsInCategory: u64 = 20;
     pub const MaxPostsInThread: u64 = 20;
@@ -724,8 +722,9 @@ impl proposals_codex::Trait for Runtime {
     type AmendConstitutionProposalParameters = AmendConstitutionProposalParameters;
 }
 
-impl constitution::Trait for Runtime {
+impl pallet_constitution::Trait for Runtime {
     type Event = Event;
+    type WeightInfo = weights::pallet_constitution::WeightInfo;
 }
 
 parameter_types! {
@@ -790,7 +789,7 @@ construct_runtime!(
         Minting: minting::{Module, Call, Storage},
         RecurringRewards: recurring_rewards::{Module, Call, Storage},
         ContentDirectory: content_directory::{Module, Call, Storage, Event<T>, Config<T>},
-        Constitution: constitution::{Module, Call, Storage, Event},
+        Constitution: pallet_constitution::{Module, Call, Storage, Event},
         // --- Storage
         DataObjectTypeRegistry: data_object_type_registry::{Module, Call, Storage, Event<T>, Config<T>},
         DataDirectory: data_directory::{Module, Call, Storage, Event<T>},

+ 2 - 0
runtime/src/runtime_api.rs

@@ -261,6 +261,7 @@ impl_runtime_apis! {
 
             use crate::ProposalsDiscussion;
             use crate::ProposalsEngine;
+            use crate::Constitution;
 
             let whitelist: Vec<TrackedStorageKey> = vec![
                 // Block Number
@@ -285,6 +286,7 @@ impl_runtime_apis! {
             add_benchmark!(params, batches, system, SystemBench::<Runtime>);
             add_benchmark!(params, batches, proposals_discussion, ProposalsDiscussion);
             add_benchmark!(params, batches, proposals_engine, ProposalsEngine);
+            add_benchmark!(params, batches, pallet_constitution, Constitution);
 
             if batches.is_empty() { return Err("Benchmark not found for this pallet.".into()) }
             Ok(batches)

+ 35 - 2
runtime/src/tests/mod.rs

@@ -5,11 +5,17 @@
 
 mod proposals_integration;
 mod storage_integration;
-use sp_runtime::BuildStorage;
+
+use crate::Runtime;
+use frame_support::traits::Currency;
+use frame_system::RawOrigin;
+use sp_runtime::{AccountId32, BuildStorage};
+
+type Membership = membership::Module<Runtime>;
 
 pub(crate) fn initial_test_ext() -> sp_io::TestExternalities {
     let mut t = frame_system::GenesisConfig::default()
-        .build_storage::<crate::Runtime>()
+        .build_storage::<Runtime>()
         .unwrap();
 
     // build the council config to initialize the mint
@@ -21,3 +27,30 @@ pub(crate) fn initial_test_ext() -> sp_io::TestExternalities {
 
     t.into()
 }
+
+pub(crate) fn insert_member(account_id: AccountId32) {
+    increase_total_balance_issuance_using_account_id(
+        account_id.clone(),
+        crate::MembershipFee::get(),
+    );
+    let handle: &[u8] = account_id.as_ref();
+    Membership::buy_membership(
+        RawOrigin::Signed(account_id.clone()).into(),
+        Some(handle.to_vec()),
+        None,
+        None,
+    )
+    .unwrap();
+}
+
+pub(crate) fn increase_total_balance_issuance_using_account_id(
+    account_id: AccountId32,
+    balance: u128,
+) {
+    type Balances = pallet_balances::Module<Runtime>;
+    let initial_balance = Balances::total_issuance();
+    {
+        let _ = Balances::deposit_creating(&account_id, balance);
+    }
+    assert_eq!(Balances::total_issuance(), initial_balance + balance);
+}

+ 3 - 26
runtime/src/tests/proposals_integration/mod.rs

@@ -19,33 +19,22 @@ use frame_support::{StorageMap, StorageValue};
 use frame_system::RawOrigin;
 use sp_runtime::AccountId32;
 
-use super::initial_test_ext;
+use super::{increase_total_balance_issuance_using_account_id, initial_test_ext, insert_member};
 
 use crate::CouncilManager;
 
 pub type Balances = pallet_balances::Module<Runtime>;
 pub type System = frame_system::Module<Runtime>;
-pub type Membership = membership::Module<Runtime>;
 pub type ProposalsEngine = proposals_engine::Module<Runtime>;
 pub type Council = governance::council::Module<Runtime>;
 pub type Election = governance::election::Module<Runtime>;
 pub type ProposalCodex = proposals_codex::Module<Runtime>;
 
 fn setup_members(count: u8) {
-    let authority_account_id = <Runtime as frame_system::Trait>::AccountId::default();
-    Membership::set_screening_authority(RawOrigin::Root.into(), authority_account_id.clone())
-        .unwrap();
-
     for i in 0..count {
         let account_id: [u8; 32] = [i; 32];
-        Membership::add_screened_member(
-            RawOrigin::Signed(authority_account_id.clone().into()).into(),
-            account_id.clone().into(),
-            Some(account_id.to_vec()),
-            None,
-            None,
-        )
-        .unwrap();
+        let account_id_converted: AccountId32 = account_id.clone().into();
+        insert_member(account_id_converted);
     }
 }
 
@@ -70,18 +59,6 @@ fn setup_council() {
     .is_ok());
 }
 
-pub(crate) fn increase_total_balance_issuance_using_account_id(
-    account_id: AccountId32,
-    balance: u128,
-) {
-    type Balances = pallet_balances::Module<Runtime>;
-    let initial_balance = Balances::total_issuance();
-    {
-        let _ = Balances::deposit_creating(&account_id, balance);
-    }
-    assert_eq!(Balances::total_issuance(), initial_balance + balance);
-}
-
 // Recommendation from Parity on testing on_finalize
 // https://substrate.dev/docs/en/next/development/module/tests
 fn run_to_block(n: BlockNumber) {

+ 1 - 0
runtime/src/weights/mod.rs

@@ -23,5 +23,6 @@ pub mod pallet_staking;
 pub mod pallet_timestamp;
 pub mod pallet_utility;
 
+pub mod pallet_constitution;
 pub mod proposals_discussion;
 pub mod proposals_engine;

+ 15 - 0
runtime/src/weights/pallet_constitution.rs

@@ -0,0 +1,15 @@
+//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 2.0.0
+
+#![allow(unused_parens)]
+#![allow(unused_imports)]
+
+use frame_support::weights::{constants::RocksDbWeight as DbWeight, Weight};
+
+pub struct WeightInfo;
+impl pallet_constitution::WeightInfo for WeightInfo {
+    fn amend_constitution(i: u32) -> Weight {
+        (145_984_000 as Weight)
+            .saturating_add((59_000 as Weight).saturating_mul(i as Weight))
+            .saturating_add(DbWeight::get().writes(1 as Weight))
+    }
+}

+ 5 - 1
scripts/generate-weights.sh

@@ -7,8 +7,12 @@ echo "Benchmarking proposals_discussion..."
 mv proposals_discussion.rs runtime/src/weights/
 echo "proposals_discussion benchmarked"
 
-
 echo "Benchmarking proposals_engine..."
 ./target/release/joystream-node benchmark --pallet=proposals_engine --extrinsic=* --chain=dev --steps=50 --repeat=20 --execution=wasm --output=. > /dev/null
 mv proposals_engine.rs runtime/src/weights/
 echo "proposals_engine benchmarked"
+
+echo "Benchmarking pallet_constitution..."
+./target/release/joystream-node benchmark --pallet=pallet_constitution --extrinsic=* --chain=dev --steps=50 --repeat=20 --execution=wasm --output=. > /dev/null
+mv pallet_constitution.rs runtime/src/weights/
+echo "pallet_constitution benchmarked"