Eigen Trust
A library for managing trust in a distributed network with zero-knowledge
features.
Main characteristics:
Self-policing - the shared ethics of the user population is defined and
enforced by the peers themselves and not by some central authority.
Minimal - computation, infrastructure, storage, and message complexity
are reduced to a minimum.
Incorruptible - Reputation should be obtained by consistent good
behavior through several transactions. This is enforced for all users, so no
one can cheat the system and obtain a higher reputation. It is also
resistant to malicious collectives.
Usage:
use eigen_trust::{EigenError, Keypair, LevelFilter, Multiaddr, Node, NodeConfig, PeerId};
use std::str::FromStr;
const BOOTSTRAP_PEERS: [(&str, &str, f64); 2] = [
(
"/ip4/127.0.0.1/tcp/58584",
"12D3KooWLyTCx9j2FMcsHe81RMoDfhXbdyyFgNGQMdcrnhShTvQh",
0.5,
),
(
"/ip4/127.0.0.1/tcp/58601",
"12D3KooWKBKXsLwbmVBySEmbKayJzfWp3tPCKrnDCsmNy9prwjvy",
0.5,
),
];
const DEFAULT_ADDRESS: &str = "/ip4/0.0.0.0/tcp/0";
struct Config;
impl NodeConfig for Config {
const INTERVAL: u64 = 2;
const NUM_CONNECTIONS: usize = 12;
const PRE_TRUST_WEIGHT: f64 = 0.2;
}
#[tokio::main]
async fn main() -> Result<(), EigenError> {
let local_key = Keypair::generate_ed25519();
let local_address =
Multiaddr::from_str(DEFAULT_ADDRESS).map_err(|_| EigenError::InvalidAddress)?;
let mut bootstrap_nodes = Vec::new();
for info in BOOTSTRAP_PEERS.iter() {
let peer_addr = Multiaddr::from_str(info.0).map_err(|_| EigenError::InvalidAddress)?;
let peer_id = PeerId::from_str(info.1).map_err(|_| EigenError::InvalidPeerId)?;
bootstrap_nodes.push((peer_id, peer_addr, info.2));
}
let node = Node::<Config>::new(local_key, local_address, bootstrap_nodes)?;
node.main_loop(Some(1)).await?;
Ok(())
}
Implementation
The library is implemented according to the original Eigen Trust paper.
It is developed under the Ethereum Foundation grant.