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 TransferNativeWithPayloadDataFields { nonce: number amount: BN targetAddress: types.ForeignAddrFields targetChain: number payload: Array cpiProgramId: PublicKey | null } export interface TransferNativeWithPayloadDataJSON { nonce: number amount: string targetAddress: types.ForeignAddrJSON targetChain: number payload: Array cpiProgramId: string | null } export class TransferNativeWithPayloadData { readonly nonce: number readonly amount: BN readonly targetAddress: types.ForeignAddr readonly targetChain: number readonly payload: Array readonly cpiProgramId: PublicKey | null constructor(fields: TransferNativeWithPayloadDataFields) { this.nonce = fields.nonce this.amount = fields.amount this.targetAddress = new types.ForeignAddr({ ...fields.targetAddress }) this.targetChain = fields.targetChain this.payload = fields.payload this.cpiProgramId = fields.cpiProgramId } static layout(property?: string) { return borsh.struct( [ borsh.u32("nonce"), borsh.u64("amount"), types.ForeignAddr.layout("targetAddress"), borsh.u16("targetChain"), borsh.vecU8("payload"), borsh.option(borsh.publicKey(), "cpiProgramId"), ], property ) } // eslint-disable-next-line @typescript-eslint/no-explicit-any static fromDecoded(obj: any) { return new TransferNativeWithPayloadData({ nonce: obj.nonce, amount: obj.amount, targetAddress: types.ForeignAddr.fromDecoded(obj.targetAddress), targetChain: obj.targetChain, payload: Array.from(obj.payload), cpiProgramId: obj.cpiProgramId, }) } static toEncodable(fields: TransferNativeWithPayloadDataFields) { return { nonce: fields.nonce, amount: fields.amount, targetAddress: types.ForeignAddr.toEncodable(fields.targetAddress), targetChain: fields.targetChain, payload: Buffer.from(fields.payload), cpiProgramId: fields.cpiProgramId, } } toJSON(): TransferNativeWithPayloadDataJSON { return { nonce: this.nonce, amount: this.amount.toString(), targetAddress: this.targetAddress.toJSON(), targetChain: this.targetChain, payload: this.payload, cpiProgramId: (this.cpiProgramId && this.cpiProgramId.toString()) || null, } } static fromJSON( obj: TransferNativeWithPayloadDataJSON ): TransferNativeWithPayloadData { return new TransferNativeWithPayloadData({ nonce: obj.nonce, amount: new BN(obj.amount), targetAddress: types.ForeignAddr.fromJSON(obj.targetAddress), targetChain: obj.targetChain, payload: obj.payload, cpiProgramId: (obj.cpiProgramId && new PublicKey(obj.cpiProgramId)) || null, }) } toEncodable() { return TransferNativeWithPayloadData.toEncodable(this) } }