- 浏览: 761635 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (1045)
- 数据结构 (36)
- UML与设计模式 (42)
- c++ (87)
- rust (36)
- Qt (41)
- boost模板元编程 (43)
- Linux (77)
- 汇编 (4)
- 其它 (2)
- 烹饪 (3)
- unix c / socket (73)
- 软件工程 (4)
- shell (53)
- Python (37)
- c++ primer 5th(c++11) (22)
- 数据库/MySQL (27)
- 数据存储 (4)
- lisp (7)
- git (4)
- Utility (3)
- CDN与DNS (54)
- Http (53)
- php (7)
- nginx/lua/openresty (41)
- redis (11)
- TCP/IP (16)
- 互联网 (6)
- kernel (2)
- go (34)
- 区块链 (43)
- 比特股 (13)
- 以太坊 (23)
- 比特币 (23)
- 密码学 (10)
- EOS (53)
- DAG (1)
- docker (1)
- filecoin (7)
- solidity (65)
- ipfs (8)
- 零知识证明 (1)
- openzeppelin (3)
- java (1)
- defi (7)
- Ton (0)
最新评论
事件是智能合约发出的信号。智能合约的前端UI,例如,DApps、web.js,或者任何与Ethereum JSON-RPC API连接的东西,都可以侦听这些事件。事件可以被索引,以便以后可以搜索事件记录。
事件在区块链中的存储
区块链是一个区块链表,这些块的内容基本上是交易记录。每个交易都有一个附加的交易日志,事件结果存放在交易日志里。合约发出的事件,可以使用合约地址访问。
Solidity 事件
Solidity中,要定义事件,可以使用event关键字(在用法上类似于function关键字)。然后可以在函数中使用emit关键字触发事件。
事件构建在Ethereum中,底层的日志接口之上。虽然您通常不会直接处理日志消息,但是了解它们的限制非常重要。
日志结构最多有4个“主题”和一个“数据”字段。第一个主题用于存储事件签名的哈希值,这样就只剩下三个主题用于索引参数。主题需要32字节长,因此,如果使用数组作为索引参数(包括类型string和bytes),那么首先将哈希值转换为32字节。非索引参数存储在数据字段中,没有大小限制。
日志,包括记录在日志中的事件,不能从Ethereum虚拟机(EVM)中访问。这意味着合约不能读取自己的或其他合约的日志及事件。
总结
Solidity 提供了一种记录交易期间事件的方法。
智能合约前端(DApp)可以监听这些事件。
索引(indexed)参数为过滤事件提供了一种高效的方法。
事件受其构建基础日志机制的限制。
一个事件最多有3个参数可以标记为索引。可以使用索引参数有效地过滤事件。下面的代码增强了前面的示例,来跟踪多个计数器,每个计数器由一个数字ID标识:
事件在区块链中的存储
区块链是一个区块链表,这些块的内容基本上是交易记录。每个交易都有一个附加的交易日志,事件结果存放在交易日志里。合约发出的事件,可以使用合约地址访问。
Solidity 事件
Solidity中,要定义事件,可以使用event关键字(在用法上类似于function关键字)。然后可以在函数中使用emit关键字触发事件。
// 声明一个事件 event Deposit(address indexed _from, bytes32 indexed _id, uint _value); // 触发事件 emit Deposit(msg.sender, _id, msg.value);
事件构建在Ethereum中,底层的日志接口之上。虽然您通常不会直接处理日志消息,但是了解它们的限制非常重要。
日志结构最多有4个“主题”和一个“数据”字段。第一个主题用于存储事件签名的哈希值,这样就只剩下三个主题用于索引参数。主题需要32字节长,因此,如果使用数组作为索引参数(包括类型string和bytes),那么首先将哈希值转换为32字节。非索引参数存储在数据字段中,没有大小限制。
日志,包括记录在日志中的事件,不能从Ethereum虚拟机(EVM)中访问。这意味着合约不能读取自己的或其他合约的日志及事件。
总结
Solidity 提供了一种记录交易期间事件的方法。
智能合约前端(DApp)可以监听这些事件。
索引(indexed)参数为过滤事件提供了一种高效的方法。
事件受其构建基础日志机制的限制。
一个事件最多有3个参数可以标记为索引。可以使用索引参数有效地过滤事件。下面的代码增强了前面的示例,来跟踪多个计数器,每个计数器由一个数字ID标识:
发表评论
-
TypeError:ethers_1.getAddress
2024-04-29 10:45 236package.json 添加:"@nomicfou ... -
solidity
2023-02-25 14:23 12一.solidity 1.EVM 不是基于寄存器的,而是基于栈 ... -
solidity
2023-02-25 14:23 11一.solidity 1.EVM 不是基于寄存器的,而是基于栈 ... -
solidity
2023-02-25 14:23 244一.solidity 1.EVM 不是基于寄存器的,而是基于栈 ... -
Address
2023-02-23 10:54 5// contracts/Box.sol // SPDX ... -
Address
2023-02-23 10:50 207// contracts/Box.sol // SPDX ... -
Beacon
2023-02-20 11:45 220Beacon a.Implementation地址并不存放在P ... -
UUPS
2023-02-17 16:16 252a.Proxy直接把所有的请求都通过delegatecall丢 ... -
Transparent
2023-02-16 15:44 203Transparent: a.如果Proxy合约发现自己被Pr ... -
string转bytes
2023-02-16 11:04 278const data = Buffer.from(''); ... -
hardhat命令
2023-02-13 09:58 3321.前置准备,运行一个新项目 mkdir my-project ... -
multicall
2023-01-31 20:11 199multicall的solidity调用与ethers.js调 ... -
检查是否是721
2023-01-31 15:18 153// SPDX-License-Identifier: M ... -
EVM操作码
2023-01-25 10:33 2902.栈和内存操作码 2.1 POP:取出栈顶元素 2.2 PU ... -
计算合约地址
2023-01-19 11:27 242EVM会根据发送者地址和nonce经过RLP编码后再进行kec ... -
标准修饰符
2023-01-18 17:03 1541.internal:类似c++中的protected,通过J ... -
ABI编码函数
2023-01-17 10:40 3011. abi.encode()returns(bytes):对 ... -
数据位置
2023-01-17 10:24 1751.函数参数包括返回的参数默认是memory 2.局部变量默认 ... -
随机数
2023-01-17 10:06 193https://www.paradigm.xyz/2023/0 ... -
extcodesize
2023-01-16 11:16 282extcodesize取出的byte code长度,若长度大于 ...
相关推荐
- 合约是 Solidity 的核心单元,包含了状态变量、函数、事件和其他合约。 - 继承机制允许创建复杂的合约结构,一个合约可以继承另一个合约的功能和状态。 - 接口定义了可以被其他合约调用的函数,而库则是一组可...
Solidity是用于编写智能合约的编程语言,特别是在以太坊区块链上运行。文档中提及的Solidity智能合约编写教程包含了一系列知识点,涵盖了从基础语法到高级特性,以及如何在以太坊平台上部署和管理智能合约。 ### ...
总之,理解并熟练运用 Solidity 中的事件和日志对于开发高效、可扩展的智能合约至关重要。它们是前端与合约交互的桥梁,同时也是构建去中心化应用和基础设施的关键组件。无论是用于测试、监控、数据分析还是用户交互...
你还将深入理解Solidity语言的关键概念,如合约的生命周期、状态变量、函数修饰符(如`public`、`internal`、`private`)、继承、库、事件和错误处理。 文档将首先介绍以太坊的生态系统,包括以太坊虚拟机(EVM)、...
例如,Solidity采用合约(contract)作为其主要的代码组织单元,合约内可以定义变量、函数、事件和其他合约。合约的构造函数(constructor)用于初始化合约状态,在部署时自动调用。 ```solidity pragma solidity ^...
### Solidity开发基础 #### 知识点概览 1. **Solidity语言介绍与历史** 2. **Solidity语法特点** 3. **Solidity数据类型** 4. **Solidity函数定义** 5. **Solidity合约示例** 6. **Solidity中的变量声明** 7. **...
Solidity是一种面向合约的语言,其语法受JavaScript高度影响,旨在为以太坊虚拟机编译代码。 《Solidity编程基础》会是一本您理解Solidity编程的...了解有关事件日志记录和异常处理以及测试和调试智能合同的所有信息。
以太坊Solidity本地编译是区块链开发中的一个重要环节,主要针对的是以太坊智能合约的编写和测试。Solidity是一种专门为以太坊虚拟机(EVM)设计的高级编程语言,用于构建运行在以太坊网络上的分布式应用。在这个...
例如,可以使用API来获取合约中的函数信息、事件、状态变量、继承关系等,进一步进行定制化的代码分析。 **3. 功能特性** - **依赖关系分析**:Slither可以识别合约间的依赖关系,包括导入、继承和交互,这对于...
Solidity提供了诸如合约、函数、事件、状态变量等核心概念,以及权限控制、错误处理等机制,以确保智能合约的安全性和可靠性。 三、intellij-solidity插件特性 1. 语法高亮与代码提示:插件提供完整的Solidity语法...
Solidity基础知识点包括变量声明、数据类型、控制结构、函数、合约结构、事件、 Modifier和Library等。 9. 智能合约安全 智能合约安全是 Solidity语言的重要方面,需要了解 Solidity语言的安全特性和潜在的安全...
此外,"IERC20.sol"和"IERC20Metadata.sol"是ERC20接口合约,定义了对外公开的函数签名和事件,使得其他合约可以与LOOKS代币交互。"ILooksRareToken.sol"可能是一个扩展接口,定义了LOOKS代币特有的方法,比如与...
合约可以包含状态变量、函数、事件、修饰符等。 继承:Solidity支持多重继承,允许合约继承其他合约的属性和行为。 兼容EVM:Solidity编写的智能合约被编译成EVM(虚拟机)字节码,这使得它们可以在eth网络上部署和...
Solidity是专为以太坊区块链设计的一种高级编程语言,用于编写智能合约。它运行在以太坊虚拟机(EVM)上,支持创建复杂且安全的去中心化应用(DApps)。 一、Solidity语言特性与用途 Solidity作为面向对象的语言,...
4. **事件(Events)**:用于与前端应用交互,当合约中的特定操作发生时,可以触发事件,供前端监听。例如: ```solidity event NumberSet(uint256 number); ... emit NumberSet(_number); ``` 5. **权限控制*...
这里涉及到的知识点包括Solidity的数据类型(如uint、address)、结构体、合约构造函数以及事件(events)的使用,这些都对于记录和追踪游戏状态至关重要。 接下来,你会学习如何实现“僵尸attack人类”的功能。这...
1. **合约**:合约是Solidity中的基本构造块,包含变量、函数、事件和构造函数。它们定义了在区块链上执行的逻辑和状态。 2. **变量**:合约内的变量可以是不同类型,如整数(int)、地址(address)和布尔值(bool...
4. **事件(Events)**:用于与前端应用交互,当特定条件满足时,合约可以触发事件,前端监听并响应这些事件,展示合约状态的改变。 5. **权限控制**:通过访问修饰符如`public`, `private`, `internal`, `external...
Solidity是一种专为以太坊虚拟机(EVM)设计的高级编程语言,用于编写智能合约。智能合约是在区块链上运行的自动执行协议...随着实践的深入,开发者还可以探索更复杂的功能,如事件日志、错误处理、安全性最佳实践等。
**Solidity 与 ERC20 代币标准** 在区块链技术领域,Solidity 是一种专为以太坊虚拟机(EVM)设计的高级编程语言,用于构建智能合约。智能合约是部署在以太坊网络上的自执行代码,允许开发者创建去中心化的应用...