对于大学的一个小组项目,我正在寻求帮助,通过延长目前的智能合同“安全的远程购买”。
合同看起来会是这样的:
1.卖方存款1(本为2,但我认为卖方在未收到任何资金的情况下寄出该物品的风险),待售物品1,合同余额现在为1。
2.买方主动提出购买,支付2英镑,其中一半是销售价格,一半是定金。合同余额现在是3。
3.卖方装运物品。
4.买方确认收货,领取1英镑的押金。剩下的合同余额为2,这是寄给卖方的:一份是卖方的押金,一份是销售价格。
现在,我想包含以下两个功能,需要帮助:
->买方存入他的资金,卖方装运该物品。
买方现在有一年的时间确认收到的项目。如果他在一年内无法确认,则应将已存入的资金送到一个死地址。
第二个功能:如果买家没有确认,是否有在一年后自动将资金发送到死地址的功能?
提前感谢!
发布于 2022-11-11 15:22:11
在这里,代码:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.11;
contract PurchaseAgreement {
uint public value;
address payable public seller;
address payable public buyer;
enum State { Created, Locked, Release, Inactive }
State public state;
constructor() payable {
seller = payable(msg.sender);
value = msg.value / 2;
}
/// The function cannot be called at the current state.
error InvalidState();
/// Ony the buyer can call this function
error OnlyBuyer();
/// Ony the seller can call this function
error OnlySeller();
modifier inState(State state_) {
if (state != state_) {
revert InvalidState();
}
_;
}
modifier onlyBuyer() {
if (msg.sender != buyer) {
revert OnlyBuyer();
}
_;
}
modifier onlySeller() {
if (msg.sender != seller) {
revert OnlySeller();
}
_;
}
function confirmPurchase() external inState(State.Created) payable {
require(msg.value == (2 * value), "Please send in 2x the purchase amount");
buyer = payable(msg.sender);
state = State.Locked;
}
function confirmReceived() external onlyBuyer inState(State.Locked) {
state = State.Release;
buyer.transfer(value);
}
function paySeller() external onlySeller inState(State.Release) {
state = State.Inactive;
seller.transfer(3 * value);
}
function abort() external onlySeller inState(State.Created) {
state = State.Inactive;
seller.transfer(address(this).balance);
}
}https://ethereum.stackexchange.com/questions/139219
复制相似问题