La blockchain aurait pu empêcher la débâcle du caucus de l'Iowa – AIER

Les démocrates de l'Iowa auraient pu simplement transférer une somme prédéterminée de Bitcoin pour signaler quel candidat a reçu les délégués de leur circonscription. S'ils l'avaient fait, le grand livre public de la blockchain aurait transmis les informations nécessaires de manière transparente et facilement vérifiable. Et parce que la DNC ne ferait qu’envoyer du Bitcoin, le processus n’aurait pas coûté grand-chose.

Par exemple, les Dems auraient pu convenir qu'une victoire pour X dans une zone impliquerait l'envoi de Y mBTC (.001 d'un Bitcoin).

Dire:

Biden 1 mBTC
Buttigieg 2 mBTC
Klobuchar 3 mBTC
Sanders 4 mBTC
Warren 5 mBTC

Et ainsi de suite. (Et Bloomberg peut acheter son propre Bitcoin.)

Cette année, les Dems promettent également de déclarer le nombre de votes bruts des premier et deuxième tours d'alignement. Personne ne semble s'en soucier, peut-être à cause du rapport du snafu par le délégué, mais ils pourraient signaler ces chiffres de la même manière en ajoutant des satoshi (millionièmes de Bitcoin) au mBTC attribué par le candidat.

Sachant que les politiciens ne pourraient jamais faire quelque chose d'aussi simple et transparent, le jeune prodige qui m'a parlé du système simple décrit ci-dessus, mon fils Alexandre de 19 ans, a rédigé environ 60 lignes de code Solidity (le plus populaire des mots magiques et des gribouillis qui exécutent Ethereum) qui auraient atteint le même résultat et lui auraient valu, à lui ou à un autre programmeur, des frais qui, sachant ce qui s'est passé lundi, ressembleraient à un bargoooon aujourd'hui.

Cela n'a pas été testé, donc ça pourrait être un petit buggy, mais ce n'est pas du rocket. Cela ressemble à de la fusée:

pragma solidity >=0.5.0 <0.6.0;
import "./ownable.sol";

contract PrecinctVoting is Ownable{
   
    event precinctCandidateReport(uint16 precinctId, uint8 candidateId);
    event precinctAdded(uint16 precinctId);
    event precinctRemoved(uint16 precinctId);
    event precinctValidated(uint16 precinctId);
   
    event candidateAdded(uint8 candidateId);
    event candidateRemoved(uint8 candidateId);
    event candidateValidated(uint8 candidateId);
   
    struct Precinct{
        string name;
        uint16 voteId;
        bool invalid;
    }
   
    struct Candidate{
        string name;
        uint16 votes;
        bool invalid;
    }
   
    Precinct() public precincts;
    Candidate() public candidates;
   
    uint8() public candidateReporting;
   
    mapping (uint16 => address) precinctToOwner;
   
    function createPrecinct(string memory name, address owner) public onlyOwner{
        uint16 id = uint16(precincts.push(Precinct(name, 0, false)) - 1);
        precinctToOwner(id) = owner;
        emit precinctAdded(id);
    }
    function createCandidate(string memory name) public onlyOwner{
        uint8 id = uint8(candidates.push(Candidate(name,0,false)) - 1);
        emit candidateAdded(id);
    }
    function removePrecinct(uint16 id) public onlyOwner{
        precincts(id).invalid = true;
        emit precinctRemoved(id);
    }
    function removeCandidate(uint8 id) public onlyOwner{
        candidates(id).invalid = true;
        emit candidateRemoved(id);
    }
    function validatePrecinct(uint16 id) public onlyOwner{
        if(precincts(id).voteId > 0){
            candidates(candidateReporting(precincts(id).voteId)).votes --;
        }
        precincts(id).invalid = false;
        emit precinctValidated(id);
    }
    function validateCandidate(uint8 id) public onlyOwner{
        candidates(id).invalid = false;
        emit candidateValidated(id);
    }
    function precinctReport(uint16 precinctId, uint8 candidateId) public{
        require(precinctToOwner(precinctId) == msg.sender);
        require(precincts(precinctId).invalid == false);
        require(candidates(candidateId).invalid == false);
        precincts(precinctId).voteId = uint16(candidateReporting.push(candidateId));
        candidates(candidateId).votes ++;
        precincts(precinctId).invalid = true;
        emit precinctCandidateReport(precinctId, candidateId);
    }
    function viewResults(uint id) external view returns(uint8){
        return(candidateReporting(precincts(id).voteId));
    }
}

Il m'a dit qu'il aurait pu écrire le programme en moins de lignes, mais qu'il n'en avait pas eu le temps. (En fait, l'incitation à.)

Aux États-Unis, environ 3,5 millions de personnes travaillent en tant que développeurs de logiciels, dont environ 30 000 dans l'Iowa seulement. Pas tout le code dans Solidity ou d'autres langages de blockchain mais ce truc est loin d'être ésotérique à ce stade.

Alors pourquoi le snafu?

J'ai été frappé par une ligne dans une récente critique d'un livre d'histoire écrit par quelqu'un régulièrement considéré comme un historien majeur. Comme l'a souligné le critique, le livre en question est truffé d'erreurs factuelles fondamentales, y compris l'affirmation selon laquelle la Virginie était un État FRONTIÈRE pendant la guerre civile (c'est-à-dire un État esclave qui est resté dans l'Union!), Et une longue liste d'autres rires. Et ne me lancez pas sur l’état d’origine des vainqueurs du Super Bowl de cette année. Allez les gens, je sais que c'est un pays de survol mais vous n'avez sérieusement jamais entendu parler de KCMO (Kay See Moe)? Que pensez-vous que le MO représente? Plus?

Quoi qu'il en soit, la ligne est: « Ceux qui revendiquent le droit de diriger la société ne sont pas aussi bien informés ou aussi qualifiés qu'ils le supposent. »

Le monde est un grand endroit effrayant et complexe, trop complexe pour que chacun d'entre nous puisse le saisir, et encore moins le contrôler. C'est pourquoi personne ne devrait présumer pouvoir le contrôler et tous les candidats des deux partis, avec un laissez-passer partiel pour Bill Weld, méritent les résultats du caucus initialement rapportés:

Vous pourriez également aimer...