@@ -15,7 +15,7 @@ import * as ownable2step from '../../../wrappers/libraries/access/Ownable2Step'
1515import * as fq from '../../../wrappers/ccip/FeeQuoter'
1616import { Cell , toNano } from '@ton/core'
1717import { contractCode } from '../../../wrappers/codeLoader'
18- import { FEE_QUOTER_CONTRACT_VERSION_PREV } from '../../../wrappers/ccip/FeeQuoter'
18+ import { FEE_QUOTER_SUPPORTED_PREV_VERSIONS } from '../../../wrappers/ccip/FeeQuoter'
1919
2020describe ( 'FeeQuoter - Withdrawable Tests' , ( ) => {
2121 const withdrawableSpec = newWithdrawableSpec ( {
@@ -50,74 +50,31 @@ describe('FeeQuoter - TypeAndVersion Tests', () => {
5050
5151describe ( 'FeeQuoter - Upgrade Tests' , ( ) => {
5252 class FeeQuoter extends fq . FeeQuoter { }
53- class FeeQuoterPrev extends fq . FeeQuoter {
54- static code ( ) : Promise < Cell > {
55- return contractCode . ccip . release_1_6_0 ( 'FeeQuoter' )
56- }
57- }
53+
54+ const codeLoaders = {
55+ '1.6.0' : ( ) => contractCode . ccip . release_1_6_0 ( 'FeeQuoter' ) ,
56+ '1.6.1' : ( ) => contractCode . ccip . release_1_6_1 ( 'FeeQuoter' ) ,
57+ } as Record < string , ( ) => Promise < Cell > >
5858
5959 const upgradeSpec = UpgradeableSpec . newUpgradeSpec ( {
60- contractType : FeeQuoterPrev . type ( ) ,
61- prevVersion : FEE_QUOTER_CONTRACT_VERSION_PREV ,
60+ contractType : fq . FeeQuoter . type ( ) ,
61+ prevVersionConfigs : FEE_QUOTER_SUPPORTED_PREV_VERSIONS . map ( ( version ) => ( {
62+ version,
63+ getCode : codeLoaders [ version ] ,
64+ deploy : async ( blockchain , owner ) =>
65+ setupTestFeeQuoter ( owner , blockchain , await codeLoaders [ version ] ( ) ) ,
66+ } ) ) ,
6267 currentVersion : FeeQuoter . version ( ) ,
63- getPrevCode : ( ) => FeeQuoterPrev . code ( ) ,
6468 getCurrentCode : ( ) => FeeQuoter . code ( ) ,
6569 CurrentVersionConstructor : FeeQuoter ,
6670 upgradeValue : toNano ( '0.05' ) ,
67- deployPrevContract : async ( blockchain , owner ) =>
68- setupTestFeeQuoter ( owner , blockchain , await FeeQuoterPrev . code ( ) ) ,
6971 } )
7072 upgradeSpec . run ( [
7173 {
7274 code : 'FeeQuoter' ,
7375 name : 'feequoter' ,
7476 } ,
7577 ] )
76-
77- it ( 'should change tokenPriceStalenessThreshold on upgrade' , async ( ) => {
78- const blockchain = await Blockchain . create ( )
79- const deployer = await blockchain . treasury ( 'deployer' )
80-
81- // deploy prev version
82- const feeQuoterPrev = await setupTestFeeQuoter ( deployer , blockchain , await FeeQuoterPrev . code ( ) )
83- const loadStorage = async ( ) => {
84- const contract = await blockchain . getContract ( feeQuoterPrev . address )
85- if ( ! contract . account . account ) {
86- throw new Error ( 'Contract account not found' )
87- }
88- const storage = contract . account . account . storage
89- if ( storage . state . type != 'active' ) {
90- throw new Error ( 'Contract is not active' )
91- }
92- if ( ! storage . state . state . data ) {
93- throw new Error ( 'Contract has no data' )
94- }
95- return fq . builder . data . contractData . load ( storage . state . state . data . asSlice ( ) )
96- }
97- const originalStorage = await loadStorage ( )
98- const originalThreshold = originalStorage . tokenPriceStalenessThreshold
99- const expectedNewThreshold = 86400 // 24 hours in seconds
100- expect ( originalThreshold ) . not . toBe ( expectedNewThreshold ) // sanity check
101- const expectedNewStorage = {
102- ...originalStorage ,
103- tokenPriceStalenessThreshold : expectedNewThreshold ,
104- }
105-
106- // perform upgrade
107- const result = await feeQuoterPrev . sendUpgrade ( deployer . getSender ( ) , toNano ( '0.05' ) , {
108- queryId : 0n ,
109- code : await FeeQuoter . code ( ) ,
110- } )
111- expect ( result . transactions ) . toHaveTransaction ( {
112- from : deployer . address ,
113- to : feeQuoterPrev . address ,
114- success : true ,
115- } )
116-
117- // verify storage was updated
118- const newStorage = await loadStorage ( )
119- expect ( newStorage ) . toEqual ( expectedNewStorage )
120- } )
12178} )
12279
12380describe ( 'FeeQuoter - Ownable Tests' , ( ) => {
0 commit comments