/// <reference types="node" />
import { PublicKey, PublicKeyInitData, TransactionInstruction } from '@solana/web3.js';
import BN from 'bn.js';
export declare class SolanaUtils {
    /**
     * Signs arbitrary bytes
     */
    static signBytes(bytes: Buffer, ethPrivateKey: string): {
        signature: Buffer;
        recoveryId: number;
    };
    /**
     * Puts an instruction in a serializable form that our relay can understand.
     * Note we are faking the return type for callers to work with it easier
     */
    static prepareInstructionForRelay(instruction: TransactionInstruction): {
        programId: string;
        data: Buffer;
        keys: {
            pubkey: string;
            isSigner: boolean;
            isWritable: boolean;
        }[];
    };
    /**
     * Constructs a transfer ID
     */
    static constructTransferId(challengeId: string, specifier: string): string;
    /**
     * Constructs an attestation from inputs.
     */
    static constructAttestation(recipientEthAddress: string, tokenAmount: BN, transferId: string, oracleAddress?: string): Uint8Array;
    /**
     * Converts "UI" wAudio (i.e. 5) into properly denominated BN representation - (i.e. 5 * 10 ^ 8)
     */
    static uiAudioToBNWaudio(amount: number): BN;
    /**
     * Derives a program address from a program ID and pubkey as seed.
     * Optionally takes in seeds.
     * Returns the new pubkey and bump seeds.
     */
    static findProgramAddressFromPubkey(programId: PublicKey, pubkey: PublicKey, seed?: Uint8Array): Promise<[PublicKey, number]>;
    /**
     * Finds a program address, using both seeds, pubkey, and the derived authority.
     * Return [authority, derivedAddress, and bumpSeeds]
     *
     */
    static findProgramAddressWithAuthority(programId: PublicKey, address: PublicKey, seed: Uint8Array): Promise<readonly [PublicKey, PublicKey, number]>;
    /**
     * Converts an eth address hex represenatation to an array of Uint8s in big endian notation
     * @param ethAddress
     */
    static ethAddressToArray(ethAddress: string): Uint8Array;
    static newPublicKeyNullable<T extends PublicKeyInitData | null>(val: T): NullablePublicKey<T>;
}
type NullablePublicKey<T> = T extends null ? null : PublicKey;
export {};
