Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Empty file.
Empty file.
Empty file.
Empty file.
3 changes: 0 additions & 3 deletions packages/gill/src/core/create-solana-client.ts
Original file line number Diff line number Diff line change
Expand Up @@ -77,12 +77,9 @@ export function createSolanaClient<TCluster extends ModifiedClusterUrl>({
rpc,
rpcSubscriptions,
sendAndConfirmTransaction: sendAndConfirmTransactionWithSignersFactory({
// @ts-ignore - TODO(FIXME:nick)
rpc,
// @ts-ignore - TODO(FIXME:nick)
rpcSubscriptions,
}),
// @ts-ignore
simulateTransaction: simulateTransactionFactory({ rpc }),
};
}
Original file line number Diff line number Diff line change
Expand Up @@ -56,39 +56,19 @@ export type SendAndConfirmTransactionWithSignersFunction = (
>,
) => Promise<Signature>;

type SendAndConfirmTransactionWithSignersFactoryConfig<TCluster> = {
rpc: Rpc<GetEpochInfoApi & GetSignatureStatusesApi & SendTransactionApi & GetLatestBlockhashApi> & {
"~cluster"?: TCluster;
};
rpcSubscriptions: RpcSubscriptions<SignatureNotificationsApi & SlotNotificationsApi> & {
"~cluster"?: TCluster;
};
type SendAndConfirmTransactionWithSignersFactoryConfig = {
rpc: Rpc<GetEpochInfoApi & GetSignatureStatusesApi & SendTransactionApi & GetLatestBlockhashApi>;
rpcSubscriptions: RpcSubscriptions<SignatureNotificationsApi & SlotNotificationsApi>;
};

export function sendAndConfirmTransactionWithSignersFactory({
rpc,
rpcSubscriptions,
}: SendAndConfirmTransactionWithSignersFactoryConfig<"devnet">): SendAndConfirmTransactionWithSignersFunction;
export function sendAndConfirmTransactionWithSignersFactory({
rpc,
rpcSubscriptions,
}: SendAndConfirmTransactionWithSignersFactoryConfig<"testnet">): SendAndConfirmTransactionWithSignersFunction;
export function sendAndConfirmTransactionWithSignersFactory({
rpc,
rpcSubscriptions,
}: SendAndConfirmTransactionWithSignersFactoryConfig<"mainnet">): SendAndConfirmTransactionWithSignersFunction;
export function sendAndConfirmTransactionWithSignersFactory({
rpc,
rpcSubscriptions,
}: SendAndConfirmTransactionWithSignersFactoryConfig<"localnet">): SendAndConfirmTransactionWithSignersFunction;
export function sendAndConfirmTransactionWithSignersFactory<
TCluster extends "devnet" | "mainnet" | "testnet" | "localnet" | undefined = undefined,
>({
rpc,
rpcSubscriptions,
}: SendAndConfirmTransactionWithSignersFactoryConfig<TCluster>): SendAndConfirmTransactionWithSignersFunction {
// @ts-ignore - TODO(FIXME)
const sendAndConfirmTransaction = sendAndConfirmTransactionFactory({ rpc, rpcSubscriptions });
}: SendAndConfirmTransactionWithSignersFactoryConfig): SendAndConfirmTransactionWithSignersFunction {
const sendAndConfirmTransaction = sendAndConfirmTransactionFactory({
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

curious on your thought process here? does this make it possible to pass a devnet rpc with mainnet subscriptions etc?

Copy link
Author

@lalitcap23 lalitcap23 Sep 17, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@catmcgee you're right that this technically allows network mismatches. However, the previous code had the same issue - the @ts-ignore comments were bypassing all type checking including network validation. i will fix it and enforce that RPC and RpcSubscriptions must use the same network type . Anything else i should do .

rpc,
rpcSubscriptions,
});
return async function sendAndConfirmTransactionWithSigners(transaction, config = { commitment: "confirmed" }) {
if ("messageBytes" in transaction == false) {
if ("lifetimeConstraint" in transaction === false) {
Expand Down
22 changes: 3 additions & 19 deletions packages/gill/src/core/simulate-transaction.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,27 +7,11 @@ export type SimulateTransactionFunction = (
config?: Simplify<Omit<Parameters<SimulateTransactionApi["simulateTransaction"]>[1], "encoding" | "sigVerify">>,
) => Promise<ReturnType<SimulateTransactionApi["simulateTransaction"]>>;

type SimulateTransactionFactoryConfig<TCluster> = {
rpc: Rpc<SimulateTransactionApi> & {
"~cluster"?: TCluster;
};
type SimulateTransactionFactoryConfig = {
rpc: Rpc<SimulateTransactionApi>;
};

export function simulateTransactionFactory({
rpc,
}: SimulateTransactionFactoryConfig<"devnet">): SimulateTransactionFunction;
export function simulateTransactionFactory({
rpc,
}: SimulateTransactionFactoryConfig<"testnet">): SimulateTransactionFunction;
export function simulateTransactionFactory({
rpc,
}: SimulateTransactionFactoryConfig<"mainnet">): SimulateTransactionFunction;
export function simulateTransactionFactory({
rpc,
}: SimulateTransactionFactoryConfig<"localnet">): SimulateTransactionFunction;
export function simulateTransactionFactory<
TCluster extends "devnet" | "mainnet" | "testnet" | "localnet" | void = void,
>({ rpc }: SimulateTransactionFactoryConfig<TCluster>): SimulateTransactionFunction {
export function simulateTransactionFactory({ rpc }: SimulateTransactionFactoryConfig): SimulateTransactionFunction {
return async function simulateTransaction(transaction, config) {
if ("messageBytes" in transaction == false) {
transaction = await partiallySignTransactionMessageWithSigners(transaction);
Expand Down