Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found
Select Git revision
  • 1000i100-test
  • 105_gitlab_container_registry
  • cgeek/issue-297-cpu
  • ci_cache
  • debug/podman
  • elois-compose-metrics
  • elois-duniter-storage
  • elois-smoldot
  • feature/dc-dump
  • feature/distance-rule
  • feature/show_milestone
  • fix-252
  • gdev-800-tests
  • hugo-release/runtime-701
  • hugo-tmp-dockerfile-cache
  • hugo/195-doc
  • hugo/195-graphql-schema
  • hugo/distance-precompute
  • hugo/endpoint-gossip
  • hugo/tmp-0.9.1
  • master
  • network/gdev-800
  • network/gdev-802
  • network/gdev-803
  • network/gdev-900
  • pini-check-password
  • release/client-800.2
  • release/hugo-chainspec-gdev5
  • release/poka-chainspec-gdev5
  • release/poka-chainspec-gdev5-pini-docker
  • release/runtime-100
  • release/runtime-200
  • release/runtime-300
  • release/runtime-400
  • release/runtime-401
  • release/runtime-500
  • release/runtime-600
  • release/runtime-700
  • release/runtime-701
  • release/runtime-800
  • tests/distance-with-oracle
  • tuxmain/anonymous-tx
  • tuxmain/benchmark-distance
  • update-docker-compose-rpc-squid-names
  • gdev-800
  • gdev-800-0.8.0
  • gdev-802
  • gdev-803
  • gdev-900-0.10.0
  • gdev-900-0.10.1
  • gdev-900-0.9.0
  • gdev-900-0.9.1
  • gdev-900-0.9.2
  • runtime-100
  • runtime-101
  • runtime-102
  • runtime-103
  • runtime-104
  • runtime-105
  • runtime-200
  • runtime-201
  • runtime-300
  • runtime-301
  • runtime-302
  • runtime-303
  • runtime-400
  • runtime-401
  • runtime-500
  • runtime-600
  • runtime-700
  • runtime-701
  • runtime-800
  • runtime-800-backup
  • runtime-800-bis
  • runtime-801
  • v0.1.0
  • v0.2.0
  • v0.3.0
  • v0.4.0
  • v0.4.1
80 results

Target

Select target project
  • nodes/rust/duniter-v2s
  • llaq/lc-core-substrate
  • pini-gh/duniter-v2s
  • vincentux/duniter-v2s
  • mildred/duniter-v2s
  • d0p1/duniter-v2s
  • bgallois/duniter-v2s
  • Nicolas80/duniter-v2s
8 results
Select Git revision
  • distance
  • elois-ci-binary-release
  • elois-compose-metrics
  • elois-duniter-storage
  • elois-fix-85
  • elois-opti-cert
  • elois-remove-renewable-period
  • elois-rework-certs
  • elois-smoldot
  • elois-substrate-v0.9.23
  • elois-technical-commitee
  • hugo-cucumber-identity
  • master
  • no-bootnodes
  • poc-oneshot-accounts
  • release/runtime-100
  • release/runtime-200
  • ts-types
  • ud-time-64
  • runtime-100
  • runtime-101
  • runtime-102
  • runtime-103
  • runtime-104
  • runtime-105
  • runtime-200
  • runtime-201
  • v0.1.0
28 results
Show changes
Showing
with 8788 additions and 1323 deletions
#!/bin/bash
# Custom startup if a first argument is present and is equal to '--'
# then we just run duniter with the provided arguments (but the '--')
# without applying all the automated configuration below
if [ "$1" = -- ]; then
shift
distance-oracle "$@"
else
ORACLE_RESULT_DIR="${ORACLE_RESULT_DIR:-/distance}"
ORACLE_EXECUTION_INTERVAL="${ORACLE_EXECUTION_INTERVAL:-1800}"
ORACLE_RPC_URL="${ORACLE_RPC_URL:-ws://127.0.0.1:9944}"
ORACLE_LOG_LEVEL="${ORACLE_LOG_LEVEL:-info}"
while [ true ]; do
distance-oracle --evaluation-result-dir "$ORACLE_RESULT_DIR" --rpc-url "$ORACLE_RPC_URL" --log "$ORACLE_LOG_LEVEL"
echo "Waiting $ORACLE_EXECUTION_INTERVAL seconds before next execution..."
sleep $ORACLE_EXECUTION_INTERVAL
done
fi
#!/bin/bash #!/bin/bash
# Custom startup if a first argument is present and is equal to '--'
# then we just run duniter with the provided arguments (but the '--')
# without applying all the automated configuration below
if [ "$1" = -- ]; then
shift
exec duniter "$@"
fi
# Normal startup
function boolean () { function boolean () {
echo "$1" | sed -E 's/^(true|yes|1)$/true/i' echo "$1" | sed -E 's/^(true|yes|1)$/true/i'
} }
...@@ -12,12 +21,8 @@ function ternary () { ...@@ -12,12 +21,8 @@ function ternary () {
fi fi
} }
if [ -n "$DUNITER_INSTANCE_NAME" ]; then # Define chain name at the beginning
set -- "$@" --name "$DUNITER_INSTANCE_NAME" # with #274 we could have default given in network branch
fi
DUNITER_DISABLE_PROMETHEUS=$(boolean "${DUNITER_DISABLE_PROMETHEUS:-false}")
DUNITER_CHAIN_NAME="${DUNITER_CHAIN_NAME:-dev}" DUNITER_CHAIN_NAME="${DUNITER_CHAIN_NAME:-dev}"
case "$DUNITER_CHAIN_NAME" in case "$DUNITER_CHAIN_NAME" in
dev) dev)
...@@ -28,10 +33,93 @@ case "$DUNITER_CHAIN_NAME" in ...@@ -28,10 +33,93 @@ case "$DUNITER_CHAIN_NAME" in
;; ;;
esac esac
# Node name will appear on network
DUNITER_NODE_NAME="${DUNITER_NODE_NAME:-$DUNITER_INSTANCE_NAME}"
if [ -n "$DUNITER_NODE_NAME" ]; then
set -- "$@" --name "$DUNITER_NODE_NAME"
fi
# Path of key file. Should be generated below if not present before starting Duniter
_DUNITER_KEY_FILE=/var/lib/duniter/node.key
set -- "$@" --node-key-file "$_DUNITER_KEY_FILE"
# Generate node.key if not existing (chain name is required)
if [ ! -f "$_DUNITER_KEY_FILE" ]; then
echo "Generating node key file '$_DUNITER_KEY_FILE'..."
duniter key generate-node-key --file "$_DUNITER_KEY_FILE" "${chain[@]}"
else
echo "Node key file '$_DUNITER_KEY_FILE' exists."
fi
# Log peer ID
_DUNITER_PEER_ID="$(duniter key inspect-node-key --file "$_DUNITER_KEY_FILE")"
echo "Node peer ID is '$_DUNITER_PEER_ID'."
# Define public address (with dns, correct port and protocol for instance)
if [ -n "$DUNITER_PUBLIC_ADDR" ]; then
set -- "$@" --public-addr "$DUNITER_PUBLIC_ADDR"
fi
# Define public RPC endpoint (gossiped on the network)
if [ -n "$DUNITER_PUBLIC_RPC" ]; then
set -- "$@" --public-rpc "$DUNITER_PUBLIC_RPC"
fi
# Define public Squid endpoint (gossiped on the network)
if [ -n "$DUNITER_PUBLIC_SQUID" ]; then
set -- "$@" --public-squid "$DUNITER_PUBLIC_SQUID"
fi
# Define public endpoints from JSON file (gossiped on the network)
if [ -n "$DUNITER_PUBLIC_ENDPOINTS" ]; then
set -- "$@" --public-endpoints "$DUNITER_PUBLIC_ENDPOINTS"
fi
# Define listen address (inside docker)
if [ -n "$DUNITER_LISTEN_ADDR" ]; then
set -- "$@" --listen-addr "$DUNITER_LISTEN_ADDR"
fi
DUNITER_RPC_CORS="${DUNITER_RPC_CORS:-all}"
set -- "$@" --rpc-cors "$DUNITER_RPC_CORS"
# In case of validator, unsafe rpc methods are needed (like rotate_key) and should not be exposed publicly
DUNITER_VALIDATOR=$(boolean "${DUNITER_VALIDATOR:-false}")
if [ "$DUNITER_VALIDATOR" = true ]; then
set -- "$@" --rpc-methods Unsafe --validator
fi
DUNITER_DISABLE_PROMETHEUS=$(boolean "${DUNITER_DISABLE_PROMETHEUS:-false}")
if [ "$DUNITER_DISABLE_PROMETHEUS" = true ]; then
set -- "$@" --no-prometheus
fi
DUNITER_DISABLE_TELEMETRY=$(boolean "${DUNITER_DISABLE_TELEMETRY:-false}")
if [ "$DUNITER_DISABLE_TELEMETRY" = true ]; then
set -- "$@" --no-telemetry
fi
# Set pruning profile
DUNITER_PRUNING_PROFILE="${DUNITER_PRUNING_PROFILE:-default}"
case "$DUNITER_PRUNING_PROFILE" in
default)
;;
archive)
set -- "$@" --state-pruning archive --blocks-pruning archive
;;
light)
set -- "$@" --blocks-pruning 14400
;;
*)
echo "ERROR: ignoring unknown DUNITER_PRUNING_PROFILE value '$DUNITER_PRUNING_PROFILE'" >&2
;;
esac
# Set main command
# Since we are inside docker, we can bind to all interfaces.
# User will bind port to host interface or set reverse proxy when needed.
set -- "$@" \ set -- "$@" \
"${chain[@]}" \ "${chain[@]}" \
$(ternary "$DUNITER_DISABLE_PROMETHEUS" --no-prometheus) \ -d /var/lib/duniter --unsafe-rpc-external
-d /var/lib/duniter --unsafe-rpc-external --unsafe-ws-external
echo "Starting duniter with parameters:" "$@" echo "Starting duniter with parameters:" "$@"
exec duniter "$@" exec duniter "$@"
# Manual for wallet developers
This functional documentation presents how wallets can interact with the blockchain.
It is intended to complete the [runtime calls documentation](./runtime-calls.md) in a runtime-specific way to fit the real needs of wallet developers.
NOTE : a more detailed doc is available at <https://duniter.org/wiki/duniter-v2/doc/>
## Notations
1 ĞD = 100 units
## Account existence
An account exists if and only if it contains at least the existential deposit (`balances.existentialDeposit` = 1 ĞD).
## Become member
Only use `identity` pallet.
1. The account that wants to gain membership needs to exists.
1. Any account that already has membership and respects the identity creation period can create an identity for another account, using `identity.createIdentity`.
1. The account has to confirm its identity with a name, using `identity.confirmIdentity`. The name must be ASCII alphanumeric, punctuation or space characters: `` /^[-!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~a-zA-Z0-9 ]{3,64}$/ `` (additionally, trailing spaces and double spaces are forbidden, as a phishing countermeasure). If the name is already used, the call will fail.
1. 4 different member accounts must certify the account using `cert.addCert`.
1. The distance evaluation must be requested for the pending identity using `distance.requestDistanceEvaluation`.
1. 3 distance sessions later, if the distance rule is respected, identity is validated automatically.
## Change key
A member can request a key change via the `identity.change_onwner_key` call. It needs the following SCALE encoded (see SCALE encoding section below) payload:
- The new owner key payload prefix (rust definition: `b"icok"`)
- the genesis block hash. (rust type `[u8; 32]` (`H256`))
- The identity index (rust type `u64`)
- The old key (rust type `u64`)
This payload must be signed with the new key.
## Revoke an identity
Revoking an identity makes it lose its membership, hence UD creation and governance rights. Other data such as balance will remain.
This feature is useful in case the user has lost their private key since the revocation document can be made in advance.
### Generate the revocation payload
The revocation needs this SCALE encoded (see SCALE encoding section below) payload:
- The revocation payload prefix (rust definition: `b"revo"`)
- The identity index (rust type `u64`)
- the genesis block hash. (rust type `[u8; 32]` (`H256`))
This payload must be signed with the corresponding revocation key.
### Effectively revoke the identity
1. From any origin that can pay the fee, use `identity.revokeIdentity` with the revocation payload.
## SCALE encoding
SCALE codec documentation: https://docs.substrate.io/reference/scale-codec/.
At the end of this documentation you'll find links to SCALE codec implementation for other languages.
...@@ -2,771 +2,791 @@ ...@@ -2,771 +2,791 @@
Calls are categorized according to the dispatch origin they require: Calls are categorized according to the dispatch origin they require:
1. User calls: the dispatch origin for this kind of call must be Signed by 1. **User calls**: the dispatch origin for this kind of call must be signed by
the transactor. This is the only call category that can be submitted with an extrinsic. the transactor. This is the only call category that can be submitted with an extrinsic.
1. Root calls: This kind of call requires a special origin that can only be invoked 1. **Root calls**: This kind of call requires a special origin that can only be invoked
through on-chain governance mechanisms. through on-chain governance mechanisms.
1. Inherent calls: This kind of call is invoked by the author of the block itself 1. **Inherent calls**: This kind of call is invoked by the author of the block itself
(usually automatically by the node). (usually automatically by the node).
1. **Disabled calls**: These calls can not be called directly, they are reserved for internal use by other runtime calls.
We only document user calls below.
## User calls There are **65** user calls from **17** pallets.
There are **53** user calls organized in **18** pallets. ## Account - 1
### 2: Scheduler ### unlink_identity - 0
<details><summary>0: schedule(when, maybe_periodic, priority, call)</summary> <details><summary><code>unlink_identity()</code></summary>
<p>
### Index Taking 0.0106 % of a block.
```rust
```
</details>
`0`
### Documentation
Anonymously schedule a task. Unlink the identity associated with the account.
### Types of parameters ## Balances - 6
### transfer_allow_death - 0
<details><summary><code>transfer_allow_death(dest, value)</code></summary>
Taking 0.0186 % of a block.
```rust ```rust
when: T::BlockNumber, dest: AccountIdLookupOf<T>
maybe_periodic: Option<schedule::Period<T::BlockNumber>>, value: T::Balance
priority: schedule::Priority,
call: Box<CallOrHashOf<T>>
``` ```
</p>
</details> </details>
<details><summary>1: cancel(when, index)</summary>
<p>
### Index
`1` Transfer some liquid free balance to another account.
`transfer_allow_death` will set the `FreeBalance` of the sender and receiver.
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.
### Documentation ### transfer_keep_alive - 3
Cancel an anonymously scheduled task. <details><summary><code>transfer_keep_alive(dest, value)</code></summary>
### Types of parameters Taking 0.0119 % of a block.
```rust ```rust
when: T::BlockNumber, dest: AccountIdLookupOf<T>
index: u32 value: T::Balance
``` ```
</p>
</details> </details>
<details><summary>2: schedule_named(id, when, maybe_periodic, priority, call)</summary>
<p>
### Index
`2` Same as the [`transfer_allow_death`] call, but with a check that the transfer will not
kill the origin account.
99% of the time you want [`transfer_allow_death`] instead.
### Documentation [`transfer_allow_death`]: struct.Pallet.html#method.transfer
Schedule a named task. ### transfer_all - 4
### Types of parameters <details><summary><code>transfer_all(dest, keep_alive)</code></summary>
Taking 0.0122 % of a block.
```rust ```rust
id: Vec<u8>, dest: AccountIdLookupOf<T>
when: T::BlockNumber, keep_alive: bool
maybe_periodic: Option<schedule::Period<T::BlockNumber>>,
priority: schedule::Priority,
call: Box<CallOrHashOf<T>>
``` ```
</p>
</details> </details>
<details><summary>3: cancel_named(id)</summary>
<p>
### Index
`3` Transfer the entire transferable balance from the caller account.
NOTE: This function only attempts to transfer _transferable_ balances. This means that
any locked, reserved, or existential deposits (when `keep_alive` is `true`), will not be
transferred by this function. To ensure that this function results in a killed account,
you might need to prepare the account by removing any reference counters, storage
deposits, etc...
The dispatch origin of this call must be Signed.
- `dest`: The recipient of the transfer.
- `keep_alive`: A boolean to determine if the `transfer_all` operation should send all
of the funds the account has, causing the sender account to be killed (false), or
transfer everything except at least the existential deposit, which will guarantee to
keep the sender account alive (true).
## OneshotAccount - 7
### Documentation ### create_oneshot_account - 0
Cancel a named scheduled task. <details><summary><code>create_oneshot_account(dest, value)</code></summary>
### Types of parameters Taking 0.0115 % of a block.
```rust ```rust
id: Vec<u8> dest: <T::Lookup as StaticLookup>::Source
value: BalanceOf<T>
``` ```
</p>
</details> </details>
<details><summary>4: schedule_after(after, maybe_periodic, priority, call)</summary>
<p>
### Index
`4` Create an account that can only be consumed once
### Documentation - `dest`: The oneshot account to be created.
- `balance`: The balance to be transfered to this oneshot account.
Anonymously schedule a task after a delay. Origin account is kept alive.
### consume_oneshot_account - 1
### Types of parameters <details><summary><code>consume_oneshot_account(block_height, dest)</code></summary>
Taking 0.0182 % of a block.
```rust ```rust
after: T::BlockNumber, block_height: BlockNumberFor<T>
maybe_periodic: Option<schedule::Period<T::BlockNumber>>, dest: Account<<T::Lookup as StaticLookup>::Source>
priority: schedule::Priority,
call: Box<CallOrHashOf<T>>
``` ```
</p>
</details> </details>
<details><summary>5: schedule_named_after(id, after, maybe_periodic, priority, call)</summary>
<p>
### Index
`5` Consume a oneshot account and transfer its balance to an account
### Documentation - `block_height`: Must be a recent block number. The limit is `BlockHashCount` in the past. (this is to prevent replay attacks)
- `dest`: The destination account.
- `dest_is_oneshot`: If set to `true`, then a oneshot account is created at `dest`. Else, `dest` has to be an existing account.
Schedule a named task after a delay. ### consume_oneshot_account_with_remaining - 2
<details><summary><code>consume_oneshot_account_with_remaining(block_height, dest, remaining_to, balance)</code></summary>
### Types of parameters Taking 0.0246 % of a block.
```rust ```rust
id: Vec<u8>, block_height: BlockNumberFor<T>
after: T::BlockNumber, dest: Account<<T::Lookup as StaticLookup>::Source>
maybe_periodic: Option<schedule::Period<T::BlockNumber>>, remaining_to: Account<<T::Lookup as StaticLookup>::Source>
priority: schedule::Priority, balance: BalanceOf<T>
call: Box<CallOrHashOf<T>>
``` ```
</p>
</details> </details>
### 3: Babe
<details><summary>0: report_equivocation(equivocation_proof, key_owner_proof)</summary> Consume a oneshot account then transfer some amount to an account,
<p> and the remaining amount to another account.
### Index - `block_height`: Must be a recent block number.
The limit is `BlockHashCount` in the past. (this is to prevent replay attacks)
- `dest`: The destination account.
- `dest_is_oneshot`: If set to `true`, then a oneshot account is created at `dest`. Else, `dest` has to be an existing account.
- `dest2`: The second destination account.
- `dest2_is_oneshot`: If set to `true`, then a oneshot account is created at `dest2`. Else, `dest2` has to be an existing account.
- `balance1`: The amount transfered to `dest`, the leftover being transfered to `dest2`.
`0` ## SmithMembers - 10
### Documentation ### invite_smith - 0
Report authority equivocation/misbehavior. This method will verify <details><summary><code>invite_smith(receiver)</code></summary>
the equivocation proof and validate the given key ownership proof
against the extracted offender. If both are valid, the offence will
be reported.
### Types of parameters Taking 0.0214 % of a block.
```rust ```rust
equivocation_proof: Box<EquivocationProof<T::Header>>, receiver: T::IdtyIndex
key_owner_proof: T::KeyOwnerProof
``` ```
</p>
</details> </details>
### 6: Balances
<details><summary>0: transfer(dest, value)</summary> Invite a member of the Web of Trust to attempt becoming a Smith.
<p>
### Index ### accept_invitation - 1
`0` <details><summary><code>accept_invitation()</code></summary>
### Documentation Taking 0.0119 % of a block.
Transfer some liquid free balance to another account. ```rust
```
</details>
`transfer` will set the `FreeBalance` of the sender and receiver.
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.
Accept an invitation to become a Smith (must have been invited first).
### certify_smith - 2
<details><summary><code>certify_smith(receiver)</code></summary>
### Types of parameters Taking 0.0255 % of a block.
```rust ```rust
dest: <T::Lookup as StaticLookup>::Source, receiver: T::IdtyIndex
value: T::Balance
``` ```
</p>
</details> </details>
<details><summary>3: transfer_keep_alive(dest, value)</summary>
<p>
### Index
`3`
### Documentation Certify an invited Smith, which can lead the certified to become a Smith.
Same as the [`transfer`] call, but with a check that the transfer will not kill the ## AuthorityMembers - 11
origin account.
99% of the time you want [`transfer`] instead. ### go_offline - 0
[`transfer`]: struct.Pallet.html#method.transfer <details><summary><code>go_offline()</code></summary>
### Types of parameters Taking 0.0152 % of a block.
```rust ```rust
dest: <T::Lookup as StaticLookup>::Source,
value: T::Balance
``` ```
</p>
</details> </details>
<details><summary>4: transfer_all(dest, keep_alive)</summary>
<p>
### Index
`4`
### Documentation
Transfer the entire transferable balance from the caller account. Request to leave the set of validators two sessions later.
NOTE: This function only attempts to transfer _transferable_ balances. This means that
any locked, reserved, or existential deposits (when `keep_alive` is `true`), will not be
transferred by this function. To ensure that this function results in a killed account,
you might need to prepare the account by removing any reference counters, storage
deposits, etc...
The dispatch origin of this call must be Signed. ### go_online - 1
- `dest`: The recipient of the transfer. <details><summary><code>go_online()</code></summary>
- `keep_alive`: A boolean to determine if the `transfer_all` operation should send all
of the funds the account has, causing the sender account to be killed (false), or
transfer everything except at least the existential deposit, which will guarantee to
keep the sender account alive (true). # <weight>
- O(1). Just like transfer, but reading the user's transferable balance first.
#</weight>
### Types of parameters Taking 0.0172 % of a block.
```rust ```rust
dest: <T::Lookup as StaticLookup>::Source,
keep_alive: bool
``` ```
</p>
</details> </details>
### 10: AuthorityMembers
<details><summary>0: go_offline()</summary>
<p>
### Index
`0` Request to join the set of validators two sessions later.
### Documentation ### set_session_keys - 2
<details><summary><code>set_session_keys(keys)</code></summary>
Taking 0.0225 % of a block.
</p> ```rust
keys: T::Keys
```
</details> </details>
<details><summary>1: go_online()</summary>
<p>
### Index
`1` Declare new session keys to replace current ones.
### Documentation ## Preimage - 22
### note_preimage - 0
<details><summary><code>note_preimage(bytes)</code></summary>
</p> Taking 0.2846 % of a block.
```rust
bytes: Vec<u8>
```
</details> </details>
<details><summary>2: set_session_keys(keys)</summary>
<p>
### Index
`2` Register a preimage on-chain.
### Documentation If the preimage was previously requested, no fees or deposits are taken for providing
the preimage. Otherwise, a deposit is taken proportional to the size of the preimage.
### unnote_preimage - 1
<details><summary><code>unnote_preimage(hash)</code></summary>
### Types of parameters Taking 0.0171 % of a block.
```rust ```rust
keys: T::KeysWrapper hash: T::Hash
``` ```
</p>
</details> </details>
### 15: Grandpa
<details><summary>0: report_equivocation(equivocation_proof, key_owner_proof)</summary> Clear an unrequested preimage from the runtime storage.
<p>
### Index If `len` is provided, then it will be a much cheaper operation.
`0` - `hash`: The hash of the preimage to be removed from the store.
- `len`: The length of the preimage of `hash`.
### Documentation ### request_preimage - 2
Report voter equivocation/misbehavior. This method will verify the <details><summary><code>request_preimage(hash)</code></summary>
equivocation proof and validate the given key ownership proof
against the extracted offender. If both are valid, the offence
will be reported.
### Types of parameters Taking 0.0121 % of a block.
```rust ```rust
equivocation_proof: Box<EquivocationProof<T::Hash, T::BlockNumber>>, hash: T::Hash
key_owner_proof: T::KeyOwnerProof
``` ```
</p>
</details> </details>
### 31: UniversalDividend
<details><summary>0: transfer_ud(dest, value)</summary>
<p>
### Index Request a preimage be uploaded to the chain without paying any fees or deposits.
`0` If the preimage requests has already been provided on-chain, we unreserve any deposit
a user may have paid, and take the control of the preimage out of their hands.
### Documentation ### unrequest_preimage - 3
Transfer some liquid free balance to another account, in milliUD. <details><summary><code>unrequest_preimage(hash)</code></summary>
### Types of parameters Taking 0.0171 % of a block.
```rust ```rust
dest: <T::Lookup as StaticLookup>::Source, hash: T::Hash
value: BalanceOf<T>
``` ```
</p>
</details> </details>
<details><summary>1: transfer_ud_keep_alive(dest, value)</summary>
<p>
### Index
`1` Clear a previously made request for a preimage.
### Documentation NOTE: THIS MUST NOT BE CALLED ON `hash` MORE TIMES THAN `request_preimage`.
Transfer some liquid free balance to another account, in milliUD. ### ensure_updated - 4
### Types of parameters <details><summary><code>ensure_updated(hashes)</code></summary>
Taking 17.5344 % of a block.
```rust ```rust
dest: <T::Lookup as StaticLookup>::Source, hashes: Vec<T::Hash>
value: BalanceOf<T>
``` ```
</p>
</details> </details>
### 41: Identity
<details><summary>0: create_identity(owner_key)</summary>
<p>
### Index Ensure that the a bulk of pre-images is upgraded.
`0` The caller pays no fee if at least 90% of pre-images were successfully updated.
### Documentation ## TechnicalCommittee - 23
### execute - 1
<details><summary><code>execute(proposal, length_bound)</code></summary>
### Types of parameters Taking 0.006 % of a block.
```rust ```rust
owner_key: T::AccountId proposal: Box<<T as Config<I>>::Proposal>
length_bound: u32
``` ```
</p>
</details> </details>
<details><summary>1: confirm_identity(idty_name)</summary>
<p>
### Index
`1` Dispatch a proposal from a member using the `Member` origin.
Origin must be a member of the collective.
### Documentation ###### Complexity:
- `O(B + M + P)` where:
- `B` is `proposal` size in bytes (length-fee-bounded)
- `M` members-count (code-bounded)
- `P` complexity of dispatching `proposal`
### propose - 2
<details><summary><code>propose(threshold, proposal, length_bound)</code></summary>
### Types of parameters No weight available.
```rust ```rust
idty_name: IdtyName threshold: MemberCount
proposal: Box<<T as Config<I>>::Proposal>
length_bound: u32
``` ```
</p>
</details> </details>
<details><summary>2: validate_identity(idty_index)</summary>
<p>
### Index
`2` 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.
### Documentation ###### Complexity
- `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`)
### vote - 3
<details><summary><code>vote(proposal, index, approve)</code></summary>
### Types of parameters Taking 0.0121 % of a block.
```rust ```rust
idty_index: T::IdtyIndex proposal: T::Hash
index: ProposalIndex
approve: bool
``` ```
</p>
</details> </details>
<details><summary>3: revoke_identity(payload, payload_sig)</summary>
<p>
### Index
`3` Add an aye or nay vote for the sender to the given proposal.
Requires the sender to be a member.
### Documentation 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.
###### Complexity
- `O(M)` where `M` is members-count (code- and governance-bounded)
### close - 6
<details><summary><code>close(proposal_hash, index, proposal_weight_bound, length_bound)</code></summary>
### Types of parameters No weight available.
```rust ```rust
payload: RevocationPayload<T::AccountId, T::Hash>, proposal_hash: T::Hash
payload_sig: T::RevocationSignature index: ProposalIndex
proposal_weight_bound: Weight
length_bound: u32
``` ```
</p>
</details> </details>
### 42: Membership
<details><summary>1: request_membership(metadata)</summary> Close a vote that is either approved, disapproved or whose voting period has ended.
<p>
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.
### Index 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.
`1` + `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::<u32>() == 4` larger than the pure length.
### Documentation ###### Complexity
- `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)
### kill - 7
<details><summary><code>kill(proposal_hash)</code></summary>
### Types of parameters Taking 0.0229 % of a block.
```rust ```rust
metadata: T::MetaData proposal_hash: T::Hash
``` ```
</p>
</details> </details>
<details><summary>3: renew_membership(maybe_idty_id)</summary>
<p>
### Index
`3` Disapprove the proposal and burn the cost held for storing this proposal.
### Documentation Parameters:
- `origin`: must be the `KillOrigin`.
- `proposal_hash`: The hash of the proposal that should be killed.
Emits `Killed` and `ProposalCostBurned` if any cost was held for a given proposal.
### release_proposal_cost - 8
<details><summary><code>release_proposal_cost(proposal_hash)</code></summary>
### Types of parameters Taking 0.0066 % of a block.
```rust ```rust
maybe_idty_id: Option<T::IdtyId> proposal_hash: T::Hash
``` ```
</p>
</details> </details>
### 43: Cert
<details><summary>1: add_cert(receiver)</summary> Release the cost held for storing a proposal once the given proposal is completed.
<p>
### Index If there is no associated cost for the given proposal, this call will have no effect.
`1` Parameters:
- `origin`: must be `Signed` or `Root`.
- `proposal_hash`: The hash of the proposal.
Emits `ProposalCostReleased` if any cost held for a given proposal.
### Documentation ## UniversalDividend - 30
### claim_uds - 0
<details><summary><code>claim_uds()</code></summary>
### Types of parameters Taking 0.02 % of a block.
```rust ```rust
receiver: T::AccountId
``` ```
</p>
</details> </details>
### 52: SmithsMembership
<details><summary>1: request_membership(metadata)</summary> Claim Universal Dividends.
<p>
### transfer_ud - 1
### Index <details><summary><code>transfer_ud(dest, value)</code></summary>
`1` Taking 0.0194 % of a block.
### Documentation ```rust
dest: <T::Lookup as StaticLookup>::Source
value: BalanceOf<T>
```
</details>
Transfer some liquid free balance to another account, in milliUD.
### transfer_ud_keep_alive - 2
<details><summary><code>transfer_ud_keep_alive(dest, value)</code></summary>
### Types of parameters Taking 0.0129 % of a block.
```rust ```rust
metadata: T::MetaData dest: <T::Lookup as StaticLookup>::Source
value: BalanceOf<T>
``` ```
</p>
</details> </details>
<details><summary>3: renew_membership(maybe_idty_id)</summary>
<p>
### Index
`3` Transfer some liquid free balance to another account in milliUD and keep the account alive.
### Documentation ## Identity - 41
### create_identity - 0
<details><summary><code>create_identity(owner_key)</code></summary>
### Types of parameters Taking 0.0776 % of a block.
```rust ```rust
maybe_idty_id: Option<T::IdtyId> owner_key: T::AccountId
``` ```
</p>
</details> </details>
<details><summary>4: revoke_membership(maybe_idty_id)</summary>
<p>
### Index
`4` Create an identity for an existing account
### Documentation - `owner_key`: the public key corresponding to the identity to be created
The origin must be allowed to create an identity.
### confirm_identity - 1
### Types of parameters <details><summary><code>confirm_identity(idty_name)</code></summary>
Taking 0.0298 % of a block.
```rust ```rust
maybe_idty_id: Option<T::IdtyId> idty_name: IdtyName
``` ```
</p>
</details> </details>
### 53: SmithsCert
<details><summary>1: add_cert(receiver)</summary>
<p>
### Index Confirm the creation of an identity and give it a name
`1` - `idty_name`: the name uniquely associated to this identity. Must match the validation rules defined by the runtime.
### Documentation The identity must have been created using `create_identity` before it can be confirmed.
### change_owner_key - 3
<details><summary><code>change_owner_key(new_key, new_key_sig)</code></summary>
### Types of parameters Taking 0.0388 % of a block.
```rust ```rust
receiver: T::AccountId new_key: T::AccountId
new_key_sig: T::Signature
``` ```
</p>
</details> </details>
### 54: SmithsCollective
<details><summary>1: execute(proposal, length_bound)</summary> Change identity owner key.
<p>
### Index - `new_key`: the new owner key.
- `new_key_sig`: the signature of the encoded form of `IdtyIndexAccountIdPayload`.
Must be signed by `new_key`.
`1` The origin should be the old identity owner key.
### Documentation ### revoke_identity - 4
Dispatch a proposal from a member using the `Member` origin. <details><summary><code>revoke_identity(idty_index, revocation_key, revocation_sig)</code></summary>
Origin must be a member of the collective. Taking 0.0365 % of a block.
```rust
idty_index: T::IdtyIndex
revocation_key: T::AccountId
revocation_sig: T::Signature
```
</details>
### Types of parameters
Revoke an identity using a revocation signature
- `idty_index`: the index of the identity to be revoked.
- `revocation_key`: the key used to sign the revocation payload.
- `revocation_sig`: the signature of the encoded form of `RevocationPayload`.
Must be signed by `revocation_key`.
Any signed origin can execute this call.
### revoke_identity_legacy - 9
<details><summary><code>revoke_identity_legacy(revocation_document)</code></summary>
Taking 0.04 % of a block.
```rust ```rust
proposal: Box<<T as Config<I>>::Proposal>, revocation_document: Vec<u8>
length_bound: u32
``` ```
</p>
</details> </details>
<details><summary>2: propose(threshold, proposal, length_bound)</summary>
<p>
### Index
`2` Revoke an identity using a legacy (DUBP) revocation document
### Documentation - `revocation document`: the full-length revocation document, signature included
Add a new proposal to either be voted on or executed directly. Any signed origin can execute this call.
Requires the sender to be member.
`threshold` determines whether `proposal` is executed directly (`threshold < 2`) ### link_account - 8
or put up for voting.
<details><summary><code>link_account(account_id, payload_sig)</code></summary>
### Types of parameters Taking 0.0144 % of a block.
```rust ```rust
threshold: MemberCount, account_id: T::AccountId
proposal: Box<<T as Config<I>>::Proposal>, payload_sig: T::Signature
length_bound: u32
``` ```
</p>
</details> </details>
<details><summary>3: vote(proposal, index, approve)</summary>
<p>
### Index
`3` Link an account to an identity.
### Documentation This function links a specified account to an identity, requiring both the account and the
identity to sign the operation.
Add an aye or nay vote for the sender to the given proposal. - `origin` - The origin of the call, which must have an associated identity index.
- `account_id` - The account ID to link, which must sign the payload.
- `payload_sig` - The signature with the linked identity.
Requires the sender to be a member. ## Certification - 43
Transaction fees will be waived if the member is voting on any particular proposal ### add_cert - 0
for the first time and the call is successful. Subsequent vote changes will charge a
fee.
### Types of parameters <details><summary><code>add_cert(receiver)</code></summary>
Taking 0.0324 % of a block.
```rust ```rust
proposal: T::Hash, receiver: T::IdtyIndex
index: ProposalIndex,
approve: bool
``` ```
</p>
</details> </details>
<details><summary>4: close(proposal_hash, index, proposal_weight_bound, length_bound)</summary>
<p>
### Index
`4` Add a new certification.
### Documentation ### renew_cert - 3
Close a vote that is either approved, disapproved or whose voting period has ended. <details><summary><code>renew_cert(receiver)</code></summary>
May be called by any signed account in order to finish voting and close the proposal. Taking 0.0266 % of a block.
If called before the end of the voting period it will only close the vote if it is ```rust
has enough votes to be approved or disapproved. receiver: T::IdtyIndex
```
</details>
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 Renew an existing certification.
proposal.
+ `length_bound`: The upper bound for the length of the proposal in storage. Checked via
`storage::read` so it is `size_of::<u32>() == 4` larger than the pure length.
## Distance - 44
### Types of parameters ### request_distance_evaluation - 0
<details><summary><code>request_distance_evaluation()</code></summary>
Taking 0.0351 % of a block.
```rust ```rust
proposal_hash: T::Hash,
index: ProposalIndex,
proposal_weight_bound: Weight,
length_bound: u32
``` ```
</details>
Request evaluation of the caller's identity distance.
This function allows the caller to request an evaluation of their distance.
A positive evaluation will lead to claiming or renewing membership, while a negative
evaluation will result in slashing for the caller.
</p> ### request_distance_evaluation_for - 4
<details><summary><code>request_distance_evaluation_for(target)</code></summary>
Taking 0.036 % of a block.
```rust
target: T::IdtyIndex
```
</details> </details>
### 60: AtomicSwap
<details><summary>0: create_swap(target, hashed_proof, action, duration)</summary> Request evaluation of a target identity's distance.
<p>
This function allows the caller to request an evaluation of a specific target identity's distance.
This action is only permitted for unvalidated identities.
## AtomicSwap - 50
### create_swap - 0
### Index <details><summary><code>create_swap(target, hashed_proof, action, duration)</code></summary>
No weight available.
```rust
target: T::AccountId
hashed_proof: HashedProof
action: T::SwapAction
duration: BlockNumberFor<T>
```
</details>
`0`
### Documentation
Register a new atomic swap, declaring an intention to send funds from origin to target Register a new atomic swap, declaring an intention to send funds from origin to target
on the current blockchain. The target can claim the fund using the revealed proof. If on the current blockchain. The target can claim the fund using the revealed proof. If
...@@ -781,26 +801,19 @@ The dispatch origin for this call must be _Signed_. ...@@ -781,26 +801,19 @@ The dispatch origin for this call must be _Signed_.
that the revealer uses a shorter duration than the counterparty, to prevent the that the revealer uses a shorter duration than the counterparty, to prevent the
situation where the revealer reveals the proof too late around the end block. situation where the revealer reveals the proof too late around the end block.
### Types of parameters ### claim_swap - 1
<details><summary><code>claim_swap(proof, action)</code></summary>
No weight available.
```rust ```rust
target: T::AccountId, proof: Vec<u8>
hashed_proof: HashedProof, action: T::SwapAction
action: T::SwapAction,
duration: T::BlockNumber
``` ```
</p>
</details> </details>
<details><summary>1: claim_swap(proof, action)</summary>
<p>
### Index
`1`
### Documentation
Claim an atomic swap. Claim an atomic swap.
...@@ -810,24 +823,19 @@ The dispatch origin for this call must be _Signed_. ...@@ -810,24 +823,19 @@ The dispatch origin for this call must be _Signed_.
- `action`: Action defined in the swap, it must match the entry in blockchain. Otherwise - `action`: Action defined in the swap, it must match the entry in blockchain. Otherwise
the operation fails. This is used for weight calculation. the operation fails. This is used for weight calculation.
### Types of parameters ### cancel_swap - 2
<details><summary><code>cancel_swap(target, hashed_proof)</code></summary>
No weight available.
```rust ```rust
proof: Vec<u8>, target: T::AccountId
action: T::SwapAction hashed_proof: HashedProof
``` ```
</p>
</details> </details>
<details><summary>2: cancel_swap(target, hashed_proof)</summary>
<p>
### Index
`2`
### Documentation
Cancel an atomic swap. Only possible after the originally set duration has passed. Cancel an atomic swap. Only possible after the originally set duration has passed.
...@@ -836,27 +844,21 @@ The dispatch origin for this call must be _Signed_. ...@@ -836,27 +844,21 @@ The dispatch origin for this call must be _Signed_.
- `target`: Target of the original atomic swap. - `target`: Target of the original atomic swap.
- `hashed_proof`: Hashed proof of the original atomic swap. - `hashed_proof`: Hashed proof of the original atomic swap.
### Types of parameters ## Multisig - 51
```rust
target: T::AccountId,
hashed_proof: HashedProof
```
</p>
</details>
### as_multi_threshold_1 - 0
### 61: Multisig <details><summary><code>as_multi_threshold_1(other_signatories, call)</code></summary>
<details><summary>0: as_multi_threshold_1(other_signatories, call)</summary> Taking 0.0051 % of a block.
<p>
### Index ```rust
other_signatories: Vec<T::AccountId>
call: Box<<T as Config>::RuntimeCall>
```
</details>
`0`
### Documentation
Immediately dispatch a multi-signature call using a single approval from the caller. Immediately dispatch a multi-signature call using a single approval from the caller.
...@@ -868,25 +870,25 @@ multi-signature, but do not participate in the approval process. ...@@ -868,25 +870,25 @@ multi-signature, but do not participate in the approval process.
Result is equivalent to the dispatched result. Result is equivalent to the dispatched result.
###### Complexity
O(Z + C) where Z is the length of the call and C its execution weight.
### Types of parameters ### as_multi - 1
```rust <details><summary><code>as_multi(threshold, other_signatories, maybe_timepoint, call, max_weight)</code></summary>
other_signatories: Vec<T::AccountId>,
call: Box<<T as Config>::Call>
```
</p> No weight available.
</details>
<details><summary>1: as_multi(threshold, other_signatories, maybe_timepoint, call, store_call, max_weight)</summary> ```rust
<p> threshold: u16
other_signatories: Vec<T::AccountId>
### Index maybe_timepoint: Option<Timepoint<BlockNumberFor<T>>>
call: Box<<T as Config>::RuntimeCall>
max_weight: Weight
```
</details>
`1`
### Documentation
Register approval for a dispatch to be made from a deterministic composite account if Register approval for a dispatch to be made from a deterministic composite account if
approved by a total of `threshold - 1` of `other_signatories`. approved by a total of `threshold - 1` of `other_signatories`.
...@@ -914,29 +916,36 @@ Result is equivalent to the dispatched result if `threshold` is exactly `1`. Oth ...@@ -914,29 +916,36 @@ Result is equivalent to the dispatched result if `threshold` is exactly `1`. Oth
on success, result is `Ok` and the result from the interior call, if it was executed, on success, result is `Ok` and the result from the interior call, if it was executed,
may be found in the deposited `MultisigExecuted` event. may be found in the deposited `MultisigExecuted` event.
###### Complexity
- `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`.
### approve_as_multi - 2
### Types of parameters <details><summary><code>approve_as_multi(threshold, other_signatories, maybe_timepoint, call_hash, max_weight)</code></summary>
No weight available.
```rust ```rust
threshold: u16, threshold: u16
other_signatories: Vec<T::AccountId>, other_signatories: Vec<T::AccountId>
maybe_timepoint: Option<Timepoint<T::BlockNumber>>, maybe_timepoint: Option<Timepoint<BlockNumberFor<T>>>
call: OpaqueCall<T>, call_hash: [u8; 32]
store_call: bool,
max_weight: Weight max_weight: Weight
``` ```
</p>
</details> </details>
<details><summary>2: approve_as_multi(threshold, other_signatories, maybe_timepoint, call_hash, max_weight)</summary>
<p>
### Index
`2`
### Documentation
Register approval for a dispatch to be made from a deterministic composite account if Register approval for a dispatch to be made from a deterministic composite account if
approved by a total of `threshold - 1` of `other_signatories`. approved by a total of `threshold - 1` of `other_signatories`.
...@@ -957,28 +966,33 @@ transaction index) of the first approval transaction. ...@@ -957,28 +966,33 @@ transaction index) of the first approval transaction.
NOTE: If this is the final approval, you will want to use `as_multi` instead. NOTE: If this is the final approval, you will want to use `as_multi` instead.
###### Complexity
- `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`.
### cancel_as_multi - 3
### Types of parameters <details><summary><code>cancel_as_multi(threshold, other_signatories, timepoint, call_hash)</code></summary>
Taking 0.0117 % of a block.
```rust ```rust
threshold: u16, threshold: u16
other_signatories: Vec<T::AccountId>, other_signatories: Vec<T::AccountId>
maybe_timepoint: Option<Timepoint<T::BlockNumber>>, timepoint: Timepoint<BlockNumberFor<T>>
call_hash: [u8; 32], call_hash: [u8; 32]
max_weight: Weight
``` ```
</p>
</details> </details>
<details><summary>3: cancel_as_multi(threshold, other_signatories, timepoint, call_hash)</summary>
<p>
### Index
`3`
### Documentation
Cancel a pre-existing, on-going multisig transaction. Any deposit reserved previously Cancel a pre-existing, on-going multisig transaction. Any deposit reserved previously
for this operation will be unreserved on success. for this operation will be unreserved on success.
...@@ -992,60 +1006,54 @@ dispatch. May not be empty. ...@@ -992,60 +1006,54 @@ dispatch. May not be empty.
transaction for this dispatch. transaction for this dispatch.
- `call_hash`: The hash of the call to be executed. - `call_hash`: The hash of the call to be executed.
###### Complexity
- `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.
### Types of parameters ## ProvideRandomness - 52
### request - 0
<details><summary><code>request(randomness_type, salt)</code></summary>
Taking 0.0367 % of a block.
```rust ```rust
threshold: u16, randomness_type: RandomnessType
other_signatories: Vec<T::AccountId>, salt: H256
timepoint: Timepoint<T::BlockNumber>,
call_hash: [u8; 32]
``` ```
</p>
</details> </details>
### 62: ProvideRandomness
<details><summary>0: request(randomness_type, salt)</summary> Request randomness.
<p>
### Index ## Proxy - 53
`0` ### proxy - 0
### Documentation <details><summary><code>proxy(real, force_proxy_type, call)</code></summary>
Request a randomness Taking 0.0061 % of a block.
### Types of parameters
```rust ```rust
randomness_type: RandomnessType, real: AccountIdLookupOf<T>
salt: H256 force_proxy_type: Option<T::ProxyType>
call: Box<<T as Config>::RuntimeCall>
``` ```
</p>
</details> </details>
### 63: Proxy
<details><summary>0: proxy(real, force_proxy_type, call)</summary>
<p>
### Index
`0`
### Documentation
Dispatch the given `call` from an account that the sender is authorised for through Dispatch the given `call` from an account that the sender is authorised for through
`add_proxy`. `add_proxy`.
Removes any corresponding announcement(s).
The dispatch origin for this call must be _Signed_. The dispatch origin for this call must be _Signed_.
Parameters: Parameters:
...@@ -1053,26 +1061,20 @@ Parameters: ...@@ -1053,26 +1061,20 @@ Parameters:
- `force_proxy_type`: Specify the exact proxy type to be used and checked for this call. - `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. - `call`: The call to be made by the `real` account.
### add_proxy - 1
### Types of parameters <details><summary><code>add_proxy(delegate, proxy_type, delay)</code></summary>
Taking 0.0114 % of a block.
```rust ```rust
real: T::AccountId, delegate: AccountIdLookupOf<T>
force_proxy_type: Option<T::ProxyType>, proxy_type: T::ProxyType
call: Box<<T as Config>::Call> delay: BlockNumberFor<T>
``` ```
</p>
</details> </details>
<details><summary>1: add_proxy(delegate, proxy_type, delay)</summary>
<p>
### Index
`1`
### Documentation
Register a proxy account for the sender that is able to make calls on its behalf. Register a proxy account for the sender that is able to make calls on its behalf.
...@@ -1084,26 +1086,20 @@ Parameters: ...@@ -1084,26 +1086,20 @@ Parameters:
- `delay`: The announcement period required of the initial proxy. Will generally be - `delay`: The announcement period required of the initial proxy. Will generally be
zero. zero.
### remove_proxy - 2
<details><summary><code>remove_proxy(delegate, proxy_type, delay)</code></summary>
### Types of parameters Taking 0.0114 % of a block.
```rust ```rust
delegate: T::AccountId, delegate: AccountIdLookupOf<T>
proxy_type: T::ProxyType, proxy_type: T::ProxyType
delay: T::BlockNumber delay: BlockNumberFor<T>
``` ```
</p>
</details> </details>
<details><summary>2: remove_proxy(delegate, proxy_type, delay)</summary>
<p>
### Index
`2`
### Documentation
Unregister a proxy account for the sender. Unregister a proxy account for the sender.
...@@ -1113,46 +1109,39 @@ Parameters: ...@@ -1113,46 +1109,39 @@ Parameters:
- `proxy`: The account that the `caller` would like to remove as a proxy. - `proxy`: The account that the `caller` would like to remove as a proxy.
- `proxy_type`: The permissions currently enabled for the removed proxy account. - `proxy_type`: The permissions currently enabled for the removed proxy account.
### remove_proxies - 3
<details><summary><code>remove_proxies()</code></summary>
### Types of parameters Taking 0.0113 % of a block.
```rust ```rust
delegate: T::AccountId,
proxy_type: T::ProxyType,
delay: T::BlockNumber
``` ```
</p>
</details> </details>
<details><summary>3: remove_proxies()</summary>
<p>
### Index
`3`
### Documentation
Unregister all proxy accounts for the sender. Unregister all proxy accounts for the sender.
The dispatch origin for this call must be _Signed_. The dispatch origin for this call must be _Signed_.
WARNING: This may be called on accounts created by `anonymous`, however if done, then WARNING: This may be called on accounts created by `pure`, however if done, then
the unreserved fees will be inaccessible. **All access to this account will be lost.** the unreserved fees will be inaccessible. **All access to this account will be lost.**
### create_pure - 4
</p> <details><summary><code>create_pure(proxy_type, delay, index)</code></summary>
</details>
<details><summary>4: anonymous(proxy_type, delay, index)</summary> Taking 0.0114 % of a block.
<p>
### Index ```rust
proxy_type: T::ProxyType
delay: BlockNumberFor<T>
index: u16
```
</details>
`4`
### Documentation
Spawn a fresh new account that is guaranteed to be otherwise inaccessible, and Spawn a fresh new account that is guaranteed to be otherwise inaccessible, and
initialize it with a proxy of `proxy_type` for `origin` sender. initialize it with a proxy of `proxy_type` for `origin` sender.
...@@ -1173,66 +1162,53 @@ same sender, with the same parameters. ...@@ -1173,66 +1162,53 @@ same sender, with the same parameters.
Fails if there are insufficient funds to pay for deposit. Fails if there are insufficient funds to pay for deposit.
### kill_pure - 5
### Types of parameters <details><summary><code>kill_pure(spawner, proxy_type, index, height, ext_index)</code></summary>
Taking 0.0114 % of a block.
```rust ```rust
proxy_type: T::ProxyType, spawner: AccountIdLookupOf<T>
delay: T::BlockNumber, proxy_type: T::ProxyType
index: u16 index: u16
height: BlockNumberFor<T>
ext_index: u32
``` ```
</p>
</details> </details>
<details><summary>5: kill_anonymous(spawner, proxy_type, index, height, ext_index)</summary>
<p>
### Index
`5` Removes a previously spawned pure proxy.
### Documentation
Removes a previously spawned anonymous proxy.
WARNING: **All access to this account will be lost.** Any funds held in it will be WARNING: **All access to this account will be lost.** Any funds held in it will be
inaccessible. inaccessible.
Requires a `Signed` origin, and the sender account must have been created by a call to Requires a `Signed` origin, and the sender account must have been created by a call to
`anonymous` with corresponding parameters. `pure` with corresponding parameters.
- `spawner`: The account that originally called `pure` to create this account.
- `index`: The disambiguation index originally passed to `pure`. Probably `0`.
- `proxy_type`: The proxy type originally passed to `pure`.
- `height`: The height of the chain when the call to `pure` was processed.
- `ext_index`: The extrinsic index in which the call to `pure` was processed.
- `spawner`: The account that originally called `anonymous` to create this account. Fails with `NoPermission` in case the caller is not a previously created pure
- `index`: The disambiguation index originally passed to `anonymous`. Probably `0`. account whose `pure` call has corresponding parameters.
- `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 ### announce - 6
account whose `anonymous` call has corresponding parameters.
<details><summary><code>announce(real, call_hash)</code></summary>
### Types of parameters Taking 0.0185 % of a block.
```rust ```rust
spawner: T::AccountId, real: AccountIdLookupOf<T>
proxy_type: T::ProxyType, call_hash: CallHashOf<T>
index: u16,
height: T::BlockNumber,
ext_index: u32
``` ```
</p>
</details> </details>
<details><summary>6: announce(real, call_hash)</summary>
<p>
### Index
`6`
### Documentation
Publish the hash of a proxy-call that will be made in the future. Publish the hash of a proxy-call that will be made in the future.
...@@ -1250,25 +1226,19 @@ Parameters: ...@@ -1250,25 +1226,19 @@ Parameters:
- `real`: The account that the proxy will make a call on behalf of. - `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. - `call_hash`: The hash of the call to be made by the `real` account.
### remove_announcement - 7
<details><summary><code>remove_announcement(real, call_hash)</code></summary>
### Types of parameters Taking 0.0173 % of a block.
```rust ```rust
real: T::AccountId, real: AccountIdLookupOf<T>
call_hash: CallHashOf<T> call_hash: CallHashOf<T>
``` ```
</p>
</details> </details>
<details><summary>7: remove_announcement(real, call_hash)</summary>
<p>
### Index
`7`
### Documentation
Remove a given announcement. Remove a given announcement.
...@@ -1281,25 +1251,19 @@ Parameters: ...@@ -1281,25 +1251,19 @@ Parameters:
- `real`: The account that the proxy will make a call on behalf of. - `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. - `call_hash`: The hash of the call to be made by the `real` account.
### reject_announcement - 8
### Types of parameters <details><summary><code>reject_announcement(delegate, call_hash)</code></summary>
Taking 0.0173 % of a block.
```rust ```rust
real: T::AccountId, delegate: AccountIdLookupOf<T>
call_hash: CallHashOf<T> call_hash: CallHashOf<T>
``` ```
</p>
</details> </details>
<details><summary>8: reject_announcement(delegate, call_hash)</summary>
<p>
### Index
`8`
### Documentation
Remove the given announcement of a delegate. Remove the given announcement of a delegate.
...@@ -1312,25 +1276,21 @@ Parameters: ...@@ -1312,25 +1276,21 @@ Parameters:
- `delegate`: The account that previously announced the call. - `delegate`: The account that previously announced the call.
- `call_hash`: The hash of the call to be made. - `call_hash`: The hash of the call to be made.
### proxy_announced - 9
<details><summary><code>proxy_announced(delegate, real, force_proxy_type, call)</code></summary>
### Types of parameters Taking 0.0187 % of a block.
```rust ```rust
delegate: T::AccountId, delegate: AccountIdLookupOf<T>
call_hash: CallHashOf<T> real: AccountIdLookupOf<T>
force_proxy_type: Option<T::ProxyType>
call: Box<<T as Config>::RuntimeCall>
``` ```
</p>
</details> </details>
<details><summary>9: proxy_announced(delegate, real, force_proxy_type, call)</summary>
<p>
### Index
`9`
### Documentation
Dispatch the given `call` from an account that the sender is authorized for through Dispatch the given `call` from an account that the sender is authorized for through
`add_proxy`. `add_proxy`.
...@@ -1344,59 +1304,53 @@ Parameters: ...@@ -1344,59 +1304,53 @@ Parameters:
- `force_proxy_type`: Specify the exact proxy type to be used and checked for this call. - `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. - `call`: The call to be made by the `real` account.
## Utility - 54
### batch - 0
<details><summary><code>batch(calls)</code></summary>
### Types of parameters Taking 0.1152 % of a block.
```rust ```rust
delegate: T::AccountId, calls: Vec<<T as Config>::RuntimeCall>
real: T::AccountId,
force_proxy_type: Option<T::ProxyType>,
call: Box<<T as Config>::Call>
``` ```
</p>
</details> </details>
### 64: Utility
<details><summary>0: batch(calls)</summary>
<p>
### Index
`0`
### Documentation
Send a batch of dispatch calls. Send a batch of dispatch calls.
May be called from any origin. May be called from any origin except `None`.
- `calls`: The calls to be dispatched from the same origin. The number of call must not - `calls`: The calls to be dispatched from the same origin. The number of call must not
exceed the constant: `batched_calls_limit` (available in constant metadata). exceed the constant: `batched_calls_limit` (available in constant metadata).
If origin is root then call are dispatch without checking origin filter. (This includes If origin is root then the calls are dispatched without checking origin filter. (This
bypassing `frame_system::Config::BaseCallFilter`). includes bypassing `frame_system::Config::BaseCallFilter`).
###### Complexity
- O(C) where C is the number of calls to be batched.
### Types of parameters 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.
```rust ### as_derivative - 1
calls: Vec<<T as Config>::Call>
```
</p> <details><summary><code>as_derivative(index, call)</code></summary>
</details>
<details><summary>1: as_derivative(index, call)</summary> Taking 0.0048 % of a block.
<p>
### Index ```rust
index: u16
call: Box<<T as Config>::RuntimeCall>
```
</details>
`1`
### Documentation
Send a call through an indexed pseudonym of the sender. Send a call through an indexed pseudonym of the sender.
...@@ -1412,742 +1366,266 @@ NOTE: Prior to version *12, this was called `as_limited_sub`. ...@@ -1412,742 +1366,266 @@ NOTE: Prior to version *12, this was called `as_limited_sub`.
The dispatch origin for this call must be _Signed_. The dispatch origin for this call must be _Signed_.
### Types of parameters ### batch_all - 2
<details><summary><code>batch_all(calls)</code></summary>
Taking 0.123 % of a block.
```rust ```rust
index: u16, calls: Vec<<T as Config>::RuntimeCall>
call: Box<<T as Config>::Call>
``` ```
</p>
</details> </details>
<details><summary>2: batch_all(calls)</summary>
<p>
### Index
`2`
### Documentation
Send a batch of dispatch calls and atomically execute them. Send a batch of dispatch calls and atomically execute them.
The whole transaction will rollback and fail if any of the calls failed. The whole transaction will rollback and fail if any of the calls failed.
May be called from any origin. May be called from any origin except `None`.
- `calls`: The calls to be dispatched from the same origin. The number of call must not - `calls`: The calls to be dispatched from the same origin. The number of call must not
exceed the constant: `batched_calls_limit` (available in constant metadata). exceed the constant: `batched_calls_limit` (available in constant metadata).
If origin is root then call are dispatch without checking origin filter. (This includes If origin is root then the calls are dispatched without checking origin filter. (This
bypassing `frame_system::Config::BaseCallFilter`). includes bypassing `frame_system::Config::BaseCallFilter`).
###### Complexity
- O(C) where C is the number of calls to be batched.
### Types of parameters ### force_batch - 4
```rust
calls: Vec<<T as Config>::Call>
```
</p>
</details>
### 65: Treasury
<details><summary>0: propose_spend(value, beneficiary)</summary>
<p>
### Index
`0`
### 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.
<details><summary><code>force_batch(calls)</code></summary>
### Types of parameters Taking 0.1152 % of a block.
```rust ```rust
value: BalanceOf<T, I>, calls: Vec<<T as Config>::RuntimeCall>
beneficiary: <T::Lookup as StaticLookup>::Source
``` ```
</p>
</details> </details>
## Root calls Send a batch of dispatch calls.
Unlike `batch`, it allows errors and won't interrupt.
There are **28** root calls organized in **12** pallets.
### 0: System
<details><summary>0: fill_block(ratio)</summary>
<p>
### Index
`0`
### Documentation
A dispatch that will fill the block weight up to the given ratio.
### Types of parameters
```rust
ratio: Perbill
```
</p>
</details>
<details><summary>2: set_heap_pages(pages)</summary>
<p>
### Index
`2`
### Documentation
Set the number of pages in the WebAssembly environment's heap.
### Types of parameters
```rust
pages: u64
```
</p>
</details>
<details><summary>3: set_code(code)</summary>
<p>
### Index
`3`
### Documentation
Set the new runtime code.
### Types of parameters
```rust
code: Vec<u8>
```
</p>
</details>
<details><summary>4: set_code_without_checks(code)</summary>
<p>
### Index
`4`
### Documentation
Set the new runtime code without doing any checks of the given `code`.
### Types of parameters
```rust
code: Vec<u8>
```
</p>
</details>
<details><summary>5: set_storage(items)</summary>
<p>
### Index
`5`
### Documentation
Set some items of storage.
### Types of parameters
```rust
items: Vec<KeyValue>
```
</p>
</details>
<details><summary>6: kill_storage(keys)</summary>
<p>
### Index
`6`
### Documentation
Kill some items from storage.
### Types of parameters
```rust
keys: Vec<Key>
```
</p>
</details>
<details><summary>7: kill_prefix(prefix, subkeys)</summary>
<p>
### Index
`7`
### 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.
### Types of parameters
```rust
prefix: Key,
subkeys: u32
```
</p>
</details>
### 3: Babe
<details><summary>2: plan_config_change(config)</summary>
<p>
### Index
`2`
### 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.
### Types of parameters
```rust
config: NextConfigDescriptor
```
</p>
</details>
### 6: Balances
<details><summary>1: set_balance(who, new_free, new_reserved)</summary>
<p>
### Index
`1`
### Documentation
Set the balances of a given account.
This will alter `FreeBalance` and `ReservedBalance` in storage. it will
also alter the total issuance of the system (`TotalIssuance`) appropriately.
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`.
### Types of parameters
```rust
who: <T::Lookup as StaticLookup>::Source,
new_free: T::Balance,
new_reserved: T::Balance
```
</p>
</details>
<details><summary>2: force_transfer(source, dest, value)</summary>
<p>
### Index
`2`
### Documentation
Exactly as `transfer`, except the origin must be root and the source account may be
specified.
### Types of parameters
```rust
source: <T::Lookup as StaticLookup>::Source,
dest: <T::Lookup as StaticLookup>::Source,
value: T::Balance
```
</p>
</details>
<details><summary>5: force_unreserve(who, amount)</summary>
<p>
### Index
`5`
### Documentation
Unreserve some balance from a user by force.
Can only be called by ROOT.
### Types of parameters
```rust
who: <T::Lookup as StaticLookup>::Source,
amount: T::Balance
```
</p>
</details>
### 10: AuthorityMembers
<details><summary>3: prune_account_id_of(members_ids)</summary>
<p>
### Index
`3`
### Documentation
### Types of parameters
```rust
members_ids: Vec<T::MemberId>
```
</p>
</details>
<details><summary>4: remove_member(member_id)</summary>
<p>
### Index
`4`
### Documentation
### Types of parameters
```rust
member_id: T::MemberId
```
</p>
</details>
### 15: Grandpa
<details><summary>2: note_stalled(delay, best_finalized_block_number)</summary>
<p>
### Index
`2`
### 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.
### Types of parameters
```rust
delay: T::BlockNumber,
best_finalized_block_number: T::BlockNumber
```
</p>
</details>
### 41: Identity
<details><summary>4: remove_identity(idty_index, idty_name)</summary>
<p>
### Index
`4`
### Documentation
### Types of parameters
```rust
idty_index: T::IdtyIndex,
idty_name: Option<IdtyName>
```
</p>
</details>
<details><summary>5: prune_item_identities_names(names)</summary>
<p>
### Index
`5`
### Documentation
### Types of parameters
```rust
names: Vec<IdtyName>
```
</p> May be called from any origin except `None`.
</details>
<details><summary>6: prune_item_identity_index_of(accounts_ids)</summary> - `calls`: The calls to be dispatched from the same origin. The number of call must not
<p> exceed the constant: `batched_calls_limit` (available in constant metadata).
### Index If origin is root then the calls are dispatch without checking origin filter. (This
includes bypassing `frame_system::Config::BaseCallFilter`).
`6` ###### Complexity
- O(C) where C is the number of calls to be batched.
### Documentation ## Treasury - 55
### spend_local - 3
<details><summary><code>spend_local(amount, beneficiary)</code></summary>
### Types of parameters Taking 0.0046 % of a block.
```rust ```rust
accounts_ids: Vec<T::AccountId> amount: BalanceOf<T, I>
beneficiary: AccountIdLookupOf<T>
``` ```
</p>
</details> </details>
### 42: Membership
<details><summary>0: force_request_membership(idty_id, metadata)</summary> Propose and approve a spend of treasury funds.
<p>
### Index ###### Dispatch Origin
`0` Must be [`Config::SpendOrigin`] with the `Success` value being at least `amount`.
### Documentation ###### Details
NOTE: For record-keeping purposes, the proposer is deemed to be equivalent to the
beneficiary.
###### Parameters
- `amount`: The amount to be transferred from the treasury to the `beneficiary`.
- `beneficiary`: The destination account for the transfer.
###### Events
### Types of parameters Emits [`Event::SpendApproved`] if successful.
```rust
idty_id: T::IdtyId,
metadata: T::MetaData
```
</p>
</details>
### 43: Cert ### remove_approval - 4
<details><summary>0: force_add_cert(issuer, receiver, verify_rules)</summary> <details><summary><code>remove_approval(proposal_id)</code></summary>
<p>
### Index Taking 0.0056 % of a block.
`0`
### Documentation
### Types of parameters
```rust ```rust
issuer: T::IdtyIndex, proposal_id: ProposalIndex
receiver: T::IdtyIndex,
verify_rules: bool
``` ```
</p>
</details> </details>
<details><summary>2: del_cert(issuer, receiver)</summary>
<p>
### Index
`2` Force a previously approved proposal to be removed from the approval queue.
### Documentation ###### Dispatch Origin
Must be [`Config::RejectOrigin`].
###### Details
### Types of parameters The original deposit will no longer be returned.
```rust
issuer: T::IdtyIndex,
receiver: T::IdtyIndex
```
</p>
</details>
<details><summary>3: remove_all_certs_received_by(idty_index)</summary>
<p>
### Index ###### Parameters
- `proposal_id`: The index of a proposal
`3` ###### Complexity
- O(A) where `A` is the number of approvals
### Documentation ###### Errors
- [`Error::ProposalNotApproved`]: The `proposal_id` supplied was not found in the
approval queue, i.e., the proposal has not been approved. This could also mean the
proposal does not exist altogether, thus there is no way it would have been approved
in the first place.
### spend - 5
<details><summary><code>spend(asset_kind, amount, beneficiary, valid_from)</code></summary>
### Types of parameters Taking 0.0046 % of a block.
```rust ```rust
idty_index: T::IdtyIndex asset_kind: Box<T::AssetKind>
amount: AssetBalanceOf<T, I>
beneficiary: Box<BeneficiaryLookupOf<T, I>>
valid_from: Option<BlockNumberFor<T>>
``` ```
</p>
</details> </details>
### 52: SmithsMembership
<details><summary>0: force_request_membership(idty_id, metadata)</summary>
<p>
### Index
`0` Propose and approve a spend of treasury funds.
### Documentation ###### Dispatch Origin
Must be [`Config::SpendOrigin`] with the `Success` value being at least
`amount` of `asset_kind` in the native asset. The amount of `asset_kind` is converted
for assertion using the [`Config::BalanceConverter`].
###### Details
### Types of parameters Create an approved spend for transferring a specific `amount` of `asset_kind` to a
designated beneficiary. The spend must be claimed using the `payout` dispatchable within
```rust the [`Config::PayoutPeriod`].
idty_id: T::IdtyId,
metadata: T::MetaData
```
</p>
</details>
### 53: SmithsCert ###### Parameters
- `asset_kind`: An indicator of the specific asset class to be spent.
- `amount`: The amount to be transferred from the treasury to the `beneficiary`.
- `beneficiary`: The beneficiary of the spend.
- `valid_from`: The block number from which the spend can be claimed. It can refer to
the past if the resulting spend has not yet expired according to the
[`Config::PayoutPeriod`]. If `None`, the spend can be claimed immediately after
approval.
<details><summary>0: force_add_cert(issuer, receiver, verify_rules)</summary> ###### Events
<p>
### Index Emits [`Event::AssetSpendApproved`] if successful.
`0` ### payout - 6
### Documentation <details><summary><code>payout(index)</code></summary>
Taking 0.0056 % of a block.
### Types of parameters
```rust ```rust
issuer: T::IdtyIndex, index: SpendIndex
receiver: T::IdtyIndex,
verify_rules: bool
``` ```
</p>
</details> </details>
<details><summary>2: del_cert(issuer, receiver)</summary>
<p>
### Index
`2` Claim a spend.
### Documentation ###### Dispatch Origin
Must be signed
###### Details
### Types of parameters Spends must be claimed within some temporal bounds. A spend may be claimed within one
[`Config::PayoutPeriod`] from the `valid_from` block.
In case of a payout failure, the spend status must be updated with the `check_status`
dispatchable before retrying with the current function.
```rust ###### Parameters
issuer: T::IdtyIndex, - `index`: The spend index.
receiver: T::IdtyIndex
```
</p> ###### Events
</details>
<details><summary>3: remove_all_certs_received_by(idty_index)</summary>
<p>
### Index
`3` Emits [`Event::Paid`] if successful.
### Documentation ### check_status - 7
<details><summary><code>check_status(index)</code></summary>
Taking 0.0056 % of a block.
### Types of parameters
```rust ```rust
idty_index: T::IdtyIndex index: SpendIndex
``` ```
</p>
</details> </details>
### 54: SmithsCollective
<details><summary>0: set_members(new_members, prime, old_count)</summary>
<p>
### Index Check the status of the spend and remove it from the storage if processed.
`0` ###### Dispatch Origin
### Documentation Must be signed.
Set the collective's membership. ###### Details
- `new_members`: The new member list. Be nice to the chain and provide it sorted. The status check is a prerequisite for retrying a failed payout.
- `prime`: The prime member whose vote sets the default. If a spend has either succeeded or expired, it is removed from the storage by this
- `old_count`: The upper bound for the previous number of members in storage. Used for function. In such instances, transaction fees are refunded.
weight estimation.
Requires root origin. ###### Parameters
- `index`: The spend index.
NOTE: Does not enforce the expected `MaxMembers` limit on the amount of members, but ###### Events
the weight estimations rely on it to estimate dispatchable weight.
# WARNING: Emits [`Event::PaymentFailed`] if the spend payout has failed.
Emits [`Event::SpendProcessed`] if the spend payout has succeed.
The `pallet-collective` can also be managed by logic outside of the pallet through the ### void_spend - 8
implementation of the trait [`ChangeMembers`].
Any call to `set_members` must be careful that the member set doesn't get out of sync
with other logic managing the member set.
<details><summary><code>void_spend(index)</code></summary>
### Types of parameters Taking 0.0056 % of a block.
```rust ```rust
new_members: Vec<T::AccountId>, index: SpendIndex
prime: Option<T::AccountId>,
old_count: MemberCount
``` ```
</p>
</details> </details>
<details><summary>5: disapprove_proposal(proposal_hash)</summary>
<p>
### Index
`5`
### Documentation
Disapprove a proposal, close, and remove it from the system, regardless of its current
state.
Must be called by the Root origin. Void previously approved spend.
Parameters:
* `proposal_hash`: The hash of the proposal that should be disapproved.
###### Dispatch Origin
### Types of parameters Must be [`Config::RejectOrigin`].
```rust ###### Details
proposal_hash: T::Hash
```
</p> A spend void is only possible if the payout has not been attempted yet.
</details>
###### Parameters
- `index`: The spend index.
### 64: Utility ###### Events
<details><summary>3: dispatch_as(as_origin, call)</summary> Emits [`Event::AssetSpendVoided`] if successful.
<p>
### Index
`3`
### Documentation
Dispatches a function call with a provided origin.
The dispatch origin for this call must be _Root_.
### Types of parameters
```rust
as_origin: Box<T::PalletsOrigin>,
call: Box<<T as Config>::Call>
```
</p>
</details>
# Runtime Constant
There are **69** constants from **35** pallets.
<ul>
<li>System - 0
<ul>
<li>
<details>
<summary>
<code>BlockWeights</code>
</summary>
Block & extrinsics weights: base values and limits.
```rust
value: frame_system::limits::BlockWeights({ base_block: { ref_time: 431614000, proof_size: 0 }, max_block: { ref_time: 2000000000000, proof_size: 18446744073709551615 }, per_class: { normal: { base_extrinsic: { ref_time: 108157000, proof_size: 0 }, max_extrinsic: Some ({ ref_time: 1299891843000, proof_size: 11990383647911208550 }), max_total: Some ({ ref_time: 1500000000000, proof_size: 13835058055282163711 }), reserved: Some ({ ref_time: 0, proof_size: 0 }) }, operational: { base_extrinsic: { ref_time: 108157000, proof_size: 0 }, max_extrinsic: Some ({ ref_time: 1799891843000, proof_size: 16602069666338596454 }), max_total: Some ({ ref_time: 2000000000000, proof_size: 18446744073709551615 }), reserved: Some ({ ref_time: 500000000000, proof_size: 4611686018427387904 }) }, mandatory: { base_extrinsic: { ref_time: 108157000, proof_size: 0 }, max_extrinsic: None (), max_total: None (), reserved: None () } } })
```
</details>
</li>
<li>
<details>
<summary>
<code>BlockLength</code>
</summary>
The maximum length of a block (in bytes).
```rust
value: frame_system::limits::BlockLength({ max: { normal: 3932160, operational: 5242880, mandatory: 5242880 } })
```
</details>
</li>
<li>
<details>
<summary>
<code>BlockHashCount</code>
</summary>
Maximum number of block number to block hash mappings to keep (oldest pruned first).
```rust
value: U32(2400)
```
</details>
</li>
<li>
<details>
<summary>
<code>DbWeight</code>
</summary>
The weight of runtime database operations the runtime can invoke.
```rust
value: sp_weights::RuntimeDbWeight({ read: 14314000, write: 99642000 })
```
</details>
</li>
<li>
<details>
<summary>
<code>Version</code>
</summary>
Get the chain's in-code version.
```rust
value: sp_version::RuntimeVersion({ spec_name: ("gdev"), impl_name: ("duniter-gdev"), authoring_version: 1, spec_version: 800, impl_version: 1, apis: ((((104, 122, 212, 74, 211, 127, 3, 194), 1), ((203, 202, 37, 227, 159, 20, 35, 135), 2), ((223, 106, 203, 104, 153, 7, 96, 155), 5), ((55, 227, 151, 252, 124, 145, 245, 228), 2), ((64, 254, 58, 212, 1, 248, 149, 154), 6), ((210, 188, 152, 151, 238, 208, 143, 21), 3), ((247, 139, 39, 139, 229, 63, 69, 76), 2), ((171, 60, 5, 114, 41, 31, 235, 139), 1), ((237, 153, 197, 172, 178, 94, 237, 245), 3), ((188, 157, 137, 144, 79, 91, 146, 63), 1), ((55, 200, 187, 19, 80, 169, 162, 168), 4), ((251, 197, 119, 185, 215, 71, 239, 214), 1))), transaction_version: 1, system_version: 1 })
```
</details>
</li>
<li>
<details>
<summary>
<code>SS58Prefix</code>
</summary>
The designated SS58 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.
```rust
value: U16(42)
```
</details>
</li>
</ul>
</li>
<li>Account - 1
<ul>
</ul>
</li>
<li>Scheduler - 2
<ul>
<li>
<details>
<summary>
<code>MaximumWeight</code>
</summary>
The maximum weight that may be scheduled per block for any dispatchables.
```rust
value: sp_weights::weight_v2::Weight({ ref_time: 1600000000000, proof_size: 14757395258967641292 })
```
</details>
</li>
<li>
<details>
<summary>
<code>MaxScheduledPerBlock</code>
</summary>
The maximum number of scheduled calls in the queue for a single block.
NOTE:
+ Dependent pallets' benchmarks might require a higher limit for the setting. Set a
higher limit under `runtime-benchmarks` feature.
```rust
value: U32(50)
```
</details>
</li>
</ul>
</li>
<li>Babe - 3
<ul>
<li>
<details>
<summary>
<code>EpochDuration</code>
</summary>
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.
```rust
value: U64(30)
```
</details>
</li>
<li>
<details>
<summary>
<code>ExpectedBlockTime</code>
</summary>
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).
```rust
value: U64(6000)
```
</details>
</li>
<li>
<details>
<summary>
<code>MaxAuthorities</code>
</summary>
Max number of authorities allowed
```rust
value: U32(32)
```
</details>
</li>
<li>
<details>
<summary>
<code>MaxNominators</code>
</summary>
The maximum number of nominators for each validator.
```rust
value: U32(64)
```
</details>
</li>
</ul>
</li>
<li>Timestamp - 4
<ul>
<li>
<details>
<summary>
<code>MinimumPeriod</code>
</summary>
The minimum period between blocks.
Be aware 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. For example, in the Aura pallet it will be double this
period on default settings.
```rust
value: U64(3000)
```
</details>
</li>
</ul>
</li>
<li>Parameters - 5
<ul>
</ul>
</li>
<li>Balances - 6
<ul>
<li>
<details>
<summary>
<code>ExistentialDeposit</code>
</summary>
The minimum amount required to keep an account open. MUST BE GREATER THAN ZERO!
If you *really* need it to be zero, you can enable the feature `insecure_zero_ed` for
this pallet. However, you do so at your own risk: this will open up a major DoS vector.
In case you have multiple sources of provider references, you may also get unexpected
behaviour if you set this to zero.
Bottom line: Do yourself a favour and make it at least one!
```rust
value: U64(100)
```
</details>
</li>
<li>
<details>
<summary>
<code>MaxLocks</code>
</summary>
The maximum number of locks that should exist on an account.
Not strictly enforced, but used for weight estimation.
Use of locks is deprecated in favour of freezes. See `https://github.com/paritytech/substrate/pull/12951/`
```rust
value: U32(50)
```
</details>
</li>
<li>
<details>
<summary>
<code>MaxReserves</code>
</summary>
The maximum number of named reserves that can exist on an account.
Use of reserves is deprecated in favour of holds. See `https://github.com/paritytech/substrate/pull/12951/`
```rust
value: U32(5)
```
</details>
</li>
<li>
<details>
<summary>
<code>MaxFreezes</code>
</summary>
The maximum number of individual freeze locks that can exist on an account at any time.
```rust
value: U32(0)
```
</details>
</li>
</ul>
</li>
<li>TransactionPayment - 32
<ul>
<li>
<details>
<summary>
<code>OperationalFeeMultiplier</code>
</summary>
A fee multiplier for `Operational` extrinsics to compute "virtual tip" to boost their
`priority`
This value is multiplied by the `final_fee` to obtain a "virtual tip" that is later
added to a tip component in regular `priority` calculations.
It means that a `Normal` transaction can front-run a similarly-sized `Operational`
extrinsic (with no tip), by including a tip value greater than the virtual tip.
```rust,ignore
// For `Normal`
let priority = priority_calc(tip);
// For `Operational`
let virtual_tip = (inclusion_fee + tip) * OperationalFeeMultiplier;
let priority = priority_calc(tip + virtual_tip);
```
Note that since we use `final_fee` the multiplier applies also to the regular `tip`
sent with the transaction. So, not only does the transaction get a priority bump based
on the `inclusion_fee`, but we also amplify the impact of tips applied to `Operational`
transactions.
```rust
value: U8(5)
```
</details>
</li>
</ul>
</li>
<li>OneshotAccount - 7
<ul>
</ul>
</li>
<li>Quota - 66
<ul>
<li>
<details>
<summary>
<code>RefundAccount</code>
</summary>
Account used to refund fees.
```rust
value: sp_core::crypto::AccountId32(((109, 111, 100, 108, 112, 121, 47, 116, 114, 115, 114, 121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)))
```
</details>
</li>
</ul>
</li>
<li>SmithMembers - 10
<ul>
<li>
<details>
<summary>
<code>MaxByIssuer</code>
</summary>
Maximum number of active certifications per issuer.
```rust
value: U32(8)
```
</details>
</li>
<li>
<details>
<summary>
<code>MinCertForMembership</code>
</summary>
Minimum number of certifications required to become a Smith.
```rust
value: U32(2)
```
</details>
</li>
<li>
<details>
<summary>
<code>SmithInactivityMaxDuration</code>
</summary>
Maximum duration of inactivity allowed before a Smith is removed.
```rust
value: U32(48)
```
</details>
</li>
</ul>
</li>
<li>AuthorityMembers - 11
<ul>
<li>
<details>
<summary>
<code>MaxAuthorities</code>
</summary>
Maximum number of authorities allowed.
```rust
value: U32(32)
```
</details>
</li>
</ul>
</li>
<li>Authorship - 12
<ul>
</ul>
</li>
<li>Offences - 13
<ul>
</ul>
</li>
<li>Historical - 14
<ul>
</ul>
</li>
<li>Session - 15
<ul>
</ul>
</li>
<li>Grandpa - 16
<ul>
<li>
<details>
<summary>
<code>MaxAuthorities</code>
</summary>
Max Authorities in use
```rust
value: U32(32)
```
</details>
</li>
<li>
<details>
<summary>
<code>MaxNominators</code>
</summary>
The maximum number of nominators for each validator.
```rust
value: U32(64)
```
</details>
</li>
<li>
<details>
<summary>
<code>MaxSetIdSessionEntries</code>
</summary>
The maximum number of entries to keep in the set id to session index mapping.
Since the `SetIdSession` map is only used for validating equivocations this
value should relate to the bonding duration of whatever staking system is
being used (if any). If equivocation handling is not enabled then this value
can be zero.
```rust
value: U64(1000)
```
</details>
</li>
</ul>
</li>
<li>ImOnline - 17
<ul>
<li>
<details>
<summary>
<code>UnsignedPriority</code>
</summary>
A configuration for base priority of unsigned transactions.
This is exposed so that it can be tuned for particular runtime, when
multiple pallets send unsigned transactions.
```rust
value: U64(18446744073709551615)
```
</details>
</li>
</ul>
</li>
<li>AuthorityDiscovery - 18
<ul>
</ul>
</li>
<li>Sudo - 20
<ul>
</ul>
</li>
<li>UpgradeOrigin - 21
<ul>
</ul>
</li>
<li>Preimage - 22
<ul>
</ul>
</li>
<li>TechnicalCommittee - 23
<ul>
<li>
<details>
<summary>
<code>MaxProposalWeight</code>
</summary>
The maximum weight of a dispatch call that can be proposed and executed.
```rust
value: sp_weights::weight_v2::Weight({ ref_time: 1000000000000, proof_size: 9223372036854775807 })
```
</details>
</li>
</ul>
</li>
<li>UniversalDividend - 30
<ul>
<li>
<details>
<summary>
<code>MaxPastReeval</code>
</summary>
Maximum number of past UD revaluations to keep in storage.
```rust
value: U32(160)
```
</details>
</li>
<li>
<details>
<summary>
<code>SquareMoneyGrowthRate</code>
</summary>
Square of the money growth rate per UD reevaluation period.
```rust
value: sp_arithmetic::per_things::Perbill((2381440))
```
</details>
</li>
<li>
<details>
<summary>
<code>UdCreationPeriod</code>
</summary>
Universal dividend creation period in milliseconds.
```rust
value: U64(60000)
```
</details>
</li>
<li>
<details>
<summary>
<code>UdReevalPeriod</code>
</summary>
Universal dividend reevaluation period in milliseconds.
```rust
value: U64(1200000)
```
</details>
</li>
</ul>
</li>
<li>Wot - 40
<ul>
<li>
<details>
<summary>
<code>FirstIssuableOn</code>
</summary>
The block number from which the first certification can be issued.
```rust
value: U32(20)
```
</details>
</li>
<li>
<details>
<summary>
<code>MinCertForMembership</code>
</summary>
The minimum number of certifications required for membership eligibility.
```rust
value: U32(2)
```
</details>
</li>
<li>
<details>
<summary>
<code>MinCertForCreateIdtyRight</code>
</summary>
The minimum number of certifications required to create an identity.
```rust
value: U32(2)
```
</details>
</li>
</ul>
</li>
<li>Identity - 41
<ul>
<li>
<details>
<summary>
<code>ConfirmPeriod</code>
</summary>
The period during which the owner can confirm the new identity.
```rust
value: U32(40)
```
</details>
</li>
<li>
<details>
<summary>
<code>ValidationPeriod</code>
</summary>
The period during which the identity has to be validated to become a member.
```rust
value: U32(876600)
```
</details>
</li>
<li>
<details>
<summary>
<code>AutorevocationPeriod</code>
</summary>
The period before which an identity that lost membership is automatically revoked.
```rust
value: U32(438300)
```
</details>
</li>
<li>
<details>
<summary>
<code>DeletionPeriod</code>
</summary>
The period after which a revoked identity is removed and the keys are freed.
```rust
value: U32(438300)
```
</details>
</li>
<li>
<details>
<summary>
<code>ChangeOwnerKeyPeriod</code>
</summary>
The minimum duration between two owner key changes to prevent identity theft.
```rust
value: U32(100800)
```
</details>
</li>
<li>
<details>
<summary>
<code>IdtyCreationPeriod</code>
</summary>
The minimum duration between the creation of two identities by the same creator.
Should be greater than or equal to the certification period defined in the certification pallet.
```rust
value: U32(50)
```
</details>
</li>
</ul>
</li>
<li>Membership - 42
<ul>
<li>
<details>
<summary>
<code>MembershipPeriod</code>
</summary>
Maximum lifespan of a single membership (in number of blocks).
```rust
value: U32(1000)
```
</details>
</li>
<li>
<details>
<summary>
<code>MembershipRenewalPeriod</code>
</summary>
Minimum delay to wait before renewing membership, i.e., asking for distance evaluation.
```rust
value: U32(1000)
```
</details>
</li>
</ul>
</li>
<li>Certification - 43
<ul>
<li>
<details>
<summary>
<code>CertPeriod</code>
</summary>
The minimum duration (in blocks) between two certifications issued by the same issuer.
```rust
value: U32(15)
```
</details>
</li>
<li>
<details>
<summary>
<code>MaxByIssuer</code>
</summary>
The maximum number of active certifications that can be issued by a single issuer.
```rust
value: U32(10)
```
</details>
</li>
<li>
<details>
<summary>
<code>MinReceivedCertToBeAbleToIssueCert</code>
</summary>
The minimum number of certifications received that an identity must have
to be allowed to issue a certification.
```rust
value: U32(2)
```
</details>
</li>
<li>
<details>
<summary>
<code>ValidityPeriod</code>
</summary>
The duration (in blocks) for which a certification remains valid.
```rust
value: U32(1000)
```
</details>
</li>
</ul>
</li>
<li>Distance - 44
<ul>
<li>
<details>
<summary>
<code>EvaluationPrice</code>
</summary>
The amount reserved during evaluation.
```rust
value: U64(1000)
```
</details>
</li>
<li>
<details>
<summary>
<code>EvaluationPeriod</code>
</summary>
The evaluation period in blocks.
Since the evaluation uses 3 pools, the total evaluation time will be 3 * EvaluationPeriod.
```rust
value: U32(7)
```
</details>
</li>
<li>
<details>
<summary>
<code>MaxRefereeDistance</code>
</summary>
The maximum distance used to define a referee's accessibility.
This value is not used by the runtime but is needed by the client distance oracle.
```rust
value: U32(5)
```
</details>
</li>
<li>
<details>
<summary>
<code>MinAccessibleReferees</code>
</summary>
The minimum ratio of accessible referees required.
```rust
value: sp_arithmetic::per_things::Perbill((800000000))
```
</details>
</li>
</ul>
</li>
<li>AtomicSwap - 50
<ul>
<li>
<details>
<summary>
<code>ProofLimit</code>
</summary>
Limit of proof size.
Atomic swap is only atomic if once the proof is revealed, both parties can submit the
proofs on-chain. If A is the one that generates the proof, then it requires that either:
- A's blockchain has the same proof length limit as B's blockchain.
- Or A's blockchain has shorter proof length limit as B's blockchain.
If B sees A is on a blockchain with larger proof length limit, then it should kindly
refuse to accept the atomic swap request if A generates the proof, and asks that B
generates the proof instead.
```rust
value: U32(1024)
```
</details>
</li>
</ul>
</li>
<li>Multisig - 51
<ul>
<li>
<details>
<summary>
<code>DepositBase</code>
</summary>
The base amount of currency needed to reserve for creating a multisig execution or to
store a dispatch call for later.
This is held for an additional storage item whose value size is
`4 + sizeof((BlockNumber, Balance, AccountId))` bytes and whose key size is
`32 + sizeof(AccountId)` bytes.
```rust
value: U64(100)
```
</details>
</li>
<li>
<details>
<summary>
<code>DepositFactor</code>
</summary>
The amount of currency needed per unit threshold when creating a multisig execution.
This is held for adding 32 bytes more into a pre-existing storage value.
```rust
value: U64(32)
```
</details>
</li>
<li>
<details>
<summary>
<code>MaxSignatories</code>
</summary>
The maximum amount of signatories allowed in the multisig.
```rust
value: U32(10)
```
</details>
</li>
</ul>
</li>
<li>ProvideRandomness - 52
<ul>
<li>
<details>
<summary>
<code>MaxRequests</code>
</summary>
Maximum number of not yet filled requests.
```rust
value: U32(100)
```
</details>
</li>
<li>
<details>
<summary>
<code>RequestPrice</code>
</summary>
The price of a request.
```rust
value: U64(2000)
```
</details>
</li>
</ul>
</li>
<li>Proxy - 53
<ul>
<li>
<details>
<summary>
<code>ProxyDepositBase</code>
</summary>
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.
```rust
value: U64(108)
```
</details>
</li>
<li>
<details>
<summary>
<code>ProxyDepositFactor</code>
</summary>
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.
```rust
value: U64(33)
```
</details>
</li>
<li>
<details>
<summary>
<code>MaxProxies</code>
</summary>
The maximum amount of proxies allowed for a single account.
```rust
value: U32(32)
```
</details>
</li>
<li>
<details>
<summary>
<code>MaxPending</code>
</summary>
The maximum amount of time-delayed announcements that are allowed to be pending.
```rust
value: U32(32)
```
</details>
</li>
<li>
<details>
<summary>
<code>AnnouncementDepositBase</code>
</summary>
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).
```rust
value: U64(108)
```
</details>
</li>
<li>
<details>
<summary>
<code>AnnouncementDepositFactor</code>
</summary>
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.
```rust
value: U64(66)
```
</details>
</li>
</ul>
</li>
<li>Utility - 54
<ul>
<li>
<details>
<summary>
<code>batched_calls_limit</code>
</summary>
The limit on the number of batched calls.
```rust
value: U32(10922)
```
</details>
</li>
</ul>
</li>
<li>Treasury - 55
<ul>
<li>
<details>
<summary>
<code>SpendPeriod</code>
</summary>
Period between successive spends.
```rust
value: U32(14400)
```
</details>
</li>
<li>
<details>
<summary>
<code>Burn</code>
</summary>
Percentage of spare funds (if any) that are burnt per spend period.
```rust
value: sp_arithmetic::per_things::Permill((0))
```
</details>
</li>
<li>
<details>
<summary>
<code>PalletId</code>
</summary>
The treasury's pallet id, used for deriving its sovereign account ID.
```rust
value: frame_support::PalletId(((112, 121, 47, 116, 114, 115, 114, 121)))
```
</details>
</li>
<li>
<details>
<summary>
<code>MaxApprovals</code>
</summary>
DEPRECATED: associated with `spend_local` call and will be removed in May 2025.
Refer to <https://github.com/paritytech/polkadot-sdk/pull/5961> for migration to `spend`.
The maximum number of approvals that can wait in the spending queue.
NOTE: This parameter is also used within the Bounties Pallet extension if enabled.
```rust
value: U32(100)
```
</details>
</li>
<li>
<details>
<summary>
<code>PayoutPeriod</code>
</summary>
The period during which an approved treasury spend has to be claimed.
```rust
value: U32(10)
```
</details>
</li>
</ul>
</li>
</ul>
# Runtime errors
There are **192** errors from **35** pallets.
<ul>
<li>System - 0
<ul>
<li>
<details>
<summary>
<code>InvalidSpecName</code> - 0</summary>
The name of specification does not match between the current runtime
and the new runtime.
</details>
</li>
<li>
<details>
<summary>
<code>SpecVersionNeedsToIncrease</code> - 1</summary>
The specification version is not allowed to decrease between the current runtime
and the new runtime.
</details>
</li>
<li>
<details>
<summary>
<code>FailedToExtractRuntimeVersion</code> - 2</summary>
Failed to extract the runtime version from the new runtime.
Either calling `Core_version` or decoding `RuntimeVersion` failed.
</details>
</li>
<li>
<details>
<summary>
<code>NonDefaultComposite</code> - 3</summary>
Suicide called when the account has non-default composite data.
</details>
</li>
<li>
<details>
<summary>
<code>NonZeroRefCount</code> - 4</summary>
There is a non-zero reference count preventing the account from being purged.
</details>
</li>
<li>
<details>
<summary>
<code>CallFiltered</code> - 5</summary>
The origin filter prevent the call to be dispatched.
</details>
</li>
<li>
<details>
<summary>
<code>MultiBlockMigrationsOngoing</code> - 6</summary>
A multi-block migration is ongoing and prevents the current code from being replaced.
</details>
</li>
<li>
<details>
<summary>
<code>NothingAuthorized</code> - 7</summary>
No upgrade authorized.
</details>
</li>
<li>
<details>
<summary>
<code>Unauthorized</code> - 8</summary>
The submitted code is not authorized.
</details>
</li>
</ul>
</li>
<li>Account - 1
<ul>
</ul>
</li>
<li>Scheduler - 2
<ul>
<li>
<details>
<summary>
<code>FailedToSchedule</code> - 0</summary>
Failed to schedule a call
</details>
</li>
<li>
<details>
<summary>
<code>NotFound</code> - 1</summary>
Cannot find the scheduled call.
</details>
</li>
<li>
<details>
<summary>
<code>TargetBlockNumberInPast</code> - 2</summary>
Given target block number is in the past.
</details>
</li>
<li>
<details>
<summary>
<code>RescheduleNoChange</code> - 3</summary>
Reschedule failed because it does not change scheduled time.
</details>
</li>
<li>
<details>
<summary>
<code>Named</code> - 4</summary>
Attempt to use a non-named function on a named task.
</details>
</li>
</ul>
</li>
<li>Babe - 3
<ul>
<li>
<details>
<summary>
<code>InvalidEquivocationProof</code> - 0</summary>
An equivocation proof provided as part of an equivocation report is invalid.
</details>
</li>
<li>
<details>
<summary>
<code>InvalidKeyOwnershipProof</code> - 1</summary>
A key ownership proof provided as part of an equivocation report is invalid.
</details>
</li>
<li>
<details>
<summary>
<code>DuplicateOffenceReport</code> - 2</summary>
A given equivocation report is valid but already previously reported.
</details>
</li>
<li>
<details>
<summary>
<code>InvalidConfiguration</code> - 3</summary>
Submitted configuration is invalid.
</details>
</li>
</ul>
</li>
<li>Timestamp - 4
<ul>
</ul>
</li>
<li>Parameters - 5
<ul>
</ul>
</li>
<li>Balances - 6
<ul>
<li>
<details>
<summary>
<code>VestingBalance</code> - 0</summary>
Vesting balance too high to send value.
</details>
</li>
<li>
<details>
<summary>
<code>LiquidityRestrictions</code> - 1</summary>
Account liquidity restrictions prevent withdrawal.
</details>
</li>
<li>
<details>
<summary>
<code>InsufficientBalance</code> - 2</summary>
Balance too low to send value.
</details>
</li>
<li>
<details>
<summary>
<code>ExistentialDeposit</code> - 3</summary>
Value too low to create account due to existential deposit.
</details>
</li>
<li>
<details>
<summary>
<code>Expendability</code> - 4</summary>
Transfer/payment would kill account.
</details>
</li>
<li>
<details>
<summary>
<code>ExistingVestingSchedule</code> - 5</summary>
A vesting schedule already exists for this account.
</details>
</li>
<li>
<details>
<summary>
<code>DeadAccount</code> - 6</summary>
Beneficiary account must pre-exist.
</details>
</li>
<li>
<details>
<summary>
<code>TooManyReserves</code> - 7</summary>
Number of named reserves exceed `MaxReserves`.
</details>
</li>
<li>
<details>
<summary>
<code>TooManyHolds</code> - 8</summary>
Number of holds exceed `VariantCountOf<T::RuntimeHoldReason>`.
</details>
</li>
<li>
<details>
<summary>
<code>TooManyFreezes</code> - 9</summary>
Number of freezes exceed `MaxFreezes`.
</details>
</li>
<li>
<details>
<summary>
<code>IssuanceDeactivated</code> - 10</summary>
The issuance cannot be modified since it is already deactivated.
</details>
</li>
<li>
<details>
<summary>
<code>DeltaZero</code> - 11</summary>
The delta cannot be zero.
</details>
</li>
</ul>
</li>
<li>TransactionPayment - 32
<ul>
</ul>
</li>
<li>OneshotAccount - 7
<ul>
<li>
<details>
<summary>
<code>BlockHeightInFuture</code> - 0</summary>
Block height is in the future.
</details>
</li>
<li>
<details>
<summary>
<code>BlockHeightTooOld</code> - 1</summary>
Block height is too old.
</details>
</li>
<li>
<details>
<summary>
<code>DestAccountNotExist</code> - 2</summary>
Destination account does not exist.
</details>
</li>
<li>
<details>
<summary>
<code>ExistentialDeposit</code> - 3</summary>
Destination account has a balance less than the existential deposit.
</details>
</li>
<li>
<details>
<summary>
<code>InsufficientBalance</code> - 4</summary>
Source account has insufficient balance.
</details>
</li>
<li>
<details>
<summary>
<code>OneshotAccountAlreadyCreated</code> - 5</summary>
Destination oneshot account already exists.
</details>
</li>
<li>
<details>
<summary>
<code>OneshotAccountNotExist</code> - 6</summary>
Source oneshot account does not exist.
</details>
</li>
</ul>
</li>
<li>Quota - 66
<ul>
</ul>
</li>
<li>SmithMembers - 10
<ul>
<li>
<details>
<summary>
<code>OriginMustHaveAnIdentity</code> - 0</summary>
Issuer of anything (invitation, acceptance, certification) must have an identity ID
</details>
</li>
<li>
<details>
<summary>
<code>OriginHasNeverBeenInvited</code> - 1</summary>
Issuer must be known as a potential smith
</details>
</li>
<li>
<details>
<summary>
<code>InvitationIsASmithPrivilege</code> - 2</summary>
Invitation is reseverd to smiths
</details>
</li>
<li>
<details>
<summary>
<code>InvitationIsAOnlineSmithPrivilege</code> - 3</summary>
Invitation is reseverd to online smiths
</details>
</li>
<li>
<details>
<summary>
<code>InvitationAlreadyAccepted</code> - 4</summary>
Invitation must not have been accepted yet
</details>
</li>
<li>
<details>
<summary>
<code>InvitationOfExistingNonExcluded</code> - 5</summary>
Invitation of an already known smith is forbidden except if it has been excluded
</details>
</li>
<li>
<details>
<summary>
<code>InvitationOfNonMember</code> - 6</summary>
Invitation of a non-member (of the WoT) is forbidden
</details>
</li>
<li>
<details>
<summary>
<code>CertificationMustBeAgreed</code> - 7</summary>
Certification cannot be made on someone who has not accepted an invitation
</details>
</li>
<li>
<details>
<summary>
<code>CertificationOnExcludedIsForbidden</code> - 8</summary>
Certification cannot be made on excluded
</details>
</li>
<li>
<details>
<summary>
<code>CertificationIsASmithPrivilege</code> - 9</summary>
Issuer must be a smith
</details>
</li>
<li>
<details>
<summary>
<code>CertificationIsAOnlineSmithPrivilege</code> - 10</summary>
Only online smiths can certify
</details>
</li>
<li>
<details>
<summary>
<code>CertificationOfSelfIsForbidden</code> - 11</summary>
Smith cannot certify itself
</details>
</li>
<li>
<details>
<summary>
<code>CertificationReceiverMustHaveBeenInvited</code> - 12</summary>
Receiver must be invited by another smith
</details>
</li>
<li>
<details>
<summary>
<code>CertificationAlreadyExists</code> - 13</summary>
Receiver must not already have this certification
</details>
</li>
<li>
<details>
<summary>
<code>CertificationStockFullyConsumed</code> - 14</summary>
A smith has a limited stock of certifications
</details>
</li>
</ul>
</li>
<li>AuthorityMembers - 11
<ul>
<li>
<details>
<summary>
<code>AlreadyIncoming</code> - 0</summary>
Member already incoming.
</details>
</li>
<li>
<details>
<summary>
<code>AlreadyOnline</code> - 1</summary>
Member already online.
</details>
</li>
<li>
<details>
<summary>
<code>AlreadyOutgoing</code> - 2</summary>
Member already outgoing.
</details>
</li>
<li>
<details>
<summary>
<code>MemberIdNotFound</code> - 3</summary>
Owner key is invalid as a member.
</details>
</li>
<li>
<details>
<summary>
<code>MemberBlacklisted</code> - 4</summary>
Member is blacklisted.
</details>
</li>
<li>
<details>
<summary>
<code>MemberNotBlacklisted</code> - 5</summary>
Member is not blacklisted.
</details>
</li>
<li>
<details>
<summary>
<code>MemberNotFound</code> - 6</summary>
Member not found.
</details>
</li>
<li>
<details>
<summary>
<code>NotOnlineNorIncoming</code> - 7</summary>
Neither online nor scheduled.
</details>
</li>
<li>
<details>
<summary>
<code>NotMember</code> - 8</summary>
Not member.
</details>
</li>
<li>
<details>
<summary>
<code>SessionKeysNotProvided</code> - 9</summary>
Session keys not provided.
</details>
</li>
<li>
<details>
<summary>
<code>TooManyAuthorities</code> - 10</summary>
Too many authorities.
</details>
</li>
</ul>
</li>
<li>Authorship - 12
<ul>
</ul>
</li>
<li>Offences - 13
<ul>
</ul>
</li>
<li>Historical - 14
<ul>
</ul>
</li>
<li>Session - 15
<ul>
<li>
<details>
<summary>
<code>InvalidProof</code> - 0</summary>
Invalid ownership proof.
</details>
</li>
<li>
<details>
<summary>
<code>NoAssociatedValidatorId</code> - 1</summary>
No associated validator ID for account.
</details>
</li>
<li>
<details>
<summary>
<code>DuplicatedKey</code> - 2</summary>
Registered duplicate key.
</details>
</li>
<li>
<details>
<summary>
<code>NoKeys</code> - 3</summary>
No keys are associated with this account.
</details>
</li>
<li>
<details>
<summary>
<code>NoAccount</code> - 4</summary>
Key setting account is not live, so it's impossible to associate keys.
</details>
</li>
</ul>
</li>
<li>Grandpa - 16
<ul>
<li>
<details>
<summary>
<code>PauseFailed</code> - 0</summary>
Attempt to signal GRANDPA pause when the authority set isn't live
(either paused or already pending pause).
</details>
</li>
<li>
<details>
<summary>
<code>ResumeFailed</code> - 1</summary>
Attempt to signal GRANDPA resume when the authority set isn't paused
(either live or already pending resume).
</details>
</li>
<li>
<details>
<summary>
<code>ChangePending</code> - 2</summary>
Attempt to signal GRANDPA change with one already pending.
</details>
</li>
<li>
<details>
<summary>
<code>TooSoon</code> - 3</summary>
Cannot signal forced change so soon after last.
</details>
</li>
<li>
<details>
<summary>
<code>InvalidKeyOwnershipProof</code> - 4</summary>
A key ownership proof provided as part of an equivocation report is invalid.
</details>
</li>
<li>
<details>
<summary>
<code>InvalidEquivocationProof</code> - 5</summary>
An equivocation proof provided as part of an equivocation report is invalid.
</details>
</li>
<li>
<details>
<summary>
<code>DuplicateOffenceReport</code> - 6</summary>
A given equivocation report is valid but already previously reported.
</details>
</li>
</ul>
</li>
<li>ImOnline - 17
<ul>
<li>
<details>
<summary>
<code>InvalidKey</code> - 0</summary>
Non existent public key.
</details>
</li>
<li>
<details>
<summary>
<code>DuplicatedHeartbeat</code> - 1</summary>
Duplicated heartbeat.
</details>
</li>
</ul>
</li>
<li>AuthorityDiscovery - 18
<ul>
</ul>
</li>
<li>Sudo - 20
<ul>
<li>
<details>
<summary>
<code>RequireSudo</code> - 0</summary>
Sender must be the Sudo account.
</details>
</li>
</ul>
</li>
<li>UpgradeOrigin - 21
<ul>
</ul>
</li>
<li>Preimage - 22
<ul>
<li>
<details>
<summary>
<code>TooBig</code> - 0</summary>
Preimage is too large to store on-chain.
</details>
</li>
<li>
<details>
<summary>
<code>AlreadyNoted</code> - 1</summary>
Preimage has already been noted on-chain.
</details>
</li>
<li>
<details>
<summary>
<code>NotAuthorized</code> - 2</summary>
The user is not authorized to perform this action.
</details>
</li>
<li>
<details>
<summary>
<code>NotNoted</code> - 3</summary>
The preimage cannot be removed since it has not yet been noted.
</details>
</li>
<li>
<details>
<summary>
<code>Requested</code> - 4</summary>
A preimage may not be removed when there are outstanding requests.
</details>
</li>
<li>
<details>
<summary>
<code>NotRequested</code> - 5</summary>
The preimage request cannot be removed since no outstanding requests exist.
</details>
</li>
<li>
<details>
<summary>
<code>TooMany</code> - 6</summary>
More than `MAX_HASH_UPGRADE_BULK_COUNT` hashes were requested to be upgraded at once.
</details>
</li>
<li>
<details>
<summary>
<code>TooFew</code> - 7</summary>
Too few hashes were requested to be upgraded (i.e. zero).
</details>
</li>
</ul>
</li>
<li>TechnicalCommittee - 23
<ul>
<li>
<details>
<summary>
<code>NotMember</code> - 0</summary>
Account is not a member
</details>
</li>
<li>
<details>
<summary>
<code>DuplicateProposal</code> - 1</summary>
Duplicate proposals not allowed
</details>
</li>
<li>
<details>
<summary>
<code>ProposalMissing</code> - 2</summary>
Proposal must exist
</details>
</li>
<li>
<details>
<summary>
<code>WrongIndex</code> - 3</summary>
Mismatched index
</details>
</li>
<li>
<details>
<summary>
<code>DuplicateVote</code> - 4</summary>
Duplicate vote ignored
</details>
</li>
<li>
<details>
<summary>
<code>AlreadyInitialized</code> - 5</summary>
Members are already initialized!
</details>
</li>
<li>
<details>
<summary>
<code>TooEarly</code> - 6</summary>
The close call was made too early, before the end of the voting.
</details>
</li>
<li>
<details>
<summary>
<code>TooManyProposals</code> - 7</summary>
There can only be a maximum of `MaxProposals` active proposals.
</details>
</li>
<li>
<details>
<summary>
<code>WrongProposalWeight</code> - 8</summary>
The given weight bound for the proposal was too low.
</details>
</li>
<li>
<details>
<summary>
<code>WrongProposalLength</code> - 9</summary>
The given length bound for the proposal was too low.
</details>
</li>
<li>
<details>
<summary>
<code>PrimeAccountNotMember</code> - 10</summary>
Prime account is not a member
</details>
</li>
<li>
<details>
<summary>
<code>ProposalActive</code> - 11</summary>
Proposal is still active.
</details>
</li>
</ul>
</li>
<li>UniversalDividend - 30
<ul>
<li>
<details>
<summary>
<code>AccountNotAllowedToClaimUds</code> - 0</summary>
This account is not allowed to claim UDs.
</details>
</li>
</ul>
</li>
<li>Wot - 40
<ul>
<li>
<details>
<summary>
<code>NotEnoughCerts</code> - 0</summary>
Insufficient certifications received.
</details>
</li>
<li>
<details>
<summary>
<code>TargetStatusInvalid</code> - 1</summary>
Target status is incompatible with this operation.
</details>
</li>
<li>
<details>
<summary>
<code>IdtyCreationPeriodNotRespected</code> - 2</summary>
Identity creation period not respected.
</details>
</li>
<li>
<details>
<summary>
<code>NotEnoughReceivedCertsToCreateIdty</code> - 3</summary>
Insufficient received certifications to create identity.
</details>
</li>
<li>
<details>
<summary>
<code>MaxEmittedCertsReached</code> - 4</summary>
Maximum number of emitted certifications reached.
</details>
</li>
<li>
<details>
<summary>
<code>IssuerNotMember</code> - 5</summary>
Issuer cannot emit a certification because it is not member.
</details>
</li>
<li>
<details>
<summary>
<code>IdtyNotFound</code> - 6</summary>
Issuer or receiver not found.
</details>
</li>
<li>
<details>
<summary>
<code>MembershipRenewalPeriodNotRespected</code> - 7</summary>
Membership can only be renewed after an antispam delay.
</details>
</li>
</ul>
</li>
<li>Identity - 41
<ul>
<li>
<details>
<summary>
<code>IdtyAlreadyConfirmed</code> - 0</summary>
Identity already confirmed.
</details>
</li>
<li>
<details>
<summary>
<code>IdtyAlreadyCreated</code> - 1</summary>
Identity already created.
</details>
</li>
<li>
<details>
<summary>
<code>IdtyIndexNotFound</code> - 2</summary>
Identity index not found.
</details>
</li>
<li>
<details>
<summary>
<code>IdtyNameAlreadyExist</code> - 3</summary>
Identity name already exists.
</details>
</li>
<li>
<details>
<summary>
<code>IdtyNameInvalid</code> - 4</summary>
Invalid identity name.
</details>
</li>
<li>
<details>
<summary>
<code>IdtyNotFound</code> - 5</summary>
Identity not found.
</details>
</li>
<li>
<details>
<summary>
<code>InvalidSignature</code> - 6</summary>
Invalid payload signature.
</details>
</li>
<li>
<details>
<summary>
<code>InvalidRevocationKey</code> - 7</summary>
Invalid revocation key.
</details>
</li>
<li>
<details>
<summary>
<code>IssuerNotMember</code> - 8</summary>
Issuer is not member and can not perform this action.
</details>
</li>
<li>
<details>
<summary>
<code>NotRespectIdtyCreationPeriod</code> - 9</summary>
Identity creation period is not respected.
</details>
</li>
<li>
<details>
<summary>
<code>OwnerKeyAlreadyRecentlyChanged</code> - 10</summary>
Owner key already changed recently.
</details>
</li>
<li>
<details>
<summary>
<code>OwnerKeyAlreadyUsed</code> - 11</summary>
Owner key already used.
</details>
</li>
<li>
<details>
<summary>
<code>ProhibitedToRevertToAnOldKey</code> - 12</summary>
Reverting to an old key is prohibited.
</details>
</li>
<li>
<details>
<summary>
<code>AlreadyRevoked</code> - 13</summary>
Already revoked.
</details>
</li>
<li>
<details>
<summary>
<code>CanNotRevokeUnconfirmed</code> - 14</summary>
Can not revoke identity that never was member.
</details>
</li>
<li>
<details>
<summary>
<code>CanNotRevokeUnvalidated</code> - 15</summary>
Can not revoke identity that never was member.
</details>
</li>
<li>
<details>
<summary>
<code>AccountNotExist</code> - 16</summary>
Cannot link to an inexisting account.
</details>
</li>
<li>
<details>
<summary>
<code>InsufficientBalance</code> - 17</summary>
Insufficient balance to create an identity.
</details>
</li>
<li>
<details>
<summary>
<code>OwnerKeyUsedAsValidator</code> - 18</summary>
Owner key currently used as validator.
</details>
</li>
<li>
<details>
<summary>
<code>InvalidLegacyRevocationFormat</code> - 19</summary>
Legacy revocation document format is invalid
</details>
</li>
</ul>
</li>
<li>Membership - 42
<ul>
<li>
<details>
<summary>
<code>MembershipNotFound</code> - 0</summary>
Membership not found, can not renew.
</details>
</li>
<li>
<details>
<summary>
<code>AlreadyMember</code> - 1</summary>
Already member, can not add membership.
</details>
</li>
</ul>
</li>
<li>Certification - 43
<ul>
<li>
<details>
<summary>
<code>OriginMustHaveAnIdentity</code> - 0</summary>
Issuer of a certification must have an identity
</details>
</li>
<li>
<details>
<summary>
<code>CannotCertifySelf</code> - 1</summary>
Identity cannot certify itself.
</details>
</li>
<li>
<details>
<summary>
<code>IssuedTooManyCert</code> - 2</summary>
Identity has already issued the maximum number of certifications.
</details>
</li>
<li>
<details>
<summary>
<code>NotEnoughCertReceived</code> - 3</summary>
Insufficient certifications received.
</details>
</li>
<li>
<details>
<summary>
<code>NotRespectCertPeriod</code> - 4</summary>
Identity has issued a certification too recently.
</details>
</li>
<li>
<details>
<summary>
<code>CertAlreadyExists</code> - 5</summary>
Can not add an already-existing cert
</details>
</li>
<li>
<details>
<summary>
<code>CertDoesNotExist</code> - 6</summary>
Can not renew a non-existing cert
</details>
</li>
</ul>
</li>
<li>Distance - 44
<ul>
<li>
<details>
<summary>
<code>AlreadyInEvaluation</code> - 0</summary>
Distance is already under evaluation.
</details>
</li>
<li>
<details>
<summary>
<code>TooManyEvaluationsByAuthor</code> - 1</summary>
Too many evaluations requested by author.
</details>
</li>
<li>
<details>
<summary>
<code>TooManyEvaluationsInBlock</code> - 2</summary>
Too many evaluations for this block.
</details>
</li>
<li>
<details>
<summary>
<code>NoAuthor</code> - 3</summary>
No author for this block.
</details>
</li>
<li>
<details>
<summary>
<code>CallerHasNoIdentity</code> - 4</summary>
Caller has no identity.
</details>
</li>
<li>
<details>
<summary>
<code>CallerIdentityNotFound</code> - 5</summary>
Caller identity not found.
</details>
</li>
<li>
<details>
<summary>
<code>CallerNotMember</code> - 6</summary>
Caller not member.
</details>
</li>
<li>
<details>
<summary>
<code>CallerStatusInvalid</code> - 7</summary>
</details>
</li>
<li>
<details>
<summary>
<code>TargetIdentityNotFound</code> - 8</summary>
Target identity not found.
</details>
</li>
<li>
<details>
<summary>
<code>QueueFull</code> - 9</summary>
Evaluation queue is full.
</details>
</li>
<li>
<details>
<summary>
<code>TooManyEvaluators</code> - 10</summary>
Too many evaluators in the current evaluation pool.
</details>
</li>
<li>
<details>
<summary>
<code>WrongResultLength</code> - 11</summary>
Evaluation result has a wrong length.
</details>
</li>
<li>
<details>
<summary>
<code>TargetMustBeUnvalidated</code> - 12</summary>
Targeted distance evaluation request is only possible for an unvalidated identity.
</details>
</li>
</ul>
</li>
<li>AtomicSwap - 50
<ul>
<li>
<details>
<summary>
<code>AlreadyExist</code> - 0</summary>
Swap already exists.
</details>
</li>
<li>
<details>
<summary>
<code>InvalidProof</code> - 1</summary>
Swap proof is invalid.
</details>
</li>
<li>
<details>
<summary>
<code>ProofTooLarge</code> - 2</summary>
Proof is too large.
</details>
</li>
<li>
<details>
<summary>
<code>SourceMismatch</code> - 3</summary>
Source does not match.
</details>
</li>
<li>
<details>
<summary>
<code>AlreadyClaimed</code> - 4</summary>
Swap has already been claimed.
</details>
</li>
<li>
<details>
<summary>
<code>NotExist</code> - 5</summary>
Swap does not exist.
</details>
</li>
<li>
<details>
<summary>
<code>ClaimActionMismatch</code> - 6</summary>
Claim action mismatch.
</details>
</li>
<li>
<details>
<summary>
<code>DurationNotPassed</code> - 7</summary>
Duration has not yet passed for the swap to be cancelled.
</details>
</li>
</ul>
</li>
<li>Multisig - 51
<ul>
<li>
<details>
<summary>
<code>MinimumThreshold</code> - 0</summary>
Threshold must be 2 or greater.
</details>
</li>
<li>
<details>
<summary>
<code>AlreadyApproved</code> - 1</summary>
Call is already approved by this signatory.
</details>
</li>
<li>
<details>
<summary>
<code>NoApprovalsNeeded</code> - 2</summary>
Call doesn't need any (more) approvals.
</details>
</li>
<li>
<details>
<summary>
<code>TooFewSignatories</code> - 3</summary>
There are too few signatories in the list.
</details>
</li>
<li>
<details>
<summary>
<code>TooManySignatories</code> - 4</summary>
There are too many signatories in the list.
</details>
</li>
<li>
<details>
<summary>
<code>SignatoriesOutOfOrder</code> - 5</summary>
The signatories were provided out of order; they should be ordered.
</details>
</li>
<li>
<details>
<summary>
<code>SenderInSignatories</code> - 6</summary>
The sender was contained in the other signatories; it shouldn't be.
</details>
</li>
<li>
<details>
<summary>
<code>NotFound</code> - 7</summary>
Multisig operation not found when attempting to cancel.
</details>
</li>
<li>
<details>
<summary>
<code>NotOwner</code> - 8</summary>
Only the account that originally created the multisig is able to cancel it.
</details>
</li>
<li>
<details>
<summary>
<code>NoTimepoint</code> - 9</summary>
No timepoint was given, yet the multisig operation is already underway.
</details>
</li>
<li>
<details>
<summary>
<code>WrongTimepoint</code> - 10</summary>
A different timepoint was given to the multisig operation that is underway.
</details>
</li>
<li>
<details>
<summary>
<code>UnexpectedTimepoint</code> - 11</summary>
A timepoint was given, yet no multisig operation is underway.
</details>
</li>
<li>
<details>
<summary>
<code>MaxWeightTooLow</code> - 12</summary>
The maximum weight information provided was too low.
</details>
</li>
<li>
<details>
<summary>
<code>AlreadyStored</code> - 13</summary>
The data to be stored is already stored.
</details>
</li>
</ul>
</li>
<li>ProvideRandomness - 52
<ul>
<li>
<details>
<summary>
<code>QueueFull</code> - 0</summary>
Request randomness queue is full.
</details>
</li>
</ul>
</li>
<li>Proxy - 53
<ul>
<li>
<details>
<summary>
<code>TooMany</code> - 0</summary>
There are too many proxies registered or too many announcements pending.
</details>
</li>
<li>
<details>
<summary>
<code>NotFound</code> - 1</summary>
Proxy registration not found.
</details>
</li>
<li>
<details>
<summary>
<code>NotProxy</code> - 2</summary>
Sender is not a proxy of the account to be proxied.
</details>
</li>
<li>
<details>
<summary>
<code>Unproxyable</code> - 3</summary>
A call which is incompatible with the proxy type's filter was attempted.
</details>
</li>
<li>
<details>
<summary>
<code>Duplicate</code> - 4</summary>
Account is already a proxy.
</details>
</li>
<li>
<details>
<summary>
<code>NoPermission</code> - 5</summary>
Call may not be made by proxy because it may escalate its privileges.
</details>
</li>
<li>
<details>
<summary>
<code>Unannounced</code> - 6</summary>
Announcement, if made at all, was made too recently.
</details>
</li>
<li>
<details>
<summary>
<code>NoSelfProxy</code> - 7</summary>
Cannot add self as proxy.
</details>
</li>
</ul>
</li>
<li>Utility - 54
<ul>
<li>
<details>
<summary>
<code>TooManyCalls</code> - 0</summary>
Too many calls batched.
</details>
</li>
</ul>
</li>
<li>Treasury - 55
<ul>
<li>
<details>
<summary>
<code>InvalidIndex</code> - 0</summary>
No proposal, bounty or spend at that index.
</details>
</li>
<li>
<details>
<summary>
<code>TooManyApprovals</code> - 1</summary>
Too many approvals in the queue.
</details>
</li>
<li>
<details>
<summary>
<code>InsufficientPermission</code> - 2</summary>
The spend origin is valid but the amount it is allowed to spend is lower than the
amount to be spent.
</details>
</li>
<li>
<details>
<summary>
<code>ProposalNotApproved</code> - 3</summary>
Proposal has not been approved.
</details>
</li>
<li>
<details>
<summary>
<code>FailedToConvertBalance</code> - 4</summary>
The balance of the asset kind is not convertible to the balance of the native asset.
</details>
</li>
<li>
<details>
<summary>
<code>SpendExpired</code> - 5</summary>
The spend has expired and cannot be claimed.
</details>
</li>
<li>
<details>
<summary>
<code>EarlyPayout</code> - 6</summary>
The spend is not yet eligible for payout.
</details>
</li>
<li>
<details>
<summary>
<code>AlreadyAttempted</code> - 7</summary>
The payment has already been attempted.
</details>
</li>
<li>
<details>
<summary>
<code>PayoutError</code> - 8</summary>
There was some issue with the mechanism of payment.
</details>
</li>
<li>
<details>
<summary>
<code>NotAttempted</code> - 9</summary>
The payout was not yet attempted/claimed.
</details>
</li>
<li>
<details>
<summary>
<code>Inconclusive</code> - 10</summary>
The payment has neither failed nor succeeded yet.
</details>
</li>
</ul>
</li>
</ul>
\ No newline at end of file
msgid "System.InvalidSpecName"
msgstr "The name of specification does not match between the current runtime
and the new runtime."
msgid "System.SpecVersionNeedsToIncrease"
msgstr "The specification version is not allowed to decrease between the current runtime
and the new runtime."
msgid "System.FailedToExtractRuntimeVersion"
msgstr "Failed to extract the runtime version from the new runtime.
Either calling `Core_version` or decoding `RuntimeVersion` failed."
msgid "System.NonDefaultComposite"
msgstr "Suicide called when the account has non-default composite data."
msgid "System.NonZeroRefCount"
msgstr "There is a non-zero reference count preventing the account from being purged."
msgid "System.CallFiltered"
msgstr "The origin filter prevent the call to be dispatched."
msgid "System.MultiBlockMigrationsOngoing"
msgstr "A multi-block migration is ongoing and prevents the current code from being replaced."
msgid "System.NothingAuthorized"
msgstr "No upgrade authorized."
msgid "System.Unauthorized"
msgstr "The submitted code is not authorized."
msgid "Scheduler.FailedToSchedule"
msgstr "Failed to schedule a call"
msgid "Scheduler.NotFound"
msgstr "Cannot find the scheduled call."
msgid "Scheduler.TargetBlockNumberInPast"
msgstr "Given target block number is in the past."
msgid "Scheduler.RescheduleNoChange"
msgstr "Reschedule failed because it does not change scheduled time."
msgid "Scheduler.Named"
msgstr "Attempt to use a non-named function on a named task."
msgid "Babe.InvalidEquivocationProof"
msgstr "An equivocation proof provided as part of an equivocation report is invalid."
msgid "Babe.InvalidKeyOwnershipProof"
msgstr "A key ownership proof provided as part of an equivocation report is invalid."
msgid "Babe.DuplicateOffenceReport"
msgstr "A given equivocation report is valid but already previously reported."
msgid "Babe.InvalidConfiguration"
msgstr "Submitted configuration is invalid."
msgid "Balances.VestingBalance"
msgstr "Vesting balance too high to send value."
msgid "Balances.LiquidityRestrictions"
msgstr "Account liquidity restrictions prevent withdrawal."
msgid "Balances.InsufficientBalance"
msgstr "Balance too low to send value."
msgid "Balances.ExistentialDeposit"
msgstr "Value too low to create account due to existential deposit."
msgid "Balances.Expendability"
msgstr "Transfer/payment would kill account."
msgid "Balances.ExistingVestingSchedule"
msgstr "A vesting schedule already exists for this account."
msgid "Balances.DeadAccount"
msgstr "Beneficiary account must pre-exist."
msgid "Balances.TooManyReserves"
msgstr "Number of named reserves exceed `MaxReserves`."
msgid "Balances.TooManyHolds"
msgstr "Number of holds exceed `VariantCountOf<T::RuntimeHoldReason>`."
msgid "Balances.TooManyFreezes"
msgstr "Number of freezes exceed `MaxFreezes`."
msgid "Balances.IssuanceDeactivated"
msgstr "The issuance cannot be modified since it is already deactivated."
msgid "Balances.DeltaZero"
msgstr "The delta cannot be zero."
msgid "OneshotAccount.BlockHeightInFuture"
msgstr "Block height is in the future."
msgid "OneshotAccount.BlockHeightTooOld"
msgstr "Block height is too old."
msgid "OneshotAccount.DestAccountNotExist"
msgstr "Destination account does not exist."
msgid "OneshotAccount.ExistentialDeposit"
msgstr "Destination account has a balance less than the existential deposit."
msgid "OneshotAccount.InsufficientBalance"
msgstr "Source account has insufficient balance."
msgid "OneshotAccount.OneshotAccountAlreadyCreated"
msgstr "Destination oneshot account already exists."
msgid "OneshotAccount.OneshotAccountNotExist"
msgstr "Source oneshot account does not exist."
msgid "SmithMembers.OriginMustHaveAnIdentity"
msgstr "Issuer of anything (invitation, acceptance, certification) must have an identity ID"
msgid "SmithMembers.OriginHasNeverBeenInvited"
msgstr "Issuer must be known as a potential smith"
msgid "SmithMembers.InvitationIsASmithPrivilege"
msgstr "Invitation is reseverd to smiths"
msgid "SmithMembers.InvitationIsAOnlineSmithPrivilege"
msgstr "Invitation is reseverd to online smiths"
msgid "SmithMembers.InvitationAlreadyAccepted"
msgstr "Invitation must not have been accepted yet"
msgid "SmithMembers.InvitationOfExistingNonExcluded"
msgstr "Invitation of an already known smith is forbidden except if it has been excluded"
msgid "SmithMembers.InvitationOfNonMember"
msgstr "Invitation of a non-member (of the WoT) is forbidden"
msgid "SmithMembers.CertificationMustBeAgreed"
msgstr "Certification cannot be made on someone who has not accepted an invitation"
msgid "SmithMembers.CertificationOnExcludedIsForbidden"
msgstr "Certification cannot be made on excluded"
msgid "SmithMembers.CertificationIsASmithPrivilege"
msgstr "Issuer must be a smith"
msgid "SmithMembers.CertificationIsAOnlineSmithPrivilege"
msgstr "Only online smiths can certify"
msgid "SmithMembers.CertificationOfSelfIsForbidden"
msgstr "Smith cannot certify itself"
msgid "SmithMembers.CertificationReceiverMustHaveBeenInvited"
msgstr "Receiver must be invited by another smith"
msgid "SmithMembers.CertificationAlreadyExists"
msgstr "Receiver must not already have this certification"
msgid "SmithMembers.CertificationStockFullyConsumed"
msgstr "A smith has a limited stock of certifications"
msgid "AuthorityMembers.AlreadyIncoming"
msgstr "Member already incoming."
msgid "AuthorityMembers.AlreadyOnline"
msgstr "Member already online."
msgid "AuthorityMembers.AlreadyOutgoing"
msgstr "Member already outgoing."
msgid "AuthorityMembers.MemberIdNotFound"
msgstr "Owner key is invalid as a member."
msgid "AuthorityMembers.MemberBlacklisted"
msgstr "Member is blacklisted."
msgid "AuthorityMembers.MemberNotBlacklisted"
msgstr "Member is not blacklisted."
msgid "AuthorityMembers.MemberNotFound"
msgstr "Member not found."
msgid "AuthorityMembers.NotOnlineNorIncoming"
msgstr "Neither online nor scheduled."
msgid "AuthorityMembers.NotMember"
msgstr "Not member."
msgid "AuthorityMembers.SessionKeysNotProvided"
msgstr "Session keys not provided."
msgid "AuthorityMembers.TooManyAuthorities"
msgstr "Too many authorities."
msgid "Session.InvalidProof"
msgstr "Invalid ownership proof."
msgid "Session.NoAssociatedValidatorId"
msgstr "No associated validator ID for account."
msgid "Session.DuplicatedKey"
msgstr "Registered duplicate key."
msgid "Session.NoKeys"
msgstr "No keys are associated with this account."
msgid "Session.NoAccount"
msgstr "Key setting account is not live, so it's impossible to associate keys."
msgid "Grandpa.PauseFailed"
msgstr "Attempt to signal GRANDPA pause when the authority set isn't live
(either paused or already pending pause)."
msgid "Grandpa.ResumeFailed"
msgstr "Attempt to signal GRANDPA resume when the authority set isn't paused
(either live or already pending resume)."
msgid "Grandpa.ChangePending"
msgstr "Attempt to signal GRANDPA change with one already pending."
msgid "Grandpa.TooSoon"
msgstr "Cannot signal forced change so soon after last."
msgid "Grandpa.InvalidKeyOwnershipProof"
msgstr "A key ownership proof provided as part of an equivocation report is invalid."
msgid "Grandpa.InvalidEquivocationProof"
msgstr "An equivocation proof provided as part of an equivocation report is invalid."
msgid "Grandpa.DuplicateOffenceReport"
msgstr "A given equivocation report is valid but already previously reported."
msgid "ImOnline.InvalidKey"
msgstr "Non existent public key."
msgid "ImOnline.DuplicatedHeartbeat"
msgstr "Duplicated heartbeat."
msgid "Sudo.RequireSudo"
msgstr "Sender must be the Sudo account."
msgid "Preimage.TooBig"
msgstr "Preimage is too large to store on-chain."
msgid "Preimage.AlreadyNoted"
msgstr "Preimage has already been noted on-chain."
msgid "Preimage.NotAuthorized"
msgstr "The user is not authorized to perform this action."
msgid "Preimage.NotNoted"
msgstr "The preimage cannot be removed since it has not yet been noted."
msgid "Preimage.Requested"
msgstr "A preimage may not be removed when there are outstanding requests."
msgid "Preimage.NotRequested"
msgstr "The preimage request cannot be removed since no outstanding requests exist."
msgid "Preimage.TooMany"
msgstr "More than `MAX_HASH_UPGRADE_BULK_COUNT` hashes were requested to be upgraded at once."
msgid "Preimage.TooFew"
msgstr "Too few hashes were requested to be upgraded (i.e. zero)."
msgid "TechnicalCommittee.NotMember"
msgstr "Account is not a member"
msgid "TechnicalCommittee.DuplicateProposal"
msgstr "Duplicate proposals not allowed"
msgid "TechnicalCommittee.ProposalMissing"
msgstr "Proposal must exist"
msgid "TechnicalCommittee.WrongIndex"
msgstr "Mismatched index"
msgid "TechnicalCommittee.DuplicateVote"
msgstr "Duplicate vote ignored"
msgid "TechnicalCommittee.AlreadyInitialized"
msgstr "Members are already initialized!"
msgid "TechnicalCommittee.TooEarly"
msgstr "The close call was made too early, before the end of the voting."
msgid "TechnicalCommittee.TooManyProposals"
msgstr "There can only be a maximum of `MaxProposals` active proposals."
msgid "TechnicalCommittee.WrongProposalWeight"
msgstr "The given weight bound for the proposal was too low."
msgid "TechnicalCommittee.WrongProposalLength"
msgstr "The given length bound for the proposal was too low."
msgid "TechnicalCommittee.PrimeAccountNotMember"
msgstr "Prime account is not a member"
msgid "TechnicalCommittee.ProposalActive"
msgstr "Proposal is still active."
msgid "UniversalDividend.AccountNotAllowedToClaimUds"
msgstr "This account is not allowed to claim UDs."
msgid "Wot.NotEnoughCerts"
msgstr "Insufficient certifications received."
msgid "Wot.TargetStatusInvalid"
msgstr "Target status is incompatible with this operation."
msgid "Wot.IdtyCreationPeriodNotRespected"
msgstr "Identity creation period not respected."
msgid "Wot.NotEnoughReceivedCertsToCreateIdty"
msgstr "Insufficient received certifications to create identity."
msgid "Wot.MaxEmittedCertsReached"
msgstr "Maximum number of emitted certifications reached."
msgid "Wot.IssuerNotMember"
msgstr "Issuer cannot emit a certification because it is not member."
msgid "Wot.IdtyNotFound"
msgstr "Issuer or receiver not found."
msgid "Wot.MembershipRenewalPeriodNotRespected"
msgstr "Membership can only be renewed after an antispam delay."
msgid "Identity.IdtyAlreadyConfirmed"
msgstr "Identity already confirmed."
msgid "Identity.IdtyAlreadyCreated"
msgstr "Identity already created."
msgid "Identity.IdtyIndexNotFound"
msgstr "Identity index not found."
msgid "Identity.IdtyNameAlreadyExist"
msgstr "Identity name already exists."
msgid "Identity.IdtyNameInvalid"
msgstr "Invalid identity name."
msgid "Identity.IdtyNotFound"
msgstr "Identity not found."
msgid "Identity.InvalidSignature"
msgstr "Invalid payload signature."
msgid "Identity.InvalidRevocationKey"
msgstr "Invalid revocation key."
msgid "Identity.IssuerNotMember"
msgstr "Issuer is not member and can not perform this action."
msgid "Identity.NotRespectIdtyCreationPeriod"
msgstr "Identity creation period is not respected."
msgid "Identity.OwnerKeyAlreadyRecentlyChanged"
msgstr "Owner key already changed recently."
msgid "Identity.OwnerKeyAlreadyUsed"
msgstr "Owner key already used."
msgid "Identity.ProhibitedToRevertToAnOldKey"
msgstr "Reverting to an old key is prohibited."
msgid "Identity.AlreadyRevoked"
msgstr "Already revoked."
msgid "Identity.CanNotRevokeUnconfirmed"
msgstr "Can not revoke identity that never was member."
msgid "Identity.CanNotRevokeUnvalidated"
msgstr "Can not revoke identity that never was member."
msgid "Identity.AccountNotExist"
msgstr "Cannot link to an inexisting account."
msgid "Identity.InsufficientBalance"
msgstr "Insufficient balance to create an identity."
msgid "Identity.OwnerKeyUsedAsValidator"
msgstr "Owner key currently used as validator."
msgid "Identity.InvalidLegacyRevocationFormat"
msgstr "Legacy revocation document format is invalid"
msgid "Membership.MembershipNotFound"
msgstr "Membership not found, can not renew."
msgid "Membership.AlreadyMember"
msgstr "Already member, can not add membership."
msgid "Certification.OriginMustHaveAnIdentity"
msgstr "Issuer of a certification must have an identity"
msgid "Certification.CannotCertifySelf"
msgstr "Identity cannot certify itself."
msgid "Certification.IssuedTooManyCert"
msgstr "Identity has already issued the maximum number of certifications."
msgid "Certification.NotEnoughCertReceived"
msgstr "Insufficient certifications received."
msgid "Certification.NotRespectCertPeriod"
msgstr "Identity has issued a certification too recently."
msgid "Certification.CertAlreadyExists"
msgstr "Can not add an already-existing cert"
msgid "Certification.CertDoesNotExist"
msgstr "Can not renew a non-existing cert"
msgid "Distance.AlreadyInEvaluation"
msgstr "Distance is already under evaluation."
msgid "Distance.TooManyEvaluationsByAuthor"
msgstr "Too many evaluations requested by author."
msgid "Distance.TooManyEvaluationsInBlock"
msgstr "Too many evaluations for this block."
msgid "Distance.NoAuthor"
msgstr "No author for this block."
msgid "Distance.CallerHasNoIdentity"
msgstr "Caller has no identity."
msgid "Distance.CallerIdentityNotFound"
msgstr "Caller identity not found."
msgid "Distance.CallerNotMember"
msgstr "Caller not member."
msgid "Distance.CallerStatusInvalid"
msgstr ""
msgid "Distance.TargetIdentityNotFound"
msgstr "Target identity not found."
msgid "Distance.QueueFull"
msgstr "Evaluation queue is full."
msgid "Distance.TooManyEvaluators"
msgstr "Too many evaluators in the current evaluation pool."
msgid "Distance.WrongResultLength"
msgstr "Evaluation result has a wrong length."
msgid "Distance.TargetMustBeUnvalidated"
msgstr "Targeted distance evaluation request is only possible for an unvalidated identity."
msgid "AtomicSwap.AlreadyExist"
msgstr "Swap already exists."
msgid "AtomicSwap.InvalidProof"
msgstr "Swap proof is invalid."
msgid "AtomicSwap.ProofTooLarge"
msgstr "Proof is too large."
msgid "AtomicSwap.SourceMismatch"
msgstr "Source does not match."
msgid "AtomicSwap.AlreadyClaimed"
msgstr "Swap has already been claimed."
msgid "AtomicSwap.NotExist"
msgstr "Swap does not exist."
msgid "AtomicSwap.ClaimActionMismatch"
msgstr "Claim action mismatch."
msgid "AtomicSwap.DurationNotPassed"
msgstr "Duration has not yet passed for the swap to be cancelled."
msgid "Multisig.MinimumThreshold"
msgstr "Threshold must be 2 or greater."
msgid "Multisig.AlreadyApproved"
msgstr "Call is already approved by this signatory."
msgid "Multisig.NoApprovalsNeeded"
msgstr "Call doesn't need any (more) approvals."
msgid "Multisig.TooFewSignatories"
msgstr "There are too few signatories in the list."
msgid "Multisig.TooManySignatories"
msgstr "There are too many signatories in the list."
msgid "Multisig.SignatoriesOutOfOrder"
msgstr "The signatories were provided out of order; they should be ordered."
msgid "Multisig.SenderInSignatories"
msgstr "The sender was contained in the other signatories; it shouldn't be."
msgid "Multisig.NotFound"
msgstr "Multisig operation not found when attempting to cancel."
msgid "Multisig.NotOwner"
msgstr "Only the account that originally created the multisig is able to cancel it."
msgid "Multisig.NoTimepoint"
msgstr "No timepoint was given, yet the multisig operation is already underway."
msgid "Multisig.WrongTimepoint"
msgstr "A different timepoint was given to the multisig operation that is underway."
msgid "Multisig.UnexpectedTimepoint"
msgstr "A timepoint was given, yet no multisig operation is underway."
msgid "Multisig.MaxWeightTooLow"
msgstr "The maximum weight information provided was too low."
msgid "Multisig.AlreadyStored"
msgstr "The data to be stored is already stored."
msgid "ProvideRandomness.QueueFull"
msgstr "Request randomness queue is full."
msgid "Proxy.TooMany"
msgstr "There are too many proxies registered or too many announcements pending."
msgid "Proxy.NotFound"
msgstr "Proxy registration not found."
msgid "Proxy.NotProxy"
msgstr "Sender is not a proxy of the account to be proxied."
msgid "Proxy.Unproxyable"
msgstr "A call which is incompatible with the proxy type's filter was attempted."
msgid "Proxy.Duplicate"
msgstr "Account is already a proxy."
msgid "Proxy.NoPermission"
msgstr "Call may not be made by proxy because it may escalate its privileges."
msgid "Proxy.Unannounced"
msgstr "Announcement, if made at all, was made too recently."
msgid "Proxy.NoSelfProxy"
msgstr "Cannot add self as proxy."
msgid "Utility.TooManyCalls"
msgstr "Too many calls batched."
msgid "Treasury.InvalidIndex"
msgstr "No proposal, bounty or spend at that index."
msgid "Treasury.TooManyApprovals"
msgstr "Too many approvals in the queue."
msgid "Treasury.InsufficientPermission"
msgstr "The spend origin is valid but the amount it is allowed to spend is lower than the
amount to be spent."
msgid "Treasury.ProposalNotApproved"
msgstr "Proposal has not been approved."
msgid "Treasury.FailedToConvertBalance"
msgstr "The balance of the asset kind is not convertible to the balance of the native asset."
msgid "Treasury.SpendExpired"
msgstr "The spend has expired and cannot be claimed."
msgid "Treasury.EarlyPayout"
msgstr "The spend is not yet eligible for payout."
msgid "Treasury.AlreadyAttempted"
msgstr "The payment has already been attempted."
msgid "Treasury.PayoutError"
msgstr "There was some issue with the mechanism of payment."
msgid "Treasury.NotAttempted"
msgstr "The payout was not yet attempted/claimed."
msgid "Treasury.Inconclusive"
msgstr "The payment has neither failed nor succeeded yet."
# Runtime events
There are **139** events from **35** pallets.
<ul>
<li>System - 0
<ul>
<li>
<details>
<summary>
<code>ExtrinsicSuccess(dispatch_info)</code> - 0</summary>
An extrinsic completed successfully.
```rust
dispatch_info: DispatchEventInfo
```
</details>
</li>
<li>
<details>
<summary>
<code>ExtrinsicFailed(dispatch_error, dispatch_info)</code> - 1</summary>
An extrinsic failed.
```rust
dispatch_error: DispatchError
dispatch_info: DispatchEventInfo
```
</details>
</li>
<li>
<details>
<summary>
<code>CodeUpdated()</code> - 2</summary>
`:code` was updated.
```rust
no args
```
</details>
</li>
<li>
<details>
<summary>
<code>NewAccount(account)</code> - 3</summary>
A new account was created.
```rust
account: T::AccountId
```
</details>
</li>
<li>
<details>
<summary>
<code>KilledAccount(account)</code> - 4</summary>
An account was reaped.
```rust
account: T::AccountId
```
</details>
</li>
<li>
<details>
<summary>
<code>Remarked(sender, hash)</code> - 5</summary>
On on-chain remark happened.
```rust
sender: T::AccountId
hash: T::Hash
```
</details>
</li>
<li>
<details>
<summary>
<code>UpgradeAuthorized(code_hash, check_version)</code> - 6</summary>
An upgrade was authorized.
```rust
code_hash: T::Hash
check_version: bool
```
</details>
</li>
</ul>
</li>
<li>Account - 1
<ul>
<li>
<details>
<summary>
<code>AccountLinked(who, identity)</code> - 0</summary>
account linked to identity
```rust
who: T::AccountId
identity: IdtyIdOf<T>
```
</details>
</li>
<li>
<details>
<summary>
<code>AccountUnlinked()</code> - 1</summary>
The account was unlinked from its identity.
```rust
: T::AccountId
```
</details>
</li>
</ul>
</li>
<li>Scheduler - 2
<ul>
<li>
<details>
<summary>
<code>Scheduled(when, index)</code> - 0</summary>
Scheduled some task.
```rust
when: BlockNumberFor<T>
index: u32
```
</details>
</li>
<li>
<details>
<summary>
<code>Canceled(when, index)</code> - 1</summary>
Canceled some task.
```rust
when: BlockNumberFor<T>
index: u32
```
</details>
</li>
<li>
<details>
<summary>
<code>Dispatched(task, id, result)</code> - 2</summary>
Dispatched some task.
```rust
task: TaskAddress<BlockNumberFor<T>>
id: Option<TaskName>
result: DispatchResult
```
</details>
</li>
<li>
<details>
<summary>
<code>RetrySet(task, id, period, retries)</code> - 3</summary>
Set a retry configuration for some task.
```rust
task: TaskAddress<BlockNumberFor<T>>
id: Option<TaskName>
period: BlockNumberFor<T>
retries: u8
```
</details>
</li>
<li>
<details>
<summary>
<code>RetryCancelled(task, id)</code> - 4</summary>
Cancel a retry configuration for some task.
```rust
task: TaskAddress<BlockNumberFor<T>>
id: Option<TaskName>
```
</details>
</li>
<li>
<details>
<summary>
<code>CallUnavailable(task, id)</code> - 5</summary>
The call for the provided hash was not found so the task has been aborted.
```rust
task: TaskAddress<BlockNumberFor<T>>
id: Option<TaskName>
```
</details>
</li>
<li>
<details>
<summary>
<code>PeriodicFailed(task, id)</code> - 6</summary>
The given task was unable to be renewed since the agenda is full at that block.
```rust
task: TaskAddress<BlockNumberFor<T>>
id: Option<TaskName>
```
</details>
</li>
<li>
<details>
<summary>
<code>RetryFailed(task, id)</code> - 7</summary>
The given task was unable to be retried since the agenda is full at that block or there
was not enough weight to reschedule it.
```rust
task: TaskAddress<BlockNumberFor<T>>
id: Option<TaskName>
```
</details>
</li>
<li>
<details>
<summary>
<code>PermanentlyOverweight(task, id)</code> - 8</summary>
The given task can never be executed since it is overweight.
```rust
task: TaskAddress<BlockNumberFor<T>>
id: Option<TaskName>
```
</details>
</li>
</ul>
</li>
<li>Babe - 3
<ul>
</ul>
</li>
<li>Timestamp - 4
<ul>
</ul>
</li>
<li>Parameters - 5
<ul>
</ul>
</li>
<li>Balances - 6
<ul>
<li>
<details>
<summary>
<code>Endowed(account, free_balance)</code> - 0</summary>
An account was created with some free balance.
```rust
account: T::AccountId
free_balance: T::Balance
```
</details>
</li>
<li>
<details>
<summary>
<code>DustLost(account, amount)</code> - 1</summary>
An account was removed whose balance was non-zero but below ExistentialDeposit,
resulting in an outright loss.
```rust
account: T::AccountId
amount: T::Balance
```
</details>
</li>
<li>
<details>
<summary>
<code>Transfer(from, to, amount)</code> - 2</summary>
Transfer succeeded.
```rust
from: T::AccountId
to: T::AccountId
amount: T::Balance
```
</details>
</li>
<li>
<details>
<summary>
<code>BalanceSet(who, free)</code> - 3</summary>
A balance was set by root.
```rust
who: T::AccountId
free: T::Balance
```
</details>
</li>
<li>
<details>
<summary>
<code>Reserved(who, amount)</code> - 4</summary>
Some balance was reserved (moved from free to reserved).
```rust
who: T::AccountId
amount: T::Balance
```
</details>
</li>
<li>
<details>
<summary>
<code>Unreserved(who, amount)</code> - 5</summary>
Some balance was unreserved (moved from reserved to free).
```rust
who: T::AccountId
amount: T::Balance
```
</details>
</li>
<li>
<details>
<summary>
<code>ReserveRepatriated(from, to, amount, destination_status)</code> - 6</summary>
Some balance was moved from the reserve of the first account to the second account.
Final argument indicates the destination balance type.
```rust
from: T::AccountId
to: T::AccountId
amount: T::Balance
destination_status: Status
```
</details>
</li>
<li>
<details>
<summary>
<code>Deposit(who, amount)</code> - 7</summary>
Some amount was deposited (e.g. for transaction fees).
```rust
who: T::AccountId
amount: T::Balance
```
</details>
</li>
<li>
<details>
<summary>
<code>Withdraw(who, amount)</code> - 8</summary>
Some amount was withdrawn from the account (e.g. for transaction fees).
```rust
who: T::AccountId
amount: T::Balance
```
</details>
</li>
<li>
<details>
<summary>
<code>Slashed(who, amount)</code> - 9</summary>
Some amount was removed from the account (e.g. for misbehavior).
```rust
who: T::AccountId
amount: T::Balance
```
</details>
</li>
<li>
<details>
<summary>
<code>Minted(who, amount)</code> - 10</summary>
Some amount was minted into an account.
```rust
who: T::AccountId
amount: T::Balance
```
</details>
</li>
<li>
<details>
<summary>
<code>Burned(who, amount)</code> - 11</summary>
Some amount was burned from an account.
```rust
who: T::AccountId
amount: T::Balance
```
</details>
</li>
<li>
<details>
<summary>
<code>Suspended(who, amount)</code> - 12</summary>
Some amount was suspended from an account (it can be restored later).
```rust
who: T::AccountId
amount: T::Balance
```
</details>
</li>
<li>
<details>
<summary>
<code>Restored(who, amount)</code> - 13</summary>
Some amount was restored into an account.
```rust
who: T::AccountId
amount: T::Balance
```
</details>
</li>
<li>
<details>
<summary>
<code>Upgraded(who)</code> - 14</summary>
An account was upgraded.
```rust
who: T::AccountId
```
</details>
</li>
<li>
<details>
<summary>
<code>Issued(amount)</code> - 15</summary>
Total issuance was increased by `amount`, creating a credit to be balanced.
```rust
amount: T::Balance
```
</details>
</li>
<li>
<details>
<summary>
<code>Rescinded(amount)</code> - 16</summary>
Total issuance was decreased by `amount`, creating a debt to be balanced.
```rust
amount: T::Balance
```
</details>
</li>
<li>
<details>
<summary>
<code>Locked(who, amount)</code> - 17</summary>
Some balance was locked.
```rust
who: T::AccountId
amount: T::Balance
```
</details>
</li>
<li>
<details>
<summary>
<code>Unlocked(who, amount)</code> - 18</summary>
Some balance was unlocked.
```rust
who: T::AccountId
amount: T::Balance
```
</details>
</li>
<li>
<details>
<summary>
<code>Frozen(who, amount)</code> - 19</summary>
Some balance was frozen.
```rust
who: T::AccountId
amount: T::Balance
```
</details>
</li>
<li>
<details>
<summary>
<code>Thawed(who, amount)</code> - 20</summary>
Some balance was thawed.
```rust
who: T::AccountId
amount: T::Balance
```
</details>
</li>
<li>
<details>
<summary>
<code>TotalIssuanceForced(old, new)</code> - 21</summary>
The `TotalIssuance` was forcefully changed.
```rust
old: T::Balance
new: T::Balance
```
</details>
</li>
</ul>
</li>
<li>TransactionPayment - 32
<ul>
<li>
<details>
<summary>
<code>TransactionFeePaid(who, actual_fee, tip)</code> - 0</summary>
A transaction fee `actual_fee`, of which `tip` was added to the minimum inclusion fee,
has been paid by `who`.
```rust
who: T::AccountId
actual_fee: BalanceOf<T>
tip: BalanceOf<T>
```
</details>
</li>
</ul>
</li>
<li>OneshotAccount - 7
<ul>
<li>
<details>
<summary>
<code>OneshotAccountCreated(account, balance, creator)</code> - 0</summary>
A oneshot account was created.
```rust
account: T::AccountId
balance: BalanceOf<T>
creator: T::AccountId
```
</details>
</li>
<li>
<details>
<summary>
<code>OneshotAccountConsumed(account, dest1, dest2)</code> - 1</summary>
A oneshot account was consumed.
```rust
account: T::AccountId
dest1: (T::AccountId, BalanceOf<T>)
dest2: Option<(T::AccountId, BalanceOf<T>)>
```
</details>
</li>
<li>
<details>
<summary>
<code>Withdraw(account, balance)</code> - 2</summary>
A withdrawal was executed on a oneshot account.
```rust
account: T::AccountId
balance: BalanceOf<T>
```
</details>
</li>
</ul>
</li>
<li>Quota - 66
<ul>
<li>
<details>
<summary>
<code>Refunded(who, identity, amount)</code> - 0</summary>
Transaction fees were refunded.
```rust
who: T::AccountId
identity: IdtyId<T>
amount: BalanceOf<T>
```
</details>
</li>
<li>
<details>
<summary>
<code>NoQuotaForIdty()</code> - 1</summary>
No more quota available for refund.
```rust
: IdtyId<T>
```
</details>
</li>
<li>
<details>
<summary>
<code>NoMoreCurrencyForRefund()</code> - 2</summary>
No more currency available for refund.
This scenario should never occur if the fees are intended for the refund account.
```rust
no args
```
</details>
</li>
<li>
<details>
<summary>
<code>RefundFailed()</code> - 3</summary>
The refund has failed.
This scenario should rarely occur, except when the account was destroyed in the interim between the request and the refund.
```rust
: T::AccountId
```
</details>
</li>
<li>
<details>
<summary>
<code>RefundQueueFull()</code> - 4</summary>
Refund queue was full.
```rust
no args
```
</details>
</li>
</ul>
</li>
<li>SmithMembers - 10
<ul>
<li>
<details>
<summary>
<code>InvitationSent(issuer, receiver)</code> - 0</summary>
An identity is being inivited to become a smith.
```rust
issuer: T::IdtyIndex
receiver: T::IdtyIndex
```
</details>
</li>
<li>
<details>
<summary>
<code>InvitationAccepted(idty_index)</code> - 1</summary>
The invitation has been accepted.
```rust
idty_index: T::IdtyIndex
```
</details>
</li>
<li>
<details>
<summary>
<code>SmithCertAdded(issuer, receiver)</code> - 2</summary>
Certification received
```rust
issuer: T::IdtyIndex
receiver: T::IdtyIndex
```
</details>
</li>
<li>
<details>
<summary>
<code>SmithCertRemoved(issuer, receiver)</code> - 3</summary>
Certification lost
```rust
issuer: T::IdtyIndex
receiver: T::IdtyIndex
```
</details>
</li>
<li>
<details>
<summary>
<code>SmithMembershipAdded(idty_index)</code> - 4</summary>
A smith gathered enough certifications to become an authority (can call `go_online()`).
```rust
idty_index: T::IdtyIndex
```
</details>
</li>
<li>
<details>
<summary>
<code>SmithMembershipRemoved(idty_index)</code> - 5</summary>
A smith has been removed from the smiths set.
```rust
idty_index: T::IdtyIndex
```
</details>
</li>
</ul>
</li>
<li>AuthorityMembers - 11
<ul>
<li>
<details>
<summary>
<code>IncomingAuthorities(members)</code> - 0</summary>
List of members scheduled to join the set of authorities in the next session.
```rust
members: Vec<T::MemberId>
```
</details>
</li>
<li>
<details>
<summary>
<code>OutgoingAuthorities(members)</code> - 1</summary>
List of members leaving the set of authorities in the next session.
```rust
members: Vec<T::MemberId>
```
</details>
</li>
<li>
<details>
<summary>
<code>MemberGoOffline(member)</code> - 2</summary>
A member will leave the set of authorities in 2 sessions.
```rust
member: T::MemberId
```
</details>
</li>
<li>
<details>
<summary>
<code>MemberGoOnline(member)</code> - 3</summary>
A member will join the set of authorities in 2 sessions.
```rust
member: T::MemberId
```
</details>
</li>
<li>
<details>
<summary>
<code>MemberRemoved(member)</code> - 4</summary>
A member, who no longer has authority rights, will be removed from the authority set in 2 sessions.
```rust
member: T::MemberId
```
</details>
</li>
<li>
<details>
<summary>
<code>MemberRemovedFromBlacklist(member)</code> - 5</summary>
A member has been removed from the blacklist.
```rust
member: T::MemberId
```
</details>
</li>
<li>
<details>
<summary>
<code>MemberAddedToBlacklist(member)</code> - 6</summary>
A member has been blacklisted.
```rust
member: T::MemberId
```
</details>
</li>
</ul>
</li>
<li>Authorship - 12
<ul>
</ul>
</li>
<li>Offences - 13
<ul>
<li>
<details>
<summary>
<code>Offence(kind, timeslot)</code> - 0</summary>
An offense was reported during the specified time slot. This event is not deposited for duplicate slashes.
```rust
kind: Kind
timeslot: OpaqueTimeSlot
```
</details>
</li>
</ul>
</li>
<li>Historical - 14
<ul>
</ul>
</li>
<li>Session - 15
<ul>
<li>
<details>
<summary>
<code>NewSession(session_index)</code> - 0</summary>
New session has happened. Note that the argument is the session index, not the
block number as the type might suggest.
```rust
session_index: SessionIndex
```
</details>
</li>
</ul>
</li>
<li>Grandpa - 16
<ul>
<li>
<details>
<summary>
<code>NewAuthorities(authority_set)</code> - 0</summary>
New authority set has been applied.
```rust
authority_set: AuthorityList
```
</details>
</li>
<li>
<details>
<summary>
<code>Paused()</code> - 1</summary>
Current authority set has been paused.
```rust
no args
```
</details>
</li>
<li>
<details>
<summary>
<code>Resumed()</code> - 2</summary>
Current authority set has been resumed.
```rust
no args
```
</details>
</li>
</ul>
</li>
<li>ImOnline - 17
<ul>
<li>
<details>
<summary>
<code>HeartbeatReceived(authority_id)</code> - 0</summary>
A new heartbeat was received from `AuthorityId`.
```rust
authority_id: T::AuthorityId
```
</details>
</li>
<li>
<details>
<summary>
<code>AllGood()</code> - 1</summary>
At the end of the session, no offence was committed.
```rust
no args
```
</details>
</li>
<li>
<details>
<summary>
<code>SomeOffline(offline)</code> - 2</summary>
At the end of the session, at least one validator was found to be offline.
```rust
offline: Vec<IdentificationTuple<T>>
```
</details>
</li>
</ul>
</li>
<li>AuthorityDiscovery - 18
<ul>
</ul>
</li>
<li>Sudo - 20
<ul>
<li>
<details>
<summary>
<code>Sudid(sudo_result)</code> - 0</summary>
A sudo call just took place.
```rust
sudo_result: DispatchResult
```
</details>
</li>
<li>
<details>
<summary>
<code>KeyChanged(old, new)</code> - 1</summary>
The sudo key has been updated.
```rust
old: Option<T::AccountId>
new: T::AccountId
```
</details>
</li>
<li>
<details>
<summary>
<code>KeyRemoved()</code> - 2</summary>
The key was permanently removed.
```rust
no args
```
</details>
</li>
<li>
<details>
<summary>
<code>SudoAsDone(sudo_result)</code> - 3</summary>
A [sudo_as](Pallet::sudo_as) call just took place.
```rust
sudo_result: DispatchResult
```
</details>
</li>
</ul>
</li>
<li>UpgradeOrigin - 21
<ul>
<li>
<details>
<summary>
<code>DispatchedAsRoot(result)</code> - 0</summary>
A call was dispatched as root from an upgradable origin
```rust
result: DispatchResult
```
</details>
</li>
</ul>
</li>
<li>Preimage - 22
<ul>
<li>
<details>
<summary>
<code>Noted(hash)</code> - 0</summary>
A preimage has been noted.
```rust
hash: T::Hash
```
</details>
</li>
<li>
<details>
<summary>
<code>Requested(hash)</code> - 1</summary>
A preimage has been requested.
```rust
hash: T::Hash
```
</details>
</li>
<li>
<details>
<summary>
<code>Cleared(hash)</code> - 2</summary>
A preimage has ben cleared.
```rust
hash: T::Hash
```
</details>
</li>
</ul>
</li>
<li>TechnicalCommittee - 23
<ul>
<li>
<details>
<summary>
<code>Proposed(account, proposal_index, proposal_hash, threshold)</code> - 0</summary>
A motion (given hash) has been proposed (by given account) with a threshold (given
`MemberCount`).
```rust
account: T::AccountId
proposal_index: ProposalIndex
proposal_hash: T::Hash
threshold: MemberCount
```
</details>
</li>
<li>
<details>
<summary>
<code>Voted(account, proposal_hash, voted, yes, no)</code> - 1</summary>
A motion (given hash) has been voted on by given account, leaving
a tally (yes votes and no votes given respectively as `MemberCount`).
```rust
account: T::AccountId
proposal_hash: T::Hash
voted: bool
yes: MemberCount
no: MemberCount
```
</details>
</li>
<li>
<details>
<summary>
<code>Approved(proposal_hash)</code> - 2</summary>
A motion was approved by the required threshold.
```rust
proposal_hash: T::Hash
```
</details>
</li>
<li>
<details>
<summary>
<code>Disapproved(proposal_hash)</code> - 3</summary>
A motion was not approved by the required threshold.
```rust
proposal_hash: T::Hash
```
</details>
</li>
<li>
<details>
<summary>
<code>Executed(proposal_hash, result)</code> - 4</summary>
A motion was executed; result will be `Ok` if it returned without error.
```rust
proposal_hash: T::Hash
result: DispatchResult
```
</details>
</li>
<li>
<details>
<summary>
<code>MemberExecuted(proposal_hash, result)</code> - 5</summary>
A single member did some action; result will be `Ok` if it returned without error.
```rust
proposal_hash: T::Hash
result: DispatchResult
```
</details>
</li>
<li>
<details>
<summary>
<code>Closed(proposal_hash, yes, no)</code> - 6</summary>
A proposal was closed because its threshold was reached or after its duration was up.
```rust
proposal_hash: T::Hash
yes: MemberCount
no: MemberCount
```
</details>
</li>
<li>
<details>
<summary>
<code>Killed(proposal_hash)</code> - 7</summary>
A proposal was killed.
```rust
proposal_hash: T::Hash
```
</details>
</li>
<li>
<details>
<summary>
<code>ProposalCostBurned(proposal_hash, who)</code> - 8</summary>
Some cost for storing a proposal was burned.
```rust
proposal_hash: T::Hash
who: T::AccountId
```
</details>
</li>
<li>
<details>
<summary>
<code>ProposalCostReleased(proposal_hash, who)</code> - 9</summary>
Some cost for storing a proposal was released.
```rust
proposal_hash: T::Hash
who: T::AccountId
```
</details>
</li>
</ul>
</li>
<li>UniversalDividend - 30
<ul>
<li>
<details>
<summary>
<code>NewUdCreated(amount, index, monetary_mass, members_count)</code> - 0</summary>
A new universal dividend is created.
```rust
amount: BalanceOf<T>
index: UdIndex
monetary_mass: BalanceOf<T>
members_count: BalanceOf<T>
```
</details>
</li>
<li>
<details>
<summary>
<code>UdReevalued(new_ud_amount, monetary_mass, members_count)</code> - 1</summary>
The universal dividend has been re-evaluated.
```rust
new_ud_amount: BalanceOf<T>
monetary_mass: BalanceOf<T>
members_count: BalanceOf<T>
```
</details>
</li>
<li>
<details>
<summary>
<code>UdsAutoPaid(count, total, who)</code> - 2</summary>
DUs were automatically transferred as part of a member removal.
```rust
count: UdIndex
total: BalanceOf<T>
who: T::AccountId
```
</details>
</li>
<li>
<details>
<summary>
<code>UdsClaimed(count, total, who)</code> - 3</summary>
A member claimed his UDs.
```rust
count: UdIndex
total: BalanceOf<T>
who: T::AccountId
```
</details>
</li>
</ul>
</li>
<li>Wot - 40
<ul>
</ul>
</li>
<li>Identity - 41
<ul>
<li>
<details>
<summary>
<code>IdtyCreated(idty_index, owner_key)</code> - 0</summary>
A new identity has been created.
```rust
idty_index: T::IdtyIndex
owner_key: T::AccountId
```
</details>
</li>
<li>
<details>
<summary>
<code>IdtyConfirmed(idty_index, name)</code> - 1</summary>
An identity has been confirmed by its owner.
```rust
idty_index: T::IdtyIndex
name: IdtyName
```
</details>
</li>
<li>
<details>
<summary>
<code>IdtyValidated(idty_index)</code> - 2</summary>
An identity has been validated.
```rust
idty_index: T::IdtyIndex
```
</details>
</li>
<li>
<details>
<summary>
<code>IdtyChangedOwnerKey(idty_index, new_owner_key)</code> - 3</summary>
```rust
idty_index: T::IdtyIndex
new_owner_key: T::AccountId
```
</details>
</li>
<li>
<details>
<summary>
<code>IdtyRevoked(idty_index, reason)</code> - 4</summary>
An identity has been revoked.
```rust
idty_index: T::IdtyIndex
reason: RevocationReason
```
</details>
</li>
<li>
<details>
<summary>
<code>IdtyRemoved(idty_index, reason)</code> - 5</summary>
An identity has been removed.
```rust
idty_index: T::IdtyIndex
reason: RemovalReason
```
</details>
</li>
</ul>
</li>
<li>Membership - 42
<ul>
<li>
<details>
<summary>
<code>MembershipAdded(member, expire_on)</code> - 0</summary>
A membership was added.
```rust
member: T::IdtyId
expire_on: BlockNumberFor<T>
```
</details>
</li>
<li>
<details>
<summary>
<code>MembershipRenewed(member, expire_on)</code> - 1</summary>
A membership was renewed.
```rust
member: T::IdtyId
expire_on: BlockNumberFor<T>
```
</details>
</li>
<li>
<details>
<summary>
<code>MembershipRemoved(member, reason)</code> - 2</summary>
A membership was removed.
```rust
member: T::IdtyId
reason: MembershipRemovalReason
```
</details>
</li>
</ul>
</li>
<li>Certification - 43
<ul>
<li>
<details>
<summary>
<code>CertAdded(issuer, receiver)</code> - 0</summary>
A new certification was added.
```rust
issuer: T::IdtyIndex
receiver: T::IdtyIndex
```
</details>
</li>
<li>
<details>
<summary>
<code>CertRemoved(issuer, receiver, expiration)</code> - 1</summary>
A certification was removed.
```rust
issuer: T::IdtyIndex
receiver: T::IdtyIndex
expiration: bool
```
</details>
</li>
<li>
<details>
<summary>
<code>CertRenewed(issuer, receiver)</code> - 2</summary>
A certification was renewed.
```rust
issuer: T::IdtyIndex
receiver: T::IdtyIndex
```
</details>
</li>
</ul>
</li>
<li>Distance - 44
<ul>
<li>
<details>
<summary>
<code>EvaluationRequested(idty_index, who)</code> - 0</summary>
A distance evaluation was requested.
```rust
idty_index: T::IdtyIndex
who: T::AccountId
```
</details>
</li>
<li>
<details>
<summary>
<code>EvaluatedValid(idty_index, distance)</code> - 1</summary>
Distance rule was found valid.
```rust
idty_index: T::IdtyIndex
distance: Perbill
```
</details>
</li>
<li>
<details>
<summary>
<code>EvaluatedInvalid(idty_index, distance)</code> - 2</summary>
Distance rule was found invalid.
```rust
idty_index: T::IdtyIndex
distance: Perbill
```
</details>
</li>
</ul>
</li>
<li>AtomicSwap - 50
<ul>
<li>
<details>
<summary>
<code>NewSwap(account, proof, swap)</code> - 0</summary>
Swap created.
```rust
account: T::AccountId
proof: HashedProof
swap: PendingSwap<T>
```
</details>
</li>
<li>
<details>
<summary>
<code>SwapClaimed(account, proof, success)</code> - 1</summary>
Swap claimed. The last parameter indicates whether the execution succeeds.
```rust
account: T::AccountId
proof: HashedProof
success: bool
```
</details>
</li>
<li>
<details>
<summary>
<code>SwapCancelled(account, proof)</code> - 2</summary>
Swap cancelled.
```rust
account: T::AccountId
proof: HashedProof
```
</details>
</li>
</ul>
</li>
<li>Multisig - 51
<ul>
<li>
<details>
<summary>
<code>NewMultisig(approving, multisig, call_hash)</code> - 0</summary>
A new multisig operation has begun.
```rust
approving: T::AccountId
multisig: T::AccountId
call_hash: CallHash
```
</details>
</li>
<li>
<details>
<summary>
<code>MultisigApproval(approving, timepoint, multisig, call_hash)</code> - 1</summary>
A multisig operation has been approved by someone.
```rust
approving: T::AccountId
timepoint: Timepoint<BlockNumberFor<T>>
multisig: T::AccountId
call_hash: CallHash
```
</details>
</li>
<li>
<details>
<summary>
<code>MultisigExecuted(approving, timepoint, multisig, call_hash, result)</code> - 2</summary>
A multisig operation has been executed.
```rust
approving: T::AccountId
timepoint: Timepoint<BlockNumberFor<T>>
multisig: T::AccountId
call_hash: CallHash
result: DispatchResult
```
</details>
</li>
<li>
<details>
<summary>
<code>MultisigCancelled(cancelling, timepoint, multisig, call_hash)</code> - 3</summary>
A multisig operation has been cancelled.
```rust
cancelling: T::AccountId
timepoint: Timepoint<BlockNumberFor<T>>
multisig: T::AccountId
call_hash: CallHash
```
</details>
</li>
</ul>
</li>
<li>ProvideRandomness - 52
<ul>
<li>
<details>
<summary>
<code>FilledRandomness(request_id, randomness)</code> - 0</summary>
A request for randomness was fulfilled.
```rust
request_id: RequestId
randomness: H256
```
</details>
</li>
<li>
<details>
<summary>
<code>RequestedRandomness(request_id, salt, r#type)</code> - 1</summary>
A request for randomness was made.
```rust
request_id: RequestId
salt: H256
r#type: RandomnessType
```
</details>
</li>
</ul>
</li>
<li>Proxy - 53
<ul>
<li>
<details>
<summary>
<code>ProxyExecuted(result)</code> - 0</summary>
A proxy was executed correctly, with the given.
```rust
result: DispatchResult
```
</details>
</li>
<li>
<details>
<summary>
<code>PureCreated(pure, who, proxy_type, disambiguation_index)</code> - 1</summary>
A pure account has been created by new proxy with given
disambiguation index and proxy type.
```rust
pure: T::AccountId
who: T::AccountId
proxy_type: T::ProxyType
disambiguation_index: u16
```
</details>
</li>
<li>
<details>
<summary>
<code>Announced(real, proxy, call_hash)</code> - 2</summary>
An announcement was placed to make a call in the future.
```rust
real: T::AccountId
proxy: T::AccountId
call_hash: CallHashOf<T>
```
</details>
</li>
<li>
<details>
<summary>
<code>ProxyAdded(delegator, delegatee, proxy_type, delay)</code> - 3</summary>
A proxy was added.
```rust
delegator: T::AccountId
delegatee: T::AccountId
proxy_type: T::ProxyType
delay: BlockNumberFor<T>
```
</details>
</li>
<li>
<details>
<summary>
<code>ProxyRemoved(delegator, delegatee, proxy_type, delay)</code> - 4</summary>
A proxy was removed.
```rust
delegator: T::AccountId
delegatee: T::AccountId
proxy_type: T::ProxyType
delay: BlockNumberFor<T>
```
</details>
</li>
</ul>
</li>
<li>Utility - 54
<ul>
<li>
<details>
<summary>
<code>BatchInterrupted(index, error)</code> - 0</summary>
Batch of dispatches did not complete fully. Index of first failing dispatch given, as
well as the error.
```rust
index: u32
error: DispatchError
```
</details>
</li>
<li>
<details>
<summary>
<code>BatchCompleted()</code> - 1</summary>
Batch of dispatches completed fully with no error.
```rust
no args
```
</details>
</li>
<li>
<details>
<summary>
<code>BatchCompletedWithErrors()</code> - 2</summary>
Batch of dispatches completed but has errors.
```rust
no args
```
</details>
</li>
<li>
<details>
<summary>
<code>ItemCompleted()</code> - 3</summary>
A single item within a Batch of dispatches has completed with no error.
```rust
no args
```
</details>
</li>
<li>
<details>
<summary>
<code>ItemFailed(error)</code> - 4</summary>
A single item within a Batch of dispatches has completed with error.
```rust
error: DispatchError
```
</details>
</li>
<li>
<details>
<summary>
<code>DispatchedAs(result)</code> - 5</summary>
A call was dispatched.
```rust
result: DispatchResult
```
</details>
</li>
</ul>
</li>
<li>Treasury - 55
<ul>
<li>
<details>
<summary>
<code>Spending(budget_remaining)</code> - 0</summary>
We have ended a spend period and will now allocate funds.
```rust
budget_remaining: BalanceOf<T, I>
```
</details>
</li>
<li>
<details>
<summary>
<code>Awarded(proposal_index, award, account)</code> - 1</summary>
Some funds have been allocated.
```rust
proposal_index: ProposalIndex
award: BalanceOf<T, I>
account: T::AccountId
```
</details>
</li>
<li>
<details>
<summary>
<code>Burnt(burnt_funds)</code> - 2</summary>
Some of our funds have been burnt.
```rust
burnt_funds: BalanceOf<T, I>
```
</details>
</li>
<li>
<details>
<summary>
<code>Rollover(rollover_balance)</code> - 3</summary>
Spending has finished; this is the amount that rolls over until next spend.
```rust
rollover_balance: BalanceOf<T, I>
```
</details>
</li>
<li>
<details>
<summary>
<code>Deposit(value)</code> - 4</summary>
Some funds have been deposited.
```rust
value: BalanceOf<T, I>
```
</details>
</li>
<li>
<details>
<summary>
<code>SpendApproved(proposal_index, amount, beneficiary)</code> - 5</summary>
A new spend proposal has been approved.
```rust
proposal_index: ProposalIndex
amount: BalanceOf<T, I>
beneficiary: T::AccountId
```
</details>
</li>
<li>
<details>
<summary>
<code>UpdatedInactive(reactivated, deactivated)</code> - 6</summary>
The inactive funds of the pallet have been updated.
```rust
reactivated: BalanceOf<T, I>
deactivated: BalanceOf<T, I>
```
</details>
</li>
<li>
<details>
<summary>
<code>AssetSpendApproved(index, asset_kind, amount, beneficiary, valid_from, expire_at)</code> - 7</summary>
A new asset spend proposal has been approved.
```rust
index: SpendIndex
asset_kind: T::AssetKind
amount: AssetBalanceOf<T, I>
beneficiary: T::Beneficiary
valid_from: BlockNumberFor<T>
expire_at: BlockNumberFor<T>
```
</details>
</li>
<li>
<details>
<summary>
<code>AssetSpendVoided(index)</code> - 8</summary>
An approved spend was voided.
```rust
index: SpendIndex
```
</details>
</li>
<li>
<details>
<summary>
<code>Paid(index, payment_id)</code> - 9</summary>
A payment happened.
```rust
index: SpendIndex
payment_id: <T::Paymaster as Pay>::Id
```
</details>
</li>
<li>
<details>
<summary>
<code>PaymentFailed(index, payment_id)</code> - 10</summary>
A payment failed and can be retried.
```rust
index: SpendIndex
payment_id: <T::Paymaster as Pay>::Id
```
</details>
</li>
<li>
<details>
<summary>
<code>SpendProcessed(index)</code> - 11</summary>
A spend was processed and removed from the storage. It might have been successfully
paid or it may have expired.
```rust
index: SpendIndex
```
</details>
</li>
</ul>
</li>
</ul>
\ No newline at end of file
# Runtime Storage
There are **139** storages from **35** pallets.
<ul>
<li>System - 0
<ul>
<li>
<details>
<summary>
<code>Account</code>
</summary>
The full account information for a particular account ID.
```rust
key: sp_core::crypto::AccountId32
value: frame_system::AccountInfo<U32, pallet_duniter_account::types::AccountData<U64, U32>>
```
</details>
</li>
<li>
<details>
<summary>
<code>ExtrinsicCount</code>
</summary>
Total extrinsics count for the current block.
```rust
value: Option<U32>
```
</details>
</li>
<li>
<details>
<summary>
<code>InherentsApplied</code>
</summary>
Whether all inherents have been applied.
```rust
value: Bool
```
</details>
</li>
<li>
<details>
<summary>
<code>BlockWeight</code>
</summary>
The current weight for the block.
```rust
value: frame_support::dispatch::PerDispatchClass<sp_weights::weight_v2::Weight>
```
</details>
</li>
<li>
<details>
<summary>
<code>AllExtrinsicsLen</code>
</summary>
Total length (in bytes) for all extrinsics put together, for the current block.
```rust
value: Option<U32>
```
</details>
</li>
<li>
<details>
<summary>
<code>BlockHash</code>
</summary>
Map of block numbers to block hashes.
```rust
key: U32
value: primitive_types::H256
```
</details>
</li>
<li>
<details>
<summary>
<code>ExtrinsicData</code>
</summary>
Extrinsics data for the current block (maps an extrinsic's index to its data).
```rust
key: U32
value: Vec<U8>
```
</details>
</li>
<li>
<details>
<summary>
<code>Number</code>
</summary>
The current block number being processed. Set by `execute_block`.
```rust
value: U32
```
</details>
</li>
<li>
<details>
<summary>
<code>ParentHash</code>
</summary>
Hash of the previous block.
```rust
value: primitive_types::H256
```
</details>
</li>
<li>
<details>
<summary>
<code>Digest</code>
</summary>
Digest of the current block, also part of the block header.
```rust
value: sp_runtime::generic::digest::Digest
```
</details>
</li>
<li>
<details>
<summary>
<code>Events</code>
</summary>
Events deposited for the current block.
NOTE: The item is unbound and should therefore never be read on chain.
It could otherwise inflate the PoV size of a block.
Events have a large in-memory size. Box the events to not go out-of-memory
just in case someone still reads them from within the runtime.
```rust
value: Vec<frame_system::EventRecord<gdev_runtime::RuntimeEvent, primitive_types::H256>>
```
</details>
</li>
<li>
<details>
<summary>
<code>EventCount</code>
</summary>
The number of events in the `Events<T>` list.
```rust
value: U32
```
</details>
</li>
<li>
<details>
<summary>
<code>EventTopics</code>
</summary>
Mapping between a topic (represented by T::Hash) and a vector of indexes
of events in the `<Events<T>>` 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 `(BlockNumberFor<T>, 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.
```rust
key: primitive_types::H256
value: Vec<(U32, U32)>
```
</details>
</li>
<li>
<details>
<summary>
<code>LastRuntimeUpgrade</code>
</summary>
Stores the `spec_version` and `spec_name` of when the last runtime upgrade happened.
```rust
value: Option<frame_system::LastRuntimeUpgradeInfo>
```
</details>
</li>
<li>
<details>
<summary>
<code>UpgradedToU32RefCount</code>
</summary>
True if we have upgraded so that `type RefCount` is `u32`. False (default) if not.
```rust
value: Bool
```
</details>
</li>
<li>
<details>
<summary>
<code>UpgradedToTripleRefCount</code>
</summary>
True if we have upgraded so that AccountInfo contains three types of `RefCount`. False
(default) if not.
```rust
value: Bool
```
</details>
</li>
<li>
<details>
<summary>
<code>ExecutionPhase</code>
</summary>
The execution phase of the block.
```rust
value: Option<frame_system::Phase>
```
</details>
</li>
<li>
<details>
<summary>
<code>AuthorizedUpgrade</code>
</summary>
`Some` if a code upgrade has been authorized.
```rust
value: Option<frame_system::CodeUpgradeAuthorization<>>
```
</details>
</li>
</ul>
</li>
<li>Account - 1
<ul>
</ul>
</li>
<li>Scheduler - 2
<ul>
<li>
<details>
<summary>
<code>IncompleteSince</code>
</summary>
```rust
value: Option<U32>
```
</details>
</li>
<li>
<details>
<summary>
<code>Agenda</code>
</summary>
Items to be executed, indexed by the block number that they should be executed on.
```rust
key: U32
value: bounded_collections::bounded_vec::BoundedVec<Option<pallet_scheduler::Scheduled<[U8; 32], frame_support::traits::preimages::Bounded<gdev_runtime::RuntimeCall, sp_runtime::traits::BlakeTwo256>, U32, gdev_runtime::OriginCaller, sp_core::crypto::AccountId32>>, >
```
</details>
</li>
<li>
<details>
<summary>
<code>Retries</code>
</summary>
Retry configurations for items to be executed, indexed by task address.
```rust
key: (U32, U32)
value: pallet_scheduler::RetryConfig<U32>
```
</details>
</li>
<li>
<details>
<summary>
<code>Lookup</code>
</summary>
Lookup from a name to the block number and index of the task.
For v3 -> v4 the previously unbounded identities are Blake2-256 hashed to form the v4
identities.
```rust
key: [U8; 32]
value: (U32, U32)
```
</details>
</li>
</ul>
</li>
<li>Babe - 3
<ul>
<li>
<details>
<summary>
<code>EpochIndex</code>
</summary>
Current epoch index.
```rust
value: U64
```
</details>
</li>
<li>
<details>
<summary>
<code>Authorities</code>
</summary>
Current epoch authorities.
```rust
value: bounded_collections::weak_bounded_vec::WeakBoundedVec<(sp_consensus_babe::app::Public, U64), >
```
</details>
</li>
<li>
<details>
<summary>
<code>GenesisSlot</code>
</summary>
The slot at which the first epoch actually started. This is 0
until the first block of the chain.
```rust
value: sp_consensus_slots::Slot
```
</details>
</li>
<li>
<details>
<summary>
<code>CurrentSlot</code>
</summary>
Current slot number.
```rust
value: sp_consensus_slots::Slot
```
</details>
</li>
<li>
<details>
<summary>
<code>Randomness</code>
</summary>
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.
```rust
value: [U8; 32]
```
</details>
</li>
<li>
<details>
<summary>
<code>PendingEpochConfigChange</code>
</summary>
Pending epoch configuration change that will be applied when the next epoch is enacted.
```rust
value: Option<sp_consensus_babe::digests::NextConfigDescriptor>
```
</details>
</li>
<li>
<details>
<summary>
<code>NextRandomness</code>
</summary>
Next epoch randomness.
```rust
value: [U8; 32]
```
</details>
</li>
<li>
<details>
<summary>
<code>NextAuthorities</code>
</summary>
Next epoch authorities.
```rust
value: bounded_collections::weak_bounded_vec::WeakBoundedVec<(sp_consensus_babe::app::Public, U64), >
```
</details>
</li>
<li>
<details>
<summary>
<code>SegmentIndex</code>
</summary>
Randomness under construction.
We make a trade-off 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.
```rust
value: U32
```
</details>
</li>
<li>
<details>
<summary>
<code>UnderConstruction</code>
</summary>
TWOX-NOTE: `SegmentIndex` is an increasing integer, so this is okay.
```rust
key: U32
value: bounded_collections::bounded_vec::BoundedVec<[U8; 32], >
```
</details>
</li>
<li>
<details>
<summary>
<code>Initialized</code>
</summary>
Temporary value (cleared at block finalization) which is `Some`
if per-block initialization has already been called for current block.
```rust
value: Option<Option<sp_consensus_babe::digests::PreDigest>>
```
</details>
</li>
<li>
<details>
<summary>
<code>AuthorVrfRandomness</code>
</summary>
This field should always be populated during block processing unless
secondary plain slots are enabled (which don't contain a VRF output).
It is set in `on_finalize`, before it will contain the value from the last block.
```rust
value: Option<[U8; 32]>
```
</details>
</li>
<li>
<details>
<summary>
<code>EpochStart</code>
</summary>
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.
```rust
value: (U32, U32)
```
</details>
</li>
<li>
<details>
<summary>
<code>Lateness</code>
</summary>
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.
```rust
value: U32
```
</details>
</li>
<li>
<details>
<summary>
<code>EpochConfig</code>
</summary>
The configuration for the current epoch. Should never be `None` as it is initialized in
genesis.
```rust
value: Option<sp_consensus_babe::BabeEpochConfiguration>
```
</details>
</li>
<li>
<details>
<summary>
<code>NextEpochConfig</code>
</summary>
The configuration for the next epoch, `None` if the config will not change
(you can fallback to `EpochConfig` instead in that case).
```rust
value: Option<sp_consensus_babe::BabeEpochConfiguration>
```
</details>
</li>
<li>
<details>
<summary>
<code>SkippedEpochs</code>
</summary>
A list of the last 100 skipped epochs and the corresponding session index
when the epoch was skipped.
This is only used for validating equivocation proofs. An equivocation proof
must contains a key-ownership proof for a given session, therefore we need a
way to tie together sessions and epoch indices, i.e. we need to validate that
a validator was the owner of a given key on a given session, and what the
active epoch index was during that session.
```rust
value: bounded_collections::bounded_vec::BoundedVec<(U64, U32), >
```
</details>
</li>
</ul>
</li>
<li>Timestamp - 4
<ul>
<li>
<details>
<summary>
<code>Now</code>
</summary>
The current time for the current block.
```rust
value: U64
```
</details>
</li>
<li>
<details>
<summary>
<code>DidUpdate</code>
</summary>
Whether the timestamp has been updated in this block.
This value is updated to `true` upon successful submission of a timestamp by a node.
It is then checked at the end of each block execution in the `on_finalize` hook.
```rust
value: Bool
```
</details>
</li>
</ul>
</li>
<li>Parameters - 5
<ul>
<li>
<details>
<summary>
<code>ParametersStorage</code>
</summary>
```rust
value: pallet_duniter_test_parameters::types::Parameters<U32, U32, U64, U32>
```
</details>
</li>
</ul>
</li>
<li>Balances - 6
<ul>
<li>
<details>
<summary>
<code>TotalIssuance</code>
</summary>
The total units issued in the system.
```rust
value: U64
```
</details>
</li>
<li>
<details>
<summary>
<code>InactiveIssuance</code>
</summary>
The total units of outstanding deactivated balance in the system.
```rust
value: U64
```
</details>
</li>
<li>
<details>
<summary>
<code>Account</code>
</summary>
The Balances pallet example of storing the balance of an account.
# Example
```nocompile
impl pallet_balances::Config for Runtime {
type AccountStore = StorageMapShim<Self::Account<Runtime>, frame_system::Provider<Runtime>, AccountId, Self::AccountData<Balance>>
}
```
You can also store the balance of an account in the `System` pallet.
# Example
```nocompile
impl pallet_balances::Config for Runtime {
type AccountStore = System
}
```
But this comes with tradeoffs, storing account balances in the system pallet stores
`frame_system` data alongside the account data contrary to storing account balances in the
`Balances` pallet, which uses a `StorageMap` to store balances data only.
NOTE: This is only used in the case that this pallet is used to store balances.
```rust
key: sp_core::crypto::AccountId32
value: pallet_balances::types::AccountData<U64>
```
</details>
</li>
<li>
<details>
<summary>
<code>Locks</code>
</summary>
Any liquidity locks on some account balances.
NOTE: Should only be accessed when setting, changing and freeing a lock.
Use of locks is deprecated in favour of freezes. See `https://github.com/paritytech/substrate/pull/12951/`
```rust
key: sp_core::crypto::AccountId32
value: bounded_collections::weak_bounded_vec::WeakBoundedVec<pallet_balances::types::BalanceLock<U64>, >
```
</details>
</li>
<li>
<details>
<summary>
<code>Reserves</code>
</summary>
Named reserves on some account balances.
Use of reserves is deprecated in favour of holds. See `https://github.com/paritytech/substrate/pull/12951/`
```rust
key: sp_core::crypto::AccountId32
value: bounded_collections::bounded_vec::BoundedVec<pallet_balances::types::ReserveData<[U8; 8], U64>, >
```
</details>
</li>
<li>
<details>
<summary>
<code>Holds</code>
</summary>
Holds on account balances.
```rust
key: sp_core::crypto::AccountId32
value: bounded_collections::bounded_vec::BoundedVec<frame_support::traits::tokens::misc::IdAmount<gdev_runtime::RuntimeHoldReason, U64>, >
```
</details>
</li>
<li>
<details>
<summary>
<code>Freezes</code>
</summary>
Freeze locks on account balances.
```rust
key: sp_core::crypto::AccountId32
value: bounded_collections::bounded_vec::BoundedVec<frame_support::traits::tokens::misc::IdAmount<(), U64>, >
```
</details>
</li>
</ul>
</li>
<li>TransactionPayment - 32
<ul>
<li>
<details>
<summary>
<code>NextFeeMultiplier</code>
</summary>
```rust
value: sp_arithmetic::fixed_point::FixedU128
```
</details>
</li>
<li>
<details>
<summary>
<code>StorageVersion</code>
</summary>
```rust
value: pallet_transaction_payment::Releases
```
</details>
</li>
</ul>
</li>
<li>OneshotAccount - 7
<ul>
<li>
<details>
<summary>
<code>OneshotAccounts</code>
</summary>
The balance for each oneshot account.
```rust
key: sp_core::crypto::AccountId32
value: U64
```
</details>
</li>
</ul>
</li>
<li>Quota - 66
<ul>
<li>
<details>
<summary>
<code>IdtyQuota</code>
</summary>
The quota for each identity.
```rust
key: U32
value: pallet_quota::pallet::Quota<U32, U64>
```
</details>
</li>
<li>
<details>
<summary>
<code>RefundQueue</code>
</summary>
The fees waiting to be refunded.
```rust
value: bounded_collections::bounded_vec::BoundedVec<pallet_quota::pallet::Refund<sp_core::crypto::AccountId32, U32, U64>, >
```
</details>
</li>
</ul>
</li>
<li>SmithMembers - 10
<ul>
<li>
<details>
<summary>
<code>Smiths</code>
</summary>
The Smith metadata for each identity.
```rust
key: U32
value: pallet_smith_members::types::SmithMeta<U32>
```
</details>
</li>
<li>
<details>
<summary>
<code>ExpiresOn</code>
</summary>
The indexes of Smith to remove at a given session.
```rust
key: U32
value: Vec<U32>
```
</details>
</li>
<li>
<details>
<summary>
<code>CurrentSession</code>
</summary>
The current session index.
```rust
value: U32
```
</details>
</li>
</ul>
</li>
<li>AuthorityMembers - 11
<ul>
<li>
<details>
<summary>
<code>IncomingAuthorities</code>
</summary>
The incoming authorities.
```rust
value: Vec<U32>
```
</details>
</li>
<li>
<details>
<summary>
<code>OnlineAuthorities</code>
</summary>
The online authorities.
```rust
value: Vec<U32>
```
</details>
</li>
<li>
<details>
<summary>
<code>OutgoingAuthorities</code>
</summary>
The outgoing authorities.
```rust
value: Vec<U32>
```
</details>
</li>
<li>
<details>
<summary>
<code>Members</code>
</summary>
The member data.
```rust
key: U32
value: pallet_authority_members::types::MemberData<sp_core::crypto::AccountId32>
```
</details>
</li>
<li>
<details>
<summary>
<code>Blacklist</code>
</summary>
The blacklisted authorities.
```rust
value: Vec<U32>
```
</details>
</li>
</ul>
</li>
<li>Authorship - 12
<ul>
<li>
<details>
<summary>
<code>Author</code>
</summary>
Author of current block.
```rust
value: Option<sp_core::crypto::AccountId32>
```
</details>
</li>
</ul>
</li>
<li>Offences - 13
<ul>
<li>
<details>
<summary>
<code>Reports</code>
</summary>
The primary structure that holds all offence records keyed by report identifiers.
```rust
key: primitive_types::H256
value: sp_staking::offence::OffenceDetails<sp_core::crypto::AccountId32, (sp_core::crypto::AccountId32, common_runtime::entities::ValidatorFullIdentification)>
```
</details>
</li>
<li>
<details>
<summary>
<code>ConcurrentReportsIndex</code>
</summary>
A vector of reports of the same kind that happened at the same time slot.
```rust
key: ([U8; 16], Vec<U8>)
value: Vec<primitive_types::H256>
```
</details>
</li>
</ul>
</li>
<li>Historical - 14
<ul>
<li>
<details>
<summary>
<code>HistoricalSessions</code>
</summary>
Mapping from historical session indices to session-data root hash and validator count.
```rust
key: U32
value: (primitive_types::H256, U32)
```
</details>
</li>
<li>
<details>
<summary>
<code>StoredRange</code>
</summary>
The range of historical sessions we store. [first, last)
```rust
value: Option<(U32, U32)>
```
</details>
</li>
</ul>
</li>
<li>Session - 15
<ul>
<li>
<details>
<summary>
<code>Validators</code>
</summary>
The current set of validators.
```rust
value: Vec<sp_core::crypto::AccountId32>
```
</details>
</li>
<li>
<details>
<summary>
<code>CurrentIndex</code>
</summary>
Current index of the session.
```rust
value: U32
```
</details>
</li>
<li>
<details>
<summary>
<code>QueuedChanged</code>
</summary>
True if the underlying economic identities or weighting behind the validators
has changed in the queued validator set.
```rust
value: Bool
```
</details>
</li>
<li>
<details>
<summary>
<code>QueuedKeys</code>
</summary>
The queued keys for the next session. When the next session begins, these keys
will be used to determine the validator's session keys.
```rust
value: Vec<(sp_core::crypto::AccountId32, gdev_runtime::opaque::SessionKeys)>
```
</details>
</li>
<li>
<details>
<summary>
<code>DisabledValidators</code>
</summary>
Indices of disabled validators.
The vec is always kept sorted so that we can find whether a given validator is
disabled using binary search. It gets cleared when `on_session_ending` returns
a new set of identities.
```rust
value: Vec<U32>
```
</details>
</li>
<li>
<details>
<summary>
<code>NextKeys</code>
</summary>
The next session keys for a validator.
```rust
key: sp_core::crypto::AccountId32
value: gdev_runtime::opaque::SessionKeys
```
</details>
</li>
<li>
<details>
<summary>
<code>KeyOwner</code>
</summary>
The owner of a key. The key is the `KeyTypeId` + the encoded key.
```rust
key: (sp_core::crypto::KeyTypeId, Vec<U8>)
value: sp_core::crypto::AccountId32
```
</details>
</li>
</ul>
</li>
<li>Grandpa - 16
<ul>
<li>
<details>
<summary>
<code>State</code>
</summary>
State of the current authority set.
```rust
value: pallet_grandpa::StoredState<U32>
```
</details>
</li>
<li>
<details>
<summary>
<code>PendingChange</code>
</summary>
Pending change: (signaled at, scheduled change).
```rust
value: Option<pallet_grandpa::StoredPendingChange<U32, >>
```
</details>
</li>
<li>
<details>
<summary>
<code>NextForced</code>
</summary>
next block number where we can force a change.
```rust
value: Option<U32>
```
</details>
</li>
<li>
<details>
<summary>
<code>Stalled</code>
</summary>
`true` if we are currently stalled.
```rust
value: Option<(U32, U32)>
```
</details>
</li>
<li>
<details>
<summary>
<code>CurrentSetId</code>
</summary>
The number of changes (both in terms of keys and underlying economic responsibilities)
in the "set" of Grandpa validators from genesis.
```rust
value: U64
```
</details>
</li>
<li>
<details>
<summary>
<code>SetIdSession</code>
</summary>
A mapping from grandpa set ID to the index of the *most recent* session for which its
members were responsible.
This is only used for validating equivocation proofs. An equivocation proof must
contains a key-ownership proof for a given session, therefore we need a way to tie
together sessions and GRANDPA set ids, i.e. we need to validate that a validator
was the owner of a given key on a given session, and what the active set ID was
during that session.
TWOX-NOTE: `SetId` is not under user control.
```rust
key: U64
value: U32
```
</details>
</li>
<li>
<details>
<summary>
<code>Authorities</code>
</summary>
The current list of authorities.
```rust
value: bounded_collections::weak_bounded_vec::WeakBoundedVec<(sp_consensus_grandpa::app::Public, U64), >
```
</details>
</li>
</ul>
</li>
<li>ImOnline - 17
<ul>
<li>
<details>
<summary>
<code>HeartbeatAfter</code>
</summary>
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`.
```rust
value: U32
```
</details>
</li>
<li>
<details>
<summary>
<code>Keys</code>
</summary>
The current set of keys that may issue a heartbeat.
```rust
value: bounded_collections::weak_bounded_vec::WeakBoundedVec<pallet_im_online::sr25519::app_sr25519::Public, >
```
</details>
</li>
<li>
<details>
<summary>
<code>ReceivedHeartbeats</code>
</summary>
For each session index, we keep a mapping of `SessionIndex` and `AuthIndex`.
```rust
key: (U32, U32)
value: Bool
```
</details>
</li>
<li>
<details>
<summary>
<code>AuthoredBlocks</code>
</summary>
For each session index, we keep a mapping of `ValidatorId<T>` to the
number of blocks authored by the given authority.
```rust
key: (U32, sp_core::crypto::AccountId32)
value: U32
```
</details>
</li>
</ul>
</li>
<li>AuthorityDiscovery - 18
<ul>
<li>
<details>
<summary>
<code>Keys</code>
</summary>
Keys of the current authority set.
```rust
value: bounded_collections::weak_bounded_vec::WeakBoundedVec<sp_authority_discovery::app::Public, >
```
</details>
</li>
<li>
<details>
<summary>
<code>NextKeys</code>
</summary>
Keys of the next authority set.
```rust
value: bounded_collections::weak_bounded_vec::WeakBoundedVec<sp_authority_discovery::app::Public, >
```
</details>
</li>
</ul>
</li>
<li>Sudo - 20
<ul>
<li>
<details>
<summary>
<code>Key</code>
</summary>
The `AccountId` of the sudo key.
```rust
value: Option<sp_core::crypto::AccountId32>
```
</details>
</li>
</ul>
</li>
<li>UpgradeOrigin - 21
<ul>
</ul>
</li>
<li>Preimage - 22
<ul>
<li>
<details>
<summary>
<code>StatusFor</code>
</summary>
The request status of a given hash.
```rust
key: primitive_types::H256
value: pallet_preimage::OldRequestStatus<sp_core::crypto::AccountId32, U64>
```
</details>
</li>
<li>
<details>
<summary>
<code>RequestStatusFor</code>
</summary>
The request status of a given hash.
```rust
key: primitive_types::H256
value: pallet_preimage::RequestStatus<sp_core::crypto::AccountId32, ()>
```
</details>
</li>
<li>
<details>
<summary>
<code>PreimageFor</code>
</summary>
```rust
key: (primitive_types::H256, U32)
value: bounded_collections::bounded_vec::BoundedVec<U8, >
```
</details>
</li>
</ul>
</li>
<li>TechnicalCommittee - 23
<ul>
<li>
<details>
<summary>
<code>Proposals</code>
</summary>
The hashes of the active proposals.
```rust
value: bounded_collections::bounded_vec::BoundedVec<primitive_types::H256, >
```
</details>
</li>
<li>
<details>
<summary>
<code>ProposalOf</code>
</summary>
Actual proposal for a given hash, if it's current.
```rust
key: primitive_types::H256
value: gdev_runtime::RuntimeCall
```
</details>
</li>
<li>
<details>
<summary>
<code>CostOf</code>
</summary>
Consideration cost created for publishing and storing a proposal.
Determined by [Config::Consideration] and may be not present for certain proposals (e.g. if
the proposal count at the time of creation was below threshold N).
```rust
key: primitive_types::H256
value: (sp_core::crypto::AccountId32, ())
```
</details>
</li>
<li>
<details>
<summary>
<code>Voting</code>
</summary>
Votes on a given proposal, if it is ongoing.
```rust
key: primitive_types::H256
value: pallet_collective::Votes<sp_core::crypto::AccountId32, U32>
```
</details>
</li>
<li>
<details>
<summary>
<code>ProposalCount</code>
</summary>
Proposals so far.
```rust
value: U32
```
</details>
</li>
<li>
<details>
<summary>
<code>Members</code>
</summary>
The current members of the collective. This is stored sorted (just by value).
```rust
value: Vec<sp_core::crypto::AccountId32>
```
</details>
</li>
<li>
<details>
<summary>
<code>Prime</code>
</summary>
The prime member that helps determine the default vote behavior in case of abstentions.
```rust
value: Option<sp_core::crypto::AccountId32>
```
</details>
</li>
</ul>
</li>
<li>UniversalDividend - 30
<ul>
<li>
<details>
<summary>
<code>CurrentUd</code>
</summary>
The current Universal Dividend value.
```rust
value: U64
```
</details>
</li>
<li>
<details>
<summary>
<code>CurrentUdIndex</code>
</summary>
The current Universal Dividend index.
```rust
value: U16
```
</details>
</li>
<li>
<details>
<summary>
<code>MonetaryMass</code>
</summary>
The total quantity of money created by Universal Dividend, excluding potential money destruction.
```rust
value: U64
```
</details>
</li>
<li>
<details>
<summary>
<code>NextReeval</code>
</summary>
The next Universal Dividend re-evaluation.
```rust
value: Option<U64>
```
</details>
</li>
<li>
<details>
<summary>
<code>NextUd</code>
</summary>
The next Universal Dividend creation.
```rust
value: Option<U64>
```
</details>
</li>
<li>
<details>
<summary>
<code>PastReevals</code>
</summary>
The past Universal Dividend re-evaluations.
```rust
value: bounded_collections::bounded_vec::BoundedVec<(U16, U64), >
```
</details>
</li>
</ul>
</li>
<li>Wot - 40
<ul>
</ul>
</li>
<li>Identity - 41
<ul>
<li>
<details>
<summary>
<code>Identities</code>
</summary>
The identity value for each identity.
```rust
key: U32
value: pallet_identity::types::IdtyValue<U32, sp_core::crypto::AccountId32, common_runtime::entities::IdtyData>
```
</details>
</li>
<li>
<details>
<summary>
<code>CounterForIdentities</code>
</summary>
Counter for the related counted storage map
```rust
value: U32
```
</details>
</li>
<li>
<details>
<summary>
<code>IdentityIndexOf</code>
</summary>
The identity associated with each account.
```rust
key: sp_core::crypto::AccountId32
value: U32
```
</details>
</li>
<li>
<details>
<summary>
<code>IdentitiesNames</code>
</summary>
The name associated with each identity.
```rust
key: pallet_identity::types::IdtyName
value: U32
```
</details>
</li>
<li>
<details>
<summary>
<code>NextIdtyIndex</code>
</summary>
The identity index to assign to the next created identity.
```rust
value: U32
```
</details>
</li>
<li>
<details>
<summary>
<code>IdentityChangeSchedule</code>
</summary>
The identities to remove at a given block.
```rust
key: U32
value: Vec<U32>
```
</details>
</li>
</ul>
</li>
<li>Membership - 42
<ul>
<li>
<details>
<summary>
<code>Membership</code>
</summary>
The membership data for each identity.
```rust
key: U32
value: sp_membership::MembershipData<U32>
```
</details>
</li>
<li>
<details>
<summary>
<code>CounterForMembership</code>
</summary>
Counter for the related counted storage map
```rust
value: U32
```
</details>
</li>
<li>
<details>
<summary>
<code>MembershipsExpireOn</code>
</summary>
The identities of memberships to expire at a given block.
```rust
key: U32
value: Vec<U32>
```
</details>
</li>
</ul>
</li>
<li>Certification - 43
<ul>
<li>
<details>
<summary>
<code>StorageIdtyCertMeta</code>
</summary>
The certification metadata for each issuer.
```rust
key: U32
value: pallet_certification::types::IdtyCertMeta<U32>
```
</details>
</li>
<li>
<details>
<summary>
<code>CertsByReceiver</code>
</summary>
The certifications for each receiver.
```rust
key: U32
value: Vec<(U32, U32)>
```
</details>
</li>
<li>
<details>
<summary>
<code>CertsRemovableOn</code>
</summary>
The certifications that should expire at a given block.
```rust
key: U32
value: Vec<(U32, U32)>
```
</details>
</li>
</ul>
</li>
<li>Distance - 44
<ul>
<li>
<details>
<summary>
<code>EvaluationPool0</code>
</summary>
The first evaluation pool for distance evaluation queuing identities to evaluate for a given
evaluator account.
```rust
value: pallet_distance::types::EvaluationPool<sp_core::crypto::AccountId32, U32>
```
</details>
</li>
<li>
<details>
<summary>
<code>EvaluationPool1</code>
</summary>
The second evaluation pool for distance evaluation queuing identities to evaluate for a given
evaluator account.
```rust
value: pallet_distance::types::EvaluationPool<sp_core::crypto::AccountId32, U32>
```
</details>
</li>
<li>
<details>
<summary>
<code>EvaluationPool2</code>
</summary>
The third evaluation pool for distance evaluation queuing identities to evaluate for a given
evaluator account.
```rust
value: pallet_distance::types::EvaluationPool<sp_core::crypto::AccountId32, U32>
```
</details>
</li>
<li>
<details>
<summary>
<code>EvaluationBlock</code>
</summary>
The block at which the distance is evaluated.
```rust
value: primitive_types::H256
```
</details>
</li>
<li>
<details>
<summary>
<code>PendingEvaluationRequest</code>
</summary>
The pending evaluation requesters.
```rust
key: U32
value: sp_core::crypto::AccountId32
```
</details>
</li>
<li>
<details>
<summary>
<code>DidUpdate</code>
</summary>
Store if the evaluation was updated in this block.
```rust
value: Bool
```
</details>
</li>
<li>
<details>
<summary>
<code>CurrentPeriodIndex</code>
</summary>
The current evaluation period index.
```rust
value: U32
```
</details>
</li>
</ul>
</li>
<li>AtomicSwap - 50
<ul>
<li>
<details>
<summary>
<code>PendingSwaps</code>
</summary>
```rust
key: (sp_core::crypto::AccountId32, [U8; 32])
value: pallet_atomic_swap::PendingSwap<>
```
</details>
</li>
</ul>
</li>
<li>Multisig - 51
<ul>
<li>
<details>
<summary>
<code>Multisigs</code>
</summary>
The set of open multisig operations.
```rust
key: (sp_core::crypto::AccountId32, [U8; 32])
value: pallet_multisig::Multisig<U32, U64, sp_core::crypto::AccountId32, >
```
</details>
</li>
</ul>
</li>
<li>ProvideRandomness - 52
<ul>
<li>
<details>
<summary>
<code>NexEpochHookIn</code>
</summary>
The number of blocks before the next epoch.
```rust
value: U8
```
</details>
</li>
<li>
<details>
<summary>
<code>RequestIdProvider</code>
</summary>
The request ID.
```rust
value: U64
```
</details>
</li>
<li>
<details>
<summary>
<code>RequestsReadyAtNextBlock</code>
</summary>
The requests that will be fulfilled at the next block.
```rust
value: Vec<pallet_provide_randomness::types::Request>
```
</details>
</li>
<li>
<details>
<summary>
<code>RequestsReadyAtEpoch</code>
</summary>
The requests that will be fulfilled at the next epoch.
```rust
key: U64
value: Vec<pallet_provide_randomness::types::Request>
```
</details>
</li>
<li>
<details>
<summary>
<code>RequestsIds</code>
</summary>
The requests being processed.
```rust
key: U64
value: ()
```
</details>
</li>
<li>
<details>
<summary>
<code>CounterForRequestsIds</code>
</summary>
Counter for the related counted storage map
```rust
value: U32
```
</details>
</li>
</ul>
</li>
<li>Proxy - 53
<ul>
<li>
<details>
<summary>
<code>Proxies</code>
</summary>
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.
```rust
key: sp_core::crypto::AccountId32
value: (bounded_collections::bounded_vec::BoundedVec<pallet_proxy::ProxyDefinition<sp_core::crypto::AccountId32, gdev_runtime::ProxyType, U32>, >, U64)
```
</details>
</li>
<li>
<details>
<summary>
<code>Announcements</code>
</summary>
The announcements made by the proxy (key).
```rust
key: sp_core::crypto::AccountId32
value: (bounded_collections::bounded_vec::BoundedVec<pallet_proxy::Announcement<sp_core::crypto::AccountId32, primitive_types::H256, U32>, >, U64)
```
</details>
</li>
</ul>
</li>
<li>Utility - 54
<ul>
</ul>
</li>
<li>Treasury - 55
<ul>
<li>
<details>
<summary>
<code>ProposalCount</code>
</summary>
DEPRECATED: associated with `spend_local` call and will be removed in May 2025.
Refer to <https://github.com/paritytech/polkadot-sdk/pull/5961> for migration to `spend`.
Number of proposals that have been made.
```rust
value: U32
```
</details>
</li>
<li>
<details>
<summary>
<code>Proposals</code>
</summary>
DEPRECATED: associated with `spend_local` call and will be removed in May 2025.
Refer to <https://github.com/paritytech/polkadot-sdk/pull/5961> for migration to `spend`.
Proposals that have been made.
```rust
key: U32
value: pallet_treasury::Proposal<sp_core::crypto::AccountId32, U64>
```
</details>
</li>
<li>
<details>
<summary>
<code>Deactivated</code>
</summary>
The amount which has been reported as inactive to Currency.
```rust
value: U64
```
</details>
</li>
<li>
<details>
<summary>
<code>Approvals</code>
</summary>
DEPRECATED: associated with `spend_local` call and will be removed in May 2025.
Refer to <https://github.com/paritytech/polkadot-sdk/pull/5961> for migration to `spend`.
Proposal indices that have been approved but not yet awarded.
```rust
value: bounded_collections::bounded_vec::BoundedVec<U32, >
```
</details>
</li>
<li>
<details>
<summary>
<code>SpendCount</code>
</summary>
The count of spends that have been made.
```rust
value: U32
```
</details>
</li>
<li>
<details>
<summary>
<code>Spends</code>
</summary>
Spends that have been approved and being processed.
```rust
key: U32
value: pallet_treasury::SpendStatus<(), U64, sp_core::crypto::AccountId32, U32, ()>
```
</details>
</li>
<li>
<details>
<summary>
<code>LastSpendPeriod</code>
</summary>
The blocknumber for the last triggered spend period.
```rust
value: Option<U32>
```
</details>
</li>
</ul>
</li>
</ul>
# Beginner walkthrough
This is a beginner tutorial for those who do not have a previous experience with Rust ecosystem or need guidance to get familiar with Duniter v2s project. You'll need a development machine with an internet connection, at least **20 GB of free storage**, and **an hour or two** depending on your computing power.
This walkthrough is based on the following video (french), don't hesitate to record an english voiceover if you feel so.
[![preview](https://tube.p2p.legal/lazy-static/previews/654006dc-66c0-4e37-a32f-b7b5a1c13213.jpg)](https://tube.p2p.legal/w/n4TXxQ4SqxzpHPY4TNMXFu)
> video walkthrough on peertube https://tube.p2p.legal/w/n4TXxQ4SqxzpHPY4TNMXFu
## Requirements
If you are on a debian based system, you can install the required packages with:
```bash
sudo apt install cmake pkg-config libssl-dev git build-essential clang libclang-dev curl protobuf-compiler
```
Else, look at the corresponding section in the [system setup documentation](./setup.md).
Rust recommended installation method is through the rustup script that you can run with:
```bash
curl https://sh.rustup.rs -sSf | sh
```
If you reopen your terminal, it will give you access to the `rustup`, `rustc` and `cargo` commands. You can then install the required Rust toolchains with:
```bash
rustup default stable
rustup update nightly
rustup update stable
rustup target add wasm32-unknown-unknown --toolchain nightly
```
This can take about **2 minutes**.
## Build project
After cloning wherever you want the `duniter-v2s` repo with:
```bash
git clone https://git.duniter.org/nodes/rust/duniter-v2s.git
```
you can go to the root folder and build the substrate client and default runtime with:
```bash
cargo build
```
This will take about **2 minutes** to download dependencies plus between 5 and **15 minutes** to build in debug mode depending on the power of your processor. At this point, you built the *substrate client* (a kind of "shell" in which lies the runtime) and the default *runtime* itself. You can run a local blockchain with:
```bash
cargo run -- --dev --tmp # here, --dev means --chain=dev which selects the gdev runtime
```
When you see the logs, the blockchain is running and you can connect to it with polkadotjs app: [https://polkadot.js.org/apps/?rpc=ws://127.0.0.1:9944](https://polkadot.js.org/apps/?rpc=ws%3A%2F%2F127.0.0.1%3A9944). You should see blocks being added every 6 seconds. You can use Alice, Bob, etc test accounts to submit extrinsics.
## Autocompletion
When using Duniter commands, you will benefit a lot from commands autocompletion. This can be achieved by following [autocompletion documentation](../user/autocompletion.md) for you shell. If you use bash the commands are:
```bash
# create local dir to store completion script
mkdir -p ~/.local/share/duniter
# export the bash completion file
cargo run -- completion --generator bash > ~/.local/share/duniter/completion.bash
# add the following line to your ~/.bashrc to automatically load completion on startup
[[ -f $HOME/.local/share/duniter/completion.bash ]] && source $HOME/.local/share/duniter/completion.bash
```
You will then benefit from completion using `<Tab>` key and `*`.
## End-to-end tests using cucumber
Cucumber end2end tests are a good way to dive in Duniter's business procedure. They work by spawning a local blockchain and submitting extrinsics to it. You can build and run the cucumber tests by running:
```bash
cargo cucumber
```
which should take about **4 minutes** to build and run the tests. A highly detailed documentation about the end2end tests is available [in the dedicated folder](../../end2end-tests/README.md), you will learn how to read and modify the tests.
## Get in touch with us
Wether you are stuck and need help or have sucessfully completed this tutorial, don't hesitate to get in touch with us on the Duniter forum! If you found this walkthrough useful, please 🙏 let us know on the [walkthrough topic](https://forum.duniter.org/t/contribuer-a-duniter-tutoriel-video/9770) on the forum 😊.
\ No newline at end of file
# Compilation
Duniter is compiled using the Rust compiler. For a general overview, refer to the [Rustc Dev Guide](https://rustc-dev-guide.rust-lang.org/overview.html).
Substrate and Duniter provide a set of features enabling or disabling parts of the code using conditional compilation. More information on conditional compilation can be found [here](https://doc.rust-lang.org/reference/conditional-compilation.html), or by enabling or disabling compilation of packages. Below is a list of all available features:
## External
- **runtime-benchmarks**: Compiles the runtime with benchmarks for extrinsics benchmarking.
- **try-runtime**: Compiles the runtime for tests and verifies operations in a simulated environment.
- **std**: Enables the Rust standard library.
## Duniter
- **gdev**: Sets `gdev-runtime` and `std` used to build the development chain.
- **gtest**: Sets `gtest-runtime` and `std` used to build the test chain.
- **g1**: Sets `g1-runtime` and `std` used to build the production chain.
- **constant-fees**: Uses a constant and predictable weight-to-fee conversion only for testing.
- **embed**: Enables hardcoded live chainspecs loaded from "../specs/gtest-raw.json" file.
- **native**: Compiles the runtime into native-platform executable only for debugging purposes.
Note: By default, Duniter will be compiled using the `gdev` feature and including the compilation of the distance oracle. Since the three Duniter chains are mutually exclusive, it is mandatory to disable the default feature to compile `gtest` and `g1` as follows:
- `cargo build --no-default-features --features gtest`
- `cargo build --no-default-features --features g1`
- `cargo build --no-default-features -p distance-oracle --features std`
...@@ -15,10 +15,10 @@ The summary gives an overview of the rules described below. Reading it will help ...@@ -15,10 +15,10 @@ The summary gives an overview of the rules described below. Reading it will help
## Naming commits ## Naming commits
Every commit must follow [conventional commit specification v1.0.0]. Every commit must comply with [conventional commit specification v1.0.0].
The commit name hase to be meaningful in the context of commit history reread. It should not make reference to a specific MR or discussion. The commit name has to be meaningful in the context of commit history reread. It should not make reference to a specific MR or discussion.
Among other, commit history is used in changlogs and to follow the project progress, that's why it has to be self-explanatory. Among other, commit history is used in changlogs and to track the project progress, that's why it has to be self-explanatory.
If you have a new need, please contact the main developers to add a type together. If you have a new need, please contact the main developers to add a type together.
## Update strategy ## Update strategy
...@@ -28,18 +28,13 @@ We only use **rebases**, *merges* are strictly fordbidden ! ...@@ -28,18 +28,13 @@ We only use **rebases**, *merges* are strictly fordbidden !
Every time the `master` branch is updated, you must rebase each of your working branch on it. For each of them: Every time the `master` branch is updated, you must rebase each of your working branch on it. For each of them:
1. Go on your branch 1. Go on your branch
2. Run a rebase on master: 1. Rebase on master with `git rebase master`
1. If you see conflicts, fix them by editing the sources. Once it is done, you must:
1. commit the files that were in conflict
1. continue the rebase with `git rebase --continue`
1. Keep doing until you don't have any more conflict after `git rebase --continue`.
git rebase master To prevent accidental merge commits, we recommend to force the `--ff-only` option on the merge command:
3. If you see conflicts, fix them by editing the sources. Once it is done, you must:
a. commit the files that were in conflict
b. continue the rebase with `git rebase --continue`
c. Do 3. again for each commit that will be in conflict.
4. When you don't have any conflict anymore after `git rebase --continue`, then the rebase succeeded. Then rebase a remaning branch.
To prevent accidental merge commits, we recommend that force the `--ff-only` option on the merge command:
git config --global merge.ff only git config --global merge.ff only
...@@ -58,20 +53,24 @@ any problem with your material. ...@@ -58,20 +53,24 @@ any problem with your material.
After complying with the above criteria in your commits, you should check that your branch is up to date with the target branch (`master` in this example). As this branch is moving forward frequently, it is possible that new commits may have occurred while you were working on your branch (named YOUR_BRANCH, here). If this is the case or in case of doubt, to update your branch with respect to `master`, do the following: After complying with the above criteria in your commits, you should check that your branch is up to date with the target branch (`master` in this example). As this branch is moving forward frequently, it is possible that new commits may have occurred while you were working on your branch (named YOUR_BRANCH, here). If this is the case or in case of doubt, to update your branch with respect to `master`, do the following:
```bash
git checkout master # switch to master branch git checkout master # switch to master branch
git pull # updates the remote branch based on remote git pull # updates the remote branch based on remote
git checkout YOU_BRANCH # switch back to your branch git checkout YOU_BRANCH # switch back to your branch
git rebase master # rebase you work on master branch git rebase master # rebase you work on master branch
```
In case of conflict during rebase that you can not solve, contact a lead developer telling them the hash of the commit on which YOUR_BRANCH is currently based so they can reproduce the rebase and see the conflicts. While waiting for their answer, you can cancel the rebase and work on YOUR_BRANCH without updating: In case of conflict during rebase that you can not solve, contact a lead developer telling them the hash of the commit on which YOUR_BRANCH is currently based so they can reproduce the rebase and see the conflicts. While waiting for their answer, you can cancel the rebase and work on YOUR_BRANCH without updating:
```
git rebase --abort git rebase --abort
```
It is better to take your time before integrating a new contribution because the history of the master branch cannot be modified: it is a protected branch. Each commit on this branch remains there *ad vitam aeternam* that is why we make sure to keep a clear and understandable commit history. It is better to take your time before integrating a new contribution because the history of the master branch cannot be modified: it is a protected branch. Each commit on this branch remains there *ad vitam aeternam* that is why we make sure to keep a clear and understandable commit history.
## Discussion in a merge request ## Discussion in a merge request
On Gitlab, a discussion is opened for each merge request. It will allow you to discuss the changes you have made. Feel free to identify someone by writing @pseudo so that they are notified of your request. Don't be impatient, the review of your contribution may take more or less time depending on its content! On Gitlab, a discussion is opened for each merge request. It will allow you to discuss the changes you have made. Feel free to tag someone by writing @pseudo so that they are notified of your request. Don't be impatient, the review of your contribution may take more or less time depending on its content!
The general discussion is used to comment on the merge request as a whole, for example to tag a developer for a proofreading request. When it comes to discussing a specific change in the code, you should go to the "Changes" tab of the merge request and comment under the code extract involved. This makes it easier to break down the resolution of problems raised by the merge request via the "comment resolution" feature. Each segment can be marked as resolved, but only the reviewer is allowed to do so! The general discussion is used to comment on the merge request as a whole, for example to tag a developer for a proofreading request. When it comes to discussing a specific change in the code, you should go to the "Changes" tab of the merge request and comment under the code extract involved. This makes it easier to break down the resolution of problems raised by the merge request via the "comment resolution" feature. Each segment can be marked as resolved, but only the reviewer is allowed to do so!
...@@ -81,7 +80,8 @@ When you finished developing, you must compile, run linter and run all tests: ...@@ -81,7 +80,8 @@ When you finished developing, you must compile, run linter and run all tests:
cargo fmt cargo fmt
cargo clippy cargo clippy
cd tests && npm test cargo tu
cargo cucumber
Then commit everything. Then commit everything.
...@@ -93,7 +93,7 @@ If you have a pile of commits, use the useful interactive rebase to clean up you ...@@ -93,7 +93,7 @@ If you have a pile of commits, use the useful interactive rebase to clean up you
There you can rename the `wip:` commits, you can "fixup" commits that go together, you can rename and re-order commits,... There you can rename the `wip:` commits, you can "fixup" commits that go together, you can rename and re-order commits,...
After an interactive rebase, your local git history is different that yours in Gitlab, so you need a force push to make it to Gitlab: After an interactive rebase, your local git history differs from Gitlab's version, so you need a force push to make it to Gitlab:
git push -f git push -f
......
docs/dev/img/release-pipeline.png

44.1 KiB

# How to launch a live network # How to launch a live network
## 1. Choose the currency type Launching a new live network is more difficult than spawning a local blockchain. Follow this process if you know what you are doing and you already experimented a bit with local blockchains. Part of this process is automated with Rust scripts, including interaction with GitLab's GraphQL API. Do not hesitate to improve and complete it (see TODOs inside `xtask/**/*.rs` files).
Ensure that the currency type you want have the requirements. ## Requirements
In order to build in a standardized environment, you need Docker.
- see docker docs to [install docker](https://docs.docker.com/engine/install/)
- make sure you can run docker as non-root user with `docker info` or so
## Preparation
When launching a new network, you're likely to use a new runtime. See how to [release a new runtime](./release-new-runtime.md).
### Inject runtime in chainspec
ĞDev runtime is automatically embeded in the raw chainspec with the `include_bytes!` macro. An other way to inject the runtime is to use "inject-runtime-code" xtask:
```bash
cargo xtask inject-runtime-code --runtime runtime/gdev/target/srtool/release/wbuild/gdev-runtime/gdev_runtime.compact.compressed.wasm --raw-spec resources/gdev-raw.json
```
## Bootstraping
### Choose the currency type
For now, only `gdev` is supported. For now, only `gdev` is supported.
In the commands that will be indicated afterwards, you will have to replace `CURRENCY` by the In the commands that will be indicated afterwards, you will have to replace `CURRENCY` by the
currency type you have chosen. currency type you have chosen.
## 2. Choose the docker image ### Choose the docker image
Choose or build the docker image that contains the version of the code thut you want to use. Choose the docker image that contains the version of the code that you want to use.
In the commands that will be indicated afterwards, you will have to replace `TAG` by the tag of the In the commands that will be indicated afterwards, you will have to replace `TAG` by the tag of the
docker image that you have chosen. docker image that you have chosen (example : runtime-400).
## 3. Generate the session keys of genesis authority ### Generate the session keys of genesis authority
Generate a random secret phrase: Generate a random secret phrase:
```bash ```bash
$ docker run --rm -it --entrypoint duniter duniter/duniter-v2s:TAG key generate $ docker run --rm duniter/duniter-v2s:TAG -- key generate
Secret phrase: noble stay fury mean poverty delay stadium organ evil east vague can Secret phrase: noble stay fury mean poverty delay stadium organ evil east vague can
Secret seed: 0xb39c31fb10c5080721738880c2ea45412cb3df33df022bf8d9a51483b3a9b7a6 Secret seed: 0xb39c31fb10c5080721738880c2ea45412cb3df33df022bf8d9a51483b3a9b7a6
Public key (hex): 0x90a0c2866034db9d05f8193a95fe5af8d5e12ab295a501c17c95cdbeaf226d62 Public key (hex): 0x90a0c2866034db9d05f8193a95fe5af8d5e12ab295a501c17c95cdbeaf226d62
...@@ -35,38 +56,64 @@ Keep this secret phrase **carefully**, it will be used **several** times later. ...@@ -35,38 +56,64 @@ Keep this secret phrase **carefully**, it will be used **several** times later.
Then, generate the session keys: Then, generate the session keys:
```bash ```bash
$ docker run --rm -it --entrypoint duniter duniter/duniter-v2s:TAG key generate-session-keys --chain CURRENCY_local --suri "<your secret phrase>" $ docker run --rm duniter/duniter-v2s:TAG -- key generate-session-keys --chain CURRENCY_local --suri "<your secret phrase>"
Session Keys: 0x87189d723e1b2826c243bc433c718ac26ba60526932216a09102a254d54462b890a0c2866034db9d05f8193a95fe5af8d5e12ab295a501c17c95cdbeaf226d6290a0c2866034db9d05f8193a95fe5af8d5e12ab295a501c17c95cdbeaf226d6290a0c2866034db9d05f8193a95fe5af8d5e12ab295a501c17c95cdbeaf226d62 Session Keys: 0x87189d723e1b2826c243bc433c718ac26ba60526932216a09102a254d54462b890a0c2866034db9d05f8193a95fe5af8d5e12ab295a501c17c95cdbeaf226d6290a0c2866034db9d05f8193a95fe5af8d5e12ab295a501c17c95cdbeaf226d6290a0c2866034db9d05f8193a95fe5af8d5e12ab295a501c17c95cdbeaf226d62
``` ```
## 4. Paste sessions keys in the genesis configuration file ### Paste sessions keys in the genesis configuration file
An example of genesis configuration file: `resources/gdev.json` An example of genesis configuration file: `resources/gdev.json`. Paste your session keys in your `smith` identity with key `session_keys`.
## 5. Generate raw spec ### Generate raw spec
```docker
docker run -v $HOME/dev/duniter-v2s/resources:/var/lib/duniter/resources -e DUNITER_GENESIS_CONFIG=/var/lib/duniter/resources/gdev.json --rm duniter/duniter-v2s:TAG -- build-spec -lerror --chain=gdev_live --raw > name-raw.json
```
```bash ```bash
./scripts/gen-live-network-raw-spec.sh CURRENCY "<path/to/your/genesis/config/file>" ./scripts/gen-live-network-raw-spec.sh CURRENCY "<path/to/your/genesis/config/file>"
``` ```
## 6. Generate the docker compose and prepare nodes keys This builds the specs using debug version of Duniter.
### Generate the docker compose and prepare nodes keys
```bash ```bash
./scripts/create-live-network.sh "<your secret phrase>" CURRENCY "<path/to/dist/folder>" ./scripts/create-live-network.sh "<your secret phrase>" CURRENCY "<path/to/dist/folder>"
``` ```
The distribution folder can then be copied to a server, then the compose must be launched from the The new distribution folder can be copied to a server
root of the distribution folder:
```bash ```bash
scp -r -P SSH_PORT "<path/to/dist/folder>" user@ip:/remote/dist/path scp -r "<path/to/dist/folder>" <server>:/remote/dist/path
cd "<path/to/dist/folder>"
docker-compose up -d
``` ```
Then, on the server: then on the server, launch the compose file from the the distribution folder's root:
```bash ```bash
ssh <server>
cd "<path/to/dist/folder>" cd "<path/to/dist/folder>"
docker-compose up -d docker compose up -d
``` ```
This is the first node of the new live network.
## Finalization
The following steps should be completed once you are satisfied with the new live network.
### Rotate session keys
You should rotate session keys for more secured keys produced on the server (the one you used before are still in your develop machine bash history and clipboard).
### Publish image
With these new session keys in the chainspec and the runtime build with srtool, you can release the new runtime again with:
```bash
cargo xtask release-runtime 400
```
### Tell the other smith
Once you completed all these steps, the other smith can pull the docker image with a genesis containing your bootnode with the correct session keys. They can base their `docker-compose.yml` on the `duniter-validator` template.
# Duniter Pallet Conventions
## Call
Custom Duniter pallet calls should adhere to the standard Substrate naming convention:
- `action_` for regular calls (e.g., `create_identity`).
- `force_action_` for calls with a privileged origin (e.g., `force_set_distance_status`).
## Error
In the event of a call failure, it should trigger a pallet error with a self-explanatory name, for instance, `IdtyNotFound`.
## Event
Successful calls should deposit a system event to notify external entities of the change. The event name should be self-explanatory and structured in the form of a Rust struct with named fields, ensuring clarity in autogenerated documentation. An example is:
```rust
IdtyRemoved {
idty_index: T::IdtyIndex,
reason: IdtyRemovalReason<T::IdtyRemovalOtherReason>,
}
```
## Hook
Hooks are inherently infallible, and no errors should be emitted within them. To monitor progression from inside the hook, events can be employed to inform external entities about changes or no-changes.
## Internal Function
Internal functions should adhere to the following naming convention:
- `do_action_` for regular functions executing the base logic of a call (e.g., `do_remove_identity_`). These functions should directly emit events and trigger errors as needed.
- `force_action_` for privileged functions that bypass any checks. This can be useful for specific benchmarking functions.
- `check_` for functions performing checks and triggering errors in case of failure.
# Release a new Runtime
![](img/release-pipeline.png)
> The following instructions have been described in french at: [Créer une release](https://forum.duniter.org/t/industrialiser-le-demarrage-dune-nouvelle-gx/11535/41).
## Process
Example for `runtime-800`.
### New release with new Runtime
* create a `release/runtime-800` branch locally
* update the values:
* update spec version (in `runtime/<currency>/src/lib.rs`)
* eventually update `gdev.yml` (smiths, tech. committee, ...)
* push the `release/runtime-800` branch
* in the CI/CD, wait for `Create release` button to be available and click on it (see above screenshot)
The Runtime is now available on the release page [runtime-800](https://git.duniter.org/nodes/rust/duniter-v2s/-/releases/runtime-800).
### New Client
The Client is published as a Docker image.
You may want to publish a new Client version along with a Runtime update.
#### New raw specs (optional)
For a reboot, you will likely want to update the raw specs:
* in the CI/CD, wait for `release_gdev_specs` button to be available and click on it
* in the CI/CD, wait for `release_gtest_specs` button to be available and click on it
* wait for both jobs to finish
* update the Client raw specs with `cargo xtask update-raw-specs runtime-800`
#### New version (mandatory)
Update Client values:
* update Client version (in `Cargo.toml`)
* update `Cargo.lock` with `cargo build`
#### Publish Docker image
Commit everything and push the branch:
* in the CI/CD, a new pipeline has been launched
* you can stop jobs `create_g1_data`, `gdev_srtool`, `gtest_srtool` (won't be used)
* click on `gdev_docker_deploy` and `gtest_docker_deploy`
The Docker images should now be available at: https://hub.docker.com/r/duniter/duniter-v2s-gdev/tags.
## Runtime tag and spec version
Our runtime tags use `xxyy` version numbers where `x` corresponds to major change and `y` hotfix.
Make sure to move any issue or merge request assigned to the choosen milestone `runtime-xxyy` to the next one. This prevents from forgetting unfinished work.
# How to replay a block
WARN: try-runtime is not properly implemented
You can use `try-runtime` subcommand to replay a block against a real state from a live network.
1. Checkout the git tag of the runtime version at the block you want to replay
2. Build duniter with feature `try-runtime`: `cargo build --features try-runtime`
3. Find the hash of the block to replay
4. Choose an RPC endpoint without path (try-runtime not support path)
5. Replay the block a first time to get the state:
```
duniter try-runtime --execution=Native execute-block --block-at 0x2633026e3e428b010cfe08d215b6253843a9fe54db28748ca56de37e6a83c644 live -s tmp/snapshot1 -u ws://localhost:9944
```
6. Then, replay the block as many times as you need against your local snapshot:
```
duniter try-runtime --execution=Native execute-block --block-at 0x2633026e3e428b010cfe08d215b6253843a9fe54db28748ca56de37e6a83c644 --block-ws-uri ws://localhost:9944 snap -s tmp/snapshot1
```
try-runtime does not allow (for now) to store the block locally, only the storage can be stored.
...@@ -35,7 +35,7 @@ Use a terminal shell to execute the following commands: ...@@ -35,7 +35,7 @@ Use a terminal shell to execute the following commands:
```bash ```bash
sudo apt update sudo apt update
# May prompt for location information # May prompt for location information
sudo apt install -y cmake pkg-config libssl-dev git build-essential clang libclang-dev curl sudo apt install -y cmake pkg-config libssl-dev git build-essential clang libclang-dev curl protobuf-compiler
``` ```
### Arch Linux ### Arch Linux
...@@ -79,3 +79,16 @@ rustup update nightly ...@@ -79,3 +79,16 @@ rustup update nightly
rustup update stable rustup update stable
rustup target add wasm32-unknown-unknown --toolchain nightly rustup target add wasm32-unknown-unknown --toolchain nightly
``` ```
### Installing mold linker to decrease build time
Mold (modern linker) (https://github.com/rui314/mold) decreases the build time. Install it through your system package for example then add the following to your `~/.cargo/config`:
```toml
[target.x86_64-unknown-linux-gnu]
linker = "clang"
rustflags = ["-C", "link-arg=-fuse-ld=/usr/bin/mold"]
```
(see https://forum.duniter.org/t/decrease-duniter-build-time/10170 on the forum)
\ No newline at end of file
# Polkadot Upgrade Guide
ParityTech frequently releases upgrades of the polkadot-sdk. For each upgrade, Duniter should be upgraded following the instructions below. These instructions are based on upgrading from version 1.8.0 to 1.9.0.
## 1. Upgrade the duniter-polkadot-sdk
* Clone the repository: `git clone git@github.com:duniter/duniter-polkadot-sdk.git`
* Set the upstream repository: `git remote add upstream git@github.com:paritytech/polkadot-sdk.git`
* Fetch the latest released version: `git fetch --tag polkadot-v1.9.0`
* Create a new branch: `git checkout -b duniter-polkadot-v1.9.0`
* Rebase the branch, keeping only specific commits: "fix treasury benchmarks when no SpendOrigin", "allow manual seal to produce non-empty blocks with BABE", "add custom pallet-balance GenesisConfig", and "remove pallet-balances upgrade_account extrinsic", "remove all paritytech sdk dependencies".
* Push the new branch: `git push`
## 2. Upgrade repository
* In the `Cargo.toml` file of Duniter, change the version number from 1.8.0 to 1.9.0 for all polkadot-sdk dependencies. Also, change the version for Subxt. `find . -type f -name "Cargo.toml" -exec sed -i'' -e 's/polkadot-v1.8.0\/polkadot-v1.9.0/g' {} +`.
* Upgrade the version number of all crateio dependencies to ensure compatibility with those used in the polkadot-sdk, see the node template at: [Node Template](https://github.com/paritytech/polkadot-sdk/blob/master/templates/solochain/node/Cargo.toml) (choose the correct branch/tag).
At this point, two cases may arise:
1. If the upgrade only adds some types and minor changes, add the types in the pallet configuration, replace the offending `WeightInfo`, and delete the corresponding weights files until they can be regenerated.
2. If there are many breaking changes, it is recommended to break down the process:
* Start by correcting errors on individual pallets using `cargo check -p my_pallet` to identify and rectify any errors. Then, test using `cargo test -p my_pallet` and benchmark using `cargo test -p my_pallet --feature runtime-benchmark`.
* After correcting all pallets, fix the runtimes using the same approach: check for trait declarations added or removed in each pallet configuration, and use `cargo check -p runtime`, `cargo test -p runtime`, and `cargo test -p runtime --feature runtime-benchmark`.
* Repeat this process with the node part, the distance-oracle, all the tests, xtask, and the client.
* Conclude the process by executing all benchmarks using the command `scripts/run_all_benchmarks.sh`.
## 4. Troubleshooting
As Duniter may sometimes be the only chain implementing advanced features, such as manual sealing, not many references can be found. However, the following projects may be useful:
* Node template for general up-to-date implementation: [Node Template](https://github.com/paritytech/polkadot-sdk/tree/master/templates)
* Acala: [Acala](https://github.com/AcalaNetwork/Acala), which also uses manual sealing add a similar node implementation.
# Compile the runtime with srtool # Compile the runtime with srtool
```docker When voting for a runtime upgrade, you should check that the proposed hash actually corresponds to the published code you reviewed. Otherwise, a malicious runtime upgrade could be advertised as a legitimate one.
```sh
mkdir runtime/gdev/target
chmod o+w runtime/gdev/target
# Workaround see !239
echo -e "[toolchain]\nchannel = \"1.74.0\"\ncomponents = [ \"rust-std\", \"rust-src\" ]" > runtime/gdev/rust-toolchain.toml
docker run \ docker run \
-i \ -i \
--rm \ --rm \
-e PACKAGE=gdev-runtime \ -e PACKAGE=gdev-runtime \
-e RUNTIME_DIR=runtime/gdev \ -e RUNTIME_DIR=runtime/gdev \
-v $PWD:/build \ -v $PWD:/build \
paritytech/srtool:1.60.0 build --app --json -cM paritytech/srtool:1.74.0-0.13.0 build --app --json -cM
``` ```
Then, the runtime wasm bytecode is generated in this location: Then, the runtime wasm bytecode is generated in this location:
...@@ -17,5 +23,6 @@ runtime/gdev/target/srtool/release/wbuild/gdev-runtime/gdev_runtime.compact.comp ...@@ -17,5 +23,6 @@ runtime/gdev/target/srtool/release/wbuild/gdev-runtime/gdev_runtime.compact.comp
``` ```
To compare it to last official : To compare it to last official :
- download it here : https://git.duniter.org/nodes/rust/duniter-v2s/-/releases - download it here : https://git.duniter.org/nodes/rust/duniter-v2s/-/releases
- compare `sha256sum` of it and of the one you've built - compare `sha256sum` of it and of the one you've built