Skip to content

Commit 2f96ec1

Browse files
Merge pull request #15 from rainlanguage/2025-12-03-sivr-usd
sivr/usd
2 parents d6bfb69 + 23b6cad commit 2f96ec1

6 files changed

Lines changed: 51 additions & 28 deletions

File tree

‎src/generated/PythWords.pointers.sol‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ pragma solidity ^0.8.25;
1010
// file needs the contract to exist so that it can be compiled.
1111

1212
/// @dev Hash of the known bytecode.
13-
bytes32 constant BYTECODE_HASH = bytes32(0x3c3312ef5b9a4f62cf973f50eab7f4a12e4f907a932b80caf97879ae3089f25c);
13+
bytes32 constant BYTECODE_HASH = bytes32(0x5b0c18eb68c197bb29582d7f13f8741aae50f90cb7d6d01c3a11b2b2ff70a612);
1414

1515
/// @dev The hash of the meta that describes the contract.
1616
bytes32 constant DESCRIBED_BY_META_HASH = bytes32(0xe7bb5842b2cf1d25681a9885109fbf8943495bcebb9ec049bc3790e5db57fa80);

‎src/lib/pyth/LibPyth.sol‎

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,12 @@ library LibPyth {
178178
// slither-disable-next-line too-many-digits
179179
uint256 constant PRICE_FEED_SYMBOL_INTORASTRING_EQUITY_US_COIN_USD =
180180
uint256(0x924571756974792e55532e434f494e2f55534400000000000000000000000000);
181+
/// SIVR/USD
182+
bytes32 constant PRICE_FEED_ID_EQUITY_US_SIVR_USD =
183+
0x0a5ee42b0f7287a777926d08bc185a6a60f42f40a9b63d78d85d4a03ee2e3737;
184+
// slither-disable-next-line too-many-digits
185+
uint256 constant PRICE_FEED_SYMBOL_INTORASTRING_EQUITY_US_SIVR_USD =
186+
uint256(0x924571756974792e55532e534956522f55534400000000000000000000000000);
181187

182188
/// TODO replace with O(1) lookup table.
183189
function getPriceFeedContract(uint256 chainId) internal pure returns (IPyth) {
@@ -249,6 +255,8 @@ library LibPyth {
249255
return PRICE_FEED_ID_EQUITY_US_SPLG_USD;
250256
} else if (feedSymbol == PRICE_FEED_SYMBOL_INTORASTRING_EQUITY_US_IAU_USD) {
251257
return PRICE_FEED_ID_EQUITY_US_IAU_USD;
258+
} else if (feedSymbol == PRICE_FEED_SYMBOL_INTORASTRING_EQUITY_US_SIVR_USD) {
259+
return PRICE_FEED_ID_EQUITY_US_SIVR_USD;
252260
} else {
253261
revert UnsupportedFeedSymbol();
254262
}

‎test/lib/LibFork.sol‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,4 @@ string constant FORK_RPC_URL_ARBITRUM = "https://arbitrum.gateway.tenderly.co";
66
string constant FORK_RPC_URL_BASE = "https://base.gateway.tenderly.co";
77

88
uint256 constant FORK_BLOCK_ARBITRUM = 399225617;
9-
uint256 constant FORK_BLOCK_BASE = 38777789;
9+
uint256 constant FORK_BLOCK_BASE = 38996123;

‎test/src/lib/pyth/LibPyth.constants.t.sol‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,5 +125,9 @@ contract LibPythConstantsTest is Test {
125125
LibPyth.PRICE_FEED_SYMBOL_INTORASTRING_EQUITY_US_IAU_USD,
126126
IntOrAString.unwrap(LibIntOrAString.fromString2("Equity.US.IAU/USD"))
127127
);
128+
assertEq(
129+
LibPyth.PRICE_FEED_SYMBOL_INTORASTRING_EQUITY_US_SIVR_USD,
130+
IntOrAString.unwrap(LibIntOrAString.fromString2("Equity.US.SIVR/USD"))
131+
);
128132
}
129133
}

‎test/src/lib/pyth/LibPyth.getPriceFeedId.t.sol‎

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,10 @@ contract LibPythGetPriceFeedIdTest is Test {
118118
LibPyth.PRICE_FEED_ID_EQUITY_US_IAU_USD,
119119
LibPyth.getPriceFeedId(LibIntOrAString.fromString2("Equity.US.IAU/USD"))
120120
);
121+
assertEq(
122+
LibPyth.PRICE_FEED_ID_EQUITY_US_SIVR_USD,
123+
LibPyth.getPriceFeedId(LibIntOrAString.fromString2("Equity.US.SIVR/USD"))
124+
);
121125
}
122126

123127
function testPriceFeedIdUnknownMappings(IntOrAString symbol) external {
@@ -150,6 +154,7 @@ contract LibPythGetPriceFeedIdTest is Test {
150154
&& IntOrAString.unwrap(symbol) != IntOrAString.unwrap(LibIntOrAString.fromString2("Equity.US.BRK-B/USD"))
151155
&& IntOrAString.unwrap(symbol) != IntOrAString.unwrap(LibIntOrAString.fromString2("Equity.US.SPLG/USD"))
152156
&& IntOrAString.unwrap(symbol) != IntOrAString.unwrap(LibIntOrAString.fromString2("Equity.US.IAU/USD"))
157+
&& IntOrAString.unwrap(symbol) != IntOrAString.unwrap(LibIntOrAString.fromString2("Equity.US.SIVR/USD"))
153158
);
154159
vm.expectRevert(UnsupportedFeedSymbol.selector);
155160
this.getPriceFeedIdExternal(symbol);

‎test/src/lib/pyth/LibPyth.getPriceNoOlderThan.t.sol‎

Lines changed: 32 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -177,81 +177,87 @@ contract LibPythGetPriceNoOlderThanTest is Test {
177177
checkPriceNoOlderThan(
178178
LibIntOrAString.fromString2("Equity.US.GOOG/USD"),
179179
LibDecimalFloat.packLossless(24 hours, 0),
180-
LibDecimalFloat.packLossless(318.38811e5, -5),
181-
LibDecimalFloat.packLossless(0.15811e5, -5)
180+
LibDecimalFloat.packLossless(320.88133e5, -5),
181+
LibDecimalFloat.packLossless(0.18307e5, -5)
182182
);
183183
checkPriceNoOlderThan(
184184
LibIntOrAString.fromString2("Equity.US.AMZN/USD"),
185185
LibDecimalFloat.packLossless(24 hours, 0),
186-
LibDecimalFloat.packLossless(231.63004e5, -5),
187-
LibDecimalFloat.packLossless(0.10225e5, -5)
186+
LibDecimalFloat.packLossless(232.175e5, -5),
187+
LibDecimalFloat.packLossless(0.1211e5, -5)
188188
);
189189
checkPriceNoOlderThan(
190190
LibIntOrAString.fromString2("Equity.US.AAPL/USD"),
191191
LibDecimalFloat.packLossless(24 hours, 0),
192-
LibDecimalFloat.packLossless(276.46109e5, -5),
193-
LibDecimalFloat.packLossless(0.13043e5, -5)
192+
LibDecimalFloat.packLossless(285.835e5, -5),
193+
LibDecimalFloat.packLossless(0.15289e5, -5)
194194
);
195195
checkPriceNoOlderThan(
196196
LibIntOrAString.fromString2("Equity.US.MSFT/USD"),
197197
LibDecimalFloat.packLossless(24 hours, 0),
198-
LibDecimalFloat.packLossless(490.64599e5, -5),
199-
LibDecimalFloat.packLossless(0.24673e5, -5)
198+
LibDecimalFloat.packLossless(480.64507e5, -5),
199+
LibDecimalFloat.packLossless(0.25532e5, -5)
200200
);
201201
checkPriceNoOlderThan(
202202
LibIntOrAString.fromString2("Equity.US.TSLA/USD"),
203203
LibDecimalFloat.packLossless(24 hours, 0),
204-
LibDecimalFloat.packLossless(428.27611e5, -5),
205-
LibDecimalFloat.packLossless(0.20025e5, -5)
204+
LibDecimalFloat.packLossless(439.80344e5, -5),
205+
LibDecimalFloat.packLossless(0.41908e5, -5)
206206
);
207207
checkPriceNoOlderThan(
208208
LibIntOrAString.fromString2("Equity.US.NVDA/USD"),
209209
LibDecimalFloat.packLossless(24 hours, 0),
210-
LibDecimalFloat.packLossless(177.91002e5, -5),
211-
LibDecimalFloat.packLossless(0.07893e5, -5)
210+
LibDecimalFloat.packLossless(180.12973e5, -5),
211+
LibDecimalFloat.packLossless(0.11972e5, -5)
212212
);
213213
checkPriceNoOlderThan(
214214
LibIntOrAString.fromString2("Equity.US.META/USD"),
215215
LibDecimalFloat.packLossless(24 hours, 0),
216-
LibDecimalFloat.packLossless(642.47802e5, -5),
217-
LibDecimalFloat.packLossless(0.34727e5, -5)
216+
LibDecimalFloat.packLossless(643.79845e5, -5),
217+
LibDecimalFloat.packLossless(0.43843e5, -5)
218218
);
219219
checkPriceNoOlderThan(
220220
LibIntOrAString.fromString2("Equity.US.GME/USD"),
221221
LibDecimalFloat.packLossless(24 hours, 0),
222-
LibDecimalFloat.packLossless(22.32067e5, -5),
223-
LibDecimalFloat.packLossless(0.02648e5, -5)
222+
LibDecimalFloat.packLossless(22.97525e5, -5),
223+
LibDecimalFloat.packLossless(0.02761e5, -5)
224224
);
225225
checkPriceNoOlderThan(
226226
LibIntOrAString.fromString2("Equity.US.MSTR/USD"),
227227
LibDecimalFloat.packLossless(24 hours, 0),
228-
LibDecimalFloat.packLossless(183.9007e5, -5),
229-
LibDecimalFloat.packLossless(0.17456e5, -5)
228+
LibDecimalFloat.packLossless(182.31004e5, -5),
229+
LibDecimalFloat.packLossless(0.22037e5, -5)
230230
);
231231
checkPriceNoOlderThan(
232232
LibIntOrAString.fromString2("Equity.US.BRK-B/USD"),
233233
LibDecimalFloat.packLossless(24 hours, 0),
234-
LibDecimalFloat.packLossless(515.13507e5, -5),
235-
LibDecimalFloat.packLossless(0.37249e5, -5)
234+
LibDecimalFloat.packLossless(505.8986e5, -5),
235+
LibDecimalFloat.packLossless(0.34141e5, -5)
236236
);
237237
checkPriceNoOlderThan(
238238
LibIntOrAString.fromString2("Equity.US.SPLG/USD"),
239239
LibDecimalFloat.packLossless(24 hours, 0),
240-
LibDecimalFloat.packLossless(80.27004e5, -5),
241-
LibDecimalFloat.packLossless(0.19553e5, -5)
240+
LibDecimalFloat.packLossless(80.29697e5, -5),
241+
LibDecimalFloat.packLossless(0.09321e5, -5)
242242
);
243243

244244
checkPriceNoOlderThan(
245245
LibIntOrAString.fromString2("Equity.US.IAU/USD"),
246246
LibDecimalFloat.packLossless(24 hours, 0),
247-
LibDecimalFloat.packLossless(79.08704e5, -5),
248-
LibDecimalFloat.packLossless(0.04352e5, -5)
247+
LibDecimalFloat.packLossless(79.20001e5, -5),
248+
LibDecimalFloat.packLossless(0.04676e5, -5)
249249
);
250250
checkPriceNoOlderThan(
251251
LibIntOrAString.fromString2("Equity.US.COIN/USD"),
252252
LibDecimalFloat.packLossless(24 hours, 0),
253-
LibDecimalFloat.packLossless(276.535e5, -5),
254-
LibDecimalFloat.packLossless(0.18138e5, -5)
253+
LibDecimalFloat.packLossless(273.28007e5, -5),
254+
LibDecimalFloat.packLossless(0.24511e5, -5)
255+
);
256+
checkPriceNoOlderThan(
257+
LibIntOrAString.fromString2("Equity.US.SIVR/USD"),
258+
LibDecimalFloat.packLossless(24 hours, 0),
259+
LibDecimalFloat.packLossless(55.44866e5, -5),
260+
LibDecimalFloat.packLossless(0.04631e5, -5)
255261
);
256262
}
257263
}

0 commit comments

Comments
 (0)