Skip to content

Commit

Permalink
Merge pull request #363 from JBA-Khalifa/evm-bridge
Browse files Browse the repository at this point in the history
Runtimes, Governance, Democracy and Evm bridge
  • Loading branch information
balqaasem authored Jul 10, 2021
2 parents 297e6c0 + a4c0e78 commit 9660544
Show file tree
Hide file tree
Showing 70 changed files with 7,710 additions and 1,711 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ Setheum's Blockchain Network node Implementation in Rust, Substrate FRAME and Se

<div align="center">

[![Setheum version](https://img.shields.io/badge/Setheum-0.7.1-brightgreen?logo=Parity%20Substrate)](https://setheum.xyz/)
[![Setheum version](https://img.shields.io/badge/Setheum-0.8.0-brightgreen?logo=Parity%20Substrate)](https://setheum.xyz/)
[![Substrate version](https://img.shields.io/badge/Substrate-3.0.0-brightgreen?logo=Parity%20Substrate)](https://substrate.dev/)
[![License](https://img.shields.io/github/license/Setheum-Labs/Setheum?color=green)](https://github.com/Setheum-Labs/Setheum/blob/master/LICENSE)
<br />
Expand Down
2 changes: 1 addition & 1 deletion inspect/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "setheum-inspect"
version = "0.7.1"
version = "0.8.0"
authors = ["Setheum Labs"]
edition = "2018"

Expand Down
8 changes: 4 additions & 4 deletions lib-serml/bridges/renvm-bridge/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -288,9 +288,9 @@ impl<T: Config> Pallet<T> {
n_hash,
&ren_btc_identifier,
));
let recoverd =
let recovered =
secp256k1_ecdsa_recover(&sig, &signed_message_hash).map_err(|_| Error::<T>::InvalidMintSignature)?;
let addr = &keccak_256(&recoverd)[12..];
let addr = &keccak_256(&recovered)[12..];

let pubkey = RenVmPublicKey::<T>::get().ok_or(Error::<T>::InvalidRenVmPublicKey)?;
ensure!(addr == pubkey, Error::<T>::InvalidMintSignature);
Expand All @@ -309,9 +309,9 @@ impl<T: Config> Pallet<T> {
// Verify that the signature has been signed by RenVM.
fn verify_rotate_key_signature(new_key: &PublicKey, sig: &[u8; 65]) -> DispatchResult {
let signed_message_hash = keccak_256(&Self::signable_rotate_key_message(new_key));
let recoverd =
let recovered =
secp256k1_ecdsa_recover(&sig, &signed_message_hash).map_err(|_| Error::<T>::InvalidMintSignature)?;
let addr = &keccak_256(&recoverd)[12..];
let addr = &keccak_256(&recovered)[12..];

let pubkey = RenVmPublicKey::<T>::get().ok_or(Error::<T>::InvalidRenVmPublicKey)?;
ensure!(addr == pubkey, Error::<T>::InvalidMintSignature);
Expand Down
63 changes: 63 additions & 0 deletions lib-serml/democracy/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
[package]
name = "setheum-democracy"
version = "0.8.0"
authors = ["Setheum Labs"]
edition = "2018"

[package.metadata.docs.rs]
targets = ["x86_64-unknown-linux-gnu"]

[dependencies]
# external dependencies
serde = { version = "1.0.101", optional = true, features = ["derive"] }
codec = { package = "parity-scale-codec", version = "2.0.0", default-features = false, features = ["derive"] }

# Substrate dependencies
sp-std = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.4", default-features = false }
sp-io = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.4", default-features = false }
sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.4", default-features = false }
frame-benchmarking = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.4", default-features = false }
frame-support = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.4", default-features = false }
frame-system = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.4", default-features = false }

# orml dependencies
orml-traits = { path = "../../lib-openrml/traits", default-features = false }
orml-utilities = { path = "../../lib-openrml/utilities", default-features = false }

# local dependencies
primitives = { package = "setheum-primitives", path = "../../primitives", default-features = false }
support = { package = "setheum-support", path = "../support", default-features = false }

[dev-dependencies]
orml-tokens = { path = "../../lib-openrml/tokens" }
sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.4" }
pallet-balances = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.4" }
pallet-scheduler = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.4" }
pallet-democracy = { version = "3.0.0", git = "https://github.com/paritytech//substrate", branch = "polkadot-v0.9.4" }
sp-storage = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.4" }
substrate-test-utils = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.4" }
hex-literal = "0.3.1"

[features]
default = ["std"]
std = [
"serde",
"codec/std",
"sp-std/std",
"sp-io/std",
"frame-benchmarking/std",
"frame-support/std",
"sp-runtime/std",
"frame-system/std",
"orml-traits/std",
"orml-utilities/std",
"support/std",
"primitives/std",
]
runtime-benchmarks = [
"frame-benchmarking",
"frame-system/runtime-benchmarks",
"frame-support/runtime-benchmarks",
"sp-runtime/runtime-benchmarks",
]
try-runtime = ["frame-support/try-runtime"]
139 changes: 139 additions & 0 deletions lib-serml/democracy/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,139 @@
# Setheum Democracy Pallet

## Overview

In Setheum Democracy, it is a multi-currency democracy where a participant can
lock not just one type of currency but a multiple.
This provides multiple governance tokens not just one.
Supports MultiCurrency Governance Model. In Setheum, it is three
(DNAR, SETT and DRAM in SetheumNetwork / NEOM, NSETT and MENA in NeomNetwork).
But only the native currency if allowed for voting while the others are allowed for proposing referendum..

The Democracy pallet handles the administration of general stakeholder voting. It is based on the [FRAME Democracy Pallet](https://github.com/paritytech/substrate/frame/democracy).

## FRAME Democracy Pallet Overview

There are two different queues that a proposal can be added to before it
becomes a referendum, 1) the proposal queue consisting of all public proposals
and 2) the external queue consisting of a single proposal that originates
from one of the _external_ origins (such as a collective group).

Every launch period - a length defined in the runtime - the Democracy pallet
launches a referendum from a proposal that it takes from either the proposal
queue or the external queue in turn. Any token holder in the system can vote
on referenda. The voting system
uses time-lock voting by allowing the token holder to set their _conviction_
behind a vote. The conviction will dictate the length of time the tokens
will be locked, as well as the multiplier that scales the vote power.

### Terminology

- **Enactment Period:** The minimum period of locking and the period between a proposal being
approved and enacted.
- **Lock Period:** A period of time after proposal enactment that the tokens of _winning_ voters
will be locked.
- **Conviction:** An indication of a voter's strength of belief in their vote. An increase
of one in conviction indicates that a token holder is willing to lock their tokens for twice
as many lock periods after enactment.
- **Vote:** A value that can either be in approval ("Aye") or rejection ("Nay")
of a particular referendum.
- **Proposal:** A submission to the chain that represents an action that a proposer (either an
account or an external origin) suggests that the system adopt.
- **Referendum:** A proposal that is in the process of being voted on for
either acceptance or rejection as a change to the system.
- **Delegation:** The act of granting your voting power to the decisions of another account for
up to a certain conviction.

### Adaptive Quorum Biasing

A _referendum_ can be either simple majority-carries in which 50%+1 of the
votes decide the outcome or _adaptive quorum biased_. Adaptive quorum biasing
makes the threshold for passing or rejecting a referendum higher or lower
depending on how the referendum was originally proposed. There are two types of
adaptive quorum biasing: 1) _positive turnout bias_ makes a referendum
require a super-majority to pass that decreases as turnout increases and
2) _negative turnout bias_ makes a referendum require a super-majority to
reject that decreases as turnout increases. Another way to think about the
quorum biasing is that _positive bias_ referendums will be rejected by
default and _negative bias_ referendums get passed by default.

## Interface

### Dispatchable Functions

#### Public

These calls can be made from any externally held account capable of creating
a signed extrinsic.

Basic actions:
- `propose` - Submits a sensitive action, represented as a hash. Requires a deposit.
- `second` - Signals agreement with a proposal, moves it higher on the proposal queue, and
requires a matching deposit to the original.
- `vote` - Votes in a referendum, either the vote is "Aye" to enact the proposal or "Nay" to
keep the status quo.
- `unvote` - Cancel a previous vote, this must be done by the voter before the vote ends.
- `delegate` - Delegates the voting power (tokens * conviction) to another account.
- `undelegate` - Stops the delegation of voting power to another account.

Administration actions that can be done to any account:
- `reap_vote` - Remove some account's expired votes.
- `unlock` - Redetermine the account's balance lock, potentially making tokens available.

Preimage actions:
- `note_preimage` - Registers the preimage for an upcoming proposal, requires
a deposit that is returned once the proposal is enacted.
- `note_preimage_operational` - same but provided by `T::OperationalPreimageOrigin`.
- `note_imminent_preimage` - Registers the preimage for an upcoming proposal.
Does not require a deposit, but the proposal must be in the dispatch queue.
- `note_imminent_preimage_operational` - same but provided by `T::OperationalPreimageOrigin`.
- `reap_preimage` - Removes the preimage for an expired proposal. Will only
work under the condition that it's the same account that noted it and
after the voting period, OR it's a different account after the enactment period.

#### Cancellation Origin

This call can only be made by the `CancellationOrigin`.

- `emergency_cancel` - Schedules an emergency cancellation of a referendum.
Can only happen once to a specific referendum.

#### ExternalOrigin

This call can only be made by the `ExternalOrigin`.

- `external_propose` - Schedules a proposal to become a referendum once it is is legal
for an externally proposed referendum.

#### External Majority Origin

This call can only be made by the `ExternalMajorityOrigin`.

- `external_propose_majority` - Schedules a proposal to become a majority-carries
referendum once it is legal for an externally proposed referendum.

#### External Default Origin

This call can only be made by the `ExternalDefaultOrigin`.

- `external_propose_default` - Schedules a proposal to become a negative-turnout-bias
referendum once it is legal for an externally proposed referendum.

#### Fast Track Origin

This call can only be made by the `FastTrackOrigin`.

- `fast_track` - Schedules the current externally proposed proposal that
is "majority-carries" to become a referendum immediately.

#### Veto Origin

This call can only be made by the `VetoOrigin`.

- `veto_external` - Vetoes and blacklists the external proposal hash.

#### Root

- `cancel_referendum` - Removes a referendum.
- `cancel_queued` - Cancels a proposal that is queued for enactment.
- `clear_public_proposal` - Removes all public proposals.
Loading

0 comments on commit 9660544

Please sign in to comment.