1- import { rpc , xdr , StrKey , Contract , Address , nativeToScVal } from '@stellar/stellar-sdk' ;
1+ import { rpc , xdr , StrKey , Contract , nativeToScVal } from '@stellar/stellar-sdk' ;
22import logger from '../logger.js' ;
33
44const RPC_URL = process . env . SOROBAN_RPC_URL ?? 'https://soroban-testnet.stellar.org' ;
@@ -45,29 +45,53 @@ function decodeMap(val: xdr.ScVal): Record<string, xdr.ScVal> {
4545
4646async function simulateContractCall ( method : string , args : xdr . ScVal [ ] ) : Promise < xdr . ScVal > {
4747 const contract = new Contract ( CONTRACT_ID ) ;
48+
4849 const op = contract . call ( method , ...args ) ;
49- const tx = new ( await import ( '@stellar/stellar-sdk' ) ) . TransactionBuilder (
50- new ( await import ( '@stellar/stellar-sdk' ) ) . Account ( 'GAAZI4TCR3TY5OJHCTJC2A4QSY6CJWJH5IAJTGKIN2ER7LBNVKOCCWN' , '0' ) ,
51- { fee : '100' , networkPassphrase : process . env . STELLAR_NETWORK === 'mainnet'
52- ? ( await import ( '@stellar/stellar-sdk' ) ) . Networks . PUBLIC
53- : ( await import ( '@stellar/stellar-sdk' ) ) . Networks . TESTNET }
54- ) . addOperation ( op ) . setTimeout ( 30 ) . build ( ) ;
50+
51+ const { TransactionBuilder, Account, Networks } = await import ( '@stellar/stellar-sdk' ) ;
52+
53+ const tx = new TransactionBuilder (
54+ new Account (
55+ 'GAAZI4TCR3TY5OJHCTJC2A4QSY6CJWJH5IAJTGKIN2ER7LBNVKOCCWN' ,
56+ '0'
57+ ) ,
58+ {
59+ fee : '100' ,
60+ networkPassphrase :
61+ process . env . STELLAR_NETWORK === 'mainnet'
62+ ? Networks . PUBLIC
63+ : Networks . TESTNET ,
64+ }
65+ )
66+ . addOperation ( op )
67+ . setTimeout ( 30 )
68+ . build ( ) ;
5569
5670 const result = await server . simulateTransaction ( tx ) ;
71+
5772 if ( rpc . Api . isSimulationError ( result ) ) {
5873 throw new Error ( `Simulation error: ${ result . error } ` ) ;
5974 }
75+
6076 const simSuccess = result as rpc . Api . SimulateTransactionSuccessResponse ;
6177 return simSuccess . result ! . retval ;
6278}
6379
6480export async function getStreamFromChain ( streamId : number ) : Promise < ChainStream | null > {
6581 if ( ! CONTRACT_ID ) return null ;
82+
6683 try {
6784 const retval = await simulateContractCall ( 'get_stream' , [
6885 nativeToScVal ( streamId , { type : 'u64' } ) ,
6986 ] ) ;
87+
7088 const fields = decodeMap ( retval ) ;
89+
90+ const isActiveVal = fields [ 'is_active' ] ! ;
91+ const isActive =
92+ isActiveVal . switch ( ) . value === xdr . ScValType . scvBool ( ) . value &&
93+ isActiveVal . b ( ) === true ;
94+
7195 return {
7296 streamId,
7397 sender : decodeAddress ( fields [ 'sender' ] ! ) ,
@@ -77,7 +101,7 @@ export async function getStreamFromChain(streamId: number): Promise<ChainStream
77101 depositedAmount : decodeI128 ( fields [ 'deposited_amount' ] ! ) ,
78102 withdrawnAmount : decodeI128 ( fields [ 'withdrawn_amount' ] ! ) ,
79103 startTime : Number ( fields [ 'start_time' ] ! . u64 ( ) . toString ( ) ) ,
80- isActive : fields [ 'is_active' ] ! . switch ( ) . value === xdr . ScValType . scvBool ( ) . value && fields [ 'is_active' ] ! . b ( ) === true ,
104+ isActive,
81105 } ;
82106 } catch ( err ) {
83107 logger . error ( `[SorobanService] getStreamFromChain(${ streamId } ) failed:` , err ) ;
@@ -87,10 +111,12 @@ export async function getStreamFromChain(streamId: number): Promise<ChainStream
87111
88112export async function getClaimableFromChain ( streamId : number ) : Promise < string | null > {
89113 if ( ! CONTRACT_ID ) return null ;
114+
90115 try {
91116 const retval = await simulateContractCall ( 'get_claimable_amount' , [
92117 nativeToScVal ( streamId , { type : 'u64' } ) ,
93118 ] ) ;
119+
94120 return decodeI128 ( retval ) ;
95121 } catch ( err ) {
96122 logger . error ( `[SorobanService] getClaimableFromChain(${ streamId } ) failed:` , err ) ;
@@ -101,4 +127,4 @@ export async function getClaimableFromChain(streamId: number): Promise<string |
101127/** Returns true when the DB record is older than STALE_THRESHOLD_MS. */
102128export function isStale ( updatedAt : Date ) : boolean {
103129 return Date . now ( ) - updatedAt . getTime ( ) > STALE_THRESHOLD_MS ;
104- }
130+ }
0 commit comments