53 个版本 (7 个重大变更)

0.14.1 2024年2月26日
0.13.9 2024年2月26日
0.1.7 2023年11月10日

#1957 in 魔法豆

Download history 5/week @ 2024-03-08 2/week @ 2024-03-15 287/week @ 2024-03-29 55/week @ 2024-04-05

1,767 每月下载次数

GPL-3.0-only

1MB
25K SLoC

价格聚合

概述

价格聚合智能合约跟踪多个代币对之间的价格。与其他链上链合约相比,这是一个简化且易于使用的版本。

部署

参数

  • staking_token - 用于抵押和削减的代币
  • staking_amount - 必须抵押的最小金额,才能被视为董事会成员
  • slash_amount - 在成功的削减投票中从董事会成员那里削减的金额
  • slash_quorum - 投票被视为成功所需的最低董事会成员人数
  • oracles - 允许提交价格更新列表的地址
  • submission_count - 触发价格更新所需的最低不同预言机提交数

配置小数位数

可以通过调用 setPairDecimals(from, to, decimals) 设置特定代币对的小数位数。注意

  • 只有所有者可以配置小数位数
  • 必须先暂停合同
  • 此方法还将清除迄今为止积累的提交
  • 除非首先配置小数位数,否则将不接受任何给定对提交
  • 每个Oracle都必须更改其配置以提供新的小数位数,因为任何不匹配都将被视为配置错误,提交将被拒绝。

提交价格更新

Oracle可以使用端点之一提交价格更新。

  • submit - 以5个参数(fromtosubmission_timestamppricedecimals)提交单个价格更新。
  • submitBatch - 同时提交多个价格更新。参数数量必须是5的倍数。

注意:小数参数必须与getPairDecimals返回的该特定对值匹配,否则提交将被拒绝。

轮次

收集来自多个Oracle的价格更新。当达到一定的提交数量阈值(由submission_count给出)时,创建一个新的轮次。记录在该轮次中的价格更新是所有提交中的中值。

查询价格更新

端点

  • latestRoundData不接受任何参数,并返回所有最新的价格更新。
  • latestPriceFeed接受一个过滤器(作为fromto代币标识符)并返回单个价格更新。如果给定过滤器没有价格更新,则事务失败。
  • latestPriceFeedOptional的行为类似于latestPriceFeed,但它返回一个选项,以便调用者可以处理没有价格更新的情况。

价格更新包含

  • round_id - 当前轮次的ID(与区块链轮次ID无关)
  • from - 第一个代币
  • to - 第二个代币
  • price - 两个代币之间的价格
  • decimals - 价格的小数位数

依赖项

~3.5MB
~70K SLoC