// @generated this file is auto-generated - don't edit it directly

import {
  PublicKey,
  UInt64,
  UInt32,
  TokenId,
  Field,
  AuthRequired,
  BalanceChange,
  Sign,
  Bool,
} from '../../v1/transaction-leaves-json.js';

export { ZkappCommand, AccountUpdate, Account };
export * from '../../v1/transaction-leaves-json.js';
export { TypeMap };

type TypeMap = {
  PublicKey: PublicKey;
  UInt64: UInt64;
  UInt32: UInt32;
  TokenId: TokenId;
  Field: Field;
  AuthRequired: AuthRequired;
  BalanceChange: BalanceChange;
  Sign: Sign;
  Bool: Bool;
};

type ZkappCommand = {
  feePayer: {
    body: {
      publicKey: PublicKey;
      fee: UInt64;
      validUntil: UInt32 | null;
      nonce: UInt32;
    };
    authorization: string;
  };
  accountUpdates: {
    body: {
      publicKey: PublicKey;
      tokenId: TokenId;
      update: {
        appState: (Field | null)[];
        delegate: PublicKey | null;
        verificationKey: {
          data: string;
          hash: Field;
        } | null;
        permissions: {
          editState: AuthRequired;
          access: AuthRequired;
          send: AuthRequired;
          receive: AuthRequired;
          setDelegate: AuthRequired;
          setPermissions: AuthRequired;
          setVerificationKey: {
            auth: AuthRequired;
            txnVersion: UInt32;
          };
          setZkappUri: AuthRequired;
          editActionState: AuthRequired;
          setTokenSymbol: AuthRequired;
          incrementNonce: AuthRequired;
          setVotingFor: AuthRequired;
          setTiming: AuthRequired;
        } | null;
        zkappUri: string | null;
        tokenSymbol: string | null;
        timing: {
          initialMinimumBalance: UInt64;
          cliffTime: UInt32;
          cliffAmount: UInt64;
          vestingPeriod: UInt32;
          vestingIncrement: UInt64;
        } | null;
        votingFor: Field | null;
      };
      balanceChange: {
        magnitude: UInt64;
        sgn: Sign;
      };
      incrementNonce: Bool;
      events: Field[][];
      actions: Field[][];
      callData: Field;
      callDepth: number;
      preconditions: {
        network: {
          snarkedLedgerHash: Field | null;
          blockchainLength: {
            lower: UInt32;
            upper: UInt32;
          } | null;
          minWindowDensity: {
            lower: UInt32;
            upper: UInt32;
          } | null;
          totalCurrency: {
            lower: UInt64;
            upper: UInt64;
          } | null;
          globalSlotSinceGenesis: {
            lower: UInt32;
            upper: UInt32;
          } | null;
          stakingEpochData: {
            ledger: {
              hash: Field | null;
              totalCurrency: {
                lower: UInt64;
                upper: UInt64;
              } | null;
            };
            seed: Field | null;
            startCheckpoint: Field | null;
            lockCheckpoint: Field | null;
            epochLength: {
              lower: UInt32;
              upper: UInt32;
            } | null;
          };
          nextEpochData: {
            ledger: {
              hash: Field | null;
              totalCurrency: {
                lower: UInt64;
                upper: UInt64;
              } | null;
            };
            seed: Field | null;
            startCheckpoint: Field | null;
            lockCheckpoint: Field | null;
            epochLength: {
              lower: UInt32;
              upper: UInt32;
            } | null;
          };
        };
        account: {
          balance: {
            lower: UInt64;
            upper: UInt64;
          } | null;
          nonce: {
            lower: UInt32;
            upper: UInt32;
          } | null;
          receiptChainHash: Field | null;
          delegate: PublicKey | null;
          state: (Field | null)[];
          actionState: Field | null;
          provedState: Bool | null;
          isNew: Bool | null;
        };
        validWhile: {
          lower: UInt32;
          upper: UInt32;
        } | null;
      };
      useFullCommitment: Bool;
      implicitAccountCreationFee: Bool;
      mayUseToken: {
        parentsOwnToken: Bool;
        inheritFromParent: Bool;
      };
      authorizationKind: {
        isSigned: Bool;
        isProved: Bool;
        verificationKeyHash: Field;
      };
    };
    authorization: {
      proof: string | null;
      signature: string | null;
    };
  }[];
  memo: string;
};

type AccountUpdate = {
  body: {
    publicKey: PublicKey;
    tokenId: TokenId;
    update: {
      appState: (Field | null)[];
      delegate: PublicKey | null;
      verificationKey: {
        data: string;
        hash: Field;
      } | null;
      permissions: {
        editState: AuthRequired;
        access: AuthRequired;
        send: AuthRequired;
        receive: AuthRequired;
        setDelegate: AuthRequired;
        setPermissions: AuthRequired;
        setVerificationKey: {
          auth: AuthRequired;
          txnVersion: UInt32;
        };
        setZkappUri: AuthRequired;
        editActionState: AuthRequired;
        setTokenSymbol: AuthRequired;
        incrementNonce: AuthRequired;
        setVotingFor: AuthRequired;
        setTiming: AuthRequired;
      } | null;
      zkappUri: string | null;
      tokenSymbol: string | null;
      timing: {
        initialMinimumBalance: UInt64;
        cliffTime: UInt32;
        cliffAmount: UInt64;
        vestingPeriod: UInt32;
        vestingIncrement: UInt64;
      } | null;
      votingFor: Field | null;
    };
    balanceChange: {
      magnitude: UInt64;
      sgn: Sign;
    };
    incrementNonce: Bool;
    events: Field[][];
    actions: Field[][];
    callData: Field;
    callDepth: number;
    preconditions: {
      network: {
        snarkedLedgerHash: Field | null;
        blockchainLength: {
          lower: UInt32;
          upper: UInt32;
        } | null;
        minWindowDensity: {
          lower: UInt32;
          upper: UInt32;
        } | null;
        totalCurrency: {
          lower: UInt64;
          upper: UInt64;
        } | null;
        globalSlotSinceGenesis: {
          lower: UInt32;
          upper: UInt32;
        } | null;
        stakingEpochData: {
          ledger: {
            hash: Field | null;
            totalCurrency: {
              lower: UInt64;
              upper: UInt64;
            } | null;
          };
          seed: Field | null;
          startCheckpoint: Field | null;
          lockCheckpoint: Field | null;
          epochLength: {
            lower: UInt32;
            upper: UInt32;
          } | null;
        };
        nextEpochData: {
          ledger: {
            hash: Field | null;
            totalCurrency: {
              lower: UInt64;
              upper: UInt64;
            } | null;
          };
          seed: Field | null;
          startCheckpoint: Field | null;
          lockCheckpoint: Field | null;
          epochLength: {
            lower: UInt32;
            upper: UInt32;
          } | null;
        };
      };
      account: {
        balance: {
          lower: UInt64;
          upper: UInt64;
        } | null;
        nonce: {
          lower: UInt32;
          upper: UInt32;
        } | null;
        receiptChainHash: Field | null;
        delegate: PublicKey | null;
        state: (Field | null)[];
        actionState: Field | null;
        provedState: Bool | null;
        isNew: Bool | null;
      };
      validWhile: {
        lower: UInt32;
        upper: UInt32;
      } | null;
    };
    useFullCommitment: Bool;
    implicitAccountCreationFee: Bool;
    mayUseToken: {
      parentsOwnToken: Bool;
      inheritFromParent: Bool;
    };
    authorizationKind: {
      isSigned: Bool;
      isProved: Bool;
      verificationKeyHash: Field;
    };
  };
  authorization: {
    proof: string | null;
    signature: string | null;
  };
};

type Account = {
  publicKey: PublicKey;
  tokenId: TokenId;
  tokenSymbol: string;
  balance: UInt64;
  nonce: UInt32;
  receiptChainHash: Field;
  delegate: PublicKey | null;
  votingFor: Field;
  timing: {
    isTimed: Bool;
    initialMinimumBalance: UInt64;
    cliffTime: UInt32;
    cliffAmount: UInt64;
    vestingPeriod: UInt32;
    vestingIncrement: UInt64;
  };
  permissions: {
    editState: AuthRequired;
    access: AuthRequired;
    send: AuthRequired;
    receive: AuthRequired;
    setDelegate: AuthRequired;
    setPermissions: AuthRequired;
    setVerificationKey: {
      auth: AuthRequired;
      txnVersion: UInt32;
    };
    setZkappUri: AuthRequired;
    editActionState: AuthRequired;
    setTokenSymbol: AuthRequired;
    incrementNonce: AuthRequired;
    setVotingFor: AuthRequired;
    setTiming: AuthRequired;
  };
  zkapp: {
    appState: Field[];
    verificationKey: {
      data: string;
      hash: Field;
    } | null;
    zkappVersion: UInt32;
    actionState: Field[];
    lastActionSlot: UInt32;
    provedState: Bool;
    zkappUri: string;
  } | null;
};
