Skip to content

Commit 43cdc7c

Browse files
committed
added 8 test
1 parent 1b09f6c commit 43cdc7c

File tree

1 file changed

+359
-1
lines changed

1 file changed

+359
-1
lines changed

target_chains/ton/contracts/tests/PythTest.spec.ts

Lines changed: 359 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,142 @@ import {
143143
HERMES_10_AMZN_EMA_CONF,
144144
HERMES_10_AMZN_EMA_EXPO,
145145
HERMES_10_AMZN_EMA_PUBLISH_TIME,
146+
HERMES_9_BTC_PRICE,
147+
HERMES_9_BTC_CONF,
148+
HERMES_9_BTC_EXPO,
149+
HERMES_9_BTC_PUBLISH_TIME,
150+
HERMES_9_BTC_EMA_PRICE,
151+
HERMES_9_BTC_EMA_CONF,
152+
HERMES_9_BTC_EMA_EXPO,
153+
HERMES_9_BTC_EMA_PUBLISH_TIME,
154+
HERMES_9_ETH_PRICE,
155+
HERMES_9_ETH_CONF,
156+
HERMES_9_ETH_EXPO,
157+
HERMES_9_ETH_PUBLISH_TIME,
158+
HERMES_9_ETH_EMA_PRICE,
159+
HERMES_9_ETH_EMA_CONF,
160+
HERMES_9_ETH_EMA_EXPO,
161+
HERMES_9_ETH_EMA_PUBLISH_TIME,
162+
HERMES_9_DOGE_PRICE,
163+
HERMES_9_DOGE_CONF,
164+
HERMES_9_DOGE_EXPO,
165+
HERMES_9_DOGE_PUBLISH_TIME,
166+
HERMES_9_DOGE_EMA_PRICE,
167+
HERMES_9_DOGE_EMA_CONF,
168+
HERMES_9_DOGE_EMA_EXPO,
169+
HERMES_9_DOGE_EMA_PUBLISH_TIME,
170+
HERMES_9_SOL_PRICE,
171+
HERMES_9_SOL_CONF,
172+
HERMES_9_SOL_EXPO,
173+
HERMES_9_SOL_PUBLISH_TIME,
174+
HERMES_9_SOL_EMA_PRICE,
175+
HERMES_9_SOL_EMA_CONF,
176+
HERMES_9_SOL_EMA_EXPO,
177+
HERMES_9_SOL_EMA_PUBLISH_TIME,
178+
HERMES_9_PYTH_PRICE,
179+
HERMES_9_PYTH_CONF,
180+
HERMES_9_PYTH_EXPO,
181+
HERMES_9_PYTH_PUBLISH_TIME,
182+
HERMES_9_PYTH_EMA_PRICE,
183+
HERMES_9_PYTH_EMA_CONF,
184+
HERMES_9_PYTH_EMA_EXPO,
185+
HERMES_9_PYTH_EMA_PUBLISH_TIME,
186+
HERMES_9_ARB_PRICE,
187+
HERMES_9_ARB_CONF,
188+
HERMES_9_ARB_EXPO,
189+
HERMES_9_ARB_PUBLISH_TIME,
190+
HERMES_9_ARB_EMA_PRICE,
191+
HERMES_9_ARB_EMA_CONF,
192+
HERMES_9_ARB_EMA_EXPO,
193+
HERMES_9_ARB_EMA_PUBLISH_TIME,
194+
HERMES_9_TON_PRICE,
195+
HERMES_9_TON_CONF,
196+
HERMES_9_TON_EXPO,
197+
HERMES_9_TON_PUBLISH_TIME,
198+
HERMES_9_TON_EMA_PRICE,
199+
HERMES_9_TON_EMA_CONF,
200+
HERMES_9_TON_EMA_EXPO,
201+
HERMES_9_TON_EMA_PUBLISH_TIME,
202+
HERMES_9_AAPL_PRICE,
203+
HERMES_9_AAPL_CONF,
204+
HERMES_9_AAPL_EXPO,
205+
HERMES_9_AAPL_PUBLISH_TIME,
206+
HERMES_9_AAPL_EMA_PRICE,
207+
HERMES_9_AAPL_EMA_CONF,
208+
HERMES_9_AAPL_EMA_EXPO,
209+
HERMES_9_AAPL_EMA_PUBLISH_TIME,
210+
HERMES_9_ABNB_PRICE,
211+
HERMES_9_ABNB_CONF,
212+
HERMES_9_ABNB_EXPO,
213+
HERMES_9_ABNB_PUBLISH_TIME,
214+
HERMES_9_ABNB_EMA_PRICE,
215+
HERMES_9_ABNB_EMA_CONF,
216+
HERMES_9_ABNB_EMA_EXPO,
217+
HERMES_9_ABNB_EMA_PUBLISH_TIME,
218+
HERMES_8_BTC_PRICE,
219+
HERMES_8_BTC_CONF,
220+
HERMES_8_BTC_EXPO,
221+
HERMES_8_BTC_PUBLISH_TIME,
222+
HERMES_8_BTC_EMA_PRICE,
223+
HERMES_8_BTC_EMA_CONF,
224+
HERMES_8_BTC_EMA_EXPO,
225+
HERMES_8_BTC_EMA_PUBLISH_TIME,
226+
HERMES_8_ETH_PRICE,
227+
HERMES_8_ETH_CONF,
228+
HERMES_8_ETH_EXPO,
229+
HERMES_8_ETH_PUBLISH_TIME,
230+
HERMES_8_ETH_EMA_PRICE,
231+
HERMES_8_ETH_EMA_CONF,
232+
HERMES_8_ETH_EMA_EXPO,
233+
HERMES_8_ETH_EMA_PUBLISH_TIME,
234+
HERMES_8_DOGE_PRICE,
235+
HERMES_8_DOGE_CONF,
236+
HERMES_8_DOGE_EXPO,
237+
HERMES_8_DOGE_PUBLISH_TIME,
238+
HERMES_8_DOGE_EMA_PRICE,
239+
HERMES_8_DOGE_EMA_CONF,
240+
HERMES_8_DOGE_EMA_EXPO,
241+
HERMES_8_DOGE_EMA_PUBLISH_TIME,
242+
HERMES_8_SOL_PRICE,
243+
HERMES_8_SOL_CONF,
244+
HERMES_8_SOL_EXPO,
245+
HERMES_8_SOL_PUBLISH_TIME,
246+
HERMES_8_SOL_EMA_PRICE,
247+
HERMES_8_SOL_EMA_CONF,
248+
HERMES_8_SOL_EMA_EXPO,
249+
HERMES_8_SOL_EMA_PUBLISH_TIME,
250+
HERMES_8_PYTH_PRICE,
251+
HERMES_8_PYTH_CONF,
252+
HERMES_8_PYTH_EXPO,
253+
HERMES_8_PYTH_PUBLISH_TIME,
254+
HERMES_8_PYTH_EMA_PRICE,
255+
HERMES_8_PYTH_EMA_CONF,
256+
HERMES_8_PYTH_EMA_EXPO,
257+
HERMES_8_PYTH_EMA_PUBLISH_TIME,
258+
HERMES_8_ARB_PRICE,
259+
HERMES_8_ARB_CONF,
260+
HERMES_8_ARB_EXPO,
261+
HERMES_8_ARB_PUBLISH_TIME,
262+
HERMES_8_ARB_EMA_PRICE,
263+
HERMES_8_ARB_EMA_CONF,
264+
HERMES_8_ARB_EMA_EXPO,
265+
HERMES_8_ARB_EMA_PUBLISH_TIME,
266+
HERMES_8_TON_PRICE,
267+
HERMES_8_TON_CONF,
268+
HERMES_8_TON_EXPO,
269+
HERMES_8_TON_PUBLISH_TIME,
270+
HERMES_8_TON_EMA_PRICE,
271+
HERMES_8_TON_EMA_CONF,
272+
HERMES_8_TON_EMA_EXPO,
273+
HERMES_8_TON_EMA_PUBLISH_TIME,
274+
HERMES_8_AAPL_PRICE,
275+
HERMES_8_AAPL_CONF,
276+
HERMES_8_AAPL_EXPO,
277+
HERMES_8_AAPL_PUBLISH_TIME,
278+
HERMES_8_AAPL_EMA_PRICE,
279+
HERMES_8_AAPL_EMA_CONF,
280+
HERMES_8_AAPL_EMA_EXPO,
281+
HERMES_8_AAPL_EMA_PUBLISH_TIME,
146282
HERMES_7_BTC_PRICE,
147283
HERMES_7_BTC_CONF,
148284
HERMES_7_BTC_EXPO,
@@ -209,6 +345,7 @@ import {
209345
HERMES_1_BTC_EMA_CONF,
210346
HERMES_1_BTC_EMA_EXPO,
211347
HERMES_1_BTC_EMA_PUBLISH_TIME,
348+
HERMES_UPDATE_8_PRICE_FEEDS,
212349
} from "./utils/pyth";
213350
import { GUARDIAN_SET_0, MAINNET_UPGRADE_VAAS } from "./utils/wormhole";
214351
import { DataSource } from "@pythnetwork/xc-admin-common";
@@ -1968,8 +2105,229 @@ describe("PythTest", () => {
19682105
);
19692106
});
19702107

2108+
it("should successfully parse price feed updates with 8 price feeds", async () => {
2109+
await deployContract();
2110+
await updateGuardianSets(pythTest, deployer);
2111+
2112+
const sentValue = toNano("15");
2113+
const result = await pythTest.sendParsePriceFeedUpdates(
2114+
deployer.getSender(),
2115+
Buffer.from(HERMES_UPDATE_8_PRICE_FEEDS, "hex"),
2116+
sentValue,
2117+
[
2118+
BTC_PRICE_FEED_ID,
2119+
ETH_PRICE_FEED_ID,
2120+
DOGE_PRICE_FEED_ID,
2121+
SOL_USD_PRICE_FEED_ID,
2122+
PYTH_USD_PRICE_FEED_ID,
2123+
ARBITRUM_USD_PRICE_FEED_ID,
2124+
TON_USD_PRICE_FEED_ID,
2125+
AAPL_PRICE_FEED_ID
2126+
],
2127+
HERMES_8_ETH_PUBLISH_TIME,
2128+
HERMES_8_ETH_PUBLISH_TIME,
2129+
deployer.address,
2130+
CUSTOM_PAYLOAD,
2131+
);
2132+
2133+
expect(result.transactions).toHaveTransaction({
2134+
from: deployer.address,
2135+
to: pythTest.address,
2136+
success: true,
2137+
outMessagesCount: 1,
2138+
});
2139+
2140+
expect(result.transactions).toHaveTransaction({
2141+
from: pythTest.address,
2142+
to: deployer.address,
2143+
success: true,
2144+
});
2145+
2146+
const outMessage = result.transactions[1].outMessages.values()[0];
2147+
2148+
expect(
2149+
(outMessage.info as CommonMessageInfoInternal).value.coins,
2150+
).toBeGreaterThan(0);
2151+
2152+
const cs = outMessage.body.beginParse();
2153+
2154+
const op = cs.loadUint(32);
2155+
expect(op).toBe(5);
2156+
2157+
const numPriceFeeds = cs.loadUint(8);
2158+
expect(numPriceFeeds).toBe(8);
2159+
2160+
const priceFeedsCell = cs.loadRef();
2161+
let currentCell = priceFeedsCell;
2162+
2163+
const expectedFeeds = [
2164+
{ id: BTC_PRICE_FEED_ID, price: HERMES_8_BTC_PRICE, conf: HERMES_8_BTC_CONF, expo: HERMES_8_BTC_EXPO, publishTime: HERMES_8_BTC_PUBLISH_TIME, emaPrice: HERMES_8_BTC_EMA_PRICE, emaConf: HERMES_8_BTC_EMA_CONF, emaExpo: HERMES_8_BTC_EMA_EXPO, emaPublishTime: HERMES_8_BTC_EMA_PUBLISH_TIME },
2165+
{ id: ETH_PRICE_FEED_ID, price: HERMES_8_ETH_PRICE, conf: HERMES_8_ETH_CONF, expo: HERMES_8_ETH_EXPO, publishTime: HERMES_8_ETH_PUBLISH_TIME, emaPrice: HERMES_8_ETH_EMA_PRICE, emaConf: HERMES_8_ETH_EMA_CONF, emaExpo: HERMES_8_ETH_EMA_EXPO, emaPublishTime: HERMES_8_ETH_EMA_PUBLISH_TIME },
2166+
{ id: DOGE_PRICE_FEED_ID, price: HERMES_8_DOGE_PRICE, conf: HERMES_8_DOGE_CONF, expo: HERMES_8_DOGE_EXPO, publishTime: HERMES_8_DOGE_PUBLISH_TIME, emaPrice: HERMES_8_DOGE_EMA_PRICE, emaConf: HERMES_8_DOGE_EMA_CONF, emaExpo: HERMES_8_DOGE_EMA_EXPO, emaPublishTime: HERMES_8_DOGE_EMA_PUBLISH_TIME },
2167+
{ id: SOL_USD_PRICE_FEED_ID, price: HERMES_8_SOL_PRICE, conf: HERMES_8_SOL_CONF, expo: HERMES_8_SOL_EXPO, publishTime: HERMES_8_SOL_PUBLISH_TIME, emaPrice: HERMES_8_SOL_EMA_PRICE, emaConf: HERMES_8_SOL_EMA_CONF, emaExpo: HERMES_8_SOL_EMA_EXPO, emaPublishTime: HERMES_8_SOL_EMA_PUBLISH_TIME },
2168+
{ id: PYTH_USD_PRICE_FEED_ID, price: HERMES_8_PYTH_PRICE, conf: HERMES_8_PYTH_CONF, expo: HERMES_8_PYTH_EXPO, publishTime: HERMES_8_PYTH_PUBLISH_TIME, emaPrice: HERMES_8_PYTH_EMA_PRICE, emaConf: HERMES_8_PYTH_EMA_CONF, emaExpo: HERMES_8_PYTH_EMA_EXPO, emaPublishTime: HERMES_8_PYTH_EMA_PUBLISH_TIME },
2169+
{ id: ARBITRUM_USD_PRICE_FEED_ID, price: HERMES_8_ARB_PRICE, conf: HERMES_8_ARB_CONF, expo: HERMES_8_ARB_EXPO, publishTime: HERMES_8_ARB_PUBLISH_TIME, emaPrice: HERMES_8_ARB_EMA_PRICE, emaConf: HERMES_8_ARB_EMA_CONF, emaExpo: HERMES_8_ARB_EMA_EXPO, emaPublishTime: HERMES_8_ARB_EMA_PUBLISH_TIME },
2170+
{ id: TON_USD_PRICE_FEED_ID, price: HERMES_8_TON_PRICE, conf: HERMES_8_TON_CONF, expo: HERMES_8_TON_EXPO, publishTime: HERMES_8_TON_PUBLISH_TIME, emaPrice: HERMES_8_TON_EMA_PRICE, emaConf: HERMES_8_TON_EMA_CONF, emaExpo: HERMES_8_TON_EMA_EXPO, emaPublishTime: HERMES_8_TON_EMA_PUBLISH_TIME },
2171+
{ id: AAPL_PRICE_FEED_ID, price: HERMES_8_AAPL_PRICE, conf: HERMES_8_AAPL_CONF, expo: HERMES_8_AAPL_EXPO, publishTime: HERMES_8_AAPL_PUBLISH_TIME, emaPrice: HERMES_8_AAPL_EMA_PRICE, emaConf: HERMES_8_AAPL_EMA_CONF, emaExpo: HERMES_8_AAPL_EMA_EXPO, emaPublishTime: HERMES_8_AAPL_EMA_PUBLISH_TIME },
2172+
];
2173+
2174+
for (let i = 0; i < expectedFeeds.length; i++) {
2175+
const feedCs = currentCell.beginParse();
2176+
const priceId = "0x" + feedCs.loadUintBig(256).toString(16).padStart(64, "0");
2177+
expect(priceId).toBe(expectedFeeds[i].id);
2178+
2179+
const priceFeedCell = feedCs.loadRef();
2180+
const priceFeedSlice = priceFeedCell.beginParse();
2181+
2182+
const currentPriceCell = priceFeedSlice.loadRef();
2183+
const currentPrice = currentPriceCell.beginParse();
2184+
expect(currentPrice.loadInt(64)).toBe(expectedFeeds[i].price);
2185+
expect(currentPrice.loadUint(64)).toBe(expectedFeeds[i].conf);
2186+
expect(currentPrice.loadInt(32)).toBe(expectedFeeds[i].expo);
2187+
expect(currentPrice.loadUint(64)).toBe(expectedFeeds[i].publishTime);
2188+
2189+
const emaPriceCell = priceFeedSlice.loadRef();
2190+
const emaPrice = emaPriceCell.beginParse();
2191+
expect(emaPrice.loadInt(64)).toBe(expectedFeeds[i].emaPrice);
2192+
expect(emaPrice.loadUint(64)).toBe(expectedFeeds[i].emaConf);
2193+
expect(emaPrice.loadInt(32)).toBe(expectedFeeds[i].emaExpo);
2194+
expect(emaPrice.loadUint(64)).toBe(expectedFeeds[i].emaPublishTime);
2195+
2196+
if (i < expectedFeeds.length - 1) {
2197+
currentCell = feedCs.loadRef();
2198+
} else {
2199+
expect(feedCs.remainingRefs).toBe(0);
2200+
}
2201+
}
2202+
2203+
const senderAddress = cs.loadAddress();
2204+
expect(senderAddress?.toString()).toBe(
2205+
deployer.getSender().address.toString(),
2206+
);
2207+
2208+
const customPayloadCell = cs.loadRef();
2209+
const customPayloadSlice = customPayloadCell.beginParse();
2210+
const receivedPayload = Buffer.from(
2211+
customPayloadSlice.loadBuffer(CUSTOM_PAYLOAD.length),
2212+
);
2213+
expect(receivedPayload.toString("hex")).toBe(
2214+
CUSTOM_PAYLOAD.toString("hex"),
2215+
);
2216+
});
2217+
2218+
it("should successfully parse price feed updates with 9 price feeds", async () => {
2219+
await deployContract();
2220+
await updateGuardianSets(pythTest, deployer);
2221+
2222+
const sentValue = toNano("15");
2223+
const result = await pythTest.sendParsePriceFeedUpdates(
2224+
deployer.getSender(),
2225+
Buffer.from(HERMES_UPDATE_10_PRICE_FEEDS, "hex"),
2226+
sentValue,
2227+
[
2228+
BTC_PRICE_FEED_ID,
2229+
ETH_PRICE_FEED_ID,
2230+
DOGE_PRICE_FEED_ID,
2231+
SOL_USD_PRICE_FEED_ID,
2232+
PYTH_USD_PRICE_FEED_ID,
2233+
ARBITRUM_USD_PRICE_FEED_ID,
2234+
TON_USD_PRICE_FEED_ID,
2235+
AAPL_PRICE_FEED_ID,
2236+
ABNB_PRICE_FEED_ID,
2237+
],
2238+
HERMES_9_ETH_PUBLISH_TIME,
2239+
HERMES_9_ETH_PUBLISH_TIME,
2240+
deployer.address,
2241+
CUSTOM_PAYLOAD,
2242+
);
2243+
2244+
expect(result.transactions).toHaveTransaction({
2245+
from: deployer.address,
2246+
to: pythTest.address,
2247+
success: true,
2248+
outMessagesCount: 1,
2249+
});
2250+
2251+
expect(result.transactions).toHaveTransaction({
2252+
from: pythTest.address,
2253+
to: deployer.address,
2254+
success: true,
2255+
});
2256+
2257+
const outMessage = result.transactions[1].outMessages.values()[0];
2258+
2259+
expect(
2260+
(outMessage.info as CommonMessageInfoInternal).value.coins,
2261+
).toBeGreaterThan(0);
2262+
2263+
const cs = outMessage.body.beginParse();
2264+
2265+
const op = cs.loadUint(32);
2266+
expect(op).toBe(5);
2267+
2268+
const numPriceFeeds = cs.loadUint(8);
2269+
expect(numPriceFeeds).toBe(9);
2270+
2271+
const priceFeedsCell = cs.loadRef();
2272+
let currentCell = priceFeedsCell;
2273+
2274+
const expectedFeeds = [
2275+
{ id: BTC_PRICE_FEED_ID, price: HERMES_9_BTC_PRICE, conf: HERMES_9_BTC_CONF, expo: HERMES_9_BTC_EXPO, publishTime: HERMES_9_BTC_PUBLISH_TIME, emaPrice: HERMES_9_BTC_EMA_PRICE, emaConf: HERMES_9_BTC_EMA_CONF, emaExpo: HERMES_9_BTC_EMA_EXPO, emaPublishTime: HERMES_9_BTC_EMA_PUBLISH_TIME },
2276+
{ id: ETH_PRICE_FEED_ID, price: HERMES_9_ETH_PRICE, conf: HERMES_9_ETH_CONF, expo: HERMES_9_ETH_EXPO, publishTime: HERMES_9_ETH_PUBLISH_TIME, emaPrice: HERMES_9_ETH_EMA_PRICE, emaConf: HERMES_9_ETH_EMA_CONF, emaExpo: HERMES_9_ETH_EMA_EXPO, emaPublishTime: HERMES_9_ETH_EMA_PUBLISH_TIME },
2277+
{ id: DOGE_PRICE_FEED_ID, price: HERMES_9_DOGE_PRICE, conf: HERMES_9_DOGE_CONF, expo: HERMES_9_DOGE_EXPO, publishTime: HERMES_9_DOGE_PUBLISH_TIME, emaPrice: HERMES_9_DOGE_EMA_PRICE, emaConf: HERMES_9_DOGE_EMA_CONF, emaExpo: HERMES_9_DOGE_EMA_EXPO, emaPublishTime: HERMES_9_DOGE_EMA_PUBLISH_TIME },
2278+
{ id: SOL_USD_PRICE_FEED_ID, price: HERMES_9_SOL_PRICE, conf: HERMES_9_SOL_CONF, expo: HERMES_9_SOL_EXPO, publishTime: HERMES_9_SOL_PUBLISH_TIME, emaPrice: HERMES_9_SOL_EMA_PRICE, emaConf: HERMES_9_SOL_EMA_CONF, emaExpo: HERMES_9_SOL_EMA_EXPO, emaPublishTime: HERMES_9_SOL_EMA_PUBLISH_TIME },
2279+
{ id: PYTH_USD_PRICE_FEED_ID, price: HERMES_9_PYTH_PRICE, conf: HERMES_9_PYTH_CONF, expo: HERMES_9_PYTH_EXPO, publishTime: HERMES_9_PYTH_PUBLISH_TIME, emaPrice: HERMES_9_PYTH_EMA_PRICE, emaConf: HERMES_9_PYTH_EMA_CONF, emaExpo: HERMES_9_PYTH_EMA_EXPO, emaPublishTime: HERMES_9_PYTH_EMA_PUBLISH_TIME },
2280+
{ id: ARBITRUM_USD_PRICE_FEED_ID, price: HERMES_9_ARB_PRICE, conf: HERMES_9_ARB_CONF, expo: HERMES_9_ARB_EXPO, publishTime: HERMES_9_ARB_PUBLISH_TIME, emaPrice: HERMES_9_ARB_EMA_PRICE, emaConf: HERMES_9_ARB_EMA_CONF, emaExpo: HERMES_9_ARB_EMA_EXPO, emaPublishTime: HERMES_9_ARB_EMA_PUBLISH_TIME },
2281+
{ id: TON_USD_PRICE_FEED_ID, price: HERMES_9_TON_PRICE, conf: HERMES_9_TON_CONF, expo: HERMES_9_TON_EXPO, publishTime: HERMES_9_TON_PUBLISH_TIME, emaPrice: HERMES_9_TON_EMA_PRICE, emaConf: HERMES_9_TON_EMA_CONF, emaExpo: HERMES_9_TON_EMA_EXPO, emaPublishTime: HERMES_9_TON_EMA_PUBLISH_TIME },
2282+
{ id: AAPL_PRICE_FEED_ID, price: HERMES_9_AAPL_PRICE, conf: HERMES_9_AAPL_CONF, expo: HERMES_9_AAPL_EXPO, publishTime: HERMES_9_AAPL_PUBLISH_TIME, emaPrice: HERMES_9_AAPL_EMA_PRICE, emaConf: HERMES_9_AAPL_EMA_CONF, emaExpo: HERMES_9_AAPL_EMA_EXPO, emaPublishTime: HERMES_9_AAPL_EMA_PUBLISH_TIME },
2283+
{ id: ABNB_PRICE_FEED_ID, price: HERMES_9_ABNB_PRICE, conf: HERMES_9_ABNB_CONF, expo: HERMES_9_ABNB_EXPO, publishTime: HERMES_9_ABNB_PUBLISH_TIME, emaPrice: HERMES_9_ABNB_EMA_PRICE, emaConf: HERMES_9_ABNB_EMA_CONF, emaExpo: HERMES_9_ABNB_EMA_EXPO, emaPublishTime: HERMES_9_ABNB_EMA_PUBLISH_TIME },
2284+
];
2285+
2286+
for (let i = 0; i < expectedFeeds.length; i++) {
2287+
const feedCs = currentCell.beginParse();
2288+
const priceId = "0x" + feedCs.loadUintBig(256).toString(16).padStart(64, "0");
2289+
expect(priceId).toBe(expectedFeeds[i].id);
2290+
2291+
const priceFeedCell = feedCs.loadRef();
2292+
const priceFeedSlice = priceFeedCell.beginParse();
2293+
2294+
const currentPriceCell = priceFeedSlice.loadRef();
2295+
const currentPrice = currentPriceCell.beginParse();
2296+
expect(currentPrice.loadInt(64)).toBe(expectedFeeds[i].price);
2297+
expect(currentPrice.loadUint(64)).toBe(expectedFeeds[i].conf);
2298+
expect(currentPrice.loadInt(32)).toBe(expectedFeeds[i].expo);
2299+
expect(currentPrice.loadUint(64)).toBe(expectedFeeds[i].publishTime);
2300+
2301+
const emaPriceCell = priceFeedSlice.loadRef();
2302+
const emaPrice = emaPriceCell.beginParse();
2303+
expect(emaPrice.loadInt(64)).toBe(expectedFeeds[i].emaPrice);
2304+
expect(emaPrice.loadUint(64)).toBe(expectedFeeds[i].emaConf);
2305+
expect(emaPrice.loadInt(32)).toBe(expectedFeeds[i].emaExpo);
2306+
expect(emaPrice.loadUint(64)).toBe(expectedFeeds[i].emaPublishTime);
2307+
2308+
if (i < expectedFeeds.length - 1) {
2309+
currentCell = feedCs.loadRef();
2310+
} else {
2311+
expect(feedCs.remainingRefs).toBe(0);
2312+
}
2313+
}
2314+
2315+
const senderAddress = cs.loadAddress();
2316+
expect(senderAddress?.toString()).toBe(
2317+
deployer.getSender().address.toString(),
2318+
);
2319+
2320+
const customPayloadCell = cs.loadRef();
2321+
const customPayloadSlice = customPayloadCell.beginParse();
2322+
const receivedPayload = Buffer.from(
2323+
customPayloadSlice.loadBuffer(CUSTOM_PAYLOAD.length),
2324+
);
2325+
expect(receivedPayload.toString("hex")).toBe(
2326+
CUSTOM_PAYLOAD.toString("hex"),
2327+
);
2328+
});
19712329

1972-
it("should successfully parse price feed updates with 10 price feeds", async () => {
2330+
it("should successfully parse price feed updates with 11 price feeds", async () => {
19732331
await deployContract();
19742332
await updateGuardianSets(pythTest, deployer);
19752333

0 commit comments

Comments
 (0)