synapsecns / sanguine

Synapse Monorepo
MIT License
38 stars 29 forks source link

SDK: track older `FastBridge` transactions #2332

Open ChiTimesChi opened 5 months ago

ChiTimesChi commented 5 months ago

In the current implementation, only the txs done through the latest FastBridge contracts are trackable using the exposed SDK methods:

This should be fixed to support all historical FastBridge deployments for backwards compatibility.

greptile-apps[bot] commented 2 months ago

To support historical FastBridge deployments in the SDK methods getSynapseTxId and getBridgeTxStatus, follow these steps:

  1. Update getSynapseTxId method in fastBridgeRouter.ts:

    • Modify the method to iterate through all historical FastBridge contract addresses.
    • Example:
      public async getSynapseTxId(txHash: string): Promise<string> {
      const fastBridgeContracts = await this.getAllFastBridgeContracts();
      for (const fastBridgeContract of fastBridgeContracts) {
      try {
       const fastBridgeLog = await getMatchingTxLog(
         this.provider,
         txHash,
         fastBridgeContract,
         this.originEvents
       );
       const parsedLog = fastBridgeContract.interface.parseLog(fastBridgeLog);
       return parsedLog.args.transactionId;
      } catch (e) {
       // Continue to next contract if no matching log is found
      }
      }
      throw new Error('Transaction ID not found');
      }
  2. Update getBridgeTxStatus method in fastBridgeRouter.ts:

    • Modify the method to check the status across all historical FastBridge contract addresses.
    • Example:
      public async getBridgeTxStatus(synapseTxId: string): Promise<boolean> {
      const fastBridgeContracts = await this.getAllFastBridgeContracts();
      for (const fastBridgeContract of fastBridgeContracts) {
      try {
       const status = await fastBridgeContract.bridgeRelays(synapseTxId);
       if (status) return true;
      } catch (e) {
       // Continue to next contract if status is not found
      }
      }
      return false;
      }
  3. Implement getAllFastBridgeContracts method in fastBridgeRouter.ts:

    • This method should return an array of all FastBridge contract instances.
    • Example:
      private async getAllFastBridgeContracts(): Promise<FastBridgeContract[]> {
      const addresses = [
      '0x5523D3c98809DdDB82C686E152F5C58B1B0fB59E', // Add all historical addresses here
      // ... other addresses
      ];
      return addresses.map(address => new Contract(
      address,
      FastBridgeRouter.fastBridgeInterface,
      this.provider
      ) as FastBridgeContract);
      }

References

/packages/sdk-router/src/rfq/fastBridgeRouter.ts /packages/contracts-rfq/contracts/FastBridge.sol /packages/contracts-rfq/deployments/optimism/FastBridge.json

Ask Greptile

OladeleSeyi commented 1 week ago

Hi @trajan0x is this taken or stale ?