Ayush Suresh 3 månader sedan
förälder
incheckning
43cdc7ca51
1 ändrade filer med 359 tillägg och 1 borttagningar
  1. 359 1
      target_chains/ton/contracts/tests/PythTest.spec.ts

+ 359 - 1
target_chains/ton/contracts/tests/PythTest.spec.ts

@@ -143,6 +143,142 @@ import {
   HERMES_10_AMZN_EMA_CONF,
   HERMES_10_AMZN_EMA_EXPO,
   HERMES_10_AMZN_EMA_PUBLISH_TIME,
+  HERMES_9_BTC_PRICE,
+  HERMES_9_BTC_CONF,
+  HERMES_9_BTC_EXPO,
+  HERMES_9_BTC_PUBLISH_TIME,
+  HERMES_9_BTC_EMA_PRICE,
+  HERMES_9_BTC_EMA_CONF,
+  HERMES_9_BTC_EMA_EXPO,
+  HERMES_9_BTC_EMA_PUBLISH_TIME,
+  HERMES_9_ETH_PRICE,
+  HERMES_9_ETH_CONF,
+  HERMES_9_ETH_EXPO,
+  HERMES_9_ETH_PUBLISH_TIME,
+  HERMES_9_ETH_EMA_PRICE,
+  HERMES_9_ETH_EMA_CONF,
+  HERMES_9_ETH_EMA_EXPO,
+  HERMES_9_ETH_EMA_PUBLISH_TIME,
+  HERMES_9_DOGE_PRICE,
+  HERMES_9_DOGE_CONF,
+  HERMES_9_DOGE_EXPO,
+  HERMES_9_DOGE_PUBLISH_TIME,
+  HERMES_9_DOGE_EMA_PRICE,
+  HERMES_9_DOGE_EMA_CONF,
+  HERMES_9_DOGE_EMA_EXPO,
+  HERMES_9_DOGE_EMA_PUBLISH_TIME,
+  HERMES_9_SOL_PRICE,
+  HERMES_9_SOL_CONF,
+  HERMES_9_SOL_EXPO,
+  HERMES_9_SOL_PUBLISH_TIME,
+  HERMES_9_SOL_EMA_PRICE,
+  HERMES_9_SOL_EMA_CONF,
+  HERMES_9_SOL_EMA_EXPO,
+  HERMES_9_SOL_EMA_PUBLISH_TIME,
+  HERMES_9_PYTH_PRICE,
+  HERMES_9_PYTH_CONF,
+  HERMES_9_PYTH_EXPO,
+  HERMES_9_PYTH_PUBLISH_TIME,
+  HERMES_9_PYTH_EMA_PRICE,
+  HERMES_9_PYTH_EMA_CONF,
+  HERMES_9_PYTH_EMA_EXPO,
+  HERMES_9_PYTH_EMA_PUBLISH_TIME,
+  HERMES_9_ARB_PRICE,
+  HERMES_9_ARB_CONF,
+  HERMES_9_ARB_EXPO,
+  HERMES_9_ARB_PUBLISH_TIME,
+  HERMES_9_ARB_EMA_PRICE,
+  HERMES_9_ARB_EMA_CONF,
+  HERMES_9_ARB_EMA_EXPO,
+  HERMES_9_ARB_EMA_PUBLISH_TIME,
+  HERMES_9_TON_PRICE,
+  HERMES_9_TON_CONF,
+  HERMES_9_TON_EXPO,
+  HERMES_9_TON_PUBLISH_TIME,
+  HERMES_9_TON_EMA_PRICE,
+  HERMES_9_TON_EMA_CONF,
+  HERMES_9_TON_EMA_EXPO,
+  HERMES_9_TON_EMA_PUBLISH_TIME,
+  HERMES_9_AAPL_PRICE,
+  HERMES_9_AAPL_CONF,
+  HERMES_9_AAPL_EXPO,
+  HERMES_9_AAPL_PUBLISH_TIME,
+  HERMES_9_AAPL_EMA_PRICE,
+  HERMES_9_AAPL_EMA_CONF,
+  HERMES_9_AAPL_EMA_EXPO,
+  HERMES_9_AAPL_EMA_PUBLISH_TIME,
+  HERMES_9_ABNB_PRICE,
+  HERMES_9_ABNB_CONF,
+  HERMES_9_ABNB_EXPO,
+  HERMES_9_ABNB_PUBLISH_TIME,
+  HERMES_9_ABNB_EMA_PRICE,
+  HERMES_9_ABNB_EMA_CONF,
+  HERMES_9_ABNB_EMA_EXPO,
+  HERMES_9_ABNB_EMA_PUBLISH_TIME,
+  HERMES_8_BTC_PRICE,
+  HERMES_8_BTC_CONF,
+  HERMES_8_BTC_EXPO,
+  HERMES_8_BTC_PUBLISH_TIME,
+  HERMES_8_BTC_EMA_PRICE,
+  HERMES_8_BTC_EMA_CONF,
+  HERMES_8_BTC_EMA_EXPO,
+  HERMES_8_BTC_EMA_PUBLISH_TIME,
+  HERMES_8_ETH_PRICE,
+  HERMES_8_ETH_CONF,
+  HERMES_8_ETH_EXPO,
+  HERMES_8_ETH_PUBLISH_TIME,
+  HERMES_8_ETH_EMA_PRICE,
+  HERMES_8_ETH_EMA_CONF,
+  HERMES_8_ETH_EMA_EXPO,
+  HERMES_8_ETH_EMA_PUBLISH_TIME,
+  HERMES_8_DOGE_PRICE,
+  HERMES_8_DOGE_CONF,
+  HERMES_8_DOGE_EXPO,
+  HERMES_8_DOGE_PUBLISH_TIME,
+  HERMES_8_DOGE_EMA_PRICE,
+  HERMES_8_DOGE_EMA_CONF,
+  HERMES_8_DOGE_EMA_EXPO,
+  HERMES_8_DOGE_EMA_PUBLISH_TIME,
+  HERMES_8_SOL_PRICE,
+  HERMES_8_SOL_CONF,
+  HERMES_8_SOL_EXPO,
+  HERMES_8_SOL_PUBLISH_TIME,
+  HERMES_8_SOL_EMA_PRICE,
+  HERMES_8_SOL_EMA_CONF,
+  HERMES_8_SOL_EMA_EXPO,
+  HERMES_8_SOL_EMA_PUBLISH_TIME,
+  HERMES_8_PYTH_PRICE,
+  HERMES_8_PYTH_CONF,
+  HERMES_8_PYTH_EXPO,
+  HERMES_8_PYTH_PUBLISH_TIME,
+  HERMES_8_PYTH_EMA_PRICE,
+  HERMES_8_PYTH_EMA_CONF,
+  HERMES_8_PYTH_EMA_EXPO,
+  HERMES_8_PYTH_EMA_PUBLISH_TIME,
+  HERMES_8_ARB_PRICE,
+  HERMES_8_ARB_CONF,
+  HERMES_8_ARB_EXPO,
+  HERMES_8_ARB_PUBLISH_TIME,
+  HERMES_8_ARB_EMA_PRICE,
+  HERMES_8_ARB_EMA_CONF,
+  HERMES_8_ARB_EMA_EXPO,
+  HERMES_8_ARB_EMA_PUBLISH_TIME,
+  HERMES_8_TON_PRICE,
+  HERMES_8_TON_CONF,
+  HERMES_8_TON_EXPO,
+  HERMES_8_TON_PUBLISH_TIME,
+  HERMES_8_TON_EMA_PRICE,
+  HERMES_8_TON_EMA_CONF,
+  HERMES_8_TON_EMA_EXPO,
+  HERMES_8_TON_EMA_PUBLISH_TIME,
+  HERMES_8_AAPL_PRICE,
+  HERMES_8_AAPL_CONF,
+  HERMES_8_AAPL_EXPO,
+  HERMES_8_AAPL_PUBLISH_TIME,
+  HERMES_8_AAPL_EMA_PRICE,
+  HERMES_8_AAPL_EMA_CONF,
+  HERMES_8_AAPL_EMA_EXPO,
+  HERMES_8_AAPL_EMA_PUBLISH_TIME,
   HERMES_7_BTC_PRICE,
   HERMES_7_BTC_CONF,
   HERMES_7_BTC_EXPO,
@@ -209,6 +345,7 @@ import {
   HERMES_1_BTC_EMA_CONF,
   HERMES_1_BTC_EMA_EXPO,
   HERMES_1_BTC_EMA_PUBLISH_TIME,
+  HERMES_UPDATE_8_PRICE_FEEDS,
 } from "./utils/pyth";
 import { GUARDIAN_SET_0, MAINNET_UPGRADE_VAAS } from "./utils/wormhole";
 import { DataSource } from "@pythnetwork/xc-admin-common";
@@ -1968,8 +2105,229 @@ describe("PythTest", () => {
     );
   });
 
+  it("should successfully parse price feed updates with 8 price feeds", async () => {
+    await deployContract();
+    await updateGuardianSets(pythTest, deployer);
+
+    const sentValue = toNano("15");
+    const result = await pythTest.sendParsePriceFeedUpdates(
+      deployer.getSender(),
+      Buffer.from(HERMES_UPDATE_8_PRICE_FEEDS, "hex"),
+      sentValue,
+      [
+        BTC_PRICE_FEED_ID,
+        ETH_PRICE_FEED_ID,
+        DOGE_PRICE_FEED_ID,
+        SOL_USD_PRICE_FEED_ID,
+        PYTH_USD_PRICE_FEED_ID,
+        ARBITRUM_USD_PRICE_FEED_ID,
+        TON_USD_PRICE_FEED_ID,
+        AAPL_PRICE_FEED_ID
+      ],
+      HERMES_8_ETH_PUBLISH_TIME,
+      HERMES_8_ETH_PUBLISH_TIME,
+      deployer.address,
+      CUSTOM_PAYLOAD,
+    );
+
+    expect(result.transactions).toHaveTransaction({
+      from: deployer.address,
+      to: pythTest.address,
+      success: true,
+      outMessagesCount: 1,
+    });
+
+    expect(result.transactions).toHaveTransaction({
+      from: pythTest.address,
+      to: deployer.address,
+      success: true,
+    });
+
+    const outMessage = result.transactions[1].outMessages.values()[0];
+
+    expect(
+      (outMessage.info as CommonMessageInfoInternal).value.coins,
+    ).toBeGreaterThan(0);
+
+    const cs = outMessage.body.beginParse();
+
+    const op = cs.loadUint(32);
+    expect(op).toBe(5);
+
+    const numPriceFeeds = cs.loadUint(8);
+    expect(numPriceFeeds).toBe(8);
+
+    const priceFeedsCell = cs.loadRef();
+    let currentCell = priceFeedsCell;
+
+    const expectedFeeds = [
+      { 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 },
+      { 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 },
+      { 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 },
+      { 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 },
+      { 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 },
+      { 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 },
+      { 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 },
+      { 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 },
+    ];
+
+    for (let i = 0; i < expectedFeeds.length; i++) {
+      const feedCs = currentCell.beginParse();
+      const priceId = "0x" + feedCs.loadUintBig(256).toString(16).padStart(64, "0");
+      expect(priceId).toBe(expectedFeeds[i].id);
+
+      const priceFeedCell = feedCs.loadRef();
+      const priceFeedSlice = priceFeedCell.beginParse();
+
+      const currentPriceCell = priceFeedSlice.loadRef();
+      const currentPrice = currentPriceCell.beginParse();
+      expect(currentPrice.loadInt(64)).toBe(expectedFeeds[i].price);
+      expect(currentPrice.loadUint(64)).toBe(expectedFeeds[i].conf);
+      expect(currentPrice.loadInt(32)).toBe(expectedFeeds[i].expo);
+      expect(currentPrice.loadUint(64)).toBe(expectedFeeds[i].publishTime);
+
+      const emaPriceCell = priceFeedSlice.loadRef();
+      const emaPrice = emaPriceCell.beginParse();
+      expect(emaPrice.loadInt(64)).toBe(expectedFeeds[i].emaPrice);
+      expect(emaPrice.loadUint(64)).toBe(expectedFeeds[i].emaConf);
+      expect(emaPrice.loadInt(32)).toBe(expectedFeeds[i].emaExpo);
+      expect(emaPrice.loadUint(64)).toBe(expectedFeeds[i].emaPublishTime);
+
+      if (i < expectedFeeds.length - 1) {
+        currentCell = feedCs.loadRef();
+      } else {
+        expect(feedCs.remainingRefs).toBe(0);
+      }
+    }
+
+    const senderAddress = cs.loadAddress();
+    expect(senderAddress?.toString()).toBe(
+      deployer.getSender().address.toString(),
+    );
+
+    const customPayloadCell = cs.loadRef();
+    const customPayloadSlice = customPayloadCell.beginParse();
+    const receivedPayload = Buffer.from(
+      customPayloadSlice.loadBuffer(CUSTOM_PAYLOAD.length),
+    );
+    expect(receivedPayload.toString("hex")).toBe(
+      CUSTOM_PAYLOAD.toString("hex"),
+    );
+  });
+
+  it("should successfully parse price feed updates with 9 price feeds", async () => {
+    await deployContract();
+    await updateGuardianSets(pythTest, deployer);
+
+    const sentValue = toNano("15");
+    const result = await pythTest.sendParsePriceFeedUpdates(
+      deployer.getSender(),
+      Buffer.from(HERMES_UPDATE_10_PRICE_FEEDS, "hex"),
+      sentValue,
+      [
+        BTC_PRICE_FEED_ID,
+        ETH_PRICE_FEED_ID,
+        DOGE_PRICE_FEED_ID,
+        SOL_USD_PRICE_FEED_ID,
+        PYTH_USD_PRICE_FEED_ID,
+        ARBITRUM_USD_PRICE_FEED_ID,
+        TON_USD_PRICE_FEED_ID,
+        AAPL_PRICE_FEED_ID,
+        ABNB_PRICE_FEED_ID,
+      ],
+      HERMES_9_ETH_PUBLISH_TIME,
+      HERMES_9_ETH_PUBLISH_TIME,
+      deployer.address,
+      CUSTOM_PAYLOAD,
+    );
+
+    expect(result.transactions).toHaveTransaction({
+      from: deployer.address,
+      to: pythTest.address,
+      success: true,
+      outMessagesCount: 1,
+    });
+
+    expect(result.transactions).toHaveTransaction({
+      from: pythTest.address,
+      to: deployer.address,
+      success: true,
+    });
+
+    const outMessage = result.transactions[1].outMessages.values()[0];
+
+    expect(
+      (outMessage.info as CommonMessageInfoInternal).value.coins,
+    ).toBeGreaterThan(0);
+
+    const cs = outMessage.body.beginParse();
+
+    const op = cs.loadUint(32);
+    expect(op).toBe(5);
+
+    const numPriceFeeds = cs.loadUint(8);
+    expect(numPriceFeeds).toBe(9);
+
+    const priceFeedsCell = cs.loadRef();
+    let currentCell = priceFeedsCell;
+
+    const expectedFeeds = [
+      { 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 },
+      { 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 },
+      { 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 },
+      { 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 },
+      { 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 },
+      { 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 },
+      { 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 },
+      { 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 },
+      { 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 },
+    ];
+
+    for (let i = 0; i < expectedFeeds.length; i++) {
+      const feedCs = currentCell.beginParse();
+      const priceId = "0x" + feedCs.loadUintBig(256).toString(16).padStart(64, "0");
+      expect(priceId).toBe(expectedFeeds[i].id);
+
+      const priceFeedCell = feedCs.loadRef();
+      const priceFeedSlice = priceFeedCell.beginParse();
+
+      const currentPriceCell = priceFeedSlice.loadRef();
+      const currentPrice = currentPriceCell.beginParse();
+      expect(currentPrice.loadInt(64)).toBe(expectedFeeds[i].price);
+      expect(currentPrice.loadUint(64)).toBe(expectedFeeds[i].conf);
+      expect(currentPrice.loadInt(32)).toBe(expectedFeeds[i].expo);
+      expect(currentPrice.loadUint(64)).toBe(expectedFeeds[i].publishTime);
+
+      const emaPriceCell = priceFeedSlice.loadRef();
+      const emaPrice = emaPriceCell.beginParse();
+      expect(emaPrice.loadInt(64)).toBe(expectedFeeds[i].emaPrice);
+      expect(emaPrice.loadUint(64)).toBe(expectedFeeds[i].emaConf);
+      expect(emaPrice.loadInt(32)).toBe(expectedFeeds[i].emaExpo);
+      expect(emaPrice.loadUint(64)).toBe(expectedFeeds[i].emaPublishTime);
+
+      if (i < expectedFeeds.length - 1) {
+        currentCell = feedCs.loadRef();
+      } else {
+        expect(feedCs.remainingRefs).toBe(0);
+      }
+    }
+
+    const senderAddress = cs.loadAddress();
+    expect(senderAddress?.toString()).toBe(
+      deployer.getSender().address.toString(),
+    );
+
+    const customPayloadCell = cs.loadRef();
+    const customPayloadSlice = customPayloadCell.beginParse();
+    const receivedPayload = Buffer.from(
+      customPayloadSlice.loadBuffer(CUSTOM_PAYLOAD.length),
+    );
+    expect(receivedPayload.toString("hex")).toBe(
+      CUSTOM_PAYLOAD.toString("hex"),
+    );
+  });
 
-  it("should successfully parse price feed updates with 10 price feeds", async () => {
+  it("should successfully parse price feed updates with 11 price feeds", async () => {
     await deployContract();
     await updateGuardianSets(pythTest, deployer);