// Copyright (c) Mysten Labs, Inc.
// SPDX-License-Identifier: Apache-2.0

// @generated by protobuf-ts 2.9.6 with parameter force_server_none,optimize_code_size,ts_nocheck
// @generated from protobuf file "sui/rpc/v2/transaction_execution_service.proto" (package "sui.rpc.v2", syntax proto3)
// tslint:disable
// @ts-nocheck
//
// Copyright (c) Mysten Labs, Inc.
// SPDX-License-Identifier: Apache-2.0
//
import { ServiceType } from '@protobuf-ts/runtime-rpc';
import { MessageType } from '@protobuf-ts/runtime';
import { Value } from '../../../google/protobuf/struct.js';
import { Bcs } from './bcs.js';
import { Argument } from './argument.js';
import { ExecutedTransaction } from './executed_transaction.js';
import { FieldMask } from '../../../google/protobuf/field_mask.js';
import { UserSignature } from './signature.js';
import { Transaction } from './transaction.js';
/**
 * @generated from protobuf message sui.rpc.v2.ExecuteTransactionRequest
 */
export interface ExecuteTransactionRequest {
	/**
	 * The transaction to execute.
	 *
	 * @generated from protobuf field: optional sui.rpc.v2.Transaction transaction = 1;
	 */
	transaction?: Transaction;
	/**
	 * Set of `UserSignature`s authorizing the execution of the provided
	 * transaction.
	 *
	 * @generated from protobuf field: repeated sui.rpc.v2.UserSignature signatures = 2;
	 */
	signatures: UserSignature[];
	/**
	 * Mask specifying which fields to read.
	 * If no mask is specified, defaults to `effects.status,checkpoint`.
	 *
	 * @generated from protobuf field: optional google.protobuf.FieldMask read_mask = 3;
	 */
	readMask?: FieldMask;
}
/**
 * Response message for `NodeService.ExecuteTransaction`.
 *
 * @generated from protobuf message sui.rpc.v2.ExecuteTransactionResponse
 */
export interface ExecuteTransactionResponse {
	/**
	 * @generated from protobuf field: optional sui.rpc.v2.ExecutedTransaction transaction = 1;
	 */
	transaction?: ExecutedTransaction;
}
/**
 * @generated from protobuf message sui.rpc.v2.SimulateTransactionRequest
 */
export interface SimulateTransactionRequest {
	/**
	 * @generated from protobuf field: optional sui.rpc.v2.Transaction transaction = 1;
	 */
	transaction?: Transaction;
	/**
	 * Mask specifying which fields to read.
	 *
	 * @generated from protobuf field: optional google.protobuf.FieldMask read_mask = 2;
	 */
	readMask?: FieldMask;
	/**
	 * Specify whether checks should be ENABLED (default) or DISABLED while executing the transaction
	 *
	 * @generated from protobuf field: optional sui.rpc.v2.SimulateTransactionRequest.TransactionChecks checks = 3;
	 */
	checks?: SimulateTransactionRequest_TransactionChecks;
	/**
	 * Perform gas selection based on a budget estimation and include the
	 * selected gas payment and budget in the response.
	 *
	 * This option will be ignored if `checks` is `DISABLED`.
	 *
	 * @generated from protobuf field: optional bool do_gas_selection = 4;
	 */
	doGasSelection?: boolean;
}
/**
 * buf:lint:ignore ENUM_ZERO_VALUE_SUFFIX
 *
 * @generated from protobuf enum sui.rpc.v2.SimulateTransactionRequest.TransactionChecks
 */
export enum SimulateTransactionRequest_TransactionChecks {
	/**
	 * @generated from protobuf enum value: ENABLED = 0;
	 */
	ENABLED = 0,
	/**
	 * @generated from protobuf enum value: DISABLED = 1;
	 */
	DISABLED = 1,
}
/**
 * @generated from protobuf message sui.rpc.v2.SimulateTransactionResponse
 */
export interface SimulateTransactionResponse {
	/**
	 * @generated from protobuf field: optional sui.rpc.v2.ExecutedTransaction transaction = 1;
	 */
	transaction?: ExecutedTransaction;
	/**
	 * @generated from protobuf field: repeated sui.rpc.v2.CommandResult command_outputs = 2;
	 */
	commandOutputs: CommandResult[];
	/**
	 * A suggested gas price to use, that is above RGP, in order to provide a
	 * better chance of the transaction being included in the presence of
	 * congested objects.
	 *
	 * @generated from protobuf field: optional uint64 suggested_gas_price = 3;
	 */
	suggestedGasPrice?: bigint;
}
/**
 * An intermediate result/output from the execution of a single command
 *
 * @generated from protobuf message sui.rpc.v2.CommandResult
 */
export interface CommandResult {
	/**
	 * @generated from protobuf field: repeated sui.rpc.v2.CommandOutput return_values = 1;
	 */
	returnValues: CommandOutput[];
	/**
	 * @generated from protobuf field: repeated sui.rpc.v2.CommandOutput mutated_by_ref = 2;
	 */
	mutatedByRef: CommandOutput[];
}
/**
 * @generated from protobuf message sui.rpc.v2.CommandOutput
 */
export interface CommandOutput {
	/**
	 * @generated from protobuf field: optional sui.rpc.v2.Argument argument = 1;
	 */
	argument?: Argument;
	/**
	 * @generated from protobuf field: optional sui.rpc.v2.Bcs value = 2;
	 */
	value?: Bcs;
	/**
	 * JSON rendering of the output.
	 *
	 * @generated from protobuf field: optional google.protobuf.Value json = 3;
	 */
	json?: Value;
}
// @generated message type with reflection information, may provide speed optimized methods
class ExecuteTransactionRequest$Type extends MessageType<ExecuteTransactionRequest> {
	constructor() {
		super('sui.rpc.v2.ExecuteTransactionRequest', [
			{ no: 1, name: 'transaction', kind: 'message', T: () => Transaction },
			{
				no: 2,
				name: 'signatures',
				kind: 'message',
				repeat: 1 /*RepeatType.PACKED*/,
				T: () => UserSignature,
			},
			{ no: 3, name: 'read_mask', kind: 'message', T: () => FieldMask },
		]);
	}
}
/**
 * @generated MessageType for protobuf message sui.rpc.v2.ExecuteTransactionRequest
 */
export const ExecuteTransactionRequest = new ExecuteTransactionRequest$Type();
// @generated message type with reflection information, may provide speed optimized methods
class ExecuteTransactionResponse$Type extends MessageType<ExecuteTransactionResponse> {
	constructor() {
		super('sui.rpc.v2.ExecuteTransactionResponse', [
			{ no: 1, name: 'transaction', kind: 'message', T: () => ExecutedTransaction },
		]);
	}
}
/**
 * @generated MessageType for protobuf message sui.rpc.v2.ExecuteTransactionResponse
 */
export const ExecuteTransactionResponse = new ExecuteTransactionResponse$Type();
// @generated message type with reflection information, may provide speed optimized methods
class SimulateTransactionRequest$Type extends MessageType<SimulateTransactionRequest> {
	constructor() {
		super('sui.rpc.v2.SimulateTransactionRequest', [
			{ no: 1, name: 'transaction', kind: 'message', T: () => Transaction },
			{ no: 2, name: 'read_mask', kind: 'message', T: () => FieldMask },
			{
				no: 3,
				name: 'checks',
				kind: 'enum',
				opt: true,
				T: () => [
					'sui.rpc.v2.SimulateTransactionRequest.TransactionChecks',
					SimulateTransactionRequest_TransactionChecks,
				],
			},
			{ no: 4, name: 'do_gas_selection', kind: 'scalar', opt: true, T: 8 /*ScalarType.BOOL*/ },
		]);
	}
}
/**
 * @generated MessageType for protobuf message sui.rpc.v2.SimulateTransactionRequest
 */
export const SimulateTransactionRequest = new SimulateTransactionRequest$Type();
// @generated message type with reflection information, may provide speed optimized methods
class SimulateTransactionResponse$Type extends MessageType<SimulateTransactionResponse> {
	constructor() {
		super('sui.rpc.v2.SimulateTransactionResponse', [
			{ no: 1, name: 'transaction', kind: 'message', T: () => ExecutedTransaction },
			{
				no: 2,
				name: 'command_outputs',
				kind: 'message',
				repeat: 1 /*RepeatType.PACKED*/,
				T: () => CommandResult,
			},
			{
				no: 3,
				name: 'suggested_gas_price',
				kind: 'scalar',
				opt: true,
				T: 4 /*ScalarType.UINT64*/,
				L: 0 /*LongType.BIGINT*/,
			},
		]);
	}
}
/**
 * @generated MessageType for protobuf message sui.rpc.v2.SimulateTransactionResponse
 */
export const SimulateTransactionResponse = new SimulateTransactionResponse$Type();
// @generated message type with reflection information, may provide speed optimized methods
class CommandResult$Type extends MessageType<CommandResult> {
	constructor() {
		super('sui.rpc.v2.CommandResult', [
			{
				no: 1,
				name: 'return_values',
				kind: 'message',
				repeat: 1 /*RepeatType.PACKED*/,
				T: () => CommandOutput,
			},
			{
				no: 2,
				name: 'mutated_by_ref',
				kind: 'message',
				repeat: 1 /*RepeatType.PACKED*/,
				T: () => CommandOutput,
			},
		]);
	}
}
/**
 * @generated MessageType for protobuf message sui.rpc.v2.CommandResult
 */
export const CommandResult = new CommandResult$Type();
// @generated message type with reflection information, may provide speed optimized methods
class CommandOutput$Type extends MessageType<CommandOutput> {
	constructor() {
		super('sui.rpc.v2.CommandOutput', [
			{ no: 1, name: 'argument', kind: 'message', T: () => Argument },
			{ no: 2, name: 'value', kind: 'message', T: () => Bcs },
			{ no: 3, name: 'json', kind: 'message', T: () => Value },
		]);
	}
}
/**
 * @generated MessageType for protobuf message sui.rpc.v2.CommandOutput
 */
export const CommandOutput = new CommandOutput$Type();
/**
 * @generated ServiceType for protobuf service sui.rpc.v2.TransactionExecutionService
 */
export const TransactionExecutionService = new ServiceType(
	'sui.rpc.v2.TransactionExecutionService',
	[
		{
			name: 'ExecuteTransaction',
			options: {},
			I: ExecuteTransactionRequest,
			O: ExecuteTransactionResponse,
		},
		{
			name: 'SimulateTransaction',
			options: {},
			I: SimulateTransactionRequest,
			O: SimulateTransactionResponse,
		},
	],
);
