知世金融网专注于股票行情,期货开户,外汇储备等最新相关资讯信息提供投资者参考学习!

当前位置:网站首页 > 区块链 > 正文

如何在Loom的BaseChain创建和部署智能合约

原创
文章作者
知世-金融领域资深作者
知名金融领域作者,从事金融超过十余年,在行业内有一定影响力。
金融风险管理师认证证书 常识职业资格认证 特许金融分析师 国际金融理财师认证证书
发布时间:2020-02-16 20:33:53 发布来源:区块链研究实验室 文章点击:93

Loom Network为开发人员提供了构建高性能面向用户的dapp所需的可扩展性和可用性。 Loom Network为以太坊提供了一个第二层解决方案,具有以下主要优点: 1. 1-3秒确认时间。 2. 用户无需支付...

目录

    本文标题如何在Loom的BaseChain创建和部署智能合约,作者:知世,本文有3001个文字,大小约为10KB,预计阅读时间8分钟,请您欣赏。知世金融网众多优秀文章,如果想要浏览更多相关文章,请使用网站导航的搜索进行搜索。本站虽然不乏优秀之作,但仅作为投资者学习参考。

    Loom Network为开发人员提供了构建高性能面向用户的dapp所需的可扩展性和可用性。

    Loom Network为以太坊提供了一个第二层解决方案,具有以下主要优点:

    1. 1-3秒确认时间。
    2. 用户无需支付气体费。
    3. 避免主网交易拥塞。
    4. 与MetaMask和其他主要以太坊钱包完全兼容。

    创建智能合约

    如果您是创建以Solidity编写的智能合约的初学者,我强烈建议您使用Remix IDE来开发和使用智能合约。它可以轻松地测试某些功能。Remix还会为任何智能合约创建合约ABI和bytecode-您以后需要将它们集成到游戏客户端中。

    对于高级编码人员或专家,我建议使用Truffle。您还可以遵循Pranshu Rastogi的本指南,使用Truffle为Loom创建和部署智能合约。

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

    pragma solidity >=0.5.0 <0.6.0;

    /// @author Julian Sakowski
    /// @title A prototype game contract
    contract CoinCollector {
    /// @dev The amount of coins required to win the game.
    uint256 private winCondition;

    /// @dev Maps the subscriber index to an address.
    mapping (address => uint256) private coinCount;

    /** @dev Emits on game start.
    * @param _player The address of the player starting the game.
    */
    event onStartGame(address _player);
    /** @dev Emits on a coin being collected.
    * @param _player The address of the player collecting the coin.
    * @param _coinCount The current collected coin count of the player.
    */
    event onCoinCollected(address _player, uint256 _coinCount);
    /** @dev Emits on game end.
    * @param _player The address of the player ending the game.
    */
    event onEndGame(address _player);

    /** @notice Creates the smart contract and initializes the win condition.
    * @dev The constructor, which initializes the win condition.
    * @param _winCondition The amount of coins required to win a game.
    */
    constructor(uint256 _winCondition) public {
    winCondition = _winCondition;
    }

    /** @notice Any player can start a game for him or herself.
    * @dev Resets the coinCount for msg.sender.
    */
    function startGame() external {
    coinCount[msg.sender] = 0;
    emit onStartGame(msg.sender);
    }

    /** @notice Any player can collect coins.
    * @dev Increases the coin count for the msg.sender and checks for the valid win condition.
    */
    function collectCoin() external {
    coinCount[msg.sender] += 1;
    emit onCoinCollected(msg.sender, coinCount[msg.sender]);

    if (coinCount[msg.sender] == winCondition){
    emit onEndGame(msg.sender);
    }
    }

    /** @notice Shows the count of collected coins for the active player.
    * @dev Returns the coin count collected by the msg.sender.
    * @return The count of collected coins.
    */
    function getCoinCount() external view returns (uint256) {
    return coinCount[msg.sender];
    }
    }

    一步一步来

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

    首先让我们创建一个通用的智能合约

    pragma solidity >=0.5.0 <0.6.0;
    contract CoinCollector {
    }

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

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

    pragma solidity >=0.5.0 <0.6.0;
    contract CoinCollector {
    uint256 private winCondition;

    constructor(uint256 _winCondition) public {
    winCondition = _winCondition;
    }
    }

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

    我们的功能:

    pragma solidity >=0.5.0 <0.6.0;
    contract CoinCollector {
    uint256 private winCondition;
    mapping (address => uint256) private coinCount;

    constructor(uint256 _winCondition) public {
    winCondition = _winCondition;
    }
    function startGame() external {
    coinCount[msg.sender] = 0;
    }
    function collectCoin() external {
    coinCount[msg.sender] += 1;
    }
    function getCoinCount() external view returns (uint256) {
    return coinCount[msg.sender];
    }
    }

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

    1. Public意味任何人都可以调用公共函数。
    2. Private意味着只能从契约内部调用函数。
    3. Internal允许从父合约继承的合约使用该函数。
    4. External 函数是合约接口的一部分,这意味着它们可以从其他合约和通过事务调用。

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

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

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

    pragma solidity >=0.5.0 <0.6.0;
    contract CoinCollector {
    uint256 private winCondition;
    mapping (address => uint256) private coinCount;
    event onStartGame(address _player);
    event onCoinCollected(address _player, uint256 _coinCount);
    event onEndGame(address _player);

    constructor(uint256 _winCondition) public {
    winCondition = _winCondition;
    }
    function startGame() external {
    coinCount[msg.sender] = 0;
    emit onStartGame(msg.sender);
    }
    function collectCoin() external {
    coinCount[msg.sender] += 1;
    emit onCoinCollected(msg.sender, coinCount[msg.sender]);

    if (coinCount[msg.sender] == winCondition){
    emit onEndGame(msg.sender);
    }
    }
    function getCoinCount() external view returns (uint256) {
    return coinCount[msg.sender];
    }
    }

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

    智能合约基本完成。随意玩耍并添加其他功能,例如可以收集的全部硬币,收集不同的硬币类型,或者集成机制以使其成为多人游戏。是时候发挥你的创造力!

    部署智能合约

    首先,我们需要使用以下命令安装Loom SDK:

    curl https://raw.githubusercontent.com/loomnetwork/loom-sdk-documentation/master/scripts/get_loom.sh | sh

    接下来,使用以下命令创建部署智能合约所需的私钥:

    ./loom genkey -k priv_key -a pub_key

    现在,我们正在为智能合约创建一个二进制文件。

    solc --bin --overwrite -o . CoinCollector.sol

    并使用此二进制文件将我们的智能合约部署到Loom Testnet(完全免费!)。我们指定私钥“-k”,二进制文件“-b”,链URL“-u”和链ID“-chain”。

    ./loom deploy -k priv_key -b CoinCollector.bin -u
    http://extdev-plasma-us1.dappchains.com:80 --chain “extdev-plasma-us1”

    结果应如下所示,其中最上方是合约地址,后跟我们的bytecode。

    New contract deployed with address: extdev-plasma-us1:
    0xfC4ce0E01e8fdd309af77564bF5bE8b7dE79E3e9
    Runtime bytecode: [96 128 96 64 82 52 128 21 97 0 16 87 96 0 128 253 91
    80 96 4 54 16 97 0 94 87 96 0 53 124 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
    0 0 0 0 0 0 0 0 0 0 0 0 144 4 128 99 171 126 56 160 20 97 0 99 87 128
    99 202 83 16 172 20 97 0 129 87 128 99 214 90 181 242 20 97 0 139 87 91
    96 0 128 253 91 97 0 107 97 0 149 86 91 96 64 81 128 130 129 82 96 32 1
    145 80 80 96 64 81 128 145 3 144 243 91 97 0 137 97 0 220 86 91 0 91 97
    0 147 97 2 130 86 91 0 91 96 0 96 1 96 0 51 115 255 255 255 255 255 255
    255 255 255 255 255 255 255 255 255 255 255 255 255 255 22 115 255 255
    255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
    22 129 82 96 32 1 144 129 82 96 32 1 96 0 32 84 144 80 144 86 91 96 1
    128 96 0 51 115 255 255 255 255 255 255 255 255 255 255 255 255 255 255
    255 255 255 255 255 255 22 115 255 255 255 255 255 255 255 255 255 255
    255 255 255 255 255 255 255 255 255 255 22 129 82 96 32 1 144 129 82 96
    32 1 96 0 32 96 0 130 130 84 1 146 80 80 129 144 85 80 127 191 239 136
    214 251 22 149 67 110 98 57 38 222 62 243 239 224 63 35 239 35 206 36
    19 14 22 231 220 54 231 86 87 51 96 1 96 0 51 115 255 255 255 255 255
    255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 22 115 255
    255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
    255 22 129 82 96 32 1 144 129 82 96 32 1 96 0 32 84 96 64 81 128 131 115
    255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
    255 255 22 115 255 255 255 255 255 255 255 255 255 255 255 255 255 255
    255 255 255 255 255 255 22 129 82 96 32 1 130 129 82 96 32 1 146 80 80
    80 96 64 81 128 145 3 144 161 96 0 84 96 1 96 0 51 115 255 255 255 255
    255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 22 115
    255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
    255 255 22 129 82 96 32 1 144 129 82 96 32 1 96 0 32 84 20 21 97 2 128
    87 127 241 146 45 227 151 135 44 67 217 208 185 165 167 164 56 126 82
    138 167 86 234 251 122 48 149 77 42 177 197 150 123 193 51 96 64 81 128
    130 115 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
    255 255 255 255 22 115 255 255 255 255 255 255 255 255 255 255 255 255
    255 255 255 255 255 255 255 255 22 129 82 96 32 1 145 80 80 96 64 81 128
    145 3 144 161 91 86 91 96 0 96 1 96 0 51 115 255 255 255 255 255 255
    255 255 255 255 255 255 255 255 255 255 255 255 255 255 22 115 255 255
    255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
    22 129 82 96 32 1 144 129 82 96 32 1 96 0 32 129 144 85 80 127 164 24
    168 129 11 81 212 86 200 190 242 122 103 50 143 121 1 217 23 209 155 38
    140 190 174 131 119 90 81 239 236 96 51 96 64 81 128 130 115 255 255
    255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
    22 115 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255
    255 255 255 255 22 129 82 96 32 1 145 80 80 96 64 81 128 145 3 144 161
    86 254 161 101 98 122 122 114 48 88 32 37 59 125 14 80 36 176 248 220
    94 188 101 217 194 206 222 90 41 16 251 207 104 252 40 65 194 155 70
    208 254 117 97 0 41]
    Transaction receipt: e9810a90a1cecebce9c5d2b19f152ea52029d574f9ae1cd08c
    ce30d4b3af65f4

    请注意,已部署的智能合约地址为“ 0xfC4ce0E01e8fdd309af77564bF5bE8b7dE79E3e9”。 现在您可以在Loom Block Explorer中找到它。需要将智能合约地址添加到您的游戏客户端。

    非常好!智能合约已经开发完善,去在Unity中创建迷你游戏吧,立即使用您的智能合约!

    本文相关推荐: 永续合约的杠杆倍数

    以上便是知世金融网给大家分享的关于如何在Loom的BaseChain创建和部署智能合约/qkl/28764.html的相关信息了,希望能帮助到大家,更多金融相关信息,敬请关注知世金融网!

    网站内容均来自互联网,如侵害您的利益联系客服进行删除!

    关键词:合约
    (0)
    (0)

    上一篇:biteb矿业三篇(3):算力、矿机成本和收益核算

    下一篇:数字挖矿时代,如何才能保证收益最大化?

    本文标题:如何在Loom的BaseChain创建和部署智能合约

    本文地址:/index.php?s=article&c=search&keyword=%E5%90%88%E7%BA%A6

    金融知名领域

    南方财富网 | 金融界 | 金融界 |

    更多推荐

    • 茅台吃饱,经销商哭倒
      茅台吃饱,经销商哭倒
    • 汇金的五次增持从短期看具有一定的“稳定器“作用,但从市场表现看效果逐次递减
      汇金的五次增持从短期看具有一定的“稳定器“作用,但从市场表现看效果逐次递减
    • 158亿元!比亚迪收购!
      158亿元!比亚迪收购!
    • 9月价格回落近五成 “冷静期”酒店业备战“十一”市场
      9月价格回落近五成 “冷静期”酒店业备战“十一”市场
    • 2023哈马博览会哈尔滨银行展区精彩纷呈
      2023哈马博览会哈尔滨银行展区精彩纷呈
    • 大额解禁撂倒股价 医疗影像龙头跌出千亿俱乐部 葛兰二季度大幅减仓
      大额解禁撂倒股价 医疗影像龙头跌出千亿俱乐部 葛兰二季度大幅减仓
    • A股,又上了热搜!数字要素概念走高多股涨停,锂电池板块走低恩捷股份大举跌停
      A股,又上了热搜!数字要素概念走高多股涨停,锂电池板块走低恩捷股份大举跌停
    • 最新!巨头出手,加仓宁王51%
      最新!巨头出手,加仓宁王51%
    • 600亿巨头暴雷
      600亿巨头暴雷
    • 一天32家!科创板回购潮涌来
      一天32家!科创板回购潮涌来
    • 提振信心实招来了!30余家上市公司密集出手 最高要买10亿
      提振信心实招来了!30余家上市公司密集出手 最高要买10亿
    • 高盛再发50年后预测:2075年印度股市全球市值占比将升4倍 中国升3成
      高盛再发50年后预测:2075年印度股市全球市值占比将升4倍 中国升3成

    新闻资讯栏目

    站长QQ: 2397470084