# 一文说清Redstone预言机的集成方式 **Published by:** [kekec@Crypto](https://paragraph.com/@889908/) **Published on:** 2024-03-15 **URL:** https://paragraph.com/@889908/redstone ## Content Redstone 提供了三种集成方式供其他产品使用,每种集成方式如下:RedStone Core: 这是RedStone 的最成熟方式,已在生产中进行过实战测试,保护了多个主网中超过 1 亿美元 TVL 的 DeFi 协议。价格提供已超过 ~50K 笔交易。RedStone Classic: 并不是所有的业务场景都适合用Redstone Core,有些场景可能使用Classic模式更适合。RedStone Classic与推送模式的Oracle相比,具有明显的优势。它的模块化设计让您对价格更新的时间和方式有决定性的发言权。RedStone X: RedStone X 采用了延迟执行模式,交易分两步处理,用户在交易前其实是不知道具体的价格的,这就减少了任何试图通过从 Oracle 提前交付价格来套利协议的行为。价格只在第二步推送到链上,通常发生在下一个区块。这样的价格将用于最终结算交易。Redstone作为成熟的预言机解决方案,集成流程也经过了大量的验证和测试,关键的集成步骤我总结为:模型选择合约改造数据处理持续监控接下来我将针对每一种方式集成的关键点和核心进行介绍。Redstone集成对使用者有一定的技术要求,在你完成测试体验之前,需要具备如下环境:对 Solidity 和智能合约开发有基础的理解安装 Node.js 和 npm安装 Truffle Suite 或任何其他智能合约部署工具拥有以太币的以太坊钱包来部署合约本文假设你已经具备了相关区块链代码开发的经验一、配置开发环境mkdir MyDApp && cd MyDApp npm init -y npm install -g truffle truffle init 二、编写智能合约在 contracts/ 目录创建一个新的 Solidity 文件:touch contracts/test.sol 根据Redstone提供的三种集成方式,我们逐个进行介绍并提供相关集成内容。第一种:RedStone Core集成该模式未来会是Redstone相关方案中最常用的一种方式,通过他能够高效且优惠的实现我们的价格需求。该模式使用的步骤如下:第一步:安装 @redstone-finance/evm-connectornpm install @redstone-finance/evm-connector 第二步:在智能合约中集成Redstonepragma solidity ^0.8.2; import "@redstone-finance/evm-connector/contracts/data-services/MainDemoConsumerBase.sol"; contract ExampleContract is getPrice{ uint256 private lastPrice = 0; function ethPrice() public { uint256 ethPrice = getOracleNumericValueFromTxMsg(bytes32("ETH")); lastPrice = ethPrice; } } 如果在合约中,需要获得多个价格的时候,使用方法如下: bytes32[] memory dataFeedIds = new bytes32Unsupported embed; dataFeedIds[0] = bytes32("ETH"); dataFeedIds[1] = bytes32("BTC"); uint256[] memory values = getOracleNumericValuesFromTxMsg(dataFeedIds); uint256 ethPrice = values[0]; uint256 btcPrice = values[1]; 最后,在dapp代码中进行实现相关的业务逻辑。官方提供了一个sample的demo库,可以基于自己的实际需求进行参考。Demo仓库第二种:RedStone Classic集成RedStone Classic 是一个完整的数据收集和存储模型,适用于某些希望按照传统设计将数据推送到区块链的协议,该模型适合在以下情况:已有一份经过深度审核的代码库,且开发者团队更倾向于不进行任何改动;协议部署在私有网络或者手续费用最少的区块链上;不需要过于频繁地更新价格。该模式需要通过一个服务来推动数据上链。这个服务是可定制的,基于环境变量定期检查一定的条件集合,并在满足条件时推送价格。这个服务被称为"Relayer"。Relayer需要设置相应的环境变量,这些环境变量描述了Relayer的工作方式。比如,通过设置UPDATE_PRICE_INTERVAL变量来控制价格应该多久更新一次。MIN_DEVIATION_PERCENTAGE变量用于指定价格变动多少后应该进行更新。针对Relayer详细的参数说明如下: RELAYER_ITERATION_INTERVAL:更新价格的尝试间隔 UPDATE_CONDITIONS:描述决定价格是否可以更新的参数数组 UPDATE_PRICE_INTERVAL:描述多久更新一次价格的时间间隔 MIN_DEVIATION_PERCENTAGE:描述价格变动多少将触发价格更新的最小偏差百分比 RPC_URL:与区块链交互的RPC的URL CHAIN_NAME:所在的区块链的名称 CHAIN_ID:所在区块链的ID PRIVATE_KEY:在对应网络上拥有充足资金以推送价格至适配器合约的钱包的私钥 ADAPTER_CONTRACT_ADDRESS:在对应网络上部署的适配器合约的地址 DATA_SERVICE_ID:描述应用哪些数据服务来获取价格的RedStone包装器参数 UNIQUE_SIGNERS_COUNT:描述应签名价格数据的独特签名者数量的RedStone包装器参数 DATA_FEEDS:描述将使用哪些代币的RedStone包装器参数。 CACHE_SERVICE_URLS:描述将使用哪些缓存服务URL来获取价格的RedStone包装器参数。 GAS_LIMIT:推送数据至价格定阅合约的Gas limit 限制。 该模式的详细使用可以参考*这里。*第三种:RedStone XRedstoneX目的是在保护以太坊上的交易执行免于前插交易方面,提供了极强的保护。这一模型借鉴了被延迟执行模式,每笔交易的处理分为两步。用户发起交易,会先记录在链上一个他打算与协议进行交互的请求,但是并不知道交易执行时的具体的价格。这种做法可以避免任何尝试通过预先将价格输送到Oracles从而进行套利的行为。价格在第二步中被推送到链上,这通常发生在下一个区块之后。任何人(包括用户自己)都可以推送价格,因为价格的完整性是在链上基于协议限制进行验证的。此价格将用于最终结算交易。想要实现RedStone X模型,合约的逻辑需要进行调整:针对请求的过程进行阶段划分,确保每次交易都分为两阶段操作:请求 --> 执行。这里比较类似数据库最后的Commit.部署一个监听服务,这个服务会自动获取价格并触发交易的执行。总结Redstone的三种集成模式,都有各自的优势和特点,我们应该基于我们dapp自身的特性和需求进行选择。在深入研究redstone的集成过程之前,必须在区块链技术和智能合约方面拥有一定的经验和知识储备。这其中包括了全面了解区块链的工作原理,去中心化性质和共识机制, Solidity 编程语言等。 Redstone一定是预言机领域最先进的解决方案,如果未来我们期望我们的dapp能够在价格数据方面有较大的优势,现在很有必要针对Redstone的方案进行深入的研究与学习。 本文参考:How it worksComprehensive Guide to Integrating RedStone Oracles into Your dAppIntegrating Redstone Oracle with Your DAppredstone-3-models-dex-example ## Publication Information - [kekec@Crypto](https://paragraph.com/@889908/): Publication homepage - [All Posts](https://paragraph.com/@889908/): More posts from this publication - [RSS Feed](https://api.paragraph.com/blogs/rss/@889908): Subscribe to updates - [Twitter](https://twitter.com/KekeC2022): Follow on Twitter