Lanzamiento de moneda justo en la red Bitcoin

Podemos implementar un juego de lanzamiento de moneda justo que no requiera un tercero basado en el método Bit Commitment en la red Bitcoin.
toss_bitcoin

Supongamos que Alice y Bob deciden lanzar una moneda, pero no tienen una moneda física o quieren hacerlo a través de Internet. Siguiendo el protocolo de Bitcoin a continuación, pueden lograr un lanzamiento de moneda justo.

  1. Alice y Bob bloquean cada uno x bitcoins en el contrato inteligente como se muestra a continuación (nota: no revelaron sus números secretos en este momento);
  2. En la nueva transacción, envíe sus respectivos números secretos al mismo tiempo y luego realice una operación OR exclusiva en los dos números secretos para determinar si la moneda es cara o cruz. Si sale cara, gana Alice; de ​​lo contrario, gana Bob. El ganador recibirá todos los 2x Bitcoins.
contract CoinToss {
    
    
    Ripemd160 alice;
    Ripemd160 bob;
    // commitments
    Sha256 aliceHash;
    Sha256 bobHash;

    public function toss(bytes aliceNonce, bytes bobNonce, int amount, SigHashPreimage txPreimage) {
    
    
        require(Tx.checkPreimage(txPreimage));

        require(hash256(aliceNonce) == this.aliceHash);
        require(hash256(bobNonce) == this.bobHash);
        
        // last bit of XOR
        bytes head = (aliceNonce ^ bobNonce) & b'0000000000000000000000000000000000000000000000000000000000000001';

        // head -> Alice wins; tail -> Bob wins
        Ripemd160 winner = head ? this.alice : this.bob;

        // winner takes all
        bytes winnerScript = Util.buildPublicKeyHashScript(winner);
        bytes winnerOutput = Util.buildOutput(winnerScript, amount);
        require(hash256(winnerOutput) == Util.hashOutputs(txPreimage));
    }
}

Consideraciones prácticas

Si una de las partes se niega a revelar sus números secretos cuando descubre que han fallado, es posible que deban tomarse otras medidas para mejorar. Por ejemplo, puede permitir que el perdedor recupere la mitad del bitcoin que invirtió en lugar de permitir que el ganador se lo lleve todo, lo que también puede alentar al perdedor a enviar su número secreto.

Supongo que te gusta

Origin blog.csdn.net/freedomhero/article/details/114257034
Recomendado
Clasificación