L1.2 - Events and Callbacks

EVM中的事件 事件允许智能合约在满足特定条件时,通过记录特定信息来与外部世界进行通信。有了事件,去中心化应用(dApps)就可以直接响应发生的动作,而不需要不停地主动查询(轮询)区块链状态。 EVM 会对事件进行索引(Index),这使得监控区块链活动(如转账、价格变化)变得非常高效和容易。当合约触发事件时,数据被存储在交易的日志(Logs)中。这些日志虽然附着在区块链的区块上,但它们不会直接影响区块链的状态(例如,它们不会改变账户余额或合约变量的值)。 开发者通过两个核心关键字来使用事件: 触发(Emit):使用 emit 关键字来正式记录数据。 例如:emit PriceUpdated("ETH", newEthPrice); 定义(Define):使用 event 关键字,后接事件名称和要记录的数据类型。 例如:event PriceUpdated(string symbol, uint256…

L1.1 - Reactive Contracts

控制反转 考虑一个场景,在没有控制反转的情况下,如果你想实现自动化(例如:当币价跌到 100 时自动卖出),你必须依赖外部实体: * 传统方案的局限:你需要设置一个中心化的“机器人 (Bot)”来监控链上数据。这个机器人持有你的私钥,并在满足条件时替你签名发送交易。 * IoC 的优势: * 无需机器人:不再需要托管额外的实体来模拟人类签名。 * 去中心化自动化:只要输入和输出都在链上,逻辑就可以在去中心化的网络中完全自主运行。 * 消除单点故障:避免了因机器人服务器宕机或私钥泄露导致的风险。 * 传统模式:执行逻辑由外部力量(普通用户 EOA 或中心化机器人)启动。合约是“被动”的,没有外部指令它就是死的。 * 睿应模式:执行逻辑由合约自身根据预设事件决定何时运行。控制权从外部转移到了合约内部。 * 为什么要“反转”? 传统的自动化需要你运行一个中心化机器人,给它私钥,让它不断扫描链上状态并签名发交易。这不仅存在单点故障风险,还引入了私钥管理的安全性挑战。RCs 允许你在完全去中心化的环境下运行这种逻辑。 ![[Pasted image 202603…

L1 - Introduaction

睿应式合约 睿应式智能合约(RCs) 是一种范式转变。 * 传统合约(EVM):是“被动”的。它像一个上锁的柜子,除非有人拿着钥匙(发交易)去开它,否则它永远不会动。 * 睿应式合约(RCs):是“主动”的。它像一个带传感器的机器人,它会盯着其他区块链上的“风吹草动”(事件日志),一旦发现符合条件的情况,它就自己根据逻辑去执行动作。 通过依据预设逻辑处理事件,并自主在区块链上执行后续操作。这是一种更去中心化的自动化机制,可在无需人工干预的情况下,自动响应链上事件。 当前以太坊生态的一个痛点:对中心化脚本/机器人的依赖。如果你想做一个“自动止损”功能,传统合约自己做不到。你必须写一个链外的 Python 或 JS 脚本(机器人),给它私钥,让它不断扫描链上价格,然后由这个机器人发交易。 那么这样的一个模式存在风险: * 中心化风险:如果你的机器人服务器宕机了,自动化就失效了。…

3129. 找出所有稳定的二进制数组 I

题目 给你 3 个正整数 zero ,one 和 limit 。 一个 二进制数组 arr 如果满足以下条件,那么我们称它是 稳定的 : * 0 在 arr 中出现次数 恰好 为 zero 。 * 1 在 arr 中出现次数 恰好 为 one 。 * arr 中每个长度超过 limit 的 子数组 都 同时 包含 0 和 1 。 请你返回 稳定 二进制数组的 总 数目。 由于答案可能很大,将它对 109 + 7 取余 后返回。…

1980. 找出不同的二进制字符串

题目 给你一个字符串数组 nums ,该数组由 n 个 互不相同 的二进制字符串组成,且每个字符串长度都是 n 。请你找出并返回一个长度为 n 且 没有出现 在 nums 中的二进制字符串。如果存在多种答案,只需返回 任意一个 即可。 示例 1: 输入:nums = ["01","10"] 输出:"11" 解释:"11" 没有出现在 nums 中。"00" 也是正确答案。 示例 2: 输入:nums…

1404. 将二进制表示减到 1 的步骤数

题目 给你一个以二进制形式表示的数字 s 。请你返回按下述规则将其减少到 1 所需要的步骤数: * 如果当前数字为偶数,则将其除以 2 。 * 如果当前数字为奇数,则将其加上 1 。 题目保证你总是可以按上述规则将测试用例变为 1 。 示例 1: 输入:s = "1101" 输出:6 解释:"1101" 表示十进制数 13 。 Step 1) 13 是奇数,加 1 得到 14  Step 2) 14 是偶数,除 2 得到 7 Step 3) 7 是奇数,加…

1022. 从根到叶的二进制数之和

题目 给出一棵二叉树,其上每个结点的值都是 0 或 1 。每一条从根到叶的路径都代表一个从最高有效位开始的二进制数。 * 例如,如果路径为 0 -> 1 -> 1 -> 0 -> 1,那么它表示二进制数 01101,也就是 13 。 对树上的每一片叶子,我们都要找出从根到该叶子的路径所表示的数字。 返回这些数字之和。题目数据保证答案是一个 32 位 整数。 示例 1: 输入:root = [1,0,1,0,1,0,1] 输出:22 解释:(100) + (101) + (110)…

1461. 检查一个字符串是否包含所有长度为 K 的二进制子串

题目 给你一个二进制字符串 s 和一个整数 k 。如果所有长度为 k 的二进制字符串都是 s 的子串,请返回 true ,否则请返回 false 。 示例 1: 输入:s = "00110110", k = 2 输出:true 解释:长度为 2 的二进制串包括 "00","01","10" 和 "11"。它们分别是 s 中下标为 0,1,3,2 开始的长度为…