Sfoglia il codice sorgente

p2w-terra-relay: apply review nits

commit-id:5034b061
Stan Drozd 3 anni fa
parent
commit
08358da4df

+ 6 - 6
third_party/pyth/p2w-terra-relay/src/relay/iface.ts

@@ -9,19 +9,19 @@ export enum RelayRetcode {
   Success = 0,
   Fail, // Generic failure
   AlreadyExecuted, // TODO(2022-03-18): Terra-specific leak, remove ASAP
-  Timeout, // Our desired timeout expiredW
+  Timeout, // Our desired timeout expired
   SeqNumMismatch, // TODO(2022-03-18): Terra-specific leak, remove ASAP
   InsufficientFunds, // Payer's too poor
 }
 
 /// relay() return type
-export class RelayResult<T> {
+export class RelayResult {
   code: RelayRetcode;
-  val: T;
+  txHashes: Array<string>; /// One or more tx hashes produced by a successful relay() call
 
-  constructor(code: RelayRetcode, val: T) {
+  constructor(code: RelayRetcode, hashes: Array<string> ) {
     this.code = code;
-    this.val = val;
+    this.txHashes = hashes;
   }
 
   is_ok(): boolean {
@@ -32,7 +32,7 @@ export class RelayResult<T> {
 /// Represents a target chain relay client generically.
 export interface Relay {
   /// Relay a signed Wormhole payload to this chain
-  relay(signedVAAs: Array<string>): Promise<RelayResult<any>>;
+  relay(signedVAAs: Array<string>): Promise<RelayResult>;
 
   /// Query price data on this chain
   query(priceId: PriceId): Promise<any>;

+ 9 - 15
third_party/pyth/p2w-terra-relay/src/relay/terra.ts

@@ -19,8 +19,6 @@ export class TerraRelay implements Relay {
   readonly coin: string;
   readonly contractAddress: string;
   readonly lcdConfig: LCDClientConfig;
-  walletSeqNum: number = 0;
-  walletAccountNum: number = 0;
 
   constructor(cfg: {
     nodeUrl: string;
@@ -83,15 +81,11 @@ export class TerraRelay implements Relay {
       }
 
       const tx = await wallet.createAndSignTx({
-        sequence: await wallet.sequence(),
-        accountNumber: await wallet.accountNumber(),
         msgs: msgs,
         memo: "P2T",
         feeDenoms: [this.coin],
       });
 
-      this.walletSeqNum = this.walletSeqNum + 1;
-
       logger.debug("TIME: sending msg");
       terraRes = await lcdClient.tx.broadcastSync(tx);
       logger.debug(
@@ -107,19 +101,19 @@ export class TerraRelay implements Relay {
               ? terraRes.txhash
               : "<INTERNAL: no txhash for AlreadyExecuted>"
           );
-          return new RelayResult(RelayRetcode.AlreadyExecuted, null);
+          return new RelayResult(RelayRetcode.AlreadyExecuted, []);
         } else if (terraRes.raw_log.search("insufficient funds") >= 0) {
           logger.error(
             "relay failed due to insufficient funds: ",
             JSON.stringify(terraRes)
           );
-          return new RelayResult(RelayRetcode.InsufficientFunds, null);
+          return new RelayResult(RelayRetcode.InsufficientFunds, []);
         } else if (terraRes.raw_log.search("failed") >= 0) {
           logger.error(
             "relay seems to have failed: ",
             JSON.stringify(terraRes)
           );
-          return new RelayResult(RelayRetcode.Fail, null);
+          return new RelayResult(RelayRetcode.Fail, []);
         }
       } else {
         logger.warn("No logs were found, result: ", JSON.stringify(terraRes));
@@ -127,7 +121,7 @@ export class TerraRelay implements Relay {
 
       // Base case, no errors were detected and no exceptions were thrown
       if (terraRes.txhash) {
-        return new RelayResult(RelayRetcode.Success, terraRes.txhash);
+        return new RelayResult(RelayRetcode.Success, [terraRes.txhash]);
       }
     } catch (e: any) {
       // Act on known Terra exceptions
@@ -137,25 +131,25 @@ export class TerraRelay implements Relay {
         e.message.search("exceeded") >= 0
       ) {
         logger.error("relay timed out: %o", e);
-        return new RelayResult(RelayRetcode.Timeout, null);
+        return new RelayResult(RelayRetcode.Timeout, []);
       } else if (
         e.response?.data?.error &&
         e.response.data.error.search("VaaAlreadyExecuted") >= 0
       ) {
-        return new RelayResult(RelayRetcode.AlreadyExecuted, null);
+        return new RelayResult(RelayRetcode.AlreadyExecuted, []);
       } else if (
         e.response?.data?.message &&
         e.response.data.message.search("account sequence mismatch") >= 0
       ) {
-        return new RelayResult(RelayRetcode.SeqNumMismatch, null);
+        return new RelayResult(RelayRetcode.SeqNumMismatch, []);
       } else {
         logger.error("Unknown error:", e.toString());
-        return new RelayResult(RelayRetcode.Fail, null);
+        return new RelayResult(RelayRetcode.Fail, []);
       }
     }
 
     logger.error("INTERNAL: Terra relay() logic failed to produce a result");
-    return new RelayResult(RelayRetcode.Fail, null);
+    return new RelayResult(RelayRetcode.Fail, []);
   }
 
   async query(priceId: PriceId) {

+ 4 - 4
third_party/pyth/p2w-terra-relay/src/worker.ts

@@ -273,8 +273,8 @@ const RELAY_INSUFFICIENT_FUNDS: number = 5;
 
 async function relayEventsNotLocked(
   messages: Array<string>
-): Promise<RelayResult<any>> {
-  let relayResult: RelayResult<any> | null = null;
+): Promise<RelayResult> {
+  let relayResult: RelayResult | null = null;
   let retry: boolean = false;
 
   // CAUTION(2022-03-21): The retry logic is not very efficient at
@@ -335,7 +335,7 @@ async function relayEventsNotLocked(
 
   if (!relayResult) {
     logger.error("INTERNAL: worker failed to produce a relay result.");
-    relayResult = new RelayResult(RelayRetcode.Fail, null);
+    relayResult = new RelayResult(RelayRetcode.Fail, []);
   }
 
   return relayResult;
@@ -343,7 +343,7 @@ async function relayEventsNotLocked(
 
 async function finalizeEventsAlreadyLocked(
   currObjs: Array<CurrentEntry>,
-  relayResult: RelayResult<any>,
+  relayResult: RelayResult,
   sendTime: Date
 ) {
   for (let idx = 0; idx < currObjs.length; ++idx) {