@@ -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" ;
213350import { GUARDIAN_SET_0 , MAINNET_UPGRADE_VAAS } from "./utils/wormhole" ;
214351import { 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