Digamos que tengo una aplicación descentralizada que permite a las personas comprar algún objeto a un precio arbitrario.
El usuario 1 compra el objeto por 1 eth. Unos momentos después, el usuario 2 compra el mismo artículo. ¿Cómo puedo monitorear este evento y devolver automáticamente la cantidad apropiada de etherium al usuario 2? Esto es lo que tengo hasta ahora:
contract Adoption {
address[16] public adopters;
function returnEth() public payable {
msg.sender.transfer(msg.value);
}
// Adopting a pet
function adopt(uint petId) public payable returns (uint) {
require(petId >= 0 && petId <= 15);
//require(msg.value == 1 ether);
adopters[petId] = msg.sender;
returnEth();
return petId;
//return value;
}
// Retrieving the adopters
function getAdopters() public view returns (address[16]) {
return adopters;
}
}
Leyendo entre líneas, creo que está diciendo que el usuario 2 no debería poder comprar el artículo que el usuario 1 ya compró.
Si ese es el caso, entonces la llamada que hizo el usuario 2 para comprar el artículo debería fallar. No ha compartido la función que se utiliza para realizar una compra, pero debería revertir la transacción si el artículo ya se vendió.
<address>.transfer(<amount>)
soloreturnEth();
. Si su pregunta es "¿Cómo llamo a una función desde web3.js?" eso no parece relacionado. Hágalo como una nueva pregunta, pero primero, lea un tutorial, tal vez incluso el mío: programtheblockchain.com/posts/2017/12/13/… . (Sin embargo, creo que tal vez estés usando Truffle. Si es así, mira un tutorial para eso).returnEth()
nunca debería reducir la cantidad de éter en la cuenta de la persona que llama. Incluso si transfer
falla, la transacción se revertirá, por lo que no se moverá el éter.adopt
esas llamadas returnEth
).adopt()
, termino con >99.99999999 ether después de la llamada.
usuario19510