@@ -143,6 +143,142 @@ import {
143
143
HERMES_10_AMZN_EMA_CONF ,
144
144
HERMES_10_AMZN_EMA_EXPO ,
145
145
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 ,
146
282
HERMES_7_BTC_PRICE ,
147
283
HERMES_7_BTC_CONF ,
148
284
HERMES_7_BTC_EXPO ,
@@ -209,6 +345,7 @@ import {
209
345
HERMES_1_BTC_EMA_CONF ,
210
346
HERMES_1_BTC_EMA_EXPO ,
211
347
HERMES_1_BTC_EMA_PUBLISH_TIME ,
348
+ HERMES_UPDATE_8_PRICE_FEEDS ,
212
349
} from "./utils/pyth" ;
213
350
import { GUARDIAN_SET_0 , MAINNET_UPGRADE_VAAS } from "./utils/wormhole" ;
214
351
import { DataSource } from "@pythnetwork/xc-admin-common" ;
@@ -1968,8 +2105,229 @@ describe("PythTest", () => {
1968
2105
) ;
1969
2106
} ) ;
1970
2107
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
+ } ) ;
1971
2329
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 ( ) => {
1973
2331
await deployContract ( ) ;
1974
2332
await updateGuardianSets ( pythTest , deployer ) ;
1975
2333
0 commit comments