@@ -12,11 +12,12 @@ import {
1212 SendMode ,
1313 Builder ,
1414 Slice ,
15+ TupleItem ,
1516} from '@ton/core'
1617
1718import * as ownable2step from '../libraries/access/Ownable2Step'
1819import * as withdrawable from '../libraries/funding/Withdrawable'
19- import { CellCodec } from '../utils'
20+ import { CellCodec , StackCodec } from '../utils'
2021import { asSnakeData , fromSnakeData } from '../../src/utils'
2122import * as upgradeable from '../libraries/versioning/Upgradeable'
2223import * as typeAndVersion from '../libraries/versioning/TypeAndVersion'
@@ -387,6 +388,36 @@ export const builder = {
387388 }
388389 } ) ( ) ,
389390}
391+
392+ export const stackBuilder = {
393+ data : {
394+ ccipSend : ( ( ) : StackCodec < rt . CCIPSend > => {
395+ return {
396+ encode : function ( data : rt . CCIPSend ) : TupleItem [ ] {
397+ return [
398+ { type : 'int' , value : BigInt ( data . queryID ?? 0 ) } ,
399+ { type : 'int' , value : data . destChainSelector } ,
400+ {
401+ type : 'slice' ,
402+ cell : beginCell ( ) . storeBuffer ( data . receiver , data . receiver . length ) . endCell ( ) ,
403+ } ,
404+ { type : 'cell' , cell : data . data } ,
405+ {
406+ type : 'cell' ,
407+ cell : asSnakeData ( data . tokenAmounts , rt . builder . data . tokenAmount . encode ) ,
408+ } ,
409+ { type : 'slice' , cell : beginCell ( ) . storeAddress ( data . feeToken ) . endCell ( ) } ,
410+ { type : 'cell' , cell : data . extraArgs } ,
411+ ]
412+ } ,
413+ load : function ( src : TupleItem [ ] ) : rt . CCIPSend {
414+ throw new Error ( 'Function not implemented.' )
415+ } ,
416+ }
417+ } ) ( ) ,
418+ } ,
419+ }
420+
390421export abstract class Params { }
391422
392423export abstract class Opcodes {
@@ -504,6 +535,20 @@ export class FeeQuoter
504535 return upgradeable . sendUpgrade ( provider , via , value , body )
505536 }
506537
538+ async getValidatedFeeCell ( provider : ContractProvider , msg : rt . CCIPSend ) : Promise < bigint > {
539+ const result = await provider . get ( 'validatedFeeCell' , [
540+ { type : 'cell' , cell : rt . builder . message . in . ccipSend . encode ( msg ) . asCell ( ) } ,
541+ ] )
542+
543+ return result . stack . readBigNumber ( )
544+ }
545+
546+ async getValidatedFee ( provider : ContractProvider , msg : rt . CCIPSend ) : Promise < bigint > {
547+ const result = await provider . get ( 'validatedFee' , stackBuilder . data . ccipSend . encode ( msg ) )
548+
549+ return result . stack . readBigNumber ( )
550+ }
551+
507552 getTypeAndVersion ( provider : ContractProvider ) : Promise < { type : string ; version : string } > {
508553 return typeAndVersion . getTypeAndVersion ( provider )
509554 }
0 commit comments