Contratos de subasta en la red Bitcoin

Diseñamos e implementamos un contrato de subasta seguro en la red Bitcoin. Es abierto y transparente, todos pueden participar y el postor con la oferta más alta una vez finalizada la licitación ganará la licitación. Los postores están sujetos a sus ofertas, mientras que los subastadores están sujetos a los resultados de la subasta.

lograr

// Auction: highest bid before deadline wins
contract Auction {
    
    
    PubKey auctioner;
    int auctionDeadline;

    // bid with a higher offer
    public function bid(Ripemd160 bidder, int bid, SigHashPreimage txPreimage) {
    
    
        require(Tx.checkPreimage(txPreimage));

        int highestBid = Util.value(txPreimage);
        require(bid > highestBid);

        // read previous highest bidder
        bytes lockingScript = Util.scriptCode(txPreimage);
        int scriptLen = len(lockingScript);
        Ripemd160 highestBidder = Ripemd160(lockingScript[scriptLen - Util.PubKeyHashLen : ]);

        // auction continues with a higher bidder
        bytes auctionScript = lockingScript[: scriptLen - Util.PubKeyHashLen] + bidder;
        bytes auctionOutput = Util.buildOutput(auctionScript, bid);

        // refund previous highest bidder
        bytes refundScript = Util.buildPublicKeyHashScript(highestBidder);
        bytes refundOutput = Util.buildOutput(refundScript, highestBid);
        
        require(hash256(auctionScript + refundOutput) == Util.hashOutputs(txPreimage));
    }

    // withdraw after bidding is over
    public function close(Sig sig, SigHashPreimage txPreimage) {
    
    
    		require(Tx.checkPreimage(txPreimage));
    		require(Util.nLocktime(txPreimage) >= this.auctionDeadline);
        require(checkSig(sig, this.auctioner));
	  }
}
  • bid (Licitación) Lógica funcional: si se encuentra una oferta más alta, se actualiza el postor ganador actual y se reembolsa al postor más alto anterior.
  • close (Oferta) Lógica funcional: El subastador puede cerrar la subasta y aceptar la oferta una vez vencida.

Posible extensión

Hay muchas formas de extender este contrato básico. Por ejemplo, si el artículo subastado está marcado y almacenado en un UTXO (como NFT), se puede requerir que una entrada de la transacción Tx sea un UTXO del token, y se transfiere al comprador a través de una salida, de modo que La operación de transacción es atómica. Puede hacer trampa.

Supongo que te gusta

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