首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >安全可靠的远程采购

安全可靠的远程采购
EN

Ethereum用户
提问于 2022-11-11 14:54:25
回答 1查看 58关注 0票数 0

对于大学的一个小组项目,我正在寻求帮助,通过延长目前的智能合同“安全的远程购买”。

合同看起来会是这样的:

1.卖方存款1(本为2,但我认为卖方在未收到任何资金的情况下寄出该物品的风险),待售物品1,合同余额现在为1。

2.买方主动提出购买,支付2英镑,其中一半是销售价格,一半是定金。合同余额现在是3。

3.卖方装运物品。

4.买方确认收货,领取1英镑的押金。剩下的合同余额为2,这是寄给卖方的:一份是卖方的押金,一份是销售价格。

现在,我想包含以下两个功能,需要帮助:

第一函数-时间函数:

  • 卖方存入资金后,应当有一个时间函数,即买方有2天的时间存款。

->买方存入他的资金,卖方装运该物品。

买方现在有一年的时间确认收到的项目。如果他在一年内无法确认,则应将已存入的资金送到一个死地址。

第二个功能:如果买家没有确认,是否有在一年后自动将资金发送到死地址的功能?

提前感谢!

EN

回答 1

Ethereum用户

发布于 2022-11-11 15:22:11

在这里,代码:

代码语言:javascript
复制
// 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);
}


}
票数 0
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/139219

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档