import { PublicKey } from "@solana/web3.js" // eslint-disable-line @typescript-eslint/no-unused-vars import BN from "bn.js" // eslint-disable-line @typescript-eslint/no-unused-vars import * as types from "../types" // eslint-disable-line @typescript-eslint/no-unused-vars import * as borsh from "@project-serum/borsh" export interface MessageDataFields { vaaVersion: number consistencyLevel: number vaaTime: number vaaSignatureAccount: PublicKey submissionTime: number nonce: number sequence: BN emitterChain: number emitterAddress: Array payload: Array } export interface MessageDataJSON { vaaVersion: number consistencyLevel: number vaaTime: number vaaSignatureAccount: string submissionTime: number nonce: number sequence: string emitterChain: number emitterAddress: Array payload: Array } export class MessageData { readonly vaaVersion: number readonly consistencyLevel: number readonly vaaTime: number readonly vaaSignatureAccount: PublicKey readonly submissionTime: number readonly nonce: number readonly sequence: BN readonly emitterChain: number readonly emitterAddress: Array readonly payload: Array constructor(fields: MessageDataFields) { this.vaaVersion = fields.vaaVersion this.consistencyLevel = fields.consistencyLevel this.vaaTime = fields.vaaTime this.vaaSignatureAccount = fields.vaaSignatureAccount this.submissionTime = fields.submissionTime this.nonce = fields.nonce this.sequence = fields.sequence this.emitterChain = fields.emitterChain this.emitterAddress = fields.emitterAddress this.payload = fields.payload } static layout(property?: string) { return borsh.struct( [ borsh.u8("vaaVersion"), borsh.u8("consistencyLevel"), borsh.u32("vaaTime"), borsh.publicKey("vaaSignatureAccount"), borsh.u32("submissionTime"), borsh.u32("nonce"), borsh.u64("sequence"), borsh.u16("emitterChain"), borsh.array(borsh.u8(), 32, "emitterAddress"), borsh.vecU8("payload"), ], property ) } // eslint-disable-next-line @typescript-eslint/no-explicit-any static fromDecoded(obj: any) { return new MessageData({ vaaVersion: obj.vaaVersion, consistencyLevel: obj.consistencyLevel, vaaTime: obj.vaaTime, vaaSignatureAccount: obj.vaaSignatureAccount, submissionTime: obj.submissionTime, nonce: obj.nonce, sequence: obj.sequence, emitterChain: obj.emitterChain, emitterAddress: obj.emitterAddress, payload: Array.from(obj.payload), }) } static toEncodable(fields: MessageDataFields) { return { vaaVersion: fields.vaaVersion, consistencyLevel: fields.consistencyLevel, vaaTime: fields.vaaTime, vaaSignatureAccount: fields.vaaSignatureAccount, submissionTime: fields.submissionTime, nonce: fields.nonce, sequence: fields.sequence, emitterChain: fields.emitterChain, emitterAddress: fields.emitterAddress, payload: Buffer.from(fields.payload), } } toJSON(): MessageDataJSON { return { vaaVersion: this.vaaVersion, consistencyLevel: this.consistencyLevel, vaaTime: this.vaaTime, vaaSignatureAccount: this.vaaSignatureAccount.toString(), submissionTime: this.submissionTime, nonce: this.nonce, sequence: this.sequence.toString(), emitterChain: this.emitterChain, emitterAddress: this.emitterAddress, payload: this.payload, } } static fromJSON(obj: MessageDataJSON): MessageData { return new MessageData({ vaaVersion: obj.vaaVersion, consistencyLevel: obj.consistencyLevel, vaaTime: obj.vaaTime, vaaSignatureAccount: new PublicKey(obj.vaaSignatureAccount), submissionTime: obj.submissionTime, nonce: obj.nonce, sequence: new BN(obj.sequence), emitterChain: obj.emitterChain, emitterAddress: obj.emitterAddress, payload: obj.payload, }) } toEncodable() { return MessageData.toEncodable(this) } }