pragma solidity ^0.4.25; contract Assemblee { string nomAssemble; //besoin d'un superuser pour ajouter des administrateurs address SuperUser; constructor(string memory nom ,address originatore) public { nomAssemble=nom ; // l'addrese du superuser est creer au debut SuperUser=originatore; } address[] participants; //mapping pour les blames mapping (address => uint) Blames; address[] Administrateurs ; string[] descriVotes; struct Decision{ string description; uint votePour; uint voteContre; uint Datelimite ; mapping(address=>bool) Avote; } Decision[] Decisions; function rejoindre() public { participants.push(msg.sender); } // contrôle participants function estParticipant(address par) public view returns (bool) { for (uint i=0; i<participants.length; i++) { if (participants[i]==par){ return true; } } return false; } function estAdmin(address par) public view returns (bool) { require(estParticipant(par)); for (uint i=0; i<Administrateurs.length; i++) { if (Administrateurs[i]==par){ return true; } } return false; } //proposition d'une decision avec la date limite function proposerUneDecision(string memory description,uint datel) public { require(estParticipant(msg.sender), "il faut etre participant d'abord poour prposer"); Decision memory decision; decision.description=description; decision.voteContre=0; decision.votePour=0; decision.Datelimite=datel; Decisions.push(decision); } //fonctions utilitaires pour recuperer les index et supprimer des elements d'un tableau function getIndex(address Id,address[]Array) public pure returns(uint){ for (uint i = 0; i<Array.length-1; i++){ Array[i] = Id; return(i); } } function removeFromArray(uint ind, address[]Array) public pure { for (uint i = ind ; i<Array.length-1; i++){ Array[i] = Array[i+1]; } delete Array[Array.length-1]; } //suppression d'une decision function supprimeDecision(uint ind) public{ require(estAdmin(msg.sender)); delete (Decisions[ind]) ; } // vote et contrôle des doubles votes et delai function voter(uint v,uint sens)public { address _votant=msg.sender; require(estParticipant(_votant),"il faut etre participant pour voter"); require((Decisions[v].Avote[_votant]==false),"vous avez dejà voté"); require(((now - Decisions[v].Datelimite)<604800),"delai de vote dejà expiré"); if (sens==1) { Decisions[v]. votePour+=1; }else { Decisions[v].voteContre+=1; } } //getter des votes function getVotesPour(uint ind) public constant returns (uint){ return Decisions[ind].votePour; } function getVotesContre(uint ind) public constant returns (uint) { return Decisions[ind].voteContre; } function getdifference(uint ind) public constant returns(int){ return int(getVotesPour(ind)-getVotesContre(ind)); } // administrateurs mapping(address => string) Noms; // ajout d'administrateur par super user (big brother) function AjouterAdmin (address Id) public { require( msg.sender==SuperUser); Administrateurs.push(Id); } //proposer un admin c'est proposer son nom en description de la decision function proposerunAdmin (address Id , uint datel) public{ proposerUneDecision(Noms[Id],datel); } // blammer un membre c'est incrementer le nombre de Blames // seuls les admins peuvent blammer (pas tres democrates) function BlammerUnMembre(address Id) public { require(estAdmin(msg.sender)); Blames[Id]+=1; } // deux Blames et prends la porte!! function SupprimerUnmembre(address Id) public view { require(estAdmin(msg.sender)); require(Blames[Id]==2); removeFromArray(getIndex(Id,participants),participants); } }
0.4.25