From 9301e77d04f3909d0cd72e790994dbb775a7f4ef Mon Sep 17 00:00:00 2001 From: Erick Casanova Date: Fri, 11 Nov 2022 13:16:29 -0600 Subject: [PATCH 01/17] mockup extrinsict to invite a user to be collaborator on a collection --- pallets/fruniques/src/lib.rs | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/pallets/fruniques/src/lib.rs b/pallets/fruniques/src/lib.rs index d62e87c2..42a5f7f1 100644 --- a/pallets/fruniques/src/lib.rs +++ b/pallets/fruniques/src/lib.rs @@ -47,6 +47,8 @@ pub mod pallet { FruniqueDivided(T::AccountId, T::AccountId, T::CollectionId, T::ItemId), // A frunique has been verified. FruniqueVerified(T::AccountId, CollectionId, ItemId), + // A user has been invited to collaborate on a collection. + InvitedToCollaborate(T::AccountId, T::AccountId, T::CollectionId), // Counter should work? NextFrunique(u32), } @@ -317,6 +319,29 @@ pub mod pallet { Ok(()) } + /// ## Invite a user to become a collaborator in a collection. + /// ### Parameters: + /// - `origin` must be signed by the owner of the frunique. + /// - `class_id` must be a valid class of the asset class. + /// - `invitee` must be a valid user. + /// ### Considerations: + /// This functions enables the owner of a collection to invite a user to become a collaborator. + /// The user will be able to create NFTs in the collection. + /// The user will be able to add attributes to the NFTs in the collection. + + #[pallet::weight(10_000 + T::DbWeight::get().writes(1))] + pub fn invite( + origin: OriginFor, + class_id: CollectionId, + invitee: T::AccountId, + ) -> DispatchResult { + + let owner: T::AccountId = ensure_signed(origin.clone())?; + + Self::deposit_event(Event::InvitedToCollaborate(owner, invitee, class_id)); + Ok(()) + } + /// ## Force set counter /// ### Parameters: /// `origin` must be signed by the Root origin. From a816326a85ba20600e3272efd7c10ea9836af434 Mon Sep 17 00:00:00 2001 From: Erick Casanova Date: Fri, 11 Nov 2022 16:25:06 -0600 Subject: [PATCH 02/17] udpate Rbac imports --- lcov.info | 5064 ++++++++++++++++++++ pallets/fruniques/Cargo.toml | 1 + pallets/fruniques/src/lib.rs | 6 +- pallets/fruniques/src/mock.rs | 21 + pallets/gated-marketplace/src/functions.rs | 34 +- pallets/gated-marketplace/src/lib.rs | 2 +- pallets/gated-marketplace/src/mock.rs | 1 + parachain-runtime/src/lib.rs | 1 + runtime/src/lib.rs | 2 +- 9 files changed, 5112 insertions(+), 20 deletions(-) create mode 100644 lcov.info diff --git a/lcov.info b/lcov.info new file mode 100644 index 00000000..db3a7ac0 --- /dev/null +++ b/lcov.info @@ -0,0 +1,5064 @@ +TN: +SF:/home/erick/hashed/hashed-substrate/collator/src/chain_spec/hashed.rs +FN:17,get_chain_spec +FN:30,{closure#0} +FN:73,hashed_genesis +FNF:3 +FNDA:0,get_chain_spec +FNDA:0,{closure#0} +FNDA:0,hashed_genesis +DA:17,0 +DA:19,0 +DA:20,0 +DA:21,0 +DA:22,0 +DA:29,0 +DA:30,0 +DA:31,0 +DA:33,0 +DA:35,0 +DA:36,0 +DA:39,0 +DA:40,0 +DA:43,0 +DA:44,0 +DA:45,0 +DA:46,0 +DA:47,0 +DA:48,0 +DA:49,0 +DA:50,0 +DA:51,0 +DA:52,0 +DA:53,0 +DA:54,0 +DA:55,0 +DA:57,0 +DA:58,0 +DA:61,0 +DA:62,0 +DA:63,0 +DA:64,0 +DA:65,0 +DA:66,0 +DA:67,0 +DA:73,0 +DA:80,0 +DA:85,0 +DA:88,0 +DA:89,0 +DA:90,0 +DA:91,0 +DA:92,0 +DA:97,0 +DA:111,0 +DA:112,0 +DA:113,0 +DA:114,0 +LF:48 +LH:0 +end_of_record +TN: +SF:/home/erick/hashed/hashed-substrate/collator/src/chain_spec/md5.rs +FN:17,get_chain_spec +FN:28,{closure#0} +FN:163,md5_genesis +FNF:3 +FNDA:0,get_chain_spec +FNDA:0,{closure#0} +FNDA:0,md5_genesis +DA:17,0 +DA:19,0 +DA:20,0 +DA:21,0 +DA:22,0 +DA:27,0 +DA:28,0 +DA:29,0 +DA:31,0 +DA:34,0 +DA:35,0 +DA:39,0 +DA:40,0 +DA:44,0 +DA:45,0 +DA:49,0 +DA:50,0 +DA:54,0 +DA:55,0 +DA:59,0 +DA:60,0 +DA:64,0 +DA:65,0 +DA:69,0 +DA:70,0 +DA:74,0 +DA:75,0 +DA:78,0 +DA:80,0 +DA:82,0 +DA:84,0 +DA:86,0 +DA:88,0 +DA:90,0 +DA:92,0 +DA:94,0 +DA:96,0 +DA:99,0 +DA:102,0 +DA:103,0 +DA:107,0 +DA:108,0 +DA:112,0 +DA:113,0 +DA:117,0 +DA:118,0 +DA:122,0 +DA:123,0 +DA:127,0 +DA:128,0 +DA:132,0 +DA:133,0 +DA:137,0 +DA:138,0 +DA:142,0 +DA:143,0 +DA:147,0 +DA:148,0 +DA:151,0 +DA:152,0 +DA:153,0 +DA:154,0 +DA:155,0 +DA:156,0 +DA:157,0 +DA:163,0 +DA:172,0 +DA:177,0 +DA:180,0 +DA:181,0 +DA:182,0 +DA:186,0 +DA:187,0 +DA:192,0 +DA:206,0 +DA:207,0 +DA:208,0 +DA:209,0 +LF:78 +LH:0 +end_of_record +TN: +SF:/home/erick/hashed/hashed-substrate/collator/src/chain_spec/mod.rs +FN:42,try_get +FN:59,get_collator_keys_from_seed +FN:64,get_account_id_from_seed +FN:74,session_keys +FN:78,development_config +FN:91,{closure#0} +FN:134,local_testnet_config +FN:147,{closure#0} +FN:196,testnet_genesis +FNF:9 +FNDA:0,try_get +FNDA:0,get_collator_keys_from_seed +FNDA:0,get_account_id_from_seed +FNDA:0,session_keys +FNDA:0,development_config +FNDA:0,{closure#0} +FNDA:0,local_testnet_config +FNDA:0,{closure#0} +FNDA:0,testnet_genesis +DA:21,0 +DA:22,0 +DA:42,0 +DA:43,0 +DA:48,0 +DA:59,0 +DA:60,0 +DA:64,0 +DA:68,0 +DA:74,0 +DA:78,0 +DA:80,0 +DA:81,0 +DA:82,0 +DA:83,0 +DA:90,0 +DA:91,0 +DA:92,0 +DA:94,0 +DA:96,0 +DA:97,0 +DA:100,0 +DA:101,0 +DA:104,0 +DA:105,0 +DA:106,0 +DA:107,0 +DA:108,0 +DA:109,0 +DA:110,0 +DA:111,0 +DA:112,0 +DA:113,0 +DA:114,0 +DA:115,0 +DA:116,0 +DA:118,0 +DA:119,0 +DA:122,0 +DA:123,0 +DA:124,0 +DA:125,0 +DA:126,0 +DA:127,0 +DA:128,0 +DA:134,0 +DA:136,0 +DA:137,0 +DA:138,0 +DA:139,0 +DA:146,0 +DA:147,0 +DA:148,0 +DA:150,0 +DA:152,0 +DA:153,0 +DA:156,0 +DA:157,0 +DA:160,0 +DA:161,0 +DA:162,0 +DA:163,0 +DA:164,0 +DA:165,0 +DA:166,0 +DA:167,0 +DA:168,0 +DA:169,0 +DA:170,0 +DA:171,0 +DA:172,0 +DA:174,0 +DA:175,0 +DA:179,0 +DA:181,0 +DA:183,0 +DA:185,0 +DA:187,0 +DA:189,0 +DA:190,0 +DA:196,0 +DA:203,0 +DA:208,0 +DA:211,0 +DA:212,0 +DA:213,0 +DA:214,0 +DA:215,0 +DA:220,0 +DA:234,0 +DA:235,0 +DA:236,0 +DA:237,0 +LF:93 +LH:0 +end_of_record +TN: +SF:/home/erick/hashed/hashed-substrate/collator/src/cli.rs +FN:84,new, core::slice::iter::Iter>> +FNF:1 +FNDA:0,new, core::slice::iter::Iter>> +DA:84,0 +DA:88,0 +DA:89,0 +DA:90,0 +DA:91,0 +LF:5 +LH:0 +end_of_record +TN: +SF:/home/erick/hashed/hashed-substrate/collator/src/command.rs +FN:26,load_spec +FN:38,impl_name +FN:42,impl_version +FN:46,description +FN:56,author +FN:60,support_url +FN:64,copyright_start_year +FN:68,load_spec +FN:72,native_runtime_version +FN:78,impl_name +FN:82,impl_version +FN:86,description +FN:96,author +FN:100,support_url +FN:104,copyright_start_year +FN:108,load_spec +FN:112,native_runtime_version +FN:120,{closure#12} +FN:130,{closure#0} +FN:136,run +FN:183,{closure#0} +FN:265,{closure#0} +FN:274,{closure#1} +FN:275,{closure#2} +FN:289,{closure#3} +FN:295,{closure#4} +FN:310,{closure#5} +FN:318,p2p_listen_port +FN:322,rpc_ws_listen_port +FN:326,rpc_http_listen_port +FN:330,prometheus_listen_port +FN:336,shared_params +FN:340,import_params +FN:344,network_params +FN:348,keystore_params +FN:352,base_path +FN:356,{closure#0} +FN:359,rpc_http +FN:363,rpc_ipc +FN:367,rpc_ws +FN:371,prometheus_config +FN:392,chain_id +FN:398,role +FN:402,transaction_pool +FN:406,state_cache_child_ratio +FN:410,rpc_methods +FN:414,rpc_ws_max_connections +FN:418,rpc_cors +FN:422,default_heap_pages +FN:426,force_authoring +FN:430,disable_grandpa +FN:434,max_runtime_instances +FN:438,announce_block +FN:442,telemetry_endpoints +FN:449,node_name +FNF:55 +FNDA:0,load_spec +FNDA:0,impl_name +FNDA:0,impl_version +FNDA:0,description +FNDA:0,author +FNDA:0,support_url +FNDA:0,copyright_start_year +FNDA:0,load_spec +FNDA:0,native_runtime_version +FNDA:0,impl_name +FNDA:0,impl_version +FNDA:0,description +FNDA:0,author +FNDA:0,support_url +FNDA:0,copyright_start_year +FNDA:0,load_spec +FNDA:0,native_runtime_version +FNDA:0,{closure#12} +FNDA:0,{closure#0} +FNDA:0,run +FNDA:0,{closure#0} +FNDA:0,{closure#0} +FNDA:0,{closure#1} +FNDA:0,{closure#2} +FNDA:0,{closure#3} +FNDA:0,{closure#4} +FNDA:0,{closure#5} +FNDA:0,p2p_listen_port +FNDA:0,rpc_ws_listen_port +FNDA:0,rpc_http_listen_port +FNDA:0,prometheus_listen_port +FNDA:0,shared_params +FNDA:0,import_params +FNDA:0,network_params +FNDA:0,keystore_params +FNDA:0,base_path +FNDA:0,{closure#0} +FNDA:0,rpc_http +FNDA:0,rpc_ipc +FNDA:0,rpc_ws +FNDA:0,prometheus_config +FNDA:0,chain_id +FNDA:0,role +FNDA:0,transaction_pool +FNDA:0,state_cache_child_ratio +FNDA:0,rpc_methods +FNDA:0,rpc_ws_max_connections +FNDA:0,rpc_cors +FNDA:0,default_heap_pages +FNDA:0,force_authoring +FNDA:0,disable_grandpa +FNDA:0,max_runtime_instances +FNDA:0,announce_block +FNDA:0,telemetry_endpoints +FNDA:0,node_name +DA:26,0 +DA:27,0 +DA:28,0 +DA:29,0 +DA:31,0 +DA:32,0 +DA:33,0 +DA:38,0 +DA:39,0 +DA:42,0 +DA:43,0 +DA:46,0 +DA:47,0 +DA:52,0 +DA:56,0 +DA:57,0 +DA:60,0 +DA:61,0 +DA:64,0 +DA:68,0 +DA:69,0 +DA:72,0 +DA:78,0 +DA:79,0 +DA:82,0 +DA:83,0 +DA:86,0 +DA:87,0 +DA:92,0 +DA:96,0 +DA:97,0 +DA:100,0 +DA:101,0 +DA:104,0 +DA:108,0 +DA:109,0 +DA:112,0 +DA:113,0 +DA:120,0 +DA:121,0 +DA:129,0 +DA:130,0 +DA:136,0 +DA:137,0 +DA:139,0 +DA:140,0 +DA:141,0 +DA:142,0 +DA:144,0 +DA:145,0 +DA:146,0 +DA:149,0 +DA:150,0 +DA:151,0 +DA:154,0 +DA:155,0 +DA:156,0 +DA:159,0 +DA:160,0 +DA:161,0 +DA:164,0 +DA:165,0 +DA:166,0 +DA:169,0 +DA:170,0 +DA:172,0 +DA:173,0 +DA:175,0 +DA:178,0 +DA:181,0 +DA:183,0 +DA:185,0 +DA:188,0 +DA:189,0 +DA:190,0 +DA:191,0 +DA:192,0 +DA:193,0 +DA:196,0 +DA:197,0 +DA:198,0 +DA:199,0 +DA:200,0 +DA:203,0 +DA:204,0 +DA:206,0 +DA:207,0 +DA:211,0 +DA:216,0 +DA:217,0 +DA:221,0 +DA:223,0 +DA:224,0 +DA:228,0 +DA:229,0 +DA:231,0 +DA:233,0 +DA:234,0 +DA:239,0 +DA:242,0 +DA:256,0 +DA:260,0 +DA:261,0 +DA:263,0 +DA:264,0 +DA:265,0 +DA:266,0 +DA:267,0 +DA:270,0 +DA:273,0 +DA:274,0 +DA:275,0 +DA:277,0 +DA:278,0 +DA:279,0 +DA:282,0 +DA:285,0 +DA:287,0 +DA:288,0 +DA:289,0 +DA:290,0 +DA:292,0 +DA:294,0 +DA:295,0 +DA:297,0 +DA:298,0 +DA:299,0 +DA:300,0 +DA:302,0 +DA:303,0 +DA:304,0 +DA:305,0 +DA:306,0 +DA:307,0 +DA:310,0 +DA:318,0 +DA:322,0 +DA:326,0 +DA:330,0 +DA:336,0 +DA:337,0 +DA:340,0 +DA:341,0 +DA:344,0 +DA:345,0 +DA:348,0 +DA:349,0 +DA:352,0 +DA:353,0 +DA:356,0 +DA:359,0 +DA:360,0 +DA:363,0 +DA:364,0 +DA:367,0 +DA:368,0 +DA:371,0 +DA:376,0 +DA:392,0 +DA:393,0 +DA:395,0 +DA:398,0 +DA:399,0 +DA:402,0 +DA:403,0 +DA:406,0 +DA:407,0 +DA:410,0 +DA:411,0 +DA:414,0 +DA:415,0 +DA:418,0 +DA:419,0 +DA:422,0 +DA:423,0 +DA:426,0 +DA:427,0 +DA:430,0 +DA:431,0 +DA:434,0 +DA:435,0 +DA:438,0 +DA:439,0 +DA:442,0 +DA:446,0 +DA:449,0 +DA:450,0 +LF:187 +LH:0 +end_of_record +TN: +SF:/home/erick/hashed/hashed-substrate/collator/src/main.rs +FN:12,main +FNF:1 +FNDA:0,main +DA:12,0 +DA:13,0 +LF:2 +LH:0 +end_of_record +TN: +SF:/home/erick/hashed/hashed-substrate/collator/src/rpc.rs +FN:33,create_full, sp_runtime::OpaqueExtrinsic>>, sc_service::client::call_executor::LocalCallExecutor, sp_runtime::OpaqueExtrinsic>, sc_client_db::Backend, sp_runtime::OpaqueExtrinsic>>, sc_executor::native_executor::NativeElseWasmExecutor>, sp_runtime::generic::block::Block, sp_runtime::OpaqueExtrinsic>, hashed_parachain_runtime::RuntimeApi>, sc_transaction_pool::BasicPool, sp_runtime::OpaqueExtrinsic>>, sc_service::client::call_executor::LocalCallExecutor, sp_runtime::OpaqueExtrinsic>, sc_client_db::Backend, sp_runtime::OpaqueExtrinsic>>, sc_executor::native_executor::NativeElseWasmExecutor>, sp_runtime::generic::block::Block, sp_runtime::OpaqueExtrinsic>, hashed_parachain_runtime::RuntimeApi>, sp_runtime::generic::block::Block, sp_runtime::OpaqueExtrinsic>>, sp_runtime::generic::block::Block, sp_runtime::OpaqueExtrinsic>>> +FNF:1 +FNDA:0,create_full, sp_runtime::OpaqueExtrinsic>>, sc_service::client::call_executor::LocalCallExecutor, sp_runtime::OpaqueExtrinsic>, sc_client_db::Backend, sp_runtime::OpaqueExtrinsic>>, sc_executor::native_executor::NativeElseWasmExecutor>, sp_runtime::generic::block::Block, sp_runtime::OpaqueExtrinsic>, hashed_parachain_runtime::RuntimeApi>, sc_transaction_pool::BasicPool, sp_runtime::OpaqueExtrinsic>>, sc_service::client::call_executor::LocalCallExecutor, sp_runtime::OpaqueExtrinsic>, sc_client_db::Backend, sp_runtime::OpaqueExtrinsic>>, sc_executor::native_executor::NativeElseWasmExecutor>, sp_runtime::generic::block::Block, sp_runtime::OpaqueExtrinsic>, hashed_parachain_runtime::RuntimeApi>, sp_runtime::generic::block::Block, sp_runtime::OpaqueExtrinsic>>, sp_runtime::generic::block::Block, sp_runtime::OpaqueExtrinsic>>> +DA:33,0 +DA:52,0 +DA:53,0 +DA:55,0 +DA:56,0 +DA:57,0 +LF:6 +LH:0 +end_of_record +TN: +SF:/home/erick/hashed/hashed-substrate/collator/src/service.rs +FN:46,dispatch +FN:50,native_version +FN:60,new_partial, sp_runtime::OpaqueExtrinsic>>, sc_service::client::call_executor::LocalCallExecutor, sp_runtime::OpaqueExtrinsic>, sc_client_db::Backend, sp_runtime::OpaqueExtrinsic>>, sc_executor::native_executor::NativeElseWasmExecutor>, sp_runtime::generic::block::Block, sp_runtime::OpaqueExtrinsic>, hashed_parachain_runtime::RuntimeApi>>, &sc_service::config::Configuration, core::option::Option, &sc_service::task_manager::TaskManager) -> core::result::Result, sp_runtime::OpaqueExtrinsic>, memory_db::MemoryDB, alloc::vec::Vec, memory_db::malloc_size_of::MemCounter>>>, sc_service::error::Error>> +FN:170,build_relay_chain_interface +FN:194,{async_fn#0}, sp_runtime::OpaqueExtrinsic>>, sc_service::client::call_executor::LocalCallExecutor, sp_runtime::OpaqueExtrinsic>, sc_client_db::Backend, sp_runtime::OpaqueExtrinsic>>, sc_executor::native_executor::NativeElseWasmExecutor>, sp_runtime::generic::block::Block, sp_runtime::OpaqueExtrinsic>, hashed_parachain_runtime::RuntimeApi>>, &sc_service::config::Configuration, core::option::Option, &sc_service::task_manager::TaskManager) -> core::result::Result, sp_runtime::OpaqueExtrinsic>, memory_db::MemoryDB, alloc::vec::Vec, memory_db::malloc_size_of::MemCounter>>>, sc_service::error::Error>, hashed_parachain::service::start_parachain_node::{async_fn#0}::{closure_env#1}> +FN:195,start_node_impl, sp_runtime::OpaqueExtrinsic>>, sc_service::client::call_executor::LocalCallExecutor, sp_runtime::OpaqueExtrinsic>, sc_client_db::Backend, sp_runtime::OpaqueExtrinsic>>, sc_executor::native_executor::NativeElseWasmExecutor>, sp_runtime::generic::block::Block, sp_runtime::OpaqueExtrinsic>, hashed_parachain_runtime::RuntimeApi>>, &sc_service::config::Configuration, core::option::Option, &sc_service::task_manager::TaskManager) -> core::result::Result, sp_runtime::OpaqueExtrinsic>, memory_db::MemoryDB, alloc::vec::Vec, memory_db::malloc_size_of::MemCounter>>>, sc_service::error::Error>, hashed_parachain::service::start_parachain_node::{async_fn#0}::{closure_env#1}> +FN:403,parachain_build_import_queue +FN:428,{closure#0} +FN:448,start_parachain_node +FN:465,{closure#1} +FN:487,{closure#0} +FN:489,{async_block#0} +FN:505,{closure#0} +FNF:13 +FNDA:0,dispatch +FNDA:0,native_version +FNDA:0,new_partial, sp_runtime::OpaqueExtrinsic>>, sc_service::client::call_executor::LocalCallExecutor, sp_runtime::OpaqueExtrinsic>, sc_client_db::Backend, sp_runtime::OpaqueExtrinsic>>, sc_executor::native_executor::NativeElseWasmExecutor>, sp_runtime::generic::block::Block, sp_runtime::OpaqueExtrinsic>, hashed_parachain_runtime::RuntimeApi>>, &sc_service::config::Configuration, core::option::Option, &sc_service::task_manager::TaskManager) -> core::result::Result, sp_runtime::OpaqueExtrinsic>, memory_db::MemoryDB, alloc::vec::Vec, memory_db::malloc_size_of::MemCounter>>>, sc_service::error::Error>> +FNDA:0,build_relay_chain_interface +FNDA:0,{async_fn#0}, sp_runtime::OpaqueExtrinsic>>, sc_service::client::call_executor::LocalCallExecutor, sp_runtime::OpaqueExtrinsic>, sc_client_db::Backend, sp_runtime::OpaqueExtrinsic>>, sc_executor::native_executor::NativeElseWasmExecutor>, sp_runtime::generic::block::Block, sp_runtime::OpaqueExtrinsic>, hashed_parachain_runtime::RuntimeApi>>, &sc_service::config::Configuration, core::option::Option, &sc_service::task_manager::TaskManager) -> core::result::Result, sp_runtime::OpaqueExtrinsic>, memory_db::MemoryDB, alloc::vec::Vec, memory_db::malloc_size_of::MemCounter>>>, sc_service::error::Error>, hashed_parachain::service::start_parachain_node::{async_fn#0}::{closure_env#1}> +FNDA:0,start_node_impl, sp_runtime::OpaqueExtrinsic>>, sc_service::client::call_executor::LocalCallExecutor, sp_runtime::OpaqueExtrinsic>, sc_client_db::Backend, sp_runtime::OpaqueExtrinsic>>, sc_executor::native_executor::NativeElseWasmExecutor>, sp_runtime::generic::block::Block, sp_runtime::OpaqueExtrinsic>, hashed_parachain_runtime::RuntimeApi>>, &sc_service::config::Configuration, core::option::Option, &sc_service::task_manager::TaskManager) -> core::result::Result, sp_runtime::OpaqueExtrinsic>, memory_db::MemoryDB, alloc::vec::Vec, memory_db::malloc_size_of::MemCounter>>>, sc_service::error::Error>, hashed_parachain::service::start_parachain_node::{async_fn#0}::{closure_env#1}> +FNDA:0,parachain_build_import_queue +FNDA:0,{closure#0} +FNDA:0,start_parachain_node +FNDA:0,{closure#1} +FNDA:0,{closure#0} +FNDA:0,{async_block#0} +FNDA:0,{closure#0} +DA:46,0 +DA:47,0 +DA:50,0 +DA:51,0 +DA:60,0 +DA:108,0 +DA:109,0 +DA:111,0 +DA:112,0 +DA:113,0 +DA:114,0 +DA:115,0 +DA:120,0 +DA:121,0 +DA:122,0 +DA:123,0 +DA:126,0 +DA:128,0 +DA:129,0 +DA:130,0 +DA:132,0 +DA:134,0 +DA:136,0 +DA:137,0 +DA:138,0 +DA:142,0 +DA:143,0 +DA:144,0 +DA:145,0 +DA:146,0 +DA:150,0 +DA:151,0 +DA:152,0 +DA:153,0 +DA:163,0 +DA:164,0 +DA:167,0 +DA:170,0 +DA:178,0 +DA:179,0 +DA:180,0 +DA:182,0 +DA:184,0 +DA:186,0 +DA:194,0 +DA:195,0 +DA:260,0 +DA:262,0 +DA:263,0 +DA:265,0 +DA:266,0 +DA:267,0 +DA:270,0 +DA:271,0 +DA:272,0 +DA:273,0 +DA:274,0 +DA:275,0 +DA:277,0 +DA:278,0 +DA:279,0 +DA:280,0 +DA:283,0 +DA:285,0 +DA:286,0 +DA:287,0 +DA:288,0 +DA:289,0 +DA:290,0 +DA:291,0 +DA:292,0 +DA:293,0 +DA:294,0 +DA:295,0 +DA:296,0 +DA:297,0 +DA:298,0 +DA:300,0 +DA:303,0 +DA:304,0 +DA:305,0 +DA:307,0 +DA:308,0 +DA:309,0 +DA:310,0 +DA:311,0 +DA:314,0 +DA:318,0 +DA:319,0 +DA:320,0 +DA:321,0 +DA:322,0 +DA:323,0 +DA:324,0 +DA:325,0 +DA:326,0 +DA:327,0 +DA:328,0 +DA:331,0 +DA:332,0 +DA:334,0 +DA:335,0 +DA:336,0 +DA:338,0 +DA:339,0 +DA:344,0 +DA:345,0 +DA:346,0 +DA:349,0 +DA:351,0 +DA:353,0 +DA:354,0 +DA:355,0 +DA:356,0 +DA:357,0 +DA:358,0 +DA:359,0 +DA:360,0 +DA:361,0 +DA:364,0 +DA:368,0 +DA:370,0 +DA:371,0 +DA:376,0 +DA:380,0 +DA:383,0 +DA:385,0 +DA:393,0 +DA:396,0 +DA:398,0 +DA:403,0 +DA:415,0 +DA:425,0 +DA:426,0 +DA:427,0 +DA:428,0 +DA:429,0 +DA:432,0 +DA:433,0 +DA:434,0 +DA:437,0 +DA:439,0 +DA:440,0 +DA:441,0 +DA:442,0 +DA:448,0 +DA:459,0 +DA:460,0 +DA:461,0 +DA:462,0 +DA:465,0 +DA:473,0 +DA:474,0 +DA:476,0 +DA:477,0 +DA:478,0 +DA:479,0 +DA:481,0 +DA:484,0 +DA:485,0 +DA:486,0 +DA:487,0 +DA:488,0 +DA:489,0 +DA:490,0 +DA:491,0 +DA:492,0 +DA:493,0 +DA:494,0 +DA:495,0 +DA:496,0 +DA:497,0 +DA:500,0 +DA:501,0 +DA:502,0 +DA:505,0 +DA:506,0 +DA:510,0 +DA:513,0 +DA:514,0 +DA:515,0 +DA:516,0 +DA:517,0 +DA:521,0 +DA:523,0 +DA:524,0 +DA:528,0 +LF:187 +LH:0 +end_of_record +TN: +SF:/home/erick/hashed/hashed-substrate/node/src/benchmarking.rs +FN:45,new +FN:51,pallet +FN:55,extrinsic +FN:59,build +FN:90,pallet +FN:94,extrinsic +FN:98,build +FN:119,create_benchmark_extrinsic +FN:131,{closure#0} +FN:174,inherent_benchmark_data +FNF:10 +FNDA:0,new +FNDA:0,pallet +FNDA:0,extrinsic +FNDA:0,build +FNDA:0,pallet +FNDA:0,extrinsic +FNDA:0,build +FNDA:0,create_benchmark_extrinsic +FNDA:0,{closure#0} +FNDA:0,inherent_benchmark_data +DA:45,0 +DA:51,0 +DA:55,0 +DA:59,0 +DA:60,0 +DA:62,0 +DA:63,0 +DA:64,0 +DA:69,0 +DA:90,0 +DA:94,0 +DA:98,0 +DA:99,0 +DA:101,0 +DA:102,0 +DA:103,0 +DA:104,0 +DA:105,0 +DA:112,0 +DA:119,0 +DA:125,0 +DA:126,0 +DA:127,0 +DA:129,0 +DA:131,0 +DA:133,0 +DA:134,0 +DA:135,0 +DA:136,0 +DA:137,0 +DA:138,0 +DA:140,0 +DA:142,0 +DA:143,0 +DA:144,0 +DA:148,0 +DA:149,0 +DA:152,0 +DA:153,0 +DA:154,0 +DA:155,0 +DA:161,0 +DA:164,0 +DA:165,0 +DA:166,0 +DA:167,0 +DA:174,0 +DA:175,0 +DA:176,0 +DA:177,0 +DA:179,0 +DA:181,0 +DA:182,0 +LF:53 +LH:0 +end_of_record +TN: +SF:/home/erick/hashed/hashed-substrate/node/src/chain_spec.rs +FN:28,get_account_id_from_seed +FN:36,authority_keys_from_seed +FN:40,hashed_properties +FN:53,md5_properties +FN:66,development_config +FN:107,local_testnet_config +FN:156,chaos_config +FN:195,md5_config +FN:235,testnet_genesis +FNF:9 +FNDA:0,get_account_id_from_seed +FNDA:0,authority_keys_from_seed +FNDA:0,hashed_properties +FNDA:0,md5_properties +FNDA:0,development_config +FNDA:0,local_testnet_config +FNDA:0,chaos_config +FNDA:0,md5_config +FNDA:0,testnet_genesis +DA:19,0 +DA:20,0 +DA:28,0 +DA:32,0 +DA:36,0 +DA:37,0 +DA:40,0 +DA:41,0 +DA:42,0 +DA:43,0 +DA:44,0 +DA:45,0 +DA:46,0 +DA:47,0 +DA:48,0 +DA:49,0 +DA:53,0 +DA:54,0 +DA:55,0 +DA:56,0 +DA:57,0 +DA:58,0 +DA:59,0 +DA:60,0 +DA:61,0 +DA:62,0 +DA:66,0 +DA:67,0 +DA:69,0 +DA:74,0 +DA:75,0 +DA:76,0 +DA:77,0 +DA:79,0 +DA:81,0 +DA:83,0 +DA:84,0 +DA:85,0 +DA:86,0 +DA:87,0 +DA:93,0 +DA:95,0 +DA:97,0 +DA:99,0 +DA:101,0 +DA:103,0 +DA:107,0 +DA:108,0 +DA:110,0 +DA:115,0 +DA:116,0 +DA:117,0 +DA:118,0 +DA:120,0 +DA:122,0 +DA:124,0 +DA:125,0 +DA:126,0 +DA:127,0 +DA:128,0 +DA:129,0 +DA:130,0 +DA:131,0 +DA:132,0 +DA:133,0 +DA:134,0 +DA:135,0 +DA:136,0 +DA:142,0 +DA:144,0 +DA:146,0 +DA:148,0 +DA:150,0 +DA:152,0 +DA:156,0 +DA:157,0 +DA:159,0 +DA:164,0 +DA:165,0 +DA:166,0 +DA:167,0 +DA:169,0 +DA:171,0 +DA:173,0 +DA:174,0 +DA:175,0 +DA:181,0 +DA:183,0 +DA:185,0 +DA:187,0 +DA:189,0 +DA:191,0 +DA:195,0 +DA:196,0 +DA:198,0 +DA:203,0 +DA:204,0 +DA:205,0 +DA:206,0 +DA:208,0 +DA:210,0 +DA:212,0 +DA:213,0 +DA:214,0 +DA:220,0 +DA:222,0 +DA:224,0 +DA:226,0 +DA:228,0 +DA:230,0 +DA:235,0 +DA:243,0 +DA:244,0 +DA:247,0 +DA:250,0 +DA:253,0 +DA:254,0 +DA:255,0 +DA:262,0 +DA:274,0 +DA:275,0 +DA:276,0 +DA:278,0 +DA:279,0 +DA:280,0 +LF:125 +LH:0 +end_of_record +TN: +SF:/home/erick/hashed/hashed-substrate/node/src/command.rs +FN:14,impl_name +FN:18,impl_version +FN:22,description +FN:26,author +FN:30,support_url +FN:34,copyright_start_year +FN:38,load_spec +FN:50,native_runtime_version +FN:56,run +FN:104,{closure#0} +FNF:10 +FNDA:0,impl_name +FNDA:0,impl_version +FNDA:0,description +FNDA:0,author +FNDA:0,support_url +FNDA:0,copyright_start_year +FNDA:0,load_spec +FNDA:0,native_runtime_version +FNDA:0,run +FNDA:0,{closure#0} +DA:14,0 +DA:15,0 +DA:18,0 +DA:19,0 +DA:22,0 +DA:23,0 +DA:26,0 +DA:27,0 +DA:30,0 +DA:31,0 +DA:34,0 +DA:38,0 +DA:39,0 +DA:40,0 +DA:41,0 +DA:42,0 +DA:43,0 +DA:44,0 +DA:45,0 +DA:50,0 +DA:56,0 +DA:57,0 +DA:59,0 +DA:60,0 +DA:61,0 +DA:62,0 +DA:63,0 +DA:65,0 +DA:66,0 +DA:67,0 +DA:68,0 +DA:69,0 +DA:70,0 +DA:73,0 +DA:74,0 +DA:75,0 +DA:76,0 +DA:77,0 +DA:80,0 +DA:81,0 +DA:82,0 +DA:83,0 +DA:84,0 +DA:87,0 +DA:88,0 +DA:89,0 +DA:90,0 +DA:91,0 +DA:92,0 +DA:95,0 +DA:96,0 +DA:97,0 +DA:99,0 +DA:100,0 +DA:101,0 +DA:102,0 +DA:103,0 +DA:104,0 +DA:105,0 +DA:106,0 +DA:108,0 +DA:111,0 +DA:112,0 +DA:114,0 +DA:117,0 +DA:118,0 +DA:120,0 +DA:121,0 +DA:129,0 +DA:130,0 +DA:131,0 +DA:133,0 +DA:134,0 +DA:135,0 +DA:136,0 +DA:137,0 +DA:139,0 +DA:141,0 +DA:142,0 +DA:143,0 +DA:145,0 +DA:147,0 +DA:148,0 +DA:149,0 +DA:167,0 +DA:169,0 +DA:170,0 +DA:171,0 +DA:172,0 +DA:175,0 +DA:176,0 +DA:177,0 +LF:92 +LH:0 +end_of_record +TN: +SF:/home/erick/hashed/hashed-substrate/node/src/main.rs +FN:12,main +FNF:1 +FNDA:0,main +DA:12,0 +DA:13,0 +LF:2 +LH:0 +end_of_record +TN: +SF:/home/erick/hashed/hashed-substrate/node/src/rpc.rs +FN:31,create_full, sp_runtime::OpaqueExtrinsic>>, sc_service::client::call_executor::LocalCallExecutor, sp_runtime::OpaqueExtrinsic>, sc_client_db::Backend, sp_runtime::OpaqueExtrinsic>>, sc_executor::native_executor::NativeElseWasmExecutor>, sp_runtime::generic::block::Block, sp_runtime::OpaqueExtrinsic>, hashed_runtime::RuntimeApi>, sc_transaction_pool::BasicPool, sp_runtime::OpaqueExtrinsic>>, sc_service::client::call_executor::LocalCallExecutor, sp_runtime::OpaqueExtrinsic>, sc_client_db::Backend, sp_runtime::OpaqueExtrinsic>>, sc_executor::native_executor::NativeElseWasmExecutor>, sp_runtime::generic::block::Block, sp_runtime::OpaqueExtrinsic>, hashed_runtime::RuntimeApi>, sp_runtime::generic::block::Block, sp_runtime::OpaqueExtrinsic>>, sp_runtime::generic::block::Block, sp_runtime::OpaqueExtrinsic>>> +FNF:1 +FNDA:0,create_full, sp_runtime::OpaqueExtrinsic>>, sc_service::client::call_executor::LocalCallExecutor, sp_runtime::OpaqueExtrinsic>, sc_client_db::Backend, sp_runtime::OpaqueExtrinsic>>, sc_executor::native_executor::NativeElseWasmExecutor>, sp_runtime::generic::block::Block, sp_runtime::OpaqueExtrinsic>, hashed_runtime::RuntimeApi>, sc_transaction_pool::BasicPool, sp_runtime::OpaqueExtrinsic>>, sc_service::client::call_executor::LocalCallExecutor, sp_runtime::OpaqueExtrinsic>, sc_client_db::Backend, sp_runtime::OpaqueExtrinsic>>, sc_executor::native_executor::NativeElseWasmExecutor>, sp_runtime::generic::block::Block, sp_runtime::OpaqueExtrinsic>, hashed_runtime::RuntimeApi>, sp_runtime::generic::block::Block, sp_runtime::OpaqueExtrinsic>>, sp_runtime::generic::block::Block, sp_runtime::OpaqueExtrinsic>>> +DA:31,0 +DA:46,0 +DA:47,0 +DA:49,0 +DA:50,0 +DA:57,0 +LF:6 +LH:0 +end_of_record +TN: +SF:/home/erick/hashed/hashed-substrate/node/src/service.rs +FN:25,dispatch +FN:29,native_version +FN:39,new_partial +FN:68,{closure#0} +FN:69,{closure#1} +FN:86,{closure#2} +FN:91,{closure#3} +FN:110,{closure#4} +FN:120,{closure#5} +FN:137,{closure#6} +FN:152,remote_keystore +FN:160,new_full +FN:228,{closure#0} +FN:254,{closure#1} +FN:269,{closure#2} +FN:288,{closure#3} +FN:312,{closure#4} +FN:330,{closure#5} +FNF:18 +FNDA:0,dispatch +FNDA:0,native_version +FNDA:0,new_partial +FNDA:0,{closure#0} +FNDA:0,{closure#1} +FNDA:0,{closure#2} +FNDA:0,{closure#3} +FNDA:0,{closure#4} +FNDA:0,{closure#5} +FNDA:0,{closure#6} +FNDA:0,remote_keystore +FNDA:0,new_full +FNDA:0,{closure#0} +FNDA:0,{closure#1} +FNDA:0,{closure#2} +FNDA:0,{closure#3} +FNDA:0,{closure#4} +FNDA:0,{closure#5} +DA:25,0 +DA:26,0 +DA:29,0 +DA:30,0 +DA:39,0 +DA:61,0 +DA:62,0 +DA:65,0 +DA:68,0 +DA:69,0 +DA:70,0 +DA:71,0 +DA:72,0 +DA:78,0 +DA:79,0 +DA:83,0 +DA:86,0 +DA:87,0 +DA:89,0 +DA:91,0 +DA:92,0 +DA:96,0 +DA:99,0 +DA:100,0 +DA:101,0 +DA:102,0 +DA:103,0 +DA:107,0 +DA:108,0 +DA:109,0 +DA:110,0 +DA:113,0 +DA:115,0 +DA:117,0 +DA:118,0 +DA:119,0 +DA:120,0 +DA:121,0 +DA:124,0 +DA:125,0 +DA:126,0 +DA:129,0 +DA:131,0 +DA:132,0 +DA:133,0 +DA:135,0 +DA:136,0 +DA:137,0 +DA:140,0 +DA:141,0 +DA:142,0 +DA:143,0 +DA:144,0 +DA:145,0 +DA:146,0 +DA:147,0 +DA:148,0 +DA:152,0 +DA:156,0 +DA:160,0 +DA:161,0 +DA:162,0 +DA:163,0 +DA:164,0 +DA:165,0 +DA:166,0 +DA:167,0 +DA:168,0 +DA:169,0 +DA:172,0 +DA:173,0 +DA:174,0 +DA:175,0 +DA:176,0 +DA:183,0 +DA:184,0 +DA:187,0 +DA:190,0 +DA:191,0 +DA:192,0 +DA:193,0 +DA:194,0 +DA:197,0 +DA:200,0 +DA:201,0 +DA:202,0 +DA:203,0 +DA:204,0 +DA:205,0 +DA:208,0 +DA:211,0 +DA:212,0 +DA:213,0 +DA:217,0 +DA:218,0 +DA:219,0 +DA:220,0 +DA:221,0 +DA:222,0 +DA:225,0 +DA:226,0 +DA:228,0 +DA:230,0 +DA:231,0 +DA:235,0 +DA:236,0 +DA:237,0 +DA:238,0 +DA:240,0 +DA:241,0 +DA:242,0 +DA:243,0 +DA:244,0 +DA:245,0 +DA:248,0 +DA:250,0 +DA:251,0 +DA:252,0 +DA:253,0 +DA:254,0 +DA:257,0 +DA:260,0 +DA:263,0 +DA:265,0 +DA:266,0 +DA:267,0 +DA:268,0 +DA:269,0 +DA:270,0 +DA:273,0 +DA:274,0 +DA:275,0 +DA:278,0 +DA:281,0 +DA:282,0 +DA:283,0 +DA:284,0 +DA:285,0 +DA:286,0 +DA:287,0 +DA:288,0 +DA:294,0 +DA:296,0 +DA:301,0 +DA:306,0 +DA:308,0 +DA:312,0 +DA:316,0 +DA:327,0 +DA:329,0 +DA:330,0 +DA:335,0 +DA:337,0 +DA:338,0 +DA:342,0 +DA:343,0 +LF:156 +LH:0 +end_of_record +TN: +SF:/home/erick/hashed/hashed-substrate/pallets/bitcoin-vaults/src/functions.rs +FN:481,bdk_gen_proposal +FN:498,gen_proposals_payload_by_bulk +FNF:2 +FNDA:0,bdk_gen_proposal +FNDA:0,gen_proposals_payload_by_bulk +DA:22,1 +DA:23,2 +DA:24,1 +DA:25,1 +DA:26,1 +DA:29,5 +DA:32,11 +DA:33,5 +DA:35,5 +DA:37,27 +DA:39,10 +DA:40,1 +DA:42,20 +DA:43,5 +DA:45,2 +DA:49,5 +DA:50,3 +DA:51,1 +DA:53,0 +DA:55,10 +DA:57,5 +DA:58,5 +DA:61,2 +DA:63,4 +DA:64,7 +DA:65,2 +DA:67,8 +DA:68,8 +DA:69,6 +DA:70,2 +DA:71,2 +DA:75,2 +DA:76,4 +DA:77,0 +DA:79,2 +DA:80,2 +DA:83,0 +DA:84,0 +DA:85,0 +DA:86,0 +DA:87,0 +DA:88,0 +DA:90,0 +DA:91,0 +DA:94,4 +DA:95,8 +DA:96,6 +DA:97,8 +DA:98,4 +DA:99,5 +DA:100,9 +DA:101,18 +DA:102,5 +DA:103,3 +DA:105,6 +DA:106,6 +DA:109,2 +DA:111,4 +DA:112,2 +DA:113,5 +DA:115,2 +DA:118,7 +DA:119,4 +DA:120,4 +DA:121,6 +DA:122,3 +DA:123,4 +DA:124,4 +DA:125,2 +DA:128,2 +DA:131,2 +DA:132,2 +DA:135,1 +DA:136,2 +DA:137,2 +DA:138,2 +DA:140,2 +DA:142,3 +DA:143,1 +DA:145,3 +DA:147,0 +DA:148,0 +DA:149,0 +DA:150,0 +DA:152,0 +DA:155,0 +DA:156,0 +DA:162,8 +DA:163,16 +DA:164,1 +DA:165,0 +DA:166,0 +DA:167,0 +DA:171,1 +DA:176,8 +DA:181,0 +DA:182,0 +DA:183,0 +DA:184,0 +DA:185,0 +DA:186,0 +DA:187,0 +DA:189,0 +DA:192,0 +DA:193,0 +DA:196,0 +DA:197,0 +DA:198,0 +DA:199,0 +DA:200,0 +DA:201,0 +DA:202,0 +DA:204,0 +DA:207,0 +DA:208,0 +DA:211,0 +DA:212,0 +DA:213,0 +DA:214,0 +DA:215,0 +DA:216,0 +DA:217,0 +DA:218,0 +DA:220,0 +DA:223,0 +DA:224,0 +DA:228,0 +DA:229,0 +DA:230,0 +DA:231,0 +DA:232,0 +DA:233,0 +DA:234,0 +DA:235,0 +DA:237,0 +DA:243,0 +DA:244,0 +DA:245,0 +DA:246,0 +DA:247,0 +DA:248,0 +DA:249,0 +DA:250,0 +DA:252,0 +DA:258,0 +DA:260,0 +DA:261,0 +DA:262,0 +DA:263,0 +DA:264,0 +DA:265,0 +DA:266,0 +DA:268,0 +DA:270,0 +DA:272,0 +DA:275,0 +DA:277,0 +DA:278,0 +DA:279,0 +DA:281,0 +DA:298,0 +DA:299,0 +DA:302,0 +DA:303,0 +DA:308,0 +DA:309,0 +DA:310,0 +DA:312,0 +DA:313,0 +DA:315,0 +DA:316,0 +DA:317,0 +DA:318,0 +DA:319,0 +DA:320,0 +DA:321,0 +DA:322,0 +DA:323,0 +DA:325,0 +DA:326,0 +DA:327,0 +DA:328,0 +DA:330,0 +DA:334,0 +DA:335,0 +DA:336,0 +DA:337,0 +DA:338,0 +DA:339,0 +DA:342,0 +DA:345,0 +DA:346,0 +DA:349,0 +DA:350,0 +DA:352,0 +DA:357,0 +DA:358,0 +DA:361,0 +DA:362,0 +DA:363,0 +DA:364,0 +DA:365,0 +DA:366,0 +DA:367,0 +DA:370,0 +DA:371,0 +DA:374,0 +DA:380,0 +DA:381,0 +DA:382,0 +DA:383,0 +DA:384,0 +DA:385,0 +DA:386,0 +DA:387,0 +DA:388,0 +DA:389,0 +DA:391,0 +DA:392,0 +DA:397,0 +DA:399,0 +DA:400,0 +DA:401,0 +DA:403,0 +DA:405,0 +DA:406,0 +DA:409,0 +DA:410,0 +DA:411,0 +DA:414,0 +DA:417,0 +DA:418,0 +DA:419,0 +DA:421,0 +DA:422,0 +DA:423,0 +DA:424,0 +DA:425,0 +DA:426,0 +DA:428,0 +DA:429,0 +DA:430,0 +DA:431,0 +DA:433,0 +DA:436,0 +DA:438,0 +DA:441,0 +DA:442,0 +DA:443,0 +DA:444,0 +DA:445,0 +DA:446,0 +DA:448,0 +DA:454,0 +DA:459,0 +DA:460,0 +DA:462,0 +DA:463,0 +DA:465,0 +DA:466,0 +DA:467,0 +DA:468,0 +DA:469,0 +DA:470,0 +DA:471,0 +DA:472,0 +DA:473,0 +DA:474,0 +DA:475,0 +DA:478,0 +DA:481,0 +DA:484,0 +DA:485,0 +DA:486,0 +DA:488,0 +DA:491,0 +DA:492,0 +DA:495,0 +DA:498,0 +DA:501,0 +DA:502,0 +DA:503,0 +DA:504,0 +DA:505,0 +DA:506,0 +DA:508,0 +DA:509,0 +DA:510,0 +DA:511,0 +DA:512,0 +DA:514,0 +DA:516,0 +DA:519,0 +DA:520,0 +DA:521,0 +DA:522,0 +DA:523,0 +DA:524,0 +DA:526,0 +DA:527,0 +DA:529,0 +DA:530,0 +DA:531,0 +DA:532,0 +DA:533,0 +DA:534,0 +DA:535,0 +DA:536,0 +DA:538,0 +DA:539,0 +DA:540,0 +DA:542,0 +DA:543,0 +DA:544,0 +DA:545,0 +DA:548,0 +DA:571,0 +DA:572,0 +DA:573,0 +DA:574,0 +DA:575,0 +DA:579,0 +DA:580,0 +DA:582,0 +DA:583,0 +DA:584,0 +DA:586,0 +DA:588,0 +DA:589,0 +DA:590,0 +DA:594,0 +DA:595,0 +DA:597,0 +DA:598,0 +DA:599,0 +DA:601,0 +DA:603,0 +DA:604,0 +DA:605,0 +DA:609,0 +DA:613,0 +DA:614,0 +DA:616,0 +DA:617,0 +DA:618,0 +DA:620,0 +DA:622,0 +DA:623,0 +DA:624,0 +DA:628,0 +DA:632,0 +DA:633,0 +DA:641,0 +DA:642,0 +LF:354 +LH:75 +end_of_record +TN: +SF:/home/erick/hashed/hashed-substrate/pallets/bitcoin-vaults/src/lib.rs +FN:17,pallet_constants_metadata +FN:51,default +FN:182,pallet_prefix +FN:193,xpubs_by_owner +FN:198,proposals +FN:208,proposals_by_vault +FN:218,pallet_prefix +FN:228,vaults_by_signer +FN:238,get +FN:239,__type_value_for_default_url +FN:242,pallet_prefix +FN:324,set_xpub +FN:367,{closure#0} +FN:401,{closure#0} +FN:403,create_vault +FN:447,{closure#0} +FN:449,remove_vault +FN:470,{closure#0} +FN:472,propose +FN:505,{closure#0} +FN:507,remove_proposal +FN:531,{closure#0} +FN:533,set_bdk_url +FN:554,{closure#0} +FN:556,save_psbt +FN:577,{closure#0} +FN:579,finalize_psbt +FN:600,{closure#0} +FN:602,broadcast_psbt +FN:615,{closure#0} +FN:617,kill_storage +FN:633,{closure#0} +FN:635,ocw_insert_descriptors +FN:668,{closure#0} +FN:670,ocw_insert_psbts +FN:696,{closure#0} +FN:698,ocw_finalize_psbts +FNF:37 +FNDA:3,pallet_constants_metadata +FNDA:0,default +FNDA:16,pallet_prefix +FNDA:18,xpubs_by_owner +FNDA:12,proposals +FNDA:16,proposals_by_vault +FNDA:10,pallet_prefix +FNDA:4,vaults_by_signer +FNDA:0,get +FNDA:0,__type_value_for_default_url +FNDA:0,pallet_prefix +FNDA:8,set_xpub +FNDA:5,{closure#0} +FNDA:26,{closure#0} +FNDA:6,create_vault +FNDA:6,{closure#0} +FNDA:1,remove_vault +FNDA:16,{closure#0} +FNDA:4,propose +FNDA:0,{closure#0} +FNDA:0,remove_proposal +FNDA:0,{closure#0} +FNDA:0,set_bdk_url +FNDA:10,{closure#0} +FNDA:2,save_psbt +FNDA:6,{closure#0} +FNDA:1,finalize_psbt +FNDA:0,{closure#0} +FNDA:0,broadcast_psbt +FNDA:0,{closure#0} +FNDA:0,kill_storage +FNDA:0,{closure#0} +FNDA:0,ocw_insert_descriptors +FNDA:0,{closure#0} +FNDA:0,ocw_insert_psbts +FNDA:0,{closure#0} +FNDA:0,ocw_finalize_psbts +DA:17,3 +DA:51,0 +DA:52,0 +DA:58,0 +DA:60,0 +DA:182,16 +DA:193,18 +DA:198,12 +DA:208,16 +DA:218,10 +DA:228,4 +DA:238,0 +DA:239,0 +DA:240,0 +DA:242,0 +DA:257,0 +DA:260,0 +DA:261,0 +DA:262,0 +DA:268,0 +DA:269,0 +DA:271,0 +DA:273,0 +DA:274,0 +DA:275,0 +DA:277,0 +DA:279,0 +DA:280,0 +DA:281,0 +DA:283,0 +DA:284,0 +DA:285,0 +DA:286,0 +DA:287,0 +DA:288,0 +DA:290,0 +DA:292,0 +DA:295,0 +DA:296,0 +DA:298,0 +DA:302,0 +DA:323,0 +DA:324,8 +DA:329,16 +DA:330,16 +DA:331,17 +DA:332,16 +DA:334,8 +DA:335,0 +DA:336,2 +DA:337,0 +DA:342,16 +DA:344,8 +DA:346,8 +DA:348,16 +DA:350,16 +DA:354,8 +DA:357,8 +DA:367,5 +DA:368,0 +DA:369,1 +DA:370,1 +DA:372,3 +DA:374,4 +DA:375,1 +DA:376,1 +DA:377,1 +DA:378,3 +DA:380,0 +DA:382,1 +DA:383,2 +DA:385,2 +DA:401,26 +DA:402,0 +DA:403,6 +DA:410,12 +DA:411,6 +DA:412,13 +DA:413,3 +DA:416,11 +DA:418,7 +DA:420,5 +DA:424,5 +DA:431,5 +DA:434,5 +DA:447,6 +DA:448,0 +DA:449,1 +DA:453,2 +DA:455,2 +DA:470,16 +DA:471,0 +DA:472,4 +DA:479,8 +DA:482,4 +DA:485,4 +DA:491,4 +DA:492,4 +DA:494,4 +DA:505,0 +DA:506,0 +DA:507,0 +DA:511,0 +DA:512,0 +DA:517,0 +DA:518,0 +DA:531,0 +DA:532,0 +DA:533,0 +DA:537,0 +DA:538,0 +DA:539,0 +DA:554,10 +DA:555,0 +DA:556,2 +DA:561,4 +DA:562,2 +DA:577,6 +DA:578,0 +DA:579,1 +DA:584,1 +DA:585,1 +DA:600,0 +DA:601,0 +DA:602,0 +DA:606,0 +DA:607,0 +DA:615,0 +DA:616,0 +DA:617,0 +DA:620,0 +DA:621,0 +DA:622,0 +DA:623,0 +DA:624,0 +DA:625,0 +DA:626,0 +DA:633,0 +DA:634,0 +DA:635,0 +DA:641,0 +DA:642,0 +DA:643,0 +DA:644,0 +DA:645,0 +DA:646,0 +DA:647,0 +DA:648,0 +DA:649,0 +DA:650,0 +DA:652,0 +DA:654,0 +DA:655,0 +DA:656,0 +DA:658,0 +DA:668,0 +DA:669,0 +DA:670,0 +DA:675,0 +DA:676,0 +DA:677,0 +DA:678,0 +DA:679,0 +DA:680,0 +DA:681,0 +DA:682,0 +DA:683,0 +DA:685,0 +DA:688,0 +DA:689,0 +DA:696,0 +DA:697,0 +DA:698,0 +DA:704,0 +DA:705,0 +DA:706,0 +DA:707,0 +DA:708,0 +DA:709,0 +DA:711,0 +DA:720,0 +DA:721,0 +DA:722,0 +DA:723,0 +DA:724,0 +DA:730,0 +DA:731,0 +DA:732,0 +DA:733,0 +DA:735,0 +DA:737,0 +DA:738,0 +DA:739,0 +DA:741,0 +DA:743,0 +DA:744,0 +DA:745,0 +DA:747,0 +DA:749,0 +LF:199 +LH:65 +end_of_record +TN: +SF:/home/erick/hashed/hashed-substrate/pallets/bitcoin-vaults/src/types.rs +FN:213,clone +FN:275,is_ready_to_finalize +FN:282,next_status +FN:306,default +FNF:4 +FNDA:0,clone +FNDA:0,is_ready_to_finalize +FNDA:0,next_status +FNDA:0,default +DA:25,0 +DA:64,4 +DA:65,8 +DA:68,4 +DA:69,8 +DA:70,4 +DA:71,4 +DA:72,0 +DA:75,5 +DA:76,5 +DA:77,4 +DA:78,5 +DA:79,5 +DA:83,4 +DA:84,4 +DA:89,0 +DA:90,0 +DA:95,5 +DA:97,5 +DA:98,5 +DA:99,5 +DA:100,5 +DA:101,5 +DA:102,5 +DA:116,0 +DA:118,0 +DA:119,0 +DA:142,0 +DA:143,0 +DA:152,1 +DA:154,4 +DA:155,5 +DA:156,5 +DA:157,5 +DA:158,1 +DA:159,5 +DA:160,5 +DA:161,5 +DA:162,5 +DA:163,5 +DA:164,5 +DA:188,4 +DA:189,4 +DA:213,0 +DA:215,0 +DA:216,0 +DA:217,0 +DA:218,0 +DA:224,0 +DA:225,0 +DA:254,0 +DA:255,0 +DA:275,0 +DA:276,0 +DA:277,0 +DA:278,0 +DA:282,0 +DA:284,0 +DA:285,0 +DA:286,0 +DA:287,0 +DA:288,0 +DA:290,0 +DA:306,0 +DA:307,0 +DA:312,0 +DA:313,0 +DA:314,0 +DA:315,0 +DA:317,0 +DA:320,0 +DA:337,5 +DA:338,5 +DA:343,5 +DA:344,5 +DA:345,5 +DA:346,4 +DA:347,0 +DA:348,0 +DA:354,4 +DA:355,4 +DA:356,0 +DA:357,0 +DA:358,8 +DA:362,0 +DA:363,0 +DA:364,0 +DA:365,0 +DA:366,0 +LF:89 +LH:43 +end_of_record +TN: +SF:/home/erick/hashed/hashed-substrate/pallets/confidential-docs/src/functions.rs +FN:9,do_set_vault +FN:30,do_set_owned_document +FN:49,do_remove_owned_document +FN:53,{closure#0} +FN:62,do_share_document +FN:85,do_update_shared_document_metadata +FN:95,do_remove_shared_document +FN:99,{closure#0} +FN:104,{closure#0} +FN:113,validate_owned_doc +FN:127,validate_shared_doc +FN:145,validate_has_public_key +FN:149,validate_cid +FN:154,validate_doc_name +FN:159,validate_doc_desc +FNF:15 +FNDA:4,do_set_vault +FNDA:2,do_set_owned_document +FNDA:1,do_remove_owned_document +FNDA:3,{closure#0} +FNDA:2,do_share_document +FNDA:1,do_update_shared_document_metadata +FNDA:1,do_remove_shared_document +FNDA:3,{closure#0} +FNDA:3,{closure#0} +FNDA:2,validate_owned_doc +FNDA:2,validate_shared_doc +FNDA:2,validate_has_public_key +FNDA:4,validate_cid +FNDA:1,validate_doc_name +FNDA:1,validate_doc_desc +DA:9,4 +DA:10,9 +DA:11,4 +DA:12,4 +DA:13,2 +DA:15,5 +DA:19,4 +DA:20,4 +DA:22,8 +DA:23,4 +DA:24,4 +DA:26,4 +DA:27,4 +DA:30,2 +DA:31,4 +DA:32,3 +DA:33,4 +DA:34,2 +DA:35,0 +DA:36,0 +DA:37,2 +DA:38,3 +DA:40,8 +DA:41,2 +DA:42,0 +DA:44,4 +DA:45,2 +DA:46,2 +DA:49,1 +DA:50,5 +DA:51,5 +DA:52,5 +DA:53,3 +DA:54,2 +DA:55,1 +DA:56,0 +DA:57,2 +DA:58,1 +DA:59,1 +DA:62,2 +DA:63,2 +DA:64,5 +DA:65,4 +DA:66,2 +DA:67,2 +DA:68,2 +DA:69,0 +DA:70,0 +DA:72,6 +DA:73,2 +DA:74,0 +DA:76,8 +DA:77,2 +DA:78,0 +DA:80,4 +DA:81,2 +DA:82,2 +DA:85,1 +DA:86,6 +DA:87,5 +DA:88,2 +DA:89,1 +DA:90,1 +DA:91,1 +DA:92,1 +DA:95,1 +DA:96,5 +DA:97,5 +DA:98,5 +DA:99,3 +DA:100,2 +DA:101,1 +DA:102,0 +DA:103,5 +DA:104,3 +DA:105,2 +DA:106,1 +DA:107,0 +DA:108,2 +DA:109,1 +DA:110,1 +DA:113,2 +DA:114,0 +DA:115,2 +DA:116,2 +DA:117,2 +DA:118,2 +DA:119,0 +DA:120,3 +DA:121,3 +DA:122,3 +DA:123,5 +DA:124,2 +DA:127,2 +DA:128,0 +DA:129,2 +DA:130,2 +DA:131,2 +DA:132,2 +DA:133,2 +DA:134,0 +DA:135,3 +DA:136,5 +DA:137,5 +DA:138,5 +DA:139,5 +DA:140,5 +DA:141,5 +DA:142,2 +DA:145,2 +DA:146,3 +DA:147,2 +DA:149,4 +DA:150,5 +DA:151,4 +DA:154,1 +DA:155,2 +DA:156,1 +DA:159,1 +DA:160,2 +DA:161,2 +LF:121 +LH:107 +end_of_record +TN: +SF:/home/erick/hashed/hashed-substrate/pallets/confidential-docs/src/lib.rs +FN:62,vaults +FN:72,public_keys +FN:82,pallet_prefix +FN:92,owned_docs>> +FN:102,owned_docs_by_owner +FN:112,shared_docs>> +FN:122,shared_docs_by_to +FN:132,shared_docs_by_from +FN:215,{closure#0} +FN:217,set_vault +FN:229,{closure#0} +FN:231,set_owned_document +FN:243,{closure#0} +FN:245,remove_owned_document +FN:257,{closure#0} +FN:259,share_document +FN:272,{closure#0} +FN:274,update_shared_document_metadata +FN:288,{closure#0} +FN:290,remove_shared_document +FN:306,{closure#0} +FN:308,kill_storage +FNF:22 +FNDA:10,vaults +FNDA:8,public_keys +FNDA:8,pallet_prefix +FNDA:6,owned_docs>> +FNDA:8,owned_docs_by_owner +FNDA:6,shared_docs>> +FNDA:10,shared_docs_by_to +FNDA:10,shared_docs_by_from +FNDA:20,{closure#0} +FNDA:4,set_vault +FNDA:9,{closure#0} +FNDA:2,set_owned_document +FNDA:5,{closure#0} +FNDA:1,remove_owned_document +FNDA:10,{closure#0} +FNDA:2,share_document +FNDA:7,{closure#0} +FNDA:1,update_shared_document_metadata +FNDA:5,{closure#0} +FNDA:1,remove_shared_document +FNDA:0,{closure#0} +FNDA:0,kill_storage +DA:20,5 +DA:62,10 +DA:72,8 +DA:82,8 +DA:92,6 +DA:102,8 +DA:112,6 +DA:122,10 +DA:132,10 +DA:215,20 +DA:216,0 +DA:217,4 +DA:218,8 +DA:219,4 +DA:229,9 +DA:230,0 +DA:231,2 +DA:232,4 +DA:233,2 +DA:243,5 +DA:244,0 +DA:245,1 +DA:246,2 +DA:247,1 +DA:257,10 +DA:258,0 +DA:259,2 +DA:260,4 +DA:261,2 +DA:272,7 +DA:273,0 +DA:274,1 +DA:275,3 +DA:276,2 +DA:288,5 +DA:289,0 +DA:290,1 +DA:291,2 +DA:292,1 +DA:306,0 +DA:307,0 +DA:308,0 +DA:311,0 +DA:312,0 +DA:313,0 +DA:314,0 +DA:315,0 +DA:316,0 +DA:317,0 +DA:318,0 +DA:319,0 +LF:51 +LH:33 +end_of_record +TN: +SF:/home/erick/hashed/hashed-substrate/pallets/fruniques/src/functions.rs +FN:16,u32_to_instance_id +FN:47,account_id_to_lookup_source +FN:90,set_attribute +FN:145,do_create_collection +FN:196,do_spawn +FNF:5 +FNDA:0,u32_to_instance_id +FNDA:2,account_id_to_lookup_source +FNDA:0,set_attribute +FNDA:1,do_create_collection +FNDA:2,do_spawn +DA:16,0 +DA:20,0 +DA:27,0 +DA:30,0 +DA:31,0 +DA:34,1 +DA:35,1 +DA:38,0 +DA:39,0 +DA:40,0 +DA:42,0 +DA:44,0 +DA:47,2 +DA:50,2 +DA:59,0 +DA:60,0 +DA:61,0 +DA:63,0 +DA:66,1 +DA:67,1 +DA:70,2 +DA:71,2 +DA:72,1 +DA:74,2 +DA:77,1 +DA:78,1 +DA:79,1 +DA:81,2 +DA:84,0 +DA:85,0 +DA:87,0 +DA:90,0 +DA:98,0 +DA:99,0 +DA:100,0 +DA:101,0 +DA:102,0 +DA:104,0 +DA:113,0 +DA:114,0 +DA:122,0 +DA:123,0 +DA:131,0 +DA:132,0 +DA:135,0 +DA:136,0 +DA:137,0 +DA:138,0 +DA:140,0 +DA:145,1 +DA:151,2 +DA:154,1 +DA:155,2 +DA:156,2 +DA:157,1 +DA:159,1 +DA:162,6 +DA:164,3 +DA:175,0 +DA:177,0 +DA:179,0 +DA:180,0 +DA:182,0 +DA:185,0 +DA:186,0 +DA:187,0 +DA:188,0 +DA:189,0 +DA:193,0 +DA:196,2 +DA:204,4 +DA:205,4 +DA:208,2 +DA:209,2 +DA:210,0 +DA:211,2 +DA:215,3 +DA:216,3 +DA:218,1 +DA:219,1 +DA:220,1 +DA:221,1 +DA:222,1 +DA:227,2 +DA:230,0 +DA:231,0 +LF:86 +LH:37 +end_of_record +TN: +SF:/home/erick/hashed/hashed-substrate/pallets/fruniques/src/lib.rs +FN:94,pallet_prefix +FN:99,next_collection +FN:108,pallet_prefix +FN:119,pallet_prefix +FN:132,pallet_prefix +FN:145,pallet_prefix +FN:163,{closure#0} +FN:179,create_collection +FN:202,instance_exists +FN:223,set_attributes +FN:258,spawn +FN:309,verify +FN:337,invite +FN:359,force_set_counter +FN:387,force_destroy_collection +FN:414,{closure#0} +FNF:16 +FNDA:0,pallet_prefix +FNDA:4,next_collection +FNDA:4,pallet_prefix +FNDA:2,pallet_prefix +FNDA:0,pallet_prefix +FNDA:2,pallet_prefix +FNDA:0,{closure#0} +FNDA:1,create_collection +FNDA:0,instance_exists +FNDA:1,set_attributes +FNDA:2,spawn +FNDA:0,verify +FNDA:0,invite +FNDA:0,force_set_counter +FNDA:0,force_destroy_collection +FNDA:0,{closure#0} +DA:17,12 +DA:94,0 +DA:99,4 +DA:108,4 +DA:119,2 +DA:132,0 +DA:145,2 +DA:163,0 +DA:164,0 +DA:165,0 +DA:166,0 +DA:168,0 +DA:178,0 +DA:179,1 +DA:183,2 +DA:185,2 +DA:188,1 +DA:189,0 +DA:190,1 +DA:191,1 +DA:194,3 +DA:196,3 +DA:198,3 +DA:201,0 +DA:202,0 +DA:214,0 +DA:222,0 +DA:223,1 +DA:229,3 +DA:232,2 +DA:233,2 +DA:235,2 +DA:237,3 +DA:238,0 +DA:240,0 +DA:241,0 +DA:242,0 +DA:243,0 +DA:244,0 +DA:247,0 +DA:257,0 +DA:258,2 +DA:265,6 +DA:267,2 +DA:268,2 +DA:271,3 +DA:272,4 +DA:274,4 +DA:275,2 +DA:277,2 +DA:278,2 +DA:279,1 +DA:284,1 +DA:285,1 +DA:288,1 +DA:291,4 +DA:293,2 +DA:294,2 +DA:295,2 +DA:296,2 +DA:297,0 +DA:300,2 +DA:308,0 +DA:309,0 +DA:314,0 +DA:315,0 +DA:317,0 +DA:319,0 +DA:321,0 +DA:323,0 +DA:336,0 +DA:337,0 +DA:343,0 +DA:345,0 +DA:346,0 +DA:358,0 +DA:359,0 +DA:364,0 +DA:366,0 +DA:367,0 +DA:368,0 +DA:370,0 +DA:371,0 +DA:374,0 +DA:386,0 +DA:387,0 +DA:393,0 +DA:395,0 +DA:397,0 +DA:398,0 +DA:399,0 +DA:401,0 +DA:414,0 +DA:415,0 +DA:416,0 +DA:417,0 +DA:418,0 +DA:419,0 +DA:420,0 +DA:421,0 +DA:422,0 +DA:423,0 +DA:424,0 +LF:103 +LH:40 +end_of_record +TN: +SF:/home/erick/hashed/hashed-substrate/pallets/fruniques/src/types.rs +FN:50,default +FN:56,to_vec +FN:65,id +FN:69,enum_to_vec +FN:93,to_vec +FN:103,id +FN:107,owner_permissions +FN:112,admin_permissions +FN:126,collaborator_permissions +FN:131,holder_permissions +FNF:10 +FNDA:0,default +FNDA:0,to_vec +FNDA:0,id +FNDA:0,enum_to_vec +FNDA:0,to_vec +FNDA:0,id +FNDA:0,owner_permissions +FNDA:0,admin_permissions +FNDA:0,collaborator_permissions +FNDA:0,holder_permissions +DA:50,0 +DA:51,0 +DA:56,0 +DA:57,0 +DA:58,0 +DA:59,0 +DA:60,0 +DA:61,0 +DA:65,0 +DA:66,0 +DA:69,0 +DA:71,0 +DA:93,0 +DA:94,0 +DA:95,0 +DA:96,0 +DA:97,0 +DA:98,0 +DA:99,0 +DA:103,0 +DA:104,0 +DA:107,0 +DA:109,0 +DA:112,0 +DA:114,0 +DA:115,0 +DA:116,0 +DA:117,0 +DA:118,0 +DA:119,0 +DA:122,0 +DA:126,0 +DA:128,0 +DA:131,0 +DA:133,0 +LF:35 +LH:0 +end_of_record +TN: +SF:/home/erick/hashed/hashed-substrate/pallets/fund-admin/src/functions.rs +FN:49,do_sudo_add_administrator +FN:60,do_sudo_remove_administrator +FN:78,do_create_project +FN:157,do_edit_project +FN:221,do_delete_project +FN:286,do_execute_assign_users +FN:322,do_assign_user +FN:360,do_unassign_user +FN:398,do_execute_users +FN:446,do_create_user +FN:484,do_update_user +FN:512,do_delete_user +FN:549,do_edit_user +FN:593,do_execute_expenditures +FN:668,do_create_expenditure +FN:724,do_update_expenditure +FN:770,do_delete_expenditure +FN:792,do_create_drawdown +FN:838,do_initialize_drawdowns +FN:860,do_submit_drawdown +FN:906,do_approve_drawdown +FN:962,do_reject_drawdown +FN:1069,do_execute_transactions +FN:1130,do_create_transaction +FN:1183,do_update_transaction +FN:1228,do_delete_transaction +FN:1257,do_up_bulk_upload +FN:1306,do_execute_inflation_adjustment +FN:1396,is_project_completion_date_later +FN:1407,add_project_role +FN:1493,remove_project_role +FN:1579,check_user_role +FN:1599,is_project_completed +FN:1612,is_drawdown_editable +FN:1649,is_transaction_editable +FN:1687,sudo_register_admin +FN:1745,do_calculate_drawdown_total_amount +FNF:37 +FNDA:5,do_sudo_add_administrator +FNDA:1,do_sudo_remove_administrator +FNDA:0,do_create_project +FNDA:0,do_edit_project +FNDA:0,do_delete_project +FNDA:0,do_execute_assign_users +FNDA:0,do_assign_user +FNDA:0,do_unassign_user +FNDA:3,do_execute_users +FNDA:1,do_create_user +FNDA:1,do_update_user +FNDA:1,do_delete_user +FNDA:0,do_edit_user +FNDA:0,do_execute_expenditures +FNDA:0,do_create_expenditure +FNDA:0,do_update_expenditure +FNDA:0,do_delete_expenditure +FNDA:0,do_create_drawdown +FNDA:0,do_initialize_drawdowns +FNDA:0,do_submit_drawdown +FNDA:0,do_approve_drawdown +FNDA:0,do_reject_drawdown +FNDA:0,do_execute_transactions +FNDA:0,do_create_transaction +FNDA:0,do_update_transaction +FNDA:0,do_delete_transaction +FNDA:0,do_up_bulk_upload +FNDA:0,do_execute_inflation_adjustment +FNDA:0,is_project_completion_date_later +FNDA:0,add_project_role +FNDA:0,remove_project_role +FNDA:0,check_user_role +FNDA:0,is_project_completed +FNDA:0,is_drawdown_editable +FNDA:0,is_transaction_editable +FNDA:5,sudo_register_admin +FNDA:0,do_calculate_drawdown_total_amount +DA:18,8 +DA:20,8 +DA:21,8 +DA:22,8 +DA:23,9 +DA:26,16 +DA:27,8 +DA:30,8 +DA:31,8 +DA:34,8 +DA:35,8 +DA:38,8 +DA:39,8 +DA:42,8 +DA:43,8 +DA:45,8 +DA:46,8 +DA:49,5 +DA:54,11 +DA:56,5 +DA:57,5 +DA:60,1 +DA:64,3 +DA:66,3 +DA:67,3 +DA:78,0 +DA:102,0 +DA:105,0 +DA:109,0 +DA:112,0 +DA:116,0 +DA:117,0 +DA:118,0 +DA:119,0 +DA:124,0 +DA:133,0 +DA:137,0 +DA:138,0 +DA:141,0 +DA:144,0 +DA:145,0 +DA:149,0 +DA:152,0 +DA:154,0 +DA:157,0 +DA:168,0 +DA:171,0 +DA:174,0 +DA:177,0 +DA:180,0 +DA:181,0 +DA:183,0 +DA:184,0 +DA:185,0 +DA:187,0 +DA:188,0 +DA:189,0 +DA:191,0 +DA:192,0 +DA:193,0 +DA:195,0 +DA:196,0 +DA:197,0 +DA:199,0 +DA:200,0 +DA:202,0 +DA:205,0 +DA:208,0 +DA:210,0 +DA:214,0 +DA:217,0 +DA:218,0 +DA:221,0 +DA:226,0 +DA:229,0 +DA:232,0 +DA:235,0 +DA:240,0 +DA:241,0 +DA:242,0 +DA:243,0 +DA:248,0 +DA:251,0 +DA:254,0 +DA:255,0 +DA:256,0 +DA:260,0 +DA:262,0 +DA:263,0 +DA:265,0 +DA:266,0 +DA:267,0 +DA:271,0 +DA:274,0 +DA:279,0 +DA:282,0 +DA:283,0 +DA:286,0 +DA:296,0 +DA:299,0 +DA:302,0 +DA:305,0 +DA:306,0 +DA:307,0 +DA:308,0 +DA:310,0 +DA:311,0 +DA:318,0 +DA:319,0 +DA:322,0 +DA:328,0 +DA:331,0 +DA:332,0 +DA:335,0 +DA:338,0 +DA:341,0 +DA:342,0 +DA:343,0 +DA:347,0 +DA:348,0 +DA:349,0 +DA:353,0 +DA:356,0 +DA:357,0 +DA:360,0 +DA:366,0 +DA:369,0 +DA:370,0 +DA:373,0 +DA:376,0 +DA:379,0 +DA:380,0 +DA:384,0 +DA:385,0 +DA:389,0 +DA:391,0 +DA:392,0 +DA:398,3 +DA:408,7 +DA:410,5 +DA:411,2 +DA:412,1 +DA:415,2 +DA:416,2 +DA:417,3 +DA:420,0 +DA:423,2 +DA:424,2 +DA:425,1 +DA:428,0 +DA:430,2 +DA:434,1 +DA:441,1 +DA:442,1 +DA:446,1 +DA:452,2 +DA:455,3 +DA:458,2 +DA:460,1 +DA:461,0 +DA:462,2 +DA:464,0 +DA:467,1 +DA:469,1 +DA:471,1 +DA:476,2 +DA:477,1 +DA:481,1 +DA:484,1 +DA:490,3 +DA:493,5 +DA:494,4 +DA:496,4 +DA:497,4 +DA:499,4 +DA:501,2 +DA:503,1 +DA:505,1 +DA:508,1 +DA:509,1 +DA:512,1 +DA:516,3 +DA:518,1 +DA:519,0 +DA:520,0 +DA:522,0 +DA:524,2 +DA:525,2 +DA:528,2 +DA:531,1 +DA:534,1 +DA:535,0 +DA:536,0 +DA:537,0 +DA:541,1 +DA:545,1 +DA:549,0 +DA:557,0 +DA:560,0 +DA:561,0 +DA:564,0 +DA:565,0 +DA:566,0 +DA:568,0 +DA:569,0 +DA:570,0 +DA:572,0 +DA:573,0 +DA:574,0 +DA:576,0 +DA:578,0 +DA:579,0 +DA:581,0 +DA:584,0 +DA:586,0 +DA:593,0 +DA:607,0 +DA:610,0 +DA:613,0 +DA:615,0 +DA:616,0 +DA:617,0 +DA:620,0 +DA:621,0 +DA:622,0 +DA:623,0 +DA:624,0 +DA:625,0 +DA:628,0 +DA:631,0 +DA:632,0 +DA:633,0 +DA:634,0 +DA:635,0 +DA:636,0 +DA:639,0 +DA:642,0 +DA:651,0 +DA:668,0 +DA:677,0 +DA:680,0 +DA:683,0 +DA:686,0 +DA:689,0 +DA:692,0 +DA:693,0 +DA:694,0 +DA:696,0 +DA:702,0 +DA:711,0 +DA:712,0 +DA:715,0 +DA:716,0 +DA:717,0 +DA:720,0 +DA:721,0 +DA:724,0 +DA:733,0 +DA:736,0 +DA:739,0 +DA:742,0 +DA:743,0 +DA:746,0 +DA:750,0 +DA:751,0 +DA:753,0 +DA:754,0 +DA:756,0 +DA:757,0 +DA:759,0 +DA:760,0 +DA:763,0 +DA:766,0 +DA:767,0 +DA:770,0 +DA:774,0 +DA:777,0 +DA:780,0 +DA:781,0 +DA:782,0 +DA:785,0 +DA:786,0 +DA:792,0 +DA:801,0 +DA:804,0 +DA:807,0 +DA:815,0 +DA:825,0 +DA:826,0 +DA:829,0 +DA:830,0 +DA:831,0 +DA:835,0 +DA:838,0 +DA:843,0 +DA:846,0 +DA:849,0 +DA:852,0 +DA:855,0 +DA:857,0 +DA:860,0 +DA:865,0 +DA:868,0 +DA:871,0 +DA:874,0 +DA:877,0 +DA:879,0 +DA:882,0 +DA:885,0 +DA:886,0 +DA:887,0 +DA:888,0 +DA:889,0 +DA:894,0 +DA:895,0 +DA:896,0 +DA:897,0 +DA:901,0 +DA:903,0 +DA:906,0 +DA:912,0 +DA:915,0 +DA:918,0 +DA:921,0 +DA:924,0 +DA:927,0 +DA:929,0 +DA:931,0 +DA:934,0 +DA:937,0 +DA:938,0 +DA:939,0 +DA:940,0 +DA:941,0 +DA:946,0 +DA:947,0 +DA:948,0 +DA:949,0 +DA:950,0 +DA:954,0 +DA:957,0 +DA:958,0 +DA:962,0 +DA:970,0 +DA:973,0 +DA:976,0 +DA:979,0 +DA:980,0 +DA:982,0 +DA:985,0 +DA:988,0 +DA:990,0 +DA:993,0 +DA:996,0 +DA:997,0 +DA:998,0 +DA:999,0 +DA:1004,0 +DA:1006,0 +DA:1008,0 +DA:1009,0 +DA:1010,0 +DA:1011,0 +DA:1016,0 +DA:1019,0 +DA:1021,0 +DA:1024,0 +DA:1026,0 +DA:1029,0 +DA:1032,0 +DA:1033,0 +DA:1034,0 +DA:1035,0 +DA:1041,0 +DA:1044,0 +DA:1045,0 +DA:1046,0 +DA:1047,0 +DA:1053,0 +DA:1054,0 +DA:1055,0 +DA:1056,0 +DA:1060,0 +DA:1062,0 +DA:1069,0 +DA:1082,0 +DA:1085,0 +DA:1088,0 +DA:1091,0 +DA:1093,0 +DA:1094,0 +DA:1095,0 +DA:1098,0 +DA:1099,0 +DA:1100,0 +DA:1101,0 +DA:1102,0 +DA:1105,0 +DA:1108,0 +DA:1109,0 +DA:1110,0 +DA:1113,0 +DA:1116,0 +DA:1124,0 +DA:1126,0 +DA:1127,0 +DA:1130,0 +DA:1138,0 +DA:1144,0 +DA:1147,0 +DA:1150,0 +DA:1162,0 +DA:1168,0 +DA:1169,0 +DA:1172,0 +DA:1173,0 +DA:1174,0 +DA:1178,0 +DA:1179,0 +DA:1183,0 +DA:1189,0 +DA:1192,0 +DA:1193,0 +DA:1197,0 +DA:1198,0 +DA:1202,0 +DA:1205,0 +DA:1206,0 +DA:1209,0 +DA:1211,0 +DA:1212,0 +DA:1215,0 +DA:1216,0 +DA:1218,0 +DA:1219,0 +DA:1223,0 +DA:1225,0 +DA:1228,0 +DA:1232,0 +DA:1235,0 +DA:1238,0 +DA:1241,0 +DA:1242,0 +DA:1243,0 +DA:1247,0 +DA:1250,0 +DA:1252,0 +DA:1257,0 +DA:1266,0 +DA:1269,0 +DA:1272,0 +DA:1275,0 +DA:1278,0 +DA:1279,0 +DA:1282,0 +DA:1285,0 +DA:1288,0 +DA:1291,0 +DA:1292,0 +DA:1293,0 +DA:1294,0 +DA:1295,0 +DA:1296,0 +DA:1297,0 +DA:1298,0 +DA:1301,0 +DA:1306,0 +DA:1311,0 +DA:1314,0 +DA:1317,0 +DA:1319,0 +DA:1320,0 +DA:1322,0 +DA:1324,0 +DA:1325,0 +DA:1326,0 +DA:1327,0 +DA:1331,0 +DA:1335,0 +DA:1337,0 +DA:1338,0 +DA:1339,0 +DA:1340,0 +DA:1346,0 +DA:1353,5 +DA:1354,5 +DA:1356,5 +DA:1360,8 +DA:1362,16 +DA:1367,5 +DA:1368,5 +DA:1369,0 +DA:1378,0 +DA:1381,0 +DA:1384,0 +DA:1387,0 +DA:1388,0 +DA:1389,0 +DA:1390,0 +DA:1393,0 +DA:1396,0 +DA:1400,0 +DA:1403,0 +DA:1404,0 +DA:1407,0 +DA:1413,0 +DA:1414,0 +DA:1415,0 +DA:1417,0 +DA:1422,0 +DA:1423,0 +DA:1424,0 +DA:1425,0 +DA:1427,0 +DA:1429,0 +DA:1430,0 +DA:1431,0 +DA:1434,0 +DA:1437,0 +DA:1439,0 +DA:1440,0 +DA:1441,0 +DA:1442,0 +DA:1444,0 +DA:1446,0 +DA:1447,0 +DA:1448,0 +DA:1451,0 +DA:1454,0 +DA:1456,0 +DA:1457,0 +DA:1458,0 +DA:1459,0 +DA:1461,0 +DA:1463,0 +DA:1464,0 +DA:1465,0 +DA:1468,0 +DA:1471,0 +DA:1473,0 +DA:1474,0 +DA:1475,0 +DA:1476,0 +DA:1478,0 +DA:1480,0 +DA:1481,0 +DA:1482,0 +DA:1485,0 +DA:1490,0 +DA:1493,0 +DA:1499,0 +DA:1500,0 +DA:1501,0 +DA:1503,0 +DA:1507,0 +DA:1508,0 +DA:1509,0 +DA:1510,0 +DA:1512,0 +DA:1514,0 +DA:1515,0 +DA:1518,0 +DA:1521,0 +DA:1523,0 +DA:1524,0 +DA:1525,0 +DA:1526,0 +DA:1528,0 +DA:1530,0 +DA:1531,0 +DA:1534,0 +DA:1537,0 +DA:1539,0 +DA:1540,0 +DA:1541,0 +DA:1542,0 +DA:1544,0 +DA:1546,0 +DA:1547,0 +DA:1550,0 +DA:1553,0 +DA:1555,0 +DA:1556,0 +DA:1557,0 +DA:1558,0 +DA:1560,0 +DA:1562,0 +DA:1563,0 +DA:1566,0 +DA:1570,0 +DA:1579,0 +DA:1584,0 +DA:1587,0 +DA:1588,0 +DA:1592,0 +DA:1593,0 +DA:1596,0 +DA:1599,0 +DA:1603,0 +DA:1606,0 +DA:1608,0 +DA:1612,0 +DA:1616,0 +DA:1619,0 +DA:1620,0 +DA:1623,0 +DA:1624,0 +DA:1625,0 +DA:1627,0 +DA:1628,0 +DA:1630,0 +DA:1631,0 +DA:1635,0 +DA:1637,0 +DA:1638,0 +DA:1639,0 +DA:1641,0 +DA:1642,0 +DA:1649,0 +DA:1653,0 +DA:1657,0 +DA:1658,0 +DA:1659,0 +DA:1661,0 +DA:1662,0 +DA:1668,3 +DA:1670,3 +DA:1671,3 +DA:1672,3 +DA:1673,3 +DA:1678,0 +DA:1680,0 +DA:1681,0 +DA:1682,0 +DA:1683,0 +DA:1687,5 +DA:1692,11 +DA:1695,8 +DA:1700,5 +DA:1702,5 +DA:1707,10 +DA:1711,5 +DA:1712,5 +DA:1713,5 +DA:1714,5 +DA:1717,5 +DA:1720,1 +DA:1722,3 +DA:1725,4 +DA:1729,3 +DA:1730,3 +DA:1731,3 +DA:1732,3 +DA:1735,3 +DA:1739,0 +DA:1740,0 +DA:1741,0 +DA:1742,0 +DA:1745,0 +DA:1750,0 +DA:1753,0 +DA:1755,0 +DA:1757,0 +DA:1759,0 +DA:1762,0 +DA:1766,0 +DA:1767,0 +DA:1768,0 +DA:1769,0 +DA:1772,0 +LF:670 +LH:105 +end_of_record +TN: +SF:/home/erick/hashed/hashed-substrate/pallets/fund-admin/src/lib.rs +FN:23,pallet_constants_metadata +FN:98,pallet_prefix +FN:106,users_info +FN:116,pallet_prefix +FN:126,users_by_project +FN:136,pallet_prefix +FN:146,pallet_prefix +FN:156,expenditures_by_project +FN:166,pallet_prefix +FN:176,drawdowns_by_project +FN:186,pallet_prefix +FN:196,transactions_by_drawdown +FN:413,{closure#0} +FN:415,initial_setup +FN:436,{closure#0} +FN:438,sudo_add_administrator +FN:463,{closure#0} +FN:465,sudo_remove_administrator +FN:505,{closure#0} +FN:507,users +FN:538,{closure#0} +FN:540,users_edit_user +FN:592,projects_create_project +FN:644,{closure#0} +FN:646,projects_edit_project +FN:676,{closure#0} +FN:678,projects_delete_project +FN:721,{closure#0} +FN:723,projects_assign_user +FN:767,{closure#0} +FN:769,expenditures +FN:823,{closure#0} +FN:825,submit_drawdown +FN:905,{closure#0} +FN:907,approve_drawdown +FN:997,{closure#0} +FN:999,reject_drawdown +FN:1031,{closure#0} +FN:1033,up_bulkupload +FN:1066,{closure#0} +FN:1068,inflation_rate +FN:1087,{closure#0} +FN:1089,kill_storage +FNF:43 +FNDA:3,pallet_constants_metadata +FNDA:16,pallet_prefix +FNDA:20,users_info +FNDA:0,pallet_prefix +FNDA:0,users_by_project +FNDA:2,pallet_prefix +FNDA:0,pallet_prefix +FNDA:0,expenditures_by_project +FNDA:0,pallet_prefix +FNDA:0,drawdowns_by_project +FNDA:0,pallet_prefix +FNDA:0,transactions_by_drawdown +FNDA:5,{closure#0} +FNDA:1,initial_setup +FNDA:30,{closure#0} +FNDA:6,sudo_add_administrator +FNDA:8,{closure#0} +FNDA:1,sudo_remove_administrator +FNDA:10,{closure#0} +FNDA:2,users +FNDA:0,{closure#0} +FNDA:0,users_edit_user +FNDA:0,projects_create_project +FNDA:0,{closure#0} +FNDA:0,projects_edit_project +FNDA:0,{closure#0} +FNDA:0,projects_delete_project +FNDA:0,{closure#0} +FNDA:0,projects_assign_user +FNDA:0,{closure#0} +FNDA:0,expenditures +FNDA:0,{closure#0} +FNDA:0,submit_drawdown +FNDA:0,{closure#0} +FNDA:0,approve_drawdown +FNDA:0,{closure#0} +FNDA:0,reject_drawdown +FNDA:0,{closure#0} +FNDA:0,up_bulkupload +FNDA:0,{closure#0} +FNDA:0,inflation_rate +FNDA:0,{closure#0} +FNDA:0,kill_storage +DA:23,3 +DA:98,16 +DA:106,20 +DA:116,0 +DA:126,0 +DA:136,2 +DA:146,0 +DA:156,0 +DA:166,0 +DA:176,0 +DA:186,0 +DA:196,0 +DA:413,5 +DA:414,0 +DA:415,1 +DA:418,1 +DA:419,2 +DA:420,0 +DA:436,30 +DA:437,0 +DA:438,6 +DA:443,12 +DA:444,6 +DA:445,5 +DA:463,8 +DA:464,0 +DA:465,1 +DA:469,2 +DA:470,2 +DA:471,3 +DA:505,10 +DA:506,0 +DA:507,2 +DA:516,6 +DA:518,3 +DA:538,0 +DA:539,0 +DA:540,0 +DA:547,0 +DA:549,0 +DA:591,0 +DA:592,0 +DA:615,0 +DA:617,0 +DA:644,0 +DA:645,0 +DA:646,0 +DA:656,0 +DA:658,0 +DA:676,0 +DA:677,0 +DA:678,0 +DA:682,0 +DA:684,0 +DA:721,0 +DA:722,0 +DA:723,0 +DA:732,0 +DA:734,0 +DA:767,0 +DA:768,0 +DA:769,0 +DA:782,0 +DA:784,0 +DA:823,0 +DA:824,0 +DA:825,0 +DA:838,0 +DA:840,0 +DA:842,0 +DA:843,0 +DA:846,0 +DA:847,0 +DA:848,0 +DA:851,0 +DA:853,0 +DA:856,0 +DA:857,0 +DA:858,0 +DA:863,0 +DA:905,0 +DA:906,0 +DA:907,0 +DA:920,0 +DA:923,0 +DA:924,0 +DA:926,0 +DA:927,0 +DA:930,0 +DA:931,0 +DA:932,0 +DA:936,0 +DA:939,0 +DA:941,0 +DA:944,0 +DA:945,0 +DA:946,0 +DA:950,0 +DA:954,0 +DA:959,0 +DA:961,0 +DA:997,0 +DA:998,0 +DA:999,0 +DA:1006,0 +DA:1008,0 +DA:1031,0 +DA:1032,0 +DA:1033,0 +DA:1041,0 +DA:1043,0 +DA:1066,0 +DA:1067,0 +DA:1068,0 +DA:1072,0 +DA:1074,0 +DA:1087,0 +DA:1088,0 +DA:1089,0 +DA:1092,0 +DA:1093,0 +DA:1094,0 +DA:1095,0 +DA:1096,0 +DA:1097,0 +DA:1098,0 +DA:1099,0 +DA:1100,0 +DA:1101,0 +DA:1102,0 +DA:1103,0 +DA:1105,0 +DA:1106,0 +LF:133 +LH:22 +end_of_record +TN: +SF:/home/erick/hashed/hashed-substrate/pallets/fund-admin/src/types.rs +FN:39,default +FN:86,default +FN:125,default +FN:139,default +FN:169,default +FN:188,to_vec +FN:200,id +FN:204,enum_to_vec +FN:231,to_vec +FN:248,id +FN:252,administrator_permissions +FN:271,builder_permissions +FN:280,investor_permissions +FN:285,issuer_permissions +FN:290,regional_center_permissions +FNF:15 +FNDA:0,default +FNDA:0,default +FNDA:0,default +FNDA:0,default +FNDA:0,default +FNDA:8,to_vec +FNDA:5,id +FNDA:0,enum_to_vec +FNDA:8,to_vec +FNDA:3,id +FNDA:8,administrator_permissions +FNDA:8,builder_permissions +FNDA:8,investor_permissions +FNDA:8,issuer_permissions +FNDA:8,regional_center_permissions +DA:39,0 +DA:40,0 +DA:86,0 +DA:87,0 +DA:125,0 +DA:126,0 +DA:139,0 +DA:140,0 +DA:169,0 +DA:170,0 +DA:188,8 +DA:189,8 +DA:192,16 +DA:193,16 +DA:194,16 +DA:195,16 +DA:196,8 +DA:200,5 +DA:201,5 +DA:204,0 +DA:206,0 +DA:231,8 +DA:232,8 +DA:233,16 +DA:234,16 +DA:235,16 +DA:236,16 +DA:237,16 +DA:238,16 +DA:239,16 +DA:240,16 +DA:241,16 +DA:242,16 +DA:243,16 +DA:244,8 +DA:248,3 +DA:249,3 +DA:252,8 +DA:254,8 +DA:255,8 +DA:256,8 +DA:257,8 +DA:258,8 +DA:259,8 +DA:260,8 +DA:261,8 +DA:262,8 +DA:263,8 +DA:264,8 +DA:265,8 +DA:266,8 +DA:267,0 +DA:271,8 +DA:274,8 +DA:275,8 +DA:276,8 +DA:277,0 +DA:280,8 +DA:282,8 +DA:285,8 +DA:287,8 +DA:290,8 +DA:292,8 +LF:63 +LH:49 +end_of_record +TN: +SF:/home/erick/hashed/hashed-substrate/pallets/gated-marketplace/src/functions.rs +FN:473,set_up_application +FNF:1 +FNDA:3,set_up_application +DA:16,8 +DA:17,8 +DA:18,24 +DA:19,16 +DA:20,16 +DA:21,8 +DA:24,8 +DA:25,8 +DA:27,8 +DA:29,8 +DA:31,8 +DA:32,8 +DA:35,8 +DA:37,8 +DA:39,9 +DA:41,16 +DA:42,16 +DA:43,16 +DA:44,8 +DA:45,8 +DA:46,8 +DA:49,3 +DA:51,7 +DA:53,5 +DA:55,4 +DA:57,1 +DA:59,5 +DA:61,5 +DA:62,2 +DA:65,5 +DA:66,2 +DA:67,2 +DA:69,2 +DA:70,2 +DA:73,0 +DA:74,0 +DA:76,0 +DA:79,0 +DA:81,0 +DA:82,0 +DA:85,0 +DA:87,0 +DA:90,0 +DA:92,0 +DA:94,0 +DA:97,1 +DA:99,3 +DA:100,1 +DA:101,1 +DA:102,1 +DA:104,1 +DA:105,1 +DA:106,1 +DA:107,8 +DA:108,3 +DA:109,1 +DA:111,1 +DA:112,3 +DA:115,3 +DA:117,1 +DA:118,1 +DA:122,5 +DA:126,10 +DA:130,5 +DA:131,0 +DA:132,3 +DA:133,0 +DA:136,0 +DA:137,5 +DA:141,3 +DA:142,4 +DA:146,1 +DA:149,3 +DA:154,2 +DA:155,0 +DA:156,2 +DA:157,2 +DA:159,0 +DA:161,3 +DA:164,2 +DA:166,2 +DA:168,0 +DA:170,2 +DA:175,1 +DA:176,1 +DA:180,1 +DA:182,4 +DA:185,3 +DA:187,2 +DA:188,1 +DA:189,1 +DA:193,2 +DA:195,3 +DA:198,3 +DA:200,4 +DA:201,1 +DA:202,1 +DA:205,2 +DA:208,3 +DA:209,3 +DA:211,3 +DA:212,4 +DA:214,2 +DA:218,4 +DA:221,3 +DA:224,3 +DA:231,1 +DA:241,5 +DA:244,6 +DA:245,1 +DA:246,0 +DA:249,6 +DA:250,2 +DA:251,0 +DA:255,3 +DA:256,1 +DA:259,4 +DA:260,2 +DA:261,0 +DA:263,2 +DA:264,1 +DA:267,1 +DA:269,4 +DA:272,2 +DA:273,2 +DA:278,3 +DA:279,3 +DA:281,0 +DA:285,2 +DA:286,2 +DA:289,3 +DA:292,2 +DA:295,2 +DA:302,1 +DA:313,4 +DA:314,1 +DA:315,0 +DA:318,4 +DA:319,1 +DA:320,0 +DA:324,2 +DA:325,1 +DA:328,3 +DA:329,1 +DA:330,0 +DA:332,1 +DA:333,1 +DA:336,3 +DA:339,5 +DA:341,3 +DA:344,3 +DA:347,4 +DA:350,2 +DA:353,2 +DA:357,2 +DA:359,2 +DA:361,2 +DA:364,4 +DA:365,1 +DA:369,2 +DA:372,2 +DA:374,1 +DA:375,1 +DA:378,1 +DA:381,4 +DA:383,2 +DA:386,2 +DA:389,3 +DA:392,3 +DA:395,2 +DA:398,2 +DA:402,2 +DA:404,2 +DA:406,2 +DA:408,4 +DA:409,1 +DA:413,2 +DA:416,2 +DA:418,1 +DA:419,1 +DA:423,1 +DA:425,3 +DA:428,2 +DA:429,2 +DA:432,3 +DA:435,3 +DA:438,2 +DA:441,1 +DA:444,4 +DA:445,3 +DA:446,1 +DA:447,1 +DA:448,0 +DA:451,5 +DA:452,3 +DA:453,1 +DA:454,1 +DA:455,0 +DA:458,5 +DA:459,3 +DA:460,1 +DA:461,1 +DA:462,0 +DA:464,1 +DA:466,1 +DA:473,3 +DA:477,12 +DA:478,3 +DA:479,6 +DA:481,3 +DA:482,3 +DA:483,2 +DA:484,8 +DA:485,2 +DA:488,2 +DA:490,3 +DA:492,3 +DA:495,8 +DA:497,33 +DA:498,9 +DA:500,8 +DA:503,2 +DA:504,7 +DA:505,2 +DA:506,3 +DA:508,2 +DA:511,1 +DA:512,4 +DA:513,1 +DA:514,3 +DA:516,1 +DA:519,1 +DA:520,4 +DA:521,4 +DA:522,1 +DA:523,2 +DA:525,1 +DA:530,1 +DA:532,5 +DA:533,2 +DA:534,1 +DA:539,1 +DA:540,2 +DA:541,4 +DA:542,2 +DA:543,4 +DA:544,2 +DA:545,2 +DA:546,1 +DA:547,1 +DA:548,1 +DA:550,1 +DA:552,2 +DA:554,2 +DA:557,2 +DA:559,2 +DA:560,1 +DA:562,2 +DA:563,1 +DA:566,1 +DA:569,5 +DA:571,5 +DA:572,5 +DA:573,5 +DA:574,5 +DA:581,1 +DA:582,3 +DA:583,1 +DA:600,1 +DA:607,3 +DA:608,2 +DA:613,1 +DA:614,3 +DA:615,2 +DA:616,1 +DA:617,1 +DA:625,1 +DA:631,1 +DA:634,2 +DA:635,2 +DA:636,1 +DA:640,1 +DA:641,1 +DA:645,4 +DA:646,1 +DA:650,1 +DA:653,3 +DA:654,1 +DA:658,1 +DA:660,1 +DA:662,2 +DA:670,3 +DA:671,8 +DA:672,3 +DA:674,4 +DA:675,0 +DA:677,2 +DA:678,2 +DA:679,2 +DA:680,0 +DA:682,1 +DA:683,1 +DA:684,1 +DA:687,1 +DA:691,2 +DA:692,1 +DA:693,2 +DA:695,1 +DA:698,0 +DA:700,0 +DA:701,0 +DA:703,0 +DA:708,1 +DA:709,1 +DA:711,4 +DA:712,1 +DA:719,1 +DA:720,2 +DA:722,2 +DA:723,4 +DA:724,1 +DA:725,1 +DA:726,2 +DA:727,1 +DA:731,1 +DA:734,2 +DA:735,1 +DA:736,3 +DA:737,1 +DA:740,1 +DA:741,2 +DA:744,3 +DA:745,2 +DA:746,1 +DA:748,3 +DA:749,1 +DA:754,1 +DA:757,1 +DA:759,3 +DA:762,1 +DA:764,2 +DA:765,1 +DA:767,2 +DA:768,1 +DA:772,0 +DA:776,0 +DA:778,0 +DA:780,0 +DA:782,0 +DA:784,0 +DA:785,0 +DA:787,0 +DA:788,0 +DA:792,0 +DA:793,0 +DA:795,0 +DA:798,1 +DA:799,1 +DA:800,1 +DA:806,8 +DA:808,16 +LF:361 +LH:316 +end_of_record +TN: +SF:/home/erick/hashed/hashed-substrate/pallets/gated-marketplace/src/lib.rs +FN:77,marketplaces +FN:87,applications +FN:97,applications_by_account +FN:110,applicants_by_marketplace +FN:122,custodians +FN:134,offers_by_item +FN:146,offers_by_account +FN:156,offers_by_marketplace +FN:166,offers_info +FN:293,{closure#0} +FN:309,{closure#0} +FN:334,{closure#0} +FN:336,apply +FN:372,{closure#0} +FN:374,reapply +FN:417,{closure#0} +FN:435,{closure#0} +FN:457,{closure#0} +FN:479,{closure#0} +FN:502,{closure#0} +FN:523,{closure#0} +FN:547,{closure#0} +FN:569,{closure#0} +FN:591,{closure#0} +FN:616,{closure#0} +FN:641,{closure#0} +FN:662,{closure#0} +FN:664,kill_storage +FNF:28 +FNDA:18,marketplaces +FNDA:6,applications +FNDA:6,applications_by_account +FNDA:6,applicants_by_marketplace +FNDA:4,custodians +FNDA:6,offers_by_item +FNDA:6,offers_by_account +FNDA:5,offers_by_marketplace +FNDA:6,offers_info +FNDA:0,{closure#0} +FNDA:40,{closure#0} +FNDA:13,{closure#0} +FNDA:3,apply +FNDA:11,{closure#0} +FNDA:1,reapply +FNDA:5,{closure#0} +FNDA:0,{closure#0} +FNDA:28,{closure#0} +FNDA:6,{closure#0} +FNDA:6,{closure#0} +FNDA:7,{closure#0} +FNDA:10,{closure#0} +FNDA:10,{closure#0} +FNDA:6,{closure#0} +FNDA:8,{closure#0} +FNDA:6,{closure#0} +FNDA:0,{closure#0} +FNDA:0,kill_storage +DA:16,3 +DA:77,18 +DA:87,6 +DA:97,6 +DA:110,6 +DA:122,4 +DA:134,6 +DA:146,6 +DA:156,5 +DA:166,6 +DA:293,0 +DA:294,0 +DA:295,0 +DA:296,0 +DA:297,0 +DA:298,0 +DA:309,40 +DA:310,0 +DA:311,8 +DA:312,16 +DA:316,8 +DA:334,13 +DA:335,0 +DA:336,3 +DA:343,6 +DA:345,3 +DA:346,0 +DA:350,3 +DA:352,3 +DA:355,3 +DA:372,11 +DA:373,0 +DA:374,1 +DA:381,4 +DA:383,3 +DA:384,0 +DA:387,3 +DA:389,3 +DA:392,9 +DA:394,1 +DA:417,5 +DA:418,0 +DA:419,1 +DA:420,2 +DA:422,1 +DA:435,0 +DA:436,0 +DA:437,0 +DA:438,0 +DA:440,0 +DA:457,28 +DA:458,0 +DA:459,5 +DA:460,10 +DA:462,5 +DA:479,6 +DA:480,0 +DA:481,1 +DA:482,3 +DA:486,1 +DA:502,6 +DA:503,0 +DA:504,1 +DA:505,2 +DA:507,1 +DA:523,7 +DA:524,0 +DA:525,1 +DA:526,1 +DA:528,2 +DA:547,10 +DA:548,0 +DA:549,3 +DA:550,2 +DA:552,1 +DA:569,10 +DA:570,0 +DA:571,1 +DA:572,3 +DA:574,1 +DA:591,6 +DA:592,0 +DA:593,1 +DA:596,1 +DA:598,1 +DA:616,8 +DA:617,0 +DA:618,2 +DA:619,1 +DA:621,2 +DA:641,6 +DA:642,0 +DA:643,1 +DA:644,1 +DA:646,1 +DA:662,0 +DA:663,0 +DA:664,0 +DA:667,0 +DA:668,0 +DA:669,0 +DA:670,0 +DA:671,0 +DA:672,0 +DA:674,0 +LF:105 +LH:69 +end_of_record +TN: +SF:/home/erick/hashed/hashed-substrate/pallets/gated-marketplace/src/types.rs +FN:40,default +FN:46,to_vec +FN:56,id +FN:60,enum_to_vec +FN:83,to_vec +FN:99,id +FN:103,admin_permissions +FN:114,participant_permissions +FN:145,default +FN:158,eq +FN:172,default +FNF:11 +FNDA:0,default +FNDA:8,to_vec +FNDA:8,id +FNDA:0,enum_to_vec +FNDA:8,to_vec +FNDA:5,id +FNDA:8,admin_permissions +FNDA:8,participant_permissions +FNDA:3,default +FNDA:0,eq +FNDA:0,default +DA:40,0 +DA:41,0 +DA:46,8 +DA:47,8 +DA:48,16 +DA:49,16 +DA:50,16 +DA:51,16 +DA:52,8 +DA:56,8 +DA:57,8 +DA:60,0 +DA:62,0 +DA:83,8 +DA:84,8 +DA:85,16 +DA:86,16 +DA:87,16 +DA:88,16 +DA:89,16 +DA:90,16 +DA:91,16 +DA:92,16 +DA:93,16 +DA:94,16 +DA:95,8 +DA:99,5 +DA:100,5 +DA:103,8 +DA:105,16 +DA:106,8 +DA:107,8 +DA:108,8 +DA:109,0 +DA:110,8 +DA:114,8 +DA:117,8 +DA:118,8 +DA:119,8 +DA:120,8 +DA:121,8 +DA:122,8 +DA:123,0 +DA:145,3 +DA:146,3 +DA:158,0 +DA:159,0 +DA:172,0 +DA:173,0 +LF:49 +LH:39 +end_of_record +TN: +SF:/home/erick/hashed/hashed-substrate/pallets/rbac/src/functions.rs +FN:99,create_and_set_roles +FN:229,create_and_set_permissions +FNF:2 +FNDA:18,create_and_set_roles +FNDA:17,create_and_set_permissions +DA:18,18 +DA:19,18 +DA:20,72 +DA:21,20 +DA:22,39 +DA:23,18 +DA:34,2 +DA:35,2 +DA:37,11 +DA:38,4 +DA:39,9 +DA:40,2 +DA:41,2 +DA:42,2 +DA:44,3 +DA:46,5 +DA:47,5 +DA:49,4 +DA:51,7 +DA:52,2 +DA:55,2 +DA:57,3 +DA:68,1 +DA:69,1 +DA:70,1 +DA:72,1 +DA:73,1 +DA:74,1 +DA:77,1 +DA:79,2 +DA:81,2 +DA:82,2 +DA:83,1 +DA:84,0 +DA:87,1 +DA:88,1 +DA:89,1 +DA:99,18 +DA:101,18 +DA:102,54 +DA:103,36 +DA:105,18 +DA:106,34 +DA:107,34 +DA:108,17 +DA:117,20 +DA:118,20 +DA:120,21 +DA:121,42 +DA:122,66 +DA:123,22 +DA:133,5 +DA:134,11 +DA:135,22 +DA:136,6 +DA:137,12 +DA:139,5 +DA:148,17 +DA:149,17 +DA:151,18 +DA:152,17 +DA:153,35 +DA:154,17 +DA:156,53 +DA:157,17 +DA:158,3 +DA:160,17 +DA:171,16 +DA:172,32 +DA:173,16 +DA:174,17 +DA:175,30 +DA:176,64 +DA:177,17 +DA:178,34 +DA:181,62 +DA:182,30 +DA:183,32 +DA:185,15 +DA:197,5 +DA:198,5 +DA:199,22 +DA:200,6 +DA:201,26 +DA:202,5 +DA:203,5 +DA:204,5 +DA:206,5 +DA:208,25 +DA:209,5 +DA:210,20 +DA:211,10 +DA:212,5 +DA:213,4 +DA:215,3 +DA:217,5 +DA:229,17 +DA:231,35 +DA:232,34 +DA:233,39 +DA:234,18 +DA:235,54 +DA:236,54 +DA:238,19 +DA:239,36 +DA:240,18 +DA:249,18 +DA:250,36 +DA:251,18 +DA:254,19 +DA:256,36 +DA:257,18 +DA:259,18 +DA:269,1 +DA:270,2 +DA:271,1 +DA:272,1 +DA:274,3 +DA:276,6 +DA:277,2 +DA:278,4 +DA:280,1 +DA:291,18 +DA:293,37 +DA:294,36 +DA:295,18 +DA:296,19 +DA:298,18 +DA:299,37 +DA:300,18 +DA:302,56 +DA:303,18 +DA:304,3 +DA:305,18 +DA:318,9 +DA:319,18 +DA:320,9 +DA:321,9 +DA:322,18 +DA:324,9 +DA:326,34 +DA:327,10 +DA:328,8 +DA:339,2 +DA:340,2 +DA:341,4 +DA:342,2 +DA:343,4 +DA:344,8 +DA:345,2 +DA:347,2 +DA:356,16 +DA:357,49 +DA:358,15 +DA:367,9 +DA:368,19 +DA:369,9 +DA:378,19 +DA:380,112 +DA:381,37 +DA:382,18 +DA:392,1 +DA:393,2 +DA:394,3 +DA:395,1 +DA:405,2 +DA:406,6 +DA:409,18 +DA:410,18 +DA:424,73 +DA:425,77 +DA:428,34 +DA:429,34 +DA:430,68 +DA:431,35 +DA:432,35 +LF:176 +LH:175 +end_of_record +TN: +SF:/home/erick/hashed/hashed-substrate/pallets/rbac/src/lib.rs +FN:51,pallet_prefix +FN:61,pallet_prefix +FN:71,pallet_prefix +FN:81,permissions +FN:93,pallet_prefix +FN:105,roles_by_user +FN:118,users_by_scope +FNF:7 +FNDA:40,pallet_prefix +FNDA:52,pallet_prefix +FNDA:36,pallet_prefix +FNDA:39,permissions +FNDA:40,pallet_prefix +FNDA:37,roles_by_user +FNDA:36,users_by_scope +DA:21,9 +DA:51,40 +DA:61,52 +DA:71,36 +DA:81,39 +DA:93,40 +DA:105,37 +DA:118,36 +LF:8 +LH:8 +end_of_record +TN: +SF:/home/erick/hashed/hashed-substrate/pallets/rbac/src/types.rs +FN:19,to_id_enum +FN:26,to_id +FNF:2 +FNDA:17,to_id_enum +FNDA:18,to_id +DA:19,17 +DA:20,17 +DA:21,18 +DA:22,17 +DA:26,18 +DA:27,18 +DA:28,17 +DA:29,18 +LF:8 +LH:8 +end_of_record +TN: +SF:/home/erick/hashed/hashed-substrate/pallets/template/src/lib.rs +FN:17,storage_metadata +FN:36,pallet_prefix +FN:43,pallet_prefix +FN:76,do_something +FN:111,insert_my_bytes +FNF:5 +FNDA:4,storage_metadata +FNDA:6,pallet_prefix +FNDA:0,pallet_prefix +FNDA:1,do_something +FNDA:0,insert_my_bytes +DA:17,4 +DA:36,6 +DA:43,0 +DA:75,0 +DA:76,1 +DA:80,1 +DA:83,1 +DA:86,1 +DA:88,1 +DA:92,0 +DA:93,1 +DA:94,1 +DA:97,2 +DA:99,2 +DA:100,0 +DA:102,0 +DA:104,0 +DA:105,0 +DA:110,0 +DA:111,0 +DA:115,0 +DA:118,0 +DA:119,0 +DA:121,0 +LF:24 +LH:11 +end_of_record +TN: +SF:/home/erick/hashed/hashed-substrate/parachain-runtime/src/constants.rs +FN:32,deposit +FNF:1 +FNDA:0,deposit +DA:32,0 +DA:33,0 +LF:2 +LH:0 +end_of_record +TN: +SF:/home/erick/hashed/hashed-substrate/parachain-runtime/src/lib.rs +FN:145,polynomial +FN:232,native_version +FN:247,{closure#0} +FN:250,{closure#1} +FN:253,{closure#2} +FN:453,default +FN:458,filter +FN:485,is_superset +FN:1032,{closure#0} +FN:1114,dispatch +FN:1116,slot_duration +FN:1120,authorities +FN:1126,version +FN:1130,execute_block +FN:1134,initialize_block +FN:1140,metadata +FN:1146,apply_extrinsic +FN:1150,finalize_block +FN:1154,inherent_extrinsics +FN:1158,check_inherents +FN:1167,validate_transaction +FN:1177,offchain_worker +FN:1183,generate_session_keys +FN:1187,decode_session_keys +FN:1195,account_nonce +FN:1201,query_info +FN:1207,query_fee_details +FN:1216,collect_collation_info +FN:1289,check_inherents +FNF:29 +FNDA:0,polynomial +FNDA:0,native_version +FNDA:3,{closure#0} +FNDA:3,{closure#1} +FNDA:3,{closure#2} +FNDA:0,default +FNDA:0,filter +FNDA:0,is_superset +FNDA:6,{closure#0} +FNDA:0,dispatch +FNDA:0,slot_duration +FNDA:0,authorities +FNDA:0,version +FNDA:0,execute_block +FNDA:0,initialize_block +FNDA:0,metadata +FNDA:0,apply_extrinsic +FNDA:0,finalize_block +FNDA:0,inherent_extrinsics +FNDA:0,check_inherents +FNDA:0,validate_transaction +FNDA:0,offchain_worker +FNDA:0,generate_session_keys +FNDA:0,decode_session_keys +FNDA:0,account_nonce +FNDA:0,query_info +FNDA:0,query_fee_details +FNDA:0,collect_collation_info +FNDA:0,check_inherents +DA:145,0 +DA:148,0 +DA:149,0 +DA:150,0 +DA:153,0 +DA:154,0 +DA:176,0 +DA:232,0 +DA:233,0 +DA:237,0 +DA:244,0 +DA:245,5 +DA:246,1 +DA:247,3 +DA:248,1 +DA:250,3 +DA:251,1 +DA:253,3 +DA:254,1 +DA:257,1 +DA:258,1 +DA:403,0 +DA:405,0 +DA:425,0 +DA:427,0 +DA:428,0 +DA:429,0 +DA:453,0 +DA:454,0 +DA:458,0 +DA:459,0 +DA:460,0 +DA:461,0 +DA:462,0 +DA:469,0 +DA:470,0 +DA:479,0 +DA:480,0 +DA:485,0 +DA:486,0 +DA:487,0 +DA:488,0 +DA:489,0 +DA:490,0 +DA:491,0 +DA:587,0 +DA:624,0 +DA:628,0 +DA:629,0 +DA:631,0 +DA:661,0 +DA:664,0 +DA:798,0 +DA:799,0 +DA:862,0 +DA:867,0 +DA:913,0 +DA:914,0 +DA:915,0 +DA:916,0 +DA:917,0 +DA:918,0 +DA:919,0 +DA:920,0 +DA:921,0 +DA:922,0 +DA:923,0 +DA:924,0 +DA:927,0 +DA:928,0 +DA:929,0 +DA:932,0 +DA:933,0 +DA:934,0 +DA:935,0 +DA:1032,6 +DA:1040,0 +DA:1060,0 +DA:1061,0 +DA:1073,0 +DA:1114,0 +DA:1116,0 +DA:1117,0 +DA:1120,0 +DA:1121,0 +DA:1126,0 +DA:1127,0 +DA:1130,0 +DA:1131,0 +DA:1134,0 +DA:1135,0 +DA:1140,0 +DA:1141,0 +DA:1146,0 +DA:1147,0 +DA:1150,0 +DA:1151,0 +DA:1154,0 +DA:1155,0 +DA:1158,0 +DA:1159,0 +DA:1160,0 +DA:1162,0 +DA:1167,0 +DA:1168,0 +DA:1169,0 +DA:1170,0 +DA:1172,0 +DA:1177,0 +DA:1178,0 +DA:1183,0 +DA:1184,0 +DA:1187,0 +DA:1188,0 +DA:1190,0 +DA:1195,0 +DA:1196,0 +DA:1201,0 +DA:1202,0 +DA:1203,0 +DA:1205,0 +DA:1207,0 +DA:1208,0 +DA:1209,0 +DA:1211,0 +DA:1216,0 +DA:1217,0 +DA:1289,0 +DA:1293,0 +DA:1300,0 +DA:1305,0 +LF:131 +LH:11 +end_of_record +TN: +SF:/home/erick/hashed/hashed-substrate/parachain-runtime/src/weights/paritydb_weights.rs +FNF:0 +DA:27,0 +LF:1 +LH:0 +end_of_record +TN: +SF:/home/erick/hashed/hashed-substrate/parachain-runtime/src/weights/rocksdb_weights.rs +FNF:0 +DA:27,0 +LF:1 +LH:0 +end_of_record +TN: +SF:/home/erick/hashed/hashed-substrate/parachain-runtime/src/xcm_config.rs +FN:103,should_execute, xcm_builder::barriers::AllowUnpaidExecutionFrom), hashed_parachain_runtime::Call> +FN:117,should_execute +FN:123,{closure#0} +FNF:3 +FNDA:0,should_execute, xcm_builder::barriers::AllowUnpaidExecutionFrom), hashed_parachain_runtime::Call> +FNDA:0,should_execute +FNDA:0,{closure#0} +DA:24,0 +DA:25,0 +DA:26,0 +DA:27,0 +DA:103,0 +DA:109,0 +DA:110,0 +DA:117,0 +DA:123,0 +DA:124,0 +DA:125,0 +DA:126,0 +DA:127,0 +DA:128,0 +DA:129,0 +DA:130,0 +DA:131,0 +DA:132,0 +DA:136,0 +DA:141,0 +DA:142,0 +DA:144,0 +DA:145,0 +DA:150,0 +LF:24 +LH:0 +end_of_record +TN: +SF:/home/erick/hashed/hashed-substrate/runtime/src/constants.rs +FN:32,deposit +FNF:1 +FNDA:0,deposit +DA:32,0 +DA:33,0 +LF:2 +LH:0 +end_of_record +TN: +SF:/home/erick/hashed/hashed-substrate/runtime/src/lib.rs +FN:135,native_version +FN:763,from +FN:829,dispatch +FN:831,version +FN:835,execute_block +FN:839,initialize_block +FN:845,metadata +FN:855,finalize_block +FN:863,check_inherents +FN:872,validate_transaction +FN:882,offchain_worker +FN:888,slot_duration +FN:892,authorities +FN:902,decode_session_keys +FN:910,grandpa_authorities +FN:914,current_set_id +FN:918,submit_report_equivocation_unsigned_extrinsic +FN:928,generate_key_ownership_proof +FN:946,query_info +FN:952,query_fee_details +FNF:20 +FNDA:0,native_version +FNDA:4,from +FNDA:0,dispatch +FNDA:0,version +FNDA:0,execute_block +FNDA:0,initialize_block +FNDA:0,metadata +FNDA:0,finalize_block +FNDA:0,check_inherents +FNDA:0,validate_transaction +FNDA:0,offchain_worker +FNDA:0,slot_duration +FNDA:0,authorities +FNDA:0,decode_session_keys +FNDA:0,grandpa_authorities +FNDA:0,current_set_id +FNDA:0,submit_report_equivocation_unsigned_extrinsic +FNDA:0,generate_key_ownership_proof +FNDA:0,query_info +FNDA:0,query_fee_details +DA:89,0 +DA:135,0 +DA:136,0 +DA:142,0 +DA:145,1 +DA:147,0 +DA:408,0 +DA:430,0 +DA:434,0 +DA:435,0 +DA:437,0 +DA:467,0 +DA:470,0 +DA:723,0 +DA:724,0 +DA:727,0 +DA:728,0 +DA:729,0 +DA:730,0 +DA:731,0 +DA:732,0 +DA:733,0 +DA:734,0 +DA:735,0 +DA:736,0 +DA:739,0 +DA:740,0 +DA:741,0 +DA:744,0 +DA:745,0 +DA:746,0 +DA:747,0 +DA:763,4 +DA:769,0 +DA:783,0 +DA:829,0 +DA:831,0 +DA:832,0 +DA:835,0 +DA:836,0 +DA:839,0 +DA:840,0 +DA:845,0 +DA:846,0 +DA:851,0 +DA:852,0 +DA:855,0 +DA:856,0 +DA:859,0 +DA:860,0 +DA:863,0 +DA:864,0 +DA:865,0 +DA:867,0 +DA:872,0 +DA:873,0 +DA:874,0 +DA:875,0 +DA:877,0 +DA:882,0 +DA:883,0 +DA:888,0 +DA:889,0 +DA:892,0 +DA:893,0 +DA:898,0 +DA:899,0 +DA:902,0 +DA:903,0 +DA:905,0 +DA:910,0 +DA:911,0 +DA:914,0 +DA:915,0 +DA:918,0 +DA:919,0 +DA:923,0 +DA:925,0 +DA:928,0 +DA:929,0 +DA:930,0 +DA:935,0 +DA:940,0 +DA:941,0 +DA:946,0 +DA:947,0 +DA:948,0 +DA:950,0 +DA:952,0 +DA:953,0 +DA:954,0 +DA:956,0 +LF:92 +LH:2 +end_of_record diff --git a/pallets/fruniques/Cargo.toml b/pallets/fruniques/Cargo.toml index dd4bcbd9..1b2c6154 100644 --- a/pallets/fruniques/Cargo.toml +++ b/pallets/fruniques/Cargo.toml @@ -43,6 +43,7 @@ std = [ "frame-system/std", "frame-benchmarking/std", "sp-runtime/std", + "pallet-rbac/std", ] runtime-benchmarks = ["frame-benchmarking/runtime-benchmarks"] diff --git a/pallets/fruniques/src/lib.rs b/pallets/fruniques/src/lib.rs index 42a5f7f1..c4157c6c 100644 --- a/pallets/fruniques/src/lib.rs +++ b/pallets/fruniques/src/lib.rs @@ -20,6 +20,8 @@ pub mod pallet { use crate::types::*; use frame_support::{pallet_prelude::*, transactional}; use frame_system::pallet_prelude::*; + + use pallet_rbac::types::RoleBasedAccessControl; /// Configure the pallet by specifying the parameters and types on which it depends. #[pallet::config] pub trait Config: frame_system::Config + pallet_uniques::Config { @@ -30,6 +32,8 @@ pub mod pallet { /// Maximum number of children a Frunique can have #[pallet::constant] type ChildMaxLen: Get; + + type Rbac : RoleBasedAccessControl; } #[pallet::pallet] @@ -416,7 +420,7 @@ pub mod pallet { let _ = >::clear(1000, None); let _ = >::clear(1000, None); let _ = >::clear(1000, None); - + T::Rbac::remove_pallet_storage(Self::pallet_id())?; Ok(()) } } diff --git a/pallets/fruniques/src/mock.rs b/pallets/fruniques/src/mock.rs index ddb59b34..160854ac 100644 --- a/pallets/fruniques/src/mock.rs +++ b/pallets/fruniques/src/mock.rs @@ -22,6 +22,7 @@ construct_runtime!( Uniques: pallet_uniques::{Pallet, Call, Storage, Event}, Balances: pallet_balances::{Pallet, Call, Storage, Config, Event}, Fruniques: pallet_fruniques::{Pallet, Call, Storage, Event}, + RBAC: pallet_rbac::{Pallet, Call, Storage, Event}, } ); parameter_types! { @@ -60,6 +61,7 @@ impl pallet_fruniques::Config for Test { type Event = Event; type RemoveOrigin = EnsureRoot; type ChildMaxLen = ChildMaxLen; + type Rbac = RBAC; } parameter_types! { @@ -112,6 +114,25 @@ impl pallet_balances::Config for Test { type ReserveIdentifier = [u8; 8]; } +parameter_types! { + pub const MaxScopesPerPallet: u32 = 2; + pub const MaxRolesPerPallet: u32 = 6; + pub const RoleMaxLen: u32 = 25; + pub const PermissionMaxLen: u32 = 25; + pub const MaxPermissionsPerRole: u32 = 11; + pub const MaxRolesPerUser: u32 = 2; + pub const MaxUsersPerRole: u32 = 2; +} +impl pallet_rbac::Config for Test { + type Event = Event; + type MaxScopesPerPallet = MaxScopesPerPallet; + type MaxRolesPerPallet = MaxRolesPerPallet; + type RoleMaxLen = RoleMaxLen; + type PermissionMaxLen = PermissionMaxLen; + type MaxPermissionsPerRole = MaxPermissionsPerRole; + type MaxRolesPerUser = MaxRolesPerUser; + type MaxUsersPerRole = MaxUsersPerRole; +} // Build genesis storage according to the mock runtime. // pub(crate) fn new_test_ext() -> sp_io::TestExternalities { // frame_system::GenesisConfig::default().build_storage::().unwrap().into() diff --git a/pallets/gated-marketplace/src/functions.rs b/pallets/gated-marketplace/src/functions.rs index b4e67c81..ed5cc522 100644 --- a/pallets/gated-marketplace/src/functions.rs +++ b/pallets/gated-marketplace/src/functions.rs @@ -16,17 +16,17 @@ impl Pallet { pub fn do_initial_setup()->DispatchResult{ let pallet_id = Self::pallet_id(); let super_roles = vec![MarketplaceRole::Owner.to_vec(), MarketplaceRole::Admin.to_vec()]; - let super_role_ids = T::Rbac::create_and_set_roles(pallet_id.clone(), super_roles)?; + let super_role_ids = ::Rbac::create_and_set_roles(pallet_id.clone(), super_roles)?; for super_role in super_role_ids{ - T::Rbac::create_and_set_permissions(pallet_id.clone(), super_role, Permission::admin_permissions())?; + ::Rbac::create_and_set_permissions(pallet_id.clone(), super_role, Permission::admin_permissions())?; } // participant role and permissions - let participant_role_id = T::Rbac::create_and_set_roles(pallet_id.clone(), [MarketplaceRole::Participant.to_vec()].to_vec())?; - T::Rbac::create_and_set_permissions(pallet_id.clone(), participant_role_id[0], Permission::participant_permissions() )?; + let participant_role_id = ::Rbac::create_and_set_roles(pallet_id.clone(), [MarketplaceRole::Participant.to_vec()].to_vec())?; + ::Rbac::create_and_set_permissions(pallet_id.clone(), participant_role_id[0], Permission::participant_permissions() )?; // appraiser role and permissions - let _appraiser_role_id = T::Rbac::create_and_set_roles(pallet_id.clone(), [MarketplaceRole::Appraiser.to_vec()].to_vec())?; + let _appraiser_role_id = ::Rbac::create_and_set_roles(pallet_id.clone(), [MarketplaceRole::Appraiser.to_vec()].to_vec())?; // redemption specialist role and permissions - let _redemption_role_id = T::Rbac::create_and_set_roles(pallet_id, [MarketplaceRole::RedemptionSpecialist.to_vec()].to_vec())?; + let _redemption_role_id = ::Rbac::create_and_set_roles(pallet_id, [MarketplaceRole::RedemptionSpecialist.to_vec()].to_vec())?; Self::deposit_event(Event::MarketplaceSetupCompleted); Ok(()) @@ -38,7 +38,7 @@ impl Pallet { // ensure the generated id is unique ensure!(!>::contains_key(marketplace_id), Error::::MarketplaceAlreadyExists); //Insert on marketplaces and marketplaces by auth - T::Rbac::create_scope(Self::pallet_id(), marketplace_id)?; + ::Rbac::create_scope(Self::pallet_id(), marketplace_id)?; Self::insert_in_auth_market_lists(owner.clone(), MarketplaceRole::Owner, marketplace_id)?; Self::insert_in_auth_market_lists(admin.clone(), MarketplaceRole::Admin, marketplace_id)?; >::insert(marketplace_id, marketplace); @@ -125,7 +125,7 @@ impl Pallet { //Self::can_enroll(authority, marketplace_id)?; Self::is_authorized(authority, &marketplace_id,Permission::AddAuth)?; //ensure the account is not already an authority - // handled by T::Rbac::assign_role_to_user + // handled by ::Rbac::assign_role_to_user //ensure!(!Self::does_exist_authority(account.clone(), marketplace_id, authority_type), Error::::AlreadyApplied); match authority_type{ MarketplaceRole::Owner => { @@ -148,7 +148,7 @@ impl Pallet { //Self::can_enroll(authority.clone(), marketplace_id)?; Self::is_authorized(authority.clone(), &marketplace_id,Permission::RemoveAuth)?; //ensure the account has the selected authority before to try to remove - // T::Rbac handles the if role doesnt hasnt been asigned to the user + // ::Rbac handles the if role doesnt hasnt been asigned to the user //ensure!(Self::does_exist_authority(account.clone(), marketplace_id, authority_type), Error::::AuthorityNotFoundForUser); match authority_type{ @@ -494,7 +494,7 @@ impl Pallet { fn insert_in_auth_market_lists(authority: T::AccountId, role: MarketplaceRole, marketplace_id: [u8;32])->DispatchResult{ - T::Rbac::assign_role_to_user(authority, Self::pallet_id(), + ::Rbac::assign_role_to_user(authority, Self::pallet_id(), &marketplace_id, role.id())?; Ok(()) @@ -529,7 +529,7 @@ impl Pallet { fn remove_from_market_lists(account: T::AccountId, author_type: MarketplaceRole , marketplace_id : [u8;32])->DispatchResult{ - T::Rbac::remove_role_from_user(account, Self::pallet_id(), + ::Rbac::remove_role_from_user(account, Self::pallet_id(), &marketplace_id, author_type.id())?; Ok(()) @@ -557,17 +557,17 @@ impl Pallet { Self::insert_in_applicants_lists(applicant.clone(), next_status,marketplace_id)?; if prev_status == ApplicationStatus::Approved{ - T::Rbac::remove_role_from_user(applicant.clone(), Self::pallet_id(), &marketplace_id, MarketplaceRole::Participant.id())?; + ::Rbac::remove_role_from_user(applicant.clone(), Self::pallet_id(), &marketplace_id, MarketplaceRole::Participant.id())?; } if next_status == ApplicationStatus::Approved{ - T::Rbac::assign_role_to_user(applicant, Self::pallet_id(), &marketplace_id, MarketplaceRole::Participant.id())? + ::Rbac::assign_role_to_user(applicant, Self::pallet_id(), &marketplace_id, MarketplaceRole::Participant.id())? } Ok(()) } fn is_authorized( authority: T::AccountId, marketplace_id: &[u8;32], permission: Permission ) -> DispatchResult{ - T::Rbac::is_authorized( + ::Rbac::is_authorized( authority, Self::pallet_id(), marketplace_id, @@ -579,7 +579,7 @@ impl Pallet { ///Lets us know if the selected user is an admin. /// It returns true if the user is an admin, false otherwise. fn is_admin(account: T::AccountId, marketplace_id: [u8;32]) -> bool{ - T::Rbac::has_role(account, Self::pallet_id(), + ::Rbac::has_role(account, Self::pallet_id(), &marketplace_id, [MarketplaceRole::Admin.id()].to_vec()).is_ok() } @@ -604,7 +604,7 @@ impl Pallet { // }; //owners.len() == 1 - T::Rbac::get_role_users_len(Self::pallet_id(), + ::Rbac::get_role_users_len(Self::pallet_id(), &marketplace_id, &MarketplaceRole::Owner.id()) == 1 } @@ -657,7 +657,7 @@ impl Pallet { // remove from Marketplaces list >::remove(marketplace_id); - T::Rbac::remove_scope(Self::pallet_id(), marketplace_id)?; + ::Rbac::remove_scope(Self::pallet_id(), marketplace_id)?; Ok(()) } diff --git a/pallets/gated-marketplace/src/lib.rs b/pallets/gated-marketplace/src/lib.rs index 725ca5de..0c8b8c6d 100644 --- a/pallets/gated-marketplace/src/lib.rs +++ b/pallets/gated-marketplace/src/lib.rs @@ -670,7 +670,7 @@ pub mod pallet { let _ = >::clear(1000, None); let _ = >::clear(1000, None); let _ = >::clear(1000, None); - T::Rbac::remove_pallet_storage(Self::pallet_id())?; + // T::Rbac::remove_pallet_storage(Self::pallet_id())?; Ok(()) } diff --git a/pallets/gated-marketplace/src/mock.rs b/pallets/gated-marketplace/src/mock.rs index f22786e9..931d54b3 100644 --- a/pallets/gated-marketplace/src/mock.rs +++ b/pallets/gated-marketplace/src/mock.rs @@ -100,6 +100,7 @@ impl pallet_fruniques::Config for Test { type Event = Event; type RemoveOrigin = EnsureRoot; type ChildMaxLen = ChildMaxLen; + type Rbac = RBAC; } parameter_types! { diff --git a/parachain-runtime/src/lib.rs b/parachain-runtime/src/lib.rs index b4113974..71627e84 100644 --- a/parachain-runtime/src/lib.rs +++ b/parachain-runtime/src/lib.rs @@ -973,6 +973,7 @@ impl pallet_fruniques::Config for Runtime { type Event = Event; type RemoveOrigin = RootOrThreeFifthsOfCouncil; type ChildMaxLen = ChildMaxLen; + type Rbac = RBAC; } parameter_types! { diff --git a/runtime/src/lib.rs b/runtime/src/lib.rs index 09ce3d65..159edd47 100644 --- a/runtime/src/lib.rs +++ b/runtime/src/lib.rs @@ -549,7 +549,7 @@ impl pallet_fruniques::Config for Runtime { EnsureRoot, pallet_collective::EnsureProportionAtLeast, >; - + type Rbac = RBAC; type ChildMaxLen = ChildMaxLen; } From 25951959f747d416265c54f68c32bd7465e2c237 Mon Sep 17 00:00:00 2001 From: Erick Casanova Date: Fri, 11 Nov 2022 17:30:22 -0600 Subject: [PATCH 03/17] update formating and add new permissions to enable users mint or create collections --- pallets/fruniques/src/functions.rs | 46 +++++++++++++++++++++++++++--- pallets/fruniques/src/lib.rs | 3 +- pallets/fruniques/src/types.rs | 31 +++++++------------- 3 files changed, 54 insertions(+), 26 deletions(-) diff --git a/pallets/fruniques/src/functions.rs b/pallets/fruniques/src/functions.rs index 4e4c001b..708e7f92 100644 --- a/pallets/fruniques/src/functions.rs +++ b/pallets/fruniques/src/functions.rs @@ -1,9 +1,9 @@ use super::*; use crate::types::*; -use frame_system::pallet_prelude::*; - +use frame_support::sp_io::hashing::blake2_256; use frame_support::traits::tokens::nonfungibles::Inspect; +use frame_system::pallet_prelude::*; use scale_info::prelude::string::String; use pallet_rbac::types::*; @@ -150,6 +150,11 @@ impl Pallet { ) -> DispatchResult { let owner = T::CreateOrigin::ensure_origin(origin.clone(), &class_id)?; + let scope_id = class_id.using_encoded(blake2_256); + T::Rbac::create_scope(Self::pallet_id(), scope_id)?; + + Self::insert_auth_in_frunique_collection(owner.clone(), class_id, FruniqueRole::Owner)?; + pallet_uniques::Pallet::::do_create_collection( class_id, owner.clone(), @@ -197,12 +202,15 @@ impl Pallet { origin: OriginFor, collection: T::CollectionId, item: T::ItemId, - owner: ::Source, + owner: T::AccountId, metadata: CollectionDescription, attributes: Option>, ) -> DispatchResult { ensure!(Self::collection_exists(&collection), >::CollectionNotFound); - pallet_uniques::Pallet::::mint(origin.clone(), collection, item, owner)?; + let user: T::AccountId = ensure_signed(origin.clone())?; + Self::is_authorized(user, collection, Permission::Mint)?; + + pallet_uniques::Pallet::::do_mint(collection, item, owner, |_| Ok(()))?; pallet_uniques::Pallet::::set_metadata( origin.clone(), @@ -227,7 +235,37 @@ impl Pallet { Ok(()) } + /// Helper functions to interact with the RBAC module pub fn pallet_id() -> IdOrVec { IdOrVec::Vec(Self::module_name().as_bytes().to_vec()) } + + fn insert_auth_in_frunique_collection( + user: T::AccountId, + class_id: T::CollectionId, + role: FruniqueRole, + ) -> DispatchResult { + T::Rbac::assign_role_to_user( + user, + Self::pallet_id(), + &class_id.using_encoded(blake2_256), + role.id(), + )?; + + Ok(()) + } + + fn is_authorized( + user: T::AccountId, + collection_id: T::CollectionId, + permission: Permission, + ) -> DispatchResult { + let scope_id = collection_id.using_encoded(blake2_256); + ::Rbac::is_authorized( + user, + Self::pallet_id(), + &scope_id, + &permission.id(), + ) + } } diff --git a/pallets/fruniques/src/lib.rs b/pallets/fruniques/src/lib.rs index c4157c6c..3e4686e3 100644 --- a/pallets/fruniques/src/lib.rs +++ b/pallets/fruniques/src/lib.rs @@ -269,7 +269,6 @@ pub mod pallet { } let owner: T::AccountId = ensure_signed(origin.clone())?; - let account_id = Self::account_id_to_lookup_source(&owner); let instance_id: ItemId = >::try_get(class_id).unwrap_or(0); >::insert(class_id, instance_id + 1); @@ -288,7 +287,7 @@ pub mod pallet { >::insert(class_id, instance_id, Some(child_info)); } - Self::do_spawn(origin, class_id, instance_id, account_id, metadata, attributes)?; + Self::do_spawn(origin, class_id, instance_id, owner.clone(), metadata, attributes)?; Self::deposit_event(Event::FruniqueCreated( owner.clone(), diff --git a/pallets/fruniques/src/types.rs b/pallets/fruniques/src/types.rs index d8ef186a..966e3a8f 100644 --- a/pallets/fruniques/src/types.rs +++ b/pallets/fruniques/src/types.rs @@ -3,8 +3,8 @@ use super::*; use frame_support::pallet_prelude::*; use frame_support::sp_io::hashing::blake2_256; -use sp_runtime::Permill; use sp_runtime::sp_std::vec::Vec; +use sp_runtime::Permill; pub type AttributeKey = BoundedVec::KeyLimit>; pub type AttributeValue = BoundedVec::ValueLimit>; @@ -44,6 +44,7 @@ pub enum FruniqueRole { Admin, Collaborator, Collector, + Holder, } impl Default for FruniqueRole { @@ -59,6 +60,7 @@ impl FruniqueRole { Self::Admin => "Admin".as_bytes().to_vec(), Self::Collaborator => "Collaborator".as_bytes().to_vec(), Self::Collector => "Collector".as_bytes().to_vec(), + Self::Holder => "Holder".as_bytes().to_vec(), } } @@ -68,7 +70,8 @@ impl FruniqueRole { pub fn enum_to_vec() -> Vec> { use crate::types::FruniqueRole::*; - [Owner.to_vec(), Admin.to_vec(), Collaborator.to_vec(), Collector.to_vec()].to_vec() + [Owner.to_vec(), Admin.to_vec(), Collaborator.to_vec(), Collector.to_vec(), Holder.to_vec()] + .to_vec() } } @@ -77,26 +80,20 @@ impl FruniqueRole { Encode, Decode, Clone, Eq, PartialEq, RuntimeDebugNoBound, MaxEncodedLen, TypeInfo, Copy, )] pub enum Permission { - /// No authorization required - None, - /// Authorization required - Required, /// Authorization required and must be approved by the owner Mint, /// Authorization required and must be approved by a holder / collector Transfer, /// Allow a user to collaborate on a collection - Collaborate, + InviteCollaborator, } impl Permission { pub fn to_vec(self) -> Vec { match self { - Self::None => "None".as_bytes().to_vec(), - Self::Required => "Required".as_bytes().to_vec(), Self::Mint => "Mint".as_bytes().to_vec(), Self::Transfer => "Transfer".as_bytes().to_vec(), - Self::Collaborate => "Collaborate".as_bytes().to_vec(), + Self::InviteCollaborator => "InviteCollaborator".as_bytes().to_vec(), } } @@ -106,19 +103,13 @@ impl Permission { pub fn owner_permissions() -> Vec> { use crate::types::Permission::*; - [None.to_vec(), Required.to_vec(), Mint.to_vec(), Transfer.to_vec()].to_vec() + [Mint.to_vec(), Transfer.to_vec(), InviteCollaborator.to_vec()].to_vec() } pub fn admin_permissions() -> Vec> { use crate::types::Permission::*; - let mut admin_permissions = [ - None.to_vec(), - Required.to_vec(), - Mint.to_vec(), - Transfer.to_vec(), - Collaborate.to_vec(), - ] - .to_vec(); + let mut admin_permissions = + [Mint.to_vec(), Transfer.to_vec(), InviteCollaborator.to_vec()].to_vec(); admin_permissions.append(&mut Permission::holder_permissions()); admin_permissions } @@ -130,6 +121,6 @@ impl Permission { pub fn holder_permissions() -> Vec> { use crate::types::Permission::*; - [None.to_vec(), Required.to_vec(), Transfer.to_vec()].to_vec() + [Transfer.to_vec()].to_vec() } } From 34415b65f3bb9f24ec583bc9838baa2eaf8aaed0 Mon Sep 17 00:00:00 2001 From: Erick Casanova Date: Fri, 11 Nov 2022 19:32:32 -0600 Subject: [PATCH 04/17] update formate --- pallets/gated-marketplace/src/tests.rs | 254 ++++++++++++------------- 1 file changed, 127 insertions(+), 127 deletions(-) diff --git a/pallets/gated-marketplace/src/tests.rs b/pallets/gated-marketplace/src/tests.rs index 2e252042..2e0397ff 100644 --- a/pallets/gated-marketplace/src/tests.rs +++ b/pallets/gated-marketplace/src/tests.rs @@ -52,7 +52,7 @@ fn _create_file(name: &str, cid: &str, create_custodian_file: bool) -> Applicati } // due to encoding problems with polkadot-js, the custodians_cid generation will be done in another function -fn create_application_fields( n_files: u32) -> +fn create_application_fields( n_files: u32) -> BoundedVec<(BoundedVec >,BoundedVec> ), MaxFiles> { let mut files = Vec::<(BoundedVec >,BoundedVec> )>::default(); for i in 0..n_files{ @@ -63,7 +63,7 @@ fn create_application_fields( n_files: u32) -> BoundedVec::<(BoundedVec >,BoundedVec> ), MaxFiles>::try_from( files).unwrap_or_default() } -fn create_custiodian_fields( custodian_account: u64, n_files: u32, ) -> +fn create_custodian_fields( custodian_account: u64, n_files: u32, ) -> Option<( u64,BoundedVec>, MaxFiles>) >{ let cids: Vec>> = (0..n_files).map(|n|{ let cid = format!("cid_custodian{}",n.to_string()); @@ -71,7 +71,7 @@ fn create_custiodian_fields( custodian_account: u64, n_files: u32, ) -> }).collect(); - Some( + Some( (custodian_account,BoundedVec::>, MaxFiles>::try_from(cids).unwrap_or_default()) ) } @@ -83,7 +83,7 @@ fn create_marketplace_works() { // Dispatch a signed extrinsic. assert_ok!(GatedMarketplace::create_marketplace(Origin::signed(1),2, create_label("my marketplace") )); let m_id = create_label("my marketplace").using_encoded(blake2_256); - assert!(GatedMarketplace::marketplaces(m_id).is_some() ); + assert!(GatedMarketplace::marketplaces(m_id).is_some() ); }); } @@ -103,8 +103,8 @@ fn exceeding_max_roles_per_auth_shouldnt_work() { assert_ok!(GatedMarketplace::create_marketplace(Origin::signed(1),2, m_label.clone() )); assert_ok!(GatedMarketplace::add_authority(Origin::signed(1), 2, MarketplaceRole::Appraiser, m_label.using_encoded(blake2_256))); assert_noop!( - GatedMarketplace::add_authority(Origin::signed(1), 2, MarketplaceRole::RedemptionSpecialist, m_label.using_encoded(blake2_256) ), - RbacErr::ExceedMaxRolesPerUser + GatedMarketplace::add_authority(Origin::signed(1), 2, MarketplaceRole::RedemptionSpecialist, m_label.using_encoded(blake2_256) ), + RbacErr::ExceedMaxRolesPerUser ); }); @@ -128,7 +128,7 @@ fn apply_with_custodian_works() { // Dispatch a signed extrinsic. assert_ok!(GatedMarketplace::create_marketplace(Origin::signed(1),2, create_label("my marketplace") )); let m_id = create_label("my marketplace").using_encoded(blake2_256); - assert_ok!(GatedMarketplace::apply(Origin::signed(3),m_id, create_application_fields(2), create_custiodian_fields(4,2) )); + assert_ok!(GatedMarketplace::apply(Origin::signed(3),m_id, create_application_fields(2), create_custodian_fields(4,2) )); assert!( GatedMarketplace::applicants_by_marketplace(m_id, ApplicationStatus::Pending).len() ==1); assert!(GatedMarketplace::custodians(4, m_id).pop().is_some() ); @@ -142,7 +142,7 @@ fn apply_with_same_account_as_custodian_shouldnt_work() { assert_ok!(GatedMarketplace::create_marketplace(Origin::signed(1),2, create_label("my marketplace") )); let m_id = create_label("my marketplace").using_encoded(blake2_256); assert_noop!( - GatedMarketplace::apply(Origin::signed(3),m_id, create_application_fields(2), create_custiodian_fields(3,2) ), + GatedMarketplace::apply(Origin::signed(3),m_id, create_application_fields(2), create_custodian_fields(3,2) ), Error::::ApplicantCannotBeCustodian ); }); @@ -154,10 +154,10 @@ fn exceeding_max_applications_per_custodian_shouldnt_work() { // Dispatch a signed extrinsic. assert_ok!(GatedMarketplace::create_marketplace(Origin::signed(1),2, create_label("my marketplace") )); let m_id = create_label("my marketplace").using_encoded(blake2_256); - assert_ok!(GatedMarketplace::apply(Origin::signed(3),m_id, create_application_fields(2), create_custiodian_fields(6,2) )); - assert_ok!(GatedMarketplace::apply(Origin::signed(4),m_id, create_application_fields(2), create_custiodian_fields(6,2) )); + assert_ok!(GatedMarketplace::apply(Origin::signed(3),m_id, create_application_fields(2), create_custodian_fields(6,2) )); + assert_ok!(GatedMarketplace::apply(Origin::signed(4),m_id, create_application_fields(2), create_custodian_fields(6,2) )); assert_noop!( - GatedMarketplace::apply(Origin::signed(5),m_id, create_application_fields(2), create_custiodian_fields(6,2) ), + GatedMarketplace::apply(Origin::signed(5),m_id, create_application_fields(2), create_custodian_fields(6,2) ), Error::::ExceedMaxApplicationsPerCustodian ); }); @@ -464,10 +464,10 @@ fn update_marketplace_marketplace_not_found_shouldnt_work(){ assert_ok!(GatedMarketplace::create_marketplace(Origin::signed(1),2, create_label("my marketplace") )); let m_id = create_label("my marketplace").using_encoded(blake2_256); assert!(GatedMarketplace::marketplaces(m_id).is_some()); - let m_id_2 = create_label("not the first marketplace").using_encoded(blake2_256); + let m_id_2 = create_label("not the first marketplace").using_encoded(blake2_256); assert_noop!(GatedMarketplace::update_label_marketplace(Origin::signed(1), m_id_2, create_label("my marketplace 2")), Error::::MarketplaceNotFound); }); - + } #[test] @@ -486,9 +486,9 @@ fn update_label_marketplace_works(){ new_test_ext().execute_with(|| { assert_ok!(GatedMarketplace::create_marketplace(Origin::signed(1),2, create_label("my marketplace") )); let m_id = create_label("my marketplace").using_encoded(blake2_256); - assert!(GatedMarketplace::marketplaces(m_id).is_some()); + assert!(GatedMarketplace::marketplaces(m_id).is_some()); assert_ok!(GatedMarketplace::update_label_marketplace(Origin::signed(1), m_id, create_label("my marketplace 2"))); - assert!(GatedMarketplace::marketplaces(m_id).is_some() ); + assert!(GatedMarketplace::marketplaces(m_id).is_some() ); }); } @@ -504,7 +504,7 @@ fn remove_marketplace_marketplace_not_found_shouldnt_work(){ let m_id_2 = create_label("not the first marketplace").using_encoded(blake2_256); assert_noop!(GatedMarketplace::remove_marketplace(Origin::signed(1), m_id_2), Error::::MarketplaceNotFound); }); - + } @@ -538,7 +538,7 @@ fn remove_marketplace_deletes_storage_from_marketplaces_by_authority_works(){ assert_ok!(GatedMarketplace::add_authority(Origin::signed(1), 3, MarketplaceRole::Appraiser, m_id)); assert_ok!(GatedMarketplace::add_authority(Origin::signed(1), 4, MarketplaceRole::RedemptionSpecialist, m_id)); - + //assert!(GatedMarketplace::marketplaces_by_authority(1, m_id) == vec![MarketplaceRole::Owner]); assert_ok!(::Rbac::has_role(1, GatedMarketplace::pallet_id(), &m_id, vec![MarketplaceRole::Owner.id()])); //assert!(GatedMarketplace::marketplaces_by_authority(2, m_id) == vec![MarketplaceRole::Admin]); @@ -602,7 +602,7 @@ fn remove_marketplace_deletes_storage_from_custodians_works(){ let m_id = create_label("my marketplace").using_encoded(blake2_256); assert!(GatedMarketplace::marketplaces(m_id).is_some()); - assert_ok!(GatedMarketplace::apply(Origin::signed(3),m_id, create_application_fields(2), create_custiodian_fields(4,2) )); + assert_ok!(GatedMarketplace::apply(Origin::signed(3),m_id, create_application_fields(2), create_custodian_fields(4,2) )); assert!(GatedMarketplace::custodians(4, m_id) == vec![3]); assert_ok!(GatedMarketplace::remove_marketplace(Origin::signed(1), m_id)); @@ -804,12 +804,12 @@ fn enlist_sell_offer_works() { assert_ok!(GatedMarketplace::create_marketplace(Origin::signed(1), 2, create_label("my marketplace"))); let m_id = create_label("my marketplace").using_encoded(blake2_256); - + assert_ok!(Uniques::create(Origin::signed(1), 0, 1)); assert_ok!(Uniques::mint(Origin::signed(1), 0, 0, 1)); assert_eq!(Uniques::owner(0, 0).unwrap(), 1); - - assert_ok!(GatedMarketplace::enlist_sell_offer(Origin::signed(1), m_id, 0, 0, 10000)); + + assert_ok!(GatedMarketplace::enlist_sell_offer(Origin::signed(1), m_id, 0, 0, 10000)); let offer_id = GatedMarketplace::offers_by_item(0, 0).iter().next().unwrap().clone(); assert!(GatedMarketplace::offers_info(offer_id).is_some()); assert_eq!(GatedMarketplace::offers_info(offer_id).unwrap().offer_type, OfferType::SellOrder); @@ -842,12 +842,12 @@ fn enlist_sell_offer_item_already_enlisted_shouldnt_work() { assert_ok!(GatedMarketplace::create_marketplace(Origin::signed(1), 2, create_label("my marketplace"))); let m_id = create_label("my marketplace").using_encoded(blake2_256); - + assert_ok!(Uniques::create(Origin::signed(1), 0, 1)); assert_ok!(Uniques::mint(Origin::signed(1), 0, 0, 1)); assert_eq!(Uniques::owner(0, 0).unwrap(), 1); - - assert_ok!(GatedMarketplace::enlist_sell_offer(Origin::signed(1), m_id, 0, 0, 10000)); + + assert_ok!(GatedMarketplace::enlist_sell_offer(Origin::signed(1), m_id, 0, 0, 10000)); let offer_id = GatedMarketplace::offers_by_item(0, 0).iter().next().unwrap().clone(); assert!(GatedMarketplace::offers_info(offer_id).is_some()); assert_noop!(GatedMarketplace::enlist_sell_offer(Origin::signed(1), m_id, 0, 0, 10000), Error::::OfferAlreadyExists); @@ -862,11 +862,11 @@ fn enlist_sell_offer_not_owner_tries_to_enlist_shouldnt_work() { assert_ok!(GatedMarketplace::create_marketplace(Origin::signed(1), 2, create_label("my marketplace"))); let m_id = create_label("my marketplace").using_encoded(blake2_256); - + assert_ok!(Uniques::create(Origin::signed(1), 0, 1)); assert_ok!(Uniques::mint(Origin::signed(1), 0, 0, 1)); assert_eq!(Uniques::owner(0, 0).unwrap(), 1); - + assert_noop!(GatedMarketplace::enlist_sell_offer(Origin::signed(2), m_id, 0, 0, 10000), Error::::NotOwner); }); } @@ -878,11 +878,11 @@ fn enlist_sell_offer_price_must_greater_than_zero_shouldnt_work() { assert_ok!(GatedMarketplace::create_marketplace(Origin::signed(1), 2, create_label("my marketplace"))); let m_id = create_label("my marketplace").using_encoded(blake2_256); - + assert_ok!(Uniques::create(Origin::signed(1), 0, 1)); assert_ok!(Uniques::mint(Origin::signed(1), 0, 0, 1)); assert_eq!(Uniques::owner(0, 0).unwrap(), 1); - + assert_noop!(GatedMarketplace::enlist_sell_offer(Origin::signed(1), m_id, 0, 0, 0), Error::::PriceMustBeGreaterThanZero); }); } @@ -894,12 +894,12 @@ fn enlist_sell_offer_price_must_greater_than_minimun_amount_works() { assert_ok!(GatedMarketplace::create_marketplace(Origin::signed(1), 2, create_label("my marketplace"))); let m_id = create_label("my marketplace").using_encoded(blake2_256); - + assert_ok!(Uniques::create(Origin::signed(1), 0, 1)); assert_ok!(Uniques::mint(Origin::signed(1), 0, 0, 1)); assert_eq!(Uniques::owner(0, 0).unwrap(), 1); - - let minimum_amount = 1001; + + let minimum_amount = 1001; assert_ok!(GatedMarketplace::enlist_sell_offer(Origin::signed(1), m_id, 0, 0, minimum_amount)); let offer_id = GatedMarketplace::offers_by_item(0, 0).iter().next().unwrap().clone(); assert!(GatedMarketplace::offers_info(offer_id).is_some()); @@ -913,11 +913,11 @@ fn enlist_sell_offer_is_properly_stored_works() { assert_ok!(GatedMarketplace::create_marketplace(Origin::signed(1), 2, create_label("my marketplace"))); let m_id = create_label("my marketplace").using_encoded(blake2_256); - + assert_ok!(Uniques::create(Origin::signed(1), 0, 1)); assert_ok!(Uniques::mint(Origin::signed(1), 0, 0, 1)); assert_eq!(Uniques::owner(0, 0).unwrap(), 1); - + assert_ok!(GatedMarketplace::enlist_sell_offer(Origin::signed(1), m_id, 0, 0, 10000)); let offer_id = GatedMarketplace::offers_by_item(0, 0).iter().next().unwrap().clone(); assert!(GatedMarketplace::offers_info(offer_id).is_some()); @@ -938,13 +938,13 @@ fn enlist_sell_offer_two_marketplaces(){ assert_ok!(GatedMarketplace::create_marketplace(Origin::signed(1), 2, create_label("my marketplace2"))); let m_id2 = create_label("my marketplace2").using_encoded(blake2_256); - + assert_ok!(Uniques::create(Origin::signed(1), 0, 1)); assert_ok!(Uniques::mint(Origin::signed(1), 0, 0, 1)); assert_eq!(Uniques::owner(0, 0).unwrap(), 1); - - assert_ok!(GatedMarketplace::enlist_sell_offer(Origin::signed(1), m_id, 0, 0, 10000)); - assert_ok!(GatedMarketplace::enlist_sell_offer(Origin::signed(1), m_id2, 0, 0, 11000)); + + assert_ok!(GatedMarketplace::enlist_sell_offer(Origin::signed(1), m_id, 0, 0, 10000)); + assert_ok!(GatedMarketplace::enlist_sell_offer(Origin::signed(1), m_id2, 0, 0, 11000)); assert_eq!(GatedMarketplace::offers_by_item(0, 0).len(), 2); assert_eq!(GatedMarketplace::offers_by_account(1).len(), 2); @@ -962,12 +962,12 @@ fn enlist_buy_offer_works() { assert_ok!(GatedMarketplace::create_marketplace(Origin::signed(1), 2, create_label("my marketplace"))); let m_id = create_label("my marketplace").using_encoded(blake2_256); - + assert_ok!(Uniques::create(Origin::signed(1), 0, 1)); assert_ok!(Uniques::mint(Origin::signed(1), 0, 0, 1)); assert_eq!(Uniques::owner(0, 0).unwrap(), 1); - - assert_ok!(GatedMarketplace::enlist_sell_offer(Origin::signed(1), m_id, 0, 0, 1001)); + + assert_ok!(GatedMarketplace::enlist_sell_offer(Origin::signed(1), m_id, 0, 0, 1001)); let offer_id = GatedMarketplace::offers_by_account(1).iter().next().unwrap().clone(); assert!(GatedMarketplace::offers_info(offer_id).is_some()); @@ -986,12 +986,12 @@ fn enlist_buy_offer_item_is_not_for_sale_shouldnt_work() { assert_ok!(GatedMarketplace::create_marketplace(Origin::signed(1), 2, create_label("my marketplace"))); let m_id = create_label("my marketplace").using_encoded(blake2_256); - + assert_ok!(Uniques::create(Origin::signed(1), 0, 1)); assert_ok!(Uniques::mint(Origin::signed(1), 0, 0, 1)); assert_eq!(Uniques::owner(0, 0).unwrap(), 1); - - assert_ok!(GatedMarketplace::enlist_sell_offer(Origin::signed(1), m_id, 0, 0, 1001)); + + assert_ok!(GatedMarketplace::enlist_sell_offer(Origin::signed(1), m_id, 0, 0, 1001)); let offer_id = GatedMarketplace::offers_by_account(1).iter().next().unwrap().clone(); assert!(GatedMarketplace::offers_info(offer_id).is_some()); @@ -1008,20 +1008,20 @@ fn enlist_buy_offer_owner_cannnot_create_buy_offers_for_their_own_items_shouldnt assert_ok!(GatedMarketplace::create_marketplace(Origin::signed(1), 2, create_label("my marketplace"))); let m_id = create_label("my marketplace").using_encoded(blake2_256); - + assert_ok!(Uniques::create(Origin::signed(1), 0, 1)); assert_ok!(Uniques::mint(Origin::signed(1), 0, 0, 1)); assert_eq!(Uniques::owner(0, 0).unwrap(), 1); - - assert_ok!(GatedMarketplace::enlist_sell_offer(Origin::signed(1), m_id, 0, 0, 1001)); + + assert_ok!(GatedMarketplace::enlist_sell_offer(Origin::signed(1), m_id, 0, 0, 1001)); let offer_id = GatedMarketplace::offers_by_account(1).iter().next().unwrap().clone(); assert!(GatedMarketplace::offers_info(offer_id).is_some()); - + assert_noop!(GatedMarketplace::enlist_buy_offer(Origin::signed(1), m_id, 0, 0, 1100), Error::::CannotCreateOffer); }); } -#[test] +#[test] fn enlist_buy_offer_user_does_not_have_enough_balance_shouldnt_work() { new_test_ext().execute_with(|| { Balances::make_free_balance_be(&1, 100); @@ -1030,12 +1030,12 @@ fn enlist_buy_offer_user_does_not_have_enough_balance_shouldnt_work() { assert_ok!(GatedMarketplace::create_marketplace(Origin::signed(1), 2, create_label("my marketplace"))); let m_id = create_label("my marketplace").using_encoded(blake2_256); - + assert_ok!(Uniques::create(Origin::signed(1), 0, 1)); assert_ok!(Uniques::mint(Origin::signed(1), 0, 0, 1)); assert_eq!(Uniques::owner(0, 0).unwrap(), 1); - - assert_ok!(GatedMarketplace::enlist_sell_offer(Origin::signed(1), m_id, 0, 0, 10000)); + + assert_ok!(GatedMarketplace::enlist_sell_offer(Origin::signed(1), m_id, 0, 0, 10000)); let offer_id = GatedMarketplace::offers_by_account(1).iter().next().unwrap().clone(); assert!(GatedMarketplace::offers_info(offer_id).is_some()); @@ -1052,12 +1052,12 @@ fn enlist_buy_offer_price_must_greater_than_zero_shouldnt_work() { assert_ok!(GatedMarketplace::create_marketplace(Origin::signed(1), 2, create_label("my marketplace"))); let m_id = create_label("my marketplace").using_encoded(blake2_256); - + assert_ok!(Uniques::create(Origin::signed(1), 0, 1)); assert_ok!(Uniques::mint(Origin::signed(1), 0, 0, 1)); assert_eq!(Uniques::owner(0, 0).unwrap(), 1); - - assert_ok!(GatedMarketplace::enlist_sell_offer(Origin::signed(1), m_id, 0, 0, 10000)); + + assert_ok!(GatedMarketplace::enlist_sell_offer(Origin::signed(1), m_id, 0, 0, 10000)); let offer_id = GatedMarketplace::offers_by_account(1).iter().next().unwrap().clone(); assert!(GatedMarketplace::offers_info(offer_id).is_some()); @@ -1076,12 +1076,12 @@ fn enlist_buy_offer_an_item_can_receive_multiple_buy_offers(){ assert_ok!(GatedMarketplace::create_marketplace(Origin::signed(1), 2, create_label("my marketplace"))); let m_id = create_label("my marketplace").using_encoded(blake2_256); - + assert_ok!(Uniques::create(Origin::signed(1), 0, 1)); assert_ok!(Uniques::mint(Origin::signed(1), 0, 0, 1)); assert_eq!(Uniques::owner(0, 0).unwrap(), 1); - - assert_ok!(GatedMarketplace::enlist_sell_offer(Origin::signed(1), m_id, 0, 0, 10000)); + + assert_ok!(GatedMarketplace::enlist_sell_offer(Origin::signed(1), m_id, 0, 0, 10000)); let offer_id = GatedMarketplace::offers_by_account(1).iter().next().unwrap().clone(); assert!(GatedMarketplace::offers_info(offer_id).is_some()); @@ -1107,15 +1107,15 @@ fn take_sell_offer_works(){ new_test_ext().execute_with(|| { Balances::make_free_balance_be(&1, 100); Balances::make_free_balance_be(&2, 1300); - + assert_ok!(GatedMarketplace::create_marketplace(Origin::signed(1), 2, create_label("my marketplace"))); let m_id = create_label("my marketplace").using_encoded(blake2_256); - + assert_ok!(Uniques::create(Origin::signed(1), 0, 1)); assert_ok!(Uniques::mint(Origin::signed(1), 0, 0, 1)); assert_eq!(Uniques::owner(0, 0).unwrap(), 1); - - assert_ok!(GatedMarketplace::enlist_sell_offer(Origin::signed(1), m_id, 0, 0, 1200)); + + assert_ok!(GatedMarketplace::enlist_sell_offer(Origin::signed(1), m_id, 0, 0, 1200)); let offer_id = GatedMarketplace::offers_by_item(0, 0).iter().next().unwrap().clone(); assert_ok!(GatedMarketplace::take_sell_offer(Origin::signed(2), offer_id)); @@ -1130,15 +1130,15 @@ fn take_sell_offer_owner_cannnot_be_the_buyer_shouldnt_work() { new_test_ext().execute_with(|| { Balances::make_free_balance_be(&1, 100); Balances::make_free_balance_be(&2, 1300); - + assert_ok!(GatedMarketplace::create_marketplace(Origin::signed(1), 2, create_label("my marketplace"))); let m_id = create_label("my marketplace").using_encoded(blake2_256); - + assert_ok!(Uniques::create(Origin::signed(1), 0, 1)); assert_ok!(Uniques::mint(Origin::signed(1), 0, 0, 1)); assert_eq!(Uniques::owner(0, 0).unwrap(), 1); - - assert_ok!(GatedMarketplace::enlist_sell_offer(Origin::signed(1), m_id, 0, 0, 1200)); + + assert_ok!(GatedMarketplace::enlist_sell_offer(Origin::signed(1), m_id, 0, 0, 1200)); let offer_id = GatedMarketplace::offers_by_item(0, 0).iter().next().unwrap().clone(); assert_noop!(GatedMarketplace::take_sell_offer(Origin::signed(1), offer_id), Error::::CannotTakeOffer); @@ -1150,15 +1150,15 @@ fn take_sell_offer_id_does_not_exist_shouldnt_work(){ new_test_ext().execute_with(|| { Balances::make_free_balance_be(&1, 100); Balances::make_free_balance_be(&2, 1300); - + assert_ok!(GatedMarketplace::create_marketplace(Origin::signed(1), 2, create_label("my marketplace"))); let m_id = create_label("my marketplace").using_encoded(blake2_256); - + assert_ok!(Uniques::create(Origin::signed(1), 0, 1)); assert_ok!(Uniques::mint(Origin::signed(1), 0, 0, 1)); assert_eq!(Uniques::owner(0, 0).unwrap(), 1); - - assert_ok!(GatedMarketplace::enlist_sell_offer(Origin::signed(1), m_id, 0, 0, 1200)); + + assert_ok!(GatedMarketplace::enlist_sell_offer(Origin::signed(1), m_id, 0, 0, 1200)); let offer_id = GatedMarketplace::offers_by_item(0, 0).iter().next().unwrap().clone(); let offer_id2 = offer_id.using_encoded(blake2_256); @@ -1172,15 +1172,15 @@ fn take_sell_offer_buyer_does_not_have_enough_balance_shouldnt_work(){ new_test_ext().execute_with(|| { Balances::make_free_balance_be(&1, 100); Balances::make_free_balance_be(&2, 1100); - + assert_ok!(GatedMarketplace::create_marketplace(Origin::signed(1), 2, create_label("my marketplace"))); let m_id = create_label("my marketplace").using_encoded(blake2_256); - + assert_ok!(Uniques::create(Origin::signed(1), 0, 1)); assert_ok!(Uniques::mint(Origin::signed(1), 0, 0, 1)); assert_eq!(Uniques::owner(0, 0).unwrap(), 1); - - assert_ok!(GatedMarketplace::enlist_sell_offer(Origin::signed(1), m_id, 0, 0, 1200)); + + assert_ok!(GatedMarketplace::enlist_sell_offer(Origin::signed(1), m_id, 0, 0, 1200)); let offer_id = GatedMarketplace::offers_by_item(0, 0).iter().next().unwrap().clone(); assert_noop!(GatedMarketplace::take_sell_offer(Origin::signed(2), offer_id), Error::::NotEnoughBalance); @@ -1192,22 +1192,22 @@ fn take_buy_offer_works(){ new_test_ext().execute_with(|| { Balances::make_free_balance_be(&1, 100); Balances::make_free_balance_be(&2, 1300); - + assert_ok!(GatedMarketplace::create_marketplace(Origin::signed(1), 2, create_label("my marketplace"))); let m_id = create_label("my marketplace").using_encoded(blake2_256); - + assert_ok!(Uniques::create(Origin::signed(1), 0, 1)); assert_ok!(Uniques::mint(Origin::signed(1), 0, 0, 1)); assert_eq!(Uniques::owner(0, 0).unwrap(), 1); - assert_ok!(GatedMarketplace::enlist_sell_offer(Origin::signed(1), m_id, 0, 0, 1001)); + assert_ok!(GatedMarketplace::enlist_sell_offer(Origin::signed(1), m_id, 0, 0, 1001)); let offer_id = GatedMarketplace::offers_by_account(1).iter().next().unwrap().clone(); assert!(GatedMarketplace::offers_info(offer_id).is_some()); - - assert_ok!(GatedMarketplace::enlist_buy_offer(Origin::signed(2), m_id, 0, 0, 1200)); + + assert_ok!(GatedMarketplace::enlist_buy_offer(Origin::signed(2), m_id, 0, 0, 1200)); let offer_id2 = GatedMarketplace::offers_by_account(2).iter().next().unwrap().clone(); assert_eq!(GatedMarketplace::offers_info(offer_id2).unwrap().offer_type, OfferType::BuyOrder); - + assert_ok!(GatedMarketplace::take_buy_offer(Origin::signed(1), offer_id2)); assert_eq!(GatedMarketplace::offers_by_item(0, 0).len(), 0); assert_eq!(GatedMarketplace::offers_info(offer_id).unwrap().status, OfferStatus::Closed); @@ -1219,20 +1219,20 @@ fn take_buy_offer_only_owner_can_accept_buy_offers_shouldnt_work(){ new_test_ext().execute_with(|| { Balances::make_free_balance_be(&1, 100); Balances::make_free_balance_be(&2, 1300); - + assert_ok!(GatedMarketplace::create_marketplace(Origin::signed(1), 2, create_label("my marketplace"))); let m_id = create_label("my marketplace").using_encoded(blake2_256); - + assert_ok!(Uniques::create(Origin::signed(1), 0, 1)); assert_ok!(Uniques::mint(Origin::signed(1), 0, 0, 1)); assert_eq!(Uniques::owner(0, 0).unwrap(), 1); - - assert_ok!(GatedMarketplace::enlist_sell_offer(Origin::signed(1), m_id, 0, 0, 1001)); + + assert_ok!(GatedMarketplace::enlist_sell_offer(Origin::signed(1), m_id, 0, 0, 1001)); let offer_id = GatedMarketplace::offers_by_account(1).iter().next().unwrap().clone(); assert!(GatedMarketplace::offers_info(offer_id).is_some()); - - assert_ok!(GatedMarketplace::enlist_buy_offer(Origin::signed(2), m_id, 0, 0, 1200)); + + assert_ok!(GatedMarketplace::enlist_buy_offer(Origin::signed(2), m_id, 0, 0, 1200)); let offer_id2 = GatedMarketplace::offers_by_account(2).iter().next().unwrap().clone(); assert_eq!(GatedMarketplace::offers_info(offer_id2).unwrap().offer_type, OfferType::BuyOrder); @@ -1245,19 +1245,19 @@ fn take_buy_offer_id_does_not_exist_shouldnt_work(){ new_test_ext().execute_with(|| { Balances::make_free_balance_be(&1, 100); Balances::make_free_balance_be(&2, 1300); - + assert_ok!(GatedMarketplace::create_marketplace(Origin::signed(1), 2, create_label("my marketplace"))); let m_id = create_label("my marketplace").using_encoded(blake2_256); - + assert_ok!(Uniques::create(Origin::signed(1), 0, 1)); assert_ok!(Uniques::mint(Origin::signed(1), 0, 0, 1)); assert_eq!(Uniques::owner(0, 0).unwrap(), 1); - - assert_ok!(GatedMarketplace::enlist_sell_offer(Origin::signed(1), m_id, 0, 0, 1001)); + + assert_ok!(GatedMarketplace::enlist_sell_offer(Origin::signed(1), m_id, 0, 0, 1001)); let offer_id = GatedMarketplace::offers_by_account(1).iter().next().unwrap().clone(); assert!(GatedMarketplace::offers_info(offer_id).is_some()); - - assert_ok!(GatedMarketplace::enlist_buy_offer(Origin::signed(2), m_id, 0, 0, 1200)); + + assert_ok!(GatedMarketplace::enlist_buy_offer(Origin::signed(2), m_id, 0, 0, 1200)); let offer_id2 = GatedMarketplace::offers_by_account(2).iter().next().unwrap().clone(); assert_eq!(GatedMarketplace::offers_info(offer_id2).unwrap().offer_type, OfferType::BuyOrder); @@ -1272,22 +1272,22 @@ fn take_buy_offer_user_does_not_have_enough_balance_shouldnt_work(){ new_test_ext().execute_with(|| { Balances::make_free_balance_be(&1, 100); Balances::make_free_balance_be(&2, 1300); - + assert_ok!(GatedMarketplace::create_marketplace(Origin::signed(1), 2, create_label("my marketplace"))); let m_id = create_label("my marketplace").using_encoded(blake2_256); - + assert_ok!(Uniques::create(Origin::signed(1), 0, 1)); assert_ok!(Uniques::mint(Origin::signed(1), 0, 0, 1)); assert_eq!(Uniques::owner(0, 0).unwrap(), 1); - - assert_ok!(GatedMarketplace::enlist_sell_offer(Origin::signed(1), m_id, 0, 0, 1001)); + + assert_ok!(GatedMarketplace::enlist_sell_offer(Origin::signed(1), m_id, 0, 0, 1001)); let offer_id = GatedMarketplace::offers_by_account(1).iter().next().unwrap().clone(); assert!(GatedMarketplace::offers_info(offer_id).is_some()); - - assert_ok!(GatedMarketplace::enlist_buy_offer(Origin::signed(2), m_id, 0, 0, 1200)); + + assert_ok!(GatedMarketplace::enlist_buy_offer(Origin::signed(2), m_id, 0, 0, 1200)); let offer_id2 = GatedMarketplace::offers_by_account(2).iter().next().unwrap().clone(); assert_eq!(GatedMarketplace::offers_info(offer_id2).unwrap().offer_type, OfferType::BuyOrder); - + Balances::make_free_balance_be(&2, 0); assert_noop!(GatedMarketplace::take_buy_offer(Origin::signed(1), offer_id2), Error::::NotEnoughBalance); }); @@ -1298,18 +1298,18 @@ fn remove_sell_offer_works(){ new_test_ext().execute_with(|| { Balances::make_free_balance_be(&1, 100); Balances::make_free_balance_be(&2, 1300); - + assert_ok!(GatedMarketplace::create_marketplace(Origin::signed(1), 2, create_label("my marketplace"))); let m_id = create_label("my marketplace").using_encoded(blake2_256); - + assert_ok!(Uniques::create(Origin::signed(1), 0, 1)); assert_ok!(Uniques::mint(Origin::signed(1), 0, 0, 1)); assert_eq!(Uniques::owner(0, 0).unwrap(), 1); - - assert_ok!(GatedMarketplace::enlist_sell_offer(Origin::signed(1), m_id, 0, 0, 1001)); + + assert_ok!(GatedMarketplace::enlist_sell_offer(Origin::signed(1), m_id, 0, 0, 1001)); let offer_id = GatedMarketplace::offers_by_account(1).iter().next().unwrap().clone(); assert!(GatedMarketplace::offers_info(offer_id).is_some()); - + assert_ok!(GatedMarketplace::remove_offer(Origin::signed(1), offer_id)); assert_eq!(GatedMarketplace::offers_by_account(1).len(), 0); assert!(GatedMarketplace::offers_info(offer_id).is_none()); @@ -1321,22 +1321,22 @@ fn remove_buy_offer_works(){ new_test_ext().execute_with(|| { Balances::make_free_balance_be(&1, 100); Balances::make_free_balance_be(&2, 1300); - + assert_ok!(GatedMarketplace::create_marketplace(Origin::signed(1), 2, create_label("my marketplace"))); let m_id = create_label("my marketplace").using_encoded(blake2_256); - + assert_ok!(Uniques::create(Origin::signed(1), 0, 1)); assert_ok!(Uniques::mint(Origin::signed(1), 0, 0, 1)); assert_eq!(Uniques::owner(0, 0).unwrap(), 1); - - assert_ok!(GatedMarketplace::enlist_sell_offer(Origin::signed(1), m_id, 0, 0, 1001)); + + assert_ok!(GatedMarketplace::enlist_sell_offer(Origin::signed(1), m_id, 0, 0, 1001)); let offer_id = GatedMarketplace::offers_by_account(1).iter().next().unwrap().clone(); assert!(GatedMarketplace::offers_info(offer_id).is_some()); - assert_ok!(GatedMarketplace::enlist_buy_offer(Origin::signed(2), m_id, 0, 0, 1001)); + assert_ok!(GatedMarketplace::enlist_buy_offer(Origin::signed(2), m_id, 0, 0, 1001)); let offer_id2 = GatedMarketplace::offers_by_account(2).iter().next().unwrap().clone(); assert!(GatedMarketplace::offers_info(offer_id2).is_some()); - + assert_ok!(GatedMarketplace::remove_offer(Origin::signed(2), offer_id2)); assert_eq!(GatedMarketplace::offers_by_account(2).len(), 0); assert!(GatedMarketplace::offers_info(offer_id2).is_none()); @@ -1348,18 +1348,18 @@ fn remove_offer_id_does_not_exist_sholdnt_work(){ new_test_ext().execute_with(|| { Balances::make_free_balance_be(&1, 100); Balances::make_free_balance_be(&2, 1300); - + assert_ok!(GatedMarketplace::create_marketplace(Origin::signed(1), 2, create_label("my marketplace"))); let m_id = create_label("my marketplace").using_encoded(blake2_256); - + assert_ok!(Uniques::create(Origin::signed(1), 0, 1)); assert_ok!(Uniques::mint(Origin::signed(1), 0, 0, 1)); assert_eq!(Uniques::owner(0, 0).unwrap(), 1); - - assert_ok!(GatedMarketplace::enlist_sell_offer(Origin::signed(1), m_id, 0, 0, 1001)); + + assert_ok!(GatedMarketplace::enlist_sell_offer(Origin::signed(1), m_id, 0, 0, 1001)); let offer_id = GatedMarketplace::offers_by_account(1).iter().next().unwrap().clone(); assert!(GatedMarketplace::offers_info(offer_id).is_some()); - + let offer_id2 = offer_id.using_encoded(blake2_256); assert_noop!(GatedMarketplace::remove_offer(Origin::signed(2), offer_id2), Error::::OfferNotFound); }); @@ -1370,18 +1370,18 @@ fn remove_offer_creator_doesnt_match_sholdnt_work(){ new_test_ext().execute_with(|| { Balances::make_free_balance_be(&1, 100); Balances::make_free_balance_be(&2, 1300); - + assert_ok!(GatedMarketplace::create_marketplace(Origin::signed(1), 2, create_label("my marketplace"))); let m_id = create_label("my marketplace").using_encoded(blake2_256); - + assert_ok!(Uniques::create(Origin::signed(1), 0, 1)); assert_ok!(Uniques::mint(Origin::signed(1), 0, 0, 1)); assert_eq!(Uniques::owner(0, 0).unwrap(), 1); - - assert_ok!(GatedMarketplace::enlist_sell_offer(Origin::signed(1), m_id, 0, 0, 1001)); + + assert_ok!(GatedMarketplace::enlist_sell_offer(Origin::signed(1), m_id, 0, 0, 1001)); let offer_id = GatedMarketplace::offers_by_account(1).iter().next().unwrap().clone(); assert!(GatedMarketplace::offers_info(offer_id).is_some()); - + assert_noop!(GatedMarketplace::remove_offer(Origin::signed(2), offer_id), Error::::CannotRemoveOffer); }); } @@ -1391,27 +1391,27 @@ fn remove_offer_status_is_closed_shouldnt_work(){ new_test_ext().execute_with(|| { Balances::make_free_balance_be(&1, 100); Balances::make_free_balance_be(&2, 1300); - + assert_ok!(GatedMarketplace::create_marketplace(Origin::signed(1), 2, create_label("my marketplace"))); let m_id = create_label("my marketplace").using_encoded(blake2_256); - + assert_ok!(Uniques::create(Origin::signed(1), 0, 1)); assert_ok!(Uniques::mint(Origin::signed(1), 0, 0, 1)); assert_eq!(Uniques::owner(0, 0).unwrap(), 1); - assert_ok!(GatedMarketplace::enlist_sell_offer(Origin::signed(1), m_id, 0, 0, 1001)); + assert_ok!(GatedMarketplace::enlist_sell_offer(Origin::signed(1), m_id, 0, 0, 1001)); let offer_id = GatedMarketplace::offers_by_account(1).iter().next().unwrap().clone(); assert!(GatedMarketplace::offers_info(offer_id).is_some()); - - assert_ok!(GatedMarketplace::enlist_buy_offer(Origin::signed(2), m_id, 0, 0, 1200)); + + assert_ok!(GatedMarketplace::enlist_buy_offer(Origin::signed(2), m_id, 0, 0, 1200)); let offer_id2 = GatedMarketplace::offers_by_account(2).iter().next().unwrap().clone(); assert_eq!(GatedMarketplace::offers_info(offer_id2).unwrap().offer_type, OfferType::BuyOrder); - + assert_ok!(GatedMarketplace::take_buy_offer(Origin::signed(1), offer_id2)); assert_eq!(GatedMarketplace::offers_by_item(0, 0).len(), 0); assert_eq!(GatedMarketplace::offers_info(offer_id).unwrap().status, OfferStatus::Closed); assert_noop!(GatedMarketplace::remove_offer(Origin::signed(2), offer_id2), Error::::CannotDeleteOffer); }); - -} \ No newline at end of file + +} From 6cfe5612df9c7360e00985b1e00796acd2a90354 Mon Sep 17 00:00:00 2001 From: Erick Casanova Date: Fri, 11 Nov 2022 19:33:29 -0600 Subject: [PATCH 05/17] small fixes related to RBAC pallet and update testing wrapper --- pallets/fruniques/src/functions.rs | 58 +++++++++++++++++++++++- pallets/fruniques/src/mock.rs | 13 ++++++ pallets/fruniques/src/tests.rs | 73 ++++++++++++++++++++++++------ pallets/fruniques/src/types.rs | 41 ++++++++++++++++- 4 files changed, 168 insertions(+), 17 deletions(-) diff --git a/pallets/fruniques/src/functions.rs b/pallets/fruniques/src/functions.rs index 708e7f92..a837cbda 100644 --- a/pallets/fruniques/src/functions.rs +++ b/pallets/fruniques/src/functions.rs @@ -82,7 +82,63 @@ impl Pallet { } pub fn do_initial_setup() -> DispatchResult { - let _pallet_id = Self::pallet_id(); + + let pallet: IdOrVec = Self::pallet_id(); + + let owner_role_ids = T::Rbac::create_and_set_roles( + pallet.clone(), + FruniqueRole::get_owner_roles())?; + + for owner_role in owner_role_ids { + T::Rbac::create_and_set_permissions( + pallet.clone(), + owner_role, + Permission::owner_permissions())?; + } + + let admin_role_ids = T::Rbac::create_and_set_roles( + pallet.clone(), + FruniqueRole::get_admin_roles())?; + + for admin_role in admin_role_ids { + T::Rbac::create_and_set_permissions( + pallet.clone(), + admin_role, + Permission::admin_permissions())?; + } + + let collaborator_role_ids = T::Rbac::create_and_set_roles( + pallet.clone(), + FruniqueRole::get_collaborator_roles())?; + + for collaborator_role in collaborator_role_ids { + T::Rbac::create_and_set_permissions( + pallet.clone(), + collaborator_role, + Permission::collaborator_permissions())?; + } + + let collector_role_ids = T::Rbac::create_and_set_roles( + pallet.clone(), + FruniqueRole::get_collector_roles())?; + + for collector_role in collector_role_ids { + T::Rbac::create_and_set_permissions( + pallet.clone(), + collector_role, + Permission::collector_permissions())?; + } + + let holder_role_ids = T::Rbac::create_and_set_roles( + pallet.clone(), + FruniqueRole::get_holder_roles())?; + + for holder_role in holder_role_ids { + T::Rbac::create_and_set_permissions( + pallet.clone(), + holder_role, + Permission::holder_permissions())?; + } Ok(()) } diff --git a/pallets/fruniques/src/mock.rs b/pallets/fruniques/src/mock.rs index 160854ac..59901fdf 100644 --- a/pallets/fruniques/src/mock.rs +++ b/pallets/fruniques/src/mock.rs @@ -137,3 +137,16 @@ impl pallet_rbac::Config for Test { // pub(crate) fn new_test_ext() -> sp_io::TestExternalities { // frame_system::GenesisConfig::default().build_storage::().unwrap().into() // } +// Build genesis storage according to the mock runtime. + + +pub fn new_test_ext() -> sp_io::TestExternalities { + let balance_amount = 1_000_000 as u64; + let mut t = frame_system::GenesisConfig::default().build_storage::().unwrap(); + pallet_balances::GenesisConfig:: { + balances: vec![(1, balance_amount), (2, balance_amount), (3, balance_amount)], + }.assimilate_storage(&mut t).expect("assimilate_storage failed"); + let mut t: sp_io::TestExternalities = t.into(); + t.execute_with(|| Fruniques::do_initial_setup().expect("Error on configuring initial setup")); + t +} diff --git a/pallets/fruniques/src/tests.rs b/pallets/fruniques/src/tests.rs index a201bd1c..305021ce 100644 --- a/pallets/fruniques/src/tests.rs +++ b/pallets/fruniques/src/tests.rs @@ -1,6 +1,6 @@ use crate::{mock::*, Error}; +use codec::Encode; use core::convert::TryFrom; -use codec::{Encode}; use frame_support::{assert_noop, assert_ok, BoundedVec}; @@ -40,16 +40,17 @@ fn dummy_description() -> BoundedVec { fn dummy_attributes() -> Vec<(BoundedVec, BoundedVec)> { vec![( - BoundedVec::::try_from(b"dummy key".encode()).expect("Error on encoding key to BoundedVec"), - BoundedVec::::try_from(b"dummy value".encode()).expect("Error on encoding value to BoundedVec"), - )] + BoundedVec::::try_from(b"dummy key".encode()) + .expect("Error on encoding key to BoundedVec"), + BoundedVec::::try_from(b"dummy value".encode()) + .expect("Error on encoding value to BoundedVec"), + )] } fn dummy_empty_attributes() -> Vec<(BoundedVec, BoundedVec)> { vec![] } - #[test] fn create_collection_works() { ExtBuilder::default().build().execute_with(|| { @@ -61,23 +62,49 @@ fn create_collection_works() { fn spawn_extrinsic_works() { ExtBuilder::default().build().execute_with(|| { // A collection must be created before spawning an NFT - assert_noop!(Fruniques::spawn(Origin::signed(1), 0, None, dummy_description(), None), Error::::CollectionNotFound); + assert_noop!( + Fruniques::spawn(Origin::signed(1), 0, None, dummy_description(), None), + Error::::CollectionNotFound + ); // Create a collection assert_ok!(Fruniques::create_collection(Origin::signed(1), dummy_description())); // The first item can not be a child - assert_noop!(Fruniques::spawn(Origin::signed(1), 0, Some((0, false, 10)), dummy_description(), None), Error::::ParentNotFound); + assert_noop!( + Fruniques::spawn(Origin::signed(1), 0, Some((0, false, 10)), dummy_description(), None), + Error::::ParentNotFound + ); // A NFT can be created with empty data assert_ok!(Fruniques::spawn(Origin::signed(1), 0, None, dummy_description(), None)); // A NFT can be created with attributes - assert_ok!(Fruniques::spawn(Origin::signed(1), 0, None, dummy_description(), Some(dummy_attributes()))); + assert_ok!(Fruniques::spawn( + Origin::signed(1), + 0, + None, + dummy_description(), + Some(dummy_attributes()) + )); // A NFT can be hierarchical - assert_ok!(Fruniques::spawn(Origin::signed(1), 0, Some((0, false, 10)), dummy_description(), None)); + assert_ok!(Fruniques::spawn( + Origin::signed(1), + 0, + Some((0, false, 10)), + dummy_description(), + None + )); // The parent must exist - assert_noop!(Fruniques::spawn(Origin::signed(1), 0, Some((100, false, 10)), dummy_description(), None), Error::::ParentNotFound); - + assert_noop!( + Fruniques::spawn( + Origin::signed(1), + 0, + Some((100, false, 10)), + dummy_description(), + None + ), + Error::::ParentNotFound + ); }) } @@ -85,16 +112,32 @@ fn spawn_extrinsic_works() { fn set_attributes_works() { ExtBuilder::default().build().execute_with(|| { // A collection must be created before spawning an NFT - assert_noop!(Fruniques::spawn(Origin::signed(1), 0, None, dummy_description(), None), Error::::CollectionNotFound); + assert_noop!( + Fruniques::spawn(Origin::signed(1), 0, None, dummy_description(), None), + Error::::CollectionNotFound + ); // Create a collection assert_ok!(Fruniques::create_collection(Origin::signed(1), dummy_description())); // Attributes can be added only to existing NFTs - assert_noop!(Fruniques::set_attributes(Origin::signed(1), 0, 0, dummy_attributes()), Error::::FruniqueNotFound); + assert_noop!( + Fruniques::set_attributes(Origin::signed(1), 0, 0, dummy_attributes()), + Error::::FruniqueNotFound + ); // A NFT can be created with empty data assert_ok!(Fruniques::spawn(Origin::signed(1), 0, None, dummy_description(), None)); // Attributes can not be empty - assert_noop!(Fruniques::set_attributes(Origin::signed(1), 0, 0, dummy_empty_attributes()), Error::::AttributesEmpty); - + assert_noop!( + Fruniques::set_attributes(Origin::signed(1), 0, 0, dummy_empty_attributes()), + Error::::AttributesEmpty + ); }) } + +#[test] +fn invite_collaborator_works() { + new_test_ext().execute_with(|| { + // Create a collection + assert_ok!(Fruniques::create_collection(Origin::signed(1), dummy_description())); + }); +} diff --git a/pallets/fruniques/src/types.rs b/pallets/fruniques/src/types.rs index 966e3a8f..60ab39a0 100644 --- a/pallets/fruniques/src/types.rs +++ b/pallets/fruniques/src/types.rs @@ -20,6 +20,10 @@ pub type CollectionDescription = StringLimit; // (ParentId, Hierarchical, Percentage) pub type HierarchicalInfo = (ItemId, bool, u8); +// pub type RoleId = + +// pub type RoleIds = BoundedVec<[u8; 32], <::Rbac as RoleBasedAccessControl<::AccountId>>::MaxRolesPerPallet>; + #[derive(CloneNoBound, Encode, Decode, RuntimeDebugNoBound, Default, TypeInfo, MaxEncodedLen)] pub struct ChildInfo { pub collection_id: CollectionId, @@ -68,6 +72,27 @@ impl FruniqueRole { self.to_vec().using_encoded(blake2_256) } + pub fn get_owner_roles() -> Vec> { + [Self::Owner.to_vec()].to_vec() + } + + pub fn get_admin_roles() -> Vec> { + [Self::Admin.to_vec()].to_vec() + } + + pub fn get_collaborator_roles() -> Vec> { + [Self::Collaborator.to_vec()] + .to_vec() + } + + pub fn get_collector_roles() -> Vec> { + [Self::Collector.to_vec()].to_vec() + } + + pub fn get_holder_roles() -> Vec> { + [Self::Holder.to_vec()].to_vec() + } + pub fn enum_to_vec() -> Vec> { use crate::types::FruniqueRole::*; [Owner.to_vec(), Admin.to_vec(), Collaborator.to_vec(), Collector.to_vec(), Holder.to_vec()] @@ -80,6 +105,8 @@ impl FruniqueRole { Encode, Decode, Clone, Eq, PartialEq, RuntimeDebugNoBound, MaxEncodedLen, TypeInfo, Copy, )] pub enum Permission { + /// Not a permission + None, /// Authorization required and must be approved by the owner Mint, /// Authorization required and must be approved by a holder / collector @@ -91,6 +118,7 @@ pub enum Permission { impl Permission { pub fn to_vec(self) -> Vec { match self { + Self::None => "None".as_bytes().to_vec(), Self::Mint => "Mint".as_bytes().to_vec(), Self::Transfer => "Transfer".as_bytes().to_vec(), Self::InviteCollaborator => "InviteCollaborator".as_bytes().to_vec(), @@ -101,6 +129,12 @@ impl Permission { self.to_vec().using_encoded(blake2_256) } + pub fn get_permissions() -> Vec> { + use crate::types::Permission::*; + [None.to_vec(), Mint.to_vec(), Transfer.to_vec(), InviteCollaborator.to_vec()] + .to_vec() + } + pub fn owner_permissions() -> Vec> { use crate::types::Permission::*; [Mint.to_vec(), Transfer.to_vec(), InviteCollaborator.to_vec()].to_vec() @@ -109,7 +143,7 @@ impl Permission { pub fn admin_permissions() -> Vec> { use crate::types::Permission::*; let mut admin_permissions = - [Mint.to_vec(), Transfer.to_vec(), InviteCollaborator.to_vec()].to_vec(); + [Mint.to_vec(), InviteCollaborator.to_vec()].to_vec(); admin_permissions.append(&mut Permission::holder_permissions()); admin_permissions } @@ -119,6 +153,11 @@ impl Permission { [Mint.to_vec()].to_vec() } + pub fn collector_permissions() -> Vec> { + use crate::types::Permission::*; + [None.to_vec()].to_vec() + } + pub fn holder_permissions() -> Vec> { use crate::types::Permission::*; [Transfer.to_vec()].to_vec() From c04dddb4c3e9849d19cf7b40f5d01ad302b49b98 Mon Sep 17 00:00:00 2001 From: Erick Casanova Date: Fri, 11 Nov 2022 19:33:39 -0600 Subject: [PATCH 06/17] small fixes --- pallets/rbac/src/functions.rs | 66 +++++++++++++++++------------------ 1 file changed, 33 insertions(+), 33 deletions(-) diff --git a/pallets/rbac/src/functions.rs b/pallets/rbac/src/functions.rs index bc21c4b5..d08a0c5e 100644 --- a/pallets/rbac/src/functions.rs +++ b/pallets/rbac/src/functions.rs @@ -10,7 +10,7 @@ use crate::types::*; impl RoleBasedAccessControl for Pallet{ /*---- Basic Insertion of individual storage maps ---*/ /// Scope creation - /// + /// /// Creates a scope within a external pallet using the pallet index. /// ### Parameters: /// - `pallet_id`: The unique pallet identifier. @@ -25,7 +25,7 @@ impl RoleBasedAccessControl for Pallet{ } /// Scope removal - /// + /// /// Removes a scope within a external pallet using the pallet index. /// Executing this function will delete all registered role users. /// ### Parameters: @@ -53,14 +53,14 @@ impl RoleBasedAccessControl for Pallet{ }); // remove on users by scope let _ = >::clear_prefix((pallet_id, scope_id),1000 ,None); - + Ok(()) } /// External pallet storage removal - /// + /// /// Removes all storage associated to a external pallet. - /// + /// /// Executing this function will delete all role lists and permissions linked /// to that pallet. /// ### Parameters: @@ -90,13 +90,13 @@ impl RoleBasedAccessControl for Pallet{ } /// Role creation and coupling with pallet. - /// + /// /// Creates the specified roles if needed and adds them to the pallet. /// Recommended first step to enable RBAC on a external pallet. /// ### Parameters: /// - `pallet_id`: The unique pallet identifier. /// - `roles`: A list of roles to create, encoded in bytes. - fn create_and_set_roles(pallet: IdOrVec, roles: Vec>) -> + fn create_and_set_roles(pallet: IdOrVec, roles: Vec>) -> Result, DispatchError>{ let mut role_ids= Vec::<[u8;32]>::new(); for role in roles{ @@ -109,7 +109,7 @@ impl RoleBasedAccessControl for Pallet{ } /// Role creation. - /// + /// /// Creates a role and returns its identifier, if its already created, /// the function will return the preexisting one. /// ### Parameters: @@ -124,12 +124,12 @@ impl RoleBasedAccessControl for Pallet{ } /// Role coupling with pallet. - /// + /// /// Assigns a previously created role to a pallet. - /// + /// /// ### Parameters: /// - `pallet_id`: The unique pallet identifier. - /// - `role_id`: The unique role identifier. + /// - `role_id`: The unique role identifier. fn set_role_to_pallet(pallet: IdOrVec, role_id: RoleId )-> DispatchResult{ ensure!(>::contains_key(role_id), Error::::RoleNotFound); >::try_mutate(pallet.to_id(), |roles|{ @@ -140,11 +140,11 @@ impl RoleBasedAccessControl for Pallet{ } /// Multiple role coupling with pallet. - /// + /// /// Assigns multiple, previously created roles to a pallet. /// ### Parameters: /// - `pallet_id`: The unique pallet identifier. - /// - `roles`: A list of unique role identifiers. + /// - `roles`: A list of unique role identifiers. fn set_multiple_pallet_roles(pallet: IdOrVec, roles: Vec)->DispatchResult{ let pallet_id = pallet.to_id(); // checks for duplicates: @@ -161,7 +161,7 @@ impl RoleBasedAccessControl for Pallet{ } /// Role assignation to a user - /// + /// /// Assigns a role to a user in a scope context. /// ### Parameters: /// - `user`: The account which the role will be granted. @@ -186,7 +186,7 @@ impl RoleBasedAccessControl for Pallet{ } /// Role removal from the user. - /// + /// /// Removes the specified role from a user in a scope context. the user will no longer /// be able to enforce the removed role and its permissions. /// ### Parameters: @@ -218,13 +218,13 @@ impl RoleBasedAccessControl for Pallet{ } /// Permission creation and coupling with a role. - /// + /// /// Creates the specified permissions if needed and assigns them to a role. /// ### Parameters: /// - `pallet_id`: The unique pallet identifier. /// - `role_id`: The role identifier to which the permissions will /// be linked to. - /// - `permissions`: A list of permissions to create and link, + /// - `permissions`: A list of permissions to create and link, /// encoded in bytes. fn create_and_set_permissions(pallet: IdOrVec, role_id: RoleId, permissions: Vec>)-> Result, DispatchError> { @@ -241,7 +241,7 @@ impl RoleBasedAccessControl for Pallet{ } /// Permission creation - /// + /// /// Creates the specified permission in the specified pallet.. /// ### Parameters: /// - `pallet_id`: The unique pallet identifier. @@ -260,7 +260,7 @@ impl RoleBasedAccessControl for Pallet{ } /// Permission linking to role. - /// + /// /// Assigns a previously created permission to a role. /// ### Parameters: /// - `pallet_id`: The unique pallet identifier. @@ -281,8 +281,8 @@ impl RoleBasedAccessControl for Pallet{ } /// Multiple permissions assignation to a role - /// - /// Assigns multiple, previously created permissions + /// + /// Assigns multiple, previously created permissions /// to a role in a pallet context. /// ### Parameters: /// - `pallet_id`: The unique pallet identifier. @@ -294,7 +294,7 @@ impl RoleBasedAccessControl for Pallet{ let pallet_id_enum = pallet.to_id_enum(); let pallet_id = pallet_id_enum.to_id(); Self::is_role_linked_to_pallet(pallet_id_enum, &role_id )?; - + let role_permissions = >::get(&pallet_id, role_id); for id in permissions.clone(){ ensure!(!role_permissions.contains(&id), Error::::PermissionAlreadyLinkedToRole ); @@ -308,7 +308,7 @@ impl RoleBasedAccessControl for Pallet{ /*---- Helper functions ----*/ /// Authorization function - /// + /// /// Checks if the user has a role that includes the specified permission. /// ### Parameters: /// - `user`: The account to validate. @@ -329,7 +329,7 @@ impl RoleBasedAccessControl for Pallet{ } /// User role validation function - /// + /// /// Checks if the user has at least one of the specified roles. /// ### Parameters: /// - `user`: The account to validate. @@ -346,9 +346,9 @@ impl RoleBasedAccessControl for Pallet{ ); Ok(()) } - + /// Scope validation - /// + /// /// Checks if the scope exists in that pallet. /// ### Parameters: /// - `pallet_id`: The unique pallet identifier. @@ -359,18 +359,18 @@ impl RoleBasedAccessControl for Pallet{ } /// Permission validation. - /// - /// Checks if the permission exists in a pallet context. + /// + /// Checks if the permission exists in a pallet context. /// ### Parameters: /// - `pallet_id`: The unique pallet identifier. /// - `permission_id`: The permission to validate. fn permission_exists(pallet: IdOrVec, permission_id: &PermissionId)->DispatchResult{ ensure!(>::contains_key(pallet.to_id(), permission_id), Error::::PermissionNotFound); - Ok(()) + Ok(()) } /// Role validation - /// + /// /// Checks if the role is linked to the pallet. /// ### Parameters: /// - `pallet_id`: The unique pallet identifier. @@ -383,7 +383,7 @@ impl RoleBasedAccessControl for Pallet{ } /// Permission linking validation - /// + /// /// Checks if the permission is linked to the role in the pallet context. /// ### Parameters: /// - `pallet_id`: The unique pallet identifier. @@ -396,7 +396,7 @@ impl RoleBasedAccessControl for Pallet{ } /// Role list length - /// + /// /// Returns the number of user that have the specified role in a scope context. /// ### Parameters: /// - `pallet_id`: The unique pallet identifier. @@ -431,4 +431,4 @@ impl Pallet{ filtered_vec.dedup(); vec.len() == filtered_vec.len() } -} \ No newline at end of file +} From ce05a9c98b13c003c13a310eb985058f789d622e Mon Sep 17 00:00:00 2001 From: Erick Casanova Date: Thu, 17 Nov 2022 15:41:32 -0600 Subject: [PATCH 07/17] stash --- .gitignore | 1 + pallets/fruniques/src/tests.rs | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/.gitignore b/.gitignore index b386776c..7e172432 100644 --- a/.gitignore +++ b/.gitignore @@ -32,3 +32,4 @@ gcloud-md5-ingress.yml collator-data relay-data .vscode/settings.json +lcov.info diff --git a/pallets/fruniques/src/tests.rs b/pallets/fruniques/src/tests.rs index 305021ce..08ed8570 100644 --- a/pallets/fruniques/src/tests.rs +++ b/pallets/fruniques/src/tests.rs @@ -139,5 +139,10 @@ fn invite_collaborator_works() { new_test_ext().execute_with(|| { // Create a collection assert_ok!(Fruniques::create_collection(Origin::signed(1), dummy_description())); + assert_ok!(Fruniques::invite( + Origin::signed(1), + 0, + 2 + )); }); } From 2978325d603178abd756779fb9657d210b1b17a8 Mon Sep 17 00:00:00 2001 From: Erick Casanova Date: Mon, 21 Nov 2022 13:09:09 -0600 Subject: [PATCH 08/17] update types --- pallets/fund-admin/src/functions.rs | 262 +++++++++++------------ pallets/fund-admin/src/lib.rs | 312 ++++++++++++++-------------- pallets/fund-admin/src/types.rs | 93 ++++++--- 3 files changed, 348 insertions(+), 319 deletions(-) diff --git a/pallets/fund-admin/src/functions.rs b/pallets/fund-admin/src/functions.rs index edda1254..5b1ef8ab 100644 --- a/pallets/fund-admin/src/functions.rs +++ b/pallets/fund-admin/src/functions.rs @@ -11,10 +11,10 @@ use crate::types::*; impl Pallet { // M A I N F U N C T I O N S // -------------------------------------------------------------------------------------------- - + // I N I T I A L S E T U P // -------------------------------------------------------------------------------------------- - + pub fn do_initial_setup() -> DispatchResult{ // Create a global scope for the administrator role let pallet_id = Self::pallet_id(); @@ -25,7 +25,7 @@ impl Pallet { //Admin rol & permissions let administrator_role_id = T::Rbac::create_and_set_roles(pallet_id.clone(), [ProxyRole::Administrator.to_vec()].to_vec())?; T::Rbac::create_and_set_permissions(pallet_id.clone(), administrator_role_id[0], ProxyPermission::administrator_permissions())?; - + //Builder rol & permissions let builder_role_id = T::Rbac::create_and_set_roles(pallet_id.clone(), [ProxyRole::Builder.to_vec()].to_vec())?; T::Rbac::create_and_set_permissions(pallet_id.clone(), builder_role_id[0], ProxyPermission::builder_permissions())?; @@ -47,50 +47,50 @@ impl Pallet { } pub fn do_sudo_add_administrator( - admin: T::AccountId, + admin: T::AccountId, name: FieldName, ) -> DispatchResult{ // create a administrator user account & register it in the rbac pallet Self::sudo_register_admin(admin.clone(), name)?; - + Self::deposit_event(Event::AdministratorAssigned(admin)); Ok(()) } pub fn do_sudo_remove_administrator( - admin: T::AccountId, + admin: T::AccountId, ) -> DispatchResult{ // remove administrator user account & remove it from the rbac pallet Self::sudo_delete_admin(admin.clone())?; - + Self::deposit_event(Event::AdministratorRemoved(admin)); Ok(()) } - + // P R O J E C T S // -------------------------------------------------------------------------------------------- - + /// Create a new project /// - only administrator can create a new project /// Expenditures: (name, type, amount, naics code, jobs multiplier, CUDAction, expenditure_id) /// users = (accountid, role) pub fn do_create_project( - admin: T::AccountId, + admin: T::AccountId, title: FieldName, description: FieldDescription, image: CID, address: FieldName, - creation_date: u64, - completion_date: u64, + creation_date: CreationDate, + completion_date: CompletionDate, expenditures: BoundedVec<( Option>, Option, - Option, - Option>, - Option, + Option, + Option, + Option, CUDAction, - Option<[u8;32]>, + Option, ), T::MaxRegistrationsAtTime>, users: Option Pallet { AssignAction, ), T::MaxRegistrationsAtTime>>, ) -> DispatchResult { - // Ensure admin permissions + // Ensure admin permissions Self::is_authorized(admin.clone(), &Self::get_global_scope(), ProxyPermission::CreateProject)?; - //Add timestamp + //Add timestamp let timestamp = Self::get_timestamp_in_milliseconds().ok_or(Error::::TimestampError)?; //Create project_id //TOREVIEW: We could use only name as project_id or use a method/storagemap to check if the name is already in use - let project_id = (title.clone()).using_encoded(blake2_256); + let project_id: ProjectId = (title.clone()).using_encoded(blake2_256); //ensure completion_date is in the future ensure!(completion_date > creation_date, Error::::CompletionDateMustBeLater); - + //Create project data let project_data = ProjectData:: { builder: Some(BoundedVec::::default()), @@ -121,7 +121,7 @@ impl Pallet { description, image, address, - status: ProjectStatus::default(), + status: ProjectStatus::default(), inflation_rate: None, registration_date: timestamp, creation_date, @@ -156,17 +156,17 @@ impl Pallet { pub fn do_edit_project( admin: T::AccountId, - project_id: [u8;32], + project_id: [u8;32], title: Option>, description: Option>, image: Option>, address: Option>, creation_date: Option, - completion_date: Option, + completion_date: Option, ) -> DispatchResult { - // Ensure admin permissions + // Ensure admin permissions Self::is_authorized(admin.clone(), &Self::get_global_scope(), ProxyPermission::EditProject)?; - + //Ensure project exists ensure!(ProjectsInfo::::contains_key(project_id), Error::::ProjectNotFound); @@ -179,7 +179,7 @@ impl Pallet { //Mutate project data >::try_mutate::<_,_,DispatchError,_>(project_id, |project| { let project = project.as_mut().ok_or(Error::::ProjectNotFound)?; - + if let Some(title) = title { let mod_title = title.into_inner(); project.title = mod_title[0].clone(); @@ -207,7 +207,7 @@ impl Pallet { //TOREVIEW: Check if this is working project.updated_date = current_timestamp; - Ok(()) + Ok(()) })?; //Ensure completion_date is later than creation_date @@ -216,13 +216,13 @@ impl Pallet { // Event Self::deposit_event(Event::ProjectEdited(project_id)); Ok(()) - } + } pub fn do_delete_project( admin: T::AccountId, - project_id: [u8;32], + project_id: [u8;32], ) -> DispatchResult { - // Ensure admin permissions + // Ensure admin permissions Self::is_authorized(admin.clone(), &Self::get_global_scope(), ProxyPermission::DeleteProject)?; //Ensure project exists & get project data @@ -278,21 +278,21 @@ impl Pallet { // Deletes all drawdowns from DrawdownsByProject storagemap >::remove(project_id); - //Event + //Event Self::deposit_event(Event::ProjectDeleted(project_id)); Ok(()) } pub fn do_execute_assign_users( admin: T::AccountId, - project_id: [u8;32], + project_id: [u8;32], users: BoundedVec<( - T::AccountId, + T::AccountId, ProxyRole, AssignAction, ), T::MaxRegistrationsAtTime>, ) -> DispatchResult { - // Ensure admin permissions + // Ensure admin permissions Self::is_authorized(admin.clone(), &Self::get_global_scope(), ProxyPermission::AssignUser)?; //Ensure project exists @@ -320,7 +320,7 @@ impl Pallet { } fn do_assign_user( - project_id: [u8;32], + project_id: [u8;32], user: T::AccountId, role: ProxyRole, ) -> DispatchResult { @@ -333,7 +333,7 @@ impl Pallet { // Ensure user is not assigened to the selected scope (project_id) with the selected role ensure!(!T::Rbac::has_role(user.clone(), Self::pallet_id(), &project_id, [role.id()].to_vec()).is_ok(), Error::::UserAlreadyAssignedToProject); - + // Update project data depending on the role assigned Self::add_project_role(project_id, user.clone(), role)?; @@ -352,15 +352,15 @@ impl Pallet { // Insert user into scope rbac pallet T::Rbac::assign_role_to_user(user.clone(), Self::pallet_id(), &project_id, role.id())?; - //Event + //Event Self::deposit_event(Event::UsersAssignationCompleted(project_id)); Ok(()) } fn do_unassign_user( - project_id: [u8;32], + project_id: [u8;32], user: T::AccountId, - role: ProxyRole, + role: ProxyRole, ) -> DispatchResult { //Ensure user is registered ensure!(>::contains_key(user.clone()), Error::::UserNotRegistered); @@ -404,7 +404,7 @@ impl Pallet { CUDAction, // 3:action ), T::MaxRegistrationsAtTime>, ) -> DispatchResult { - // Ensure admin permissions + // Ensure admin permissions Self::is_authorized(admin.clone(), &Self::get_global_scope(), ProxyPermission::RegisterUser)?; for user in users{ @@ -412,7 +412,7 @@ impl Pallet { CUDAction::Create => { // Create user only needs: account id, name and role Self::do_create_user( - user.0.clone(), + user.0.clone(), user.1.clone().ok_or(Error::::UserNameRequired)?, user.2.clone().ok_or(Error::::UserRoleRequired)?, )?; @@ -537,7 +537,7 @@ impl Pallet { Ok(()) })?; } - + Self::deposit_event(Event::UserDeleted(user.clone())); }, } @@ -547,11 +547,11 @@ impl Pallet { } pub fn do_edit_user( - user: T::AccountId, + user: T::AccountId, name: Option>, image: Option>, email: Option>, - documents: Option>, + documents: Option>, ) -> DispatchResult { //Ensure user is registered ensure!(>::contains_key(user.clone()), Error::::UserNotRegistered); @@ -588,22 +588,22 @@ impl Pallet { // B U D G E T E X P E N D I T U R E // -------------------------------------------------------------------------------------------- - + // Expenditures: (name, type, amount, naics code, jobs multiplier, CUDAction, expenditure_id) pub fn do_execute_expenditures( admin: T::AccountId, - project_id: [u8;32], + project_id: ProjectId, expenditures: BoundedVec<( Option>, // 0: name Option, // 1: type Option, // 2: amount - Option>, // 3: naics code - Option, // 4: jobs multiplier + Option, // 3: naics code + Option, // 4: jobs multiplier CUDAction, // 5: CUDAction - Option<[u8;32]>, // 6: expenditure_id - ), T::MaxRegistrationsAtTime>, + Option, // 6: expenditure_id + ), T::MaxRegistrationsAtTime>, ) -> DispatchResult { - // Ensure admin permissions + // Ensure admin permissions Self::is_authorized(admin.clone(), &Self::get_global_scope(), ProxyPermission::Expenditures)?; // Ensure project exists @@ -653,12 +653,12 @@ impl Pallet { /// Create a new budget expenditure - /// + /// /// # Arguments - /// + /// /// * `admin` - The admin user that creates the budget expenditure /// * `project_id` - The project id where the budget expenditure will be created - /// + /// /// Then we add the budget expenditure data /// * `name` - The name of the budget expenditure /// * `type` - The type of the budget expenditure @@ -666,12 +666,12 @@ impl Pallet { /// * `naics code` - The naics code of the budget expenditure /// * `jobs_multiplier` - The jobs multiplier of the budget expenditure fn do_create_expenditure( - project_id: [u8;32], + project_id: [u8;32], name: BoundedVec, expenditure_type: ExpenditureType, - expenditure_amount: u64, - naics_code: Option>, - jobs_multiplier: Option, + expenditure_amount: ExpenditureAmount, + naics_code: Option, + jobs_multiplier: Option, ) -> DispatchResult { //Ensure project exists ensure!(>::contains_key(project_id), Error::::ProjectNotFound); @@ -686,7 +686,7 @@ impl Pallet { ensure!(!name.is_empty(), Error::::EmptyExpenditureName); // Create expenditure id - let expenditure_id = (project_id, name.clone(), expenditure_type, timestamp).using_encoded(blake2_256); + let expenditure_id: BudgetExpenditureId = (project_id, name.clone(), expenditure_type, timestamp).using_encoded(blake2_256); // NAICS code let get_naics_code = match naics_code { @@ -695,7 +695,7 @@ impl Pallet { }, None => None, }; - + // Create expenditurte data let expenditure_data = ExpenditureData { project_id, @@ -703,7 +703,7 @@ impl Pallet { expenditure_type, expenditure_amount, naics_code: get_naics_code, - jobs_multiplier, + jobs_multiplier, }; // Insert expenditure data into ExpendituresInfo @@ -722,12 +722,12 @@ impl Pallet { } fn do_update_expenditure( - project_id: [u8;32], - expenditure_id: [u8;32], - name: Option>, - expenditure_amount: Option, + project_id: ProjectId, + expenditure_id: BudgetExpenditureId, + name: Option>, + expenditure_amount: Option, naics_code: Option>, - jobs_multiplier: Option, + jobs_multiplier: Option, ) -> DispatchResult { //Ensure project exists ensure!(ProjectsInfo::::contains_key(project_id), Error::::ProjectNotFound); @@ -735,7 +735,7 @@ impl Pallet { // Ensure project is not completed Self::is_project_completed(project_id)?; - // Ensure expenditure_id exists + // Ensure expenditure_id exists ensure!(>::contains_key(expenditure_id), Error::::ExpenditureNotFound); // Mutate expenditure data @@ -768,7 +768,7 @@ impl Pallet { } fn do_delete_expenditure( - expenditure_id: [u8;32], + expenditure_id: BudgetExpenditureId, ) -> DispatchResult { // Ensure expenditure_id exists & get expenditure data let expenditure_data = >::get(expenditure_id).ok_or(Error::::ExpenditureNotFound)?; @@ -790,9 +790,9 @@ impl Pallet { // -------------------------------------------------------------------------------------------- // For now drawdowns functions are private, but in the future they may be public fn do_create_drawdown( - project_id: [u8;32], + project_id: ProjectId, drawdown_type: DrawdownType, - drawdown_number: u32, + drawdown_number: DrawdownNumber, ) -> DispatchResult { // TOOD: Ensure builder permissions //Self::is_superuser(admin.clone(), &Self::get_global_scope(), ProxyRole::Administrator.id())?; @@ -837,9 +837,9 @@ impl Pallet { fn do_initialize_drawdowns( admin: T::AccountId, - project_id: [u8;32], + project_id: ProjectId, ) -> DispatchResult { - // Ensure admin permissions + // Ensure admin permissions Self::is_authorized(admin.clone(), &Self::get_global_scope(), ProxyPermission::Expenditures)?; // Ensure project exists @@ -858,8 +858,8 @@ impl Pallet { } pub fn do_submit_drawdown( - project_id: [u8;32], - drawdown_id: [u8;32], + project_id: ProjectId, + drawdown_id: DrawdownId, ) -> DispatchResult { // Ensure project exists & is not completed Self::is_project_completed(project_id)?; @@ -905,10 +905,10 @@ impl Pallet { pub fn do_approve_drawdown( admin: T::AccountId, - project_id: [u8;32], - drawdown_id: [u8;32], + project_id: ProjectId, + drawdown_id: DrawdownId, ) -> DispatchResult { - // Ensure admin permissions + // Ensure admin permissions Self::is_authorized(admin.clone(), &Self::get_global_scope(), ProxyPermission::Expenditures)?; // Get drawdown data & ensure drawdown exists @@ -919,7 +919,7 @@ impl Pallet { // Ensure drawdown has transactions ensure!(>::contains_key(project_id, drawdown_id), Error::::DrawdownHasNoTransactions); - + // Get drawdown transactions let drawdown_transactions = TransactionsByDrawdown::::try_get(project_id, drawdown_id).map_err(|_| Error::::DrawdownNotFound)?; @@ -961,12 +961,12 @@ impl Pallet { pub fn do_reject_drawdown( admin: T::AccountId, - project_id: [u8;32], - drawdown_id: [u8;32], - transactions_feedback: Option>, + project_id: ProjectId, + drawdown_id: DrawdownId, + transactions_feedback: Option>, drawdown_feedback: Option>, ) -> DispatchResult { - // Ensure admin permissions + // Ensure admin permissions Self::is_authorized(admin.clone(), &Self::get_global_scope(), ProxyPermission::Expenditures)?; // Get drawdown data & ensure drawdown exists @@ -1067,14 +1067,14 @@ impl Pallet { // -------------------------------------------------------------------------------------------- // For now transactions functions are private, but in the future they may be public pub fn do_execute_transactions( - project_id: [u8;32], - drawdown_id: [u8;32], + project_id: ProjectId, + drawdown_id: DrawdownId, transactions: BoundedVec<( - Option<[u8;32]>, // expenditure_id - Option, // amount + Option, // expenditure_id + Option, // amount Option>, //Documents CUDAction, // Action - Option<[u8;32]>, // transaction_id + Option, // transaction_id ), T::MaxRegistrationsAtTime>, ) -> DispatchResult { @@ -1103,10 +1103,10 @@ impl Pallet { )?; }, CUDAction::Update => { - // Update transaction needs (amount, documents, transaction_id) + // Update transaction needs (amount, documents, transaction_id) Self::do_update_transaction( transaction.1, - transaction.2, + transaction.2, transaction.4.ok_or(Error::::TransactionIdNotFound)?, )?; }, @@ -1128,9 +1128,9 @@ impl Pallet { } fn do_create_transaction( - project_id: [u8;32], - drawdown_id: [u8;32], - expenditure_id: [u8;32], + project_id: ProjectId, + drawdown_id: DrawdownId, + expenditure_id: BudgetExpenditureId, amount: u64, documents: Option>, ) -> DispatchResult { @@ -1181,9 +1181,9 @@ impl Pallet { } fn do_update_transaction( - amount: Option, + amount: Option, documents: Option>, - transaction_id: [u8;32], + transaction_id: TransactionId, ) -> DispatchResult { // Ensure transaction exists ensure!(TransactionsInfo::::contains_key(transaction_id), Error::::TransactionNotFound); @@ -1203,11 +1203,11 @@ impl Pallet { // Try mutate transaction data >::try_mutate::<_,_,DispatchError,_>(transaction_id, |transaction_data| { - let mod_transaction_data = transaction_data.as_mut().ok_or(Error::::TransactionNotFound)?; - + let mod_transaction_data = transaction_data.as_mut().ok_or(Error::::TransactionNotFound)?; + // Ensure expenditure exists ensure!(ExpendituresInfo::::contains_key(mod_transaction_data.expenditure_id), Error::::ExpenditureNotFound); - + if let Some(mod_amount) = amount { mod_transaction_data.amount = mod_amount; } @@ -1218,7 +1218,7 @@ impl Pallet { mod_transaction_data.updated_date = timestamp; Ok(()) })?; - + //TOREVIEW: Check if this event is needed Self::deposit_event(Event::TransactionEdited(transaction_id)); @@ -1256,13 +1256,13 @@ impl Pallet { pub fn do_up_bulk_upload( user: T::AccountId, - project_id: [u8;32], - drawdown_id: [u8;32], + project_id: ProjectId, + drawdown_id: DrawdownId, description: FieldDescription, - total_amount: u64, + total_amount: TotalAmount, documents: Documents, ) -> DispatchResult { - // Ensure builder permissions + // Ensure builder permissions Self::is_authorized(user, &project_id, ProxyPermission::UpBulkupload)?; // Ensure project is not completed @@ -1305,9 +1305,9 @@ impl Pallet { // -------------------------------------------------------------------------------------------- pub fn do_execute_inflation_adjustment( admin: T::AccountId, - projects: BoundedVec<([u8;32], Option, CUDAction), T::MaxRegistrationsAtTime>, + projects: BoundedVec<(ProjectId, Option, CUDAction), T::MaxRegistrationsAtTime>, ) -> DispatchResult { - // Ensure admin permissions + // Ensure admin permissions Self::is_authorized(admin.clone(), &Self::get_global_scope(), ProxyPermission::Expenditures)?; // Ensure projects is not empty @@ -1348,7 +1348,7 @@ impl Pallet { // H E L P E R S // -------------------------------------------------------------------------------------------- - + /// Get the current timestamp in milliseconds fn get_timestamp_in_milliseconds() -> Option { let timestamp:u64 = T::Timestamp::now().into(); @@ -1371,7 +1371,7 @@ impl Pallet { fn _change_project_status( admin: T::AccountId, - project_id: [u8;32], + project_id: ProjectId, status: ProjectStatus ) -> DispatchResult { //ensure admin permissions @@ -1387,14 +1387,14 @@ impl Pallet { >::try_mutate::<_,_,DispatchError,_>(project_id, |project| { let project = project.as_mut().ok_or(Error::::ProjectNotFound)?; project.status = status; - Ok(()) + Ok(()) })?; Ok(()) } fn is_project_completion_date_later( - project_id: [u8;32], + project_id: ProjectId, ) -> DispatchResult { // Get project data & ensure project exists let project_data = ProjectsInfo::::get(project_id).ok_or(Error::::ProjectNotFound)?; @@ -1405,7 +1405,7 @@ impl Pallet { } fn add_project_role( - project_id: [u8;32], + project_id: ProjectId, user: T::AccountId, role: ProxyRole, ) -> DispatchResult { @@ -1431,7 +1431,7 @@ impl Pallet { devs.try_push(user.clone()).map_err(|_| Error::::MaxBuildersPerProjectReached)?; } } - Ok(()) + Ok(()) })?; }, ProxyRole::Investor => { @@ -1448,7 +1448,7 @@ impl Pallet { investors.try_push(user.clone()).map_err(|_| Error::::MaxInvestorsPerProjectReached)?; } } - Ok(()) + Ok(()) })?; }, ProxyRole::Issuer => { @@ -1465,7 +1465,7 @@ impl Pallet { issuers.try_push(user.clone()).map_err(|_| Error::::MaxIssuersPerProjectReached)?; } } - Ok(()) + Ok(()) })?; }, ProxyRole::RegionalCenter => { @@ -1482,7 +1482,7 @@ impl Pallet { regional_centers.try_push(user.clone()).map_err(|_| Error::::MaxRegionalCenterPerProjectReached)?; } } - Ok(()) + Ok(()) })?; }, } @@ -1491,7 +1491,7 @@ impl Pallet { } pub fn remove_project_role( - project_id: [u8;32], + project_id: ProjectId, user: T::AccountId, role: ProxyRole, ) -> DispatchResult { @@ -1515,7 +1515,7 @@ impl Pallet { return Err(Error::::UserNotAssignedToProject.into()); } } - Ok(()) + Ok(()) })?; }, ProxyRole::Investor => { @@ -1531,7 +1531,7 @@ impl Pallet { return Err(Error::::UserNotAssignedToProject.into()); } } - Ok(()) + Ok(()) })?; }, ProxyRole::Issuer => { @@ -1547,7 +1547,7 @@ impl Pallet { return Err(Error::::UserNotAssignedToProject.into()); } } - Ok(()) + Ok(()) })?; }, ProxyRole::RegionalCenter => { @@ -1563,16 +1563,16 @@ impl Pallet { return Err(Error::::UserNotAssignedToProject.into()); } } - Ok(()) + Ok(()) })?; }, } Ok(()) } - - + + /// This functions performs the following checks: - /// + /// /// 1. Checks if the user is registered in the system /// 2. Checks if the user has the required role from UsersInfo storage /// 3. Checks if the user is trying to assign an admin role @@ -1586,9 +1586,9 @@ impl Pallet { // Check if the user role trying to be assigned matches the actual user role from UsersInfo storage if user_data.role != role { return Err(Error::::UserCannotHaveMoreThanOneRole.into()); - } + } - // Can't assign an admin to a project, admins exists globally + // Can't assign an admin to a project, admins exists globally if role == ProxyRole::Administrator { return Err(Error::::CannotAddAdminRole.into()); } @@ -1597,7 +1597,7 @@ impl Pallet { } fn is_project_completed( - project_id: [u8;32], + project_id: ProjectId, ) -> DispatchResult { // Get project data & ensure project exists let project_data = ProjectsInfo::::get(project_id).ok_or(Error::::ProjectNotFound)?; @@ -1610,7 +1610,7 @@ impl Pallet { #[allow(dead_code)] fn is_drawdown_editable( - drawdown_id: [u8;32], + drawdown_id: DrawdownId, ) -> DispatchResult { // Get drawdown data & ensure drawdown exists let drawdown_data = DrawdownsInfo::::get(drawdown_id).ok_or(Error::::DrawdownNotFound)?; @@ -1647,7 +1647,7 @@ impl Pallet { } fn is_transaction_editable( - transaction_id: [u8;32], + transaction_id: TransactionId, ) -> DispatchResult { // Get transaction data let transaction_data = TransactionsInfo::::get(transaction_id).ok_or(Error::::TransactionNotFound)?; @@ -1668,7 +1668,7 @@ impl Pallet { pub fn is_authorized( authority: T::AccountId, project_id: &[u8;32], permission: ProxyPermission ) -> DispatchResult{ T::Rbac::is_authorized( authority, - Self::pallet_id(), + Self::pallet_id(), project_id, &permission.id(), ) @@ -1678,7 +1678,7 @@ impl Pallet { fn is_superuser( authority: T::AccountId, scope_global: &[u8;32], rol_id: RoleId ) -> DispatchResult{ T::Rbac::has_role( authority, - Self::pallet_id(), + Self::pallet_id(), scope_global, vec![rol_id], ) @@ -1690,7 +1690,7 @@ impl Pallet { ) -> DispatchResult{ // check if user is already registered ensure!(!>::contains_key(admin.clone()), Error::::UserAlreadyRegistered); - + //Get current timestamp let current_timestamp = Self::get_timestamp_in_milliseconds().ok_or(Error::::TimestampError)?; @@ -1720,7 +1720,7 @@ impl Pallet { fn sudo_delete_admin( admin: T::AccountId ) -> DispatchResult{ // check if user is already registered ensure!(>::contains_key(admin.clone()), Error::::UserNotRegistered); - + //Remove user from UsersInfo storage map >::remove(admin.clone()); @@ -1772,4 +1772,4 @@ impl Pallet { Ok(()) } -} +} diff --git a/pallets/fund-admin/src/lib.rs b/pallets/fund-admin/src/lib.rs index d9760cbb..13559b7d 100644 --- a/pallets/fund-admin/src/lib.rs +++ b/pallets/fund-admin/src/lib.rs @@ -36,7 +36,7 @@ pub mod pallet { pub trait Config: frame_system::Config { //TODO: change all accounts names for users type Event: From> + IsType<::Event>; - + type Moment: Parameter + Default + Scale @@ -49,7 +49,7 @@ pub mod pallet { type Rbac : RoleBasedAccessControl; - type RemoveOrigin: EnsureOrigin; + type RemoveOrigin: EnsureOrigin; #[pallet::constant] type MaxDocuments: Get; @@ -106,8 +106,8 @@ pub mod pallet { #[pallet::storage] #[pallet::getter(fn users_info)] pub(super) type UsersInfo = StorageMap< - _, - Blake2_128Concat, + _, + Blake2_128Concat, T::AccountId, // Key account_id UserData, // Value UserData OptionQuery, @@ -116,9 +116,9 @@ pub mod pallet { #[pallet::storage] #[pallet::getter(fn projects_info)] pub(super) type ProjectsInfo = StorageMap< - _, - Identity, - [u8;32], // Key project_id + _, + Identity, + ProjectId, // Key project_id ProjectData, // Value ProjectData OptionQuery, >; @@ -126,9 +126,9 @@ pub mod pallet { #[pallet::storage] #[pallet::getter(fn users_by_project)] pub(super) type UsersByProject = StorageMap< - _, - Identity, - [u8;32], // Key project_id + _, + Identity, + ProjectId, // Key project_id BoundedVec, // Value users ValueQuery, >; @@ -136,8 +136,8 @@ pub mod pallet { #[pallet::storage] #[pallet::getter(fn projects_by_user)] pub(super) type ProjectsByUser = StorageMap< - _, - Blake2_128Concat, + _, + Blake2_128Concat, T::AccountId, // Key account_id BoundedVec<[u8;32], T::MaxProjectsPerUser>, // Value projects ValueQuery, @@ -146,9 +146,9 @@ pub mod pallet { #[pallet::storage] #[pallet::getter(fn expenditures_info)] pub(super) type ExpendituresInfo = StorageMap< - _, - Identity, - [u8;32], // Key expenditure_id + _, + Identity, + BudgetExpenditureId, // Key expenditure_id ExpenditureData, // Value ExpenditureData OptionQuery, >; @@ -156,9 +156,9 @@ pub mod pallet { #[pallet::storage] #[pallet::getter(fn expenditures_by_project)] pub(super) type ExpendituresByProject = StorageMap< - _, - Identity, - [u8;32], // Key project_id + _, + Identity, + ProjectId, // Key project_id BoundedVec<[u8;32], T::MaxExpendituresPerProject>, // Value expenditures ValueQuery, >; @@ -166,29 +166,29 @@ pub mod pallet { #[pallet::storage] #[pallet::getter(fn drawdowns_info)] pub(super) type DrawdownsInfo = StorageMap< - _, - Identity, - [u8;32], // Key drawdown id + _, + Identity, + DrawdownId, // Key drawdown id DrawdownData, // Value DrawdownData OptionQuery, >; - + #[pallet::storage] #[pallet::getter(fn drawdowns_by_project)] pub(super) type DrawdownsByProject = StorageMap< - _, - Identity, - [u8;32], // Key project_id - BoundedVec<[u8;32], T::MaxDrawdownsPerProject>, // Value Drawdowns + _, + Identity, + ProjectId, // Key project_id + BoundedVec, // Value Drawdowns ValueQuery, >; #[pallet::storage] #[pallet::getter(fn transactions_info)] pub(super) type TransactionsInfo = StorageMap< - _, - Identity, - [u8;32], // Key transaction id + _, + Identity, + TransactionId, // Key transaction id TransactionData, // Value TransactionData OptionQuery, >; @@ -196,14 +196,14 @@ pub mod pallet { #[pallet::storage] #[pallet::getter(fn transactions_by_drawdown)] pub(super) type TransactionsByDrawdown = StorageDoubleMap< - _, - Identity, - [u8;32], //K1: project id - Identity, - [u8;32], //K2: drawdown id - BoundedVec<[u8;32], T::MaxTransactionsPerDrawdown>, // Value transactions + _, + Identity, + ProjectId, //K1: project id + Identity, + DrawdownId, //K2: drawdown id + BoundedVec, // Value transactions ValueQuery - >; + >; // E V E N T S // ------------------------------------------------------------------------------------------------------------ @@ -212,15 +212,15 @@ pub mod pallet { #[pallet::generate_deposit(pub(super) fn deposit_event)] pub enum Event { /// Project was created successfully - ProjectCreated(T::AccountId, [u8;32]), + ProjectCreated(T::AccountId, ProjectId), /// Proxy initial setup completed ProxySetupCompleted, /// User registered successfully UserAdded(T::AccountId), /// Project was edited - ProjectEdited([u8;32]), + ProjectEdited(ProjectId), /// Project was deleted - ProjectDeleted([u8;32]), + ProjectDeleted(ProjectId), /// Administrator added AdministratorAssigned(T::AccountId), /// Administrator removed @@ -236,17 +236,17 @@ pub mod pallet { /// Expenditure was created successfully ExpenditureCreated, /// Expenditure was edited successfully - ExpenditureEdited([u8;32]), + ExpenditureEdited(BudgetExpenditureId), /// Expenditure was deleted successfully - ExpenditureDeleted([u8;32]), + ExpenditureDeleted(BudgetExpenditureId), /// Trasactions was completed successfully TransactionsCompleted, /// Transaction was created successfully - TransactionCreated([u8;32]), + TransactionCreated(TransactionId), /// Transaction was edited successfully - TransactionEdited([u8;32]), + TransactionEdited(TransactionId), /// Transaction was deleted successfully - TransactionDeleted([u8;32]), + TransactionDeleted(TransactionId), /// Users extrinsic was completed successfully UsersExecuted, /// Assign users extrinsic was completed successfully @@ -289,7 +289,7 @@ pub mod pallet { MaxProjectsPerUserReached, /// User is not assigned to the project UserNotAssignedToProject, - /// Can not register administrator role + /// Can not register administrator role CannotRegisterAdminRole, /// Max number of builders per project reached MaxBuildersPerProjectReached, @@ -318,7 +318,7 @@ pub mod pallet { /// Drowdown id is not found DrawdownNotFound, /// Invalid amount - InvalidAmount, + InvalidAmount, /// Documents field is empty DocumentsIsEmpty, /// Transaction id is not found @@ -342,7 +342,7 @@ pub mod pallet { /// User does not have the specified role UserDoesNotHaveRole, /// Transactions vector is empty - EmptyTransactions, + EmptyTransactions, /// Transaction ID was not found in do_execute_transaction TransactionIdNotFound, /// Drawdown can not be submitted if does not has any transactions @@ -402,12 +402,12 @@ pub mod pallet { // ------------------------------------------------------------------------------------------------------------ #[pallet::call] impl Pallet { - // I N I T I A L + // I N I T I A L // -------------------------------------------------------------------------------------------- /// Initialize the pallet by setting the permissions for each role - /// & the global scope - /// - /// # Considerations: + /// & the global scope + /// + /// # Considerations: /// - This function can only be called once /// - This function can only be called usinf the sudo pallet #[transactional] @@ -421,17 +421,17 @@ pub mod pallet { } /// Adds an administrator account to the site - /// + /// /// # Parameters: /// - origin: The sudo account /// - admin: The administrator account to be added /// - name: The name of the administrator account - /// + /// /// # Considerations: /// - This function can only be called using the sudo pallet /// - This function is used to add the first administrator to the site /// - If the user is already registered, the function will return an error: UserAlreadyRegistered - /// - This function grants administator permissions to the user from the rbac pallet + /// - This function grants administator permissions to the user from the rbac pallet /// - Administator role have global scope permissions #[transactional] #[pallet::weight(10_000 + T::DbWeight::get().writes(10))] @@ -446,19 +446,19 @@ pub mod pallet { } /// Removes an administrator account from the site - /// + /// /// # Parameters: /// - origin: The sudo account /// - admin: The administrator account to be removed - /// + /// /// # Considerations: /// - This function can only be called using the sudo pallet /// - This function is used to remove any administrator from the site /// - If the user is not registered, the function will return an error: UserNotFound /// - This function removes administator permissions of the user from the rbac pallet - /// + /// /// # Note: - /// WARNING: Administrators can remove themselves from the site, + /// WARNING: Administrators can remove themselves from the site, /// but they can add themselves back #[transactional] #[pallet::weight(10_000 + T::DbWeight::get().writes(10))] @@ -474,38 +474,38 @@ pub mod pallet { // U S E R S // -------------------------------------------------------------------------------------------- - /// This extrinsic is used to create, update, or delete a user account - /// + /// This extrinsic is used to create, update, or delete a user account + /// /// # Parameters: /// - origin: The administrator account - /// - user: The target user account to be registered, updated, or deleted. + /// - user: The target user account to be registered, updated, or deleted. /// It is an array of user accounts where each entry it should be a tuple of the following: /// - 0: The user account /// - 1: The user name /// - 2: The user role /// - 3: The CUD operation to be performed on the user account. CUD action is ALWAYS required. - /// + /// /// # Considerations: /// - Users parameters are optional because depends on the CUD action as follows: /// * **Create**: The user account, user name, user role & CUD action are required /// * **Update**: The user account & CUD action are required. The user name & user role are optionals. - /// * **Delete**: The user account & CUD action are required. + /// * **Delete**: The user account & CUD action are required. /// - This function can only be called by an administrator account - /// - Multiple users can be registered, updated, or deleted at the same time, but + /// - Multiple users can be registered, updated, or deleted at the same time, but /// the user account must be unique. Multiple actions over the same user account /// in the same call, it could result in an unexpected behavior. /// - If the user is already registered, the function will return an error: UserAlreadyRegistered /// - If the user is not registered, the function will return an error: UserNotFound - /// + /// /// # Note: /// WARNING: It is possible to register, update, or delete administators accounts using this extrinsic, /// but administrators can not delete themselves. - /// WARNING: This function only registers, updates, or deletes users from the site. + /// WARNING: This function only registers, updates, or deletes users from the site. /// DOESN'T grant or remove permissions from the rbac pallet. #[transactional] #[pallet::weight(10_000 + T::DbWeight::get().writes(1))] pub fn users( - origin: OriginFor, + origin: OriginFor, users: BoundedVec<( T::AccountId, // account id Option>, // name @@ -519,16 +519,16 @@ pub mod pallet { } /// Edits an user account - /// + /// /// # Parameters: /// - origin: The user account which is being edited /// - name: The name of the user account which is being edited /// - image: The image of the user account which is being edited /// - email: The email of the user account which is being edited /// - documents: The documents of the user account which is being edited. - /// ONLY available for the investor role. - /// - /// + /// ONLY available for the investor role. + /// + /// /// # Considerations: /// - If the user is not registered, the function will return an error: UserNotFound /// - This function can only be called by a registered user account @@ -538,21 +538,21 @@ pub mod pallet { #[transactional] #[pallet::weight(10_000 + T::DbWeight::get().writes(1))] pub fn users_edit_user( - origin: OriginFor, + origin: OriginFor, name: Option>, image: Option>, email: Option>, - documents: Option> + documents: Option> ) -> DispatchResult { let who = ensure_signed(origin)?; Self::do_edit_user(who, name, image, email, documents) - } + } // P R O J E C T S // -------------------------------------------------------------------------------------------- /// Registers a new project. - /// + /// /// # Parameters: /// - origin: The administrator account /// - title: The title of the project @@ -575,7 +575,7 @@ pub mod pallet { /// * 0: The user account /// * 1: The user role /// * 2: The AssignAction to be performed on the user. - /// + /// /// # Considerations: /// - This function can only be called by an administrator account /// - For users assignation, the user account must be registered. If the user is not registered, @@ -584,30 +584,30 @@ pub mod pallet { /// flow, the expenditures are always created. The naics code & the jobs multiplier /// can be added later by the administrator. /// - Creating a project will automatically create a scope for the project. - /// + /// /// # Note: /// WARNING: If users are provided, the function will assign the users to the project, granting them /// permissions in the rbac pallet. #[pallet::weight(10_000 + T::DbWeight::get().writes(1))] pub fn projects_create_project( - origin: OriginFor, - title: FieldName, - description: FieldDescription, - image: CID, + origin: OriginFor, + title: FieldName, + description: FieldDescription, + image: Option, address: FieldName, - creation_date: u64, - completion_date: u64, + creation_date: CreationDate, + completion_date: CompletionDate, expenditures: BoundedVec<( Option>, Option, - Option, - Option>, - Option, + Option, + Option, + Option, CUDAction, - Option<[u8;32]>, + Option, ), T::MaxRegistrationsAtTime>, users: Option>, @@ -618,7 +618,7 @@ pub mod pallet { } /// Edits a project. - /// + /// /// # Parameters: /// - origin: The administrator account /// - project_id: The selected project id that will be edited @@ -628,14 +628,14 @@ pub mod pallet { /// - address: The address of the project to be edited /// - creation_date: The creation date of the project to be edited /// - completion_date: The completion date of the project to be edited - /// + /// /// # Considerations: /// - This function can only be called by an administrator account /// - ALL parameters are optional because depends on what is being edited /// - The project id is required because it is the only way to identify the project - /// - The project id must be registered. If the project is not registered, + /// - The project id must be registered. If the project is not registered, /// the function will return an error: ProjectNotFound - /// - It is not possible to edit the expenditures or the users assigned to the project + /// - It is not possible to edit the expenditures or the users assigned to the project /// through this function. For that, the administrator must use the extrinsics: /// * expenditures /// * projects_assign_user @@ -644,14 +644,14 @@ pub mod pallet { #[transactional] #[pallet::weight(10_000 + T::DbWeight::get().writes(1))] pub fn projects_edit_project( - origin: OriginFor, - project_id: [u8;32], + origin: OriginFor, + project_id: ProjectId, title: Option>, description: Option>, image: Option>, address: Option>, - creation_date: Option, - completion_date: Option, + creation_date: Option, + completion_date: Option, ) -> DispatchResult { let who = ensure_signed(origin)?; // origin need to be an admin @@ -659,25 +659,25 @@ pub mod pallet { } /// Deletes a project. - /// + /// /// # Parameters: /// - origin: The administrator account /// - project_id: The selected project id that will be deleted - /// + /// /// # Considerations: /// - This function can only be called by an administrator account /// - The project id is required because it is the only way to identify the project /// - The project id must be registered. If the project is not registered, /// the function will return an error: ProjectNotFound - /// + /// /// # Note: /// - WARNING: Deleting a project will delete ALL stored information associated with the project. /// BE CAREFUL. #[transactional] #[pallet::weight(10_000 + T::DbWeight::get().writes(1))] pub fn projects_delete_project( - origin: OriginFor, - project_id: [u8;32], + origin: OriginFor, + project_id: ProjectId, ) -> DispatchResult { let who = ensure_signed(origin)?; // origin need to be an admin @@ -685,34 +685,34 @@ pub mod pallet { } /// Assigns a user to a project. - /// + /// /// # Parameters: /// - origin: The administrator account /// - project_id: The selected project id where user will be assigned - /// - users: The users to be assigned to the project. This is a vector of tuples + /// - users: The users to be assigned to the project. This is a vector of tuples /// where each entry is composed by: /// * 0: The user account id /// * 1: The user role /// * 2: The AssignAction to be performed. (Assign or Unassign) - /// + /// /// # Considerations: /// - This function can only be called by an administrator account /// - This extrinsic allows multiple users to be assigned/unassigned at the same time. /// - The project id is required because it is the only way to identify the project /// - This extrinsic is used for both assigning and unassigning users to a project - /// depending on the AssignAction. + /// depending on the AssignAction. /// - After a user is assigned to a project, the user will be able to perform actions /// in the project depending on the role assigned to the user. /// - After a user is unassigned from a project, the user will not be able to perform actions /// in the project anymore. /// - If the user is already assigned to the project, the function will return an erro. - /// + /// /// # Note: /// - WARNING: ALL provided users needs to be registered in the site. If any of the users /// is not registered, the function will return an error. /// - Assigning or unassigning a user to a project will add or remove permissions to the user - /// from the RBAC pallet. - /// - Warning: Cannot assign a user to a project with a different role than the one they + /// from the RBAC pallet. + /// - Warning: Cannot assign a user to a project with a different role than the one they /// have in UsersInfo. If the user has a different role, the function will return an error. /// - Warning: Cannot unassign a user from a project with a different role than the one they /// have in UsersInfo. If the user has a different role, the function will return an error. @@ -721,10 +721,10 @@ pub mod pallet { #[transactional] #[pallet::weight(10_000 + T::DbWeight::get().writes(1))] pub fn projects_assign_user( - origin: OriginFor, - project_id: [u8;32], + origin: OriginFor, + project_id: ProjectId, users: BoundedVec<( - T::AccountId, + T::AccountId, ProxyRole, AssignAction, ), T::MaxRegistrationsAtTime>, @@ -734,10 +734,10 @@ pub mod pallet { Self::do_execute_assign_users(who, project_id, users) } - // B U D G E T E X P E N D I T U R E + // B U D G E T E X P E N D I T U R E // -------------------------------------------------------------------------------------------- /// This extrinsic is used to create, update or delete expenditures. - /// + /// /// # Parameters: /// - origin: The administrator account /// - project_id: The selected project id where the expenditures will be created/updated/deleted @@ -750,7 +750,7 @@ pub mod pallet { /// * 4: The jobs multiplier of the expenditure /// * 5: The expenditure action to be performed. (Create, Update or Delete) /// * 6: The expenditure id. This is only used when updating or deleting an expenditure. - /// + /// /// # Considerations: /// - Naics code and jobs multiplier are always optional. /// - This function can only be called by an administrator account @@ -767,17 +767,17 @@ pub mod pallet { #[transactional] #[pallet::weight(10_000 + T::DbWeight::get().writes(1))] pub fn expenditures( - origin: OriginFor, - project_id: [u8;32], + origin: OriginFor, + project_id: ProjectId, expenditures: BoundedVec<( Option>, // name Option, // type - Option, // amount + Option, // amount Option>, // naics code - Option, // jobs multiplier + Option, // jobs multiplier CUDAction, // action - Option<[u8;32]>, // expenditure_id - ), T::MaxRegistrationsAtTime>, + Option, // expenditure_id + ), T::MaxRegistrationsAtTime>, ) -> DispatchResult { let who = ensure_signed(origin)?; // origin need to be an admin @@ -789,7 +789,7 @@ pub mod pallet { /// This extrinsic is used to create, update or delete transactions. /// Transactions status can be saved as draft or submitted. - /// + /// /// # Parameters: /// - origin: The user account who is creating the transactions /// - project_id: The selected project id where the transactions will be created @@ -801,9 +801,9 @@ pub mod pallet { /// * 2: Documents associated to the transaction /// * 3: The transaction action to be performed. (Create, Update or Delete) /// * 4: The transaction id. This is only used when updating or deleting a transaction. - /// - submit: If true, the transactions will be submitted. + /// - submit: If true, the transactions will be submitted. /// If false, the transactions will be saved as draft. - /// + /// /// # Considerations: /// - This function can only be called by a builder role account /// - This extrinsic allows multiple transactions to be created/updated/deleted at the same time. @@ -819,11 +819,11 @@ pub mod pallet { /// - If a drawdown is submitted, all transactions must be submitted too. If the drawdown do not contain /// any transaction, it will be returned an error. /// - After a drawdown is submitted, it can not be updated or deleted. - /// - After a drawdown is rejected, builders will use this extrinsic to update the transactions. + /// - After a drawdown is rejected, builders will use this extrinsic to update the transactions. #[transactional] #[pallet::weight(10_000 + T::DbWeight::get().writes(1))] pub fn submit_drawdown( - origin: OriginFor, + origin: OriginFor, project_id: [u8;32], drawdown_id: [u8;32], transactions: Option DispatchResult { let who = ensure_signed(origin)?; // origin need to be an admin - // Ensure builder permissions + // Ensure builder permissions Self::is_authorized(who, &project_id, ProxyPermission::SubmitDrawdown)?; match submit{ @@ -867,13 +867,13 @@ pub mod pallet { } /// Approves a drawdown - /// + /// /// # Parameters: /// ### For EB5 drawdowns: /// - origin: The administator account who is approving the drawdown /// - project_id: The selected project id where the drawdown will be approved /// - drawdown_id: The selected drawdown id to be approved - /// + /// /// ### For Construction Loan & Developer Equity (bulk uploads) drawdowns: /// - origin: The administator account who is approving the drawdown /// - project_id: The selected project id where the drawdown will be approved @@ -887,10 +887,10 @@ pub mod pallet { /// * 2: Documents associated to the transaction /// * 3: The transaction action to be performed. (Create, Update or Delete) /// * 4: The transaction id. This is only used when updating or deleting a transaction. - /// + /// /// # Considerations: /// - This function can only be called by an administrator account - /// - This extrinsic allows multiple transactions to be created/updated/deleted at the same time + /// - This extrinsic allows multiple transactions to be created/updated/deleted at the same time /// (only for Construction Loan & Developer Equity drawdowns). /// - Transaction parameters are optional because depends on the action to be performed: /// * **Create**: Expenditure id, Amount, Documents & Action are required. @@ -905,7 +905,7 @@ pub mod pallet { #[transactional] #[pallet::weight(10_000 + T::DbWeight::get().writes(1))] pub fn approve_drawdown( - origin: OriginFor, + origin: OriginFor, project_id: [u8;32], drawdown_id: [u8;32], bulkupload: Option, @@ -965,31 +965,31 @@ pub mod pallet { } /// Rejects a drawdown - /// + /// /// # Parameters: /// - origin: The administator account who is rejecting the drawdown /// - project_id: The selected project id where the drawdown will be rejected /// - drawdown_id: The selected drawdown id to be rejected - /// + /// /// Then the next two feedback parameters are optional because depends on the drawdown type: /// #### EB5 drawdowns: - /// - transactions_feedback: Administrator will provide feedback for each transaction + /// - transactions_feedback: Administrator will provide feedback for each transaction /// that is wrong. This is a vector of tuples where each entry is composed by: /// * 0: The transaction id /// * 1: The transaction feedback - /// + /// /// #### Construction Loan & Developer Equity drawdowns: /// - drawdown_feedback: Administrator will provide feedback for the WHOLE drawdown. - /// + /// /// # Considerations: /// - This function can only be called by an administrator account - /// - This extrinsic allows multiple transactions to be rejected at the same time + /// - This extrinsic allows multiple transactions to be rejected at the same time /// (only for EB5 drawdowns). - /// - For EB5 drawdowns, the administrator can provide feedback for each transaction + /// - For EB5 drawdowns, the administrator can provide feedback for each transaction /// that is wrong. - /// - For Construction Loan & Developer Equity drawdowns, the administrator can provide + /// - For Construction Loan & Developer Equity drawdowns, the administrator can provide /// feedback for the WHOLE drawdown. - /// - After a builder re-submits a drawdown, the administrator will have to review + /// - After a builder re-submits a drawdown, the administrator will have to review /// the drawdown again. /// - After a builder re-submits a drawdown, the feedback field will be cleared automatically. /// - If a single EB5 transaction is wrong, the administrator WILL reject the WHOLE drawdown. @@ -997,7 +997,7 @@ pub mod pallet { #[transactional] #[pallet::weight(10_000 + T::DbWeight::get().writes(1))] pub fn reject_drawdown( - origin: OriginFor, + origin: OriginFor, project_id: [u8;32], drawdown_id: [u8;32], transactions_feedback: Option>, @@ -1009,7 +1009,7 @@ pub mod pallet { } /// Bulk upload drawdowns. - /// + /// /// # Parameters: /// - origin: The administator account who is uploading the drawdowns /// - project_id: The selected project id where the drawdowns will be uploaded @@ -1017,7 +1017,7 @@ pub mod pallet { /// - description: The description of the drawdown provided by the builder /// - total_amount: The total amount of the drawdown /// - documents: The documents provided by the builder for the drawdown - /// + /// /// # Considerations: /// - This function can only be called by a builder account /// - This extrinsic allows only one drawdown to be uploaded at the same time. @@ -1025,13 +1025,13 @@ pub mod pallet { /// - Only available for Construction Loan & Developer Equity drawdowns. /// - After a builder uploads a drawdown, the administrator will have to review it. /// - After a builder re-submits a drawdown, the feedback field will be cleared automatically. - /// - Bulkuploads does not allow individual transactions. - /// - After a builder uploads a drawdown, the administrator will have to + /// - Bulkuploads does not allow individual transactions. + /// - After a builder uploads a drawdown, the administrator will have to /// insert each transaction manually. #[transactional] #[pallet::weight(10_000 + T::DbWeight::get().writes(1))] pub fn up_bulkupload( - origin: OriginFor, + origin: OriginFor, project_id: [u8;32], drawdown_id: [u8;32], description: FieldDescription, @@ -1044,7 +1044,7 @@ pub mod pallet { } /// Modifies the inflation rate of a project. - /// + /// /// # Parameters: /// - origin: The administator account who is modifying the inflation rate /// - projects: The projects where the inflation rate will be modified. @@ -1052,21 +1052,21 @@ pub mod pallet { /// * 0: The project id /// * 1: The inflation rate /// * 2: The action to be performed (Create, Update or Delete) - /// + /// /// # Considerations: /// - This function can only be called by an administrator account /// - This extrinsic allows multiple projects to be modified at the same time. - /// - The inflation rate can be created, updated or deleted. + /// - The inflation rate can be created, updated or deleted. /// - The inflation rate is optional because depends on the CUDAction parameter: /// * **Create**: The inflation rate will be created. Project id, inflation rate and action are required. /// * **Update**: The inflation rate will be updated. Project id, inflation rate and action are required. /// * **Delete**: The inflation rate will be deleted. Project id and action are required. /// - The inflation rate can only be modified if the project is in the "started" status. - /// + /// #[transactional] #[pallet::weight(10_000 + T::DbWeight::get().writes(1))] pub fn inflation_rate( - origin: OriginFor, + origin: OriginFor, projects: BoundedVec<([u8;32], Option, CUDAction), T::MaxRegistrationsAtTime>, ) -> DispatchResult { let who = ensure_signed(origin)?; @@ -1075,13 +1075,13 @@ pub mod pallet { } /// Kill all the stored data. - /// + /// /// This function is used to kill ALL the stored data. /// Use it with caution! - /// + /// /// ### Parameters: - /// - `origin`: The user who performs the action. - /// + /// - `origin`: The user who performs the action. + /// /// ### Considerations: /// - This function is only available to the `admin` with sudo access. #[transactional] @@ -1107,4 +1107,4 @@ pub mod pallet { } } -} \ No newline at end of file +} diff --git a/pallets/fund-admin/src/types.rs b/pallets/fund-admin/src/types.rs index 037a87f2..254c9671 100644 --- a/pallets/fund-admin/src/types.rs +++ b/pallets/fund-admin/src/types.rs @@ -9,6 +9,35 @@ pub type FieldDescription = BoundedVec>; pub type CID = BoundedVec>; pub type Documents = BoundedVec<(FieldName,CID), ::MaxDocuments>; +// Projects +pub type ProjectId = [u8; 32]; +pub type CreationDate = u64; +pub type CompletionDate = u64; +pub type UpdatedDate = u64; +pub type RegistrationDate = u64; + +// Users +pub type DateRegistered = u64; + +// Transactions +pub type TransactionId = [u8; 32]; + +// Drawdowns +pub type DrawdownId = [u8; 32]; +pub type DrawdownNumber = u32; + +// Budget expenditures +pub type BudgetExpenditureId = [u8; 32]; +pub type ExpenditureAmount = u64; +pub type Balance = u64; +pub type NAICSCode = BoundedVec::MaxBoundedVecs>; +pub type JobsMultiplier = u32; +pub type InflationRate = u32; + +// Miscellaneous +pub type CreatedDate = u64; +pub type CloseDate = u64; +pub type TotalAmount = u64; #[derive(CloneNoBound, Encode, Decode, RuntimeDebugNoBound, TypeInfo, MaxEncodedLen,)] #[scale_info(skip_type_params(T))] @@ -21,13 +50,13 @@ pub struct ProjectData { pub title: FieldName, pub description: FieldDescription, pub image: CID, - pub address: FieldName, + pub address: FieldName, pub status: ProjectStatus, - pub inflation_rate: Option, - pub creation_date: u64, - pub completion_date: u64, - pub registration_date: u64, - pub updated_date: u64, + pub inflation_rate: Option, + pub creation_date: CreationDate, + pub completion_date: CompletionDate, + pub registration_date: RegistrationDate, + pub updated_date: UpdatedDate, } #[derive(Encode, Decode, Clone, Eq, PartialEq, RuntimeDebugNoBound, MaxEncodedLen, TypeInfo, Copy)] @@ -49,7 +78,7 @@ pub struct UserData { pub name: FieldName, pub role: ProxyRole, pub image: CID, - pub date_registered: u64, + pub date_registered: DateRegistered, pub email: FieldName, pub documents: Option>, } @@ -66,19 +95,19 @@ pub enum ProxyRole { #[derive(CloneNoBound, Encode, Decode, RuntimeDebugNoBound, Default, TypeInfo, MaxEncodedLen)] pub struct ExpenditureData { - pub project_id: [u8;32], + pub project_id: ProjectId, pub name: FieldName, pub expenditure_type: ExpenditureType, - pub expenditure_amount: u64, + pub expenditure_amount: ExpenditureAmount, pub naics_code: Option, - pub jobs_multiplier: Option, + pub jobs_multiplier: Option, } #[derive(Encode, Decode, Clone, Eq, PartialEq, RuntimeDebugNoBound, MaxEncodedLen, TypeInfo, Copy)] pub enum ExpenditureType { - HardCost, + HardCost, SoftCost, - Operational, + Operational, Others, } @@ -92,9 +121,9 @@ impl Default for ExpenditureType { #[derive(CloneNoBound, Encode, Decode, RuntimeDebugNoBound, Default, TypeInfo, MaxEncodedLen)] pub struct BudgetData { pub expenditure_id: [u8;32], - pub balance: u64, - pub created_date: u64, - pub updated_date: u64, + pub balance: Balance, + pub created_date: CreatedDate, + pub updated_date: UpdatedDate, } @@ -103,20 +132,20 @@ pub struct BudgetData { #[codec(mel_bound())] pub struct DrawdownData { pub project_id: [u8;32], - pub drawdown_number: u32, + pub drawdown_number: DrawdownNumber, pub drawdown_type: DrawdownType, - pub total_amount: u64, + pub total_amount: TotalAmount, pub status: DrawdownStatus, pub documents: Option>, pub description: Option, pub feedback: Option, - pub created_date: u64, - pub close_date: u64, + pub created_date: CreatedDate, + pub close_date: CloseDate, } #[derive(Encode, Decode, Clone, Eq, PartialEq, RuntimeDebugNoBound, MaxEncodedLen, TypeInfo, Copy)] pub enum DrawdownType { - EB5, + EB5, ConstructionLoan, DeveloperEquity, } @@ -129,7 +158,7 @@ impl Default for DrawdownType { #[derive(Encode, Decode, Clone, Eq, PartialEq, RuntimeDebugNoBound, MaxEncodedLen, TypeInfo, Copy)] pub enum DrawdownStatus { - Draft, + Draft, Submitted, Approved, Rejected, @@ -145,21 +174,21 @@ impl Default for DrawdownStatus { #[scale_info(skip_type_params(T))] #[codec(mel_bound())] pub struct TransactionData { - pub project_id: [u8;32], - pub drawdown_id: [u8;32], - pub expenditure_id: [u8;32], - pub created_date: u64, - pub updated_date: u64, - pub closed_date: u64, + pub project_id: ProjectId, + pub drawdown_id: DrawdownId, + pub expenditure_id: BudgetExpenditureId, + pub created_date: CreatedDate, + pub updated_date: UpdatedDate, + pub closed_date: CloseDate, pub feedback: Option, - pub amount: u64, + pub amount: ExpenditureAmount, pub status: TransactionStatus, pub documents: Option>, } #[derive(Encode, Decode, Clone, Eq, PartialEq, RuntimeDebugNoBound, MaxEncodedLen, TypeInfo, Copy)] pub enum TransactionStatus { - Draft, + Draft, Submitted, Approved, Rejected, @@ -227,7 +256,7 @@ pub enum ProxyPermission { Inflation, // inflation } -impl ProxyPermission { +impl ProxyPermission { pub fn to_vec(self) -> Vec{ match self{ Self::RegisterUser => "RegisterUser".as_bytes().to_vec(), @@ -252,7 +281,7 @@ impl ProxyPermission { pub fn administrator_permissions() -> Vec>{ use crate::types::ProxyPermission::*; let administrator_permissions = [ - RegisterUser.to_vec(), + RegisterUser.to_vec(), EditUser.to_vec(), CreateProject.to_vec(), EditProject.to_vec(), @@ -293,4 +322,4 @@ impl ProxyPermission { } -} \ No newline at end of file +} From 929c81f8ed43be0ca1801fe012ff6edd468e638d Mon Sep 17 00:00:00 2001 From: Erick Casanova Date: Mon, 21 Nov 2022 14:16:55 -0600 Subject: [PATCH 09/17] add missing types --- pallets/fund-admin/src/lib.rs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/pallets/fund-admin/src/lib.rs b/pallets/fund-admin/src/lib.rs index 13559b7d..32db9f6f 100644 --- a/pallets/fund-admin/src/lib.rs +++ b/pallets/fund-admin/src/lib.rs @@ -824,14 +824,14 @@ pub mod pallet { #[pallet::weight(10_000 + T::DbWeight::get().writes(1))] pub fn submit_drawdown( origin: OriginFor, - project_id: [u8;32], - drawdown_id: [u8;32], + project_id: ProjectId, + drawdown_id: DrawdownId, transactions: Option, // expenditure_id - Option, // amount + Option, // expenditure_id + Option, // amount Option>, //Documents CUDAction, // Action - Option<[u8;32]>, // transaction_id + Option, // transaction_id ), T::MaxRegistrationsAtTime>>, submit: bool, ) -> DispatchResult { From 0e42ebd59ea1c87e34d9b94b303dc24ff177c7cb Mon Sep 17 00:00:00 2001 From: Erick Casanova Date: Mon, 21 Nov 2022 15:13:09 -0600 Subject: [PATCH 10/17] Fix #263 --- pallets/fund-admin/src/functions.rs | 101 +++++++++++++--------------- pallets/fund-admin/src/lib.rs | 50 +++++++------- pallets/fund-admin/src/types.rs | 9 +-- 3 files changed, 76 insertions(+), 84 deletions(-) diff --git a/pallets/fund-admin/src/functions.rs b/pallets/fund-admin/src/functions.rs index 5b1ef8ab..ac6b2ba2 100644 --- a/pallets/fund-admin/src/functions.rs +++ b/pallets/fund-admin/src/functions.rs @@ -79,15 +79,15 @@ impl Pallet { admin: T::AccountId, title: FieldName, description: FieldDescription, - image: CID, + image: Option, address: FieldName, creation_date: CreationDate, completion_date: CompletionDate, expenditures: BoundedVec<( - Option>, + Option, Option, Option, - Option, + Option, Option, CUDAction, Option, @@ -156,13 +156,13 @@ impl Pallet { pub fn do_edit_project( admin: T::AccountId, - project_id: [u8;32], - title: Option>, - description: Option>, - image: Option>, - address: Option>, - creation_date: Option, - completion_date: Option, + project_id: ProjectId, + title: Option, + description: Option, + image: Option, + address: Option, + creation_date: Option, + completion_date: Option, ) -> DispatchResult { // Ensure admin permissions Self::is_authorized(admin.clone(), &Self::get_global_scope(), ProxyPermission::EditProject)?; @@ -181,20 +181,13 @@ impl Pallet { let project = project.as_mut().ok_or(Error::::ProjectNotFound)?; if let Some(title) = title { - let mod_title = title.into_inner(); - project.title = mod_title[0].clone(); + project.title = title; } if let Some(description) = description { - let mod_description = description.into_inner(); - project.description = mod_description[0].clone(); - } - if let Some(image) = image { - let mod_image = image.into_inner(); - project.image = mod_image[0].clone(); + project.description = description; } if let Some(address) = address { - let mod_address = address.into_inner(); - project.address = mod_address[0].clone(); + project.address = address; } if let Some(creation_date) = creation_date { project.creation_date = creation_date; @@ -205,6 +198,7 @@ impl Pallet { project.completion_date = completion_date; } //TOREVIEW: Check if this is working + project.image = image; project.updated_date = current_timestamp; Ok(()) @@ -220,7 +214,7 @@ impl Pallet { pub fn do_delete_project( admin: T::AccountId, - project_id: [u8;32], + project_id: ProjectId, ) -> DispatchResult { // Ensure admin permissions Self::is_authorized(admin.clone(), &Self::get_global_scope(), ProxyPermission::DeleteProject)?; @@ -285,7 +279,7 @@ impl Pallet { pub fn do_execute_assign_users( admin: T::AccountId, - project_id: [u8;32], + project_id: ProjectId, users: BoundedVec<( T::AccountId, ProxyRole, @@ -320,7 +314,7 @@ impl Pallet { } fn do_assign_user( - project_id: [u8;32], + project_id: ProjectId, user: T::AccountId, role: ProxyRole, ) -> DispatchResult { @@ -358,7 +352,7 @@ impl Pallet { } fn do_unassign_user( - project_id: [u8;32], + project_id: ProjectId, user: T::AccountId, role: ProxyRole, ) -> DispatchResult { @@ -399,7 +393,7 @@ impl Pallet { admin: T::AccountId, users: BoundedVec<( T::AccountId, // 0:account id - Option>, // name + Option, // name Option, // 2:role CUDAction, // 3:action ), T::MaxRegistrationsAtTime>, @@ -445,7 +439,7 @@ impl Pallet { fn do_create_user( user: T::AccountId, - name: BoundedVec, + name: FieldName, role: ProxyRole, ) -> DispatchResult { //Get current timestamp @@ -459,12 +453,12 @@ impl Pallet { match role { ProxyRole::Administrator => { - Self::do_sudo_add_administrator(user.clone(), name[0].clone())?; + Self::do_sudo_add_administrator(user.clone(), name.clone())?; }, _ => { // Create user data let user_data = UserData:: { - name: name[0].clone(), + name: name.clone(), role, image: CID::default(), date_registered: current_timestamp, @@ -483,7 +477,7 @@ impl Pallet { fn do_update_user( user: T::AccountId, - name: Option>, // name + name: Option, // name role: Option, ) -> DispatchResult { // Ensure user is registered @@ -494,7 +488,7 @@ impl Pallet { let user_info = user_data.as_mut().ok_or(Error::::UserNotRegistered)?; if let Some(mod_name) = name { - user_info.name = mod_name.into_inner()[0].clone(); + user_info.name = mod_name.clone(); } if let Some(mod_role) = role { // If user has assigned projects cannot update role @@ -548,9 +542,9 @@ impl Pallet { pub fn do_edit_user( user: T::AccountId, - name: Option>, - image: Option>, - email: Option>, + name: Option, + image: Option, + email: Option, documents: Option>, ) -> DispatchResult { //Ensure user is registered @@ -562,16 +556,13 @@ impl Pallet { //TODO: evaluate this inner method, optimize it if let Some(name) = name { - let mod_name = name.into_inner(); - user_info.name = mod_name[0].clone(); + user_info.name = name.clone(); } if let Some(image) = image { - let mod_image = image.into_inner(); - user_info.image = mod_image[0].clone(); + user_info.image = image.clone(); } if let Some(email) = email { - let mod_email = email.into_inner(); - user_info.email = mod_email[0].clone(); + user_info.email = email.clone(); } if let Some(documents) = documents { // Ensure user is an investor @@ -594,10 +585,10 @@ impl Pallet { admin: T::AccountId, project_id: ProjectId, expenditures: BoundedVec<( - Option>, // 0: name + Option, // 0: name Option, // 1: type - Option, // 2: amount - Option, // 3: naics code + Option, // 2: amount + Option, // 3: naics code Option, // 4: jobs multiplier CUDAction, // 5: CUDAction Option, // 6: expenditure_id @@ -667,10 +658,10 @@ impl Pallet { /// * `jobs_multiplier` - The jobs multiplier of the budget expenditure fn do_create_expenditure( project_id: [u8;32], - name: BoundedVec, + name: FieldName, expenditure_type: ExpenditureType, expenditure_amount: ExpenditureAmount, - naics_code: Option, + naics_code: Option, jobs_multiplier: Option, ) -> DispatchResult { //Ensure project exists @@ -691,7 +682,7 @@ impl Pallet { // NAICS code let get_naics_code = match naics_code { Some(mod_naics_code) => { - Some(mod_naics_code.into_inner()[0].clone()) + Some(mod_naics_code.clone()) }, None => None, }; @@ -699,7 +690,7 @@ impl Pallet { // Create expenditurte data let expenditure_data = ExpenditureData { project_id, - name: name.into_inner()[0].clone(), + name: name.clone(), expenditure_type, expenditure_amount, naics_code: get_naics_code, @@ -724,9 +715,9 @@ impl Pallet { fn do_update_expenditure( project_id: ProjectId, expenditure_id: BudgetExpenditureId, - name: Option>, + name: Option, expenditure_amount: Option, - naics_code: Option>, + naics_code: Option, jobs_multiplier: Option, ) -> DispatchResult { //Ensure project exists @@ -748,13 +739,13 @@ impl Pallet { //TODO: ensure name is unique if let Some(mod_name) = name { - expenditure.name = mod_name.into_inner()[0].clone(); + expenditure.name = mod_name.clone(); } if let Some(mod_expenditure_amount) = expenditure_amount { expenditure.expenditure_amount = mod_expenditure_amount; } if let Some(mod_naics_code) = naics_code { - expenditure.naics_code = Some(mod_naics_code.into_inner()[0].clone()); + expenditure.naics_code = Some(mod_naics_code.clone()); } if let Some(mod_jobs_multiplier) = jobs_multiplier { expenditure.jobs_multiplier = Some(mod_jobs_multiplier); @@ -964,7 +955,7 @@ impl Pallet { project_id: ProjectId, drawdown_id: DrawdownId, transactions_feedback: Option>, - drawdown_feedback: Option>, + drawdown_feedback: Option, ) -> DispatchResult { // Ensure admin permissions Self::is_authorized(admin.clone(), &Self::get_global_scope(), ProxyPermission::Expenditures)?; @@ -1043,7 +1034,7 @@ impl Pallet { // Update drawdown feedback >::try_mutate::<_,_,DispatchError,_>(drawdown_id, |drawdown_data| { let drawdown_data = drawdown_data.as_mut().ok_or(Error::::DrawdownNotFound)?; - drawdown_data.feedback = Some(mod_drawdown_feedback[0].clone()); + drawdown_data.feedback = Some(mod_drawdown_feedback.clone()); Ok(()) })?; }, @@ -1131,7 +1122,7 @@ impl Pallet { project_id: ProjectId, drawdown_id: DrawdownId, expenditure_id: BudgetExpenditureId, - amount: u64, + amount: Amount, documents: Option>, ) -> DispatchResult { // Ensure amount is valid @@ -1226,7 +1217,7 @@ impl Pallet { } fn do_delete_transaction( - transaction_id: [u8;32] + transaction_id: TransactionId ) -> DispatchResult { // Ensure transaction exists and get transaction data let transaction_data = TransactionsInfo::::get(transaction_id).ok_or(Error::::TransactionNotFound)?; @@ -1305,7 +1296,7 @@ impl Pallet { // -------------------------------------------------------------------------------------------- pub fn do_execute_inflation_adjustment( admin: T::AccountId, - projects: BoundedVec<(ProjectId, Option, CUDAction), T::MaxRegistrationsAtTime>, + projects: BoundedVec<(ProjectId, Option, CUDAction), T::MaxRegistrationsAtTime>, ) -> DispatchResult { // Ensure admin permissions Self::is_authorized(admin.clone(), &Self::get_global_scope(), ProxyPermission::Expenditures)?; diff --git a/pallets/fund-admin/src/lib.rs b/pallets/fund-admin/src/lib.rs index 32db9f6f..9818b1fc 100644 --- a/pallets/fund-admin/src/lib.rs +++ b/pallets/fund-admin/src/lib.rs @@ -508,7 +508,7 @@ pub mod pallet { origin: OriginFor, users: BoundedVec<( T::AccountId, // account id - Option>, // name + Option, // name Option, // role CUDAction, // action ), T::MaxRegistrationsAtTime>, @@ -539,9 +539,9 @@ pub mod pallet { #[pallet::weight(10_000 + T::DbWeight::get().writes(1))] pub fn users_edit_user( origin: OriginFor, - name: Option>, - image: Option>, - email: Option>, + name: Option, + image: Option, + email: Option, documents: Option> ) -> DispatchResult { let who = ensure_signed(origin)?; @@ -598,13 +598,13 @@ pub mod pallet { creation_date: CreationDate, completion_date: CompletionDate, expenditures: BoundedVec<( - Option>, + Option, Option, Option, - Option, + Option, Option, CUDAction, - Option, + Option ), T::MaxRegistrationsAtTime>, users: Option, project_id: ProjectId, - title: Option>, - description: Option>, - image: Option>, - address: Option>, + title: Option, + description: Option, + image: Option, + address: Option, creation_date: Option, completion_date: Option, ) -> DispatchResult { @@ -770,10 +770,10 @@ pub mod pallet { origin: OriginFor, project_id: ProjectId, expenditures: BoundedVec<( - Option>, // name + Option, // name Option, // type Option, // amount - Option>, // naics code + Option, // naics code Option, // jobs multiplier CUDAction, // action Option, // expenditure_id @@ -906,15 +906,15 @@ pub mod pallet { #[pallet::weight(10_000 + T::DbWeight::get().writes(1))] pub fn approve_drawdown( origin: OriginFor, - project_id: [u8;32], - drawdown_id: [u8;32], + project_id: ProjectId, + drawdown_id: DrawdownId, bulkupload: Option, transactions: Option, // expenditure_id + Option, // expenditure_id Option, // amount Option>, //Documents CUDAction, // Action - Option<[u8;32]>, // transaction_id + Option, // transaction_id ), T::MaxRegistrationsAtTime>>, ) -> DispatchResult { let who = ensure_signed(origin)?; // origin need to be an admin @@ -998,10 +998,10 @@ pub mod pallet { #[pallet::weight(10_000 + T::DbWeight::get().writes(1))] pub fn reject_drawdown( origin: OriginFor, - project_id: [u8;32], - drawdown_id: [u8;32], - transactions_feedback: Option>, - drawdown_feedback: Option>, + project_id: ProjectId, + drawdown_id: DrawdownId, + transactions_feedback: Option>, + drawdown_feedback: Option, ) -> DispatchResult { let who = ensure_signed(origin)?; // origin need to be an admin @@ -1032,10 +1032,10 @@ pub mod pallet { #[pallet::weight(10_000 + T::DbWeight::get().writes(1))] pub fn up_bulkupload( origin: OriginFor, - project_id: [u8;32], - drawdown_id: [u8;32], + project_id: ProjectId, + drawdown_id: DrawdownId, description: FieldDescription, - total_amount: u64, + total_amount: TotalAmount, documents: Documents, ) -> DispatchResult { let who = ensure_signed(origin)?; // origin need to be a builder @@ -1067,7 +1067,7 @@ pub mod pallet { #[pallet::weight(10_000 + T::DbWeight::get().writes(1))] pub fn inflation_rate( origin: OriginFor, - projects: BoundedVec<([u8;32], Option, CUDAction), T::MaxRegistrationsAtTime>, + projects: BoundedVec<(ProjectId, Option, CUDAction), T::MaxRegistrationsAtTime>, ) -> DispatchResult { let who = ensure_signed(origin)?; diff --git a/pallets/fund-admin/src/types.rs b/pallets/fund-admin/src/types.rs index 254c9671..33429de7 100644 --- a/pallets/fund-admin/src/types.rs +++ b/pallets/fund-admin/src/types.rs @@ -21,6 +21,7 @@ pub type DateRegistered = u64; // Transactions pub type TransactionId = [u8; 32]; +pub type Amount = u64; // Drawdowns pub type DrawdownId = [u8; 32]; @@ -30,7 +31,7 @@ pub type DrawdownNumber = u32; pub type BudgetExpenditureId = [u8; 32]; pub type ExpenditureAmount = u64; pub type Balance = u64; -pub type NAICSCode = BoundedVec::MaxBoundedVecs>; +pub type NAICSCode = BoundedVec>; pub type JobsMultiplier = u32; pub type InflationRate = u32; @@ -49,7 +50,7 @@ pub struct ProjectData { pub regional_center: Option>, pub title: FieldName, pub description: FieldDescription, - pub image: CID, + pub image: Option, pub address: FieldName, pub status: ProjectStatus, pub inflation_rate: Option, @@ -120,7 +121,7 @@ impl Default for ExpenditureType { #[derive(CloneNoBound, Encode, Decode, RuntimeDebugNoBound, Default, TypeInfo, MaxEncodedLen)] pub struct BudgetData { - pub expenditure_id: [u8;32], + pub expenditure_id: BudgetExpenditureId, pub balance: Balance, pub created_date: CreatedDate, pub updated_date: UpdatedDate, @@ -131,7 +132,7 @@ pub struct BudgetData { #[scale_info(skip_type_params(T))] #[codec(mel_bound())] pub struct DrawdownData { - pub project_id: [u8;32], + pub project_id: ProjectId, pub drawdown_number: DrawdownNumber, pub drawdown_type: DrawdownType, pub total_amount: TotalAmount, From 86c42e066361810d3b82986944b15c4f8968d6fc Mon Sep 17 00:00:00 2001 From: Erick Casanova Date: Mon, 21 Nov 2022 15:56:39 -0600 Subject: [PATCH 11/17] add status in project data --- pallets/fund-admin/src/functions.rs | 51 +++++++++++++++++++++++++++++ pallets/fund-admin/src/types.rs | 4 +++ 2 files changed, 55 insertions(+) diff --git a/pallets/fund-admin/src/functions.rs b/pallets/fund-admin/src/functions.rs index ac6b2ba2..dacee7c7 100644 --- a/pallets/fund-admin/src/functions.rs +++ b/pallets/fund-admin/src/functions.rs @@ -127,6 +127,9 @@ impl Pallet { creation_date, completion_date, updated_date: timestamp, + construction_loan_drawdown_status: DrawdownStatus::None, + developer_equity_drawdown_status: DrawdownStatus::None, + eb5_drawdown_status: DrawdownStatus::None, }; // create scope for project_id @@ -822,6 +825,7 @@ impl Pallet { Ok(()) })?; + Self::do_edit_drawdown_status_in_project_info(project_id, drawdown_id, DrawdownStatus::default())?; //TOREVIEW: Check if an event is needed Ok(()) } @@ -888,6 +892,8 @@ impl Pallet { Ok(()) })?; + Self::do_edit_drawdown_status_in_project_info(project_id, drawdown_id, DrawdownStatus::Submitted)?; + //Event Self::deposit_event(Event::DrawdownSubmitted(drawdown_id)); @@ -941,6 +947,8 @@ impl Pallet { Ok(()) })?; + Self::do_edit_drawdown_status_in_project_info(project_id, drawdown_id, DrawdownStatus::Approved)?; + // Generate the next drawdown Self::do_create_drawdown(project_id, drawdown_data.drawdown_type, drawdown_data.drawdown_number + 1)?; @@ -1047,6 +1055,8 @@ impl Pallet { Ok(()) })?; + Self::do_edit_drawdown_status_in_project_info(project_id, drawdown_id, DrawdownStatus::Rejected)?; + //Event Self::deposit_event(Event::DrawdownRejected(drawdown_id)); @@ -1289,6 +1299,8 @@ impl Pallet { Ok(()) })?; + Self::do_edit_drawdown_status_in_project_info(project_id, drawdown_id, DrawdownStatus::Submitted)?; + Ok(()) } @@ -1763,4 +1775,43 @@ impl Pallet { Ok(()) } + fn do_edit_drawdown_status_in_project_info( + project_id: ProjectId, + drawdown_id: DrawdownId, + drawdown_status: DrawdownStatus + ) -> DispatchResult { + let drawdown_data = DrawdownsInfo::::get(drawdown_id).ok_or(Error::::DrawdownNotFound)?; + + // Match drawdown type + match drawdown_data.drawdown_type { + DrawdownType::EB5 => { + // Update EB5 drawdown status in project info + >::try_mutate::<_,_,DispatchError,_>(project_id, |project_data| { + let project_data = project_data.as_mut().ok_or(Error::::ProjectNotFound)?; + project_data.eb5_drawdown_status = drawdown_status; + Ok(()) + })?; + Ok(()) + }, + DrawdownType::ConstructionLoan => { + // Update Construction Loan drawdown status in project info + >::try_mutate::<_,_,DispatchError,_>(project_id, |project_data| { + let project_data = project_data.as_mut().ok_or(Error::::ProjectNotFound)?; + project_data.construction_loan_drawdown_status = drawdown_status; + Ok(()) + })?; + Ok(()) + }, + DrawdownType::DeveloperEquity => { + // Update Developer Equity drawdown status in project info + >::try_mutate::<_,_,DispatchError,_>(project_id, |project_data| { + let project_data = project_data.as_mut().ok_or(Error::::ProjectNotFound)?; + project_data.developer_equity_drawdown_status = drawdown_status; + Ok(()) + })?; + Ok(()) + }, + } + } + } diff --git a/pallets/fund-admin/src/types.rs b/pallets/fund-admin/src/types.rs index 33429de7..03ccf655 100644 --- a/pallets/fund-admin/src/types.rs +++ b/pallets/fund-admin/src/types.rs @@ -58,6 +58,9 @@ pub struct ProjectData { pub completion_date: CompletionDate, pub registration_date: RegistrationDate, pub updated_date: UpdatedDate, + pub eb5_drawdown_status: DrawdownStatus, + pub construction_loan_drawdown_status: DrawdownStatus, + pub developer_equity_drawdown_status: DrawdownStatus, } #[derive(Encode, Decode, Clone, Eq, PartialEq, RuntimeDebugNoBound, MaxEncodedLen, TypeInfo, Copy)] @@ -159,6 +162,7 @@ impl Default for DrawdownType { #[derive(Encode, Decode, Clone, Eq, PartialEq, RuntimeDebugNoBound, MaxEncodedLen, TypeInfo, Copy)] pub enum DrawdownStatus { + None, Draft, Submitted, Approved, From 56e529d5359a9b1e192e68b7cdac90dcf213c082 Mon Sep 17 00:00:00 2001 From: Erick Casanova Date: Mon, 21 Nov 2022 16:02:50 -0600 Subject: [PATCH 12/17] update vscode tasks --- .vscode/tasks.json | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.vscode/tasks.json b/.vscode/tasks.json index 97c635ce..0921b140 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -10,6 +10,8 @@ "args": [ "run", "--release", + "--bin", + "hashed", "--", "--dev" ], From 2ae23af45352b51fea14450fc980243a32f24cf9 Mon Sep 17 00:00:00 2001 From: Erick Casanova Date: Mon, 21 Nov 2022 17:08:27 -0600 Subject: [PATCH 13/17] add new function for some extrinsics --- pallets/fruniques/src/functions.rs | 7 +++++-- pallets/fruniques/src/lib.rs | 3 ++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/pallets/fruniques/src/functions.rs b/pallets/fruniques/src/functions.rs index a837cbda..8ed643da 100644 --- a/pallets/fruniques/src/functions.rs +++ b/pallets/fruniques/src/functions.rs @@ -266,7 +266,10 @@ impl Pallet { let user: T::AccountId = ensure_signed(origin.clone())?; Self::is_authorized(user, collection, Permission::Mint)?; - pallet_uniques::Pallet::::do_mint(collection, item, owner, |_| Ok(()))?; + // pallet_uniques::Pallet::::do_mint(collection, item, owner, |_| Ok(()))?; + pallet_uniques::Pallet::::do_mint(collection, item, owner, |_| { + Ok(()) + })?; pallet_uniques::Pallet::::set_metadata( origin.clone(), @@ -296,7 +299,7 @@ impl Pallet { IdOrVec::Vec(Self::module_name().as_bytes().to_vec()) } - fn insert_auth_in_frunique_collection( + pub fn insert_auth_in_frunique_collection( user: T::AccountId, class_id: T::CollectionId, role: FruniqueRole, diff --git a/pallets/fruniques/src/lib.rs b/pallets/fruniques/src/lib.rs index 3e4686e3..e90dfcee 100644 --- a/pallets/fruniques/src/lib.rs +++ b/pallets/fruniques/src/lib.rs @@ -164,7 +164,7 @@ pub mod pallet { #[pallet::weight(10_000 + T::DbWeight::get().writes(10))] pub fn initial_setup(origin: OriginFor) -> DispatchResult { T::RemoveOrigin::ensure_origin(origin.clone())?; - // Self::do_initial_setup()?; + Self::do_initial_setup()?; Ok(()) } @@ -340,6 +340,7 @@ pub mod pallet { ) -> DispatchResult { let owner: T::AccountId = ensure_signed(origin.clone())?; + Self::insert_auth_in_frunique_collection(invitee.clone(), class_id, FruniqueRole::Collaborator)?; Self::deposit_event(Event::InvitedToCollaborate(owner, invitee, class_id)); Ok(()) From ad352fdda4430ad67bab7989a9e9afcd6f7f82fb Mon Sep 17 00:00:00 2001 From: Erick Casanova Date: Mon, 21 Nov 2022 17:28:59 -0600 Subject: [PATCH 14/17] allow to submit a drawdown with empty transaction --- pallets/fund-admin/src/lib.rs | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/pallets/fund-admin/src/lib.rs b/pallets/fund-admin/src/lib.rs index 9818b1fc..d98b7d34 100644 --- a/pallets/fund-admin/src/lib.rs +++ b/pallets/fund-admin/src/lib.rs @@ -852,11 +852,17 @@ pub mod pallet { // Check if there's transactions to execute if let Some(transactions) = transactions { // Do execute transactions - Self::do_execute_transactions( - project_id, - drawdown_id, - transactions, - )?; + if transactions.len() > 0 { + Self::do_execute_transactions( + project_id, + drawdown_id, + transactions)?; + } + // Self::do_execute_transactions( + // project_id, + // drawdown_id, + // transactions, + // )?; } // Do submit drawdown From 109d8f08b1a185681cdd5610c6f4aaccb2282a17 Mon Sep 17 00:00:00 2001 From: Erick Casanova Date: Mon, 21 Nov 2022 17:40:04 -0600 Subject: [PATCH 15/17] update tests --- pallets/fund-admin/src/tests.rs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/pallets/fund-admin/src/tests.rs b/pallets/fund-admin/src/tests.rs index a1a1b430..3562c26a 100644 --- a/pallets/fund-admin/src/tests.rs +++ b/pallets/fund-admin/src/tests.rs @@ -20,7 +20,7 @@ fn pallet_name()-> pallet_rbac::types::IdOrVec { fn return_field_name(name: &str) -> FieldName { let name: BoundedVec> = name.as_bytes().to_vec().try_into().unwrap_or_default(); name -} +} fn return_field_description(description: &str) -> FieldDescription { let description: BoundedVec> = description.as_bytes().to_vec().try_into().unwrap_or_default(); @@ -37,13 +37,13 @@ fn register_administrator() -> DispatchResult { Ok(()) } -fn return_user(user_account:u64, user_name: Option<&str>, user_role: Option, action: CUDAction) -> BoundedVec<(u64, Option>, +fn return_user(user_account:u64, user_name: Option<&str>, user_role: Option, action: CUDAction) -> BoundedVec<(u64, Option, Option, CUDAction), MaxRegistrationsAtTime> { - let mut users: BoundedVec<(u64, Option>, + let mut users: BoundedVec<(u64, Option, Option, CUDAction), MaxRegistrationsAtTime> = bounded_vec![]; - let field_name: BoundedVec = BoundedVec::try_from(vec![return_field_name(user_name.unwrap_or_default())]).unwrap_or_default(); + let field_name = return_field_name(user_name.unwrap_or_default()); users.try_push((user_account, Some(field_name), user_role, action)).unwrap_or_default(); users } @@ -64,7 +64,7 @@ fn field_description_to_string(boundedvec: &BoundedVec>) -> St s } -// I N I T I A L +// I N I T I A L // ----------------------------------------------------------------------------------------- #[test] fn cannon_initialize_pallet_twice_shouldnt_work() { From 6675ce7cf6e03e9e56fb29f3501ff4d738dd5b5c Mon Sep 17 00:00:00 2001 From: Tlalocman Date: Mon, 21 Nov 2022 17:51:14 -0600 Subject: [PATCH 16/17] Delete lcov.info --- lcov.info | 5064 ----------------------------------------------------- 1 file changed, 5064 deletions(-) delete mode 100644 lcov.info diff --git a/lcov.info b/lcov.info deleted file mode 100644 index db3a7ac0..00000000 --- a/lcov.info +++ /dev/null @@ -1,5064 +0,0 @@ -TN: -SF:/home/erick/hashed/hashed-substrate/collator/src/chain_spec/hashed.rs -FN:17,get_chain_spec -FN:30,{closure#0} -FN:73,hashed_genesis -FNF:3 -FNDA:0,get_chain_spec -FNDA:0,{closure#0} -FNDA:0,hashed_genesis -DA:17,0 -DA:19,0 -DA:20,0 -DA:21,0 -DA:22,0 -DA:29,0 -DA:30,0 -DA:31,0 -DA:33,0 -DA:35,0 -DA:36,0 -DA:39,0 -DA:40,0 -DA:43,0 -DA:44,0 -DA:45,0 -DA:46,0 -DA:47,0 -DA:48,0 -DA:49,0 -DA:50,0 -DA:51,0 -DA:52,0 -DA:53,0 -DA:54,0 -DA:55,0 -DA:57,0 -DA:58,0 -DA:61,0 -DA:62,0 -DA:63,0 -DA:64,0 -DA:65,0 -DA:66,0 -DA:67,0 -DA:73,0 -DA:80,0 -DA:85,0 -DA:88,0 -DA:89,0 -DA:90,0 -DA:91,0 -DA:92,0 -DA:97,0 -DA:111,0 -DA:112,0 -DA:113,0 -DA:114,0 -LF:48 -LH:0 -end_of_record -TN: -SF:/home/erick/hashed/hashed-substrate/collator/src/chain_spec/md5.rs -FN:17,get_chain_spec -FN:28,{closure#0} -FN:163,md5_genesis -FNF:3 -FNDA:0,get_chain_spec -FNDA:0,{closure#0} -FNDA:0,md5_genesis -DA:17,0 -DA:19,0 -DA:20,0 -DA:21,0 -DA:22,0 -DA:27,0 -DA:28,0 -DA:29,0 -DA:31,0 -DA:34,0 -DA:35,0 -DA:39,0 -DA:40,0 -DA:44,0 -DA:45,0 -DA:49,0 -DA:50,0 -DA:54,0 -DA:55,0 -DA:59,0 -DA:60,0 -DA:64,0 -DA:65,0 -DA:69,0 -DA:70,0 -DA:74,0 -DA:75,0 -DA:78,0 -DA:80,0 -DA:82,0 -DA:84,0 -DA:86,0 -DA:88,0 -DA:90,0 -DA:92,0 -DA:94,0 -DA:96,0 -DA:99,0 -DA:102,0 -DA:103,0 -DA:107,0 -DA:108,0 -DA:112,0 -DA:113,0 -DA:117,0 -DA:118,0 -DA:122,0 -DA:123,0 -DA:127,0 -DA:128,0 -DA:132,0 -DA:133,0 -DA:137,0 -DA:138,0 -DA:142,0 -DA:143,0 -DA:147,0 -DA:148,0 -DA:151,0 -DA:152,0 -DA:153,0 -DA:154,0 -DA:155,0 -DA:156,0 -DA:157,0 -DA:163,0 -DA:172,0 -DA:177,0 -DA:180,0 -DA:181,0 -DA:182,0 -DA:186,0 -DA:187,0 -DA:192,0 -DA:206,0 -DA:207,0 -DA:208,0 -DA:209,0 -LF:78 -LH:0 -end_of_record -TN: -SF:/home/erick/hashed/hashed-substrate/collator/src/chain_spec/mod.rs -FN:42,try_get -FN:59,get_collator_keys_from_seed -FN:64,get_account_id_from_seed -FN:74,session_keys -FN:78,development_config -FN:91,{closure#0} -FN:134,local_testnet_config -FN:147,{closure#0} -FN:196,testnet_genesis -FNF:9 -FNDA:0,try_get -FNDA:0,get_collator_keys_from_seed -FNDA:0,get_account_id_from_seed -FNDA:0,session_keys -FNDA:0,development_config -FNDA:0,{closure#0} -FNDA:0,local_testnet_config -FNDA:0,{closure#0} -FNDA:0,testnet_genesis -DA:21,0 -DA:22,0 -DA:42,0 -DA:43,0 -DA:48,0 -DA:59,0 -DA:60,0 -DA:64,0 -DA:68,0 -DA:74,0 -DA:78,0 -DA:80,0 -DA:81,0 -DA:82,0 -DA:83,0 -DA:90,0 -DA:91,0 -DA:92,0 -DA:94,0 -DA:96,0 -DA:97,0 -DA:100,0 -DA:101,0 -DA:104,0 -DA:105,0 -DA:106,0 -DA:107,0 -DA:108,0 -DA:109,0 -DA:110,0 -DA:111,0 -DA:112,0 -DA:113,0 -DA:114,0 -DA:115,0 -DA:116,0 -DA:118,0 -DA:119,0 -DA:122,0 -DA:123,0 -DA:124,0 -DA:125,0 -DA:126,0 -DA:127,0 -DA:128,0 -DA:134,0 -DA:136,0 -DA:137,0 -DA:138,0 -DA:139,0 -DA:146,0 -DA:147,0 -DA:148,0 -DA:150,0 -DA:152,0 -DA:153,0 -DA:156,0 -DA:157,0 -DA:160,0 -DA:161,0 -DA:162,0 -DA:163,0 -DA:164,0 -DA:165,0 -DA:166,0 -DA:167,0 -DA:168,0 -DA:169,0 -DA:170,0 -DA:171,0 -DA:172,0 -DA:174,0 -DA:175,0 -DA:179,0 -DA:181,0 -DA:183,0 -DA:185,0 -DA:187,0 -DA:189,0 -DA:190,0 -DA:196,0 -DA:203,0 -DA:208,0 -DA:211,0 -DA:212,0 -DA:213,0 -DA:214,0 -DA:215,0 -DA:220,0 -DA:234,0 -DA:235,0 -DA:236,0 -DA:237,0 -LF:93 -LH:0 -end_of_record -TN: -SF:/home/erick/hashed/hashed-substrate/collator/src/cli.rs -FN:84,new, core::slice::iter::Iter>> -FNF:1 -FNDA:0,new, core::slice::iter::Iter>> -DA:84,0 -DA:88,0 -DA:89,0 -DA:90,0 -DA:91,0 -LF:5 -LH:0 -end_of_record -TN: -SF:/home/erick/hashed/hashed-substrate/collator/src/command.rs -FN:26,load_spec -FN:38,impl_name -FN:42,impl_version -FN:46,description -FN:56,author -FN:60,support_url -FN:64,copyright_start_year -FN:68,load_spec -FN:72,native_runtime_version -FN:78,impl_name -FN:82,impl_version -FN:86,description -FN:96,author -FN:100,support_url -FN:104,copyright_start_year -FN:108,load_spec -FN:112,native_runtime_version -FN:120,{closure#12} -FN:130,{closure#0} -FN:136,run -FN:183,{closure#0} -FN:265,{closure#0} -FN:274,{closure#1} -FN:275,{closure#2} -FN:289,{closure#3} -FN:295,{closure#4} -FN:310,{closure#5} -FN:318,p2p_listen_port -FN:322,rpc_ws_listen_port -FN:326,rpc_http_listen_port -FN:330,prometheus_listen_port -FN:336,shared_params -FN:340,import_params -FN:344,network_params -FN:348,keystore_params -FN:352,base_path -FN:356,{closure#0} -FN:359,rpc_http -FN:363,rpc_ipc -FN:367,rpc_ws -FN:371,prometheus_config -FN:392,chain_id -FN:398,role -FN:402,transaction_pool -FN:406,state_cache_child_ratio -FN:410,rpc_methods -FN:414,rpc_ws_max_connections -FN:418,rpc_cors -FN:422,default_heap_pages -FN:426,force_authoring -FN:430,disable_grandpa -FN:434,max_runtime_instances -FN:438,announce_block -FN:442,telemetry_endpoints -FN:449,node_name -FNF:55 -FNDA:0,load_spec -FNDA:0,impl_name -FNDA:0,impl_version -FNDA:0,description -FNDA:0,author -FNDA:0,support_url -FNDA:0,copyright_start_year -FNDA:0,load_spec -FNDA:0,native_runtime_version -FNDA:0,impl_name -FNDA:0,impl_version -FNDA:0,description -FNDA:0,author -FNDA:0,support_url -FNDA:0,copyright_start_year -FNDA:0,load_spec -FNDA:0,native_runtime_version -FNDA:0,{closure#12} -FNDA:0,{closure#0} -FNDA:0,run -FNDA:0,{closure#0} -FNDA:0,{closure#0} -FNDA:0,{closure#1} -FNDA:0,{closure#2} -FNDA:0,{closure#3} -FNDA:0,{closure#4} -FNDA:0,{closure#5} -FNDA:0,p2p_listen_port -FNDA:0,rpc_ws_listen_port -FNDA:0,rpc_http_listen_port -FNDA:0,prometheus_listen_port -FNDA:0,shared_params -FNDA:0,import_params -FNDA:0,network_params -FNDA:0,keystore_params -FNDA:0,base_path -FNDA:0,{closure#0} -FNDA:0,rpc_http -FNDA:0,rpc_ipc -FNDA:0,rpc_ws -FNDA:0,prometheus_config -FNDA:0,chain_id -FNDA:0,role -FNDA:0,transaction_pool -FNDA:0,state_cache_child_ratio -FNDA:0,rpc_methods -FNDA:0,rpc_ws_max_connections -FNDA:0,rpc_cors -FNDA:0,default_heap_pages -FNDA:0,force_authoring -FNDA:0,disable_grandpa -FNDA:0,max_runtime_instances -FNDA:0,announce_block -FNDA:0,telemetry_endpoints -FNDA:0,node_name -DA:26,0 -DA:27,0 -DA:28,0 -DA:29,0 -DA:31,0 -DA:32,0 -DA:33,0 -DA:38,0 -DA:39,0 -DA:42,0 -DA:43,0 -DA:46,0 -DA:47,0 -DA:52,0 -DA:56,0 -DA:57,0 -DA:60,0 -DA:61,0 -DA:64,0 -DA:68,0 -DA:69,0 -DA:72,0 -DA:78,0 -DA:79,0 -DA:82,0 -DA:83,0 -DA:86,0 -DA:87,0 -DA:92,0 -DA:96,0 -DA:97,0 -DA:100,0 -DA:101,0 -DA:104,0 -DA:108,0 -DA:109,0 -DA:112,0 -DA:113,0 -DA:120,0 -DA:121,0 -DA:129,0 -DA:130,0 -DA:136,0 -DA:137,0 -DA:139,0 -DA:140,0 -DA:141,0 -DA:142,0 -DA:144,0 -DA:145,0 -DA:146,0 -DA:149,0 -DA:150,0 -DA:151,0 -DA:154,0 -DA:155,0 -DA:156,0 -DA:159,0 -DA:160,0 -DA:161,0 -DA:164,0 -DA:165,0 -DA:166,0 -DA:169,0 -DA:170,0 -DA:172,0 -DA:173,0 -DA:175,0 -DA:178,0 -DA:181,0 -DA:183,0 -DA:185,0 -DA:188,0 -DA:189,0 -DA:190,0 -DA:191,0 -DA:192,0 -DA:193,0 -DA:196,0 -DA:197,0 -DA:198,0 -DA:199,0 -DA:200,0 -DA:203,0 -DA:204,0 -DA:206,0 -DA:207,0 -DA:211,0 -DA:216,0 -DA:217,0 -DA:221,0 -DA:223,0 -DA:224,0 -DA:228,0 -DA:229,0 -DA:231,0 -DA:233,0 -DA:234,0 -DA:239,0 -DA:242,0 -DA:256,0 -DA:260,0 -DA:261,0 -DA:263,0 -DA:264,0 -DA:265,0 -DA:266,0 -DA:267,0 -DA:270,0 -DA:273,0 -DA:274,0 -DA:275,0 -DA:277,0 -DA:278,0 -DA:279,0 -DA:282,0 -DA:285,0 -DA:287,0 -DA:288,0 -DA:289,0 -DA:290,0 -DA:292,0 -DA:294,0 -DA:295,0 -DA:297,0 -DA:298,0 -DA:299,0 -DA:300,0 -DA:302,0 -DA:303,0 -DA:304,0 -DA:305,0 -DA:306,0 -DA:307,0 -DA:310,0 -DA:318,0 -DA:322,0 -DA:326,0 -DA:330,0 -DA:336,0 -DA:337,0 -DA:340,0 -DA:341,0 -DA:344,0 -DA:345,0 -DA:348,0 -DA:349,0 -DA:352,0 -DA:353,0 -DA:356,0 -DA:359,0 -DA:360,0 -DA:363,0 -DA:364,0 -DA:367,0 -DA:368,0 -DA:371,0 -DA:376,0 -DA:392,0 -DA:393,0 -DA:395,0 -DA:398,0 -DA:399,0 -DA:402,0 -DA:403,0 -DA:406,0 -DA:407,0 -DA:410,0 -DA:411,0 -DA:414,0 -DA:415,0 -DA:418,0 -DA:419,0 -DA:422,0 -DA:423,0 -DA:426,0 -DA:427,0 -DA:430,0 -DA:431,0 -DA:434,0 -DA:435,0 -DA:438,0 -DA:439,0 -DA:442,0 -DA:446,0 -DA:449,0 -DA:450,0 -LF:187 -LH:0 -end_of_record -TN: -SF:/home/erick/hashed/hashed-substrate/collator/src/main.rs -FN:12,main -FNF:1 -FNDA:0,main -DA:12,0 -DA:13,0 -LF:2 -LH:0 -end_of_record -TN: -SF:/home/erick/hashed/hashed-substrate/collator/src/rpc.rs -FN:33,create_full, sp_runtime::OpaqueExtrinsic>>, sc_service::client::call_executor::LocalCallExecutor, sp_runtime::OpaqueExtrinsic>, sc_client_db::Backend, sp_runtime::OpaqueExtrinsic>>, sc_executor::native_executor::NativeElseWasmExecutor>, sp_runtime::generic::block::Block, sp_runtime::OpaqueExtrinsic>, hashed_parachain_runtime::RuntimeApi>, sc_transaction_pool::BasicPool, sp_runtime::OpaqueExtrinsic>>, sc_service::client::call_executor::LocalCallExecutor, sp_runtime::OpaqueExtrinsic>, sc_client_db::Backend, sp_runtime::OpaqueExtrinsic>>, sc_executor::native_executor::NativeElseWasmExecutor>, sp_runtime::generic::block::Block, sp_runtime::OpaqueExtrinsic>, hashed_parachain_runtime::RuntimeApi>, sp_runtime::generic::block::Block, sp_runtime::OpaqueExtrinsic>>, sp_runtime::generic::block::Block, sp_runtime::OpaqueExtrinsic>>> -FNF:1 -FNDA:0,create_full, sp_runtime::OpaqueExtrinsic>>, sc_service::client::call_executor::LocalCallExecutor, sp_runtime::OpaqueExtrinsic>, sc_client_db::Backend, sp_runtime::OpaqueExtrinsic>>, sc_executor::native_executor::NativeElseWasmExecutor>, sp_runtime::generic::block::Block, sp_runtime::OpaqueExtrinsic>, hashed_parachain_runtime::RuntimeApi>, sc_transaction_pool::BasicPool, sp_runtime::OpaqueExtrinsic>>, sc_service::client::call_executor::LocalCallExecutor, sp_runtime::OpaqueExtrinsic>, sc_client_db::Backend, sp_runtime::OpaqueExtrinsic>>, sc_executor::native_executor::NativeElseWasmExecutor>, sp_runtime::generic::block::Block, sp_runtime::OpaqueExtrinsic>, hashed_parachain_runtime::RuntimeApi>, sp_runtime::generic::block::Block, sp_runtime::OpaqueExtrinsic>>, sp_runtime::generic::block::Block, sp_runtime::OpaqueExtrinsic>>> -DA:33,0 -DA:52,0 -DA:53,0 -DA:55,0 -DA:56,0 -DA:57,0 -LF:6 -LH:0 -end_of_record -TN: -SF:/home/erick/hashed/hashed-substrate/collator/src/service.rs -FN:46,dispatch -FN:50,native_version -FN:60,new_partial, sp_runtime::OpaqueExtrinsic>>, sc_service::client::call_executor::LocalCallExecutor, sp_runtime::OpaqueExtrinsic>, sc_client_db::Backend, sp_runtime::OpaqueExtrinsic>>, sc_executor::native_executor::NativeElseWasmExecutor>, sp_runtime::generic::block::Block, sp_runtime::OpaqueExtrinsic>, hashed_parachain_runtime::RuntimeApi>>, &sc_service::config::Configuration, core::option::Option, &sc_service::task_manager::TaskManager) -> core::result::Result, sp_runtime::OpaqueExtrinsic>, memory_db::MemoryDB, alloc::vec::Vec, memory_db::malloc_size_of::MemCounter>>>, sc_service::error::Error>> -FN:170,build_relay_chain_interface -FN:194,{async_fn#0}, sp_runtime::OpaqueExtrinsic>>, sc_service::client::call_executor::LocalCallExecutor, sp_runtime::OpaqueExtrinsic>, sc_client_db::Backend, sp_runtime::OpaqueExtrinsic>>, sc_executor::native_executor::NativeElseWasmExecutor>, sp_runtime::generic::block::Block, sp_runtime::OpaqueExtrinsic>, hashed_parachain_runtime::RuntimeApi>>, &sc_service::config::Configuration, core::option::Option, &sc_service::task_manager::TaskManager) -> core::result::Result, sp_runtime::OpaqueExtrinsic>, memory_db::MemoryDB, alloc::vec::Vec, memory_db::malloc_size_of::MemCounter>>>, sc_service::error::Error>, hashed_parachain::service::start_parachain_node::{async_fn#0}::{closure_env#1}> -FN:195,start_node_impl, sp_runtime::OpaqueExtrinsic>>, sc_service::client::call_executor::LocalCallExecutor, sp_runtime::OpaqueExtrinsic>, sc_client_db::Backend, sp_runtime::OpaqueExtrinsic>>, sc_executor::native_executor::NativeElseWasmExecutor>, sp_runtime::generic::block::Block, sp_runtime::OpaqueExtrinsic>, hashed_parachain_runtime::RuntimeApi>>, &sc_service::config::Configuration, core::option::Option, &sc_service::task_manager::TaskManager) -> core::result::Result, sp_runtime::OpaqueExtrinsic>, memory_db::MemoryDB, alloc::vec::Vec, memory_db::malloc_size_of::MemCounter>>>, sc_service::error::Error>, hashed_parachain::service::start_parachain_node::{async_fn#0}::{closure_env#1}> -FN:403,parachain_build_import_queue -FN:428,{closure#0} -FN:448,start_parachain_node -FN:465,{closure#1} -FN:487,{closure#0} -FN:489,{async_block#0} -FN:505,{closure#0} -FNF:13 -FNDA:0,dispatch -FNDA:0,native_version -FNDA:0,new_partial, sp_runtime::OpaqueExtrinsic>>, sc_service::client::call_executor::LocalCallExecutor, sp_runtime::OpaqueExtrinsic>, sc_client_db::Backend, sp_runtime::OpaqueExtrinsic>>, sc_executor::native_executor::NativeElseWasmExecutor>, sp_runtime::generic::block::Block, sp_runtime::OpaqueExtrinsic>, hashed_parachain_runtime::RuntimeApi>>, &sc_service::config::Configuration, core::option::Option, &sc_service::task_manager::TaskManager) -> core::result::Result, sp_runtime::OpaqueExtrinsic>, memory_db::MemoryDB, alloc::vec::Vec, memory_db::malloc_size_of::MemCounter>>>, sc_service::error::Error>> -FNDA:0,build_relay_chain_interface -FNDA:0,{async_fn#0}, sp_runtime::OpaqueExtrinsic>>, sc_service::client::call_executor::LocalCallExecutor, sp_runtime::OpaqueExtrinsic>, sc_client_db::Backend, sp_runtime::OpaqueExtrinsic>>, sc_executor::native_executor::NativeElseWasmExecutor>, sp_runtime::generic::block::Block, sp_runtime::OpaqueExtrinsic>, hashed_parachain_runtime::RuntimeApi>>, &sc_service::config::Configuration, core::option::Option, &sc_service::task_manager::TaskManager) -> core::result::Result, sp_runtime::OpaqueExtrinsic>, memory_db::MemoryDB, alloc::vec::Vec, memory_db::malloc_size_of::MemCounter>>>, sc_service::error::Error>, hashed_parachain::service::start_parachain_node::{async_fn#0}::{closure_env#1}> -FNDA:0,start_node_impl, sp_runtime::OpaqueExtrinsic>>, sc_service::client::call_executor::LocalCallExecutor, sp_runtime::OpaqueExtrinsic>, sc_client_db::Backend, sp_runtime::OpaqueExtrinsic>>, sc_executor::native_executor::NativeElseWasmExecutor>, sp_runtime::generic::block::Block, sp_runtime::OpaqueExtrinsic>, hashed_parachain_runtime::RuntimeApi>>, &sc_service::config::Configuration, core::option::Option, &sc_service::task_manager::TaskManager) -> core::result::Result, sp_runtime::OpaqueExtrinsic>, memory_db::MemoryDB, alloc::vec::Vec, memory_db::malloc_size_of::MemCounter>>>, sc_service::error::Error>, hashed_parachain::service::start_parachain_node::{async_fn#0}::{closure_env#1}> -FNDA:0,parachain_build_import_queue -FNDA:0,{closure#0} -FNDA:0,start_parachain_node -FNDA:0,{closure#1} -FNDA:0,{closure#0} -FNDA:0,{async_block#0} -FNDA:0,{closure#0} -DA:46,0 -DA:47,0 -DA:50,0 -DA:51,0 -DA:60,0 -DA:108,0 -DA:109,0 -DA:111,0 -DA:112,0 -DA:113,0 -DA:114,0 -DA:115,0 -DA:120,0 -DA:121,0 -DA:122,0 -DA:123,0 -DA:126,0 -DA:128,0 -DA:129,0 -DA:130,0 -DA:132,0 -DA:134,0 -DA:136,0 -DA:137,0 -DA:138,0 -DA:142,0 -DA:143,0 -DA:144,0 -DA:145,0 -DA:146,0 -DA:150,0 -DA:151,0 -DA:152,0 -DA:153,0 -DA:163,0 -DA:164,0 -DA:167,0 -DA:170,0 -DA:178,0 -DA:179,0 -DA:180,0 -DA:182,0 -DA:184,0 -DA:186,0 -DA:194,0 -DA:195,0 -DA:260,0 -DA:262,0 -DA:263,0 -DA:265,0 -DA:266,0 -DA:267,0 -DA:270,0 -DA:271,0 -DA:272,0 -DA:273,0 -DA:274,0 -DA:275,0 -DA:277,0 -DA:278,0 -DA:279,0 -DA:280,0 -DA:283,0 -DA:285,0 -DA:286,0 -DA:287,0 -DA:288,0 -DA:289,0 -DA:290,0 -DA:291,0 -DA:292,0 -DA:293,0 -DA:294,0 -DA:295,0 -DA:296,0 -DA:297,0 -DA:298,0 -DA:300,0 -DA:303,0 -DA:304,0 -DA:305,0 -DA:307,0 -DA:308,0 -DA:309,0 -DA:310,0 -DA:311,0 -DA:314,0 -DA:318,0 -DA:319,0 -DA:320,0 -DA:321,0 -DA:322,0 -DA:323,0 -DA:324,0 -DA:325,0 -DA:326,0 -DA:327,0 -DA:328,0 -DA:331,0 -DA:332,0 -DA:334,0 -DA:335,0 -DA:336,0 -DA:338,0 -DA:339,0 -DA:344,0 -DA:345,0 -DA:346,0 -DA:349,0 -DA:351,0 -DA:353,0 -DA:354,0 -DA:355,0 -DA:356,0 -DA:357,0 -DA:358,0 -DA:359,0 -DA:360,0 -DA:361,0 -DA:364,0 -DA:368,0 -DA:370,0 -DA:371,0 -DA:376,0 -DA:380,0 -DA:383,0 -DA:385,0 -DA:393,0 -DA:396,0 -DA:398,0 -DA:403,0 -DA:415,0 -DA:425,0 -DA:426,0 -DA:427,0 -DA:428,0 -DA:429,0 -DA:432,0 -DA:433,0 -DA:434,0 -DA:437,0 -DA:439,0 -DA:440,0 -DA:441,0 -DA:442,0 -DA:448,0 -DA:459,0 -DA:460,0 -DA:461,0 -DA:462,0 -DA:465,0 -DA:473,0 -DA:474,0 -DA:476,0 -DA:477,0 -DA:478,0 -DA:479,0 -DA:481,0 -DA:484,0 -DA:485,0 -DA:486,0 -DA:487,0 -DA:488,0 -DA:489,0 -DA:490,0 -DA:491,0 -DA:492,0 -DA:493,0 -DA:494,0 -DA:495,0 -DA:496,0 -DA:497,0 -DA:500,0 -DA:501,0 -DA:502,0 -DA:505,0 -DA:506,0 -DA:510,0 -DA:513,0 -DA:514,0 -DA:515,0 -DA:516,0 -DA:517,0 -DA:521,0 -DA:523,0 -DA:524,0 -DA:528,0 -LF:187 -LH:0 -end_of_record -TN: -SF:/home/erick/hashed/hashed-substrate/node/src/benchmarking.rs -FN:45,new -FN:51,pallet -FN:55,extrinsic -FN:59,build -FN:90,pallet -FN:94,extrinsic -FN:98,build -FN:119,create_benchmark_extrinsic -FN:131,{closure#0} -FN:174,inherent_benchmark_data -FNF:10 -FNDA:0,new -FNDA:0,pallet -FNDA:0,extrinsic -FNDA:0,build -FNDA:0,pallet -FNDA:0,extrinsic -FNDA:0,build -FNDA:0,create_benchmark_extrinsic -FNDA:0,{closure#0} -FNDA:0,inherent_benchmark_data -DA:45,0 -DA:51,0 -DA:55,0 -DA:59,0 -DA:60,0 -DA:62,0 -DA:63,0 -DA:64,0 -DA:69,0 -DA:90,0 -DA:94,0 -DA:98,0 -DA:99,0 -DA:101,0 -DA:102,0 -DA:103,0 -DA:104,0 -DA:105,0 -DA:112,0 -DA:119,0 -DA:125,0 -DA:126,0 -DA:127,0 -DA:129,0 -DA:131,0 -DA:133,0 -DA:134,0 -DA:135,0 -DA:136,0 -DA:137,0 -DA:138,0 -DA:140,0 -DA:142,0 -DA:143,0 -DA:144,0 -DA:148,0 -DA:149,0 -DA:152,0 -DA:153,0 -DA:154,0 -DA:155,0 -DA:161,0 -DA:164,0 -DA:165,0 -DA:166,0 -DA:167,0 -DA:174,0 -DA:175,0 -DA:176,0 -DA:177,0 -DA:179,0 -DA:181,0 -DA:182,0 -LF:53 -LH:0 -end_of_record -TN: -SF:/home/erick/hashed/hashed-substrate/node/src/chain_spec.rs -FN:28,get_account_id_from_seed -FN:36,authority_keys_from_seed -FN:40,hashed_properties -FN:53,md5_properties -FN:66,development_config -FN:107,local_testnet_config -FN:156,chaos_config -FN:195,md5_config -FN:235,testnet_genesis -FNF:9 -FNDA:0,get_account_id_from_seed -FNDA:0,authority_keys_from_seed -FNDA:0,hashed_properties -FNDA:0,md5_properties -FNDA:0,development_config -FNDA:0,local_testnet_config -FNDA:0,chaos_config -FNDA:0,md5_config -FNDA:0,testnet_genesis -DA:19,0 -DA:20,0 -DA:28,0 -DA:32,0 -DA:36,0 -DA:37,0 -DA:40,0 -DA:41,0 -DA:42,0 -DA:43,0 -DA:44,0 -DA:45,0 -DA:46,0 -DA:47,0 -DA:48,0 -DA:49,0 -DA:53,0 -DA:54,0 -DA:55,0 -DA:56,0 -DA:57,0 -DA:58,0 -DA:59,0 -DA:60,0 -DA:61,0 -DA:62,0 -DA:66,0 -DA:67,0 -DA:69,0 -DA:74,0 -DA:75,0 -DA:76,0 -DA:77,0 -DA:79,0 -DA:81,0 -DA:83,0 -DA:84,0 -DA:85,0 -DA:86,0 -DA:87,0 -DA:93,0 -DA:95,0 -DA:97,0 -DA:99,0 -DA:101,0 -DA:103,0 -DA:107,0 -DA:108,0 -DA:110,0 -DA:115,0 -DA:116,0 -DA:117,0 -DA:118,0 -DA:120,0 -DA:122,0 -DA:124,0 -DA:125,0 -DA:126,0 -DA:127,0 -DA:128,0 -DA:129,0 -DA:130,0 -DA:131,0 -DA:132,0 -DA:133,0 -DA:134,0 -DA:135,0 -DA:136,0 -DA:142,0 -DA:144,0 -DA:146,0 -DA:148,0 -DA:150,0 -DA:152,0 -DA:156,0 -DA:157,0 -DA:159,0 -DA:164,0 -DA:165,0 -DA:166,0 -DA:167,0 -DA:169,0 -DA:171,0 -DA:173,0 -DA:174,0 -DA:175,0 -DA:181,0 -DA:183,0 -DA:185,0 -DA:187,0 -DA:189,0 -DA:191,0 -DA:195,0 -DA:196,0 -DA:198,0 -DA:203,0 -DA:204,0 -DA:205,0 -DA:206,0 -DA:208,0 -DA:210,0 -DA:212,0 -DA:213,0 -DA:214,0 -DA:220,0 -DA:222,0 -DA:224,0 -DA:226,0 -DA:228,0 -DA:230,0 -DA:235,0 -DA:243,0 -DA:244,0 -DA:247,0 -DA:250,0 -DA:253,0 -DA:254,0 -DA:255,0 -DA:262,0 -DA:274,0 -DA:275,0 -DA:276,0 -DA:278,0 -DA:279,0 -DA:280,0 -LF:125 -LH:0 -end_of_record -TN: -SF:/home/erick/hashed/hashed-substrate/node/src/command.rs -FN:14,impl_name -FN:18,impl_version -FN:22,description -FN:26,author -FN:30,support_url -FN:34,copyright_start_year -FN:38,load_spec -FN:50,native_runtime_version -FN:56,run -FN:104,{closure#0} -FNF:10 -FNDA:0,impl_name -FNDA:0,impl_version -FNDA:0,description -FNDA:0,author -FNDA:0,support_url -FNDA:0,copyright_start_year -FNDA:0,load_spec -FNDA:0,native_runtime_version -FNDA:0,run -FNDA:0,{closure#0} -DA:14,0 -DA:15,0 -DA:18,0 -DA:19,0 -DA:22,0 -DA:23,0 -DA:26,0 -DA:27,0 -DA:30,0 -DA:31,0 -DA:34,0 -DA:38,0 -DA:39,0 -DA:40,0 -DA:41,0 -DA:42,0 -DA:43,0 -DA:44,0 -DA:45,0 -DA:50,0 -DA:56,0 -DA:57,0 -DA:59,0 -DA:60,0 -DA:61,0 -DA:62,0 -DA:63,0 -DA:65,0 -DA:66,0 -DA:67,0 -DA:68,0 -DA:69,0 -DA:70,0 -DA:73,0 -DA:74,0 -DA:75,0 -DA:76,0 -DA:77,0 -DA:80,0 -DA:81,0 -DA:82,0 -DA:83,0 -DA:84,0 -DA:87,0 -DA:88,0 -DA:89,0 -DA:90,0 -DA:91,0 -DA:92,0 -DA:95,0 -DA:96,0 -DA:97,0 -DA:99,0 -DA:100,0 -DA:101,0 -DA:102,0 -DA:103,0 -DA:104,0 -DA:105,0 -DA:106,0 -DA:108,0 -DA:111,0 -DA:112,0 -DA:114,0 -DA:117,0 -DA:118,0 -DA:120,0 -DA:121,0 -DA:129,0 -DA:130,0 -DA:131,0 -DA:133,0 -DA:134,0 -DA:135,0 -DA:136,0 -DA:137,0 -DA:139,0 -DA:141,0 -DA:142,0 -DA:143,0 -DA:145,0 -DA:147,0 -DA:148,0 -DA:149,0 -DA:167,0 -DA:169,0 -DA:170,0 -DA:171,0 -DA:172,0 -DA:175,0 -DA:176,0 -DA:177,0 -LF:92 -LH:0 -end_of_record -TN: -SF:/home/erick/hashed/hashed-substrate/node/src/main.rs -FN:12,main -FNF:1 -FNDA:0,main -DA:12,0 -DA:13,0 -LF:2 -LH:0 -end_of_record -TN: -SF:/home/erick/hashed/hashed-substrate/node/src/rpc.rs -FN:31,create_full, sp_runtime::OpaqueExtrinsic>>, sc_service::client::call_executor::LocalCallExecutor, sp_runtime::OpaqueExtrinsic>, sc_client_db::Backend, sp_runtime::OpaqueExtrinsic>>, sc_executor::native_executor::NativeElseWasmExecutor>, sp_runtime::generic::block::Block, sp_runtime::OpaqueExtrinsic>, hashed_runtime::RuntimeApi>, sc_transaction_pool::BasicPool, sp_runtime::OpaqueExtrinsic>>, sc_service::client::call_executor::LocalCallExecutor, sp_runtime::OpaqueExtrinsic>, sc_client_db::Backend, sp_runtime::OpaqueExtrinsic>>, sc_executor::native_executor::NativeElseWasmExecutor>, sp_runtime::generic::block::Block, sp_runtime::OpaqueExtrinsic>, hashed_runtime::RuntimeApi>, sp_runtime::generic::block::Block, sp_runtime::OpaqueExtrinsic>>, sp_runtime::generic::block::Block, sp_runtime::OpaqueExtrinsic>>> -FNF:1 -FNDA:0,create_full, sp_runtime::OpaqueExtrinsic>>, sc_service::client::call_executor::LocalCallExecutor, sp_runtime::OpaqueExtrinsic>, sc_client_db::Backend, sp_runtime::OpaqueExtrinsic>>, sc_executor::native_executor::NativeElseWasmExecutor>, sp_runtime::generic::block::Block, sp_runtime::OpaqueExtrinsic>, hashed_runtime::RuntimeApi>, sc_transaction_pool::BasicPool, sp_runtime::OpaqueExtrinsic>>, sc_service::client::call_executor::LocalCallExecutor, sp_runtime::OpaqueExtrinsic>, sc_client_db::Backend, sp_runtime::OpaqueExtrinsic>>, sc_executor::native_executor::NativeElseWasmExecutor>, sp_runtime::generic::block::Block, sp_runtime::OpaqueExtrinsic>, hashed_runtime::RuntimeApi>, sp_runtime::generic::block::Block, sp_runtime::OpaqueExtrinsic>>, sp_runtime::generic::block::Block, sp_runtime::OpaqueExtrinsic>>> -DA:31,0 -DA:46,0 -DA:47,0 -DA:49,0 -DA:50,0 -DA:57,0 -LF:6 -LH:0 -end_of_record -TN: -SF:/home/erick/hashed/hashed-substrate/node/src/service.rs -FN:25,dispatch -FN:29,native_version -FN:39,new_partial -FN:68,{closure#0} -FN:69,{closure#1} -FN:86,{closure#2} -FN:91,{closure#3} -FN:110,{closure#4} -FN:120,{closure#5} -FN:137,{closure#6} -FN:152,remote_keystore -FN:160,new_full -FN:228,{closure#0} -FN:254,{closure#1} -FN:269,{closure#2} -FN:288,{closure#3} -FN:312,{closure#4} -FN:330,{closure#5} -FNF:18 -FNDA:0,dispatch -FNDA:0,native_version -FNDA:0,new_partial -FNDA:0,{closure#0} -FNDA:0,{closure#1} -FNDA:0,{closure#2} -FNDA:0,{closure#3} -FNDA:0,{closure#4} -FNDA:0,{closure#5} -FNDA:0,{closure#6} -FNDA:0,remote_keystore -FNDA:0,new_full -FNDA:0,{closure#0} -FNDA:0,{closure#1} -FNDA:0,{closure#2} -FNDA:0,{closure#3} -FNDA:0,{closure#4} -FNDA:0,{closure#5} -DA:25,0 -DA:26,0 -DA:29,0 -DA:30,0 -DA:39,0 -DA:61,0 -DA:62,0 -DA:65,0 -DA:68,0 -DA:69,0 -DA:70,0 -DA:71,0 -DA:72,0 -DA:78,0 -DA:79,0 -DA:83,0 -DA:86,0 -DA:87,0 -DA:89,0 -DA:91,0 -DA:92,0 -DA:96,0 -DA:99,0 -DA:100,0 -DA:101,0 -DA:102,0 -DA:103,0 -DA:107,0 -DA:108,0 -DA:109,0 -DA:110,0 -DA:113,0 -DA:115,0 -DA:117,0 -DA:118,0 -DA:119,0 -DA:120,0 -DA:121,0 -DA:124,0 -DA:125,0 -DA:126,0 -DA:129,0 -DA:131,0 -DA:132,0 -DA:133,0 -DA:135,0 -DA:136,0 -DA:137,0 -DA:140,0 -DA:141,0 -DA:142,0 -DA:143,0 -DA:144,0 -DA:145,0 -DA:146,0 -DA:147,0 -DA:148,0 -DA:152,0 -DA:156,0 -DA:160,0 -DA:161,0 -DA:162,0 -DA:163,0 -DA:164,0 -DA:165,0 -DA:166,0 -DA:167,0 -DA:168,0 -DA:169,0 -DA:172,0 -DA:173,0 -DA:174,0 -DA:175,0 -DA:176,0 -DA:183,0 -DA:184,0 -DA:187,0 -DA:190,0 -DA:191,0 -DA:192,0 -DA:193,0 -DA:194,0 -DA:197,0 -DA:200,0 -DA:201,0 -DA:202,0 -DA:203,0 -DA:204,0 -DA:205,0 -DA:208,0 -DA:211,0 -DA:212,0 -DA:213,0 -DA:217,0 -DA:218,0 -DA:219,0 -DA:220,0 -DA:221,0 -DA:222,0 -DA:225,0 -DA:226,0 -DA:228,0 -DA:230,0 -DA:231,0 -DA:235,0 -DA:236,0 -DA:237,0 -DA:238,0 -DA:240,0 -DA:241,0 -DA:242,0 -DA:243,0 -DA:244,0 -DA:245,0 -DA:248,0 -DA:250,0 -DA:251,0 -DA:252,0 -DA:253,0 -DA:254,0 -DA:257,0 -DA:260,0 -DA:263,0 -DA:265,0 -DA:266,0 -DA:267,0 -DA:268,0 -DA:269,0 -DA:270,0 -DA:273,0 -DA:274,0 -DA:275,0 -DA:278,0 -DA:281,0 -DA:282,0 -DA:283,0 -DA:284,0 -DA:285,0 -DA:286,0 -DA:287,0 -DA:288,0 -DA:294,0 -DA:296,0 -DA:301,0 -DA:306,0 -DA:308,0 -DA:312,0 -DA:316,0 -DA:327,0 -DA:329,0 -DA:330,0 -DA:335,0 -DA:337,0 -DA:338,0 -DA:342,0 -DA:343,0 -LF:156 -LH:0 -end_of_record -TN: -SF:/home/erick/hashed/hashed-substrate/pallets/bitcoin-vaults/src/functions.rs -FN:481,bdk_gen_proposal -FN:498,gen_proposals_payload_by_bulk -FNF:2 -FNDA:0,bdk_gen_proposal -FNDA:0,gen_proposals_payload_by_bulk -DA:22,1 -DA:23,2 -DA:24,1 -DA:25,1 -DA:26,1 -DA:29,5 -DA:32,11 -DA:33,5 -DA:35,5 -DA:37,27 -DA:39,10 -DA:40,1 -DA:42,20 -DA:43,5 -DA:45,2 -DA:49,5 -DA:50,3 -DA:51,1 -DA:53,0 -DA:55,10 -DA:57,5 -DA:58,5 -DA:61,2 -DA:63,4 -DA:64,7 -DA:65,2 -DA:67,8 -DA:68,8 -DA:69,6 -DA:70,2 -DA:71,2 -DA:75,2 -DA:76,4 -DA:77,0 -DA:79,2 -DA:80,2 -DA:83,0 -DA:84,0 -DA:85,0 -DA:86,0 -DA:87,0 -DA:88,0 -DA:90,0 -DA:91,0 -DA:94,4 -DA:95,8 -DA:96,6 -DA:97,8 -DA:98,4 -DA:99,5 -DA:100,9 -DA:101,18 -DA:102,5 -DA:103,3 -DA:105,6 -DA:106,6 -DA:109,2 -DA:111,4 -DA:112,2 -DA:113,5 -DA:115,2 -DA:118,7 -DA:119,4 -DA:120,4 -DA:121,6 -DA:122,3 -DA:123,4 -DA:124,4 -DA:125,2 -DA:128,2 -DA:131,2 -DA:132,2 -DA:135,1 -DA:136,2 -DA:137,2 -DA:138,2 -DA:140,2 -DA:142,3 -DA:143,1 -DA:145,3 -DA:147,0 -DA:148,0 -DA:149,0 -DA:150,0 -DA:152,0 -DA:155,0 -DA:156,0 -DA:162,8 -DA:163,16 -DA:164,1 -DA:165,0 -DA:166,0 -DA:167,0 -DA:171,1 -DA:176,8 -DA:181,0 -DA:182,0 -DA:183,0 -DA:184,0 -DA:185,0 -DA:186,0 -DA:187,0 -DA:189,0 -DA:192,0 -DA:193,0 -DA:196,0 -DA:197,0 -DA:198,0 -DA:199,0 -DA:200,0 -DA:201,0 -DA:202,0 -DA:204,0 -DA:207,0 -DA:208,0 -DA:211,0 -DA:212,0 -DA:213,0 -DA:214,0 -DA:215,0 -DA:216,0 -DA:217,0 -DA:218,0 -DA:220,0 -DA:223,0 -DA:224,0 -DA:228,0 -DA:229,0 -DA:230,0 -DA:231,0 -DA:232,0 -DA:233,0 -DA:234,0 -DA:235,0 -DA:237,0 -DA:243,0 -DA:244,0 -DA:245,0 -DA:246,0 -DA:247,0 -DA:248,0 -DA:249,0 -DA:250,0 -DA:252,0 -DA:258,0 -DA:260,0 -DA:261,0 -DA:262,0 -DA:263,0 -DA:264,0 -DA:265,0 -DA:266,0 -DA:268,0 -DA:270,0 -DA:272,0 -DA:275,0 -DA:277,0 -DA:278,0 -DA:279,0 -DA:281,0 -DA:298,0 -DA:299,0 -DA:302,0 -DA:303,0 -DA:308,0 -DA:309,0 -DA:310,0 -DA:312,0 -DA:313,0 -DA:315,0 -DA:316,0 -DA:317,0 -DA:318,0 -DA:319,0 -DA:320,0 -DA:321,0 -DA:322,0 -DA:323,0 -DA:325,0 -DA:326,0 -DA:327,0 -DA:328,0 -DA:330,0 -DA:334,0 -DA:335,0 -DA:336,0 -DA:337,0 -DA:338,0 -DA:339,0 -DA:342,0 -DA:345,0 -DA:346,0 -DA:349,0 -DA:350,0 -DA:352,0 -DA:357,0 -DA:358,0 -DA:361,0 -DA:362,0 -DA:363,0 -DA:364,0 -DA:365,0 -DA:366,0 -DA:367,0 -DA:370,0 -DA:371,0 -DA:374,0 -DA:380,0 -DA:381,0 -DA:382,0 -DA:383,0 -DA:384,0 -DA:385,0 -DA:386,0 -DA:387,0 -DA:388,0 -DA:389,0 -DA:391,0 -DA:392,0 -DA:397,0 -DA:399,0 -DA:400,0 -DA:401,0 -DA:403,0 -DA:405,0 -DA:406,0 -DA:409,0 -DA:410,0 -DA:411,0 -DA:414,0 -DA:417,0 -DA:418,0 -DA:419,0 -DA:421,0 -DA:422,0 -DA:423,0 -DA:424,0 -DA:425,0 -DA:426,0 -DA:428,0 -DA:429,0 -DA:430,0 -DA:431,0 -DA:433,0 -DA:436,0 -DA:438,0 -DA:441,0 -DA:442,0 -DA:443,0 -DA:444,0 -DA:445,0 -DA:446,0 -DA:448,0 -DA:454,0 -DA:459,0 -DA:460,0 -DA:462,0 -DA:463,0 -DA:465,0 -DA:466,0 -DA:467,0 -DA:468,0 -DA:469,0 -DA:470,0 -DA:471,0 -DA:472,0 -DA:473,0 -DA:474,0 -DA:475,0 -DA:478,0 -DA:481,0 -DA:484,0 -DA:485,0 -DA:486,0 -DA:488,0 -DA:491,0 -DA:492,0 -DA:495,0 -DA:498,0 -DA:501,0 -DA:502,0 -DA:503,0 -DA:504,0 -DA:505,0 -DA:506,0 -DA:508,0 -DA:509,0 -DA:510,0 -DA:511,0 -DA:512,0 -DA:514,0 -DA:516,0 -DA:519,0 -DA:520,0 -DA:521,0 -DA:522,0 -DA:523,0 -DA:524,0 -DA:526,0 -DA:527,0 -DA:529,0 -DA:530,0 -DA:531,0 -DA:532,0 -DA:533,0 -DA:534,0 -DA:535,0 -DA:536,0 -DA:538,0 -DA:539,0 -DA:540,0 -DA:542,0 -DA:543,0 -DA:544,0 -DA:545,0 -DA:548,0 -DA:571,0 -DA:572,0 -DA:573,0 -DA:574,0 -DA:575,0 -DA:579,0 -DA:580,0 -DA:582,0 -DA:583,0 -DA:584,0 -DA:586,0 -DA:588,0 -DA:589,0 -DA:590,0 -DA:594,0 -DA:595,0 -DA:597,0 -DA:598,0 -DA:599,0 -DA:601,0 -DA:603,0 -DA:604,0 -DA:605,0 -DA:609,0 -DA:613,0 -DA:614,0 -DA:616,0 -DA:617,0 -DA:618,0 -DA:620,0 -DA:622,0 -DA:623,0 -DA:624,0 -DA:628,0 -DA:632,0 -DA:633,0 -DA:641,0 -DA:642,0 -LF:354 -LH:75 -end_of_record -TN: -SF:/home/erick/hashed/hashed-substrate/pallets/bitcoin-vaults/src/lib.rs -FN:17,pallet_constants_metadata -FN:51,default -FN:182,pallet_prefix -FN:193,xpubs_by_owner -FN:198,proposals -FN:208,proposals_by_vault -FN:218,pallet_prefix -FN:228,vaults_by_signer -FN:238,get -FN:239,__type_value_for_default_url -FN:242,pallet_prefix -FN:324,set_xpub -FN:367,{closure#0} -FN:401,{closure#0} -FN:403,create_vault -FN:447,{closure#0} -FN:449,remove_vault -FN:470,{closure#0} -FN:472,propose -FN:505,{closure#0} -FN:507,remove_proposal -FN:531,{closure#0} -FN:533,set_bdk_url -FN:554,{closure#0} -FN:556,save_psbt -FN:577,{closure#0} -FN:579,finalize_psbt -FN:600,{closure#0} -FN:602,broadcast_psbt -FN:615,{closure#0} -FN:617,kill_storage -FN:633,{closure#0} -FN:635,ocw_insert_descriptors -FN:668,{closure#0} -FN:670,ocw_insert_psbts -FN:696,{closure#0} -FN:698,ocw_finalize_psbts -FNF:37 -FNDA:3,pallet_constants_metadata -FNDA:0,default -FNDA:16,pallet_prefix -FNDA:18,xpubs_by_owner -FNDA:12,proposals -FNDA:16,proposals_by_vault -FNDA:10,pallet_prefix -FNDA:4,vaults_by_signer -FNDA:0,get -FNDA:0,__type_value_for_default_url -FNDA:0,pallet_prefix -FNDA:8,set_xpub -FNDA:5,{closure#0} -FNDA:26,{closure#0} -FNDA:6,create_vault -FNDA:6,{closure#0} -FNDA:1,remove_vault -FNDA:16,{closure#0} -FNDA:4,propose -FNDA:0,{closure#0} -FNDA:0,remove_proposal -FNDA:0,{closure#0} -FNDA:0,set_bdk_url -FNDA:10,{closure#0} -FNDA:2,save_psbt -FNDA:6,{closure#0} -FNDA:1,finalize_psbt -FNDA:0,{closure#0} -FNDA:0,broadcast_psbt -FNDA:0,{closure#0} -FNDA:0,kill_storage -FNDA:0,{closure#0} -FNDA:0,ocw_insert_descriptors -FNDA:0,{closure#0} -FNDA:0,ocw_insert_psbts -FNDA:0,{closure#0} -FNDA:0,ocw_finalize_psbts -DA:17,3 -DA:51,0 -DA:52,0 -DA:58,0 -DA:60,0 -DA:182,16 -DA:193,18 -DA:198,12 -DA:208,16 -DA:218,10 -DA:228,4 -DA:238,0 -DA:239,0 -DA:240,0 -DA:242,0 -DA:257,0 -DA:260,0 -DA:261,0 -DA:262,0 -DA:268,0 -DA:269,0 -DA:271,0 -DA:273,0 -DA:274,0 -DA:275,0 -DA:277,0 -DA:279,0 -DA:280,0 -DA:281,0 -DA:283,0 -DA:284,0 -DA:285,0 -DA:286,0 -DA:287,0 -DA:288,0 -DA:290,0 -DA:292,0 -DA:295,0 -DA:296,0 -DA:298,0 -DA:302,0 -DA:323,0 -DA:324,8 -DA:329,16 -DA:330,16 -DA:331,17 -DA:332,16 -DA:334,8 -DA:335,0 -DA:336,2 -DA:337,0 -DA:342,16 -DA:344,8 -DA:346,8 -DA:348,16 -DA:350,16 -DA:354,8 -DA:357,8 -DA:367,5 -DA:368,0 -DA:369,1 -DA:370,1 -DA:372,3 -DA:374,4 -DA:375,1 -DA:376,1 -DA:377,1 -DA:378,3 -DA:380,0 -DA:382,1 -DA:383,2 -DA:385,2 -DA:401,26 -DA:402,0 -DA:403,6 -DA:410,12 -DA:411,6 -DA:412,13 -DA:413,3 -DA:416,11 -DA:418,7 -DA:420,5 -DA:424,5 -DA:431,5 -DA:434,5 -DA:447,6 -DA:448,0 -DA:449,1 -DA:453,2 -DA:455,2 -DA:470,16 -DA:471,0 -DA:472,4 -DA:479,8 -DA:482,4 -DA:485,4 -DA:491,4 -DA:492,4 -DA:494,4 -DA:505,0 -DA:506,0 -DA:507,0 -DA:511,0 -DA:512,0 -DA:517,0 -DA:518,0 -DA:531,0 -DA:532,0 -DA:533,0 -DA:537,0 -DA:538,0 -DA:539,0 -DA:554,10 -DA:555,0 -DA:556,2 -DA:561,4 -DA:562,2 -DA:577,6 -DA:578,0 -DA:579,1 -DA:584,1 -DA:585,1 -DA:600,0 -DA:601,0 -DA:602,0 -DA:606,0 -DA:607,0 -DA:615,0 -DA:616,0 -DA:617,0 -DA:620,0 -DA:621,0 -DA:622,0 -DA:623,0 -DA:624,0 -DA:625,0 -DA:626,0 -DA:633,0 -DA:634,0 -DA:635,0 -DA:641,0 -DA:642,0 -DA:643,0 -DA:644,0 -DA:645,0 -DA:646,0 -DA:647,0 -DA:648,0 -DA:649,0 -DA:650,0 -DA:652,0 -DA:654,0 -DA:655,0 -DA:656,0 -DA:658,0 -DA:668,0 -DA:669,0 -DA:670,0 -DA:675,0 -DA:676,0 -DA:677,0 -DA:678,0 -DA:679,0 -DA:680,0 -DA:681,0 -DA:682,0 -DA:683,0 -DA:685,0 -DA:688,0 -DA:689,0 -DA:696,0 -DA:697,0 -DA:698,0 -DA:704,0 -DA:705,0 -DA:706,0 -DA:707,0 -DA:708,0 -DA:709,0 -DA:711,0 -DA:720,0 -DA:721,0 -DA:722,0 -DA:723,0 -DA:724,0 -DA:730,0 -DA:731,0 -DA:732,0 -DA:733,0 -DA:735,0 -DA:737,0 -DA:738,0 -DA:739,0 -DA:741,0 -DA:743,0 -DA:744,0 -DA:745,0 -DA:747,0 -DA:749,0 -LF:199 -LH:65 -end_of_record -TN: -SF:/home/erick/hashed/hashed-substrate/pallets/bitcoin-vaults/src/types.rs -FN:213,clone -FN:275,is_ready_to_finalize -FN:282,next_status -FN:306,default -FNF:4 -FNDA:0,clone -FNDA:0,is_ready_to_finalize -FNDA:0,next_status -FNDA:0,default -DA:25,0 -DA:64,4 -DA:65,8 -DA:68,4 -DA:69,8 -DA:70,4 -DA:71,4 -DA:72,0 -DA:75,5 -DA:76,5 -DA:77,4 -DA:78,5 -DA:79,5 -DA:83,4 -DA:84,4 -DA:89,0 -DA:90,0 -DA:95,5 -DA:97,5 -DA:98,5 -DA:99,5 -DA:100,5 -DA:101,5 -DA:102,5 -DA:116,0 -DA:118,0 -DA:119,0 -DA:142,0 -DA:143,0 -DA:152,1 -DA:154,4 -DA:155,5 -DA:156,5 -DA:157,5 -DA:158,1 -DA:159,5 -DA:160,5 -DA:161,5 -DA:162,5 -DA:163,5 -DA:164,5 -DA:188,4 -DA:189,4 -DA:213,0 -DA:215,0 -DA:216,0 -DA:217,0 -DA:218,0 -DA:224,0 -DA:225,0 -DA:254,0 -DA:255,0 -DA:275,0 -DA:276,0 -DA:277,0 -DA:278,0 -DA:282,0 -DA:284,0 -DA:285,0 -DA:286,0 -DA:287,0 -DA:288,0 -DA:290,0 -DA:306,0 -DA:307,0 -DA:312,0 -DA:313,0 -DA:314,0 -DA:315,0 -DA:317,0 -DA:320,0 -DA:337,5 -DA:338,5 -DA:343,5 -DA:344,5 -DA:345,5 -DA:346,4 -DA:347,0 -DA:348,0 -DA:354,4 -DA:355,4 -DA:356,0 -DA:357,0 -DA:358,8 -DA:362,0 -DA:363,0 -DA:364,0 -DA:365,0 -DA:366,0 -LF:89 -LH:43 -end_of_record -TN: -SF:/home/erick/hashed/hashed-substrate/pallets/confidential-docs/src/functions.rs -FN:9,do_set_vault -FN:30,do_set_owned_document -FN:49,do_remove_owned_document -FN:53,{closure#0} -FN:62,do_share_document -FN:85,do_update_shared_document_metadata -FN:95,do_remove_shared_document -FN:99,{closure#0} -FN:104,{closure#0} -FN:113,validate_owned_doc -FN:127,validate_shared_doc -FN:145,validate_has_public_key -FN:149,validate_cid -FN:154,validate_doc_name -FN:159,validate_doc_desc -FNF:15 -FNDA:4,do_set_vault -FNDA:2,do_set_owned_document -FNDA:1,do_remove_owned_document -FNDA:3,{closure#0} -FNDA:2,do_share_document -FNDA:1,do_update_shared_document_metadata -FNDA:1,do_remove_shared_document -FNDA:3,{closure#0} -FNDA:3,{closure#0} -FNDA:2,validate_owned_doc -FNDA:2,validate_shared_doc -FNDA:2,validate_has_public_key -FNDA:4,validate_cid -FNDA:1,validate_doc_name -FNDA:1,validate_doc_desc -DA:9,4 -DA:10,9 -DA:11,4 -DA:12,4 -DA:13,2 -DA:15,5 -DA:19,4 -DA:20,4 -DA:22,8 -DA:23,4 -DA:24,4 -DA:26,4 -DA:27,4 -DA:30,2 -DA:31,4 -DA:32,3 -DA:33,4 -DA:34,2 -DA:35,0 -DA:36,0 -DA:37,2 -DA:38,3 -DA:40,8 -DA:41,2 -DA:42,0 -DA:44,4 -DA:45,2 -DA:46,2 -DA:49,1 -DA:50,5 -DA:51,5 -DA:52,5 -DA:53,3 -DA:54,2 -DA:55,1 -DA:56,0 -DA:57,2 -DA:58,1 -DA:59,1 -DA:62,2 -DA:63,2 -DA:64,5 -DA:65,4 -DA:66,2 -DA:67,2 -DA:68,2 -DA:69,0 -DA:70,0 -DA:72,6 -DA:73,2 -DA:74,0 -DA:76,8 -DA:77,2 -DA:78,0 -DA:80,4 -DA:81,2 -DA:82,2 -DA:85,1 -DA:86,6 -DA:87,5 -DA:88,2 -DA:89,1 -DA:90,1 -DA:91,1 -DA:92,1 -DA:95,1 -DA:96,5 -DA:97,5 -DA:98,5 -DA:99,3 -DA:100,2 -DA:101,1 -DA:102,0 -DA:103,5 -DA:104,3 -DA:105,2 -DA:106,1 -DA:107,0 -DA:108,2 -DA:109,1 -DA:110,1 -DA:113,2 -DA:114,0 -DA:115,2 -DA:116,2 -DA:117,2 -DA:118,2 -DA:119,0 -DA:120,3 -DA:121,3 -DA:122,3 -DA:123,5 -DA:124,2 -DA:127,2 -DA:128,0 -DA:129,2 -DA:130,2 -DA:131,2 -DA:132,2 -DA:133,2 -DA:134,0 -DA:135,3 -DA:136,5 -DA:137,5 -DA:138,5 -DA:139,5 -DA:140,5 -DA:141,5 -DA:142,2 -DA:145,2 -DA:146,3 -DA:147,2 -DA:149,4 -DA:150,5 -DA:151,4 -DA:154,1 -DA:155,2 -DA:156,1 -DA:159,1 -DA:160,2 -DA:161,2 -LF:121 -LH:107 -end_of_record -TN: -SF:/home/erick/hashed/hashed-substrate/pallets/confidential-docs/src/lib.rs -FN:62,vaults -FN:72,public_keys -FN:82,pallet_prefix -FN:92,owned_docs>> -FN:102,owned_docs_by_owner -FN:112,shared_docs>> -FN:122,shared_docs_by_to -FN:132,shared_docs_by_from -FN:215,{closure#0} -FN:217,set_vault -FN:229,{closure#0} -FN:231,set_owned_document -FN:243,{closure#0} -FN:245,remove_owned_document -FN:257,{closure#0} -FN:259,share_document -FN:272,{closure#0} -FN:274,update_shared_document_metadata -FN:288,{closure#0} -FN:290,remove_shared_document -FN:306,{closure#0} -FN:308,kill_storage -FNF:22 -FNDA:10,vaults -FNDA:8,public_keys -FNDA:8,pallet_prefix -FNDA:6,owned_docs>> -FNDA:8,owned_docs_by_owner -FNDA:6,shared_docs>> -FNDA:10,shared_docs_by_to -FNDA:10,shared_docs_by_from -FNDA:20,{closure#0} -FNDA:4,set_vault -FNDA:9,{closure#0} -FNDA:2,set_owned_document -FNDA:5,{closure#0} -FNDA:1,remove_owned_document -FNDA:10,{closure#0} -FNDA:2,share_document -FNDA:7,{closure#0} -FNDA:1,update_shared_document_metadata -FNDA:5,{closure#0} -FNDA:1,remove_shared_document -FNDA:0,{closure#0} -FNDA:0,kill_storage -DA:20,5 -DA:62,10 -DA:72,8 -DA:82,8 -DA:92,6 -DA:102,8 -DA:112,6 -DA:122,10 -DA:132,10 -DA:215,20 -DA:216,0 -DA:217,4 -DA:218,8 -DA:219,4 -DA:229,9 -DA:230,0 -DA:231,2 -DA:232,4 -DA:233,2 -DA:243,5 -DA:244,0 -DA:245,1 -DA:246,2 -DA:247,1 -DA:257,10 -DA:258,0 -DA:259,2 -DA:260,4 -DA:261,2 -DA:272,7 -DA:273,0 -DA:274,1 -DA:275,3 -DA:276,2 -DA:288,5 -DA:289,0 -DA:290,1 -DA:291,2 -DA:292,1 -DA:306,0 -DA:307,0 -DA:308,0 -DA:311,0 -DA:312,0 -DA:313,0 -DA:314,0 -DA:315,0 -DA:316,0 -DA:317,0 -DA:318,0 -DA:319,0 -LF:51 -LH:33 -end_of_record -TN: -SF:/home/erick/hashed/hashed-substrate/pallets/fruniques/src/functions.rs -FN:16,u32_to_instance_id -FN:47,account_id_to_lookup_source -FN:90,set_attribute -FN:145,do_create_collection -FN:196,do_spawn -FNF:5 -FNDA:0,u32_to_instance_id -FNDA:2,account_id_to_lookup_source -FNDA:0,set_attribute -FNDA:1,do_create_collection -FNDA:2,do_spawn -DA:16,0 -DA:20,0 -DA:27,0 -DA:30,0 -DA:31,0 -DA:34,1 -DA:35,1 -DA:38,0 -DA:39,0 -DA:40,0 -DA:42,0 -DA:44,0 -DA:47,2 -DA:50,2 -DA:59,0 -DA:60,0 -DA:61,0 -DA:63,0 -DA:66,1 -DA:67,1 -DA:70,2 -DA:71,2 -DA:72,1 -DA:74,2 -DA:77,1 -DA:78,1 -DA:79,1 -DA:81,2 -DA:84,0 -DA:85,0 -DA:87,0 -DA:90,0 -DA:98,0 -DA:99,0 -DA:100,0 -DA:101,0 -DA:102,0 -DA:104,0 -DA:113,0 -DA:114,0 -DA:122,0 -DA:123,0 -DA:131,0 -DA:132,0 -DA:135,0 -DA:136,0 -DA:137,0 -DA:138,0 -DA:140,0 -DA:145,1 -DA:151,2 -DA:154,1 -DA:155,2 -DA:156,2 -DA:157,1 -DA:159,1 -DA:162,6 -DA:164,3 -DA:175,0 -DA:177,0 -DA:179,0 -DA:180,0 -DA:182,0 -DA:185,0 -DA:186,0 -DA:187,0 -DA:188,0 -DA:189,0 -DA:193,0 -DA:196,2 -DA:204,4 -DA:205,4 -DA:208,2 -DA:209,2 -DA:210,0 -DA:211,2 -DA:215,3 -DA:216,3 -DA:218,1 -DA:219,1 -DA:220,1 -DA:221,1 -DA:222,1 -DA:227,2 -DA:230,0 -DA:231,0 -LF:86 -LH:37 -end_of_record -TN: -SF:/home/erick/hashed/hashed-substrate/pallets/fruniques/src/lib.rs -FN:94,pallet_prefix -FN:99,next_collection -FN:108,pallet_prefix -FN:119,pallet_prefix -FN:132,pallet_prefix -FN:145,pallet_prefix -FN:163,{closure#0} -FN:179,create_collection -FN:202,instance_exists -FN:223,set_attributes -FN:258,spawn -FN:309,verify -FN:337,invite -FN:359,force_set_counter -FN:387,force_destroy_collection -FN:414,{closure#0} -FNF:16 -FNDA:0,pallet_prefix -FNDA:4,next_collection -FNDA:4,pallet_prefix -FNDA:2,pallet_prefix -FNDA:0,pallet_prefix -FNDA:2,pallet_prefix -FNDA:0,{closure#0} -FNDA:1,create_collection -FNDA:0,instance_exists -FNDA:1,set_attributes -FNDA:2,spawn -FNDA:0,verify -FNDA:0,invite -FNDA:0,force_set_counter -FNDA:0,force_destroy_collection -FNDA:0,{closure#0} -DA:17,12 -DA:94,0 -DA:99,4 -DA:108,4 -DA:119,2 -DA:132,0 -DA:145,2 -DA:163,0 -DA:164,0 -DA:165,0 -DA:166,0 -DA:168,0 -DA:178,0 -DA:179,1 -DA:183,2 -DA:185,2 -DA:188,1 -DA:189,0 -DA:190,1 -DA:191,1 -DA:194,3 -DA:196,3 -DA:198,3 -DA:201,0 -DA:202,0 -DA:214,0 -DA:222,0 -DA:223,1 -DA:229,3 -DA:232,2 -DA:233,2 -DA:235,2 -DA:237,3 -DA:238,0 -DA:240,0 -DA:241,0 -DA:242,0 -DA:243,0 -DA:244,0 -DA:247,0 -DA:257,0 -DA:258,2 -DA:265,6 -DA:267,2 -DA:268,2 -DA:271,3 -DA:272,4 -DA:274,4 -DA:275,2 -DA:277,2 -DA:278,2 -DA:279,1 -DA:284,1 -DA:285,1 -DA:288,1 -DA:291,4 -DA:293,2 -DA:294,2 -DA:295,2 -DA:296,2 -DA:297,0 -DA:300,2 -DA:308,0 -DA:309,0 -DA:314,0 -DA:315,0 -DA:317,0 -DA:319,0 -DA:321,0 -DA:323,0 -DA:336,0 -DA:337,0 -DA:343,0 -DA:345,0 -DA:346,0 -DA:358,0 -DA:359,0 -DA:364,0 -DA:366,0 -DA:367,0 -DA:368,0 -DA:370,0 -DA:371,0 -DA:374,0 -DA:386,0 -DA:387,0 -DA:393,0 -DA:395,0 -DA:397,0 -DA:398,0 -DA:399,0 -DA:401,0 -DA:414,0 -DA:415,0 -DA:416,0 -DA:417,0 -DA:418,0 -DA:419,0 -DA:420,0 -DA:421,0 -DA:422,0 -DA:423,0 -DA:424,0 -LF:103 -LH:40 -end_of_record -TN: -SF:/home/erick/hashed/hashed-substrate/pallets/fruniques/src/types.rs -FN:50,default -FN:56,to_vec -FN:65,id -FN:69,enum_to_vec -FN:93,to_vec -FN:103,id -FN:107,owner_permissions -FN:112,admin_permissions -FN:126,collaborator_permissions -FN:131,holder_permissions -FNF:10 -FNDA:0,default -FNDA:0,to_vec -FNDA:0,id -FNDA:0,enum_to_vec -FNDA:0,to_vec -FNDA:0,id -FNDA:0,owner_permissions -FNDA:0,admin_permissions -FNDA:0,collaborator_permissions -FNDA:0,holder_permissions -DA:50,0 -DA:51,0 -DA:56,0 -DA:57,0 -DA:58,0 -DA:59,0 -DA:60,0 -DA:61,0 -DA:65,0 -DA:66,0 -DA:69,0 -DA:71,0 -DA:93,0 -DA:94,0 -DA:95,0 -DA:96,0 -DA:97,0 -DA:98,0 -DA:99,0 -DA:103,0 -DA:104,0 -DA:107,0 -DA:109,0 -DA:112,0 -DA:114,0 -DA:115,0 -DA:116,0 -DA:117,0 -DA:118,0 -DA:119,0 -DA:122,0 -DA:126,0 -DA:128,0 -DA:131,0 -DA:133,0 -LF:35 -LH:0 -end_of_record -TN: -SF:/home/erick/hashed/hashed-substrate/pallets/fund-admin/src/functions.rs -FN:49,do_sudo_add_administrator -FN:60,do_sudo_remove_administrator -FN:78,do_create_project -FN:157,do_edit_project -FN:221,do_delete_project -FN:286,do_execute_assign_users -FN:322,do_assign_user -FN:360,do_unassign_user -FN:398,do_execute_users -FN:446,do_create_user -FN:484,do_update_user -FN:512,do_delete_user -FN:549,do_edit_user -FN:593,do_execute_expenditures -FN:668,do_create_expenditure -FN:724,do_update_expenditure -FN:770,do_delete_expenditure -FN:792,do_create_drawdown -FN:838,do_initialize_drawdowns -FN:860,do_submit_drawdown -FN:906,do_approve_drawdown -FN:962,do_reject_drawdown -FN:1069,do_execute_transactions -FN:1130,do_create_transaction -FN:1183,do_update_transaction -FN:1228,do_delete_transaction -FN:1257,do_up_bulk_upload -FN:1306,do_execute_inflation_adjustment -FN:1396,is_project_completion_date_later -FN:1407,add_project_role -FN:1493,remove_project_role -FN:1579,check_user_role -FN:1599,is_project_completed -FN:1612,is_drawdown_editable -FN:1649,is_transaction_editable -FN:1687,sudo_register_admin -FN:1745,do_calculate_drawdown_total_amount -FNF:37 -FNDA:5,do_sudo_add_administrator -FNDA:1,do_sudo_remove_administrator -FNDA:0,do_create_project -FNDA:0,do_edit_project -FNDA:0,do_delete_project -FNDA:0,do_execute_assign_users -FNDA:0,do_assign_user -FNDA:0,do_unassign_user -FNDA:3,do_execute_users -FNDA:1,do_create_user -FNDA:1,do_update_user -FNDA:1,do_delete_user -FNDA:0,do_edit_user -FNDA:0,do_execute_expenditures -FNDA:0,do_create_expenditure -FNDA:0,do_update_expenditure -FNDA:0,do_delete_expenditure -FNDA:0,do_create_drawdown -FNDA:0,do_initialize_drawdowns -FNDA:0,do_submit_drawdown -FNDA:0,do_approve_drawdown -FNDA:0,do_reject_drawdown -FNDA:0,do_execute_transactions -FNDA:0,do_create_transaction -FNDA:0,do_update_transaction -FNDA:0,do_delete_transaction -FNDA:0,do_up_bulk_upload -FNDA:0,do_execute_inflation_adjustment -FNDA:0,is_project_completion_date_later -FNDA:0,add_project_role -FNDA:0,remove_project_role -FNDA:0,check_user_role -FNDA:0,is_project_completed -FNDA:0,is_drawdown_editable -FNDA:0,is_transaction_editable -FNDA:5,sudo_register_admin -FNDA:0,do_calculate_drawdown_total_amount -DA:18,8 -DA:20,8 -DA:21,8 -DA:22,8 -DA:23,9 -DA:26,16 -DA:27,8 -DA:30,8 -DA:31,8 -DA:34,8 -DA:35,8 -DA:38,8 -DA:39,8 -DA:42,8 -DA:43,8 -DA:45,8 -DA:46,8 -DA:49,5 -DA:54,11 -DA:56,5 -DA:57,5 -DA:60,1 -DA:64,3 -DA:66,3 -DA:67,3 -DA:78,0 -DA:102,0 -DA:105,0 -DA:109,0 -DA:112,0 -DA:116,0 -DA:117,0 -DA:118,0 -DA:119,0 -DA:124,0 -DA:133,0 -DA:137,0 -DA:138,0 -DA:141,0 -DA:144,0 -DA:145,0 -DA:149,0 -DA:152,0 -DA:154,0 -DA:157,0 -DA:168,0 -DA:171,0 -DA:174,0 -DA:177,0 -DA:180,0 -DA:181,0 -DA:183,0 -DA:184,0 -DA:185,0 -DA:187,0 -DA:188,0 -DA:189,0 -DA:191,0 -DA:192,0 -DA:193,0 -DA:195,0 -DA:196,0 -DA:197,0 -DA:199,0 -DA:200,0 -DA:202,0 -DA:205,0 -DA:208,0 -DA:210,0 -DA:214,0 -DA:217,0 -DA:218,0 -DA:221,0 -DA:226,0 -DA:229,0 -DA:232,0 -DA:235,0 -DA:240,0 -DA:241,0 -DA:242,0 -DA:243,0 -DA:248,0 -DA:251,0 -DA:254,0 -DA:255,0 -DA:256,0 -DA:260,0 -DA:262,0 -DA:263,0 -DA:265,0 -DA:266,0 -DA:267,0 -DA:271,0 -DA:274,0 -DA:279,0 -DA:282,0 -DA:283,0 -DA:286,0 -DA:296,0 -DA:299,0 -DA:302,0 -DA:305,0 -DA:306,0 -DA:307,0 -DA:308,0 -DA:310,0 -DA:311,0 -DA:318,0 -DA:319,0 -DA:322,0 -DA:328,0 -DA:331,0 -DA:332,0 -DA:335,0 -DA:338,0 -DA:341,0 -DA:342,0 -DA:343,0 -DA:347,0 -DA:348,0 -DA:349,0 -DA:353,0 -DA:356,0 -DA:357,0 -DA:360,0 -DA:366,0 -DA:369,0 -DA:370,0 -DA:373,0 -DA:376,0 -DA:379,0 -DA:380,0 -DA:384,0 -DA:385,0 -DA:389,0 -DA:391,0 -DA:392,0 -DA:398,3 -DA:408,7 -DA:410,5 -DA:411,2 -DA:412,1 -DA:415,2 -DA:416,2 -DA:417,3 -DA:420,0 -DA:423,2 -DA:424,2 -DA:425,1 -DA:428,0 -DA:430,2 -DA:434,1 -DA:441,1 -DA:442,1 -DA:446,1 -DA:452,2 -DA:455,3 -DA:458,2 -DA:460,1 -DA:461,0 -DA:462,2 -DA:464,0 -DA:467,1 -DA:469,1 -DA:471,1 -DA:476,2 -DA:477,1 -DA:481,1 -DA:484,1 -DA:490,3 -DA:493,5 -DA:494,4 -DA:496,4 -DA:497,4 -DA:499,4 -DA:501,2 -DA:503,1 -DA:505,1 -DA:508,1 -DA:509,1 -DA:512,1 -DA:516,3 -DA:518,1 -DA:519,0 -DA:520,0 -DA:522,0 -DA:524,2 -DA:525,2 -DA:528,2 -DA:531,1 -DA:534,1 -DA:535,0 -DA:536,0 -DA:537,0 -DA:541,1 -DA:545,1 -DA:549,0 -DA:557,0 -DA:560,0 -DA:561,0 -DA:564,0 -DA:565,0 -DA:566,0 -DA:568,0 -DA:569,0 -DA:570,0 -DA:572,0 -DA:573,0 -DA:574,0 -DA:576,0 -DA:578,0 -DA:579,0 -DA:581,0 -DA:584,0 -DA:586,0 -DA:593,0 -DA:607,0 -DA:610,0 -DA:613,0 -DA:615,0 -DA:616,0 -DA:617,0 -DA:620,0 -DA:621,0 -DA:622,0 -DA:623,0 -DA:624,0 -DA:625,0 -DA:628,0 -DA:631,0 -DA:632,0 -DA:633,0 -DA:634,0 -DA:635,0 -DA:636,0 -DA:639,0 -DA:642,0 -DA:651,0 -DA:668,0 -DA:677,0 -DA:680,0 -DA:683,0 -DA:686,0 -DA:689,0 -DA:692,0 -DA:693,0 -DA:694,0 -DA:696,0 -DA:702,0 -DA:711,0 -DA:712,0 -DA:715,0 -DA:716,0 -DA:717,0 -DA:720,0 -DA:721,0 -DA:724,0 -DA:733,0 -DA:736,0 -DA:739,0 -DA:742,0 -DA:743,0 -DA:746,0 -DA:750,0 -DA:751,0 -DA:753,0 -DA:754,0 -DA:756,0 -DA:757,0 -DA:759,0 -DA:760,0 -DA:763,0 -DA:766,0 -DA:767,0 -DA:770,0 -DA:774,0 -DA:777,0 -DA:780,0 -DA:781,0 -DA:782,0 -DA:785,0 -DA:786,0 -DA:792,0 -DA:801,0 -DA:804,0 -DA:807,0 -DA:815,0 -DA:825,0 -DA:826,0 -DA:829,0 -DA:830,0 -DA:831,0 -DA:835,0 -DA:838,0 -DA:843,0 -DA:846,0 -DA:849,0 -DA:852,0 -DA:855,0 -DA:857,0 -DA:860,0 -DA:865,0 -DA:868,0 -DA:871,0 -DA:874,0 -DA:877,0 -DA:879,0 -DA:882,0 -DA:885,0 -DA:886,0 -DA:887,0 -DA:888,0 -DA:889,0 -DA:894,0 -DA:895,0 -DA:896,0 -DA:897,0 -DA:901,0 -DA:903,0 -DA:906,0 -DA:912,0 -DA:915,0 -DA:918,0 -DA:921,0 -DA:924,0 -DA:927,0 -DA:929,0 -DA:931,0 -DA:934,0 -DA:937,0 -DA:938,0 -DA:939,0 -DA:940,0 -DA:941,0 -DA:946,0 -DA:947,0 -DA:948,0 -DA:949,0 -DA:950,0 -DA:954,0 -DA:957,0 -DA:958,0 -DA:962,0 -DA:970,0 -DA:973,0 -DA:976,0 -DA:979,0 -DA:980,0 -DA:982,0 -DA:985,0 -DA:988,0 -DA:990,0 -DA:993,0 -DA:996,0 -DA:997,0 -DA:998,0 -DA:999,0 -DA:1004,0 -DA:1006,0 -DA:1008,0 -DA:1009,0 -DA:1010,0 -DA:1011,0 -DA:1016,0 -DA:1019,0 -DA:1021,0 -DA:1024,0 -DA:1026,0 -DA:1029,0 -DA:1032,0 -DA:1033,0 -DA:1034,0 -DA:1035,0 -DA:1041,0 -DA:1044,0 -DA:1045,0 -DA:1046,0 -DA:1047,0 -DA:1053,0 -DA:1054,0 -DA:1055,0 -DA:1056,0 -DA:1060,0 -DA:1062,0 -DA:1069,0 -DA:1082,0 -DA:1085,0 -DA:1088,0 -DA:1091,0 -DA:1093,0 -DA:1094,0 -DA:1095,0 -DA:1098,0 -DA:1099,0 -DA:1100,0 -DA:1101,0 -DA:1102,0 -DA:1105,0 -DA:1108,0 -DA:1109,0 -DA:1110,0 -DA:1113,0 -DA:1116,0 -DA:1124,0 -DA:1126,0 -DA:1127,0 -DA:1130,0 -DA:1138,0 -DA:1144,0 -DA:1147,0 -DA:1150,0 -DA:1162,0 -DA:1168,0 -DA:1169,0 -DA:1172,0 -DA:1173,0 -DA:1174,0 -DA:1178,0 -DA:1179,0 -DA:1183,0 -DA:1189,0 -DA:1192,0 -DA:1193,0 -DA:1197,0 -DA:1198,0 -DA:1202,0 -DA:1205,0 -DA:1206,0 -DA:1209,0 -DA:1211,0 -DA:1212,0 -DA:1215,0 -DA:1216,0 -DA:1218,0 -DA:1219,0 -DA:1223,0 -DA:1225,0 -DA:1228,0 -DA:1232,0 -DA:1235,0 -DA:1238,0 -DA:1241,0 -DA:1242,0 -DA:1243,0 -DA:1247,0 -DA:1250,0 -DA:1252,0 -DA:1257,0 -DA:1266,0 -DA:1269,0 -DA:1272,0 -DA:1275,0 -DA:1278,0 -DA:1279,0 -DA:1282,0 -DA:1285,0 -DA:1288,0 -DA:1291,0 -DA:1292,0 -DA:1293,0 -DA:1294,0 -DA:1295,0 -DA:1296,0 -DA:1297,0 -DA:1298,0 -DA:1301,0 -DA:1306,0 -DA:1311,0 -DA:1314,0 -DA:1317,0 -DA:1319,0 -DA:1320,0 -DA:1322,0 -DA:1324,0 -DA:1325,0 -DA:1326,0 -DA:1327,0 -DA:1331,0 -DA:1335,0 -DA:1337,0 -DA:1338,0 -DA:1339,0 -DA:1340,0 -DA:1346,0 -DA:1353,5 -DA:1354,5 -DA:1356,5 -DA:1360,8 -DA:1362,16 -DA:1367,5 -DA:1368,5 -DA:1369,0 -DA:1378,0 -DA:1381,0 -DA:1384,0 -DA:1387,0 -DA:1388,0 -DA:1389,0 -DA:1390,0 -DA:1393,0 -DA:1396,0 -DA:1400,0 -DA:1403,0 -DA:1404,0 -DA:1407,0 -DA:1413,0 -DA:1414,0 -DA:1415,0 -DA:1417,0 -DA:1422,0 -DA:1423,0 -DA:1424,0 -DA:1425,0 -DA:1427,0 -DA:1429,0 -DA:1430,0 -DA:1431,0 -DA:1434,0 -DA:1437,0 -DA:1439,0 -DA:1440,0 -DA:1441,0 -DA:1442,0 -DA:1444,0 -DA:1446,0 -DA:1447,0 -DA:1448,0 -DA:1451,0 -DA:1454,0 -DA:1456,0 -DA:1457,0 -DA:1458,0 -DA:1459,0 -DA:1461,0 -DA:1463,0 -DA:1464,0 -DA:1465,0 -DA:1468,0 -DA:1471,0 -DA:1473,0 -DA:1474,0 -DA:1475,0 -DA:1476,0 -DA:1478,0 -DA:1480,0 -DA:1481,0 -DA:1482,0 -DA:1485,0 -DA:1490,0 -DA:1493,0 -DA:1499,0 -DA:1500,0 -DA:1501,0 -DA:1503,0 -DA:1507,0 -DA:1508,0 -DA:1509,0 -DA:1510,0 -DA:1512,0 -DA:1514,0 -DA:1515,0 -DA:1518,0 -DA:1521,0 -DA:1523,0 -DA:1524,0 -DA:1525,0 -DA:1526,0 -DA:1528,0 -DA:1530,0 -DA:1531,0 -DA:1534,0 -DA:1537,0 -DA:1539,0 -DA:1540,0 -DA:1541,0 -DA:1542,0 -DA:1544,0 -DA:1546,0 -DA:1547,0 -DA:1550,0 -DA:1553,0 -DA:1555,0 -DA:1556,0 -DA:1557,0 -DA:1558,0 -DA:1560,0 -DA:1562,0 -DA:1563,0 -DA:1566,0 -DA:1570,0 -DA:1579,0 -DA:1584,0 -DA:1587,0 -DA:1588,0 -DA:1592,0 -DA:1593,0 -DA:1596,0 -DA:1599,0 -DA:1603,0 -DA:1606,0 -DA:1608,0 -DA:1612,0 -DA:1616,0 -DA:1619,0 -DA:1620,0 -DA:1623,0 -DA:1624,0 -DA:1625,0 -DA:1627,0 -DA:1628,0 -DA:1630,0 -DA:1631,0 -DA:1635,0 -DA:1637,0 -DA:1638,0 -DA:1639,0 -DA:1641,0 -DA:1642,0 -DA:1649,0 -DA:1653,0 -DA:1657,0 -DA:1658,0 -DA:1659,0 -DA:1661,0 -DA:1662,0 -DA:1668,3 -DA:1670,3 -DA:1671,3 -DA:1672,3 -DA:1673,3 -DA:1678,0 -DA:1680,0 -DA:1681,0 -DA:1682,0 -DA:1683,0 -DA:1687,5 -DA:1692,11 -DA:1695,8 -DA:1700,5 -DA:1702,5 -DA:1707,10 -DA:1711,5 -DA:1712,5 -DA:1713,5 -DA:1714,5 -DA:1717,5 -DA:1720,1 -DA:1722,3 -DA:1725,4 -DA:1729,3 -DA:1730,3 -DA:1731,3 -DA:1732,3 -DA:1735,3 -DA:1739,0 -DA:1740,0 -DA:1741,0 -DA:1742,0 -DA:1745,0 -DA:1750,0 -DA:1753,0 -DA:1755,0 -DA:1757,0 -DA:1759,0 -DA:1762,0 -DA:1766,0 -DA:1767,0 -DA:1768,0 -DA:1769,0 -DA:1772,0 -LF:670 -LH:105 -end_of_record -TN: -SF:/home/erick/hashed/hashed-substrate/pallets/fund-admin/src/lib.rs -FN:23,pallet_constants_metadata -FN:98,pallet_prefix -FN:106,users_info -FN:116,pallet_prefix -FN:126,users_by_project -FN:136,pallet_prefix -FN:146,pallet_prefix -FN:156,expenditures_by_project -FN:166,pallet_prefix -FN:176,drawdowns_by_project -FN:186,pallet_prefix -FN:196,transactions_by_drawdown -FN:413,{closure#0} -FN:415,initial_setup -FN:436,{closure#0} -FN:438,sudo_add_administrator -FN:463,{closure#0} -FN:465,sudo_remove_administrator -FN:505,{closure#0} -FN:507,users -FN:538,{closure#0} -FN:540,users_edit_user -FN:592,projects_create_project -FN:644,{closure#0} -FN:646,projects_edit_project -FN:676,{closure#0} -FN:678,projects_delete_project -FN:721,{closure#0} -FN:723,projects_assign_user -FN:767,{closure#0} -FN:769,expenditures -FN:823,{closure#0} -FN:825,submit_drawdown -FN:905,{closure#0} -FN:907,approve_drawdown -FN:997,{closure#0} -FN:999,reject_drawdown -FN:1031,{closure#0} -FN:1033,up_bulkupload -FN:1066,{closure#0} -FN:1068,inflation_rate -FN:1087,{closure#0} -FN:1089,kill_storage -FNF:43 -FNDA:3,pallet_constants_metadata -FNDA:16,pallet_prefix -FNDA:20,users_info -FNDA:0,pallet_prefix -FNDA:0,users_by_project -FNDA:2,pallet_prefix -FNDA:0,pallet_prefix -FNDA:0,expenditures_by_project -FNDA:0,pallet_prefix -FNDA:0,drawdowns_by_project -FNDA:0,pallet_prefix -FNDA:0,transactions_by_drawdown -FNDA:5,{closure#0} -FNDA:1,initial_setup -FNDA:30,{closure#0} -FNDA:6,sudo_add_administrator -FNDA:8,{closure#0} -FNDA:1,sudo_remove_administrator -FNDA:10,{closure#0} -FNDA:2,users -FNDA:0,{closure#0} -FNDA:0,users_edit_user -FNDA:0,projects_create_project -FNDA:0,{closure#0} -FNDA:0,projects_edit_project -FNDA:0,{closure#0} -FNDA:0,projects_delete_project -FNDA:0,{closure#0} -FNDA:0,projects_assign_user -FNDA:0,{closure#0} -FNDA:0,expenditures -FNDA:0,{closure#0} -FNDA:0,submit_drawdown -FNDA:0,{closure#0} -FNDA:0,approve_drawdown -FNDA:0,{closure#0} -FNDA:0,reject_drawdown -FNDA:0,{closure#0} -FNDA:0,up_bulkupload -FNDA:0,{closure#0} -FNDA:0,inflation_rate -FNDA:0,{closure#0} -FNDA:0,kill_storage -DA:23,3 -DA:98,16 -DA:106,20 -DA:116,0 -DA:126,0 -DA:136,2 -DA:146,0 -DA:156,0 -DA:166,0 -DA:176,0 -DA:186,0 -DA:196,0 -DA:413,5 -DA:414,0 -DA:415,1 -DA:418,1 -DA:419,2 -DA:420,0 -DA:436,30 -DA:437,0 -DA:438,6 -DA:443,12 -DA:444,6 -DA:445,5 -DA:463,8 -DA:464,0 -DA:465,1 -DA:469,2 -DA:470,2 -DA:471,3 -DA:505,10 -DA:506,0 -DA:507,2 -DA:516,6 -DA:518,3 -DA:538,0 -DA:539,0 -DA:540,0 -DA:547,0 -DA:549,0 -DA:591,0 -DA:592,0 -DA:615,0 -DA:617,0 -DA:644,0 -DA:645,0 -DA:646,0 -DA:656,0 -DA:658,0 -DA:676,0 -DA:677,0 -DA:678,0 -DA:682,0 -DA:684,0 -DA:721,0 -DA:722,0 -DA:723,0 -DA:732,0 -DA:734,0 -DA:767,0 -DA:768,0 -DA:769,0 -DA:782,0 -DA:784,0 -DA:823,0 -DA:824,0 -DA:825,0 -DA:838,0 -DA:840,0 -DA:842,0 -DA:843,0 -DA:846,0 -DA:847,0 -DA:848,0 -DA:851,0 -DA:853,0 -DA:856,0 -DA:857,0 -DA:858,0 -DA:863,0 -DA:905,0 -DA:906,0 -DA:907,0 -DA:920,0 -DA:923,0 -DA:924,0 -DA:926,0 -DA:927,0 -DA:930,0 -DA:931,0 -DA:932,0 -DA:936,0 -DA:939,0 -DA:941,0 -DA:944,0 -DA:945,0 -DA:946,0 -DA:950,0 -DA:954,0 -DA:959,0 -DA:961,0 -DA:997,0 -DA:998,0 -DA:999,0 -DA:1006,0 -DA:1008,0 -DA:1031,0 -DA:1032,0 -DA:1033,0 -DA:1041,0 -DA:1043,0 -DA:1066,0 -DA:1067,0 -DA:1068,0 -DA:1072,0 -DA:1074,0 -DA:1087,0 -DA:1088,0 -DA:1089,0 -DA:1092,0 -DA:1093,0 -DA:1094,0 -DA:1095,0 -DA:1096,0 -DA:1097,0 -DA:1098,0 -DA:1099,0 -DA:1100,0 -DA:1101,0 -DA:1102,0 -DA:1103,0 -DA:1105,0 -DA:1106,0 -LF:133 -LH:22 -end_of_record -TN: -SF:/home/erick/hashed/hashed-substrate/pallets/fund-admin/src/types.rs -FN:39,default -FN:86,default -FN:125,default -FN:139,default -FN:169,default -FN:188,to_vec -FN:200,id -FN:204,enum_to_vec -FN:231,to_vec -FN:248,id -FN:252,administrator_permissions -FN:271,builder_permissions -FN:280,investor_permissions -FN:285,issuer_permissions -FN:290,regional_center_permissions -FNF:15 -FNDA:0,default -FNDA:0,default -FNDA:0,default -FNDA:0,default -FNDA:0,default -FNDA:8,to_vec -FNDA:5,id -FNDA:0,enum_to_vec -FNDA:8,to_vec -FNDA:3,id -FNDA:8,administrator_permissions -FNDA:8,builder_permissions -FNDA:8,investor_permissions -FNDA:8,issuer_permissions -FNDA:8,regional_center_permissions -DA:39,0 -DA:40,0 -DA:86,0 -DA:87,0 -DA:125,0 -DA:126,0 -DA:139,0 -DA:140,0 -DA:169,0 -DA:170,0 -DA:188,8 -DA:189,8 -DA:192,16 -DA:193,16 -DA:194,16 -DA:195,16 -DA:196,8 -DA:200,5 -DA:201,5 -DA:204,0 -DA:206,0 -DA:231,8 -DA:232,8 -DA:233,16 -DA:234,16 -DA:235,16 -DA:236,16 -DA:237,16 -DA:238,16 -DA:239,16 -DA:240,16 -DA:241,16 -DA:242,16 -DA:243,16 -DA:244,8 -DA:248,3 -DA:249,3 -DA:252,8 -DA:254,8 -DA:255,8 -DA:256,8 -DA:257,8 -DA:258,8 -DA:259,8 -DA:260,8 -DA:261,8 -DA:262,8 -DA:263,8 -DA:264,8 -DA:265,8 -DA:266,8 -DA:267,0 -DA:271,8 -DA:274,8 -DA:275,8 -DA:276,8 -DA:277,0 -DA:280,8 -DA:282,8 -DA:285,8 -DA:287,8 -DA:290,8 -DA:292,8 -LF:63 -LH:49 -end_of_record -TN: -SF:/home/erick/hashed/hashed-substrate/pallets/gated-marketplace/src/functions.rs -FN:473,set_up_application -FNF:1 -FNDA:3,set_up_application -DA:16,8 -DA:17,8 -DA:18,24 -DA:19,16 -DA:20,16 -DA:21,8 -DA:24,8 -DA:25,8 -DA:27,8 -DA:29,8 -DA:31,8 -DA:32,8 -DA:35,8 -DA:37,8 -DA:39,9 -DA:41,16 -DA:42,16 -DA:43,16 -DA:44,8 -DA:45,8 -DA:46,8 -DA:49,3 -DA:51,7 -DA:53,5 -DA:55,4 -DA:57,1 -DA:59,5 -DA:61,5 -DA:62,2 -DA:65,5 -DA:66,2 -DA:67,2 -DA:69,2 -DA:70,2 -DA:73,0 -DA:74,0 -DA:76,0 -DA:79,0 -DA:81,0 -DA:82,0 -DA:85,0 -DA:87,0 -DA:90,0 -DA:92,0 -DA:94,0 -DA:97,1 -DA:99,3 -DA:100,1 -DA:101,1 -DA:102,1 -DA:104,1 -DA:105,1 -DA:106,1 -DA:107,8 -DA:108,3 -DA:109,1 -DA:111,1 -DA:112,3 -DA:115,3 -DA:117,1 -DA:118,1 -DA:122,5 -DA:126,10 -DA:130,5 -DA:131,0 -DA:132,3 -DA:133,0 -DA:136,0 -DA:137,5 -DA:141,3 -DA:142,4 -DA:146,1 -DA:149,3 -DA:154,2 -DA:155,0 -DA:156,2 -DA:157,2 -DA:159,0 -DA:161,3 -DA:164,2 -DA:166,2 -DA:168,0 -DA:170,2 -DA:175,1 -DA:176,1 -DA:180,1 -DA:182,4 -DA:185,3 -DA:187,2 -DA:188,1 -DA:189,1 -DA:193,2 -DA:195,3 -DA:198,3 -DA:200,4 -DA:201,1 -DA:202,1 -DA:205,2 -DA:208,3 -DA:209,3 -DA:211,3 -DA:212,4 -DA:214,2 -DA:218,4 -DA:221,3 -DA:224,3 -DA:231,1 -DA:241,5 -DA:244,6 -DA:245,1 -DA:246,0 -DA:249,6 -DA:250,2 -DA:251,0 -DA:255,3 -DA:256,1 -DA:259,4 -DA:260,2 -DA:261,0 -DA:263,2 -DA:264,1 -DA:267,1 -DA:269,4 -DA:272,2 -DA:273,2 -DA:278,3 -DA:279,3 -DA:281,0 -DA:285,2 -DA:286,2 -DA:289,3 -DA:292,2 -DA:295,2 -DA:302,1 -DA:313,4 -DA:314,1 -DA:315,0 -DA:318,4 -DA:319,1 -DA:320,0 -DA:324,2 -DA:325,1 -DA:328,3 -DA:329,1 -DA:330,0 -DA:332,1 -DA:333,1 -DA:336,3 -DA:339,5 -DA:341,3 -DA:344,3 -DA:347,4 -DA:350,2 -DA:353,2 -DA:357,2 -DA:359,2 -DA:361,2 -DA:364,4 -DA:365,1 -DA:369,2 -DA:372,2 -DA:374,1 -DA:375,1 -DA:378,1 -DA:381,4 -DA:383,2 -DA:386,2 -DA:389,3 -DA:392,3 -DA:395,2 -DA:398,2 -DA:402,2 -DA:404,2 -DA:406,2 -DA:408,4 -DA:409,1 -DA:413,2 -DA:416,2 -DA:418,1 -DA:419,1 -DA:423,1 -DA:425,3 -DA:428,2 -DA:429,2 -DA:432,3 -DA:435,3 -DA:438,2 -DA:441,1 -DA:444,4 -DA:445,3 -DA:446,1 -DA:447,1 -DA:448,0 -DA:451,5 -DA:452,3 -DA:453,1 -DA:454,1 -DA:455,0 -DA:458,5 -DA:459,3 -DA:460,1 -DA:461,1 -DA:462,0 -DA:464,1 -DA:466,1 -DA:473,3 -DA:477,12 -DA:478,3 -DA:479,6 -DA:481,3 -DA:482,3 -DA:483,2 -DA:484,8 -DA:485,2 -DA:488,2 -DA:490,3 -DA:492,3 -DA:495,8 -DA:497,33 -DA:498,9 -DA:500,8 -DA:503,2 -DA:504,7 -DA:505,2 -DA:506,3 -DA:508,2 -DA:511,1 -DA:512,4 -DA:513,1 -DA:514,3 -DA:516,1 -DA:519,1 -DA:520,4 -DA:521,4 -DA:522,1 -DA:523,2 -DA:525,1 -DA:530,1 -DA:532,5 -DA:533,2 -DA:534,1 -DA:539,1 -DA:540,2 -DA:541,4 -DA:542,2 -DA:543,4 -DA:544,2 -DA:545,2 -DA:546,1 -DA:547,1 -DA:548,1 -DA:550,1 -DA:552,2 -DA:554,2 -DA:557,2 -DA:559,2 -DA:560,1 -DA:562,2 -DA:563,1 -DA:566,1 -DA:569,5 -DA:571,5 -DA:572,5 -DA:573,5 -DA:574,5 -DA:581,1 -DA:582,3 -DA:583,1 -DA:600,1 -DA:607,3 -DA:608,2 -DA:613,1 -DA:614,3 -DA:615,2 -DA:616,1 -DA:617,1 -DA:625,1 -DA:631,1 -DA:634,2 -DA:635,2 -DA:636,1 -DA:640,1 -DA:641,1 -DA:645,4 -DA:646,1 -DA:650,1 -DA:653,3 -DA:654,1 -DA:658,1 -DA:660,1 -DA:662,2 -DA:670,3 -DA:671,8 -DA:672,3 -DA:674,4 -DA:675,0 -DA:677,2 -DA:678,2 -DA:679,2 -DA:680,0 -DA:682,1 -DA:683,1 -DA:684,1 -DA:687,1 -DA:691,2 -DA:692,1 -DA:693,2 -DA:695,1 -DA:698,0 -DA:700,0 -DA:701,0 -DA:703,0 -DA:708,1 -DA:709,1 -DA:711,4 -DA:712,1 -DA:719,1 -DA:720,2 -DA:722,2 -DA:723,4 -DA:724,1 -DA:725,1 -DA:726,2 -DA:727,1 -DA:731,1 -DA:734,2 -DA:735,1 -DA:736,3 -DA:737,1 -DA:740,1 -DA:741,2 -DA:744,3 -DA:745,2 -DA:746,1 -DA:748,3 -DA:749,1 -DA:754,1 -DA:757,1 -DA:759,3 -DA:762,1 -DA:764,2 -DA:765,1 -DA:767,2 -DA:768,1 -DA:772,0 -DA:776,0 -DA:778,0 -DA:780,0 -DA:782,0 -DA:784,0 -DA:785,0 -DA:787,0 -DA:788,0 -DA:792,0 -DA:793,0 -DA:795,0 -DA:798,1 -DA:799,1 -DA:800,1 -DA:806,8 -DA:808,16 -LF:361 -LH:316 -end_of_record -TN: -SF:/home/erick/hashed/hashed-substrate/pallets/gated-marketplace/src/lib.rs -FN:77,marketplaces -FN:87,applications -FN:97,applications_by_account -FN:110,applicants_by_marketplace -FN:122,custodians -FN:134,offers_by_item -FN:146,offers_by_account -FN:156,offers_by_marketplace -FN:166,offers_info -FN:293,{closure#0} -FN:309,{closure#0} -FN:334,{closure#0} -FN:336,apply -FN:372,{closure#0} -FN:374,reapply -FN:417,{closure#0} -FN:435,{closure#0} -FN:457,{closure#0} -FN:479,{closure#0} -FN:502,{closure#0} -FN:523,{closure#0} -FN:547,{closure#0} -FN:569,{closure#0} -FN:591,{closure#0} -FN:616,{closure#0} -FN:641,{closure#0} -FN:662,{closure#0} -FN:664,kill_storage -FNF:28 -FNDA:18,marketplaces -FNDA:6,applications -FNDA:6,applications_by_account -FNDA:6,applicants_by_marketplace -FNDA:4,custodians -FNDA:6,offers_by_item -FNDA:6,offers_by_account -FNDA:5,offers_by_marketplace -FNDA:6,offers_info -FNDA:0,{closure#0} -FNDA:40,{closure#0} -FNDA:13,{closure#0} -FNDA:3,apply -FNDA:11,{closure#0} -FNDA:1,reapply -FNDA:5,{closure#0} -FNDA:0,{closure#0} -FNDA:28,{closure#0} -FNDA:6,{closure#0} -FNDA:6,{closure#0} -FNDA:7,{closure#0} -FNDA:10,{closure#0} -FNDA:10,{closure#0} -FNDA:6,{closure#0} -FNDA:8,{closure#0} -FNDA:6,{closure#0} -FNDA:0,{closure#0} -FNDA:0,kill_storage -DA:16,3 -DA:77,18 -DA:87,6 -DA:97,6 -DA:110,6 -DA:122,4 -DA:134,6 -DA:146,6 -DA:156,5 -DA:166,6 -DA:293,0 -DA:294,0 -DA:295,0 -DA:296,0 -DA:297,0 -DA:298,0 -DA:309,40 -DA:310,0 -DA:311,8 -DA:312,16 -DA:316,8 -DA:334,13 -DA:335,0 -DA:336,3 -DA:343,6 -DA:345,3 -DA:346,0 -DA:350,3 -DA:352,3 -DA:355,3 -DA:372,11 -DA:373,0 -DA:374,1 -DA:381,4 -DA:383,3 -DA:384,0 -DA:387,3 -DA:389,3 -DA:392,9 -DA:394,1 -DA:417,5 -DA:418,0 -DA:419,1 -DA:420,2 -DA:422,1 -DA:435,0 -DA:436,0 -DA:437,0 -DA:438,0 -DA:440,0 -DA:457,28 -DA:458,0 -DA:459,5 -DA:460,10 -DA:462,5 -DA:479,6 -DA:480,0 -DA:481,1 -DA:482,3 -DA:486,1 -DA:502,6 -DA:503,0 -DA:504,1 -DA:505,2 -DA:507,1 -DA:523,7 -DA:524,0 -DA:525,1 -DA:526,1 -DA:528,2 -DA:547,10 -DA:548,0 -DA:549,3 -DA:550,2 -DA:552,1 -DA:569,10 -DA:570,0 -DA:571,1 -DA:572,3 -DA:574,1 -DA:591,6 -DA:592,0 -DA:593,1 -DA:596,1 -DA:598,1 -DA:616,8 -DA:617,0 -DA:618,2 -DA:619,1 -DA:621,2 -DA:641,6 -DA:642,0 -DA:643,1 -DA:644,1 -DA:646,1 -DA:662,0 -DA:663,0 -DA:664,0 -DA:667,0 -DA:668,0 -DA:669,0 -DA:670,0 -DA:671,0 -DA:672,0 -DA:674,0 -LF:105 -LH:69 -end_of_record -TN: -SF:/home/erick/hashed/hashed-substrate/pallets/gated-marketplace/src/types.rs -FN:40,default -FN:46,to_vec -FN:56,id -FN:60,enum_to_vec -FN:83,to_vec -FN:99,id -FN:103,admin_permissions -FN:114,participant_permissions -FN:145,default -FN:158,eq -FN:172,default -FNF:11 -FNDA:0,default -FNDA:8,to_vec -FNDA:8,id -FNDA:0,enum_to_vec -FNDA:8,to_vec -FNDA:5,id -FNDA:8,admin_permissions -FNDA:8,participant_permissions -FNDA:3,default -FNDA:0,eq -FNDA:0,default -DA:40,0 -DA:41,0 -DA:46,8 -DA:47,8 -DA:48,16 -DA:49,16 -DA:50,16 -DA:51,16 -DA:52,8 -DA:56,8 -DA:57,8 -DA:60,0 -DA:62,0 -DA:83,8 -DA:84,8 -DA:85,16 -DA:86,16 -DA:87,16 -DA:88,16 -DA:89,16 -DA:90,16 -DA:91,16 -DA:92,16 -DA:93,16 -DA:94,16 -DA:95,8 -DA:99,5 -DA:100,5 -DA:103,8 -DA:105,16 -DA:106,8 -DA:107,8 -DA:108,8 -DA:109,0 -DA:110,8 -DA:114,8 -DA:117,8 -DA:118,8 -DA:119,8 -DA:120,8 -DA:121,8 -DA:122,8 -DA:123,0 -DA:145,3 -DA:146,3 -DA:158,0 -DA:159,0 -DA:172,0 -DA:173,0 -LF:49 -LH:39 -end_of_record -TN: -SF:/home/erick/hashed/hashed-substrate/pallets/rbac/src/functions.rs -FN:99,create_and_set_roles -FN:229,create_and_set_permissions -FNF:2 -FNDA:18,create_and_set_roles -FNDA:17,create_and_set_permissions -DA:18,18 -DA:19,18 -DA:20,72 -DA:21,20 -DA:22,39 -DA:23,18 -DA:34,2 -DA:35,2 -DA:37,11 -DA:38,4 -DA:39,9 -DA:40,2 -DA:41,2 -DA:42,2 -DA:44,3 -DA:46,5 -DA:47,5 -DA:49,4 -DA:51,7 -DA:52,2 -DA:55,2 -DA:57,3 -DA:68,1 -DA:69,1 -DA:70,1 -DA:72,1 -DA:73,1 -DA:74,1 -DA:77,1 -DA:79,2 -DA:81,2 -DA:82,2 -DA:83,1 -DA:84,0 -DA:87,1 -DA:88,1 -DA:89,1 -DA:99,18 -DA:101,18 -DA:102,54 -DA:103,36 -DA:105,18 -DA:106,34 -DA:107,34 -DA:108,17 -DA:117,20 -DA:118,20 -DA:120,21 -DA:121,42 -DA:122,66 -DA:123,22 -DA:133,5 -DA:134,11 -DA:135,22 -DA:136,6 -DA:137,12 -DA:139,5 -DA:148,17 -DA:149,17 -DA:151,18 -DA:152,17 -DA:153,35 -DA:154,17 -DA:156,53 -DA:157,17 -DA:158,3 -DA:160,17 -DA:171,16 -DA:172,32 -DA:173,16 -DA:174,17 -DA:175,30 -DA:176,64 -DA:177,17 -DA:178,34 -DA:181,62 -DA:182,30 -DA:183,32 -DA:185,15 -DA:197,5 -DA:198,5 -DA:199,22 -DA:200,6 -DA:201,26 -DA:202,5 -DA:203,5 -DA:204,5 -DA:206,5 -DA:208,25 -DA:209,5 -DA:210,20 -DA:211,10 -DA:212,5 -DA:213,4 -DA:215,3 -DA:217,5 -DA:229,17 -DA:231,35 -DA:232,34 -DA:233,39 -DA:234,18 -DA:235,54 -DA:236,54 -DA:238,19 -DA:239,36 -DA:240,18 -DA:249,18 -DA:250,36 -DA:251,18 -DA:254,19 -DA:256,36 -DA:257,18 -DA:259,18 -DA:269,1 -DA:270,2 -DA:271,1 -DA:272,1 -DA:274,3 -DA:276,6 -DA:277,2 -DA:278,4 -DA:280,1 -DA:291,18 -DA:293,37 -DA:294,36 -DA:295,18 -DA:296,19 -DA:298,18 -DA:299,37 -DA:300,18 -DA:302,56 -DA:303,18 -DA:304,3 -DA:305,18 -DA:318,9 -DA:319,18 -DA:320,9 -DA:321,9 -DA:322,18 -DA:324,9 -DA:326,34 -DA:327,10 -DA:328,8 -DA:339,2 -DA:340,2 -DA:341,4 -DA:342,2 -DA:343,4 -DA:344,8 -DA:345,2 -DA:347,2 -DA:356,16 -DA:357,49 -DA:358,15 -DA:367,9 -DA:368,19 -DA:369,9 -DA:378,19 -DA:380,112 -DA:381,37 -DA:382,18 -DA:392,1 -DA:393,2 -DA:394,3 -DA:395,1 -DA:405,2 -DA:406,6 -DA:409,18 -DA:410,18 -DA:424,73 -DA:425,77 -DA:428,34 -DA:429,34 -DA:430,68 -DA:431,35 -DA:432,35 -LF:176 -LH:175 -end_of_record -TN: -SF:/home/erick/hashed/hashed-substrate/pallets/rbac/src/lib.rs -FN:51,pallet_prefix -FN:61,pallet_prefix -FN:71,pallet_prefix -FN:81,permissions -FN:93,pallet_prefix -FN:105,roles_by_user -FN:118,users_by_scope -FNF:7 -FNDA:40,pallet_prefix -FNDA:52,pallet_prefix -FNDA:36,pallet_prefix -FNDA:39,permissions -FNDA:40,pallet_prefix -FNDA:37,roles_by_user -FNDA:36,users_by_scope -DA:21,9 -DA:51,40 -DA:61,52 -DA:71,36 -DA:81,39 -DA:93,40 -DA:105,37 -DA:118,36 -LF:8 -LH:8 -end_of_record -TN: -SF:/home/erick/hashed/hashed-substrate/pallets/rbac/src/types.rs -FN:19,to_id_enum -FN:26,to_id -FNF:2 -FNDA:17,to_id_enum -FNDA:18,to_id -DA:19,17 -DA:20,17 -DA:21,18 -DA:22,17 -DA:26,18 -DA:27,18 -DA:28,17 -DA:29,18 -LF:8 -LH:8 -end_of_record -TN: -SF:/home/erick/hashed/hashed-substrate/pallets/template/src/lib.rs -FN:17,storage_metadata -FN:36,pallet_prefix -FN:43,pallet_prefix -FN:76,do_something -FN:111,insert_my_bytes -FNF:5 -FNDA:4,storage_metadata -FNDA:6,pallet_prefix -FNDA:0,pallet_prefix -FNDA:1,do_something -FNDA:0,insert_my_bytes -DA:17,4 -DA:36,6 -DA:43,0 -DA:75,0 -DA:76,1 -DA:80,1 -DA:83,1 -DA:86,1 -DA:88,1 -DA:92,0 -DA:93,1 -DA:94,1 -DA:97,2 -DA:99,2 -DA:100,0 -DA:102,0 -DA:104,0 -DA:105,0 -DA:110,0 -DA:111,0 -DA:115,0 -DA:118,0 -DA:119,0 -DA:121,0 -LF:24 -LH:11 -end_of_record -TN: -SF:/home/erick/hashed/hashed-substrate/parachain-runtime/src/constants.rs -FN:32,deposit -FNF:1 -FNDA:0,deposit -DA:32,0 -DA:33,0 -LF:2 -LH:0 -end_of_record -TN: -SF:/home/erick/hashed/hashed-substrate/parachain-runtime/src/lib.rs -FN:145,polynomial -FN:232,native_version -FN:247,{closure#0} -FN:250,{closure#1} -FN:253,{closure#2} -FN:453,default -FN:458,filter -FN:485,is_superset -FN:1032,{closure#0} -FN:1114,dispatch -FN:1116,slot_duration -FN:1120,authorities -FN:1126,version -FN:1130,execute_block -FN:1134,initialize_block -FN:1140,metadata -FN:1146,apply_extrinsic -FN:1150,finalize_block -FN:1154,inherent_extrinsics -FN:1158,check_inherents -FN:1167,validate_transaction -FN:1177,offchain_worker -FN:1183,generate_session_keys -FN:1187,decode_session_keys -FN:1195,account_nonce -FN:1201,query_info -FN:1207,query_fee_details -FN:1216,collect_collation_info -FN:1289,check_inherents -FNF:29 -FNDA:0,polynomial -FNDA:0,native_version -FNDA:3,{closure#0} -FNDA:3,{closure#1} -FNDA:3,{closure#2} -FNDA:0,default -FNDA:0,filter -FNDA:0,is_superset -FNDA:6,{closure#0} -FNDA:0,dispatch -FNDA:0,slot_duration -FNDA:0,authorities -FNDA:0,version -FNDA:0,execute_block -FNDA:0,initialize_block -FNDA:0,metadata -FNDA:0,apply_extrinsic -FNDA:0,finalize_block -FNDA:0,inherent_extrinsics -FNDA:0,check_inherents -FNDA:0,validate_transaction -FNDA:0,offchain_worker -FNDA:0,generate_session_keys -FNDA:0,decode_session_keys -FNDA:0,account_nonce -FNDA:0,query_info -FNDA:0,query_fee_details -FNDA:0,collect_collation_info -FNDA:0,check_inherents -DA:145,0 -DA:148,0 -DA:149,0 -DA:150,0 -DA:153,0 -DA:154,0 -DA:176,0 -DA:232,0 -DA:233,0 -DA:237,0 -DA:244,0 -DA:245,5 -DA:246,1 -DA:247,3 -DA:248,1 -DA:250,3 -DA:251,1 -DA:253,3 -DA:254,1 -DA:257,1 -DA:258,1 -DA:403,0 -DA:405,0 -DA:425,0 -DA:427,0 -DA:428,0 -DA:429,0 -DA:453,0 -DA:454,0 -DA:458,0 -DA:459,0 -DA:460,0 -DA:461,0 -DA:462,0 -DA:469,0 -DA:470,0 -DA:479,0 -DA:480,0 -DA:485,0 -DA:486,0 -DA:487,0 -DA:488,0 -DA:489,0 -DA:490,0 -DA:491,0 -DA:587,0 -DA:624,0 -DA:628,0 -DA:629,0 -DA:631,0 -DA:661,0 -DA:664,0 -DA:798,0 -DA:799,0 -DA:862,0 -DA:867,0 -DA:913,0 -DA:914,0 -DA:915,0 -DA:916,0 -DA:917,0 -DA:918,0 -DA:919,0 -DA:920,0 -DA:921,0 -DA:922,0 -DA:923,0 -DA:924,0 -DA:927,0 -DA:928,0 -DA:929,0 -DA:932,0 -DA:933,0 -DA:934,0 -DA:935,0 -DA:1032,6 -DA:1040,0 -DA:1060,0 -DA:1061,0 -DA:1073,0 -DA:1114,0 -DA:1116,0 -DA:1117,0 -DA:1120,0 -DA:1121,0 -DA:1126,0 -DA:1127,0 -DA:1130,0 -DA:1131,0 -DA:1134,0 -DA:1135,0 -DA:1140,0 -DA:1141,0 -DA:1146,0 -DA:1147,0 -DA:1150,0 -DA:1151,0 -DA:1154,0 -DA:1155,0 -DA:1158,0 -DA:1159,0 -DA:1160,0 -DA:1162,0 -DA:1167,0 -DA:1168,0 -DA:1169,0 -DA:1170,0 -DA:1172,0 -DA:1177,0 -DA:1178,0 -DA:1183,0 -DA:1184,0 -DA:1187,0 -DA:1188,0 -DA:1190,0 -DA:1195,0 -DA:1196,0 -DA:1201,0 -DA:1202,0 -DA:1203,0 -DA:1205,0 -DA:1207,0 -DA:1208,0 -DA:1209,0 -DA:1211,0 -DA:1216,0 -DA:1217,0 -DA:1289,0 -DA:1293,0 -DA:1300,0 -DA:1305,0 -LF:131 -LH:11 -end_of_record -TN: -SF:/home/erick/hashed/hashed-substrate/parachain-runtime/src/weights/paritydb_weights.rs -FNF:0 -DA:27,0 -LF:1 -LH:0 -end_of_record -TN: -SF:/home/erick/hashed/hashed-substrate/parachain-runtime/src/weights/rocksdb_weights.rs -FNF:0 -DA:27,0 -LF:1 -LH:0 -end_of_record -TN: -SF:/home/erick/hashed/hashed-substrate/parachain-runtime/src/xcm_config.rs -FN:103,should_execute, xcm_builder::barriers::AllowUnpaidExecutionFrom), hashed_parachain_runtime::Call> -FN:117,should_execute -FN:123,{closure#0} -FNF:3 -FNDA:0,should_execute, xcm_builder::barriers::AllowUnpaidExecutionFrom), hashed_parachain_runtime::Call> -FNDA:0,should_execute -FNDA:0,{closure#0} -DA:24,0 -DA:25,0 -DA:26,0 -DA:27,0 -DA:103,0 -DA:109,0 -DA:110,0 -DA:117,0 -DA:123,0 -DA:124,0 -DA:125,0 -DA:126,0 -DA:127,0 -DA:128,0 -DA:129,0 -DA:130,0 -DA:131,0 -DA:132,0 -DA:136,0 -DA:141,0 -DA:142,0 -DA:144,0 -DA:145,0 -DA:150,0 -LF:24 -LH:0 -end_of_record -TN: -SF:/home/erick/hashed/hashed-substrate/runtime/src/constants.rs -FN:32,deposit -FNF:1 -FNDA:0,deposit -DA:32,0 -DA:33,0 -LF:2 -LH:0 -end_of_record -TN: -SF:/home/erick/hashed/hashed-substrate/runtime/src/lib.rs -FN:135,native_version -FN:763,from -FN:829,dispatch -FN:831,version -FN:835,execute_block -FN:839,initialize_block -FN:845,metadata -FN:855,finalize_block -FN:863,check_inherents -FN:872,validate_transaction -FN:882,offchain_worker -FN:888,slot_duration -FN:892,authorities -FN:902,decode_session_keys -FN:910,grandpa_authorities -FN:914,current_set_id -FN:918,submit_report_equivocation_unsigned_extrinsic -FN:928,generate_key_ownership_proof -FN:946,query_info -FN:952,query_fee_details -FNF:20 -FNDA:0,native_version -FNDA:4,from -FNDA:0,dispatch -FNDA:0,version -FNDA:0,execute_block -FNDA:0,initialize_block -FNDA:0,metadata -FNDA:0,finalize_block -FNDA:0,check_inherents -FNDA:0,validate_transaction -FNDA:0,offchain_worker -FNDA:0,slot_duration -FNDA:0,authorities -FNDA:0,decode_session_keys -FNDA:0,grandpa_authorities -FNDA:0,current_set_id -FNDA:0,submit_report_equivocation_unsigned_extrinsic -FNDA:0,generate_key_ownership_proof -FNDA:0,query_info -FNDA:0,query_fee_details -DA:89,0 -DA:135,0 -DA:136,0 -DA:142,0 -DA:145,1 -DA:147,0 -DA:408,0 -DA:430,0 -DA:434,0 -DA:435,0 -DA:437,0 -DA:467,0 -DA:470,0 -DA:723,0 -DA:724,0 -DA:727,0 -DA:728,0 -DA:729,0 -DA:730,0 -DA:731,0 -DA:732,0 -DA:733,0 -DA:734,0 -DA:735,0 -DA:736,0 -DA:739,0 -DA:740,0 -DA:741,0 -DA:744,0 -DA:745,0 -DA:746,0 -DA:747,0 -DA:763,4 -DA:769,0 -DA:783,0 -DA:829,0 -DA:831,0 -DA:832,0 -DA:835,0 -DA:836,0 -DA:839,0 -DA:840,0 -DA:845,0 -DA:846,0 -DA:851,0 -DA:852,0 -DA:855,0 -DA:856,0 -DA:859,0 -DA:860,0 -DA:863,0 -DA:864,0 -DA:865,0 -DA:867,0 -DA:872,0 -DA:873,0 -DA:874,0 -DA:875,0 -DA:877,0 -DA:882,0 -DA:883,0 -DA:888,0 -DA:889,0 -DA:892,0 -DA:893,0 -DA:898,0 -DA:899,0 -DA:902,0 -DA:903,0 -DA:905,0 -DA:910,0 -DA:911,0 -DA:914,0 -DA:915,0 -DA:918,0 -DA:919,0 -DA:923,0 -DA:925,0 -DA:928,0 -DA:929,0 -DA:930,0 -DA:935,0 -DA:940,0 -DA:941,0 -DA:946,0 -DA:947,0 -DA:948,0 -DA:950,0 -DA:952,0 -DA:953,0 -DA:954,0 -DA:956,0 -LF:92 -LH:2 -end_of_record From d4392f9cb0aea94a77156eed52898d2c4d2191ec Mon Sep 17 00:00:00 2001 From: Erick Casanova Date: Mon, 21 Nov 2022 18:15:02 -0600 Subject: [PATCH 17/17] Release 128 --- runtime/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/runtime/src/lib.rs b/runtime/src/lib.rs index 159edd47..166a8332 100644 --- a/runtime/src/lib.rs +++ b/runtime/src/lib.rs @@ -106,7 +106,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { // `spec_version`, and `authoring_version` are the same between Wasm and native. // This value is set to 100 to notify Polkadot-JS App (https://polkadot.js.org/apps) to use // the compatible custom types. - spec_version: 127, + spec_version: 128, impl_version: 1, apis: RUNTIME_API_VERSIONS, transaction_version: 1,