{ "V12": { "modules": [ { "name": "System", "storage": { "prefix": "System", "entries": [ { "name": "Account", "modifier": "Default", "ty": { "Map": { "hasher": "Blake2_128Concat", "key": "T::AccountId", "value": "AccountInfo", "unused": false } }, "default": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "documentation": [ " The full account information for a particular account ID." ] }, { "name": "ExtrinsicCount", "modifier": "Optional", "ty": { "Plain": "u32" }, "default": [ 0 ], "documentation": [ " Total extrinsics count for the current block." ] }, { "name": "BlockWeight", "modifier": "Default", "ty": { "Plain": "ConsumedWeight" }, "default": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "documentation": [ " The current weight for the block." ] }, { "name": "AllExtrinsicsLen", "modifier": "Optional", "ty": { "Plain": "u32" }, "default": [ 0 ], "documentation": [ " Total length (in bytes) for all extrinsics put together, for the current block." ] }, { "name": "BlockHash", "modifier": "Default", "ty": { "Map": { "hasher": "Twox64Concat", "key": "T::BlockNumber", "value": "T::Hash", "unused": false } }, "default": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "documentation": [ " Map of block numbers to block hashes." ] }, { "name": "ExtrinsicData", "modifier": "Default", "ty": { "Map": { "hasher": "Twox64Concat", "key": "u32", "value": "Vec", "unused": false } }, "default": [ 0 ], "documentation": [ " Extrinsics data for the current block (maps an extrinsic's index to its data)." ] }, { "name": "Number", "modifier": "Default", "ty": { "Plain": "T::BlockNumber" }, "default": [ 0, 0, 0, 0 ], "documentation": [ " The current block number being processed. Set by `execute_block`." ] }, { "name": "ParentHash", "modifier": "Default", "ty": { "Plain": "T::Hash" }, "default": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "documentation": [ " Hash of the previous block." ] }, { "name": "Digest", "modifier": "Default", "ty": { "Plain": "DigestOf" }, "default": [ 0 ], "documentation": [ " Digest of the current block, also part of the block header." ] }, { "name": "Events", "modifier": "Default", "ty": { "Plain": "Vec>" }, "default": [ 0 ], "documentation": [ " Events deposited for the current block." ] }, { "name": "EventCount", "modifier": "Default", "ty": { "Plain": "EventIndex" }, "default": [ 0, 0, 0, 0 ], "documentation": [ " The number of events in the `Events` list." ] }, { "name": "EventTopics", "modifier": "Default", "ty": { "Map": { "hasher": "Blake2_128Concat", "key": "T::Hash", "value": "Vec<(T::BlockNumber, EventIndex)>", "unused": false } }, "default": [ 0 ], "documentation": [ " Mapping between a topic (represented by T::Hash) and a vector of indexes", " of events in the `>` list.", "", " All topic vectors have deterministic storage locations depending on the topic. This", " allows light-clients to leverage the changes trie storage tracking mechanism and", " in case of changes fetch the list of events of interest.", "", " The value has the type `(T::BlockNumber, EventIndex)` because if we used only just", " the `EventIndex` then in case if the topic has the same contents on the next block", " no notification will be triggered thus the event might be lost." ] }, { "name": "LastRuntimeUpgrade", "modifier": "Optional", "ty": { "Plain": "LastRuntimeUpgradeInfo" }, "default": [ 0 ], "documentation": [ " Stores the `spec_version` and `spec_name` of when the last runtime upgrade happened." ] }, { "name": "UpgradedToU32RefCount", "modifier": "Default", "ty": { "Plain": "bool" }, "default": [ 0 ], "documentation": [ " True if we have upgraded so that `type RefCount` is `u32`. False (default) if not." ] }, { "name": "UpgradedToTripleRefCount", "modifier": "Default", "ty": { "Plain": "bool" }, "default": [ 0 ], "documentation": [ " True if we have upgraded so that AccountInfo contains three types of `RefCount`. False", " (default) if not." ] }, { "name": "ExecutionPhase", "modifier": "Optional", "ty": { "Plain": "Phase" }, "default": [ 0 ], "documentation": [ " The execution phase of the block." ] } ] }, "calls": [ { "name": "fill_block", "arguments": [ { "name": "_ratio", "ty": "Perbill" } ], "documentation": [ " A dispatch that will fill the block weight up to the given ratio." ] }, { "name": "remark", "arguments": [ { "name": "_remark", "ty": "Vec" } ], "documentation": [ " Make some on-chain remark.", "", " # ", " - `O(1)`", " # " ] }, { "name": "set_heap_pages", "arguments": [ { "name": "pages", "ty": "u64" } ], "documentation": [ " Set the number of pages in the WebAssembly environment's heap.", "", " # ", " - `O(1)`", " - 1 storage write.", " - Base Weight: 1.405 µs", " - 1 write to HEAP_PAGES", " # " ] }, { "name": "set_code", "arguments": [ { "name": "code", "ty": "Vec" } ], "documentation": [ " Set the new runtime code.", "", " # ", " - `O(C + S)` where `C` length of `code` and `S` complexity of `can_set_code`", " - 1 storage write (codec `O(C)`).", " - 1 call to `can_set_code`: `O(S)` (calls `sp_io::misc::runtime_version` which is expensive).", " - 1 event.", " The weight of this function is dependent on the runtime, but generally this is very expensive.", " We will treat this as a full block.", " # " ] }, { "name": "set_code_without_checks", "arguments": [ { "name": "code", "ty": "Vec" } ], "documentation": [ " Set the new runtime code without doing any checks of the given `code`.", "", " # ", " - `O(C)` where `C` length of `code`", " - 1 storage write (codec `O(C)`).", " - 1 event.", " The weight of this function is dependent on the runtime. We will treat this as a full block.", " # " ] }, { "name": "set_changes_trie_config", "arguments": [ { "name": "changes_trie_config", "ty": "Option" } ], "documentation": [ " Set the new changes trie configuration.", "", " # ", " - `O(1)`", " - 1 storage write or delete (codec `O(1)`).", " - 1 call to `deposit_log`: Uses `append` API, so O(1)", " - Base Weight: 7.218 µs", " - DB Weight:", " - Writes: Changes Trie, System Digest", " # " ] }, { "name": "set_storage", "arguments": [ { "name": "items", "ty": "Vec" } ], "documentation": [ " Set some items of storage.", "", " # ", " - `O(I)` where `I` length of `items`", " - `I` storage writes (`O(1)`).", " - Base Weight: 0.568 * i µs", " - Writes: Number of items", " # " ] }, { "name": "kill_storage", "arguments": [ { "name": "keys", "ty": "Vec" } ], "documentation": [ " Kill some items from storage.", "", " # ", " - `O(IK)` where `I` length of `keys` and `K` length of one key", " - `I` storage deletions.", " - Base Weight: .378 * i µs", " - Writes: Number of items", " # " ] }, { "name": "kill_prefix", "arguments": [ { "name": "prefix", "ty": "Key" }, { "name": "_subkeys", "ty": "u32" } ], "documentation": [ " Kill all storage items with a key that starts with the given prefix.", "", " **NOTE:** We rely on the Root origin to provide us the number of subkeys under", " the prefix we are removing to accurately calculate the weight of this function.", "", " # ", " - `O(P)` where `P` amount of keys with prefix `prefix`", " - `P` storage deletions.", " - Base Weight: 0.834 * P µs", " - Writes: Number of subkeys + 1", " # " ] }, { "name": "remark_with_event", "arguments": [ { "name": "remark", "ty": "Vec" } ], "documentation": [ " Make some on-chain remark and emit event.", "", " # ", " - `O(b)` where b is the length of the remark.", " - 1 event.", " # " ] } ], "event": [ { "name": "ExtrinsicSuccess", "arguments": [ "DispatchInfo" ], "documentation": [ " An extrinsic completed successfully. \\[info\\]" ] }, { "name": "ExtrinsicFailed", "arguments": [ "DispatchError", "DispatchInfo" ], "documentation": [ " An extrinsic failed. \\[error, info\\]" ] }, { "name": "CodeUpdated", "arguments": [], "documentation": [ " `:code` was updated." ] }, { "name": "NewAccount", "arguments": [ "AccountId" ], "documentation": [ " A new \\[account\\] was created." ] }, { "name": "KilledAccount", "arguments": [ "AccountId" ], "documentation": [ " An \\[account\\] was reaped." ] }, { "name": "Remarked", "arguments": [ "AccountId", "Hash" ], "documentation": [ " On on-chain remark happened. \\[origin, remark_hash\\]" ] } ], "constants": [ { "name": "BlockWeights", "ty": "limits::BlockWeights", "value": [ 0, 242, 5, 42, 1, 0, 0, 0, 0, 32, 74, 169, 209, 1, 0, 0, 64, 89, 115, 7, 0, 0, 0, 0, 1, 192, 118, 108, 143, 88, 1, 0, 0, 1, 0, 152, 247, 62, 93, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 64, 89, 115, 7, 0, 0, 0, 0, 1, 192, 254, 190, 249, 204, 1, 0, 0, 1, 0, 32, 74, 169, 209, 1, 0, 0, 1, 0, 136, 82, 106, 116, 0, 0, 0, 64, 89, 115, 7, 0, 0, 0, 0, 0, 0, 0 ], "documentation": [ " Block & extrinsics weights: base values and limits." ] }, { "name": "BlockLength", "ty": "limits::BlockLength", "value": [ 0, 0, 60, 0, 0, 0, 80, 0, 0, 0, 80, 0 ], "documentation": [ " The maximum length of a block (in bytes)." ] }, { "name": "BlockHashCount", "ty": "T::BlockNumber", "value": [ 96, 9, 0, 0 ], "documentation": [ " Maximum number of block number to block hash mappings to keep (oldest pruned first)." ] }, { "name": "DbWeight", "ty": "RuntimeDbWeight", "value": [ 64, 120, 125, 1, 0, 0, 0, 0, 0, 225, 245, 5, 0, 0, 0, 0 ], "documentation": [ " The weight of runtime database operations the runtime can invoke." ] }, { "name": "Version", "ty": "RuntimeVersion", "value": [ 32, 112, 111, 108, 107, 97, 100, 111, 116, 60, 112, 97, 114, 105, 116, 121, 45, 112, 111, 108, 107, 97, 100, 111, 116, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 48, 223, 106, 203, 104, 153, 7, 96, 155, 3, 0, 0, 0, 55, 227, 151, 252, 124, 145, 245, 228, 1, 0, 0, 0, 64, 254, 58, 212, 1, 248, 149, 154, 4, 0, 0, 0, 210, 188, 152, 151, 238, 208, 143, 21, 2, 0, 0, 0, 247, 139, 39, 139, 229, 63, 69, 76, 2, 0, 0, 0, 175, 44, 2, 151, 162, 62, 109, 61, 1, 0, 0, 0, 237, 153, 197, 172, 178, 94, 237, 245, 2, 0, 0, 0, 203, 202, 37, 227, 159, 20, 35, 135, 2, 0, 0, 0, 104, 122, 212, 74, 211, 127, 3, 194, 1, 0, 0, 0, 171, 60, 5, 114, 41, 31, 235, 139, 1, 0, 0, 0, 188, 157, 137, 144, 79, 91, 146, 63, 1, 0, 0, 0, 55, 200, 187, 19, 80, 169, 162, 168, 1, 0, 0, 0, 7, 0, 0, 0 ], "documentation": [ " Get the chain's current version." ] }, { "name": "SS58Prefix", "ty": "u8", "value": [ 0 ], "documentation": [ " The designated SS85 prefix of this chain.", "", " This replaces the \"ss58Format\" property declared in the chain spec. Reason is", " that the runtime should know about the prefix in order to make use of it as", " an identifier of the chain." ] } ], "errors": [ { "name": "InvalidSpecName", "documentation": [ " The name of specification does not match between the current runtime", " and the new runtime." ] }, { "name": "SpecVersionNeedsToIncrease", "documentation": [ " The specification version is not allowed to decrease between the current runtime", " and the new runtime." ] }, { "name": "FailedToExtractRuntimeVersion", "documentation": [ " Failed to extract the runtime version from the new runtime.", "", " Either calling `Core_version` or decoding `RuntimeVersion` failed." ] }, { "name": "NonDefaultComposite", "documentation": [ " Suicide called when the account has non-default composite data." ] }, { "name": "NonZeroRefCount", "documentation": [ " There is a non-zero reference count preventing the account from being purged." ] } ], "index": 0 }, { "name": "RandomnessCollectiveFlip", "storage": { "prefix": "RandomnessCollectiveFlip", "entries": [ { "name": "RandomMaterial", "modifier": "Default", "ty": { "Plain": "Vec" }, "default": [ 0 ], "documentation": [ " Series of block headers from the last 81 blocks that acts as random seed material. This", " is arranged as a ring buffer with `block_number % 81` being the index into the `Vec` of", " the oldest hash." ] } ] }, "calls": null, "event": null, "constants": [], "errors": [], "index": 31 }, { "name": "Scheduler", "storage": { "prefix": "Scheduler", "entries": [ { "name": "Agenda", "modifier": "Default", "ty": { "Map": { "hasher": "Twox64Concat", "key": "T::BlockNumber", "value": "Vec::Call, T::BlockNumber, T::\nPalletsOrigin, T::AccountId>>>", "unused": false } }, "default": [ 0 ], "documentation": [ " Items to be executed, indexed by the block number that they should be executed on." ] }, { "name": "Lookup", "modifier": "Optional", "ty": { "Map": { "hasher": "Twox64Concat", "key": "Vec", "value": "TaskAddress", "unused": false } }, "default": [ 0 ], "documentation": [ " Lookup from identity to the block number and index of the task." ] }, { "name": "StorageVersion", "modifier": "Default", "ty": { "Plain": "Releases" }, "default": [ 0 ], "documentation": [ " Storage version of the pallet.", "", " New networks start with last version." ] } ] }, "calls": [ { "name": "schedule", "arguments": [ { "name": "when", "ty": "T::BlockNumber" }, { "name": "maybe_periodic", "ty": "Option>" }, { "name": "priority", "ty": "schedule::Priority" }, { "name": "call", "ty": "Box<::Call>" } ], "documentation": [ " Anonymously schedule a task.", "", " # ", " - S = Number of already scheduled calls", " - Base Weight: 22.29 + .126 * S µs", " - DB Weight:", " - Read: Agenda", " - Write: Agenda", " - Will use base weight of 25 which should be good for up to 30 scheduled calls", " # " ] }, { "name": "cancel", "arguments": [ { "name": "when", "ty": "T::BlockNumber" }, { "name": "index", "ty": "u32" } ], "documentation": [ " Cancel an anonymously scheduled task.", "", " # ", " - S = Number of already scheduled calls", " - Base Weight: 22.15 + 2.869 * S µs", " - DB Weight:", " - Read: Agenda", " - Write: Agenda, Lookup", " - Will use base weight of 100 which should be good for up to 30 scheduled calls", " # " ] }, { "name": "schedule_named", "arguments": [ { "name": "id", "ty": "Vec" }, { "name": "when", "ty": "T::BlockNumber" }, { "name": "maybe_periodic", "ty": "Option>" }, { "name": "priority", "ty": "schedule::Priority" }, { "name": "call", "ty": "Box<::Call>" } ], "documentation": [ " Schedule a named task.", "", " # ", " - S = Number of already scheduled calls", " - Base Weight: 29.6 + .159 * S µs", " - DB Weight:", " - Read: Agenda, Lookup", " - Write: Agenda, Lookup", " - Will use base weight of 35 which should be good for more than 30 scheduled calls", " # " ] }, { "name": "cancel_named", "arguments": [ { "name": "id", "ty": "Vec" } ], "documentation": [ " Cancel a named scheduled task.", "", " # ", " - S = Number of already scheduled calls", " - Base Weight: 24.91 + 2.907 * S µs", " - DB Weight:", " - Read: Agenda, Lookup", " - Write: Agenda, Lookup", " - Will use base weight of 100 which should be good for up to 30 scheduled calls", " # " ] }, { "name": "schedule_after", "arguments": [ { "name": "after", "ty": "T::BlockNumber" }, { "name": "maybe_periodic", "ty": "Option>" }, { "name": "priority", "ty": "schedule::Priority" }, { "name": "call", "ty": "Box<::Call>" } ], "documentation": [ " Anonymously schedule a task after a delay.", "", " # ", " Same as [`schedule`].", " # " ] }, { "name": "schedule_named_after", "arguments": [ { "name": "id", "ty": "Vec" }, { "name": "after", "ty": "T::BlockNumber" }, { "name": "maybe_periodic", "ty": "Option>" }, { "name": "priority", "ty": "schedule::Priority" }, { "name": "call", "ty": "Box<::Call>" } ], "documentation": [ " Schedule a named task after a delay.", "", " # ", " Same as [`schedule_named`].", " # " ] } ], "event": [ { "name": "Scheduled", "arguments": [ "BlockNumber", "u32" ], "documentation": [ " Scheduled some task. \\[when, index\\]" ] }, { "name": "Canceled", "arguments": [ "BlockNumber", "u32" ], "documentation": [ " Canceled some task. \\[when, index\\]" ] }, { "name": "Dispatched", "arguments": [ "TaskAddress", "Option>", "DispatchResult" ], "documentation": [ " Dispatched some task. \\[task, id, result\\]" ] } ], "constants": [], "errors": [ { "name": "FailedToSchedule", "documentation": [ " Failed to schedule a call" ] }, { "name": "NotFound", "documentation": [ " Cannot find the scheduled call." ] }, { "name": "TargetBlockNumberInPast", "documentation": [ " Given target block number is in the past." ] }, { "name": "RescheduleNoChange", "documentation": [ " Reschedule failed because it does not change scheduled time." ] } ], "index": 1 }, { "name": "Babe", "storage": { "prefix": "Babe", "entries": [ { "name": "EpochIndex", "modifier": "Default", "ty": { "Plain": "u64" }, "default": [ 0, 0, 0, 0, 0, 0, 0, 0 ], "documentation": [ " Current epoch index." ] }, { "name": "Authorities", "modifier": "Default", "ty": { "Plain": "Vec<(AuthorityId, BabeAuthorityWeight)>" }, "default": [ 0 ], "documentation": [ " Current epoch authorities." ] }, { "name": "GenesisSlot", "modifier": "Default", "ty": { "Plain": "Slot" }, "default": [ 0, 0, 0, 0, 0, 0, 0, 0 ], "documentation": [ " The slot at which the first epoch actually started. This is 0", " until the first block of the chain." ] }, { "name": "CurrentSlot", "modifier": "Default", "ty": { "Plain": "Slot" }, "default": [ 0, 0, 0, 0, 0, 0, 0, 0 ], "documentation": [ " Current slot number." ] }, { "name": "Randomness", "modifier": "Default", "ty": { "Plain": "schnorrkel::Randomness" }, "default": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "documentation": [ " The epoch randomness for the *current* epoch.", "", " # Security", "", " This MUST NOT be used for gambling, as it can be influenced by a", " malicious validator in the short term. It MAY be used in many", " cryptographic protocols, however, so long as one remembers that this", " (like everything else on-chain) it is public. For example, it can be", " used where a number is needed that cannot have been chosen by an", " adversary, for purposes such as public-coin zero-knowledge proofs." ] }, { "name": "PendingEpochConfigChange", "modifier": "Optional", "ty": { "Plain": "NextConfigDescriptor" }, "default": [ 0 ], "documentation": [ " Pending epoch configuration change that will be applied when the next epoch is enacted." ] }, { "name": "NextRandomness", "modifier": "Default", "ty": { "Plain": "schnorrkel::Randomness" }, "default": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "documentation": [ " Next epoch randomness." ] }, { "name": "NextAuthorities", "modifier": "Default", "ty": { "Plain": "Vec<(AuthorityId, BabeAuthorityWeight)>" }, "default": [ 0 ], "documentation": [ " Next epoch authorities." ] }, { "name": "SegmentIndex", "modifier": "Default", "ty": { "Plain": "u32" }, "default": [ 0, 0, 0, 0 ], "documentation": [ " Randomness under construction.", "", " We make a tradeoff between storage accesses and list length.", " We store the under-construction randomness in segments of up to", " `UNDER_CONSTRUCTION_SEGMENT_LENGTH`.", "", " Once a segment reaches this length, we begin the next one.", " We reset all segments and return to `0` at the beginning of every", " epoch." ] }, { "name": "UnderConstruction", "modifier": "Default", "ty": { "Map": { "hasher": "Twox64Concat", "key": "u32", "value": "Vec", "unused": false } }, "default": [ 0 ], "documentation": [ " TWOX-NOTE: `SegmentIndex` is an increasing integer, so this is okay." ] }, { "name": "Initialized", "modifier": "Optional", "ty": { "Plain": "MaybeRandomness" }, "default": [ 0 ], "documentation": [ " Temporary value (cleared at block finalization) which is `Some`", " if per-block initialization has already been called for current block." ] }, { "name": "AuthorVrfRandomness", "modifier": "Default", "ty": { "Plain": "MaybeRandomness" }, "default": [ 0 ], "documentation": [ " Temporary value (cleared at block finalization) that includes the VRF output generated", " at this block. This field should always be populated during block processing unless", " secondary plain slots are enabled (which don't contain a VRF output)." ] }, { "name": "EpochStart", "modifier": "Default", "ty": { "Plain": "(T::BlockNumber, T::BlockNumber)" }, "default": [ 0, 0, 0, 0, 0, 0, 0, 0 ], "documentation": [ " The block numbers when the last and current epoch have started, respectively `N-1` and", " `N`.", " NOTE: We track this is in order to annotate the block number when a given pool of", " entropy was fixed (i.e. it was known to chain observers). Since epochs are defined in", " slots, which may be skipped, the block numbers may not line up with the slot numbers." ] }, { "name": "Lateness", "modifier": "Default", "ty": { "Plain": "T::BlockNumber" }, "default": [ 0, 0, 0, 0 ], "documentation": [ " How late the current block is compared to its parent.", "", " This entry is populated as part of block execution and is cleaned up", " on block finalization. Querying this storage entry outside of block", " execution context should always yield zero." ] }, { "name": "EpochConfig", "modifier": "Optional", "ty": { "Plain": "BabeEpochConfiguration" }, "default": [ 0 ], "documentation": [ " The configuration for the current epoch. Should never be `None` as it is initialized in genesis." ] }, { "name": "NextEpochConfig", "modifier": "Optional", "ty": { "Plain": "BabeEpochConfiguration" }, "default": [ 0 ], "documentation": [ " The configuration for the next epoch, `None` if the config will not change", " (you can fallback to `EpochConfig` instead in that case)." ] } ] }, "calls": [ { "name": "report_equivocation", "arguments": [ { "name": "equivocation_proof", "ty": "EquivocationProof" }, { "name": "key_owner_proof", "ty": "T::KeyOwnerProof" } ], "documentation": [ " Report authority equivocation/misbehavior. This method will verify", " the equivocation proof and validate the given key ownership proof", " against the extracted offender. If both are valid, the offence will", " be reported." ] }, { "name": "report_equivocation_unsigned", "arguments": [ { "name": "equivocation_proof", "ty": "EquivocationProof" }, { "name": "key_owner_proof", "ty": "T::KeyOwnerProof" } ], "documentation": [ " Report authority equivocation/misbehavior. This method will verify", " the equivocation proof and validate the given key ownership proof", " against the extracted offender. If both are valid, the offence will", " be reported.", " This extrinsic must be called unsigned and it is expected that only", " block authors will call it (validated in `ValidateUnsigned`), as such", " if the block author is defined it will be defined as the equivocation", " reporter." ] }, { "name": "plan_config_change", "arguments": [ { "name": "config", "ty": "NextConfigDescriptor" } ], "documentation": [ " Plan an epoch config change. The epoch config change is recorded and will be enacted on", " the next call to `enact_epoch_change`. The config will be activated one epoch after.", " Multiple calls to this method will replace any existing planned config change that had", " not been enacted yet." ] } ], "event": null, "constants": [ { "name": "EpochDuration", "ty": "u64", "value": [ 96, 9, 0, 0, 0, 0, 0, 0 ], "documentation": [ " The amount of time, in slots, that each epoch should last.", " NOTE: Currently it is not possible to change the epoch duration after", " the chain has started. Attempting to do so will brick block production." ] }, { "name": "ExpectedBlockTime", "ty": "T::Moment", "value": [ 112, 23, 0, 0, 0, 0, 0, 0 ], "documentation": [ " The expected average block time at which BABE should be creating", " blocks. Since BABE is probabilistic it is not trivial to figure out", " what the expected average block time should be based on the slot", " duration and the security parameter `c` (where `1 - c` represents", " the probability of a slot being empty)." ] } ], "errors": [ { "name": "InvalidEquivocationProof", "documentation": [ " An equivocation proof provided as part of an equivocation report is invalid." ] }, { "name": "InvalidKeyOwnershipProof", "documentation": [ " A key ownership proof provided as part of an equivocation report is invalid." ] }, { "name": "DuplicateOffenceReport", "documentation": [ " A given equivocation report is valid but already previously reported." ] } ], "index": 2 }, { "name": "Timestamp", "storage": { "prefix": "Timestamp", "entries": [ { "name": "Now", "modifier": "Default", "ty": { "Plain": "T::Moment" }, "default": [ 0, 0, 0, 0, 0, 0, 0, 0 ], "documentation": [ " Current time for the current block." ] }, { "name": "DidUpdate", "modifier": "Default", "ty": { "Plain": "bool" }, "default": [ 0 ], "documentation": [ " Did the timestamp get updated in this block?" ] } ] }, "calls": [ { "name": "set", "arguments": [ { "name": "now", "ty": "Compact" } ], "documentation": [ " Set the current time.", "", " This call should be invoked exactly once per block. It will panic at the finalization", " phase, if this call hasn't been invoked by that time.", "", " The timestamp should be greater than the previous one by the amount specified by", " `MinimumPeriod`.", "", " The dispatch origin for this call must be `Inherent`.", "", " # ", " - `O(1)` (Note that implementations of `OnTimestampSet` must also be `O(1)`)", " - 1 storage read and 1 storage mutation (codec `O(1)`). (because of `DidUpdate::take` in `on_finalize`)", " - 1 event handler `on_timestamp_set`. Must be `O(1)`.", " # " ] } ], "event": null, "constants": [ { "name": "MinimumPeriod", "ty": "T::Moment", "value": [ 184, 11, 0, 0, 0, 0, 0, 0 ], "documentation": [ " The minimum period between blocks. Beware that this is different to the *expected* period", " that the block production apparatus provides. Your chosen consensus system will generally", " work with this to determine a sensible block time. e.g. For Aura, it will be double this", " period on default settings." ] } ], "errors": [], "index": 3 }, { "name": "Indices", "storage": { "prefix": "Indices", "entries": [ { "name": "Accounts", "modifier": "Optional", "ty": { "Map": { "hasher": "Blake2_128Concat", "key": "T::AccountIndex", "value": "(T::AccountId, BalanceOf, bool)", "unused": false } }, "default": [ 0 ], "documentation": [ " The lookup from index to account." ] } ] }, "calls": [ { "name": "claim", "arguments": [ { "name": "index", "ty": "T::AccountIndex" } ], "documentation": [ " Assign an previously unassigned index.", "", " Payment: `Deposit` is reserved from the sender account.", "", " The dispatch origin for this call must be _Signed_.", "", " - `index`: the index to be claimed. This must not be in use.", "", " Emits `IndexAssigned` if successful.", "", " # ", " - `O(1)`.", " - One storage mutation (codec `O(1)`).", " - One reserve operation.", " - One event.", " -------------------", " - DB Weight: 1 Read/Write (Accounts)", " # " ] }, { "name": "transfer", "arguments": [ { "name": "new", "ty": "T::AccountId" }, { "name": "index", "ty": "T::AccountIndex" } ], "documentation": [ " Assign an index already owned by the sender to another account. The balance reservation", " is effectively transferred to the new account.", "", " The dispatch origin for this call must be _Signed_.", "", " - `index`: the index to be re-assigned. This must be owned by the sender.", " - `new`: the new owner of the index. This function is a no-op if it is equal to sender.", "", " Emits `IndexAssigned` if successful.", "", " # ", " - `O(1)`.", " - One storage mutation (codec `O(1)`).", " - One transfer operation.", " - One event.", " -------------------", " - DB Weight:", " - Reads: Indices Accounts, System Account (recipient)", " - Writes: Indices Accounts, System Account (recipient)", " # " ] }, { "name": "free", "arguments": [ { "name": "index", "ty": "T::AccountIndex" } ], "documentation": [ " Free up an index owned by the sender.", "", " Payment: Any previous deposit placed for the index is unreserved in the sender account.", "", " The dispatch origin for this call must be _Signed_ and the sender must own the index.", "", " - `index`: the index to be freed. This must be owned by the sender.", "", " Emits `IndexFreed` if successful.", "", " # ", " - `O(1)`.", " - One storage mutation (codec `O(1)`).", " - One reserve operation.", " - One event.", " -------------------", " - DB Weight: 1 Read/Write (Accounts)", " # " ] }, { "name": "force_transfer", "arguments": [ { "name": "new", "ty": "T::AccountId" }, { "name": "index", "ty": "T::AccountIndex" }, { "name": "freeze", "ty": "bool" } ], "documentation": [ " Force an index to an account. This doesn't require a deposit. If the index is already", " held, then any deposit is reimbursed to its current owner.", "", " The dispatch origin for this call must be _Root_.", "", " - `index`: the index to be (re-)assigned.", " - `new`: the new owner of the index. This function is a no-op if it is equal to sender.", " - `freeze`: if set to `true`, will freeze the index so it cannot be transferred.", "", " Emits `IndexAssigned` if successful.", "", " # ", " - `O(1)`.", " - One storage mutation (codec `O(1)`).", " - Up to one reserve operation.", " - One event.", " -------------------", " - DB Weight:", " - Reads: Indices Accounts, System Account (original owner)", " - Writes: Indices Accounts, System Account (original owner)", " # " ] }, { "name": "freeze", "arguments": [ { "name": "index", "ty": "T::AccountIndex" } ], "documentation": [ " Freeze an index so it will always point to the sender account. This consumes the deposit.", "", " The dispatch origin for this call must be _Signed_ and the signing account must have a", " non-frozen account `index`.", "", " - `index`: the index to be frozen in place.", "", " Emits `IndexFrozen` if successful.", "", " # ", " - `O(1)`.", " - One storage mutation (codec `O(1)`).", " - Up to one slash operation.", " - One event.", " -------------------", " - DB Weight: 1 Read/Write (Accounts)", " # " ] } ], "event": [ { "name": "IndexAssigned", "arguments": [ "AccountId", "AccountIndex" ], "documentation": [ " A account index was assigned. \\[index, who\\]" ] }, { "name": "IndexFreed", "arguments": [ "AccountIndex" ], "documentation": [ " A account index has been freed up (unassigned). \\[index\\]" ] }, { "name": "IndexFrozen", "arguments": [ "AccountIndex", "AccountId" ], "documentation": [ " A account index has been frozen to its current account ID. \\[index, who\\]" ] } ], "constants": [ { "name": "Deposit", "ty": "BalanceOf", "value": [ 0, 232, 118, 72, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "documentation": [ " The deposit needed for reserving an index." ] } ], "errors": [], "index": 4 }, { "name": "Balances", "storage": { "prefix": "Balances", "entries": [ { "name": "TotalIssuance", "modifier": "Default", "ty": { "Plain": "T::Balance" }, "default": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "documentation": [ " The total units issued in the system." ] }, { "name": "Account", "modifier": "Default", "ty": { "Map": { "hasher": "Blake2_128Concat", "key": "T::AccountId", "value": "AccountData", "unused": false } }, "default": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "documentation": [ " The balance of an account.", "", " NOTE: This is only used in the case that this pallet is used to store balances." ] }, { "name": "Locks", "modifier": "Default", "ty": { "Map": { "hasher": "Blake2_128Concat", "key": "T::AccountId", "value": "Vec>", "unused": false } }, "default": [ 0 ], "documentation": [ " Any liquidity locks on some account balances.", " NOTE: Should only be accessed when setting, changing and freeing a lock." ] }, { "name": "StorageVersion", "modifier": "Default", "ty": { "Plain": "Releases" }, "default": [ 0 ], "documentation": [ " Storage version of the pallet.", "", " This is set to v2.0.0 for new networks." ] } ] }, "calls": [ { "name": "transfer", "arguments": [ { "name": "dest", "ty": "::Source" }, { "name": "value", "ty": "Compact" } ], "documentation": [ " Transfer some liquid free balance to another account.", "", " `transfer` will set the `FreeBalance` of the sender and receiver.", " It will decrease the total issuance of the system by the `TransferFee`.", " If the sender's account is below the existential deposit as a result", " of the transfer, the account will be reaped.", "", " The dispatch origin for this call must be `Signed` by the transactor.", "", " # ", " - Dependent on arguments but not critical, given proper implementations for", " input config types. See related functions below.", " - It contains a limited number of reads and writes internally and no complex computation.", "", " Related functions:", "", " - `ensure_can_withdraw` is always called internally but has a bounded complexity.", " - Transferring balances to accounts that did not exist before will cause", " `T::OnNewAccount::on_new_account` to be called.", " - Removing enough funds from an account will trigger `T::DustRemoval::on_unbalanced`.", " - `transfer_keep_alive` works the same way as `transfer`, but has an additional", " check that the transfer will not kill the origin account.", " ---------------------------------", " - Base Weight: 73.64 µs, worst case scenario (account created, account removed)", " - DB Weight: 1 Read and 1 Write to destination account", " - Origin account is already in memory, so no DB operations for them.", " # " ] }, { "name": "set_balance", "arguments": [ { "name": "who", "ty": "::Source" }, { "name": "new_free", "ty": "Compact" }, { "name": "new_reserved", "ty": "Compact" } ], "documentation": [ " Set the balances of a given account.", "", " This will alter `FreeBalance` and `ReservedBalance` in storage. it will", " also decrease the total issuance of the system (`TotalIssuance`).", " If the new free or reserved balance is below the existential deposit,", " it will reset the account nonce (`frame_system::AccountNonce`).", "", " The dispatch origin for this call is `root`.", "", " # ", " - Independent of the arguments.", " - Contains a limited number of reads and writes.", " ---------------------", " - Base Weight:", " - Creating: 27.56 µs", " - Killing: 35.11 µs", " - DB Weight: 1 Read, 1 Write to `who`", " # " ] }, { "name": "force_transfer", "arguments": [ { "name": "source", "ty": "::Source" }, { "name": "dest", "ty": "::Source" }, { "name": "value", "ty": "Compact" } ], "documentation": [ " Exactly as `transfer`, except the origin must be root and the source account may be", " specified.", " # ", " - Same as transfer, but additional read and write because the source account is", " not assumed to be in the overlay.", " # " ] }, { "name": "transfer_keep_alive", "arguments": [ { "name": "dest", "ty": "::Source" }, { "name": "value", "ty": "Compact" } ], "documentation": [ " Same as the [`transfer`] call, but with a check that the transfer will not kill the", " origin account.", "", " 99% of the time you want [`transfer`] instead.", "", " [`transfer`]: struct.Pallet.html#method.transfer", " # ", " - Cheaper than transfer because account cannot be killed.", " - Base Weight: 51.4 µs", " - DB Weight: 1 Read and 1 Write to dest (sender is in overlay already)", " #" ] } ], "event": [ { "name": "Endowed", "arguments": [ "AccountId", "Balance" ], "documentation": [ " An account was created with some free balance. \\[account, free_balance\\]" ] }, { "name": "DustLost", "arguments": [ "AccountId", "Balance" ], "documentation": [ " An account was removed whose balance was non-zero but below ExistentialDeposit,", " resulting in an outright loss. \\[account, balance\\]" ] }, { "name": "Transfer", "arguments": [ "AccountId", "AccountId", "Balance" ], "documentation": [ " Transfer succeeded. \\[from, to, value\\]" ] }, { "name": "BalanceSet", "arguments": [ "AccountId", "Balance", "Balance" ], "documentation": [ " A balance was set by root. \\[who, free, reserved\\]" ] }, { "name": "Deposit", "arguments": [ "AccountId", "Balance" ], "documentation": [ " Some amount was deposited (e.g. for transaction fees). \\[who, deposit\\]" ] }, { "name": "Reserved", "arguments": [ "AccountId", "Balance" ], "documentation": [ " Some balance was reserved (moved from free to reserved). \\[who, value\\]" ] }, { "name": "Unreserved", "arguments": [ "AccountId", "Balance" ], "documentation": [ " Some balance was unreserved (moved from reserved to free). \\[who, value\\]" ] }, { "name": "ReserveRepatriated", "arguments": [ "AccountId", "AccountId", "Balance", "Status" ], "documentation": [ " Some balance was moved from the reserve of the first account to the second account.", " Final argument indicates the destination balance type.", " \\[from, to, balance, destination_status\\]" ] } ], "constants": [ { "name": "ExistentialDeposit", "ty": "T::Balance", "value": [ 0, 228, 11, 84, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "documentation": [ " The minimum amount required to keep an account open." ] } ], "errors": [ { "name": "VestingBalance", "documentation": [ " Vesting balance too high to send value" ] }, { "name": "LiquidityRestrictions", "documentation": [ " Account liquidity restrictions prevent withdrawal" ] }, { "name": "Overflow", "documentation": [ " Got an overflow after adding" ] }, { "name": "InsufficientBalance", "documentation": [ " Balance too low to send value" ] }, { "name": "ExistentialDeposit", "documentation": [ " Value too low to create account due to existential deposit" ] }, { "name": "KeepAlive", "documentation": [ " Transfer/payment would kill account" ] }, { "name": "ExistingVestingSchedule", "documentation": [ " A vesting schedule already exists for this account" ] }, { "name": "DeadAccount", "documentation": [ " Beneficiary account must pre-exist" ] } ], "index": 5 }, { "name": "TransactionPayment", "storage": { "prefix": "TransactionPayment", "entries": [ { "name": "NextFeeMultiplier", "modifier": "Default", "ty": { "Plain": "Multiplier" }, "default": [ 0, 0, 100, 167, 179, 182, 224, 13, 0, 0, 0, 0, 0, 0, 0, 0 ], "documentation": [] }, { "name": "StorageVersion", "modifier": "Default", "ty": { "Plain": "Releases" }, "default": [ 0 ], "documentation": [] } ] }, "calls": null, "event": null, "constants": [ { "name": "TransactionByteFee", "ty": "BalanceOf", "value": [ 64, 66, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "documentation": [ " The fee to be paid for making a transaction; the per-byte portion." ] }, { "name": "WeightToFee", "ty": "Vec>>", "value": [ 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 180, 196, 4, 0, 1 ], "documentation": [ " The polynomial that is applied in order to derive fee from weight." ] } ], "errors": [], "index": 32 }, { "name": "Authorship", "storage": { "prefix": "Authorship", "entries": [ { "name": "Uncles", "modifier": "Default", "ty": { "Plain": "Vec>" }, "default": [ 0 ], "documentation": [ " Uncles" ] }, { "name": "Author", "modifier": "Optional", "ty": { "Plain": "T::AccountId" }, "default": [ 0 ], "documentation": [ " Author of current block." ] }, { "name": "DidSetUncles", "modifier": "Default", "ty": { "Plain": "bool" }, "default": [ 0 ], "documentation": [ " Whether uncles were already set in this block." ] } ] }, "calls": [ { "name": "set_uncles", "arguments": [ { "name": "new_uncles", "ty": "Vec" } ], "documentation": [ " Provide a set of uncles." ] } ], "event": null, "constants": [], "errors": [ { "name": "InvalidUncleParent", "documentation": [ " The uncle parent not in the chain." ] }, { "name": "UnclesAlreadySet", "documentation": [ " Uncles already set in the block." ] }, { "name": "TooManyUncles", "documentation": [ " Too many uncles." ] }, { "name": "GenesisUncle", "documentation": [ " The uncle is genesis." ] }, { "name": "TooHighUncle", "documentation": [ " The uncle is too high in chain." ] }, { "name": "UncleAlreadyIncluded", "documentation": [ " The uncle is already included." ] }, { "name": "OldUncle", "documentation": [ " The uncle isn't recent enough to be included." ] } ], "index": 6 }, { "name": "Staking", "storage": { "prefix": "Staking", "entries": [ { "name": "HistoryDepth", "modifier": "Default", "ty": { "Plain": "u32" }, "default": [ 84, 0, 0, 0 ], "documentation": [ " Number of eras to keep in history.", "", " Information is kept for eras in `[current_era - history_depth; current_era]`.", "", " Must be more than the number of eras delayed by session otherwise. I.e. active era must", " always be in history. I.e. `active_era > current_era - history_depth` must be", " guaranteed." ] }, { "name": "ValidatorCount", "modifier": "Default", "ty": { "Plain": "u32" }, "default": [ 0, 0, 0, 0 ], "documentation": [ " The ideal number of staking participants." ] }, { "name": "MinimumValidatorCount", "modifier": "Default", "ty": { "Plain": "u32" }, "default": [ 0, 0, 0, 0 ], "documentation": [ " Minimum number of staking participants before emergency conditions are imposed." ] }, { "name": "Invulnerables", "modifier": "Default", "ty": { "Plain": "Vec" }, "default": [ 0 ], "documentation": [ " Any validators that may never be slashed or forcibly kicked. It's a Vec since they're", " easy to initialize and the performance hit is minimal (we expect no more than four", " invulnerables) and restricted to testnets." ] }, { "name": "Bonded", "modifier": "Optional", "ty": { "Map": { "hasher": "Twox64Concat", "key": "T::AccountId", "value": "T::AccountId", "unused": false } }, "default": [ 0 ], "documentation": [ " Map from all locked \"stash\" accounts to the controller account." ] }, { "name": "Ledger", "modifier": "Optional", "ty": { "Map": { "hasher": "Blake2_128Concat", "key": "T::AccountId", "value": "StakingLedger>", "unused": false } }, "default": [ 0 ], "documentation": [ " Map from all (unlocked) \"controller\" accounts to the info regarding the staking." ] }, { "name": "Payee", "modifier": "Default", "ty": { "Map": { "hasher": "Twox64Concat", "key": "T::AccountId", "value": "RewardDestination", "unused": false } }, "default": [ 0 ], "documentation": [ " Where the reward payment should be made. Keyed by stash." ] }, { "name": "Validators", "modifier": "Default", "ty": { "Map": { "hasher": "Twox64Concat", "key": "T::AccountId", "value": "ValidatorPrefs", "unused": false } }, "default": [ 0, 0 ], "documentation": [ " The map from (wannabe) validator stash key to the preferences of that validator." ] }, { "name": "Nominators", "modifier": "Optional", "ty": { "Map": { "hasher": "Twox64Concat", "key": "T::AccountId", "value": "Nominations", "unused": false } }, "default": [ 0 ], "documentation": [ " The map from nominator stash key to the set of stash keys of all validators to nominate." ] }, { "name": "CurrentEra", "modifier": "Optional", "ty": { "Plain": "EraIndex" }, "default": [ 0 ], "documentation": [ " The current era index.", "", " This is the latest planned era, depending on how the Session pallet queues the validator", " set, it might be active or not." ] }, { "name": "ActiveEra", "modifier": "Optional", "ty": { "Plain": "ActiveEraInfo" }, "default": [ 0 ], "documentation": [ " The active era information, it holds index and start.", "", " The active era is the era being currently rewarded. Validator set of this era must be", " equal to [`SessionInterface::validators`]." ] }, { "name": "ErasStartSessionIndex", "modifier": "Optional", "ty": { "Map": { "hasher": "Twox64Concat", "key": "EraIndex", "value": "SessionIndex", "unused": false } }, "default": [ 0 ], "documentation": [ " The session index at which the era start for the last `HISTORY_DEPTH` eras.", "", " Note: This tracks the starting session (i.e. session index when era start being active)", " for the eras in `[CurrentEra - HISTORY_DEPTH, CurrentEra]`." ] }, { "name": "ErasStakers", "modifier": "Default", "ty": { "DoubleMap": { "hasher": "Twox64Concat", "key1": "EraIndex", "key2": "T::AccountId", "value": "Exposure>", "key2_hasher": "Twox64Concat" } }, "default": [ 0, 0, 0 ], "documentation": [ " Exposure of validator at era.", "", " This is keyed first by the era index to allow bulk deletion and then the stash account.", "", " Is it removed after `HISTORY_DEPTH` eras.", " If stakers hasn't been set or has been removed then empty exposure is returned." ] }, { "name": "ErasStakersClipped", "modifier": "Default", "ty": { "DoubleMap": { "hasher": "Twox64Concat", "key1": "EraIndex", "key2": "T::AccountId", "value": "Exposure>", "key2_hasher": "Twox64Concat" } }, "default": [ 0, 0, 0 ], "documentation": [ " Clipped Exposure of validator at era.", "", " This is similar to [`ErasStakers`] but number of nominators exposed is reduced to the", " `T::MaxNominatorRewardedPerValidator` biggest stakers.", " (Note: the field `total` and `own` of the exposure remains unchanged).", " This is used to limit the i/o cost for the nominator payout.", "", " This is keyed fist by the era index to allow bulk deletion and then the stash account.", "", " Is it removed after `HISTORY_DEPTH` eras.", " If stakers hasn't been set or has been removed then empty exposure is returned." ] }, { "name": "ErasValidatorPrefs", "modifier": "Default", "ty": { "DoubleMap": { "hasher": "Twox64Concat", "key1": "EraIndex", "key2": "T::AccountId", "value": "ValidatorPrefs", "key2_hasher": "Twox64Concat" } }, "default": [ 0, 0 ], "documentation": [ " Similar to `ErasStakers`, this holds the preferences of validators.", "", " This is keyed first by the era index to allow bulk deletion and then the stash account.", "", " Is it removed after `HISTORY_DEPTH` eras." ] }, { "name": "ErasValidatorReward", "modifier": "Optional", "ty": { "Map": { "hasher": "Twox64Concat", "key": "EraIndex", "value": "BalanceOf", "unused": false } }, "default": [ 0 ], "documentation": [ " The total validator era payout for the last `HISTORY_DEPTH` eras.", "", " Eras that haven't finished yet or has been removed doesn't have reward." ] }, { "name": "ErasRewardPoints", "modifier": "Default", "ty": { "Map": { "hasher": "Twox64Concat", "key": "EraIndex", "value": "EraRewardPoints", "unused": false } }, "default": [ 0, 0, 0, 0, 0 ], "documentation": [ " Rewards for the last `HISTORY_DEPTH` eras.", " If reward hasn't been set or has been removed then 0 reward is returned." ] }, { "name": "ErasTotalStake", "modifier": "Default", "ty": { "Map": { "hasher": "Twox64Concat", "key": "EraIndex", "value": "BalanceOf", "unused": false } }, "default": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "documentation": [ " The total amount staked for the last `HISTORY_DEPTH` eras.", " If total hasn't been set or has been removed then 0 stake is returned." ] }, { "name": "ForceEra", "modifier": "Default", "ty": { "Plain": "Forcing" }, "default": [ 0 ], "documentation": [ " Mode of era forcing." ] }, { "name": "SlashRewardFraction", "modifier": "Default", "ty": { "Plain": "Perbill" }, "default": [ 0, 0, 0, 0 ], "documentation": [ " The percentage of the slash that is distributed to reporters.", "", " The rest of the slashed value is handled by the `Slash`." ] }, { "name": "CanceledSlashPayout", "modifier": "Default", "ty": { "Plain": "BalanceOf" }, "default": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "documentation": [ " The amount of currency given to reporters of a slash event which was", " canceled by extraordinary circumstances (e.g. governance)." ] }, { "name": "UnappliedSlashes", "modifier": "Default", "ty": { "Map": { "hasher": "Twox64Concat", "key": "EraIndex", "value": "Vec>>", "unused": false } }, "default": [ 0 ], "documentation": [ " All unapplied slashes that are queued for later." ] }, { "name": "BondedEras", "modifier": "Default", "ty": { "Plain": "Vec<(EraIndex, SessionIndex)>" }, "default": [ 0 ], "documentation": [ " A mapping from still-bonded eras to the first session index of that era.", "", " Must contains information for eras for the range:", " `[active_era - bounding_duration; active_era]`" ] }, { "name": "ValidatorSlashInEra", "modifier": "Optional", "ty": { "DoubleMap": { "hasher": "Twox64Concat", "key1": "EraIndex", "key2": "T::AccountId", "value": "(Perbill, BalanceOf)", "key2_hasher": "Twox64Concat" } }, "default": [ 0 ], "documentation": [ " All slashing events on validators, mapped by era to the highest slash proportion", " and slash value of the era." ] }, { "name": "NominatorSlashInEra", "modifier": "Optional", "ty": { "DoubleMap": { "hasher": "Twox64Concat", "key1": "EraIndex", "key2": "T::AccountId", "value": "BalanceOf", "key2_hasher": "Twox64Concat" } }, "default": [ 0 ], "documentation": [ " All slashing events on nominators, mapped by era to the highest slash value of the era." ] }, { "name": "SlashingSpans", "modifier": "Optional", "ty": { "Map": { "hasher": "Twox64Concat", "key": "T::AccountId", "value": "slashing::SlashingSpans", "unused": false } }, "default": [ 0 ], "documentation": [ " Slashing spans for stash accounts." ] }, { "name": "SpanSlash", "modifier": "Default", "ty": { "Map": { "hasher": "Twox64Concat", "key": "(T::AccountId, slashing::SpanIndex)", "value": "slashing::SpanRecord>", "unused": false } }, "default": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "documentation": [ " Records information about the maximum slash of a stash within a slashing span,", " as well as how much reward has been paid out." ] }, { "name": "EarliestUnappliedSlash", "modifier": "Optional", "ty": { "Plain": "EraIndex" }, "default": [ 0 ], "documentation": [ " The earliest era for which we have a pending, unapplied slash." ] }, { "name": "CurrentPlannedSession", "modifier": "Default", "ty": { "Plain": "SessionIndex" }, "default": [ 0, 0, 0, 0 ], "documentation": [ " The last planned session scheduled by the session pallet.", "", " This is basically in sync with the call to [`SessionManager::new_session`]." ] }, { "name": "StorageVersion", "modifier": "Default", "ty": { "Plain": "Releases" }, "default": [ 5 ], "documentation": [ " True if network has been upgraded to this version.", " Storage version of the pallet.", "", " This is set to v6.0.0 for new networks." ] } ] }, "calls": [ { "name": "bond", "arguments": [ { "name": "controller", "ty": "::Source" }, { "name": "value", "ty": "Compact>" }, { "name": "payee", "ty": "RewardDestination" } ], "documentation": [ " Take the origin account as a stash and lock up `value` of its balance. `controller` will", " be the account that controls it.", "", " `value` must be more than the `minimum_balance` specified by `T::Currency`.", "", " The dispatch origin for this call must be _Signed_ by the stash account.", "", " Emits `Bonded`.", "", " # ", " - Independent of the arguments. Moderate complexity.", " - O(1).", " - Three extra DB entries.", "", " NOTE: Two of the storage writes (`Self::bonded`, `Self::payee`) are _never_ cleaned", " unless the `origin` falls below _existential deposit_ and gets removed as dust.", " ------------------", " Weight: O(1)", " DB Weight:", " - Read: Bonded, Ledger, [Origin Account], Current Era, History Depth, Locks", " - Write: Bonded, Payee, [Origin Account], Locks, Ledger", " # " ] }, { "name": "bond_extra", "arguments": [ { "name": "max_additional", "ty": "Compact>" } ], "documentation": [ " Add some extra amount that have appeared in the stash `free_balance` into the balance up", " for staking.", "", " Use this if there are additional funds in your stash account that you wish to bond.", " Unlike [`bond`] or [`unbond`] this function does not impose any limitation on the amount", " that can be added.", "", " The dispatch origin for this call must be _Signed_ by the stash, not the controller and", " it can be only called when [`EraElectionStatus`] is `Closed`.", "", " Emits `Bonded`.", "", " # ", " - Independent of the arguments. Insignificant complexity.", " - O(1).", " - One DB entry.", " ------------", " DB Weight:", " - Read: Era Election Status, Bonded, Ledger, [Origin Account], Locks", " - Write: [Origin Account], Locks, Ledger", " # " ] }, { "name": "unbond", "arguments": [ { "name": "value", "ty": "Compact>" } ], "documentation": [ " Schedule a portion of the stash to be unlocked ready for transfer out after the bond", " period ends. If this leaves an amount actively bonded less than", " T::Currency::minimum_balance(), then it is increased to the full amount.", "", " Once the unlock period is done, you can call `withdraw_unbonded` to actually move", " the funds out of management ready for transfer.", "", " No more than a limited number of unlocking chunks (see `MAX_UNLOCKING_CHUNKS`)", " can co-exists at the same time. In that case, [`Call::withdraw_unbonded`] need", " to be called first to remove some of the chunks (if possible).", "", " The dispatch origin for this call must be _Signed_ by the controller, not the stash.", " And, it can be only called when [`EraElectionStatus`] is `Closed`.", "", " Emits `Unbonded`.", "", " See also [`Call::withdraw_unbonded`].", "", " # ", " - Independent of the arguments. Limited but potentially exploitable complexity.", " - Contains a limited number of reads.", " - Each call (requires the remainder of the bonded balance to be above `minimum_balance`)", " will cause a new entry to be inserted into a vector (`Ledger.unlocking`) kept in storage.", " The only way to clean the aforementioned storage item is also user-controlled via", " `withdraw_unbonded`.", " - One DB entry.", " ----------", " Weight: O(1)", " DB Weight:", " - Read: EraElectionStatus, Ledger, CurrentEra, Locks, BalanceOf Stash,", " - Write: Locks, Ledger, BalanceOf Stash,", " " ] }, { "name": "withdraw_unbonded", "arguments": [ { "name": "num_slashing_spans", "ty": "u32" } ], "documentation": [ " Remove any unlocked chunks from the `unlocking` queue from our management.", "", " This essentially frees up that balance to be used by the stash account to do", " whatever it wants.", "", " The dispatch origin for this call must be _Signed_ by the controller, not the stash.", " And, it can be only called when [`EraElectionStatus`] is `Closed`.", "", " Emits `Withdrawn`.", "", " See also [`Call::unbond`].", "", " # ", " - Could be dependent on the `origin` argument and how much `unlocking` chunks exist.", " It implies `consolidate_unlocked` which loops over `Ledger.unlocking`, which is", " indirectly user-controlled. See [`unbond`] for more detail.", " - Contains a limited number of reads, yet the size of which could be large based on `ledger`.", " - Writes are limited to the `origin` account key.", " ---------------", " Complexity O(S) where S is the number of slashing spans to remove", " Update:", " - Reads: EraElectionStatus, Ledger, Current Era, Locks, [Origin Account]", " - Writes: [Origin Account], Locks, Ledger", " Kill:", " - Reads: EraElectionStatus, Ledger, Current Era, Bonded, Slashing Spans, [Origin", " Account], Locks, BalanceOf stash", " - Writes: Bonded, Slashing Spans (if S > 0), Ledger, Payee, Validators, Nominators,", " [Origin Account], Locks, BalanceOf stash.", " - Writes Each: SpanSlash * S", " NOTE: Weight annotation is the kill scenario, we refund otherwise.", " # " ] }, { "name": "validate", "arguments": [ { "name": "prefs", "ty": "ValidatorPrefs" } ], "documentation": [ " Declare the desire to validate for the origin controller.", "", " Effects will be felt at the beginning of the next era.", "", " The dispatch origin for this call must be _Signed_ by the controller, not the stash.", " And, it can be only called when [`EraElectionStatus`] is `Closed`.", "", " # ", " - Independent of the arguments. Insignificant complexity.", " - Contains a limited number of reads.", " - Writes are limited to the `origin` account key.", " -----------", " Weight: O(1)", " DB Weight:", " - Read: Era Election Status, Ledger", " - Write: Nominators, Validators", " # " ] }, { "name": "nominate", "arguments": [ { "name": "targets", "ty": "Vec<::Source>" } ], "documentation": [ " Declare the desire to nominate `targets` for the origin controller.", "", " Effects will be felt at the beginning of the next era. This can only be called when", " [`EraElectionStatus`] is `Closed`.", "", " The dispatch origin for this call must be _Signed_ by the controller, not the stash.", " And, it can be only called when [`EraElectionStatus`] is `Closed`.", "", " # ", " - The transaction's complexity is proportional to the size of `targets` (N)", " which is capped at CompactAssignments::LIMIT (MAX_NOMINATIONS).", " - Both the reads and writes follow a similar pattern.", " ---------", " Weight: O(N)", " where N is the number of targets", " DB Weight:", " - Reads: Era Election Status, Ledger, Current Era", " - Writes: Validators, Nominators", " # " ] }, { "name": "chill", "arguments": [], "documentation": [ " Declare no desire to either validate or nominate.", "", " Effects will be felt at the beginning of the next era.", "", " The dispatch origin for this call must be _Signed_ by the controller, not the stash.", " And, it can be only called when [`EraElectionStatus`] is `Closed`.", "", " # ", " - Independent of the arguments. Insignificant complexity.", " - Contains one read.", " - Writes are limited to the `origin` account key.", " --------", " Weight: O(1)", " DB Weight:", " - Read: EraElectionStatus, Ledger", " - Write: Validators, Nominators", " # " ] }, { "name": "set_payee", "arguments": [ { "name": "payee", "ty": "RewardDestination" } ], "documentation": [ " (Re-)set the payment target for a controller.", "", " Effects will be felt at the beginning of the next era.", "", " The dispatch origin for this call must be _Signed_ by the controller, not the stash.", "", " # ", " - Independent of the arguments. Insignificant complexity.", " - Contains a limited number of reads.", " - Writes are limited to the `origin` account key.", " ---------", " - Weight: O(1)", " - DB Weight:", " - Read: Ledger", " - Write: Payee", " # " ] }, { "name": "set_controller", "arguments": [ { "name": "controller", "ty": "::Source" } ], "documentation": [ " (Re-)set the controller of a stash.", "", " Effects will be felt at the beginning of the next era.", "", " The dispatch origin for this call must be _Signed_ by the stash, not the controller.", "", " # ", " - Independent of the arguments. Insignificant complexity.", " - Contains a limited number of reads.", " - Writes are limited to the `origin` account key.", " ----------", " Weight: O(1)", " DB Weight:", " - Read: Bonded, Ledger New Controller, Ledger Old Controller", " - Write: Bonded, Ledger New Controller, Ledger Old Controller", " # " ] }, { "name": "set_validator_count", "arguments": [ { "name": "new", "ty": "Compact" } ], "documentation": [ " Sets the ideal number of validators.", "", " The dispatch origin must be Root.", "", " # ", " Weight: O(1)", " Write: Validator Count", " # " ] }, { "name": "increase_validator_count", "arguments": [ { "name": "additional", "ty": "Compact" } ], "documentation": [ " Increments the ideal number of validators.", "", " The dispatch origin must be Root.", "", " # ", " Same as [`set_validator_count`].", " # " ] }, { "name": "scale_validator_count", "arguments": [ { "name": "factor", "ty": "Percent" } ], "documentation": [ " Scale up the ideal number of validators by a factor.", "", " The dispatch origin must be Root.", "", " # ", " Same as [`set_validator_count`].", " # " ] }, { "name": "force_no_eras", "arguments": [], "documentation": [ " Force there to be no new eras indefinitely.", "", " The dispatch origin must be Root.", "", " # ", " - No arguments.", " - Weight: O(1)", " - Write: ForceEra", " # " ] }, { "name": "force_new_era", "arguments": [], "documentation": [ " Force there to be a new era at the end of the next session. After this, it will be", " reset to normal (non-forced) behaviour.", "", " The dispatch origin must be Root.", "", " # ", " - No arguments.", " - Weight: O(1)", " - Write ForceEra", " # " ] }, { "name": "set_invulnerables", "arguments": [ { "name": "invulnerables", "ty": "Vec" } ], "documentation": [ " Set the validators who cannot be slashed (if any).", "", " The dispatch origin must be Root.", "", " # ", " - O(V)", " - Write: Invulnerables", " # " ] }, { "name": "force_unstake", "arguments": [ { "name": "stash", "ty": "T::AccountId" }, { "name": "num_slashing_spans", "ty": "u32" } ], "documentation": [ " Force a current staker to become completely unstaked, immediately.", "", " The dispatch origin must be Root.", "", " # ", " O(S) where S is the number of slashing spans to be removed", " Reads: Bonded, Slashing Spans, Account, Locks", " Writes: Bonded, Slashing Spans (if S > 0), Ledger, Payee, Validators, Nominators, Account, Locks", " Writes Each: SpanSlash * S", " # " ] }, { "name": "force_new_era_always", "arguments": [], "documentation": [ " Force there to be a new era at the end of sessions indefinitely.", "", " The dispatch origin must be Root.", "", " # ", " - Weight: O(1)", " - Write: ForceEra", " # " ] }, { "name": "cancel_deferred_slash", "arguments": [ { "name": "era", "ty": "EraIndex" }, { "name": "slash_indices", "ty": "Vec" } ], "documentation": [ " Cancel enactment of a deferred slash.", "", " Can be called by the `T::SlashCancelOrigin`.", "", " Parameters: era and indices of the slashes for that era to kill.", "", " # ", " Complexity: O(U + S)", " with U unapplied slashes weighted with U=1000", " and S is the number of slash indices to be canceled.", " - Read: Unapplied Slashes", " - Write: Unapplied Slashes", " # " ] }, { "name": "payout_stakers", "arguments": [ { "name": "validator_stash", "ty": "T::AccountId" }, { "name": "era", "ty": "EraIndex" } ], "documentation": [ " Pay out all the stakers behind a single validator for a single era.", "", " - `validator_stash` is the stash account of the validator. Their nominators, up to", " `T::MaxNominatorRewardedPerValidator`, will also receive their rewards.", " - `era` may be any era between `[current_era - history_depth; current_era]`.", "", " The origin of this call must be _Signed_. Any account can call this function, even if", " it is not one of the stakers.", "", " This can only be called when [`EraElectionStatus`] is `Closed`.", "", " # ", " - Time complexity: at most O(MaxNominatorRewardedPerValidator).", " - Contains a limited number of reads and writes.", " -----------", " N is the Number of payouts for the validator (including the validator)", " Weight:", " - Reward Destination Staked: O(N)", " - Reward Destination Controller (Creating): O(N)", " DB Weight:", " - Read: EraElectionStatus, CurrentEra, HistoryDepth, ErasValidatorReward,", " ErasStakersClipped, ErasRewardPoints, ErasValidatorPrefs (8 items)", " - Read Each: Bonded, Ledger, Payee, Locks, System Account (5 items)", " - Write Each: System Account, Locks, Ledger (3 items)", "", " NOTE: weights are assuming that payouts are made to alive stash account (Staked).", " Paying even a dead controller is cheaper weight-wise. We don't do any refunds here.", " # " ] }, { "name": "rebond", "arguments": [ { "name": "value", "ty": "Compact>" } ], "documentation": [ " Rebond a portion of the stash scheduled to be unlocked.", "", " The dispatch origin must be signed by the controller, and it can be only called when", " [`EraElectionStatus`] is `Closed`.", "", " # ", " - Time complexity: O(L), where L is unlocking chunks", " - Bounded by `MAX_UNLOCKING_CHUNKS`.", " - Storage changes: Can't increase storage, only decrease it.", " ---------------", " - DB Weight:", " - Reads: EraElectionStatus, Ledger, Locks, [Origin Account]", " - Writes: [Origin Account], Locks, Ledger", " # " ] }, { "name": "set_history_depth", "arguments": [ { "name": "new_history_depth", "ty": "Compact" }, { "name": "_era_items_deleted", "ty": "Compact" } ], "documentation": [ " Set `HistoryDepth` value. This function will delete any history information", " when `HistoryDepth` is reduced.", "", " Parameters:", " - `new_history_depth`: The new history depth you would like to set.", " - `era_items_deleted`: The number of items that will be deleted by this dispatch.", " This should report all the storage items that will be deleted by clearing old", " era history. Needed to report an accurate weight for the dispatch. Trusted by", " `Root` to report an accurate number.", "", " Origin must be root.", "", " # ", " - E: Number of history depths removed, i.e. 10 -> 7 = 3", " - Weight: O(E)", " - DB Weight:", " - Reads: Current Era, History Depth", " - Writes: History Depth", " - Clear Prefix Each: Era Stakers, EraStakersClipped, ErasValidatorPrefs", " - Writes Each: ErasValidatorReward, ErasRewardPoints, ErasTotalStake, ErasStartSessionIndex", " # " ] }, { "name": "reap_stash", "arguments": [ { "name": "stash", "ty": "T::AccountId" }, { "name": "num_slashing_spans", "ty": "u32" } ], "documentation": [ " Remove all data structure concerning a staker/stash once its balance is at the minimum.", " This is essentially equivalent to `withdraw_unbonded` except it can be called by anyone", " and the target `stash` must have no funds left beyond the ED.", "", " This can be called from any origin.", "", " - `stash`: The stash account to reap. Its balance must be zero.", "", " # ", " Complexity: O(S) where S is the number of slashing spans on the account.", " DB Weight:", " - Reads: Stash Account, Bonded, Slashing Spans, Locks", " - Writes: Bonded, Slashing Spans (if S > 0), Ledger, Payee, Validators, Nominators, Stash Account, Locks", " - Writes Each: SpanSlash * S", " # " ] }, { "name": "kick", "arguments": [ { "name": "who", "ty": "Vec<::Source>" } ], "documentation": [ " Remove the given nominations from the calling validator.", "", " Effects will be felt at the beginning of the next era.", "", " The dispatch origin for this call must be _Signed_ by the controller, not the stash.", " And, it can be only called when [`EraElectionStatus`] is `Closed`. The controller", " account should represent a validator.", "", " - `who`: A list of nominator stash accounts who are nominating this validator which", " should no longer be nominating this validator.", "", " Note: Making this call only makes sense if you first set the validator preferences to", " block any further nominations." ] } ], "event": [ { "name": "EraPayout", "arguments": [ "EraIndex", "Balance", "Balance" ], "documentation": [ " The era payout has been set; the first balance is the validator-payout; the second is", " the remainder from the maximum amount of reward.", " \\[era_index, validator_payout, remainder\\]" ] }, { "name": "Reward", "arguments": [ "AccountId", "Balance" ], "documentation": [ " The staker has been rewarded by this amount. \\[stash, amount\\]" ] }, { "name": "Slash", "arguments": [ "AccountId", "Balance" ], "documentation": [ " One validator (and its nominators) has been slashed by the given amount.", " \\[validator, amount\\]" ] }, { "name": "OldSlashingReportDiscarded", "arguments": [ "SessionIndex" ], "documentation": [ " An old slashing report from a prior era was discarded because it could", " not be processed. \\[session_index\\]" ] }, { "name": "StakingElection", "arguments": [], "documentation": [ " A new set of stakers was elected." ] }, { "name": "Bonded", "arguments": [ "AccountId", "Balance" ], "documentation": [ " An account has bonded this amount. \\[stash, amount\\]", "", " NOTE: This event is only emitted when funds are bonded via a dispatchable. Notably,", " it will not be emitted for staking rewards when they are added to stake." ] }, { "name": "Unbonded", "arguments": [ "AccountId", "Balance" ], "documentation": [ " An account has unbonded this amount. \\[stash, amount\\]" ] }, { "name": "Withdrawn", "arguments": [ "AccountId", "Balance" ], "documentation": [ " An account has called `withdraw_unbonded` and removed unbonding chunks worth `Balance`", " from the unlocking queue. \\[stash, amount\\]" ] }, { "name": "Kicked", "arguments": [ "AccountId", "AccountId" ], "documentation": [ " A nominator has been kicked from a validator. \\[nominator, stash\\]" ] } ], "constants": [ { "name": "SessionsPerEra", "ty": "SessionIndex", "value": [ 6, 0, 0, 0 ], "documentation": [ " Number of sessions per era." ] }, { "name": "BondingDuration", "ty": "EraIndex", "value": [ 28, 0, 0, 0 ], "documentation": [ " Number of eras that staked funds must remain bonded for." ] }, { "name": "SlashDeferDuration", "ty": "EraIndex", "value": [ 27, 0, 0, 0 ], "documentation": [ " Number of eras that slashes are deferred by, after computation.", "", " This should be less than the bonding duration.", " Set to 0 if slashes should be applied immediately, without opportunity for", " intervention." ] }, { "name": "MaxNominatorRewardedPerValidator", "ty": "u32", "value": [ 0, 1, 0, 0 ], "documentation": [ " The maximum number of nominators rewarded for each validator.", "", " For each validator only the `$MaxNominatorRewardedPerValidator` biggest stakers can claim", " their reward. This used to limit the i/o cost for the nominator payout." ] }, { "name": "MaxNominations", "ty": "u32", "value": [ 16, 0, 0, 0 ], "documentation": [ " Maximum number of nominations per nominator." ] } ], "errors": [ { "name": "NotController", "documentation": [ " Not a controller account." ] }, { "name": "NotStash", "documentation": [ " Not a stash account." ] }, { "name": "AlreadyBonded", "documentation": [ " Stash is already bonded." ] }, { "name": "AlreadyPaired", "documentation": [ " Controller is already paired." ] }, { "name": "EmptyTargets", "documentation": [ " Targets cannot be empty." ] }, { "name": "DuplicateIndex", "documentation": [ " Duplicate index." ] }, { "name": "InvalidSlashIndex", "documentation": [ " Slash record index out of bounds." ] }, { "name": "InsufficientValue", "documentation": [ " Can not bond with value less than minimum balance." ] }, { "name": "NoMoreChunks", "documentation": [ " Can not schedule more unlock chunks." ] }, { "name": "NoUnlockChunk", "documentation": [ " Can not rebond without unlocking chunks." ] }, { "name": "FundedTarget", "documentation": [ " Attempting to target a stash that still has funds." ] }, { "name": "InvalidEraToReward", "documentation": [ " Invalid era to reward." ] }, { "name": "InvalidNumberOfNominations", "documentation": [ " Invalid number of nominations." ] }, { "name": "NotSortedAndUnique", "documentation": [ " Items are not sorted and unique." ] }, { "name": "AlreadyClaimed", "documentation": [ " Rewards for this era have already been claimed for this validator." ] }, { "name": "IncorrectHistoryDepth", "documentation": [ " Incorrect previous history depth input provided." ] }, { "name": "IncorrectSlashingSpans", "documentation": [ " Incorrect number of slashing spans provided." ] }, { "name": "BadState", "documentation": [ " Internal state has become somehow corrupted and the operation cannot continue." ] }, { "name": "TooManyTargets", "documentation": [ " Too many nomination targets supplied." ] }, { "name": "BadTarget", "documentation": [ " A nomination target was supplied that was blocked or otherwise not a validator." ] } ], "index": 7 }, { "name": "Offences", "storage": { "prefix": "Offences", "entries": [ { "name": "Reports", "modifier": "Optional", "ty": { "Map": { "hasher": "Twox64Concat", "key": "ReportIdOf", "value": "OffenceDetails", "unused": false } }, "default": [ 0 ], "documentation": [ " The primary structure that holds all offence records keyed by report identifiers." ] }, { "name": "DeferredOffences", "modifier": "Default", "ty": { "Plain": "Vec>" }, "default": [ 0 ], "documentation": [ " Deferred reports that have been rejected by the offence handler and need to be submitted", " at a later time." ] }, { "name": "ConcurrentReportsIndex", "modifier": "Default", "ty": { "DoubleMap": { "hasher": "Twox64Concat", "key1": "Kind", "key2": "OpaqueTimeSlot", "value": "Vec>", "key2_hasher": "Twox64Concat" } }, "default": [ 0 ], "documentation": [ " A vector of reports of the same kind that happened at the same time slot." ] }, { "name": "ReportsByKindIndex", "modifier": "Default", "ty": { "Map": { "hasher": "Twox64Concat", "key": "Kind", "value": "Vec", "unused": false } }, "default": [ 0 ], "documentation": [ " Enumerates all reports of a kind along with the time they happened.", "", " All reports are sorted by the time of offence.", "", " Note that the actual type of this mapping is `Vec`, this is because values of", " different types are not supported at the moment so we are doing the manual serialization." ] } ] }, "calls": [], "event": [ { "name": "Offence", "arguments": [ "Kind", "OpaqueTimeSlot", "bool" ], "documentation": [ " There is an offence reported of the given `kind` happened at the `session_index` and", " (kind-specific) time slot. This event is not deposited for duplicate slashes. last", " element indicates of the offence was applied (true) or queued (false)", " \\[kind, timeslot, applied\\]." ] } ], "constants": [], "errors": [], "index": 8 }, { "name": "Historical", "storage": null, "calls": null, "event": null, "constants": [], "errors": [], "index": 33 }, { "name": "Session", "storage": { "prefix": "Session", "entries": [ { "name": "Validators", "modifier": "Default", "ty": { "Plain": "Vec" }, "default": [ 0 ], "documentation": [ " The current set of validators." ] }, { "name": "CurrentIndex", "modifier": "Default", "ty": { "Plain": "SessionIndex" }, "default": [ 0, 0, 0, 0 ], "documentation": [ " Current index of the session." ] }, { "name": "QueuedChanged", "modifier": "Default", "ty": { "Plain": "bool" }, "default": [ 0 ], "documentation": [ " True if the underlying economic identities or weighting behind the validators", " has changed in the queued validator set." ] }, { "name": "QueuedKeys", "modifier": "Default", "ty": { "Plain": "Vec<(T::ValidatorId, T::Keys)>" }, "default": [ 0 ], "documentation": [ " The queued keys for the next session. When the next session begins, these keys", " will be used to determine the validator's session keys." ] }, { "name": "DisabledValidators", "modifier": "Default", "ty": { "Plain": "Vec" }, "default": [ 0 ], "documentation": [ " Indices of disabled validators.", "", " The set is cleared when `on_session_ending` returns a new set of identities." ] }, { "name": "NextKeys", "modifier": "Optional", "ty": { "Map": { "hasher": "Twox64Concat", "key": "T::ValidatorId", "value": "T::Keys", "unused": false } }, "default": [ 0 ], "documentation": [ " The next session keys for a validator." ] }, { "name": "KeyOwner", "modifier": "Optional", "ty": { "Map": { "hasher": "Twox64Concat", "key": "(KeyTypeId, Vec)", "value": "T::ValidatorId", "unused": false } }, "default": [ 0 ], "documentation": [ " The owner of a key. The key is the `KeyTypeId` + the encoded key." ] } ] }, "calls": [ { "name": "set_keys", "arguments": [ { "name": "keys", "ty": "T::Keys" }, { "name": "proof", "ty": "Vec" } ], "documentation": [ " Sets the session key(s) of the function caller to `keys`.", " Allows an account to set its session key prior to becoming a validator.", " This doesn't take effect until the next session.", "", " The dispatch origin of this function must be signed.", "", " # ", " - Complexity: `O(1)`", " Actual cost depends on the number of length of `T::Keys::key_ids()` which is fixed.", " - DbReads: `origin account`, `T::ValidatorIdOf`, `NextKeys`", " - DbWrites: `origin account`, `NextKeys`", " - DbReads per key id: `KeyOwner`", " - DbWrites per key id: `KeyOwner`", " # " ] }, { "name": "purge_keys", "arguments": [], "documentation": [ " Removes any session key(s) of the function caller.", " This doesn't take effect until the next session.", "", " The dispatch origin of this function must be signed.", "", " # ", " - Complexity: `O(1)` in number of key types.", " Actual cost depends on the number of length of `T::Keys::key_ids()` which is fixed.", " - DbReads: `T::ValidatorIdOf`, `NextKeys`, `origin account`", " - DbWrites: `NextKeys`, `origin account`", " - DbWrites per key id: `KeyOwnder`", " # " ] } ], "event": [ { "name": "NewSession", "arguments": [ "SessionIndex" ], "documentation": [ " New session has happened. Note that the argument is the \\[session_index\\], not the block", " number as the type might suggest." ] } ], "constants": [], "errors": [ { "name": "InvalidProof", "documentation": [ " Invalid ownership proof." ] }, { "name": "NoAssociatedValidatorId", "documentation": [ " No associated validator ID for account." ] }, { "name": "DuplicatedKey", "documentation": [ " Registered duplicate key." ] }, { "name": "NoKeys", "documentation": [ " No keys are associated with this account." ] }, { "name": "NoAccount", "documentation": [ " Key setting account is not live, so it's impossible to associate keys." ] } ], "index": 9 }, { "name": "Grandpa", "storage": { "prefix": "GrandpaFinality", "entries": [ { "name": "State", "modifier": "Default", "ty": { "Plain": "StoredState" }, "default": [ 0 ], "documentation": [ " State of the current authority set." ] }, { "name": "PendingChange", "modifier": "Optional", "ty": { "Plain": "StoredPendingChange" }, "default": [ 0 ], "documentation": [ " Pending change: (signaled at, scheduled change)." ] }, { "name": "NextForced", "modifier": "Optional", "ty": { "Plain": "T::BlockNumber" }, "default": [ 0 ], "documentation": [ " next block number where we can force a change." ] }, { "name": "Stalled", "modifier": "Optional", "ty": { "Plain": "(T::BlockNumber, T::BlockNumber)" }, "default": [ 0 ], "documentation": [ " `true` if we are currently stalled." ] }, { "name": "CurrentSetId", "modifier": "Default", "ty": { "Plain": "SetId" }, "default": [ 0, 0, 0, 0, 0, 0, 0, 0 ], "documentation": [ " The number of changes (both in terms of keys and underlying economic responsibilities)", " in the \"set\" of Grandpa validators from genesis." ] }, { "name": "SetIdSession", "modifier": "Optional", "ty": { "Map": { "hasher": "Twox64Concat", "key": "SetId", "value": "SessionIndex", "unused": false } }, "default": [ 0 ], "documentation": [ " A mapping from grandpa set ID to the index of the *most recent* session for which its", " members were responsible.", "", " TWOX-NOTE: `SetId` is not under user control." ] } ] }, "calls": [ { "name": "report_equivocation", "arguments": [ { "name": "equivocation_proof", "ty": "EquivocationProof" }, { "name": "key_owner_proof", "ty": "T::KeyOwnerProof" } ], "documentation": [ " Report voter equivocation/misbehavior. This method will verify the", " equivocation proof and validate the given key ownership proof", " against the extracted offender. If both are valid, the offence", " will be reported." ] }, { "name": "report_equivocation_unsigned", "arguments": [ { "name": "equivocation_proof", "ty": "EquivocationProof" }, { "name": "key_owner_proof", "ty": "T::KeyOwnerProof" } ], "documentation": [ " Report voter equivocation/misbehavior. This method will verify the", " equivocation proof and validate the given key ownership proof", " against the extracted offender. If both are valid, the offence", " will be reported.", "", " This extrinsic must be called unsigned and it is expected that only", " block authors will call it (validated in `ValidateUnsigned`), as such", " if the block author is defined it will be defined as the equivocation", " reporter." ] }, { "name": "note_stalled", "arguments": [ { "name": "delay", "ty": "T::BlockNumber" }, { "name": "best_finalized_block_number", "ty": "T::BlockNumber" } ], "documentation": [ " Note that the current authority set of the GRANDPA finality gadget has", " stalled. This will trigger a forced authority set change at the beginning", " of the next session, to be enacted `delay` blocks after that. The delay", " should be high enough to safely assume that the block signalling the", " forced change will not be re-orged (e.g. 1000 blocks). The GRANDPA voters", " will start the new authority set using the given finalized block as base.", " Only callable by root." ] } ], "event": [ { "name": "NewAuthorities", "arguments": [ "AuthorityList" ], "documentation": [ " New authority set has been applied. \\[authority_set\\]" ] }, { "name": "Paused", "arguments": [], "documentation": [ " Current authority set has been paused." ] }, { "name": "Resumed", "arguments": [], "documentation": [ " Current authority set has been resumed." ] } ], "constants": [], "errors": [ { "name": "PauseFailed", "documentation": [ " Attempt to signal GRANDPA pause when the authority set isn't live", " (either paused or already pending pause)." ] }, { "name": "ResumeFailed", "documentation": [ " Attempt to signal GRANDPA resume when the authority set isn't paused", " (either live or already pending resume)." ] }, { "name": "ChangePending", "documentation": [ " Attempt to signal GRANDPA change with one already pending." ] }, { "name": "TooSoon", "documentation": [ " Cannot signal forced change so soon after last." ] }, { "name": "InvalidKeyOwnershipProof", "documentation": [ " A key ownership proof provided as part of an equivocation report is invalid." ] }, { "name": "InvalidEquivocationProof", "documentation": [ " An equivocation proof provided as part of an equivocation report is invalid." ] }, { "name": "DuplicateOffenceReport", "documentation": [ " A given equivocation report is valid but already previously reported." ] } ], "index": 11 }, { "name": "ImOnline", "storage": { "prefix": "ImOnline", "entries": [ { "name": "HeartbeatAfter", "modifier": "Default", "ty": { "Plain": "T::BlockNumber" }, "default": [ 0, 0, 0, 0 ], "documentation": [ " The block number after which it's ok to send heartbeats in the current", " session.", "", " At the beginning of each session we set this to a value that should fall", " roughly in the middle of the session duration. The idea is to first wait for", " the validators to produce a block in the current session, so that the", " heartbeat later on will not be necessary.", "", " This value will only be used as a fallback if we fail to get a proper session", " progress estimate from `NextSessionRotation`, as those estimates should be", " more accurate then the value we calculate for `HeartbeatAfter`." ] }, { "name": "Keys", "modifier": "Default", "ty": { "Plain": "Vec" }, "default": [ 0 ], "documentation": [ " The current set of keys that may issue a heartbeat." ] }, { "name": "ReceivedHeartbeats", "modifier": "Optional", "ty": { "DoubleMap": { "hasher": "Twox64Concat", "key1": "SessionIndex", "key2": "AuthIndex", "value": "Vec", "key2_hasher": "Twox64Concat" } }, "default": [ 0 ], "documentation": [ " For each session index, we keep a mapping of `AuthIndex` to", " `offchain::OpaqueNetworkState`." ] }, { "name": "AuthoredBlocks", "modifier": "Default", "ty": { "DoubleMap": { "hasher": "Twox64Concat", "key1": "SessionIndex", "key2": "ValidatorId", "value": "u32", "key2_hasher": "Twox64Concat" } }, "default": [ 0, 0, 0, 0 ], "documentation": [ " For each session index, we keep a mapping of `ValidatorId` to the", " number of blocks authored by the given authority." ] } ] }, "calls": [ { "name": "heartbeat", "arguments": [ { "name": "heartbeat", "ty": "Heartbeat" }, { "name": "_signature", "ty": "::Signature" } ], "documentation": [ " # ", " - Complexity: `O(K + E)` where K is length of `Keys` (heartbeat.validators_len)", " and E is length of `heartbeat.network_state.external_address`", " - `O(K)`: decoding of length `K`", " - `O(E)`: decoding/encoding of length `E`", " - DbReads: pallet_session `Validators`, pallet_session `CurrentIndex`, `Keys`,", " `ReceivedHeartbeats`", " - DbWrites: `ReceivedHeartbeats`", " # " ] } ], "event": [ { "name": "HeartbeatReceived", "arguments": [ "AuthorityId" ], "documentation": [ " A new heartbeat was received from `AuthorityId` \\[authority_id\\]" ] }, { "name": "AllGood", "arguments": [], "documentation": [ " At the end of the session, no offence was committed." ] }, { "name": "SomeOffline", "arguments": [ "Vec" ], "documentation": [ " At the end of the session, at least one validator was found to be \\[offline\\]." ] } ], "constants": [], "errors": [ { "name": "InvalidKey", "documentation": [ " Non existent public key." ] }, { "name": "DuplicatedHeartbeat", "documentation": [ " Duplicated heartbeat." ] } ], "index": 12 }, { "name": "AuthorityDiscovery", "storage": null, "calls": [], "event": null, "constants": [], "errors": [], "index": 13 }, { "name": "Democracy", "storage": { "prefix": "Democracy", "entries": [ { "name": "PublicPropCount", "modifier": "Default", "ty": { "Plain": "PropIndex" }, "default": [ 0, 0, 0, 0 ], "documentation": [ " The number of (public) proposals that have been made so far." ] }, { "name": "PublicProps", "modifier": "Default", "ty": { "Plain": "Vec<(PropIndex, T::Hash, T::AccountId)>" }, "default": [ 0 ], "documentation": [ " The public proposals. Unsorted. The second item is the proposal's hash." ] }, { "name": "DepositOf", "modifier": "Optional", "ty": { "Map": { "hasher": "Twox64Concat", "key": "PropIndex", "value": "(Vec, BalanceOf)", "unused": false } }, "default": [ 0 ], "documentation": [ " Those who have locked a deposit.", "", " TWOX-NOTE: Safe, as increasing integer keys are safe." ] }, { "name": "Preimages", "modifier": "Optional", "ty": { "Map": { "hasher": "Identity", "key": "T::Hash", "value": "PreimageStatus, T::BlockNumber>", "unused": false } }, "default": [ 0 ], "documentation": [ " Map of hashes to the proposal preimage, along with who registered it and their deposit.", " The block number is the block at which it was deposited." ] }, { "name": "ReferendumCount", "modifier": "Default", "ty": { "Plain": "ReferendumIndex" }, "default": [ 0, 0, 0, 0 ], "documentation": [ " The next free referendum index, aka the number of referenda started so far." ] }, { "name": "LowestUnbaked", "modifier": "Default", "ty": { "Plain": "ReferendumIndex" }, "default": [ 0, 0, 0, 0 ], "documentation": [ " The lowest referendum index representing an unbaked referendum. Equal to", " `ReferendumCount` if there isn't a unbaked referendum." ] }, { "name": "ReferendumInfoOf", "modifier": "Optional", "ty": { "Map": { "hasher": "Twox64Concat", "key": "ReferendumIndex", "value": "ReferendumInfo>", "unused": false } }, "default": [ 0 ], "documentation": [ " Information concerning any given referendum.", "", " TWOX-NOTE: SAFE as indexes are not under an attacker’s control." ] }, { "name": "VotingOf", "modifier": "Default", "ty": { "Map": { "hasher": "Twox64Concat", "key": "T::AccountId", "value": "Voting, T::AccountId, T::BlockNumber>", "unused": false } }, "default": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "documentation": [ " All votes for a particular voter. We store the balance for the number of votes that we", " have recorded. The second item is the total amount of delegations, that will be added.", "", " TWOX-NOTE: SAFE as `AccountId`s are crypto hashes anyway." ] }, { "name": "Locks", "modifier": "Optional", "ty": { "Map": { "hasher": "Twox64Concat", "key": "T::AccountId", "value": "T::BlockNumber", "unused": false } }, "default": [ 0 ], "documentation": [ " Accounts for which there are locks in action which may be removed at some point in the", " future. The value is the block number at which the lock expires and may be removed.", "", " TWOX-NOTE: OK ― `AccountId` is a secure hash." ] }, { "name": "LastTabledWasExternal", "modifier": "Default", "ty": { "Plain": "bool" }, "default": [ 0 ], "documentation": [ " True if the last referendum tabled was submitted externally. False if it was a public", " proposal." ] }, { "name": "NextExternal", "modifier": "Optional", "ty": { "Plain": "(T::Hash, VoteThreshold)" }, "default": [ 0 ], "documentation": [ " The referendum to be tabled whenever it would be valid to table an external proposal.", " This happens when a referendum needs to be tabled and one of two conditions are met:", " - `LastTabledWasExternal` is `false`; or", " - `PublicProps` is empty." ] }, { "name": "Blacklist", "modifier": "Optional", "ty": { "Map": { "hasher": "Identity", "key": "T::Hash", "value": "(T::BlockNumber, Vec)", "unused": false } }, "default": [ 0 ], "documentation": [ " A record of who vetoed what. Maps proposal hash to a possible existent block number", " (until when it may not be resubmitted) and who vetoed it." ] }, { "name": "Cancellations", "modifier": "Default", "ty": { "Map": { "hasher": "Identity", "key": "T::Hash", "value": "bool", "unused": false } }, "default": [ 0 ], "documentation": [ " Record of all proposals that have been subject to emergency cancellation." ] }, { "name": "StorageVersion", "modifier": "Optional", "ty": { "Plain": "Releases" }, "default": [ 0 ], "documentation": [ " Storage version of the pallet.", "", " New networks start with last version." ] } ] }, "calls": [ { "name": "propose", "arguments": [ { "name": "proposal_hash", "ty": "T::Hash" }, { "name": "value", "ty": "Compact>" } ], "documentation": [ " Propose a sensitive action to be taken.", "", " The dispatch origin of this call must be _Signed_ and the sender must", " have funds to cover the deposit.", "", " - `proposal_hash`: The hash of the proposal preimage.", " - `value`: The amount of deposit (must be at least `MinimumDeposit`).", "", " Emits `Proposed`.", "", " Weight: `O(p)`" ] }, { "name": "second", "arguments": [ { "name": "proposal", "ty": "Compact" }, { "name": "seconds_upper_bound", "ty": "Compact" } ], "documentation": [ " Signals agreement with a particular proposal.", "", " The dispatch origin of this call must be _Signed_ and the sender", " must have funds to cover the deposit, equal to the original deposit.", "", " - `proposal`: The index of the proposal to second.", " - `seconds_upper_bound`: an upper bound on the current number of seconds on this", " proposal. Extrinsic is weighted according to this value with no refund.", "", " Weight: `O(S)` where S is the number of seconds a proposal already has." ] }, { "name": "vote", "arguments": [ { "name": "ref_index", "ty": "Compact" }, { "name": "vote", "ty": "AccountVote>" } ], "documentation": [ " Vote in a referendum. If `vote.is_aye()`, the vote is to enact the proposal;", " otherwise it is a vote to keep the status quo.", "", " The dispatch origin of this call must be _Signed_.", "", " - `ref_index`: The index of the referendum to vote for.", " - `vote`: The vote configuration.", "", " Weight: `O(R)` where R is the number of referendums the voter has voted on." ] }, { "name": "emergency_cancel", "arguments": [ { "name": "ref_index", "ty": "ReferendumIndex" } ], "documentation": [ " Schedule an emergency cancellation of a referendum. Cannot happen twice to the same", " referendum.", "", " The dispatch origin of this call must be `CancellationOrigin`.", "", " -`ref_index`: The index of the referendum to cancel.", "", " Weight: `O(1)`." ] }, { "name": "external_propose", "arguments": [ { "name": "proposal_hash", "ty": "T::Hash" } ], "documentation": [ " Schedule a referendum to be tabled once it is legal to schedule an external", " referendum.", "", " The dispatch origin of this call must be `ExternalOrigin`.", "", " - `proposal_hash`: The preimage hash of the proposal.", "", " Weight: `O(V)` with V number of vetoers in the blacklist of proposal.", " Decoding vec of length V. Charged as maximum" ] }, { "name": "external_propose_majority", "arguments": [ { "name": "proposal_hash", "ty": "T::Hash" } ], "documentation": [ " Schedule a majority-carries referendum to be tabled next once it is legal to schedule", " an external referendum.", "", " The dispatch of this call must be `ExternalMajorityOrigin`.", "", " - `proposal_hash`: The preimage hash of the proposal.", "", " Unlike `external_propose`, blacklisting has no effect on this and it may replace a", " pre-scheduled `external_propose` call.", "", " Weight: `O(1)`" ] }, { "name": "external_propose_default", "arguments": [ { "name": "proposal_hash", "ty": "T::Hash" } ], "documentation": [ " Schedule a negative-turnout-bias referendum to be tabled next once it is legal to", " schedule an external referendum.", "", " The dispatch of this call must be `ExternalDefaultOrigin`.", "", " - `proposal_hash`: The preimage hash of the proposal.", "", " Unlike `external_propose`, blacklisting has no effect on this and it may replace a", " pre-scheduled `external_propose` call.", "", " Weight: `O(1)`" ] }, { "name": "fast_track", "arguments": [ { "name": "proposal_hash", "ty": "T::Hash" }, { "name": "voting_period", "ty": "T::BlockNumber" }, { "name": "delay", "ty": "T::BlockNumber" } ], "documentation": [ " Schedule the currently externally-proposed majority-carries referendum to be tabled", " immediately. If there is no externally-proposed referendum currently, or if there is one", " but it is not a majority-carries referendum then it fails.", "", " The dispatch of this call must be `FastTrackOrigin`.", "", " - `proposal_hash`: The hash of the current external proposal.", " - `voting_period`: The period that is allowed for voting on this proposal. Increased to", " `FastTrackVotingPeriod` if too low.", " - `delay`: The number of block after voting has ended in approval and this should be", " enacted. This doesn't have a minimum amount.", "", " Emits `Started`.", "", " Weight: `O(1)`" ] }, { "name": "veto_external", "arguments": [ { "name": "proposal_hash", "ty": "T::Hash" } ], "documentation": [ " Veto and blacklist the external proposal hash.", "", " The dispatch origin of this call must be `VetoOrigin`.", "", " - `proposal_hash`: The preimage hash of the proposal to veto and blacklist.", "", " Emits `Vetoed`.", "", " Weight: `O(V + log(V))` where V is number of `existing vetoers`" ] }, { "name": "cancel_referendum", "arguments": [ { "name": "ref_index", "ty": "Compact" } ], "documentation": [ " Remove a referendum.", "", " The dispatch origin of this call must be _Root_.", "", " - `ref_index`: The index of the referendum to cancel.", "", " # Weight: `O(1)`." ] }, { "name": "cancel_queued", "arguments": [ { "name": "which", "ty": "ReferendumIndex" } ], "documentation": [ " Cancel a proposal queued for enactment.", "", " The dispatch origin of this call must be _Root_.", "", " - `which`: The index of the referendum to cancel.", "", " Weight: `O(D)` where `D` is the items in the dispatch queue. Weighted as `D = 10`." ] }, { "name": "delegate", "arguments": [ { "name": "to", "ty": "T::AccountId" }, { "name": "conviction", "ty": "Conviction" }, { "name": "balance", "ty": "BalanceOf" } ], "documentation": [ " Delegate the voting power (with some given conviction) of the sending account.", "", " The balance delegated is locked for as long as it's delegated, and thereafter for the", " time appropriate for the conviction's lock period.", "", " The dispatch origin of this call must be _Signed_, and the signing account must either:", " - be delegating already; or", " - have no voting activity (if there is, then it will need to be removed/consolidated", " through `reap_vote` or `unvote`).", "", " - `to`: The account whose voting the `target` account's voting power will follow.", " - `conviction`: The conviction that will be attached to the delegated votes. When the", " account is undelegated, the funds will be locked for the corresponding period.", " - `balance`: The amount of the account's balance to be used in delegating. This must", " not be more than the account's current balance.", "", " Emits `Delegated`.", "", " Weight: `O(R)` where R is the number of referendums the voter delegating to has", " voted on. Weight is charged as if maximum votes." ] }, { "name": "undelegate", "arguments": [], "documentation": [ " Undelegate the voting power of the sending account.", "", " Tokens may be unlocked following once an amount of time consistent with the lock period", " of the conviction with which the delegation was issued.", "", " The dispatch origin of this call must be _Signed_ and the signing account must be", " currently delegating.", "", " Emits `Undelegated`.", "", " Weight: `O(R)` where R is the number of referendums the voter delegating to has", " voted on. Weight is charged as if maximum votes." ] }, { "name": "clear_public_proposals", "arguments": [], "documentation": [ " Clears all public proposals.", "", " The dispatch origin of this call must be _Root_.", "", " Weight: `O(1)`." ] }, { "name": "note_preimage", "arguments": [ { "name": "encoded_proposal", "ty": "Vec" } ], "documentation": [ " Register the preimage for an upcoming proposal. This doesn't require the proposal to be", " in the dispatch queue but does require a deposit, returned once enacted.", "", " The dispatch origin of this call must be _Signed_.", "", " - `encoded_proposal`: The preimage of a proposal.", "", " Emits `PreimageNoted`.", "", " Weight: `O(E)` with E size of `encoded_proposal` (protected by a required deposit)." ] }, { "name": "note_preimage_operational", "arguments": [ { "name": "encoded_proposal", "ty": "Vec" } ], "documentation": [ " Same as `note_preimage` but origin is `OperationalPreimageOrigin`." ] }, { "name": "note_imminent_preimage", "arguments": [ { "name": "encoded_proposal", "ty": "Vec" } ], "documentation": [ " Register the preimage for an upcoming proposal. This requires the proposal to be", " in the dispatch queue. No deposit is needed. When this call is successful, i.e.", " the preimage has not been uploaded before and matches some imminent proposal,", " no fee is paid.", "", " The dispatch origin of this call must be _Signed_.", "", " - `encoded_proposal`: The preimage of a proposal.", "", " Emits `PreimageNoted`.", "", " Weight: `O(E)` with E size of `encoded_proposal` (protected by a required deposit)." ] }, { "name": "note_imminent_preimage_operational", "arguments": [ { "name": "encoded_proposal", "ty": "Vec" } ], "documentation": [ " Same as `note_imminent_preimage` but origin is `OperationalPreimageOrigin`." ] }, { "name": "reap_preimage", "arguments": [ { "name": "proposal_hash", "ty": "T::Hash" }, { "name": "proposal_len_upper_bound", "ty": "Compact" } ], "documentation": [ " Remove an expired proposal preimage and collect the deposit.", "", " The dispatch origin of this call must be _Signed_.", "", " - `proposal_hash`: The preimage hash of a proposal.", " - `proposal_length_upper_bound`: an upper bound on length of the proposal.", " Extrinsic is weighted according to this value with no refund.", "", " This will only work after `VotingPeriod` blocks from the time that the preimage was", " noted, if it's the same account doing it. If it's a different account, then it'll only", " work an additional `EnactmentPeriod` later.", "", " Emits `PreimageReaped`.", "", " Weight: `O(D)` where D is length of proposal." ] }, { "name": "unlock", "arguments": [ { "name": "target", "ty": "T::AccountId" } ], "documentation": [ " Unlock tokens that have an expired lock.", "", " The dispatch origin of this call must be _Signed_.", "", " - `target`: The account to remove the lock on.", "", " Weight: `O(R)` with R number of vote of target." ] }, { "name": "remove_vote", "arguments": [ { "name": "index", "ty": "ReferendumIndex" } ], "documentation": [ " Remove a vote for a referendum.", "", " If:", " - the referendum was cancelled, or", " - the referendum is ongoing, or", " - the referendum has ended such that", " - the vote of the account was in opposition to the result; or", " - there was no conviction to the account's vote; or", " - the account made a split vote", " ...then the vote is removed cleanly and a following call to `unlock` may result in more", " funds being available.", "", " If, however, the referendum has ended and:", " - it finished corresponding to the vote of the account, and", " - the account made a standard vote with conviction, and", " - the lock period of the conviction is not over", " ...then the lock will be aggregated into the overall account's lock, which may involve", " *overlocking* (where the two locks are combined into a single lock that is the maximum", " of both the amount locked and the time is it locked for).", "", " The dispatch origin of this call must be _Signed_, and the signer must have a vote", " registered for referendum `index`.", "", " - `index`: The index of referendum of the vote to be removed.", "", " Weight: `O(R + log R)` where R is the number of referenda that `target` has voted on.", " Weight is calculated for the maximum number of vote." ] }, { "name": "remove_other_vote", "arguments": [ { "name": "target", "ty": "T::AccountId" }, { "name": "index", "ty": "ReferendumIndex" } ], "documentation": [ " Remove a vote for a referendum.", "", " If the `target` is equal to the signer, then this function is exactly equivalent to", " `remove_vote`. If not equal to the signer, then the vote must have expired,", " either because the referendum was cancelled, because the voter lost the referendum or", " because the conviction period is over.", "", " The dispatch origin of this call must be _Signed_.", "", " - `target`: The account of the vote to be removed; this account must have voted for", " referendum `index`.", " - `index`: The index of referendum of the vote to be removed.", "", " Weight: `O(R + log R)` where R is the number of referenda that `target` has voted on.", " Weight is calculated for the maximum number of vote." ] }, { "name": "enact_proposal", "arguments": [ { "name": "proposal_hash", "ty": "T::Hash" }, { "name": "index", "ty": "ReferendumIndex" } ], "documentation": [ " Enact a proposal from a referendum. For now we just make the weight be the maximum." ] }, { "name": "blacklist", "arguments": [ { "name": "proposal_hash", "ty": "T::Hash" }, { "name": "maybe_ref_index", "ty": "Option" } ], "documentation": [ " Permanently place a proposal into the blacklist. This prevents it from ever being", " proposed again.", "", " If called on a queued public or external proposal, then this will result in it being", " removed. If the `ref_index` supplied is an active referendum with the proposal hash,", " then it will be cancelled.", "", " The dispatch origin of this call must be `BlacklistOrigin`.", "", " - `proposal_hash`: The proposal hash to blacklist permanently.", " - `ref_index`: An ongoing referendum whose hash is `proposal_hash`, which will be", " cancelled.", "", " Weight: `O(p)` (though as this is an high-privilege dispatch, we assume it has a", " reasonable value)." ] }, { "name": "cancel_proposal", "arguments": [ { "name": "prop_index", "ty": "Compact" } ], "documentation": [ " Remove a proposal.", "", " The dispatch origin of this call must be `CancelProposalOrigin`.", "", " - `prop_index`: The index of the proposal to cancel.", "", " Weight: `O(p)` where `p = PublicProps::::decode_len()`" ] } ], "event": [ { "name": "Proposed", "arguments": [ "PropIndex", "Balance" ], "documentation": [ " A motion has been proposed by a public account. \\[proposal_index, deposit\\]" ] }, { "name": "Tabled", "arguments": [ "PropIndex", "Balance", "Vec" ], "documentation": [ " A public proposal has been tabled for referendum vote. \\[proposal_index, deposit, depositors\\]" ] }, { "name": "ExternalTabled", "arguments": [], "documentation": [ " An external proposal has been tabled." ] }, { "name": "Started", "arguments": [ "ReferendumIndex", "VoteThreshold" ], "documentation": [ " A referendum has begun. \\[ref_index, threshold\\]" ] }, { "name": "Passed", "arguments": [ "ReferendumIndex" ], "documentation": [ " A proposal has been approved by referendum. \\[ref_index\\]" ] }, { "name": "NotPassed", "arguments": [ "ReferendumIndex" ], "documentation": [ " A proposal has been rejected by referendum. \\[ref_index\\]" ] }, { "name": "Cancelled", "arguments": [ "ReferendumIndex" ], "documentation": [ " A referendum has been cancelled. \\[ref_index\\]" ] }, { "name": "Executed", "arguments": [ "ReferendumIndex", "bool" ], "documentation": [ " A proposal has been enacted. \\[ref_index, is_ok\\]" ] }, { "name": "Delegated", "arguments": [ "AccountId", "AccountId" ], "documentation": [ " An account has delegated their vote to another account. \\[who, target\\]" ] }, { "name": "Undelegated", "arguments": [ "AccountId" ], "documentation": [ " An \\[account\\] has cancelled a previous delegation operation." ] }, { "name": "Vetoed", "arguments": [ "AccountId", "Hash", "BlockNumber" ], "documentation": [ " An external proposal has been vetoed. \\[who, proposal_hash, until\\]" ] }, { "name": "PreimageNoted", "arguments": [ "Hash", "AccountId", "Balance" ], "documentation": [ " A proposal's preimage was noted, and the deposit taken. \\[proposal_hash, who, deposit\\]" ] }, { "name": "PreimageUsed", "arguments": [ "Hash", "AccountId", "Balance" ], "documentation": [ " A proposal preimage was removed and used (the deposit was returned).", " \\[proposal_hash, provider, deposit\\]" ] }, { "name": "PreimageInvalid", "arguments": [ "Hash", "ReferendumIndex" ], "documentation": [ " A proposal could not be executed because its preimage was invalid.", " \\[proposal_hash, ref_index\\]" ] }, { "name": "PreimageMissing", "arguments": [ "Hash", "ReferendumIndex" ], "documentation": [ " A proposal could not be executed because its preimage was missing.", " \\[proposal_hash, ref_index\\]" ] }, { "name": "PreimageReaped", "arguments": [ "Hash", "AccountId", "Balance", "AccountId" ], "documentation": [ " A registered preimage was removed and the deposit collected by the reaper.", " \\[proposal_hash, provider, deposit, reaper\\]" ] }, { "name": "Unlocked", "arguments": [ "AccountId" ], "documentation": [ " An \\[account\\] has been unlocked successfully." ] }, { "name": "Blacklisted", "arguments": [ "Hash" ], "documentation": [ " A proposal \\[hash\\] has been blacklisted permanently." ] } ], "constants": [ { "name": "EnactmentPeriod", "ty": "T::BlockNumber", "value": [ 0, 39, 6, 0 ], "documentation": [ " The minimum period of locking and the period between a proposal being approved and enacted.", "", " It should generally be a little more than the unstake period to ensure that", " voting stakers have an opportunity to remove themselves from the system in the case where", " they are on the losing side of a vote." ] }, { "name": "LaunchPeriod", "ty": "T::BlockNumber", "value": [ 0, 39, 6, 0 ], "documentation": [ " How often (in blocks) new public referenda are launched." ] }, { "name": "VotingPeriod", "ty": "T::BlockNumber", "value": [ 0, 39, 6, 0 ], "documentation": [ " How often (in blocks) to check for new votes." ] }, { "name": "MinimumDeposit", "ty": "BalanceOf", "value": [ 0, 16, 165, 212, 232, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "documentation": [ " The minimum amount to be used as a deposit for a public referendum proposal." ] }, { "name": "FastTrackVotingPeriod", "ty": "T::BlockNumber", "value": [ 8, 7, 0, 0 ], "documentation": [ " Minimum voting period allowed for an emergency referendum." ] }, { "name": "CooloffPeriod", "ty": "T::BlockNumber", "value": [ 192, 137, 1, 0 ], "documentation": [ " Period in blocks where an external proposal may not be re-submitted after being vetoed." ] }, { "name": "PreimageByteDeposit", "ty": "BalanceOf", "value": [ 0, 225, 245, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "documentation": [ " The amount of balance that must be deposited per byte of preimage stored." ] }, { "name": "MaxVotes", "ty": "u32", "value": [ 100, 0, 0, 0 ], "documentation": [ " The maximum number of votes for an account." ] } ], "errors": [ { "name": "ValueLow", "documentation": [ " Value too low" ] }, { "name": "ProposalMissing", "documentation": [ " Proposal does not exist" ] }, { "name": "BadIndex", "documentation": [ " Unknown index" ] }, { "name": "AlreadyCanceled", "documentation": [ " Cannot cancel the same proposal twice" ] }, { "name": "DuplicateProposal", "documentation": [ " Proposal already made" ] }, { "name": "ProposalBlacklisted", "documentation": [ " Proposal still blacklisted" ] }, { "name": "NotSimpleMajority", "documentation": [ " Next external proposal not simple majority" ] }, { "name": "InvalidHash", "documentation": [ " Invalid hash" ] }, { "name": "NoProposal", "documentation": [ " No external proposal" ] }, { "name": "AlreadyVetoed", "documentation": [ " Identity may not veto a proposal twice" ] }, { "name": "NotDelegated", "documentation": [ " Not delegated" ] }, { "name": "DuplicatePreimage", "documentation": [ " Preimage already noted" ] }, { "name": "NotImminent", "documentation": [ " Not imminent" ] }, { "name": "TooEarly", "documentation": [ " Too early" ] }, { "name": "Imminent", "documentation": [ " Imminent" ] }, { "name": "PreimageMissing", "documentation": [ " Preimage not found" ] }, { "name": "ReferendumInvalid", "documentation": [ " Vote given for invalid referendum" ] }, { "name": "PreimageInvalid", "documentation": [ " Invalid preimage" ] }, { "name": "NoneWaiting", "documentation": [ " No proposals waiting" ] }, { "name": "NotLocked", "documentation": [ " The target account does not have a lock." ] }, { "name": "NotExpired", "documentation": [ " The lock on the account to be unlocked has not yet expired." ] }, { "name": "NotVoter", "documentation": [ " The given account did not vote on the referendum." ] }, { "name": "NoPermission", "documentation": [ " The actor has no permission to conduct the action." ] }, { "name": "AlreadyDelegating", "documentation": [ " The account is already delegating." ] }, { "name": "Overflow", "documentation": [ " An unexpected integer overflow occurred." ] }, { "name": "Underflow", "documentation": [ " An unexpected integer underflow occurred." ] }, { "name": "InsufficientFunds", "documentation": [ " Too high a balance was provided that the account cannot afford." ] }, { "name": "NotDelegating", "documentation": [ " The account is not currently delegating." ] }, { "name": "VotesExist", "documentation": [ " The account currently has votes attached to it and the operation cannot succeed until", " these are removed, either through `unvote` or `reap_vote`." ] }, { "name": "InstantNotAllowed", "documentation": [ " The instant referendum origin is currently disallowed." ] }, { "name": "Nonsense", "documentation": [ " Delegation to oneself makes no sense." ] }, { "name": "WrongUpperBound", "documentation": [ " Invalid upper bound." ] }, { "name": "MaxVotesReached", "documentation": [ " Maximum number of votes reached." ] }, { "name": "InvalidWitness", "documentation": [ " The provided witness data is wrong." ] }, { "name": "TooManyProposals", "documentation": [ " Maximum number of proposals reached." ] } ], "index": 14 }, { "name": "Council", "storage": { "prefix": "Instance1Collective", "entries": [ { "name": "Proposals", "modifier": "Default", "ty": { "Plain": "Vec" }, "default": [ 0 ], "documentation": [ " The hashes of the active proposals." ] }, { "name": "ProposalOf", "modifier": "Optional", "ty": { "Map": { "hasher": "Identity", "key": "T::Hash", "value": ">::Proposal", "unused": false } }, "default": [ 0 ], "documentation": [ " Actual proposal for a given hash, if it's current." ] }, { "name": "Voting", "modifier": "Optional", "ty": { "Map": { "hasher": "Identity", "key": "T::Hash", "value": "Votes", "unused": false } }, "default": [ 0 ], "documentation": [ " Votes on a given proposal, if it is ongoing." ] }, { "name": "ProposalCount", "modifier": "Default", "ty": { "Plain": "u32" }, "default": [ 0, 0, 0, 0 ], "documentation": [ " Proposals so far." ] }, { "name": "Members", "modifier": "Default", "ty": { "Plain": "Vec" }, "default": [ 0 ], "documentation": [ " The current members of the collective. This is stored sorted (just by value)." ] }, { "name": "Prime", "modifier": "Optional", "ty": { "Plain": "T::AccountId" }, "default": [ 0 ], "documentation": [ " The prime member that helps determine the default vote behavior in case of absentations." ] } ] }, "calls": [ { "name": "set_members", "arguments": [ { "name": "new_members", "ty": "Vec" }, { "name": "prime", "ty": "Option" }, { "name": "old_count", "ty": "MemberCount" } ], "documentation": [ " Set the collective's membership.", "", " - `new_members`: The new member list. Be nice to the chain and provide it sorted.", " - `prime`: The prime member whose vote sets the default.", " - `old_count`: The upper bound for the previous number of members in storage.", " Used for weight estimation.", "", " Requires root origin.", "", " NOTE: Does not enforce the expected `MaxMembers` limit on the amount of members, but", " the weight estimations rely on it to estimate dispatchable weight.", "", " # ", " ## Weight", " - `O(MP + N)` where:", " - `M` old-members-count (code- and governance-bounded)", " - `N` new-members-count (code- and governance-bounded)", " - `P` proposals-count (code-bounded)", " - DB:", " - 1 storage mutation (codec `O(M)` read, `O(N)` write) for reading and writing the members", " - 1 storage read (codec `O(P)`) for reading the proposals", " - `P` storage mutations (codec `O(M)`) for updating the votes for each proposal", " - 1 storage write (codec `O(1)`) for deleting the old `prime` and setting the new one", " # " ] }, { "name": "execute", "arguments": [ { "name": "proposal", "ty": "Box<>::Proposal>" }, { "name": "length_bound", "ty": "Compact" } ], "documentation": [ " Dispatch a proposal from a member using the `Member` origin.", "", " Origin must be a member of the collective.", "", " # ", " ## Weight", " - `O(M + P)` where `M` members-count (code-bounded) and `P` complexity of dispatching `proposal`", " - DB: 1 read (codec `O(M)`) + DB access of `proposal`", " - 1 event", " # " ] }, { "name": "propose", "arguments": [ { "name": "threshold", "ty": "Compact" }, { "name": "proposal", "ty": "Box<>::Proposal>" }, { "name": "length_bound", "ty": "Compact" } ], "documentation": [ " Add a new proposal to either be voted on or executed directly.", "", " Requires the sender to be member.", "", " `threshold` determines whether `proposal` is executed directly (`threshold < 2`)", " or put up for voting.", "", " # ", " ## Weight", " - `O(B + M + P1)` or `O(B + M + P2)` where:", " - `B` is `proposal` size in bytes (length-fee-bounded)", " - `M` is members-count (code- and governance-bounded)", " - branching is influenced by `threshold` where:", " - `P1` is proposal execution complexity (`threshold < 2`)", " - `P2` is proposals-count (code-bounded) (`threshold >= 2`)", " - DB:", " - 1 storage read `is_member` (codec `O(M)`)", " - 1 storage read `ProposalOf::contains_key` (codec `O(1)`)", " - DB accesses influenced by `threshold`:", " - EITHER storage accesses done by `proposal` (`threshold < 2`)", " - OR proposal insertion (`threshold <= 2`)", " - 1 storage mutation `Proposals` (codec `O(P2)`)", " - 1 storage mutation `ProposalCount` (codec `O(1)`)", " - 1 storage write `ProposalOf` (codec `O(B)`)", " - 1 storage write `Voting` (codec `O(M)`)", " - 1 event", " # " ] }, { "name": "vote", "arguments": [ { "name": "proposal", "ty": "T::Hash" }, { "name": "index", "ty": "Compact" }, { "name": "approve", "ty": "bool" } ], "documentation": [ " Add an aye or nay vote for the sender to the given proposal.", "", " Requires the sender to be a member.", "", " Transaction fees will be waived if the member is voting on any particular proposal", " for the first time and the call is successful. Subsequent vote changes will charge a fee.", " # ", " ## Weight", " - `O(M)` where `M` is members-count (code- and governance-bounded)", " - DB:", " - 1 storage read `Members` (codec `O(M)`)", " - 1 storage mutation `Voting` (codec `O(M)`)", " - 1 event", " # " ] }, { "name": "close", "arguments": [ { "name": "proposal_hash", "ty": "T::Hash" }, { "name": "index", "ty": "Compact" }, { "name": "proposal_weight_bound", "ty": "Compact" }, { "name": "length_bound", "ty": "Compact" } ], "documentation": [ " Close a vote that is either approved, disapproved or whose voting period has ended.", "", " May be called by any signed account in order to finish voting and close the proposal.", "", " If called before the end of the voting period it will only close the vote if it is", " has enough votes to be approved or disapproved.", "", " If called after the end of the voting period abstentions are counted as rejections", " unless there is a prime member set and the prime member cast an approval.", "", " If the close operation completes successfully with disapproval, the transaction fee will", " be waived. Otherwise execution of the approved operation will be charged to the caller.", "", " + `proposal_weight_bound`: The maximum amount of weight consumed by executing the closed proposal.", " + `length_bound`: The upper bound for the length of the proposal in storage. Checked via", " `storage::read` so it is `size_of::() == 4` larger than the pure length.", "", " # ", " ## Weight", " - `O(B + M + P1 + P2)` where:", " - `B` is `proposal` size in bytes (length-fee-bounded)", " - `M` is members-count (code- and governance-bounded)", " - `P1` is the complexity of `proposal` preimage.", " - `P2` is proposal-count (code-bounded)", " - DB:", " - 2 storage reads (`Members`: codec `O(M)`, `Prime`: codec `O(1)`)", " - 3 mutations (`Voting`: codec `O(M)`, `ProposalOf`: codec `O(B)`, `Proposals`: codec `O(P2)`)", " - any mutations done while executing `proposal` (`P1`)", " - up to 3 events", " # " ] }, { "name": "disapprove_proposal", "arguments": [ { "name": "proposal_hash", "ty": "T::Hash" } ], "documentation": [ " Disapprove a proposal, close, and remove it from the system, regardless of its current state.", "", " Must be called by the Root origin.", "", " Parameters:", " * `proposal_hash`: The hash of the proposal that should be disapproved.", "", " # ", " Complexity: O(P) where P is the number of max proposals", " DB Weight:", " * Reads: Proposals", " * Writes: Voting, Proposals, ProposalOf", " # " ] } ], "event": [ { "name": "Proposed", "arguments": [ "AccountId", "ProposalIndex", "Hash", "MemberCount" ], "documentation": [ " A motion (given hash) has been proposed (by given account) with a threshold (given", " `MemberCount`).", " \\[account, proposal_index, proposal_hash, threshold\\]" ] }, { "name": "Voted", "arguments": [ "AccountId", "Hash", "bool", "MemberCount", "MemberCount" ], "documentation": [ " A motion (given hash) has been voted on by given account, leaving", " a tally (yes votes and no votes given respectively as `MemberCount`).", " \\[account, proposal_hash, voted, yes, no\\]" ] }, { "name": "Approved", "arguments": [ "Hash" ], "documentation": [ " A motion was approved by the required threshold.", " \\[proposal_hash\\]" ] }, { "name": "Disapproved", "arguments": [ "Hash" ], "documentation": [ " A motion was not approved by the required threshold.", " \\[proposal_hash\\]" ] }, { "name": "Executed", "arguments": [ "Hash", "DispatchResult" ], "documentation": [ " A motion was executed; result will be `Ok` if it returned without error.", " \\[proposal_hash, result\\]" ] }, { "name": "MemberExecuted", "arguments": [ "Hash", "DispatchResult" ], "documentation": [ " A single member did some action; result will be `Ok` if it returned without error.", " \\[proposal_hash, result\\]" ] }, { "name": "Closed", "arguments": [ "Hash", "MemberCount", "MemberCount" ], "documentation": [ " A proposal was closed because its threshold was reached or after its duration was up.", " \\[proposal_hash, yes, no\\]" ] } ], "constants": [], "errors": [ { "name": "NotMember", "documentation": [ " Account is not a member" ] }, { "name": "DuplicateProposal", "documentation": [ " Duplicate proposals not allowed" ] }, { "name": "ProposalMissing", "documentation": [ " Proposal must exist" ] }, { "name": "WrongIndex", "documentation": [ " Mismatched index" ] }, { "name": "DuplicateVote", "documentation": [ " Duplicate vote ignored" ] }, { "name": "AlreadyInitialized", "documentation": [ " Members are already initialized!" ] }, { "name": "TooEarly", "documentation": [ " The close call was made too early, before the end of the voting." ] }, { "name": "TooManyProposals", "documentation": [ " There can only be a maximum of `MaxProposals` active proposals." ] }, { "name": "WrongProposalWeight", "documentation": [ " The given weight bound for the proposal was too low." ] }, { "name": "WrongProposalLength", "documentation": [ " The given length bound for the proposal was too low." ] } ], "index": 15 }, { "name": "TechnicalCommittee", "storage": { "prefix": "Instance2Collective", "entries": [ { "name": "Proposals", "modifier": "Default", "ty": { "Plain": "Vec" }, "default": [ 0 ], "documentation": [ " The hashes of the active proposals." ] }, { "name": "ProposalOf", "modifier": "Optional", "ty": { "Map": { "hasher": "Identity", "key": "T::Hash", "value": ">::Proposal", "unused": false } }, "default": [ 0 ], "documentation": [ " Actual proposal for a given hash, if it's current." ] }, { "name": "Voting", "modifier": "Optional", "ty": { "Map": { "hasher": "Identity", "key": "T::Hash", "value": "Votes", "unused": false } }, "default": [ 0 ], "documentation": [ " Votes on a given proposal, if it is ongoing." ] }, { "name": "ProposalCount", "modifier": "Default", "ty": { "Plain": "u32" }, "default": [ 0, 0, 0, 0 ], "documentation": [ " Proposals so far." ] }, { "name": "Members", "modifier": "Default", "ty": { "Plain": "Vec" }, "default": [ 0 ], "documentation": [ " The current members of the collective. This is stored sorted (just by value)." ] }, { "name": "Prime", "modifier": "Optional", "ty": { "Plain": "T::AccountId" }, "default": [ 0 ], "documentation": [ " The prime member that helps determine the default vote behavior in case of absentations." ] } ] }, "calls": [ { "name": "set_members", "arguments": [ { "name": "new_members", "ty": "Vec" }, { "name": "prime", "ty": "Option" }, { "name": "old_count", "ty": "MemberCount" } ], "documentation": [ " Set the collective's membership.", "", " - `new_members`: The new member list. Be nice to the chain and provide it sorted.", " - `prime`: The prime member whose vote sets the default.", " - `old_count`: The upper bound for the previous number of members in storage.", " Used for weight estimation.", "", " Requires root origin.", "", " NOTE: Does not enforce the expected `MaxMembers` limit on the amount of members, but", " the weight estimations rely on it to estimate dispatchable weight.", "", " # ", " ## Weight", " - `O(MP + N)` where:", " - `M` old-members-count (code- and governance-bounded)", " - `N` new-members-count (code- and governance-bounded)", " - `P` proposals-count (code-bounded)", " - DB:", " - 1 storage mutation (codec `O(M)` read, `O(N)` write) for reading and writing the members", " - 1 storage read (codec `O(P)`) for reading the proposals", " - `P` storage mutations (codec `O(M)`) for updating the votes for each proposal", " - 1 storage write (codec `O(1)`) for deleting the old `prime` and setting the new one", " # " ] }, { "name": "execute", "arguments": [ { "name": "proposal", "ty": "Box<>::Proposal>" }, { "name": "length_bound", "ty": "Compact" } ], "documentation": [ " Dispatch a proposal from a member using the `Member` origin.", "", " Origin must be a member of the collective.", "", " # ", " ## Weight", " - `O(M + P)` where `M` members-count (code-bounded) and `P` complexity of dispatching `proposal`", " - DB: 1 read (codec `O(M)`) + DB access of `proposal`", " - 1 event", " # " ] }, { "name": "propose", "arguments": [ { "name": "threshold", "ty": "Compact" }, { "name": "proposal", "ty": "Box<>::Proposal>" }, { "name": "length_bound", "ty": "Compact" } ], "documentation": [ " Add a new proposal to either be voted on or executed directly.", "", " Requires the sender to be member.", "", " `threshold` determines whether `proposal` is executed directly (`threshold < 2`)", " or put up for voting.", "", " # ", " ## Weight", " - `O(B + M + P1)` or `O(B + M + P2)` where:", " - `B` is `proposal` size in bytes (length-fee-bounded)", " - `M` is members-count (code- and governance-bounded)", " - branching is influenced by `threshold` where:", " - `P1` is proposal execution complexity (`threshold < 2`)", " - `P2` is proposals-count (code-bounded) (`threshold >= 2`)", " - DB:", " - 1 storage read `is_member` (codec `O(M)`)", " - 1 storage read `ProposalOf::contains_key` (codec `O(1)`)", " - DB accesses influenced by `threshold`:", " - EITHER storage accesses done by `proposal` (`threshold < 2`)", " - OR proposal insertion (`threshold <= 2`)", " - 1 storage mutation `Proposals` (codec `O(P2)`)", " - 1 storage mutation `ProposalCount` (codec `O(1)`)", " - 1 storage write `ProposalOf` (codec `O(B)`)", " - 1 storage write `Voting` (codec `O(M)`)", " - 1 event", " # " ] }, { "name": "vote", "arguments": [ { "name": "proposal", "ty": "T::Hash" }, { "name": "index", "ty": "Compact" }, { "name": "approve", "ty": "bool" } ], "documentation": [ " Add an aye or nay vote for the sender to the given proposal.", "", " Requires the sender to be a member.", "", " Transaction fees will be waived if the member is voting on any particular proposal", " for the first time and the call is successful. Subsequent vote changes will charge a fee.", " # ", " ## Weight", " - `O(M)` where `M` is members-count (code- and governance-bounded)", " - DB:", " - 1 storage read `Members` (codec `O(M)`)", " - 1 storage mutation `Voting` (codec `O(M)`)", " - 1 event", " # " ] }, { "name": "close", "arguments": [ { "name": "proposal_hash", "ty": "T::Hash" }, { "name": "index", "ty": "Compact" }, { "name": "proposal_weight_bound", "ty": "Compact" }, { "name": "length_bound", "ty": "Compact" } ], "documentation": [ " Close a vote that is either approved, disapproved or whose voting period has ended.", "", " May be called by any signed account in order to finish voting and close the proposal.", "", " If called before the end of the voting period it will only close the vote if it is", " has enough votes to be approved or disapproved.", "", " If called after the end of the voting period abstentions are counted as rejections", " unless there is a prime member set and the prime member cast an approval.", "", " If the close operation completes successfully with disapproval, the transaction fee will", " be waived. Otherwise execution of the approved operation will be charged to the caller.", "", " + `proposal_weight_bound`: The maximum amount of weight consumed by executing the closed proposal.", " + `length_bound`: The upper bound for the length of the proposal in storage. Checked via", " `storage::read` so it is `size_of::() == 4` larger than the pure length.", "", " # ", " ## Weight", " - `O(B + M + P1 + P2)` where:", " - `B` is `proposal` size in bytes (length-fee-bounded)", " - `M` is members-count (code- and governance-bounded)", " - `P1` is the complexity of `proposal` preimage.", " - `P2` is proposal-count (code-bounded)", " - DB:", " - 2 storage reads (`Members`: codec `O(M)`, `Prime`: codec `O(1)`)", " - 3 mutations (`Voting`: codec `O(M)`, `ProposalOf`: codec `O(B)`, `Proposals`: codec `O(P2)`)", " - any mutations done while executing `proposal` (`P1`)", " - up to 3 events", " # " ] }, { "name": "disapprove_proposal", "arguments": [ { "name": "proposal_hash", "ty": "T::Hash" } ], "documentation": [ " Disapprove a proposal, close, and remove it from the system, regardless of its current state.", "", " Must be called by the Root origin.", "", " Parameters:", " * `proposal_hash`: The hash of the proposal that should be disapproved.", "", " # ", " Complexity: O(P) where P is the number of max proposals", " DB Weight:", " * Reads: Proposals", " * Writes: Voting, Proposals, ProposalOf", " # " ] } ], "event": [ { "name": "Proposed", "arguments": [ "AccountId", "ProposalIndex", "Hash", "MemberCount" ], "documentation": [ " A motion (given hash) has been proposed (by given account) with a threshold (given", " `MemberCount`).", " \\[account, proposal_index, proposal_hash, threshold\\]" ] }, { "name": "Voted", "arguments": [ "AccountId", "Hash", "bool", "MemberCount", "MemberCount" ], "documentation": [ " A motion (given hash) has been voted on by given account, leaving", " a tally (yes votes and no votes given respectively as `MemberCount`).", " \\[account, proposal_hash, voted, yes, no\\]" ] }, { "name": "Approved", "arguments": [ "Hash" ], "documentation": [ " A motion was approved by the required threshold.", " \\[proposal_hash\\]" ] }, { "name": "Disapproved", "arguments": [ "Hash" ], "documentation": [ " A motion was not approved by the required threshold.", " \\[proposal_hash\\]" ] }, { "name": "Executed", "arguments": [ "Hash", "DispatchResult" ], "documentation": [ " A motion was executed; result will be `Ok` if it returned without error.", " \\[proposal_hash, result\\]" ] }, { "name": "MemberExecuted", "arguments": [ "Hash", "DispatchResult" ], "documentation": [ " A single member did some action; result will be `Ok` if it returned without error.", " \\[proposal_hash, result\\]" ] }, { "name": "Closed", "arguments": [ "Hash", "MemberCount", "MemberCount" ], "documentation": [ " A proposal was closed because its threshold was reached or after its duration was up.", " \\[proposal_hash, yes, no\\]" ] } ], "constants": [], "errors": [ { "name": "NotMember", "documentation": [ " Account is not a member" ] }, { "name": "DuplicateProposal", "documentation": [ " Duplicate proposals not allowed" ] }, { "name": "ProposalMissing", "documentation": [ " Proposal must exist" ] }, { "name": "WrongIndex", "documentation": [ " Mismatched index" ] }, { "name": "DuplicateVote", "documentation": [ " Duplicate vote ignored" ] }, { "name": "AlreadyInitialized", "documentation": [ " Members are already initialized!" ] }, { "name": "TooEarly", "documentation": [ " The close call was made too early, before the end of the voting." ] }, { "name": "TooManyProposals", "documentation": [ " There can only be a maximum of `MaxProposals` active proposals." ] }, { "name": "WrongProposalWeight", "documentation": [ " The given weight bound for the proposal was too low." ] }, { "name": "WrongProposalLength", "documentation": [ " The given length bound for the proposal was too low." ] } ], "index": 16 }, { "name": "ElectionsPhragmen", "storage": { "prefix": "PhragmenElection", "entries": [ { "name": "Members", "modifier": "Default", "ty": { "Plain": "Vec>>" }, "default": [ 0 ], "documentation": [ " The current elected members.", "", " Invariant: Always sorted based on account id." ] }, { "name": "RunnersUp", "modifier": "Default", "ty": { "Plain": "Vec>>" }, "default": [ 0 ], "documentation": [ " The current reserved runners-up.", "", " Invariant: Always sorted based on rank (worse to best). Upon removal of a member, the", " last (i.e. _best_) runner-up will be replaced." ] }, { "name": "Candidates", "modifier": "Default", "ty": { "Plain": "Vec<(T::AccountId, BalanceOf)>" }, "default": [ 0 ], "documentation": [ " The present candidate list. A current member or runner-up can never enter this vector", " and is always implicitly assumed to be a candidate.", "", " Second element is the deposit.", "", " Invariant: Always sorted based on account id." ] }, { "name": "ElectionRounds", "modifier": "Default", "ty": { "Plain": "u32" }, "default": [ 0, 0, 0, 0 ], "documentation": [ " The total number of vote rounds that have happened, excluding the upcoming one." ] }, { "name": "Voting", "modifier": "Default", "ty": { "Map": { "hasher": "Twox64Concat", "key": "T::AccountId", "value": "Voter>", "unused": false } }, "default": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "documentation": [ " Votes and locked stake of a particular voter.", "", " TWOX-NOTE: SAFE as `AccountId` is a crypto hash." ] } ] }, "calls": [ { "name": "vote", "arguments": [ { "name": "votes", "ty": "Vec" }, { "name": "value", "ty": "Compact>" } ], "documentation": [ " Vote for a set of candidates for the upcoming round of election. This can be called to", " set the initial votes, or update already existing votes.", "", " Upon initial voting, `value` units of `who`'s balance is locked and a deposit amount is", " reserved. The deposit is based on the number of votes and can be updated over time.", "", " The `votes` should:", " - not be empty.", " - be less than the number of possible candidates. Note that all current members and", " runners-up are also automatically candidates for the next round.", "", " If `value` is more than `who`'s total balance, then the maximum of the two is used.", "", " The dispatch origin of this call must be signed.", "", " ### Warning", "", " It is the responsibility of the caller to **NOT** place all of their balance into the", " lock and keep some for further operations.", "", " # ", " We assume the maximum weight among all 3 cases: vote_equal, vote_more and vote_less.", " # " ] }, { "name": "remove_voter", "arguments": [], "documentation": [ " Remove `origin` as a voter.", "", " This removes the lock and returns the deposit.", "", " The dispatch origin of this call must be signed and be a voter." ] }, { "name": "submit_candidacy", "arguments": [ { "name": "candidate_count", "ty": "Compact" } ], "documentation": [ " Submit oneself for candidacy. A fixed amount of deposit is recorded.", "", " All candidates are wiped at the end of the term. They either become a member/runner-up,", " or leave the system while their deposit is slashed.", "", " The dispatch origin of this call must be signed.", "", " ### Warning", "", " Even if a candidate ends up being a member, they must call [`Call::renounce_candidacy`]", " to get their deposit back. Losing the spot in an election will always lead to a slash.", "", " # ", " The number of current candidates must be provided as witness data.", " # " ] }, { "name": "renounce_candidacy", "arguments": [ { "name": "renouncing", "ty": "Renouncing" } ], "documentation": [ " Renounce one's intention to be a candidate for the next election round. 3 potential", " outcomes exist:", "", " - `origin` is a candidate and not elected in any set. In this case, the deposit is", " unreserved, returned and origin is removed as a candidate.", " - `origin` is a current runner-up. In this case, the deposit is unreserved, returned and", " origin is removed as a runner-up.", " - `origin` is a current member. In this case, the deposit is unreserved and origin is", " removed as a member, consequently not being a candidate for the next round anymore.", " Similar to [`remove_members`], if replacement runners exists, they are immediately used.", " If the prime is renouncing, then no prime will exist until the next round.", "", " The dispatch origin of this call must be signed, and have one of the above roles.", "", " # ", " The type of renouncing must be provided as witness data.", " # " ] }, { "name": "remove_member", "arguments": [ { "name": "who", "ty": "::Source" }, { "name": "has_replacement", "ty": "bool" } ], "documentation": [ " Remove a particular member from the set. This is effective immediately and the bond of", " the outgoing member is slashed.", "", " If a runner-up is available, then the best runner-up will be removed and replaces the", " outgoing member. Otherwise, a new phragmen election is started.", "", " The dispatch origin of this call must be root.", "", " Note that this does not affect the designated block number of the next election.", "", " # ", " If we have a replacement, we use a small weight. Else, since this is a root call and", " will go into phragmen, we assume full block for now.", " # " ] }, { "name": "clean_defunct_voters", "arguments": [ { "name": "_num_voters", "ty": "u32" }, { "name": "_num_defunct", "ty": "u32" } ], "documentation": [ " Clean all voters who are defunct (i.e. they do not serve any purpose at all). The", " deposit of the removed voters are returned.", "", " This is an root function to be used only for cleaning the state.", "", " The dispatch origin of this call must be root.", "", " # ", " The total number of voters and those that are defunct must be provided as witness data.", " # " ] } ], "event": [ { "name": "NewTerm", "arguments": [ "Vec<(AccountId, Balance)>" ], "documentation": [ " A new term with \\[new_members\\]. This indicates that enough candidates existed to run the", " election, not that enough have has been elected. The inner value must be examined for", " this purpose. A `NewTerm(\\[\\])` indicates that some candidates got their bond slashed and", " none were elected, whilst `EmptyTerm` means that no candidates existed to begin with." ] }, { "name": "EmptyTerm", "arguments": [], "documentation": [ " No (or not enough) candidates existed for this round. This is different from", " `NewTerm(\\[\\])`. See the description of `NewTerm`." ] }, { "name": "ElectionError", "arguments": [], "documentation": [ " Internal error happened while trying to perform election." ] }, { "name": "MemberKicked", "arguments": [ "AccountId" ], "documentation": [ " A \\[member\\] has been removed. This should always be followed by either `NewTerm` or", " `EmptyTerm`." ] }, { "name": "Renounced", "arguments": [ "AccountId" ], "documentation": [ " Someone has renounced their candidacy." ] }, { "name": "CandidateSlashed", "arguments": [ "AccountId", "Balance" ], "documentation": [ " A \\[candidate\\] was slashed by \\[amount\\] due to failing to obtain a seat as member or", " runner-up.", "", " Note that old members and runners-up are also candidates." ] }, { "name": "SeatHolderSlashed", "arguments": [ "AccountId", "Balance" ], "documentation": [ " A \\[seat holder\\] was slashed by \\[amount\\] by being forcefully removed from the set." ] } ], "constants": [ { "name": "CandidacyBond", "ty": "BalanceOf", "value": [ 0, 16, 165, 212, 232, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "documentation": [] }, { "name": "VotingBondBase", "ty": "BalanceOf", "value": [ 0, 112, 19, 183, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "documentation": [] }, { "name": "VotingBondFactor", "ty": "BalanceOf", "value": [ 0, 208, 18, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "documentation": [] }, { "name": "DesiredMembers", "ty": "u32", "value": [ 13, 0, 0, 0 ], "documentation": [] }, { "name": "DesiredRunnersUp", "ty": "u32", "value": [ 20, 0, 0, 0 ], "documentation": [] }, { "name": "TermDuration", "ty": "T::BlockNumber", "value": [ 192, 137, 1, 0 ], "documentation": [] }, { "name": "ModuleId", "ty": "LockIdentifier", "value": [ 112, 104, 114, 101, 108, 101, 99, 116 ], "documentation": [] } ], "errors": [ { "name": "UnableToVote", "documentation": [ " Cannot vote when no candidates or members exist." ] }, { "name": "NoVotes", "documentation": [ " Must vote for at least one candidate." ] }, { "name": "TooManyVotes", "documentation": [ " Cannot vote more than candidates." ] }, { "name": "MaximumVotesExceeded", "documentation": [ " Cannot vote more than maximum allowed." ] }, { "name": "LowBalance", "documentation": [ " Cannot vote with stake less than minimum balance." ] }, { "name": "UnableToPayBond", "documentation": [ " Voter can not pay voting bond." ] }, { "name": "MustBeVoter", "documentation": [ " Must be a voter." ] }, { "name": "ReportSelf", "documentation": [ " Cannot report self." ] }, { "name": "DuplicatedCandidate", "documentation": [ " Duplicated candidate submission." ] }, { "name": "MemberSubmit", "documentation": [ " Member cannot re-submit candidacy." ] }, { "name": "RunnerUpSubmit", "documentation": [ " Runner cannot re-submit candidacy." ] }, { "name": "InsufficientCandidateFunds", "documentation": [ " Candidate does not have enough funds." ] }, { "name": "NotMember", "documentation": [ " Not a member." ] }, { "name": "InvalidWitnessData", "documentation": [ " The provided count of number of candidates is incorrect." ] }, { "name": "InvalidVoteCount", "documentation": [ " The provided count of number of votes is incorrect." ] }, { "name": "InvalidRenouncing", "documentation": [ " The renouncing origin presented a wrong `Renouncing` parameter." ] }, { "name": "InvalidReplacement", "documentation": [ " Prediction regarding replacement after member removal is wrong." ] } ], "index": 17 }, { "name": "TechnicalMembership", "storage": { "prefix": "Instance1Membership", "entries": [ { "name": "Members", "modifier": "Default", "ty": { "Plain": "Vec" }, "default": [ 0 ], "documentation": [ " The current membership, stored as an ordered Vec." ] }, { "name": "Prime", "modifier": "Optional", "ty": { "Plain": "T::AccountId" }, "default": [ 0 ], "documentation": [ " The current prime member, if one exists." ] } ] }, "calls": [ { "name": "add_member", "arguments": [ { "name": "who", "ty": "T::AccountId" } ], "documentation": [ " Add a member `who` to the set.", "", " May only be called from `T::AddOrigin`." ] }, { "name": "remove_member", "arguments": [ { "name": "who", "ty": "T::AccountId" } ], "documentation": [ " Remove a member `who` from the set.", "", " May only be called from `T::RemoveOrigin`." ] }, { "name": "swap_member", "arguments": [ { "name": "remove", "ty": "T::AccountId" }, { "name": "add", "ty": "T::AccountId" } ], "documentation": [ " Swap out one member `remove` for another `add`.", "", " May only be called from `T::SwapOrigin`.", "", " Prime membership is *not* passed from `remove` to `add`, if extant." ] }, { "name": "reset_members", "arguments": [ { "name": "members", "ty": "Vec" } ], "documentation": [ " Change the membership to a new set, disregarding the existing membership. Be nice and", " pass `members` pre-sorted.", "", " May only be called from `T::ResetOrigin`." ] }, { "name": "change_key", "arguments": [ { "name": "new", "ty": "T::AccountId" } ], "documentation": [ " Swap out the sending member for some other key `new`.", "", " May only be called from `Signed` origin of a current member.", "", " Prime membership is passed from the origin account to `new`, if extant." ] }, { "name": "set_prime", "arguments": [ { "name": "who", "ty": "T::AccountId" } ], "documentation": [ " Set the prime member. Must be a current member.", "", " May only be called from `T::PrimeOrigin`." ] }, { "name": "clear_prime", "arguments": [], "documentation": [ " Remove the prime member if it exists.", "", " May only be called from `T::PrimeOrigin`." ] } ], "event": [ { "name": "MemberAdded", "arguments": [], "documentation": [ " The given member was added; see the transaction for who." ] }, { "name": "MemberRemoved", "arguments": [], "documentation": [ " The given member was removed; see the transaction for who." ] }, { "name": "MembersSwapped", "arguments": [], "documentation": [ " Two members were swapped; see the transaction for who." ] }, { "name": "MembersReset", "arguments": [], "documentation": [ " The membership was reset; see the transaction for who the new set is." ] }, { "name": "KeyChanged", "arguments": [], "documentation": [ " One of the members' keys changed." ] }, { "name": "Dummy", "arguments": [ "sp_std::marker::PhantomData<(AccountId, Event)>" ], "documentation": [ " Phantom member, never used." ] } ], "constants": [], "errors": [], "index": 18 }, { "name": "Treasury", "storage": { "prefix": "Treasury", "entries": [ { "name": "ProposalCount", "modifier": "Default", "ty": { "Plain": "ProposalIndex" }, "default": [ 0, 0, 0, 0 ], "documentation": [ " Number of proposals that have been made." ] }, { "name": "Proposals", "modifier": "Optional", "ty": { "Map": { "hasher": "Twox64Concat", "key": "ProposalIndex", "value": "Proposal>", "unused": false } }, "default": [ 0 ], "documentation": [ " Proposals that have been made." ] }, { "name": "Approvals", "modifier": "Default", "ty": { "Plain": "Vec" }, "default": [ 0 ], "documentation": [ " Proposal indices that have been approved but not yet awarded." ] } ] }, "calls": [ { "name": "propose_spend", "arguments": [ { "name": "value", "ty": "Compact>" }, { "name": "beneficiary", "ty": "::Source" } ], "documentation": [ " Put forward a suggestion for spending. A deposit proportional to the value", " is reserved and slashed if the proposal is rejected. It is returned once the", " proposal is awarded.", "", " # ", " - Complexity: O(1)", " - DbReads: `ProposalCount`, `origin account`", " - DbWrites: `ProposalCount`, `Proposals`, `origin account`", " # " ] }, { "name": "reject_proposal", "arguments": [ { "name": "proposal_id", "ty": "Compact" } ], "documentation": [ " Reject a proposed spend. The original deposit will be slashed.", "", " May only be called from `T::RejectOrigin`.", "", " # ", " - Complexity: O(1)", " - DbReads: `Proposals`, `rejected proposer account`", " - DbWrites: `Proposals`, `rejected proposer account`", " # " ] }, { "name": "approve_proposal", "arguments": [ { "name": "proposal_id", "ty": "Compact" } ], "documentation": [ " Approve a proposal. At a later time, the proposal will be allocated to the beneficiary", " and the original deposit will be returned.", "", " May only be called from `T::ApproveOrigin`.", "", " # ", " - Complexity: O(1).", " - DbReads: `Proposals`, `Approvals`", " - DbWrite: `Approvals`", " # " ] } ], "event": [ { "name": "Proposed", "arguments": [ "ProposalIndex" ], "documentation": [ " New proposal. \\[proposal_index\\]" ] }, { "name": "Spending", "arguments": [ "Balance" ], "documentation": [ " We have ended a spend period and will now allocate funds. \\[budget_remaining\\]" ] }, { "name": "Awarded", "arguments": [ "ProposalIndex", "Balance", "AccountId" ], "documentation": [ " Some funds have been allocated. \\[proposal_index, award, beneficiary\\]" ] }, { "name": "Rejected", "arguments": [ "ProposalIndex", "Balance" ], "documentation": [ " A proposal was rejected; funds were slashed. \\[proposal_index, slashed\\]" ] }, { "name": "Burnt", "arguments": [ "Balance" ], "documentation": [ " Some of our funds have been burnt. \\[burn\\]" ] }, { "name": "Rollover", "arguments": [ "Balance" ], "documentation": [ " Spending has finished; this is the amount that rolls over until next spend.", " \\[budget_remaining\\]" ] }, { "name": "Deposit", "arguments": [ "Balance" ], "documentation": [ " Some funds have been deposited. \\[deposit\\]" ] } ], "constants": [ { "name": "ProposalBond", "ty": "Permill", "value": [ 80, 195, 0, 0 ], "documentation": [ " Fraction of a proposal's value that should be bonded in order to place the proposal.", " An accepted proposal gets these back. A rejected proposal does not." ] }, { "name": "ProposalBondMinimum", "ty": "BalanceOf", "value": [ 0, 16, 165, 212, 232, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "documentation": [ " Minimum amount of funds that should be placed in a deposit for making a proposal." ] }, { "name": "SpendPeriod", "ty": "T::BlockNumber", "value": [ 0, 70, 5, 0 ], "documentation": [ " Period between successive spends." ] }, { "name": "Burn", "ty": "Permill", "value": [ 16, 39, 0, 0 ], "documentation": [ " Percentage of spare funds (if any) that are burnt per spend period." ] }, { "name": "ModuleId", "ty": "ModuleId", "value": [ 112, 121, 47, 116, 114, 115, 114, 121 ], "documentation": [ " The treasury's module id, used for deriving its sovereign account ID." ] } ], "errors": [ { "name": "InsufficientProposersBalance", "documentation": [ " Proposer's balance is too low." ] }, { "name": "InvalidIndex", "documentation": [ " No proposal or bounty at that index." ] } ], "index": 19 }, { "name": "Claims", "storage": { "prefix": "Claims", "entries": [ { "name": "Claims", "modifier": "Optional", "ty": { "Map": { "hasher": "Identity", "key": "EthereumAddress", "value": "BalanceOf", "unused": false } }, "default": [ 0 ], "documentation": [] }, { "name": "Total", "modifier": "Default", "ty": { "Plain": "BalanceOf" }, "default": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "documentation": [] }, { "name": "Vesting", "modifier": "Optional", "ty": { "Map": { "hasher": "Identity", "key": "EthereumAddress", "value": "(BalanceOf, BalanceOf, T::BlockNumber)", "unused": false } }, "default": [ 0 ], "documentation": [ " Vesting schedule for a claim.", " First balance is the total amount that should be held for vesting.", " Second balance is how much should be unlocked per block.", " The block number is when the vesting should start." ] }, { "name": "Signing", "modifier": "Optional", "ty": { "Map": { "hasher": "Identity", "key": "EthereumAddress", "value": "StatementKind", "unused": false } }, "default": [ 0 ], "documentation": [ " The statement kind that must be signed, if any." ] }, { "name": "Preclaims", "modifier": "Optional", "ty": { "Map": { "hasher": "Identity", "key": "T::AccountId", "value": "EthereumAddress", "unused": false } }, "default": [ 0 ], "documentation": [ " Pre-claimed Ethereum accounts, by the Account ID that they are claimed to." ] } ] }, "calls": [ { "name": "claim", "arguments": [ { "name": "dest", "ty": "T::AccountId" }, { "name": "ethereum_signature", "ty": "EcdsaSignature" } ], "documentation": [ " Make a claim to collect your DOTs.", "", " The dispatch origin for this call must be _None_.", "", " Unsigned Validation:", " A call to claim is deemed valid if the signature provided matches", " the expected signed message of:", "", " > Ethereum Signed Message:", " > (configured prefix string)(address)", "", " and `address` matches the `dest` account.", "", " Parameters:", " - `dest`: The destination account to payout the claim.", " - `ethereum_signature`: The signature of an ethereum signed message", " matching the format described above.", "", " ", " The weight of this call is invariant over the input parameters.", " Weight includes logic to validate unsigned `claim` call.", "", " Total Complexity: O(1)", " " ] }, { "name": "mint_claim", "arguments": [ { "name": "who", "ty": "EthereumAddress" }, { "name": "value", "ty": "BalanceOf" }, { "name": "vesting_schedule", "ty": "Option<(BalanceOf, BalanceOf, T::BlockNumber)>" }, { "name": "statement", "ty": "Option" } ], "documentation": [ " Mint a new claim to collect DOTs.", "", " The dispatch origin for this call must be _Root_.", "", " Parameters:", " - `who`: The Ethereum address allowed to collect this claim.", " - `value`: The number of DOTs that will be claimed.", " - `vesting_schedule`: An optional vesting schedule for these DOTs.", "", " ", " The weight of this call is invariant over the input parameters.", " We assume worst case that both vesting and statement is being inserted.", "", " Total Complexity: O(1)", " " ] }, { "name": "claim_attest", "arguments": [ { "name": "dest", "ty": "T::AccountId" }, { "name": "ethereum_signature", "ty": "EcdsaSignature" }, { "name": "statement", "ty": "Vec" } ], "documentation": [ " Make a claim to collect your DOTs by signing a statement.", "", " The dispatch origin for this call must be _None_.", "", " Unsigned Validation:", " A call to `claim_attest` is deemed valid if the signature provided matches", " the expected signed message of:", "", " > Ethereum Signed Message:", " > (configured prefix string)(address)(statement)", "", " and `address` matches the `dest` account; the `statement` must match that which is", " expected according to your purchase arrangement.", "", " Parameters:", " - `dest`: The destination account to payout the claim.", " - `ethereum_signature`: The signature of an ethereum signed message", " matching the format described above.", " - `statement`: The identity of the statement which is being attested to in the signature.", "", " ", " The weight of this call is invariant over the input parameters.", " Weight includes logic to validate unsigned `claim_attest` call.", "", " Total Complexity: O(1)", " " ] }, { "name": "attest", "arguments": [ { "name": "statement", "ty": "Vec" } ], "documentation": [ " Attest to a statement, needed to finalize the claims process.", "", " WARNING: Insecure unless your chain includes `PrevalidateAttests` as a `SignedExtension`.", "", " Unsigned Validation:", " A call to attest is deemed valid if the sender has a `Preclaim` registered", " and provides a `statement` which is expected for the account.", "", " Parameters:", " - `statement`: The identity of the statement which is being attested to in the signature.", "", " ", " The weight of this call is invariant over the input parameters.", " Weight includes logic to do pre-validation on `attest` call.", "", " Total Complexity: O(1)", " " ] }, { "name": "move_claim", "arguments": [ { "name": "old", "ty": "EthereumAddress" }, { "name": "new", "ty": "EthereumAddress" }, { "name": "maybe_preclaim", "ty": "Option" } ], "documentation": [] } ], "event": [ { "name": "Claimed", "arguments": [ "AccountId", "EthereumAddress", "Balance" ], "documentation": [ " Someone claimed some DOTs. [who, ethereum_address, amount]" ] } ], "constants": [ { "name": "Prefix", "ty": "&[u8]", "value": [ 132, 80, 97, 121, 32, 68, 79, 84, 115, 32, 116, 111, 32, 116, 104, 101, 32, 80, 111, 108, 107, 97, 100, 111, 116, 32, 97, 99, 99, 111, 117, 110, 116, 58 ], "documentation": [ " The Prefix that is used in signed Ethereum messages for this network" ] } ], "errors": [ { "name": "InvalidEthereumSignature", "documentation": [ " Invalid Ethereum signature." ] }, { "name": "SignerHasNoClaim", "documentation": [ " Ethereum address has no claim." ] }, { "name": "SenderHasNoClaim", "documentation": [ " Account ID sending tx has no claim." ] }, { "name": "PotUnderflow", "documentation": [ " There's not enough in the pot to pay out some unvested amount. Generally implies a logic", " error." ] }, { "name": "InvalidStatement", "documentation": [ " A needed statement was not included." ] }, { "name": "VestedBalanceExists", "documentation": [ " The account already has a vested balance." ] } ], "index": 24 }, { "name": "Vesting", "storage": { "prefix": "Vesting", "entries": [ { "name": "Vesting", "modifier": "Optional", "ty": { "Map": { "hasher": "Blake2_128Concat", "key": "T::AccountId", "value": "VestingInfo, T::BlockNumber>", "unused": false } }, "default": [ 0 ], "documentation": [ " Information regarding the vesting of a given account." ] } ] }, "calls": [ { "name": "vest", "arguments": [], "documentation": [ " Unlock any vested funds of the sender account.", "", " The dispatch origin for this call must be _Signed_ and the sender must have funds still", " locked under this pallet.", "", " Emits either `VestingCompleted` or `VestingUpdated`.", "", " # ", " - `O(1)`.", " - DbWeight: 2 Reads, 2 Writes", " - Reads: Vesting Storage, Balances Locks, [Sender Account]", " - Writes: Vesting Storage, Balances Locks, [Sender Account]", " # " ] }, { "name": "vest_other", "arguments": [ { "name": "target", "ty": "::Source" } ], "documentation": [ " Unlock any vested funds of a `target` account.", "", " The dispatch origin for this call must be _Signed_.", "", " - `target`: The account whose vested funds should be unlocked. Must have funds still", " locked under this pallet.", "", " Emits either `VestingCompleted` or `VestingUpdated`.", "", " # ", " - `O(1)`.", " - DbWeight: 3 Reads, 3 Writes", " - Reads: Vesting Storage, Balances Locks, Target Account", " - Writes: Vesting Storage, Balances Locks, Target Account", " # " ] }, { "name": "vested_transfer", "arguments": [ { "name": "target", "ty": "::Source" }, { "name": "schedule", "ty": "VestingInfo, T::BlockNumber>" } ], "documentation": [ " Create a vested transfer.", "", " The dispatch origin for this call must be _Signed_.", "", " - `target`: The account that should be transferred the vested funds.", " - `amount`: The amount of funds to transfer and will be vested.", " - `schedule`: The vesting schedule attached to the transfer.", "", " Emits `VestingCreated`.", "", " # ", " - `O(1)`.", " - DbWeight: 3 Reads, 3 Writes", " - Reads: Vesting Storage, Balances Locks, Target Account, [Sender Account]", " - Writes: Vesting Storage, Balances Locks, Target Account, [Sender Account]", " # " ] }, { "name": "force_vested_transfer", "arguments": [ { "name": "source", "ty": "::Source" }, { "name": "target", "ty": "::Source" }, { "name": "schedule", "ty": "VestingInfo, T::BlockNumber>" } ], "documentation": [ " Force a vested transfer.", "", " The dispatch origin for this call must be _Root_.", "", " - `source`: The account whose funds should be transferred.", " - `target`: The account that should be transferred the vested funds.", " - `amount`: The amount of funds to transfer and will be vested.", " - `schedule`: The vesting schedule attached to the transfer.", "", " Emits `VestingCreated`.", "", " # ", " - `O(1)`.", " - DbWeight: 4 Reads, 4 Writes", " - Reads: Vesting Storage, Balances Locks, Target Account, Source Account", " - Writes: Vesting Storage, Balances Locks, Target Account, Source Account", " # " ] } ], "event": [ { "name": "VestingUpdated", "arguments": [ "AccountId", "Balance" ], "documentation": [ " The amount vested has been updated. This could indicate more funds are available. The", " balance given is the amount which is left unvested (and thus locked).", " \\[account, unvested\\]" ] }, { "name": "VestingCompleted", "arguments": [ "AccountId" ], "documentation": [ " An \\[account\\] has become fully vested. No further vesting can happen." ] } ], "constants": [ { "name": "MinVestedTransfer", "ty": "BalanceOf", "value": [ 0, 16, 165, 212, 232, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "documentation": [ " The minimum amount transferred to call `vested_transfer`." ] } ], "errors": [ { "name": "NotVesting", "documentation": [ " The account given is not vesting." ] }, { "name": "ExistingVestingSchedule", "documentation": [ " An existing vesting schedule already exists for this account that cannot be clobbered." ] }, { "name": "AmountLow", "documentation": [ " Amount being transferred is too low to create a vesting schedule." ] } ], "index": 25 }, { "name": "Utility", "storage": null, "calls": [ { "name": "batch", "arguments": [ { "name": "calls", "ty": "Vec<::Call>" } ], "documentation": [ " Send a batch of dispatch calls.", "", " May be called from any origin.", "", " - `calls`: The calls to be dispatched from the same origin.", "", " If origin is root then call are dispatch without checking origin filter. (This includes", " bypassing `frame_system::Config::BaseCallFilter`).", "", " # ", " - Complexity: O(C) where C is the number of calls to be batched.", " # ", "", " This will return `Ok` in all circumstances. To determine the success of the batch, an", " event is deposited. If a call failed and the batch was interrupted, then the", " `BatchInterrupted` event is deposited, along with the number of successful calls made", " and the error of the failed call. If all were successful, then the `BatchCompleted`", " event is deposited." ] }, { "name": "as_derivative", "arguments": [ { "name": "index", "ty": "u16" }, { "name": "call", "ty": "Box<::Call>" } ], "documentation": [ " Send a call through an indexed pseudonym of the sender.", "", " Filter from origin are passed along. The call will be dispatched with an origin which", " use the same filter as the origin of this call.", "", " NOTE: If you need to ensure that any account-based filtering is not honored (i.e.", " because you expect `proxy` to have been used prior in the call stack and you do not want", " the call restrictions to apply to any sub-accounts), then use `as_multi_threshold_1`", " in the Multisig pallet instead.", "", " NOTE: Prior to version *12, this was called `as_limited_sub`.", "", " The dispatch origin for this call must be _Signed_." ] }, { "name": "batch_all", "arguments": [ { "name": "calls", "ty": "Vec<::Call>" } ], "documentation": [ " Send a batch of dispatch calls and atomically execute them.", " The whole transaction will rollback and fail if any of the calls failed.", "", " May be called from any origin.", "", " - `calls`: The calls to be dispatched from the same origin.", "", " If origin is root then call are dispatch without checking origin filter. (This includes", " bypassing `frame_system::Config::BaseCallFilter`).", "", " # ", " - Complexity: O(C) where C is the number of calls to be batched.", " # " ] } ], "event": [ { "name": "BatchInterrupted", "arguments": [ "u32", "DispatchError" ], "documentation": [ " Batch of dispatches did not complete fully. Index of first failing dispatch given, as", " well as the error. \\[index, error\\]" ] }, { "name": "BatchCompleted", "arguments": [], "documentation": [ " Batch of dispatches completed fully with no error." ] } ], "constants": [], "errors": [], "index": 26 }, { "name": "Identity", "storage": { "prefix": "Identity", "entries": [ { "name": "IdentityOf", "modifier": "Optional", "ty": { "Map": { "hasher": "Twox64Concat", "key": "T::AccountId", "value": "Registration>", "unused": false } }, "default": [ 0 ], "documentation": [ " Information that is pertinent to identify the entity behind an account.", "", " TWOX-NOTE: OK ― `AccountId` is a secure hash." ] }, { "name": "SuperOf", "modifier": "Optional", "ty": { "Map": { "hasher": "Blake2_128Concat", "key": "T::AccountId", "value": "(T::AccountId, Data)", "unused": false } }, "default": [ 0 ], "documentation": [ " The super-identity of an alternative \"sub\" identity together with its name, within that", " context. If the account is not some other account's sub-identity, then just `None`." ] }, { "name": "SubsOf", "modifier": "Default", "ty": { "Map": { "hasher": "Twox64Concat", "key": "T::AccountId", "value": "(BalanceOf, Vec)", "unused": false } }, "default": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "documentation": [ " Alternative \"sub\" identities of this account.", "", " The first item is the deposit, the second is a vector of the accounts.", "", " TWOX-NOTE: OK ― `AccountId` is a secure hash." ] }, { "name": "Registrars", "modifier": "Default", "ty": { "Plain": "Vec, T::AccountId>>>" }, "default": [ 0 ], "documentation": [ " The set of registrars. Not expected to get very big as can only be added through a", " special origin (likely a council motion).", "", " The index into this can be cast to `RegistrarIndex` to get a valid value." ] } ] }, "calls": [ { "name": "add_registrar", "arguments": [ { "name": "account", "ty": "T::AccountId" } ], "documentation": [ " Add a registrar to the system.", "", " The dispatch origin for this call must be `T::RegistrarOrigin`.", "", " - `account`: the account of the registrar.", "", " Emits `RegistrarAdded` if successful.", "", " # ", " - `O(R)` where `R` registrar-count (governance-bounded and code-bounded).", " - One storage mutation (codec `O(R)`).", " - One event.", " # " ] }, { "name": "set_identity", "arguments": [ { "name": "info", "ty": "IdentityInfo" } ], "documentation": [ " Set an account's identity information and reserve the appropriate deposit.", "", " If the account already has identity information, the deposit is taken as part payment", " for the new deposit.", "", " The dispatch origin for this call must be _Signed_.", "", " - `info`: The identity information.", "", " Emits `IdentitySet` if successful.", "", " # ", " - `O(X + X' + R)`", " - where `X` additional-field-count (deposit-bounded and code-bounded)", " - where `R` judgements-count (registrar-count-bounded)", " - One balance reserve operation.", " - One storage mutation (codec-read `O(X' + R)`, codec-write `O(X + R)`).", " - One event.", " # " ] }, { "name": "set_subs", "arguments": [ { "name": "subs", "ty": "Vec<(T::AccountId, Data)>" } ], "documentation": [ " Set the sub-accounts of the sender.", "", " Payment: Any aggregate balance reserved by previous `set_subs` calls will be returned", " and an amount `SubAccountDeposit` will be reserved for each item in `subs`.", "", " The dispatch origin for this call must be _Signed_ and the sender must have a registered", " identity.", "", " - `subs`: The identity's (new) sub-accounts.", "", " # ", " - `O(P + S)`", " - where `P` old-subs-count (hard- and deposit-bounded).", " - where `S` subs-count (hard- and deposit-bounded).", " - At most one balance operations.", " - DB:", " - `P + S` storage mutations (codec complexity `O(1)`)", " - One storage read (codec complexity `O(P)`).", " - One storage write (codec complexity `O(S)`).", " - One storage-exists (`IdentityOf::contains_key`).", " # " ] }, { "name": "clear_identity", "arguments": [], "documentation": [ " Clear an account's identity info and all sub-accounts and return all deposits.", "", " Payment: All reserved balances on the account are returned.", "", " The dispatch origin for this call must be _Signed_ and the sender must have a registered", " identity.", "", " Emits `IdentityCleared` if successful.", "", " # ", " - `O(R + S + X)`", " - where `R` registrar-count (governance-bounded).", " - where `S` subs-count (hard- and deposit-bounded).", " - where `X` additional-field-count (deposit-bounded and code-bounded).", " - One balance-unreserve operation.", " - `2` storage reads and `S + 2` storage deletions.", " - One event.", " # " ] }, { "name": "request_judgement", "arguments": [ { "name": "reg_index", "ty": "Compact" }, { "name": "max_fee", "ty": "Compact>" } ], "documentation": [ " Request a judgement from a registrar.", "", " Payment: At most `max_fee` will be reserved for payment to the registrar if judgement", " given.", "", " The dispatch origin for this call must be _Signed_ and the sender must have a", " registered identity.", "", " - `reg_index`: The index of the registrar whose judgement is requested.", " - `max_fee`: The maximum fee that may be paid. This should just be auto-populated as:", "", " ```nocompile", " Self::registrars().get(reg_index).unwrap().fee", " ```", "", " Emits `JudgementRequested` if successful.", "", " # ", " - `O(R + X)`.", " - One balance-reserve operation.", " - Storage: 1 read `O(R)`, 1 mutate `O(X + R)`.", " - One event.", " # " ] }, { "name": "cancel_request", "arguments": [ { "name": "reg_index", "ty": "RegistrarIndex" } ], "documentation": [ " Cancel a previous request.", "", " Payment: A previously reserved deposit is returned on success.", "", " The dispatch origin for this call must be _Signed_ and the sender must have a", " registered identity.", "", " - `reg_index`: The index of the registrar whose judgement is no longer requested.", "", " Emits `JudgementUnrequested` if successful.", "", " # ", " - `O(R + X)`.", " - One balance-reserve operation.", " - One storage mutation `O(R + X)`.", " - One event", " # " ] }, { "name": "set_fee", "arguments": [ { "name": "index", "ty": "Compact" }, { "name": "fee", "ty": "Compact>" } ], "documentation": [ " Set the fee required for a judgement to be requested from a registrar.", "", " The dispatch origin for this call must be _Signed_ and the sender must be the account", " of the registrar whose index is `index`.", "", " - `index`: the index of the registrar whose fee is to be set.", " - `fee`: the new fee.", "", " # ", " - `O(R)`.", " - One storage mutation `O(R)`.", " - Benchmark: 7.315 + R * 0.329 µs (min squares analysis)", " # " ] }, { "name": "set_account_id", "arguments": [ { "name": "index", "ty": "Compact" }, { "name": "new", "ty": "T::AccountId" } ], "documentation": [ " Change the account associated with a registrar.", "", " The dispatch origin for this call must be _Signed_ and the sender must be the account", " of the registrar whose index is `index`.", "", " - `index`: the index of the registrar whose fee is to be set.", " - `new`: the new account ID.", "", " # ", " - `O(R)`.", " - One storage mutation `O(R)`.", " - Benchmark: 8.823 + R * 0.32 µs (min squares analysis)", " # " ] }, { "name": "set_fields", "arguments": [ { "name": "index", "ty": "Compact" }, { "name": "fields", "ty": "IdentityFields" } ], "documentation": [ " Set the field information for a registrar.", "", " The dispatch origin for this call must be _Signed_ and the sender must be the account", " of the registrar whose index is `index`.", "", " - `index`: the index of the registrar whose fee is to be set.", " - `fields`: the fields that the registrar concerns themselves with.", "", " # ", " - `O(R)`.", " - One storage mutation `O(R)`.", " - Benchmark: 7.464 + R * 0.325 µs (min squares analysis)", " # " ] }, { "name": "provide_judgement", "arguments": [ { "name": "reg_index", "ty": "Compact" }, { "name": "target", "ty": "::Source" }, { "name": "judgement", "ty": "Judgement>" } ], "documentation": [ " Provide a judgement for an account's identity.", "", " The dispatch origin for this call must be _Signed_ and the sender must be the account", " of the registrar whose index is `reg_index`.", "", " - `reg_index`: the index of the registrar whose judgement is being made.", " - `target`: the account whose identity the judgement is upon. This must be an account", " with a registered identity.", " - `judgement`: the judgement of the registrar of index `reg_index` about `target`.", "", " Emits `JudgementGiven` if successful.", "", " # ", " - `O(R + X)`.", " - One balance-transfer operation.", " - Up to one account-lookup operation.", " - Storage: 1 read `O(R)`, 1 mutate `O(R + X)`.", " - One event.", " # " ] }, { "name": "kill_identity", "arguments": [ { "name": "target", "ty": "::Source" } ], "documentation": [ " Remove an account's identity and sub-account information and slash the deposits.", "", " Payment: Reserved balances from `set_subs` and `set_identity` are slashed and handled by", " `Slash`. Verification request deposits are not returned; they should be cancelled", " manually using `cancel_request`.", "", " The dispatch origin for this call must match `T::ForceOrigin`.", "", " - `target`: the account whose identity the judgement is upon. This must be an account", " with a registered identity.", "", " Emits `IdentityKilled` if successful.", "", " # ", " - `O(R + S + X)`.", " - One balance-reserve operation.", " - `S + 2` storage mutations.", " - One event.", " # " ] }, { "name": "add_sub", "arguments": [ { "name": "sub", "ty": "::Source" }, { "name": "data", "ty": "Data" } ], "documentation": [ " Add the given account to the sender's subs.", "", " Payment: Balance reserved by a previous `set_subs` call for one sub will be repatriated", " to the sender.", "", " The dispatch origin for this call must be _Signed_ and the sender must have a registered", " sub identity of `sub`." ] }, { "name": "rename_sub", "arguments": [ { "name": "sub", "ty": "::Source" }, { "name": "data", "ty": "Data" } ], "documentation": [ " Alter the associated name of the given sub-account.", "", " The dispatch origin for this call must be _Signed_ and the sender must have a registered", " sub identity of `sub`." ] }, { "name": "remove_sub", "arguments": [ { "name": "sub", "ty": "::Source" } ], "documentation": [ " Remove the given account from the sender's subs.", "", " Payment: Balance reserved by a previous `set_subs` call for one sub will be repatriated", " to the sender.", "", " The dispatch origin for this call must be _Signed_ and the sender must have a registered", " sub identity of `sub`." ] }, { "name": "quit_sub", "arguments": [], "documentation": [ " Remove the sender as a sub-account.", "", " Payment: Balance reserved by a previous `set_subs` call for one sub will be repatriated", " to the sender (*not* the original depositor).", "", " The dispatch origin for this call must be _Signed_ and the sender must have a registered", " super-identity.", "", " NOTE: This should not normally be used, but is provided in the case that the non-", " controller of an account is maliciously registered as a sub-account." ] } ], "event": [ { "name": "IdentitySet", "arguments": [ "AccountId" ], "documentation": [ " A name was set or reset (which will remove all judgements). \\[who\\]" ] }, { "name": "IdentityCleared", "arguments": [ "AccountId", "Balance" ], "documentation": [ " A name was cleared, and the given balance returned. \\[who, deposit\\]" ] }, { "name": "IdentityKilled", "arguments": [ "AccountId", "Balance" ], "documentation": [ " A name was removed and the given balance slashed. \\[who, deposit\\]" ] }, { "name": "JudgementRequested", "arguments": [ "AccountId", "RegistrarIndex" ], "documentation": [ " A judgement was asked from a registrar. \\[who, registrar_index\\]" ] }, { "name": "JudgementUnrequested", "arguments": [ "AccountId", "RegistrarIndex" ], "documentation": [ " A judgement request was retracted. \\[who, registrar_index\\]" ] }, { "name": "JudgementGiven", "arguments": [ "AccountId", "RegistrarIndex" ], "documentation": [ " A judgement was given by a registrar. \\[target, registrar_index\\]" ] }, { "name": "RegistrarAdded", "arguments": [ "RegistrarIndex" ], "documentation": [ " A registrar was added. \\[registrar_index\\]" ] }, { "name": "SubIdentityAdded", "arguments": [ "AccountId", "AccountId", "Balance" ], "documentation": [ " A sub-identity was added to an identity and the deposit paid. \\[sub, main, deposit\\]" ] }, { "name": "SubIdentityRemoved", "arguments": [ "AccountId", "AccountId", "Balance" ], "documentation": [ " A sub-identity was removed from an identity and the deposit freed.", " \\[sub, main, deposit\\]" ] }, { "name": "SubIdentityRevoked", "arguments": [ "AccountId", "AccountId", "Balance" ], "documentation": [ " A sub-identity was cleared, and the given deposit repatriated from the", " main identity account to the sub-identity account. \\[sub, main, deposit\\]" ] } ], "constants": [ { "name": "BasicDeposit", "ty": "BalanceOf", "value": [ 0, 125, 181, 42, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "documentation": [ " The amount held on deposit for a registered identity." ] }, { "name": "FieldDeposit", "ty": "BalanceOf", "value": [ 0, 205, 86, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "documentation": [ " The amount held on deposit per additional field for a registered identity." ] }, { "name": "SubAccountDeposit", "ty": "BalanceOf", "value": [ 128, 248, 132, 176, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "documentation": [ " The amount held on deposit for a registered subaccount. This should account for the fact", " that one storage item's value will increase by the size of an account ID, and there will be", " another trie item whose value is the size of an account ID plus 32 bytes." ] }, { "name": "MaxSubAccounts", "ty": "u32", "value": [ 100, 0, 0, 0 ], "documentation": [ " The maximum number of sub-accounts allowed per identified account." ] }, { "name": "MaxAdditionalFields", "ty": "u32", "value": [ 100, 0, 0, 0 ], "documentation": [ " Maximum number of additional fields that may be stored in an ID. Needed to bound the I/O", " required to access an identity, but can be pretty high." ] }, { "name": "MaxRegistrars", "ty": "u32", "value": [ 20, 0, 0, 0 ], "documentation": [ " Maxmimum number of registrars allowed in the system. Needed to bound the complexity", " of, e.g., updating judgements." ] } ], "errors": [ { "name": "TooManySubAccounts", "documentation": [ " Too many subs-accounts." ] }, { "name": "NotFound", "documentation": [ " Account isn't found." ] }, { "name": "NotNamed", "documentation": [ " Account isn't named." ] }, { "name": "EmptyIndex", "documentation": [ " Empty index." ] }, { "name": "FeeChanged", "documentation": [ " Fee is changed." ] }, { "name": "NoIdentity", "documentation": [ " No identity found." ] }, { "name": "StickyJudgement", "documentation": [ " Sticky judgement." ] }, { "name": "JudgementGiven", "documentation": [ " Judgement given." ] }, { "name": "InvalidJudgement", "documentation": [ " Invalid judgement." ] }, { "name": "InvalidIndex", "documentation": [ " The index is invalid." ] }, { "name": "InvalidTarget", "documentation": [ " The target is invalid." ] }, { "name": "TooManyFields", "documentation": [ " Too many additional fields." ] }, { "name": "TooManyRegistrars", "documentation": [ " Maximum amount of registrars reached. Cannot add any more." ] }, { "name": "AlreadyClaimed", "documentation": [ " Account ID is already named." ] }, { "name": "NotSub", "documentation": [ " Sender is not a sub-account." ] }, { "name": "NotOwned", "documentation": [ " Sub-account isn't owned by sender." ] } ], "index": 28 }, { "name": "Proxy", "storage": { "prefix": "Proxy", "entries": [ { "name": "Proxies", "modifier": "Default", "ty": { "Map": { "hasher": "Twox64Concat", "key": "T::AccountId", "value": "(Vec>,\n BalanceOf)", "unused": false } }, "default": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "documentation": [ " The set of account proxies. Maps the account which has delegated to the accounts", " which are being delegated to, together with the amount held on deposit." ] }, { "name": "Announcements", "modifier": "Default", "ty": { "Map": { "hasher": "Twox64Concat", "key": "T::AccountId", "value": "(Vec, T::BlockNumber>>,\n BalanceOf)", "unused": false } }, "default": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "documentation": [ " The announcements made by the proxy (key)." ] } ] }, "calls": [ { "name": "proxy", "arguments": [ { "name": "real", "ty": "T::AccountId" }, { "name": "force_proxy_type", "ty": "Option" }, { "name": "call", "ty": "Box<::Call>" } ], "documentation": [ " Dispatch the given `call` from an account that the sender is authorised for through", " `add_proxy`.", "", " Removes any corresponding announcement(s).", "", " The dispatch origin for this call must be _Signed_.", "", " Parameters:", " - `real`: The account that the proxy will make a call on behalf of.", " - `force_proxy_type`: Specify the exact proxy type to be used and checked for this call.", " - `call`: The call to be made by the `real` account.", "", " # ", " Weight is a function of the number of proxies the user has (P).", " # " ] }, { "name": "add_proxy", "arguments": [ { "name": "delegate", "ty": "T::AccountId" }, { "name": "proxy_type", "ty": "T::ProxyType" }, { "name": "delay", "ty": "T::BlockNumber" } ], "documentation": [ " Register a proxy account for the sender that is able to make calls on its behalf.", "", " The dispatch origin for this call must be _Signed_.", "", " Parameters:", " - `proxy`: The account that the `caller` would like to make a proxy.", " - `proxy_type`: The permissions allowed for this proxy account.", " - `delay`: The announcement period required of the initial proxy. Will generally be", " zero.", "", " # ", " Weight is a function of the number of proxies the user has (P).", " # " ] }, { "name": "remove_proxy", "arguments": [ { "name": "delegate", "ty": "T::AccountId" }, { "name": "proxy_type", "ty": "T::ProxyType" }, { "name": "delay", "ty": "T::BlockNumber" } ], "documentation": [ " Unregister a proxy account for the sender.", "", " The dispatch origin for this call must be _Signed_.", "", " Parameters:", " - `proxy`: The account that the `caller` would like to remove as a proxy.", " - `proxy_type`: The permissions currently enabled for the removed proxy account.", "", " # ", " Weight is a function of the number of proxies the user has (P).", " # " ] }, { "name": "remove_proxies", "arguments": [], "documentation": [ " Unregister all proxy accounts for the sender.", "", " The dispatch origin for this call must be _Signed_.", "", " WARNING: This may be called on accounts created by `anonymous`, however if done, then", " the unreserved fees will be inaccessible. **All access to this account will be lost.**", "", " # ", " Weight is a function of the number of proxies the user has (P).", " # " ] }, { "name": "anonymous", "arguments": [ { "name": "proxy_type", "ty": "T::ProxyType" }, { "name": "delay", "ty": "T::BlockNumber" }, { "name": "index", "ty": "u16" } ], "documentation": [ " Spawn a fresh new account that is guaranteed to be otherwise inaccessible, and", " initialize it with a proxy of `proxy_type` for `origin` sender.", "", " Requires a `Signed` origin.", "", " - `proxy_type`: The type of the proxy that the sender will be registered as over the", " new account. This will almost always be the most permissive `ProxyType` possible to", " allow for maximum flexibility.", " - `index`: A disambiguation index, in case this is called multiple times in the same", " transaction (e.g. with `utility::batch`). Unless you're using `batch` you probably just", " want to use `0`.", " - `delay`: The announcement period required of the initial proxy. Will generally be", " zero.", "", " Fails with `Duplicate` if this has already been called in this transaction, from the", " same sender, with the same parameters.", "", " Fails if there are insufficient funds to pay for deposit.", "", " # ", " Weight is a function of the number of proxies the user has (P).", " # ", " TODO: Might be over counting 1 read" ] }, { "name": "kill_anonymous", "arguments": [ { "name": "spawner", "ty": "T::AccountId" }, { "name": "proxy_type", "ty": "T::ProxyType" }, { "name": "index", "ty": "u16" }, { "name": "height", "ty": "Compact" }, { "name": "ext_index", "ty": "Compact" } ], "documentation": [ " Removes a previously spawned anonymous proxy.", "", " WARNING: **All access to this account will be lost.** Any funds held in it will be", " inaccessible.", "", " Requires a `Signed` origin, and the sender account must have been created by a call to", " `anonymous` with corresponding parameters.", "", " - `spawner`: The account that originally called `anonymous` to create this account.", " - `index`: The disambiguation index originally passed to `anonymous`. Probably `0`.", " - `proxy_type`: The proxy type originally passed to `anonymous`.", " - `height`: The height of the chain when the call to `anonymous` was processed.", " - `ext_index`: The extrinsic index in which the call to `anonymous` was processed.", "", " Fails with `NoPermission` in case the caller is not a previously created anonymous", " account whose `anonymous` call has corresponding parameters.", "", " # ", " Weight is a function of the number of proxies the user has (P).", " # " ] }, { "name": "announce", "arguments": [ { "name": "real", "ty": "T::AccountId" }, { "name": "call_hash", "ty": "CallHashOf" } ], "documentation": [ " Publish the hash of a proxy-call that will be made in the future.", "", " This must be called some number of blocks before the corresponding `proxy` is attempted", " if the delay associated with the proxy relationship is greater than zero.", "", " No more than `MaxPending` announcements may be made at any one time.", "", " This will take a deposit of `AnnouncementDepositFactor` as well as", " `AnnouncementDepositBase` if there are no other pending announcements.", "", " The dispatch origin for this call must be _Signed_ and a proxy of `real`.", "", " Parameters:", " - `real`: The account that the proxy will make a call on behalf of.", " - `call_hash`: The hash of the call to be made by the `real` account.", "", " # ", " Weight is a function of:", " - A: the number of announcements made.", " - P: the number of proxies the user has.", " # " ] }, { "name": "remove_announcement", "arguments": [ { "name": "real", "ty": "T::AccountId" }, { "name": "call_hash", "ty": "CallHashOf" } ], "documentation": [ " Remove a given announcement.", "", " May be called by a proxy account to remove a call they previously announced and return", " the deposit.", "", " The dispatch origin for this call must be _Signed_.", "", " Parameters:", " - `real`: The account that the proxy will make a call on behalf of.", " - `call_hash`: The hash of the call to be made by the `real` account.", "", " # ", " Weight is a function of:", " - A: the number of announcements made.", " - P: the number of proxies the user has.", " # " ] }, { "name": "reject_announcement", "arguments": [ { "name": "delegate", "ty": "T::AccountId" }, { "name": "call_hash", "ty": "CallHashOf" } ], "documentation": [ " Remove the given announcement of a delegate.", "", " May be called by a target (proxied) account to remove a call that one of their delegates", " (`delegate`) has announced they want to execute. The deposit is returned.", "", " The dispatch origin for this call must be _Signed_.", "", " Parameters:", " - `delegate`: The account that previously announced the call.", " - `call_hash`: The hash of the call to be made.", "", " # ", " Weight is a function of:", " - A: the number of announcements made.", " - P: the number of proxies the user has.", " # " ] }, { "name": "proxy_announced", "arguments": [ { "name": "delegate", "ty": "T::AccountId" }, { "name": "real", "ty": "T::AccountId" }, { "name": "force_proxy_type", "ty": "Option" }, { "name": "call", "ty": "Box<::Call>" } ], "documentation": [ " Dispatch the given `call` from an account that the sender is authorized for through", " `add_proxy`.", "", " Removes any corresponding announcement(s).", "", " The dispatch origin for this call must be _Signed_.", "", " Parameters:", " - `real`: The account that the proxy will make a call on behalf of.", " - `force_proxy_type`: Specify the exact proxy type to be used and checked for this call.", " - `call`: The call to be made by the `real` account.", "", " # ", " Weight is a function of:", " - A: the number of announcements made.", " - P: the number of proxies the user has.", " # " ] } ], "event": [ { "name": "ProxyExecuted", "arguments": [ "DispatchResult" ], "documentation": [ " A proxy was executed correctly, with the given \\[result\\]." ] }, { "name": "AnonymousCreated", "arguments": [ "AccountId", "AccountId", "ProxyType", "u16" ], "documentation": [ " Anonymous account has been created by new proxy with given", " disambiguation index and proxy type. \\[anonymous, who, proxy_type, disambiguation_index\\]" ] }, { "name": "Announced", "arguments": [ "AccountId", "AccountId", "Hash" ], "documentation": [ " An announcement was placed to make a call in the future. \\[real, proxy, call_hash\\]" ] } ], "constants": [ { "name": "ProxyDepositBase", "ty": "BalanceOf", "value": [ 0, 132, 178, 149, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "documentation": [ " The base amount of currency needed to reserve for creating a proxy.", "", " This is held for an additional storage item whose value size is", " `sizeof(Balance)` bytes and whose key size is `sizeof(AccountId)` bytes." ] }, { "name": "ProxyDepositFactor", "ty": "BalanceOf", "value": [ 128, 102, 171, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "documentation": [ " The amount of currency needed per proxy added.", "", " This is held for adding 32 bytes plus an instance of `ProxyType` more into a pre-existing", " storage value. Thus, when configuring `ProxyDepositFactor` one should take into account", " `32 + proxy_type.encode().len()` bytes of data." ] }, { "name": "MaxProxies", "ty": "u16", "value": [ 32, 0 ], "documentation": [ " The maximum amount of proxies allowed for a single account." ] }, { "name": "MaxPending", "ty": "u32", "value": [ 32, 0, 0, 0 ], "documentation": [ " The maximum amount of time-delayed announcements that are allowed to be pending." ] }, { "name": "AnnouncementDepositBase", "ty": "BalanceOf", "value": [ 0, 132, 178, 149, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "documentation": [ " The base amount of currency needed to reserve for creating an announcement.", "", " This is held when a new storage item holding a `Balance` is created (typically 16 bytes)." ] }, { "name": "AnnouncementDepositFactor", "ty": "BalanceOf", "value": [ 0, 205, 86, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "documentation": [ " The amount of currency needed per announcement made.", "", " This is held for adding an `AccountId`, `Hash` and `BlockNumber` (typically 68 bytes)", " into a pre-existing storage value." ] } ], "errors": [ { "name": "TooMany", "documentation": [ " There are too many proxies registered or too many announcements pending." ] }, { "name": "NotFound", "documentation": [ " Proxy registration not found." ] }, { "name": "NotProxy", "documentation": [ " Sender is not a proxy of the account to be proxied." ] }, { "name": "Unproxyable", "documentation": [ " A call which is incompatible with the proxy type's filter was attempted." ] }, { "name": "Duplicate", "documentation": [ " Account is already a proxy." ] }, { "name": "NoPermission", "documentation": [ " Call may not be made by proxy because it may escalate its privileges." ] }, { "name": "Unannounced", "documentation": [ " Announcement, if made at all, was made too recently." ] }, { "name": "NoSelfProxy", "documentation": [ " Cannot add self as proxy." ] } ], "index": 29 }, { "name": "Multisig", "storage": { "prefix": "Multisig", "entries": [ { "name": "Multisigs", "modifier": "Optional", "ty": { "DoubleMap": { "hasher": "Twox64Concat", "key1": "T::AccountId", "key2": "[u8; 32]", "value": "Multisig, T::AccountId>", "key2_hasher": "Blake2_128Concat" } }, "default": [ 0 ], "documentation": [ " The set of open multisig operations." ] }, { "name": "Calls", "modifier": "Optional", "ty": { "Map": { "hasher": "Identity", "key": "[u8; 32]", "value": "(OpaqueCall, T::AccountId, BalanceOf)", "unused": false } }, "default": [ 0 ], "documentation": [] } ] }, "calls": [ { "name": "as_multi_threshold_1", "arguments": [ { "name": "other_signatories", "ty": "Vec" }, { "name": "call", "ty": "Box<::Call>" } ], "documentation": [ " Immediately dispatch a multi-signature call using a single approval from the caller.", "", " The dispatch origin for this call must be _Signed_.", "", " - `other_signatories`: The accounts (other than the sender) who are part of the", " multi-signature, but do not participate in the approval process.", " - `call`: The call to be executed.", "", " Result is equivalent to the dispatched result.", "", " # ", " O(Z + C) where Z is the length of the call and C its execution weight.", " -------------------------------", " - DB Weight: None", " - Plus Call Weight", " # " ] }, { "name": "as_multi", "arguments": [ { "name": "threshold", "ty": "u16" }, { "name": "other_signatories", "ty": "Vec" }, { "name": "maybe_timepoint", "ty": "Option>" }, { "name": "call", "ty": "OpaqueCall" }, { "name": "store_call", "ty": "bool" }, { "name": "max_weight", "ty": "Weight" } ], "documentation": [ " Register approval for a dispatch to be made from a deterministic composite account if", " approved by a total of `threshold - 1` of `other_signatories`.", "", " If there are enough, then dispatch the call.", "", " Payment: `DepositBase` will be reserved if this is the first approval, plus", " `threshold` times `DepositFactor`. It is returned once this dispatch happens or", " is cancelled.", "", " The dispatch origin for this call must be _Signed_.", "", " - `threshold`: The total number of approvals for this dispatch before it is executed.", " - `other_signatories`: The accounts (other than the sender) who can approve this", " dispatch. May not be empty.", " - `maybe_timepoint`: If this is the first approval, then this must be `None`. If it is", " not the first approval, then it must be `Some`, with the timepoint (block number and", " transaction index) of the first approval transaction.", " - `call`: The call to be executed.", "", " NOTE: Unless this is the final approval, you will generally want to use", " `approve_as_multi` instead, since it only requires a hash of the call.", "", " Result is equivalent to the dispatched result if `threshold` is exactly `1`. Otherwise", " on success, result is `Ok` and the result from the interior call, if it was executed,", " may be found in the deposited `MultisigExecuted` event.", "", " # ", " - `O(S + Z + Call)`.", " - Up to one balance-reserve or unreserve operation.", " - One passthrough operation, one insert, both `O(S)` where `S` is the number of", " signatories. `S` is capped by `MaxSignatories`, with weight being proportional.", " - One call encode & hash, both of complexity `O(Z)` where `Z` is tx-len.", " - One encode & hash, both of complexity `O(S)`.", " - Up to one binary search and insert (`O(logS + S)`).", " - I/O: 1 read `O(S)`, up to 1 mutate `O(S)`. Up to one remove.", " - One event.", " - The weight of the `call`.", " - Storage: inserts one item, value size bounded by `MaxSignatories`, with a", " deposit taken for its lifetime of", " `DepositBase + threshold * DepositFactor`.", " -------------------------------", " - DB Weight:", " - Reads: Multisig Storage, [Caller Account], Calls (if `store_call`)", " - Writes: Multisig Storage, [Caller Account], Calls (if `store_call`)", " - Plus Call Weight", " # " ] }, { "name": "approve_as_multi", "arguments": [ { "name": "threshold", "ty": "u16" }, { "name": "other_signatories", "ty": "Vec" }, { "name": "maybe_timepoint", "ty": "Option>" }, { "name": "call_hash", "ty": "[u8; 32]" }, { "name": "max_weight", "ty": "Weight" } ], "documentation": [ " Register approval for a dispatch to be made from a deterministic composite account if", " approved by a total of `threshold - 1` of `other_signatories`.", "", " Payment: `DepositBase` will be reserved if this is the first approval, plus", " `threshold` times `DepositFactor`. It is returned once this dispatch happens or", " is cancelled.", "", " The dispatch origin for this call must be _Signed_.", "", " - `threshold`: The total number of approvals for this dispatch before it is executed.", " - `other_signatories`: The accounts (other than the sender) who can approve this", " dispatch. May not be empty.", " - `maybe_timepoint`: If this is the first approval, then this must be `None`. If it is", " not the first approval, then it must be `Some`, with the timepoint (block number and", " transaction index) of the first approval transaction.", " - `call_hash`: The hash of the call to be executed.", "", " NOTE: If this is the final approval, you will want to use `as_multi` instead.", "", " # ", " - `O(S)`.", " - Up to one balance-reserve or unreserve operation.", " - One passthrough operation, one insert, both `O(S)` where `S` is the number of", " signatories. `S` is capped by `MaxSignatories`, with weight being proportional.", " - One encode & hash, both of complexity `O(S)`.", " - Up to one binary search and insert (`O(logS + S)`).", " - I/O: 1 read `O(S)`, up to 1 mutate `O(S)`. Up to one remove.", " - One event.", " - Storage: inserts one item, value size bounded by `MaxSignatories`, with a", " deposit taken for its lifetime of", " `DepositBase + threshold * DepositFactor`.", " ----------------------------------", " - DB Weight:", " - Read: Multisig Storage, [Caller Account]", " - Write: Multisig Storage, [Caller Account]", " # " ] }, { "name": "cancel_as_multi", "arguments": [ { "name": "threshold", "ty": "u16" }, { "name": "other_signatories", "ty": "Vec" }, { "name": "timepoint", "ty": "Timepoint" }, { "name": "call_hash", "ty": "[u8; 32]" } ], "documentation": [ " Cancel a pre-existing, on-going multisig transaction. Any deposit reserved previously", " for this operation will be unreserved on success.", "", " The dispatch origin for this call must be _Signed_.", "", " - `threshold`: The total number of approvals for this dispatch before it is executed.", " - `other_signatories`: The accounts (other than the sender) who can approve this", " dispatch. May not be empty.", " - `timepoint`: The timepoint (block number and transaction index) of the first approval", " transaction for this dispatch.", " - `call_hash`: The hash of the call to be executed.", "", " # ", " - `O(S)`.", " - Up to one balance-reserve or unreserve operation.", " - One passthrough operation, one insert, both `O(S)` where `S` is the number of", " signatories. `S` is capped by `MaxSignatories`, with weight being proportional.", " - One encode & hash, both of complexity `O(S)`.", " - One event.", " - I/O: 1 read `O(S)`, one remove.", " - Storage: removes one item.", " ----------------------------------", " - DB Weight:", " - Read: Multisig Storage, [Caller Account], Refund Account, Calls", " - Write: Multisig Storage, [Caller Account], Refund Account, Calls", " # " ] } ], "event": [ { "name": "NewMultisig", "arguments": [ "AccountId", "AccountId", "CallHash" ], "documentation": [ " A new multisig operation has begun. \\[approving, multisig, call_hash\\]" ] }, { "name": "MultisigApproval", "arguments": [ "AccountId", "Timepoint", "AccountId", "CallHash" ], "documentation": [ " A multisig operation has been approved by someone.", " \\[approving, timepoint, multisig, call_hash\\]" ] }, { "name": "MultisigExecuted", "arguments": [ "AccountId", "Timepoint", "AccountId", "CallHash", "DispatchResult" ], "documentation": [ " A multisig operation has been executed. \\[approving, timepoint, multisig, call_hash\\]" ] }, { "name": "MultisigCancelled", "arguments": [ "AccountId", "Timepoint", "AccountId", "CallHash" ], "documentation": [ " A multisig operation has been cancelled. \\[cancelling, timepoint, multisig, call_hash\\]" ] } ], "constants": [ { "name": "DepositBase", "ty": "BalanceOf", "value": [ 0, 140, 97, 197, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "documentation": [ " The base amount of currency needed to reserve for creating a multisig execution or to store", " a dispatch call for later." ] }, { "name": "DepositFactor", "ty": "BalanceOf", "value": [ 0, 208, 18, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "documentation": [ " The amount of currency needed per unit threshold when creating a multisig execution." ] }, { "name": "MaxSignatories", "ty": "u16", "value": [ 100, 0 ], "documentation": [ " The maximum amount of signatories allowed for a given multisig." ] } ], "errors": [ { "name": "MinimumThreshold", "documentation": [ " Threshold must be 2 or greater." ] }, { "name": "AlreadyApproved", "documentation": [ " Call is already approved by this signatory." ] }, { "name": "NoApprovalsNeeded", "documentation": [ " Call doesn't need any (more) approvals." ] }, { "name": "TooFewSignatories", "documentation": [ " There are too few signatories in the list." ] }, { "name": "TooManySignatories", "documentation": [ " There are too many signatories in the list." ] }, { "name": "SignatoriesOutOfOrder", "documentation": [ " The signatories were provided out of order; they should be ordered." ] }, { "name": "SenderInSignatories", "documentation": [ " The sender was contained in the other signatories; it shouldn't be." ] }, { "name": "NotFound", "documentation": [ " Multisig operation not found when attempting to cancel." ] }, { "name": "NotOwner", "documentation": [ " Only the account that originally created the multisig is able to cancel it." ] }, { "name": "NoTimepoint", "documentation": [ " No timepoint was given, yet the multisig operation is already underway." ] }, { "name": "WrongTimepoint", "documentation": [ " A different timepoint was given to the multisig operation that is underway." ] }, { "name": "UnexpectedTimepoint", "documentation": [ " A timepoint was given, yet no multisig operation is underway." ] }, { "name": "MaxWeightTooLow", "documentation": [ " The maximum weight information provided was too low." ] }, { "name": "AlreadyStored", "documentation": [ " The data to be stored is already stored." ] } ], "index": 30 }, { "name": "Bounties", "storage": { "prefix": "Treasury", "entries": [ { "name": "BountyCount", "modifier": "Default", "ty": { "Plain": "BountyIndex" }, "default": [ 0, 0, 0, 0 ], "documentation": [ " Number of bounty proposals that have been made." ] }, { "name": "Bounties", "modifier": "Optional", "ty": { "Map": { "hasher": "Twox64Concat", "key": "BountyIndex", "value": "Bounty, T::BlockNumber>", "unused": false } }, "default": [ 0 ], "documentation": [ " Bounties that have been made." ] }, { "name": "BountyDescriptions", "modifier": "Optional", "ty": { "Map": { "hasher": "Twox64Concat", "key": "BountyIndex", "value": "Vec", "unused": false } }, "default": [ 0 ], "documentation": [ " The description of each bounty." ] }, { "name": "BountyApprovals", "modifier": "Default", "ty": { "Plain": "Vec" }, "default": [ 0 ], "documentation": [ " Bounty indices that have been approved but not yet funded." ] } ] }, "calls": [ { "name": "propose_bounty", "arguments": [ { "name": "value", "ty": "Compact>" }, { "name": "description", "ty": "Vec" } ], "documentation": [ " Propose a new bounty.", "", " The dispatch origin for this call must be _Signed_.", "", " Payment: `TipReportDepositBase` will be reserved from the origin account, as well as", " `DataDepositPerByte` for each byte in `reason`. It will be unreserved upon approval,", " or slashed when rejected.", "", " - `curator`: The curator account whom will manage this bounty.", " - `fee`: The curator fee.", " - `value`: The total payment amount of this bounty, curator fee included.", " - `description`: The description of this bounty." ] }, { "name": "approve_bounty", "arguments": [ { "name": "bounty_id", "ty": "Compact" } ], "documentation": [ " Approve a bounty proposal. At a later time, the bounty will be funded and become active", " and the original deposit will be returned.", "", " May only be called from `T::ApproveOrigin`.", "", " # ", " - O(1).", " # " ] }, { "name": "propose_curator", "arguments": [ { "name": "bounty_id", "ty": "Compact" }, { "name": "curator", "ty": "::Source" }, { "name": "fee", "ty": "Compact>" } ], "documentation": [ " Assign a curator to a funded bounty.", "", " May only be called from `T::ApproveOrigin`.", "", " # ", " - O(1).", " # " ] }, { "name": "unassign_curator", "arguments": [ { "name": "bounty_id", "ty": "Compact" } ], "documentation": [ " Unassign curator from a bounty.", "", " This function can only be called by the `RejectOrigin` a signed origin.", "", " If this function is called by the `RejectOrigin`, we assume that the curator is malicious", " or inactive. As a result, we will slash the curator when possible.", "", " If the origin is the curator, we take this as a sign they are unable to do their job and", " they willingly give up. We could slash them, but for now we allow them to recover their", " deposit and exit without issue. (We may want to change this if it is abused.)", "", " Finally, the origin can be anyone if and only if the curator is \"inactive\". This allows", " anyone in the community to call out that a curator is not doing their due diligence, and", " we should pick a new curator. In this case the curator should also be slashed.", "", " # ", " - O(1).", " # " ] }, { "name": "accept_curator", "arguments": [ { "name": "bounty_id", "ty": "Compact" } ], "documentation": [ " Accept the curator role for a bounty.", " A deposit will be reserved from curator and refund upon successful payout.", "", " May only be called from the curator.", "", " # ", " - O(1).", " # " ] }, { "name": "award_bounty", "arguments": [ { "name": "bounty_id", "ty": "Compact" }, { "name": "beneficiary", "ty": "::Source" } ], "documentation": [ " Award bounty to a beneficiary account. The beneficiary will be able to claim the funds after a delay.", "", " The dispatch origin for this call must be the curator of this bounty.", "", " - `bounty_id`: Bounty ID to award.", " - `beneficiary`: The beneficiary account whom will receive the payout.", "", " # ", " - O(1).", " # " ] }, { "name": "claim_bounty", "arguments": [ { "name": "bounty_id", "ty": "Compact" } ], "documentation": [ " Claim the payout from an awarded bounty after payout delay.", "", " The dispatch origin for this call must be the beneficiary of this bounty.", "", " - `bounty_id`: Bounty ID to claim.", "", " # ", " - O(1).", " # " ] }, { "name": "close_bounty", "arguments": [ { "name": "bounty_id", "ty": "Compact" } ], "documentation": [ " Cancel a proposed or active bounty. All the funds will be sent to treasury and", " the curator deposit will be unreserved if possible.", "", " Only `T::RejectOrigin` is able to cancel a bounty.", "", " - `bounty_id`: Bounty ID to cancel.", "", " # ", " - O(1).", " # " ] }, { "name": "extend_bounty_expiry", "arguments": [ { "name": "bounty_id", "ty": "Compact" }, { "name": "_remark", "ty": "Vec" } ], "documentation": [ " Extend the expiry time of an active bounty.", "", " The dispatch origin for this call must be the curator of this bounty.", "", " - `bounty_id`: Bounty ID to extend.", " - `remark`: additional information.", "", " # ", " - O(1).", " # " ] } ], "event": [ { "name": "BountyProposed", "arguments": [ "BountyIndex" ], "documentation": [ " New bounty proposal. \\[index\\]" ] }, { "name": "BountyRejected", "arguments": [ "BountyIndex", "Balance" ], "documentation": [ " A bounty proposal was rejected; funds were slashed. \\[index, bond\\]" ] }, { "name": "BountyBecameActive", "arguments": [ "BountyIndex" ], "documentation": [ " A bounty proposal is funded and became active. \\[index\\]" ] }, { "name": "BountyAwarded", "arguments": [ "BountyIndex", "AccountId" ], "documentation": [ " A bounty is awarded to a beneficiary. \\[index, beneficiary\\]" ] }, { "name": "BountyClaimed", "arguments": [ "BountyIndex", "Balance", "AccountId" ], "documentation": [ " A bounty is claimed by beneficiary. \\[index, payout, beneficiary\\]" ] }, { "name": "BountyCanceled", "arguments": [ "BountyIndex" ], "documentation": [ " A bounty is cancelled. \\[index\\]" ] }, { "name": "BountyExtended", "arguments": [ "BountyIndex" ], "documentation": [ " A bounty expiry is extended. \\[index\\]" ] } ], "constants": [ { "name": "DataDepositPerByte", "ty": "BalanceOf", "value": [ 0, 225, 245, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "documentation": [ " The amount held on deposit per byte within bounty description." ] }, { "name": "BountyDepositBase", "ty": "BalanceOf", "value": [ 0, 228, 11, 84, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "documentation": [ " The amount held on deposit for placing a bounty proposal." ] }, { "name": "BountyDepositPayoutDelay", "ty": "T::BlockNumber", "value": [ 0, 194, 1, 0 ], "documentation": [ " The delay period for which a bounty beneficiary need to wait before claim the payout." ] }, { "name": "BountyUpdatePeriod", "ty": "T::BlockNumber", "value": [ 128, 198, 19, 0 ], "documentation": [ " Bounty duration in blocks." ] }, { "name": "BountyCuratorDeposit", "ty": "Permill", "value": [ 32, 161, 7, 0 ], "documentation": [ " Percentage of the curator fee that will be reserved upfront as deposit for bounty curator." ] }, { "name": "BountyValueMinimum", "ty": "BalanceOf", "value": [ 0, 232, 118, 72, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "documentation": [ " Minimum value for a bounty." ] }, { "name": "MaximumReasonLength", "ty": "u32", "value": [ 0, 64, 0, 0 ], "documentation": [ " Maximum acceptable reason length." ] } ], "errors": [ { "name": "InsufficientProposersBalance", "documentation": [ " Proposer's balance is too low." ] }, { "name": "InvalidIndex", "documentation": [ " No proposal or bounty at that index." ] }, { "name": "ReasonTooBig", "documentation": [ " The reason given is just too big." ] }, { "name": "UnexpectedStatus", "documentation": [ " The bounty status is unexpected." ] }, { "name": "RequireCurator", "documentation": [ " Require bounty curator." ] }, { "name": "InvalidValue", "documentation": [ " Invalid bounty value." ] }, { "name": "InvalidFee", "documentation": [ " Invalid bounty fee." ] }, { "name": "PendingPayout", "documentation": [ " A bounty payout is pending.", " To cancel the bounty, you must unassign and slash the curator." ] }, { "name": "Premature", "documentation": [ " The bounties cannot be claimed/closed because it's still in the countdown period." ] } ], "index": 34 }, { "name": "Tips", "storage": { "prefix": "Treasury", "entries": [ { "name": "Tips", "modifier": "Optional", "ty": { "Map": { "hasher": "Twox64Concat", "key": "T::Hash", "value": "OpenTip, T::BlockNumber, T::Hash>", "unused": false } }, "default": [ 0 ], "documentation": [ " TipsMap that are not yet completed. Keyed by the hash of `(reason, who)` from the value.", " This has the insecure enumerable hash function since the key itself is already", " guaranteed to be a secure hash." ] }, { "name": "Reasons", "modifier": "Optional", "ty": { "Map": { "hasher": "Identity", "key": "T::Hash", "value": "Vec", "unused": false } }, "default": [ 0 ], "documentation": [ " Simple preimage lookup from the reason's hash to the original data. Again, has an", " insecure enumerable hash since the key is guaranteed to be the result of a secure hash." ] } ] }, "calls": [ { "name": "report_awesome", "arguments": [ { "name": "reason", "ty": "Vec" }, { "name": "who", "ty": "T::AccountId" } ], "documentation": [ " Report something `reason` that deserves a tip and claim any eventual the finder's fee.", "", " The dispatch origin for this call must be _Signed_.", "", " Payment: `TipReportDepositBase` will be reserved from the origin account, as well as", " `DataDepositPerByte` for each byte in `reason`.", "", " - `reason`: The reason for, or the thing that deserves, the tip; generally this will be", " a UTF-8-encoded URL.", " - `who`: The account which should be credited for the tip.", "", " Emits `NewTip` if successful.", "", " # ", " - Complexity: `O(R)` where `R` length of `reason`.", " - encoding and hashing of 'reason'", " - DbReads: `Reasons`, `Tips`", " - DbWrites: `Reasons`, `Tips`", " # " ] }, { "name": "retract_tip", "arguments": [ { "name": "hash", "ty": "T::Hash" } ], "documentation": [ " Retract a prior tip-report from `report_awesome`, and cancel the process of tipping.", "", " If successful, the original deposit will be unreserved.", "", " The dispatch origin for this call must be _Signed_ and the tip identified by `hash`", " must have been reported by the signing account through `report_awesome` (and not", " through `tip_new`).", "", " - `hash`: The identity of the open tip for which a tip value is declared. This is formed", " as the hash of the tuple of the original tip `reason` and the beneficiary account ID.", "", " Emits `TipRetracted` if successful.", "", " # ", " - Complexity: `O(1)`", " - Depends on the length of `T::Hash` which is fixed.", " - DbReads: `Tips`, `origin account`", " - DbWrites: `Reasons`, `Tips`, `origin account`", " # " ] }, { "name": "tip_new", "arguments": [ { "name": "reason", "ty": "Vec" }, { "name": "who", "ty": "T::AccountId" }, { "name": "tip_value", "ty": "Compact>" } ], "documentation": [ " Give a tip for something new; no finder's fee will be taken.", "", " The dispatch origin for this call must be _Signed_ and the signing account must be a", " member of the `Tippers` set.", "", " - `reason`: The reason for, or the thing that deserves, the tip; generally this will be", " a UTF-8-encoded URL.", " - `who`: The account which should be credited for the tip.", " - `tip_value`: The amount of tip that the sender would like to give. The median tip", " value of active tippers will be given to the `who`.", "", " Emits `NewTip` if successful.", "", " # ", " - Complexity: `O(R + T)` where `R` length of `reason`, `T` is the number of tippers.", " - `O(T)`: decoding `Tipper` vec of length `T`", " `T` is charged as upper bound given by `ContainsLengthBound`.", " The actual cost depends on the implementation of `T::Tippers`.", " - `O(R)`: hashing and encoding of reason of length `R`", " - DbReads: `Tippers`, `Reasons`", " - DbWrites: `Reasons`, `Tips`", " # " ] }, { "name": "tip", "arguments": [ { "name": "hash", "ty": "T::Hash" }, { "name": "tip_value", "ty": "Compact>" } ], "documentation": [ " Declare a tip value for an already-open tip.", "", " The dispatch origin for this call must be _Signed_ and the signing account must be a", " member of the `Tippers` set.", "", " - `hash`: The identity of the open tip for which a tip value is declared. This is formed", " as the hash of the tuple of the hash of the original tip `reason` and the beneficiary", " account ID.", " - `tip_value`: The amount of tip that the sender would like to give. The median tip", " value of active tippers will be given to the `who`.", "", " Emits `TipClosing` if the threshold of tippers has been reached and the countdown period", " has started.", "", " # ", " - Complexity: `O(T)` where `T` is the number of tippers.", " decoding `Tipper` vec of length `T`, insert tip and check closing,", " `T` is charged as upper bound given by `ContainsLengthBound`.", " The actual cost depends on the implementation of `T::Tippers`.", "", " Actually weight could be lower as it depends on how many tips are in `OpenTip` but it", " is weighted as if almost full i.e of length `T-1`.", " - DbReads: `Tippers`, `Tips`", " - DbWrites: `Tips`", " # " ] }, { "name": "close_tip", "arguments": [ { "name": "hash", "ty": "T::Hash" } ], "documentation": [ " Close and payout a tip.", "", " The dispatch origin for this call must be _Signed_.", "", " The tip identified by `hash` must have finished its countdown period.", "", " - `hash`: The identity of the open tip for which a tip value is declared. This is formed", " as the hash of the tuple of the original tip `reason` and the beneficiary account ID.", "", " # ", " - Complexity: `O(T)` where `T` is the number of tippers.", " decoding `Tipper` vec of length `T`.", " `T` is charged as upper bound given by `ContainsLengthBound`.", " The actual cost depends on the implementation of `T::Tippers`.", " - DbReads: `Tips`, `Tippers`, `tip finder`", " - DbWrites: `Reasons`, `Tips`, `Tippers`, `tip finder`", " # " ] }, { "name": "slash_tip", "arguments": [ { "name": "hash", "ty": "T::Hash" } ], "documentation": [ " Remove and slash an already-open tip.", "", " May only be called from `T::RejectOrigin`.", "", " As a result, the finder is slashed and the deposits are lost.", "", " Emits `TipSlashed` if successful.", "", " # ", " `T` is charged as upper bound given by `ContainsLengthBound`.", " The actual cost depends on the implementation of `T::Tippers`.", " # " ] } ], "event": [ { "name": "NewTip", "arguments": [ "Hash" ], "documentation": [ " A new tip suggestion has been opened. \\[tip_hash\\]" ] }, { "name": "TipClosing", "arguments": [ "Hash" ], "documentation": [ " A tip suggestion has reached threshold and is closing. \\[tip_hash\\]" ] }, { "name": "TipClosed", "arguments": [ "Hash", "AccountId", "Balance" ], "documentation": [ " A tip suggestion has been closed. \\[tip_hash, who, payout\\]" ] }, { "name": "TipRetracted", "arguments": [ "Hash" ], "documentation": [ " A tip suggestion has been retracted. \\[tip_hash\\]" ] }, { "name": "TipSlashed", "arguments": [ "Hash", "AccountId", "Balance" ], "documentation": [ " A tip suggestion has been slashed. \\[tip_hash, finder, deposit\\]" ] } ], "constants": [ { "name": "TipCountdown", "ty": "T::BlockNumber", "value": [ 64, 56, 0, 0 ], "documentation": [ " The period for which a tip remains open after is has achieved threshold tippers." ] }, { "name": "TipFindersFee", "ty": "Percent", "value": [ 20 ], "documentation": [ " The amount of the final tip which goes to the original reporter of the tip." ] }, { "name": "TipReportDepositBase", "ty": "BalanceOf", "value": [ 0, 228, 11, 84, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "documentation": [ " The amount held on deposit for placing a tip report." ] }, { "name": "DataDepositPerByte", "ty": "BalanceOf", "value": [ 0, 225, 245, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "documentation": [ " The amount held on deposit per byte within the tip report reason." ] }, { "name": "MaximumReasonLength", "ty": "u32", "value": [ 0, 64, 0, 0 ], "documentation": [ " Maximum acceptable reason length." ] } ], "errors": [ { "name": "ReasonTooBig", "documentation": [ " The reason given is just too big." ] }, { "name": "AlreadyKnown", "documentation": [ " The tip was already found/started." ] }, { "name": "UnknownTip", "documentation": [ " The tip hash is unknown." ] }, { "name": "NotFinder", "documentation": [ " The account attempting to retract the tip is not the finder of the tip." ] }, { "name": "StillOpen", "documentation": [ " The tip cannot be claimed/closed because there are not enough tippers yet." ] }, { "name": "Premature", "documentation": [ " The tip cannot be claimed/closed because it's still in the countdown period." ] } ], "index": 35 }, { "name": "ElectionProviderMultiPhase", "storage": { "prefix": "ElectionProviderMultiPhase", "entries": [ { "name": "Round", "modifier": "Default", "ty": { "Plain": "u32" }, "default": [ 1, 0, 0, 0 ], "documentation": [ " Internal counter for the number of rounds.", "", " This is useful for de-duplication of transactions submitted to the pool, and general", " diagnostics of the pallet.", "", " This is merely incremented once per every time that an upstream `elect` is called." ] }, { "name": "CurrentPhase", "modifier": "Default", "ty": { "Plain": "Phase" }, "default": [ 0 ], "documentation": [ " Current phase." ] }, { "name": "QueuedSolution", "modifier": "Optional", "ty": { "Plain": "ReadySolution" }, "default": [ 0 ], "documentation": [ " Current best solution, signed or unsigned, queued to be returned upon `elect`." ] }, { "name": "Snapshot", "modifier": "Optional", "ty": { "Plain": "RoundSnapshot" }, "default": [ 0 ], "documentation": [ " Snapshot data of the round.", "", " This is created at the beginning of the signed phase and cleared upon calling `elect`." ] }, { "name": "DesiredTargets", "modifier": "Optional", "ty": { "Plain": "u32" }, "default": [ 0 ], "documentation": [ " Desired number of targets to elect for this round.", "", " Only exists when [`Snapshot`] is present." ] }, { "name": "SnapshotMetadata", "modifier": "Optional", "ty": { "Plain": "SolutionOrSnapshotSize" }, "default": [ 0 ], "documentation": [ " The metadata of the [`RoundSnapshot`]", "", " Only exists when [`Snapshot`] is present." ] } ] }, "calls": [ { "name": "submit_unsigned", "arguments": [ { "name": "solution", "ty": "RawSolution>" }, { "name": "witness", "ty": "SolutionOrSnapshotSize" } ], "documentation": [ " Submit a solution for the unsigned phase.", "", " The dispatch origin fo this call must be __none__.", "", " This submission is checked on the fly. Moreover, this unsigned solution is only", " validated when submitted to the pool from the **local** node. Effectively, this means", " that only active validators can submit this transaction when authoring a block (similar", " to an inherent).", "", " To prevent any incorrect solution (and thus wasted time/weight), this transaction will", " panic if the solution submitted by the validator is invalid in any way, effectively", " putting their authoring reward at risk.", "", " No deposit or reward is associated with this submission." ] } ], "event": [ { "name": "SolutionStored", "arguments": [ "ElectionCompute" ], "documentation": [ " A solution was stored with the given compute.", "", " If the solution is signed, this means that it hasn't yet been processed. If the", " solution is unsigned, this means that it has also been processed." ] }, { "name": "ElectionFinalized", "arguments": [ "Option" ], "documentation": [ " The election has been finalized, with `Some` of the given computation, or else if the", " election failed, `None`." ] }, { "name": "Rewarded", "arguments": [ "AccountId" ], "documentation": [ " An account has been rewarded for their signed submission being finalized." ] }, { "name": "Slashed", "arguments": [ "AccountId" ], "documentation": [ " An account has been slashed for submitting an invalid signed submission." ] }, { "name": "SignedPhaseStarted", "arguments": [ "u32" ], "documentation": [ " The signed phase of the given round has started." ] }, { "name": "UnsignedPhaseStarted", "arguments": [ "u32" ], "documentation": [ " The unsigned phase of the given round has started." ] } ], "constants": [ { "name": "UnsignedPhase", "ty": "T::BlockNumber", "value": [ 88, 2, 0, 0 ], "documentation": [ " Duration of the unsigned phase." ] }, { "name": "SignedPhase", "ty": "T::BlockNumber", "value": [ 0, 0, 0, 0 ], "documentation": [ " Duration of the signed phase." ] }, { "name": "SolutionImprovementThreshold", "ty": "Perbill", "value": [ 32, 161, 7, 0 ], "documentation": [ " The minimum amount of improvement to the solution score that defines a solution as", " \"better\" (in any phase)." ] } ], "errors": [ { "name": "PreDispatchEarlySubmission", "documentation": [ " Submission was too early." ] }, { "name": "PreDispatchWrongWinnerCount", "documentation": [ " Wrong number of winners presented." ] }, { "name": "PreDispatchWeakSubmission", "documentation": [ " Submission was too weak, score-wise." ] } ], "index": 36 } ], "extrinsic": { "version": 4, "signed_extensions": [ "CheckSpecVersion", "CheckTxVersion", "CheckGenesis", "CheckMortality", "CheckNonce", "CheckWeight", "ChargeTransactionPayment", "PrevalidateAttests" ] } } }