import type ScriptTemplate from '../ScriptTemplate.js';
import LockingScript from '../LockingScript.js';
import UnlockingScript from '../UnlockingScript.js';
import { PublicKey } from '../../primitives/index.js';
import { WalletInterface, WalletProtocol } from '../../wallet/Wallet.interfaces.js';
import { Transaction } from '../../transaction/index.js';
export default class PushDrop implements ScriptTemplate {
    wallet: WalletInterface;
    originator?: string;
    /**
     * Decodes a PushDrop script back into its token fields and the locking public key. If a signature was present, it will be the last field returned.
     * @param script PushDrop script to decode back into token fields
     * @param lockPosition Where the locking public key is positioned in the script ('before' = at start, 'after' = at end after DROP operations)
     * @returns An object containing PushDrop token fields and the locking public key. If a signature was included, it will be the last field.
     */
    static decode(script: LockingScript, lockPosition?: 'before' | 'after'): {
        lockingPublicKey: PublicKey;
        fields: number[][];
    };
    /**
     * Constructs a new instance of the PushDrop class.
     *
     * @param {WalletInterface} wallet - The wallet interface used for creating signatures and accessing public keys.
     * @param {string} originator — The originator to use with Wallet requests
     */
    constructor(wallet: WalletInterface, originator?: string);
    /**
     * Creates a PushDrop locking script with arbitrary data fields and a public key lock.
     *
     * @param {number[][]} fields - The token fields to include in the locking script.
     * @param {WalletProtocol} protocolID - The protocol ID to use.
     * @param {string} keyID - The key ID to use.
     * @param {string} counterparty - The counterparty involved in the transaction, "self" or "anyone".
     * @param {boolean} [forSelf=false] - Flag indicating if the lock is for the creator (default no).
     * @param {boolean} [includeSignature=true] - Flag indicating if a signature should be included in the script (default yes).
     * @returns {Promise<LockingScript>} The generated PushDrop locking script.
     */
    lock(fields: number[][], protocolID: WalletProtocol, keyID: string, counterparty: string, forSelf?: boolean, includeSignature?: boolean, lockPosition?: 'before' | 'after'): Promise<LockingScript>;
    /**
     * Creates an unlocking script for spending a PushDrop token output.
     *
     * @param {WalletProtocol} protocolID - The protocol ID to use.
     * @param {string} keyID - The key ID to use.
     * @param {string} counterparty - The counterparty involved in the transaction, "self" or "anyone".
     * @param {string} [sourceTXID] - The TXID of the source transaction.
     * @param {number} [sourceSatoshis] - The number of satoshis in the source output.
     * @param {LockingScript} [lockingScript] - The locking script of the source output.
     * @param {'all' | 'none' | 'single'} [signOutputs='all'] - Specifies which outputs to sign.
     * @param {boolean} [anyoneCanPay=false] - Specifies if the anyone-can-pay flag is set.
     * @returns {Object} An object containing functions to sign the transaction and estimate the script length.
     */
    unlock(protocolID: WalletProtocol, keyID: string, counterparty: string, signOutputs?: 'all' | 'none' | 'single', anyoneCanPay?: boolean, sourceSatoshis?: number, lockingScript?: LockingScript): {
        sign: (tx: Transaction, inputIndex: number) => Promise<UnlockingScript>;
        estimateLength: () => Promise<73>;
    };
}
//# sourceMappingURL=PushDrop.d.ts.map