From d21450719f70aad42a2737c63e67bf60e43b61f1 Mon Sep 17 00:00:00 2001 From: Kevin Peters Date: Mon, 15 Apr 2024 16:51:06 -0500 Subject: [PATCH] ntt/solana: relayer fixes --- .../src/routes/ntt/chains/solana/nttManager.ts | 5 ++++- .../src/routes/ntt/chains/solana/nttQuoter.ts | 10 ++++++++-- wormhole-connect/src/routes/ntt/nttRelay.ts | 5 ++++- 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/wormhole-connect/src/routes/ntt/chains/solana/nttManager.ts b/wormhole-connect/src/routes/ntt/chains/solana/nttManager.ts index 1094158ae..c58777890 100644 --- a/wormhole-connect/src/routes/ntt/chains/solana/nttManager.ts +++ b/wormhole-connect/src/routes/ntt/chains/solana/nttManager.ts @@ -136,12 +136,13 @@ export class NttManagerSolana { ); if (!nttConfig || !nttConfig.solanaQuoter) throw new Error('no quoter'); const quoter = new NttQuoter(nttConfig.solanaQuoter); - const fee = await quoter.calcRelayCost(toChain); + const fee = await quoter.calcRelayCost(toChain, nttConfig.address); const relayIx = await quoter.createRequestRelayInstruction( payer, outboxItem.publicKey, toChain, fee, + nttConfig.address, ); tx.add(relayIx); } @@ -160,6 +161,7 @@ export class NttManagerSolana { } async receiveMessage(vaa: string, payer: string): Promise { + await this.checkAbi(payer); const core = CONFIG.wh.mustGetContracts('solana').core; if (!core) throw new Error('Core not found'); const config = await this.getConfig(); @@ -313,6 +315,7 @@ export class NttManagerSolana { recipientAddress: string, payer: string, ): Promise { + await this.checkAbi(payer); const payerPublicKey = new PublicKey(payer); const releaseArgs = { payer: payerPublicKey, diff --git a/wormhole-connect/src/routes/ntt/chains/solana/nttQuoter.ts b/wormhole-connect/src/routes/ntt/chains/solana/nttQuoter.ts index 3af61692c..080619a6e 100644 --- a/wormhole-connect/src/routes/ntt/chains/solana/nttQuoter.ts +++ b/wormhole-connect/src/routes/ntt/chains/solana/nttQuoter.ts @@ -61,10 +61,14 @@ export class NttQuoter { } // calculates the relay cost in lamports - async calcRelayCost(chain: ChainName | ChainId, requestedGasDropoffEth = 0) { + async calcRelayCost( + chain: ChainName | ChainId, + nttProgramId: string, + requestedGasDropoffEth = 0, + ) { const [chainData, nttData, instanceData, rentCost] = await Promise.all([ this.getRegisteredChain(chain), - this.getRegisteredNtt(this.program.programId), + this.getRegisteredNtt(new PublicKey(nttProgramId)), this.getInstance(), this.program.provider.connection.getMinimumBalanceForRentExemption( this.program.account.relayRequest.size, @@ -96,6 +100,7 @@ export class NttQuoter { outboxItem: PublicKey, chain: ChainName | ChainId, maxFee: BN, + nttProgramId: string, ) { return this.program.methods .requestRelay({ @@ -106,6 +111,7 @@ export class NttQuoter { payer, instance: this.instance, registeredChain: this.registeredChainPda(toChainId(chain)), + registeredNtt: this.registeredNttPda(new PublicKey(nttProgramId)), outboxItem, relayRequest: this.relayRequestPda(outboxItem), systemProgram: SystemProgram.programId, diff --git a/wormhole-connect/src/routes/ntt/nttRelay.ts b/wormhole-connect/src/routes/ntt/nttRelay.ts index 18de73d29..fde942a78 100644 --- a/wormhole-connect/src/routes/ntt/nttRelay.ts +++ b/wormhole-connect/src/routes/ntt/nttRelay.ts @@ -119,7 +119,10 @@ export class NttRelay extends NttBase { if (toChainName(sourceChain) === 'solana') { if (!nttConfig.solanaQuoter) throw new Error('no solana quoter'); const quoter = new NttQuoter(nttConfig.solanaQuoter); - const relayCost = await quoter.calcRelayCost(destChain); + const relayCost = await quoter.calcRelayCost( + destChain, + nttConfig.address, + ); return { fee: BigNumber.from(relayCost.toString()), feeToken: 'native' }; } throw new Error('unsupported chain');