L2.2 - 部署睿应式合约

我们设定一个场景:监控器盯着 Uniswap V2 的流动性池,一旦发现价格(储备金比例)跌破了你设定的标准,它就会自动“拍马赶到”,触发一个止损交易(Stop Order)。这里就使用到了睿应式合约。 我们通过 UniswapDemoStopOrderReactive 这个合约案例为例子,这个合约追踪 Sync 事件以确定何时满足止损单的条件。当这些条件被触发时,它在以太坊区块链上执行回调交易以执行止损单。 关键组件 事件声明和数据常量 // SPDX-License-Identifier: GPL-2.0-or-later pragma solidity >=0.8.0; import '../../../lib/reactive-lib/src/interfaces/IReactive.sol'; import '../../../lib/reactive-lib/src/abstract-base/AbstractReactive.sol&…

3296. 移山所需的最少秒数

题目 给你一个整数 mountainHeight 表示山的高度。 同时给你一个整数数组 workerTimes,表示工人们的工作时间(单位:秒)。 工人们需要 同时 进行工作以 降低 山的高度。对于工人 i : * 山的高度降低 x,需要花费 workerTimes[i] + workerTimes[i] * 2 + ... + workerTimes[i] * x 秒。例如: * 山的高度降低 1,需要 workerTimes[i] 秒。 * 山的高度降低 2,需要 workerTimes[i] + workerTimes[i] * 2 秒,依此类推。 返回一个整数,表示工人们使山的高度降低到 0 所需的 最少…

L2.1 - Uniswap V2

流动性池 在传统的交易所(如纳斯达克或币安),交易是靠“订单簿”完成的:有人想买,有人想卖,价格匹配才能成交。 但在 Uniswap V2 中,交易不需要等待对手方。流动性池就像是一个“智能自动售货机”: * 它始终包含两种代币(例如 ETH 和 USDT)。 * 池子里储备了大量的这两种代币,由“流动性提供者”(LP)存入。 * 当你来交易时,你不是在和另一个人交易,而是在和这个智能合约里的储备金交易。 这种流动性池时去中心化的,因为其包含两个特点: * 无需许可 (Permissionless):不需要传统的做市商(机构或银行)来提供流动性。任何人都可以把自己的代币存入池中成为流动性提供者,并赚取交易手续费。 * 透明性 (Transparency):所有的操作都发生在以太坊区块链上。这意味着每一笔兑换、每一次存钱或取钱,在 Etherscan 这样的区块浏览器上都是公开透明、不可篡改的。 智能合约在这里: * 管理着这些储备金,确保没有人能随便把钱提走。…

L1.5 - 预言机

预言机问题 区块链和智能合约是一个完全封闭且自洽的系统。为了保证网络中每个节点运行代码的结果都完全一致(可验证、可重复),智能合约无法主动连接互联网去获取外部信息。 智能合约如果只在“小黑屋”里自娱自乐,实际用途会非常有限。要释放它的全部商业潜力,它必须知道“屋外的世界”发生了什么,比如:ETH现在的美元价格是多少?某个地方发生飓风了吗?这些存在于区块链外部的信息被称为链下数据(Off-chain data)。 既然智能合约出不去,外部数据就必须被“人为”送进去。但是,区块链的核心价值在于去中心化和免信任(不依赖单一的中心化权威)。如果我们只依赖一个中心化的服务器或个人来提供数据,一旦这个源头作恶、被黑客攻击或宕机,整个智能合约的执行就会出错。如何既能把现实世界的数据送上链,又不会引入单点故障、不破坏区块链的去中心化和免信任特性? 传统解决方案 首先需要注意的是:预言机本身并不是数据源,它是一个中间件。它负责从外部世界(如金融市场的 API 接口、政府公开数据库、甚至现实中的物联网/IoT设备)抓取数据,然后将这些数据“喂”给区块链上的智能合约。 它的核心价值在于:…

1009. 十进制整数的反码

题目 每个非负整数 N 都有其二进制表示。例如, 5 可以被表示为二进制 "101",11 可以用二进制 "1011" 表示,依此类推。注意,除 N = 0 外,任何二进制表示中都不含前导零。 二进制的反码表示是将每个 1 改为 0 且每个 0 变为 1。例如,二进制数 "101" 的二进制反码为 "010"。 给你一个十进制数 N,请你返回其二进制表示的反码所对应的十进制整数。 示例 1: 输入:5 输出:2 解释:…

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…