1415. 长度为 n 的开心字符串中字典序第 k 小的字符串
题目 一个 「开心字符串」定义为: * 仅包含小写字母 ['a', 'b', 'c']. * 对所有在 1 到 s.length - 1 之间的 i ,满足 s[i] != s[i + 1] (字符串的下标从 1 开始)。 比方说,字符串 "abc","ac","b" 和 "abcbabcbcb" 都是开心字符串,但是 "…
题目 一个 「开心字符串」定义为: * 仅包含小写字母 ['a', 'b', 'c']. * 对所有在 1 到 s.length - 1 之间的 i ,满足 s[i] != s[i + 1] (字符串的下标从 1 开始)。 比方说,字符串 "abc","ac","b" 和 "abcbabcbcb" 都是开心字符串,但是 "…
我们设定一个场景:监控器盯着 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&…
题目 给你一个整数 mountainHeight 表示山的高度。 同时给你一个整数数组 workerTimes,表示工人们的工作时间(单位:秒)。 工人们需要 同时 进行工作以 降低 山的高度。对于工人 i : * 山的高度降低 x,需要花费 workerTimes[i] + workerTimes[i] * 2 + ... + workerTimes[i] * x 秒。例如: * 山的高度降低 1,需要 workerTimes[i] 秒。 * 山的高度降低 2,需要 workerTimes[i] + workerTimes[i] * 2 秒,依此类推。 返回一个整数,表示工人们使山的高度降低到 0 所需的 最少…
流动性池 在传统的交易所(如纳斯达克或币安),交易是靠“订单簿”完成的:有人想买,有人想卖,价格匹配才能成交。 但在 Uniswap V2 中,交易不需要等待对手方。流动性池就像是一个“智能自动售货机”: * 它始终包含两种代币(例如 ETH 和 USDT)。 * 池子里储备了大量的这两种代币,由“流动性提供者”(LP)存入。 * 当你来交易时,你不是在和另一个人交易,而是在和这个智能合约里的储备金交易。 这种流动性池时去中心化的,因为其包含两个特点: * 无需许可 (Permissionless):不需要传统的做市商(机构或银行)来提供流动性。任何人都可以把自己的代币存入池中成为流动性提供者,并赚取交易手续费。 * 透明性 (Transparency):所有的操作都发生在以太坊区块链上。这意味着每一笔兑换、每一次存钱或取钱,在 Etherscan 这样的区块浏览器上都是公开透明、不可篡改的。 智能合约在这里: * 管理着这些储备金,确保没有人能随便把钱提走。…
预言机问题 区块链和智能合约是一个完全封闭且自洽的系统。为了保证网络中每个节点运行代码的结果都完全一致(可验证、可重复),智能合约无法主动连接互联网去获取外部信息。 智能合约如果只在“小黑屋”里自娱自乐,实际用途会非常有限。要释放它的全部商业潜力,它必须知道“屋外的世界”发生了什么,比如:ETH现在的美元价格是多少?某个地方发生飓风了吗?这些存在于区块链外部的信息被称为链下数据(Off-chain data)。 既然智能合约出不去,外部数据就必须被“人为”送进去。但是,区块链的核心价值在于去中心化和免信任(不依赖单一的中心化权威)。如果我们只依赖一个中心化的服务器或个人来提供数据,一旦这个源头作恶、被黑客攻击或宕机,整个智能合约的执行就会出错。如何既能把现实世界的数据送上链,又不会引入单点故障、不破坏区块链的去中心化和免信任特性? 传统解决方案 首先需要注意的是:预言机本身并不是数据源,它是一个中间件。它负责从外部世界(如金融市场的 API 接口、政府公开数据库、甚至现实中的物联网/IoT设备)抓取数据,然后将这些数据“喂”给区块链上的智能合约。 它的核心价值在于:…
题目 每个非负整数 N 都有其二进制表示。例如, 5 可以被表示为二进制 "101",11 可以用二进制 "1011" 表示,依此类推。注意,除 N = 0 外,任何二进制表示中都不含前导零。 二进制的反码表示是将每个 1 改为 0 且每个 0 变为 1。例如,二进制数 "101" 的二进制反码为 "010"。 给你一个十进制数 N,请你返回其二进制表示的反码所对应的十进制整数。 示例 1: 输入:5 输出:2 解释:…
双重实例 一个响应式合约虽然只有一套代码,但它会同时运行在两个不同的环境中:Reactive Network (RN) 和 ReactVM。即每个响应式合约在部署后,实际上存在两个物理上的实例: * Reactive Network (RN) 实例:表现得像传统的 EVM 区块链,负责与系统合约交互,管理事件的订阅(Subscribe)和取消订阅(Unsubscribe)。 * ReactVM 实例:这是一个受限的隔离环境,专门用于处理事件逻辑。它不直接与外部交互,而是通过 RN 接收事件并发送回调请求。 Reactive Network的本质是普通的 EVM 区块链 + 额外的"系统合约",其监听以太坊、BNB、Polygon、Optimism 等链上的事件,管理订阅关系(订阅/取消订阅),同时接收用户直接发起的交易。 而ReactVM本质是一个"隔离的小虚拟机&…
核心接口 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…