
现在,让我们将所学的内容整合成一份完整的智能合同。
在本例中,你将使用 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。 然后编译并部署该合同。 虽然该合同包含用于购买在售商品的函数,但你会注意到,无法提供替换货币来购买商品。 如果想挑战更高难度,可以使用所学知识编写一个函数,为买方提供余额,提供帐户地址和帐户余额。