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.