Messina SDK
  • Introduction
    • Introduction
  • SETTING UP
    • Installation
  • Contracts
    • Contracts
  • METHODS
    • Algorand
      • transferFromAlgorand()
      • getEmitterAddressAlgorand()
      • parseSequenceFromLogAlgorand()
      • redeemOnAlgorand()
    • EVM
      • getAllowanceEth()
      • approveEth()
      • transferFromEth()
      • getEmitterAddressEth()
      • parseSequenceFromLogEth()
      • redeemOnEth()
      • redeemOnEthWithType()
    • Guardian
      • getSignedVAA()
    • Utils
      • nativeToHexString()
  • Bridging
    • Algorand -> Ethereum
    • Ethereum -> Algorand
  • Contact
    • Email
    • Discord
    • Telegram
    • Twitter
Powered by GitBook
On this page
  • Method Parameters
  • Optional Parameters
  • Returns
  • Usage
  1. METHODS
  2. Guardian

getSignedVAA()

Function to interact with guardian and get the signed vaa data

Method Parameters

host: string

Guardian GRPC

emitterAddress: string

Emitter address

emitterChain: string

Emitter chain

sequence: string

Sequence number

Optional Parameters

retryTimeout: number

Retry timeout number

retryAttempts: number

Retry attempts number

Returns

Returns signed vaa as string

Usage

import { ethers } from "ethers";
import algosdk, { Account, Algodv2, assignGroupID, waitForConfirmation } from "algosdk";
import { transferFromAlgorand, nativeToHexString, CHAIN_ID_ETH, getEmitterAddressAlgorand, parseSequenceFromLogAlgorand } from "@algo-foundry/messina-sdk";
import { TransactionSignerPair } from "@algo-foundry/messina-sdk/lib/cjs/algorand";
import { getSignedVAA } from "@algo-foundry/messina-sdk/lib/cjs/rpc/getSignedVAAUpdate";

const client: algosdk.Algodv2 = new Algodv2(<ALGO_TOKEN>, <ALGO_ADDRESS>, <ALGOD_PORT>);
const wallet: Account = algosdk.mnemonicToSecretKey(<ALGO_MNEMONIC>)

const provider = new ethers.providers.WebSocketProvider(
      <ETH_NODE_URL>
    ) as any;   
const signer = new ethers.Wallet(<ETH_PRIVATE_KEY>, provider);

const hexStr = nativeToHexString(
      signer.address,
      CHAIN_ID_ETH
    );

if (!hexStr) {
   throw new Error("Failed to convert to hexStr");
 }    
            
const transferTxs = await transferFromAlgorand(
      client,
      BigInt(114976173),
      BigInt(114976156),
      wallet.addr,
      BigInt(105449176),
      BigInt(10000000), // AMOUNT_TO_TRANSFER * (10 ^ ASSET_DECIMALS)
      hexStr,
      CHAIN_ID_ETH,
      BigInt(0)
    );

const transferResult = await signSendAndConfirmAlgorand(
      client,
      transferTxs,
      wallet,
      4
    );
    
const emitterAddr = getEmitterAddressAlgorand(BigInt(114976173));
const sequence = await parseSequenceFromLogAlgorand(transferResult);

//Only for localhost ganache (remove if use infura)
let interval = setInterval(async () => {
     await provider.send('evm_mine')
}, 1000)

let signedVAA = await getSignedVAA(<GUARDIAN_GRPC>, emitterAddr, 'CHAIN_ID_ALGORAND', sequence, 1000, 5);    
// @ts-ignore
const vaaBytes = new Uint8Array(signedVAA!.match(/.{1,2}/g)!.map((byte: any) => parseInt(byte, 16)));  

//Only for localhost ganache (remove if use infura)
clearInterval(interval)

async function signSendAndConfirmAlgorand(
  algodClient: Algodv2,
  txs: TransactionSignerPair[],
  wallet: Account,
  waitRounds = 1
) {
  assignGroupID(txs.map((tx) => tx.tx));
  const signedTxns: Uint8Array[] = [];
  for (const tx of txs) {
    if (tx.signer) {
      signedTxns.push(await tx.signer.signTxn(tx.tx));
    } else {
      signedTxns.push(tx.tx.signTxn(wallet.sk));
    }
  }
  await algodClient.sendRawTransaction(signedTxns).do();

  const result = await waitForConfirmation(
    algodClient,
    txs[txs.length - 1].tx.txID(),
    waitRounds
  );
  return result;
}    
    
PreviousGuardianNextUtils

Last updated 6 months ago