I was reading this contract https://docs.soliditylang.org/en/develop/solidity-by-example.html#safe-remote-purchase that I found in the solidity documentation and I assume this contract is unique and deployed by the auction house. All users can make an offer. From an implementation point of view, how does a user in web3.js call the methods of this contract if he didn't deploy it?
1 Answer
By reading at the contract, there are essentially two roles:
> Seller: this is assigned inside the constructor, meaning that only the person who deployed this contract becomes a seller:
constructor() payable {
seller = payable(msg.sender); // Contract creator becomes seller
value = msg.value / 2;
require((2 * value) == msg.value, "Value has to be even.");
}
> Buyer: it can be anyone who performs a purchase, as described in the function below:
function confirmPurchase()
public
inState(State.Created)
condition(msg.value == (2 * value))
payable
{
emit PurchaseConfirmed();
buyer = payable(msg.sender); // Anyone -successfully- calling this function becomes buyer
state = State.Locked;
}
Once the roles are assigned, there are other functions within the contract that can be called only by the seller or buyer depending on the function modifiers (onlyBuyer
, onlySeller
).
-
-
Anyone can call this function as long as the bidding process has ended (onlyAfter(biddingEnd)) and during the reveal period (onlyBefore(revealEnd)). This is a commit-reveal scheme. Commented Feb 7, 2021 at 8:31
-
but is it possible to build a mechanism to call this method automatically at the end of the auction period?– EMANUELCommented Feb 7, 2021 at 8:55
-
1Not from the smart contract directly, but you can call that method externally. If you know the end date in advance, you can have a process to call that function right at the end of the auction, or you can have a process to call the method every N minutes or hours. In essence, you need to manage that externally, but there are many different ways. Commented Feb 7, 2021 at 9:08
-
thanks I meant just that. The only way I have found is to use an alarm but I am not convinced. I am working with ethereum and web3.js for the first time so I don't have much knowledge. Could you recommend me a way to do this process automatically please?– EMANUELCommented Feb 7, 2021 at 9:17