@@ -35,9 +35,11 @@ type Client struct {
3535 eventProcessor * common.EventProcessor
3636 eventConfirmer * EventConfirmer
3737 gasOracle * GasOracle
38+ txBuilder * TxBuilder
3839
3940 // Dependencies
4041 pushSigner * pushsigner.Signer
42+ nodeHome string
4143}
4244
4345// NewClient creates a new Solana chain client
@@ -46,6 +48,7 @@ func NewClient(
4648 database * db.DB ,
4749 chainConfig * config.ChainSpecificConfig ,
4850 pushSigner * pushsigner.Signer ,
51+ nodeHome string ,
4952 logger zerolog.Logger ,
5053) (* Client , error ) {
5154 if config == nil {
@@ -78,6 +81,7 @@ func NewClient(
7881 chainConfig : chainConfig ,
7982 database : database ,
8083 pushSigner : pushSigner ,
84+ nodeHome : nodeHome ,
8185 }
8286
8387 // Initialize components that don't require RPC client
@@ -179,6 +183,14 @@ func (c *Client) GetConfig() *uregistrytypes.ChainConfig {
179183 return c .registryConfig
180184}
181185
186+ // GetTxBuilder returns the OutboundTxBuilder for this chain
187+ func (c * Client ) GetTxBuilder () (common.OutboundTxBuilder , error ) {
188+ if c .txBuilder == nil {
189+ return nil , fmt .Errorf ("txBuilder not available for chain %s (gateway not configured)" , c .chainIDStr )
190+ }
191+ return c .txBuilder , nil
192+ }
193+
182194// initializeComponents creates all components that require the RPC client
183195func (c * Client ) initializeComponents () error {
184196 // Create event listener if gateway is configured
@@ -235,6 +247,21 @@ func (c *Client) initializeComponents() error {
235247 )
236248 }
237249
250+ // Create txBuilder if gateway is configured
251+ if c .registryConfig != nil && c .registryConfig .GatewayAddress != "" {
252+ txBuilder , err := NewTxBuilder (
253+ c .rpcClient ,
254+ c .chainIDStr ,
255+ c .registryConfig .GatewayAddress ,
256+ c .nodeHome ,
257+ c .logger ,
258+ )
259+ if err != nil {
260+ return fmt .Errorf ("failed to create txBuilder: %w" , err )
261+ }
262+ c .txBuilder = txBuilder
263+ }
264+
238265 return nil
239266}
240267
0 commit comments