L1.3 - ReactVM和睿应式网络

双重实例 一个响应式合约虽然只有一套代码,但它会同时运行在两个不同的环境中:Reactive Network (RN) 和 ReactVM。即每个响应式合约在部署后,实际上存在两个物理上的实例: * Reactive Network (RN) 实例:表现得像传统的 EVM 区块链,负责与系统合约交互,管理事件的订阅(Subscribe)和取消订阅(Unsubscribe)。 * ReactVM 实例:这是一个受限的隔离环境,专门用于处理事件逻辑。它不直接与外部交互,而是通过 RN 接收事件并发送回调请求。 Reactive Network的本质是普通的 EVM 区块链 + 额外的"系统合约",其监听以太坊、BNB、Polygon、Optimism 等链上的事件,管理订阅关系(订阅/取消订阅),同时接收用户直接发起的交易。 而ReactVM本质是一个"隔离的小虚拟机&…

L1.4 - 订阅机制

核心接口 ISubscriptionService 接口 订阅服务接口提供订阅和取消订阅的能力: interface ISubscriptionService is IPayable { function subscribe( uint256 chain_id, // 监听哪条链 address _contract, // 监听哪个合约 uint256 topic_0, // 事件签名(keccak256哈希) uint256 topic_1, // 索引参数1 uint256 topic_2, // 索引参数2 uint256 topic_3 // 索引参数3 ) external; function unsubscribe(...) external; // 参数相同 } IReactive 接口 这是响应式合约接口定义了合约如何接收和处理事件: interface IReactive is…

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 是奇数,加…