为Loom的BaseChain创建和部署智能合约

我们将创建的智能合约是针对使用Game Engine Unity创建的小型单人原型游戏,玩家可以在其中收集代币。这些代币实际上是免费创建并保存在Loom区块链上的

完成智能合约

一步步

让我们逐步创建此原型游戏智能合约。

推荐阅读
1的1,616

首先,让我们创建通用智能合约

实用性> = 0.5.0 <0.6.0; contract CoinCollector {}

注意,我们定义了编译器版本的范围。它必须在版本5.0和6.0之间。推荐这样做是因为较低的版本可能包含安全问题,而较高的版本可能会破坏合约代码。我们的合约称为CoinCollector。

让我们包括一个获胜条件,即玩家赢得游戏所需收集的代币数量。

实用性> = 0.5.0 <0.6.0; contract CoinCollector {
uint256 private winCondition;

构造函数(uint256 _winCondition)public {
winCondition = _winCondition;
}

}

注意,我们创建了一个全局变量“ winCondition”,其类型为uint256(正自然数)。此外,我们包括了构造函数。一旦部署了智能合约,构造函数就是一个特殊功能。在这里,我们在参数中定义实际的获胜条件。让我们开始吧。10.为了更好的概述,让参数始终以下划线开头,以便你可以区分参数和全局变量。

让我们包括我们的功能。

实用性> = 0.5.0 <0.6.0; contract CoinCollector {
uint256 private winCondition;
映射(address => uint256)private coinCount;

构造函数(uint256 _winCondition)public {
winCondition = _winCondition;
}

函数startGame()外部{
coinCount(msg.sender)= 0;
}函数collectCoin()外部{
coinCount(msg.sender)+ = 1;
}函数getCoinCount()外部视图返回(uint256){
返回coinCount(msg.sender);
}}

注意,除了构造函数之外,我们现在还创建了三个函数。我们希望能够开始游戏,收集代币并始终接收已经收集了多少代币的信息。我们为每个函数提供了可见性修饰符。可能的修饰符是public,private,internal和external。

  • 任何人都可以调用公共功能
  • 私有意味着该函数只能在合约内部调用
  • 内部允许从父合约继承的合约使用该功能
  • 外部功能是合约接口的一部分,这意味着可以从其他合约或通过交易调用它们

也就是说,除非需要进行外部交互,否则请将函数设为私有或内部。此外,我们的getCoinCount函数具有“ view”关键字,该关键字是可选的,但指定我们不更改此函数内的任何存储变量。我们仅“查看”某些数据,例如我们的代币。 🙂

为了跟踪收集了多少代币,我们添加了映射coinCount。游戏开始时,将重置玩家的值,并且在玩游戏时,每个代币收集将使该值增加1。我们的映射将使用一个地址(当前玩家)并将其“指向”该值,即所收集代币的计数。因此,我们能够在coinCount中保存每个玩家的当前状态。

让我们添加最后的代码段:事件。活动对我们的客户而言最重要。它使你能够注意到发生了什么。例如,我们想知道玩家何时开始并赢得比赛,或何时收集代币。

实用性> = 0.5.0 <0.6.0; contract CoinCollector {
uint256 private winCondition;
映射(address => uint256)private coinCount;事件onStartGame(address _player);
事件onCoinCollected(address _player,uint256 _coinCount);
事件onEndGame(address _player);

构造函数(uint256 _winCondition)public {
winCondition = _winCondition;
}

函数startGame()外部{
coinCount(msg.sender)= 0;
发出onStartGame(msg.sender);
}函数collectCoin()外部{
coinCount(msg.sender)+ = 1;
发射onCoinCollected(msg.sender,coinCount(msg.sender));

如果(coinCount(msg.sender)== winCondition){
发出onEndGame(msg.sender);
}

}函数getCoinCount()外部视图返回(uint256){
返回coinCount(msg.sender);
}}

请注意,我们在存储变量所在的顶部添加了可能的事件。每个事件定义了所需的信息。在我们的collectCoin函数中,我们添加了一个if语句,以始终检查仅收集代币的玩家是否满足获胜条件。如果是这样,将发出结束游戏事件,并且客户端会注意到该事件。每次我们在代码中引用“ msg.sender”时,它都指向传入交易的地址,即播放器。

做得好。基本合约完成。随意玩耍并添加其他功能,例如可以收集收集的全部代币,收集不同的代币类型,或者集成机制以使其成为多人游戏。有创造力

官方电报群加入我们的官方电报群,新闻实时推送,与大神一起互动火速入群
Ledger超安全的加密货币硬件钱包Ledger Nano X,支持多币种,全球包邮,官网直购立即抢购
火币网世界一流的数字货币交易所,支持银行卡,支付宝与微信,提现有保障 ! 免代理直连即刻开通
币安支持OTC,Visa银行卡与支付宝,125倍高杠杆,20倍期货交易平台,全球第一交易所! 免代理直连即刻开通
关注我们:Twitter | Facebook | Linkedin | Medium | Telegram | Weibo | WeChat