当前位置: 首页 > news >正文

cryptozombies合约7

我们的合约几乎就要完成了!让我们加上一个事件.

事件 是合约和区块链通讯的一种机制。你的前端应用“监听”某些事件,并做出反应。

例子:

// 这里建立事件

event IntegersAdded(uint x, uint y, uint result);

function add(uint _x, uint _y) public {
  uint result = _x + _y;
  //触发事件,通知app
  IntegersAdded(_x, _y, result);
  return result;
}

你的 app 前端可以监听这个事件。JavaScript 实现如下:

YourContract.IntegersAdded(function(error, result) {
  // 干些事
})

实战演习

我们想每当一个僵尸创造出来时,我们的前端都能监听到这个事件,并将它显示出来。

1。 定义一个 事件 叫做 NewZombie。 它有3个参数: zombieId (uint), name (string), 和 dna (uint)。

2。 修改 _createZombie 函数使得当新僵尸造出来并加入 zombies数组后,生成事件NewZombie。

3。 需要定义僵尸id。 array.push() 返回数组的长度类型是uint - 因为数组的第一个元素的索引是 0, array.push() - 1 将是我们加入的僵尸的索引。 zombies.push() - 1 就是 id,数据类型是 uint。在下一行中你可以把它用到 NewZombie 事件中。

pragma solidity ^0.4.19;

contract ZombieFactory {

    // 这里建立事件
    event NewZombie(uint zombieId, string name, uint dna);

    uint dnaDigits = 16;
    uint dnaModulus = 10 ** dnaDigits;

    struct Zombie {
        string name;
        uint dna;
    }

    Zombie[] public zombies;

    function _createZombie(string _name, uint _dna) private {
        uint id = zombies.push(Zombie(_name, _dna)) - 1;
        // 这里触发事件
        NewZombie(id, _name, _dna);
    }

    function _generateRandomDna(string _str) private view returns (uint) {
        uint rand = uint(keccak256(_str));
        return rand % dnaModulus;
    }

    function createRandomZombie(string _name) public {
        uint randDna = _generateRandomDna(_name);
        _createZombie(_name, randDna);
    }

}

相关文章:

  • KF V.S. GM-PHD
  • 《Operating System Concepts》阅读笔记:p636-p666
  • OTA技术(一):原理与实现方案
  • AI日报 - 2025年4月13日
  • C++ 标准库中的 <algorithm> 头文件算法总结
  • 【C++】前向声明(Forward Declaration)
  • Interaction Toolkit 新版模拟器快捷键
  • [NOIP 2003 普及组] 栈 Java
  • OSM路网简化文档+实操视频讲解(道路中心线提取、拓扑检查,学术论文处理方式)11
  • 基于kitti格式纯点云数据的centerpoint目标检测模型的转换(.pth转.onnx和.plan,更新中)
  • SpringBoot日志
  • 代码训练day25回溯p4
  • 嵌入式程序设计英语
  • java: 需要‘)‘ java: 未结束的字符串文字,java: 不是语句,怎么解决
  • C++ (初始C++,命名空间,引用,函数增强)
  • Java-分布式锁tryLock(0, TimeUnit.SECONDS)中0的含义
  • 大模型中提到的分词器是什么
  • C++算法优化实战:破解性能瓶颈,提升程序效率
  • 【AI】使用 Hugging Face Transformers 进行文本摘要实现
  • (2)VTK C++开发示例 --- 绘制多面锥体
  • 赵乐际主持十四届全国人大常委会第十五次会议闭幕会并作讲话
  • 上汽集团一季度净利润30.2亿元,同比增长11.4%
  • 发布亮眼一季度报后,东阿阿胶股价跌停:现金流隐忧引发争议
  • 贸促会答澎湃:5月22日将举办2025年贸易投资促进峰会
  • 中国航天员乘组完成在轨交接,神十九乘组将于29日返回地球
  • 在上海生活8年,13岁英国女孩把城市记忆写进歌里