solidity优秀代码案例 (solidity开发)

solidity文档,拟定一份合同模板

现在,让我们将所学的内容整合成一份完整的智能合同。

在本例中,你将使用 Solidity 为简单的在线市场创建一个智能合同。 该合同将允许用户列出待售商品,并购买在售商品。 涉及两个角色:卖方和买方。

简单的市场示例

Solidity复制

pragma solidity >0.7.0 <0.8.0;

contract Marketplace {
    address public seller;
    address public buyer;
    mapping (address => uint) public balances;

    event ListItem(address seller, uint price);
    event PurchasedItem(address seller, address buyer, uint price);

    enum StateType {
          ItemAvailable,
          ItemPurchased
    }

    StateType public State;

    constructor() public {
        seller = msg.sender;
        State = StateType.ItemAvailable;
    }

    function buy(address seller, address buyer, uint price) public payable {
        require(price <= balances[buyer], "Insufficient balance");
        State = StateType.ItemPurchased;
        balances[buyer] -= price;
        balances[seller] += price;

        emit PurchasedItem(seller, buyer, msg.value);
    }
}    

让我们深入了解这份智能合同的主要组成部分:

  • 分别是:三个状态变量:buyer、seller 和 balances两个事件:ListItem 和 PurchasedItem一个具有两个值的枚举:ItemAvailable 和 ItemPurchased
  • 构造函数将卖方用户指定为 msg.sender,并将初始状态设置为 ItemAvailable。 创建合同时,将调用此构造函数。
  • buy 函数有三个参数:sellerbuyer 和 price。 这要求买方有足够的购买能力。 然后,它将资金从买方转移到卖方,并最终发出一条消息。

后续步骤

请前往 Remix IDE 了解 Solidity 中更多的智能合同示例。 Remix 是一个浏览器内的 IDE,使你可以立即开始使用,而不必创建帐户或登录。 你可以立即编写、测试、编译和部署合同。

将此智能合同复制并粘贴到名为 Marketplace.sol 的新文件中的 Remix。 然后编译并部署该合同。 虽然该合同包含用于购买在售商品的函数,但你会注意到,无法提供替换货币来购买商品。 如果想挑战更高难度,可以使用所学知识编写一个函数,为买方提供余额,提供帐户地址和帐户余额。