@prb/effect-solana 1.0.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +406 -0
- package/dist/balance/index.d.ts +2 -0
- package/dist/balance/index.d.ts.map +1 -0
- package/dist/balance/index.js +2 -0
- package/dist/balance/index.js.map +1 -0
- package/dist/balance/service.d.ts +21 -0
- package/dist/balance/service.d.ts.map +1 -0
- package/dist/balance/service.js +62 -0
- package/dist/balance/service.js.map +1 -0
- package/dist/constants/index.d.ts +11 -0
- package/dist/constants/index.d.ts.map +1 -0
- package/dist/constants/index.js +14 -0
- package/dist/constants/index.js.map +1 -0
- package/dist/core/errors/account.d.ts +21 -0
- package/dist/core/errors/account.d.ts.map +1 -0
- package/dist/core/errors/account.js +14 -0
- package/dist/core/errors/account.js.map +1 -0
- package/dist/core/errors/index.d.ts +6 -0
- package/dist/core/errors/index.d.ts.map +1 -0
- package/dist/core/errors/index.js +6 -0
- package/dist/core/errors/index.js.map +1 -0
- package/dist/core/errors/predicates.d.ts +21 -0
- package/dist/core/errors/predicates.d.ts.map +1 -0
- package/dist/core/errors/predicates.js +8 -0
- package/dist/core/errors/predicates.js.map +1 -0
- package/dist/core/errors/rpc.d.ts +20 -0
- package/dist/core/errors/rpc.d.ts.map +1 -0
- package/dist/core/errors/rpc.js +13 -0
- package/dist/core/errors/rpc.js.map +1 -0
- package/dist/core/errors/transaction.d.ts +46 -0
- package/dist/core/errors/transaction.d.ts.map +1 -0
- package/dist/core/errors/transaction.js +30 -0
- package/dist/core/errors/transaction.js.map +1 -0
- package/dist/core/errors/wallet.d.ts +25 -0
- package/dist/core/errors/wallet.d.ts.map +1 -0
- package/dist/core/errors/wallet.js +15 -0
- package/dist/core/errors/wallet.js.map +1 -0
- package/dist/core/index.d.ts +2 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +2 -0
- package/dist/core/index.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -0
- package/dist/internal/index.d.ts +2 -0
- package/dist/internal/index.d.ts.map +1 -0
- package/dist/internal/index.js +2 -0
- package/dist/internal/index.js.map +1 -0
- package/dist/internal/kit-effect.d.ts +11 -0
- package/dist/internal/kit-effect.d.ts.map +1 -0
- package/dist/internal/kit-effect.js +19 -0
- package/dist/internal/kit-effect.js.map +1 -0
- package/dist/pda/index.d.ts +2 -0
- package/dist/pda/index.d.ts.map +1 -0
- package/dist/pda/index.js +2 -0
- package/dist/pda/index.js.map +1 -0
- package/dist/pda/service.d.ts +15 -0
- package/dist/pda/service.d.ts.map +1 -0
- package/dist/pda/service.js +34 -0
- package/dist/pda/service.js.map +1 -0
- package/dist/presets/index.d.ts +2 -0
- package/dist/presets/index.d.ts.map +1 -0
- package/dist/presets/index.js +2 -0
- package/dist/presets/index.js.map +1 -0
- package/dist/presets/layers.d.ts +18 -0
- package/dist/presets/layers.d.ts.map +1 -0
- package/dist/presets/layers.js +40 -0
- package/dist/presets/layers.js.map +1 -0
- package/dist/react-hooks/index.d.ts +9 -0
- package/dist/react-hooks/index.d.ts.map +1 -0
- package/dist/react-hooks/index.js +5 -0
- package/dist/react-hooks/index.js.map +1 -0
- package/dist/react-hooks/internal/error.d.ts +5 -0
- package/dist/react-hooks/internal/error.d.ts.map +1 -0
- package/dist/react-hooks/internal/error.js +9 -0
- package/dist/react-hooks/internal/error.js.map +1 -0
- package/dist/react-hooks/internal/is-dev.d.ts +2 -0
- package/dist/react-hooks/internal/is-dev.d.ts.map +1 -0
- package/dist/react-hooks/internal/is-dev.js +5 -0
- package/dist/react-hooks/internal/is-dev.js.map +1 -0
- package/dist/react-hooks/internal/runtime.d.ts +21 -0
- package/dist/react-hooks/internal/runtime.d.ts.map +1 -0
- package/dist/react-hooks/internal/runtime.js +38 -0
- package/dist/react-hooks/internal/runtime.js.map +1 -0
- package/dist/react-hooks/internal/scoped-run.d.ts +11 -0
- package/dist/react-hooks/internal/scoped-run.d.ts.map +1 -0
- package/dist/react-hooks/internal/scoped-run.js +21 -0
- package/dist/react-hooks/internal/scoped-run.js.map +1 -0
- package/dist/react-hooks/internal/stable.d.ts +2 -0
- package/dist/react-hooks/internal/stable.d.ts.map +1 -0
- package/dist/react-hooks/internal/stable.js +3 -0
- package/dist/react-hooks/internal/stable.js.map +1 -0
- package/dist/react-hooks/primitives/use-effect-memo-factory.d.ts +11 -0
- package/dist/react-hooks/primitives/use-effect-memo-factory.d.ts.map +1 -0
- package/dist/react-hooks/primitives/use-effect-memo-factory.js +92 -0
- package/dist/react-hooks/primitives/use-effect-memo-factory.js.map +1 -0
- package/dist/react-hooks/primitives/use-effect.d.ts +23 -0
- package/dist/react-hooks/primitives/use-effect.d.ts.map +1 -0
- package/dist/react-hooks/primitives/use-effect.js +93 -0
- package/dist/react-hooks/primitives/use-effect.js.map +1 -0
- package/dist/react-hooks/primitives/use-fork-effect.d.ts +4 -0
- package/dist/react-hooks/primitives/use-fork-effect.d.ts.map +1 -0
- package/dist/react-hooks/primitives/use-fork-effect.js +20 -0
- package/dist/react-hooks/primitives/use-fork-effect.js.map +1 -0
- package/dist/react-hooks/primitives/use-stream.d.ts +26 -0
- package/dist/react-hooks/primitives/use-stream.d.ts.map +1 -0
- package/dist/react-hooks/primitives/use-stream.js +161 -0
- package/dist/react-hooks/primitives/use-stream.js.map +1 -0
- package/dist/react-hooks/primitives.d.ts +8 -0
- package/dist/react-hooks/primitives.d.ts.map +1 -0
- package/dist/react-hooks/primitives.js +6 -0
- package/dist/react-hooks/primitives.js.map +1 -0
- package/dist/react-hooks/provider.d.ts +19 -0
- package/dist/react-hooks/provider.d.ts.map +1 -0
- package/dist/react-hooks/provider.js +71 -0
- package/dist/react-hooks/provider.js.map +1 -0
- package/dist/rpc/index.d.ts +2 -0
- package/dist/rpc/index.d.ts.map +1 -0
- package/dist/rpc/index.js +2 -0
- package/dist/rpc/index.js.map +1 -0
- package/dist/rpc/service.d.ts +17 -0
- package/dist/rpc/service.d.ts.map +1 -0
- package/dist/rpc/service.js +35 -0
- package/dist/rpc/service.js.map +1 -0
- package/dist/signer/index.d.ts +2 -0
- package/dist/signer/index.d.ts.map +1 -0
- package/dist/signer/index.js +2 -0
- package/dist/signer/index.js.map +1 -0
- package/dist/signer/service.d.ts +22 -0
- package/dist/signer/service.d.ts.map +1 -0
- package/dist/signer/service.js +42 -0
- package/dist/signer/service.js.map +1 -0
- package/dist/telemetry/index.d.ts +3 -0
- package/dist/telemetry/index.d.ts.map +1 -0
- package/dist/telemetry/index.js +3 -0
- package/dist/telemetry/index.js.map +1 -0
- package/dist/telemetry/logger.d.ts +30 -0
- package/dist/telemetry/logger.d.ts.map +1 -0
- package/dist/telemetry/logger.js +8 -0
- package/dist/telemetry/logger.js.map +1 -0
- package/dist/telemetry/tracer.d.ts +47 -0
- package/dist/telemetry/tracer.d.ts.map +1 -0
- package/dist/telemetry/tracer.js +47 -0
- package/dist/telemetry/tracer.js.map +1 -0
- package/dist/testing-kit/_fixtures/addresses.d.ts +8 -0
- package/dist/testing-kit/_fixtures/addresses.d.ts.map +1 -0
- package/dist/testing-kit/_fixtures/addresses.js +7 -0
- package/dist/testing-kit/_fixtures/addresses.js.map +1 -0
- package/dist/testing-kit/helpers.d.ts +9 -0
- package/dist/testing-kit/helpers.d.ts.map +1 -0
- package/dist/testing-kit/helpers.js +32 -0
- package/dist/testing-kit/helpers.js.map +1 -0
- package/dist/testing-kit/index.d.ts +17 -0
- package/dist/testing-kit/index.d.ts.map +1 -0
- package/dist/testing-kit/index.js +10 -0
- package/dist/testing-kit/index.js.map +1 -0
- package/dist/testing-kit/mock-balance-service.d.ts +18 -0
- package/dist/testing-kit/mock-balance-service.d.ts.map +1 -0
- package/dist/testing-kit/mock-balance-service.js +10 -0
- package/dist/testing-kit/mock-balance-service.js.map +1 -0
- package/dist/testing-kit/mock-pda-service.d.ts +12 -0
- package/dist/testing-kit/mock-pda-service.d.ts.map +1 -0
- package/dist/testing-kit/mock-pda-service.js +11 -0
- package/dist/testing-kit/mock-pda-service.js.map +1 -0
- package/dist/testing-kit/mock-rpc-service.d.ts +15 -0
- package/dist/testing-kit/mock-rpc-service.d.ts.map +1 -0
- package/dist/testing-kit/mock-rpc-service.js +63 -0
- package/dist/testing-kit/mock-rpc-service.js.map +1 -0
- package/dist/testing-kit/mock-signer-service.d.ts +16 -0
- package/dist/testing-kit/mock-signer-service.d.ts.map +1 -0
- package/dist/testing-kit/mock-signer-service.js +25 -0
- package/dist/testing-kit/mock-signer-service.js.map +1 -0
- package/dist/testing-kit/mock-token-service.d.ts +28 -0
- package/dist/testing-kit/mock-token-service.d.ts.map +1 -0
- package/dist/testing-kit/mock-token-service.js +51 -0
- package/dist/testing-kit/mock-token-service.js.map +1 -0
- package/dist/testing-kit/mock-transaction-service.d.ts +22 -0
- package/dist/testing-kit/mock-transaction-service.d.ts.map +1 -0
- package/dist/testing-kit/mock-transaction-service.js +29 -0
- package/dist/testing-kit/mock-transaction-service.js.map +1 -0
- package/dist/testing-kit/test-layer.d.ts +23 -0
- package/dist/testing-kit/test-layer.d.ts.map +1 -0
- package/dist/testing-kit/test-layer.js +31 -0
- package/dist/testing-kit/test-layer.js.map +1 -0
- package/dist/token/index.d.ts +2 -0
- package/dist/token/index.d.ts.map +1 -0
- package/dist/token/index.js +2 -0
- package/dist/token/index.js.map +1 -0
- package/dist/token/service.d.ts +38 -0
- package/dist/token/service.d.ts.map +1 -0
- package/dist/token/service.js +158 -0
- package/dist/token/service.js.map +1 -0
- package/dist/tx/index.d.ts +3 -0
- package/dist/tx/index.d.ts.map +1 -0
- package/dist/tx/index.js +3 -0
- package/dist/tx/index.js.map +1 -0
- package/dist/tx/service.d.ts +27 -0
- package/dist/tx/service.d.ts.map +1 -0
- package/dist/tx/service.js +178 -0
- package/dist/tx/service.js.map +1 -0
- package/dist/tx/types.d.ts +29 -0
- package/dist/tx/types.d.ts.map +1 -0
- package/dist/tx/types.js +2 -0
- package/dist/tx/types.js.map +1 -0
- package/dist/types/index.d.ts +12 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/package.json +81 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tx/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC"}
|
package/dist/tx/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tx/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { Instruction } from "@solana/instructions";
|
|
2
|
+
import type { Signature } from "@solana/keys";
|
|
3
|
+
import type { CompilableTransactionMessage } from "@solana/transaction-messages";
|
|
4
|
+
import type { Transaction, TransactionWithLifetime } from "@solana/transactions";
|
|
5
|
+
import { Context, Effect, Layer } from "effect";
|
|
6
|
+
import type { WalletNotConnectedError } from "../core/errors/index.js";
|
|
7
|
+
import { SimulationFailedError, TransactionFailedError, TransactionSendError, TransactionTimeoutError } from "../core/errors/index.js";
|
|
8
|
+
import { RpcService } from "../rpc/index.js";
|
|
9
|
+
import { SignerService } from "../signer/index.js";
|
|
10
|
+
import type { ConfirmOpts, TransactionBatchItem, TransactionBatchOpts, TransactionBuildOpts, TransactionReceipt } from "./types.js";
|
|
11
|
+
export type TransactionServiceShape = {
|
|
12
|
+
readonly build: (instructions: readonly Instruction[], opts?: TransactionBuildOpts) => Effect.Effect<CompilableTransactionMessage, TransactionSendError | WalletNotConnectedError>;
|
|
13
|
+
readonly signAll: (txs: readonly CompilableTransactionMessage[]) => Effect.Effect<readonly (Transaction & TransactionWithLifetime)[], TransactionSendError | WalletNotConnectedError>;
|
|
14
|
+
readonly sign: <T extends CompilableTransactionMessage>(tx: T) => Effect.Effect<Transaction & TransactionWithLifetime, TransactionSendError | WalletNotConnectedError>;
|
|
15
|
+
readonly sendAll: (txs: readonly (Transaction & TransactionWithLifetime)[], opts?: TransactionBatchOpts) => Effect.Effect<readonly Signature[], TransactionSendError>;
|
|
16
|
+
readonly send: (tx: Transaction & TransactionWithLifetime) => Effect.Effect<Signature, TransactionSendError>;
|
|
17
|
+
readonly confirm: (signature: Signature, opts?: ConfirmOpts) => Effect.Effect<TransactionReceipt, TransactionTimeoutError | TransactionFailedError>;
|
|
18
|
+
readonly sendAndConfirm: (instructions: readonly Instruction[], opts?: ConfirmOpts) => Effect.Effect<TransactionReceipt, TransactionSendError | WalletNotConnectedError | TransactionTimeoutError | TransactionFailedError>;
|
|
19
|
+
readonly sendAndConfirmBatch: (items: readonly TransactionBatchItem[], opts?: TransactionBatchOpts) => Effect.Effect<readonly TransactionReceipt[], TransactionSendError | WalletNotConnectedError | TransactionTimeoutError | TransactionFailedError>;
|
|
20
|
+
readonly simulate: <T extends CompilableTransactionMessage>(tx: T) => Effect.Effect<void, SimulationFailedError | TransactionSendError | WalletNotConnectedError>;
|
|
21
|
+
};
|
|
22
|
+
declare const TransactionService_base: Context.TagClass<TransactionService, "esolana/TransactionService", TransactionServiceShape>;
|
|
23
|
+
export declare class TransactionService extends TransactionService_base {
|
|
24
|
+
}
|
|
25
|
+
export declare const TransactionServiceLive: Layer.Layer<TransactionService, never, RpcService | SignerService>;
|
|
26
|
+
export {};
|
|
27
|
+
//# sourceMappingURL=service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/tx/service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
import { pipe } from "@solana/functional";
|
|
2
|
+
import { appendTransactionMessageInstructions, createTransactionMessage, setTransactionMessageFeePayer, setTransactionMessageLifetimeUsingBlockhash, } from "@solana/transaction-messages";
|
|
3
|
+
import { compileTransaction, getBase64EncodedWireTransaction, getSignatureFromTransaction, } from "@solana/transactions";
|
|
4
|
+
import { getSetComputeUnitLimitInstruction, getSetComputeUnitPriceInstruction, } from "@solana-program/compute-budget";
|
|
5
|
+
import { Context, Duration, Effect, Layer, Schedule } from "effect";
|
|
6
|
+
import { SignatureError, SimulationFailedError, TransactionFailedError, TransactionSendError, TransactionTimeoutError, } from "../core/errors/index.js";
|
|
7
|
+
import { RpcService } from "../rpc/index.js";
|
|
8
|
+
import { SignerService } from "../signer/index.js";
|
|
9
|
+
import { SpanNames } from "../telemetry/index.js";
|
|
10
|
+
export class TransactionService extends Context.Tag("esolana/TransactionService")() {
|
|
11
|
+
}
|
|
12
|
+
const hasReachedConfirmation = (status, commitment) => {
|
|
13
|
+
if (commitment === "processed") {
|
|
14
|
+
return true;
|
|
15
|
+
}
|
|
16
|
+
if (commitment === "confirmed") {
|
|
17
|
+
return status.confirmationStatus === "confirmed" || status.confirmationStatus === "finalized";
|
|
18
|
+
}
|
|
19
|
+
return status.confirmationStatus === "finalized";
|
|
20
|
+
};
|
|
21
|
+
const checkSignatureStatus = (rpc, signature, commitment) => Effect.gen(function* () {
|
|
22
|
+
const response = yield* Effect.promise(() => rpc.getSignatureStatuses([signature]).send());
|
|
23
|
+
const status = response?.value?.[0];
|
|
24
|
+
if (!status) {
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
27
|
+
if (status.err) {
|
|
28
|
+
return yield* Effect.fail(new TransactionFailedError({
|
|
29
|
+
logs: [],
|
|
30
|
+
message: "Transaction failed on-chain",
|
|
31
|
+
signature,
|
|
32
|
+
}));
|
|
33
|
+
}
|
|
34
|
+
if (hasReachedConfirmation(status, commitment)) {
|
|
35
|
+
return {
|
|
36
|
+
confirmations: status.confirmations !== null ? BigInt(status.confirmations) : null,
|
|
37
|
+
signature,
|
|
38
|
+
slot: BigInt(status.slot),
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
return null;
|
|
42
|
+
});
|
|
43
|
+
const buildComputeBudgetInstructions = (config) => {
|
|
44
|
+
if (!config) {
|
|
45
|
+
return [];
|
|
46
|
+
}
|
|
47
|
+
const instructions = [];
|
|
48
|
+
if (config.unitLimit !== undefined) {
|
|
49
|
+
instructions.push(getSetComputeUnitLimitInstruction({ units: config.unitLimit }));
|
|
50
|
+
}
|
|
51
|
+
if (config.microLamports !== undefined) {
|
|
52
|
+
instructions.push(getSetComputeUnitPriceInstruction({ microLamports: config.microLamports }));
|
|
53
|
+
}
|
|
54
|
+
return instructions;
|
|
55
|
+
};
|
|
56
|
+
export const TransactionServiceLive = Layer.effect(TransactionService, Effect.gen(function* () {
|
|
57
|
+
const rpcService = yield* RpcService;
|
|
58
|
+
const signerService = yield* SignerService;
|
|
59
|
+
const service = {
|
|
60
|
+
build: (instructions, opts) => Effect.gen(function* () {
|
|
61
|
+
const rpc = yield* rpcService.getRpc();
|
|
62
|
+
const address = yield* signerService.getAddress();
|
|
63
|
+
const computeBudgetInstructions = buildComputeBudgetInstructions(opts?.computeBudget);
|
|
64
|
+
const { value: latestBlockhash } = yield* Effect.tryPromise({
|
|
65
|
+
catch: (cause) => new TransactionSendError({
|
|
66
|
+
cause,
|
|
67
|
+
message: "Failed to get latest blockhash",
|
|
68
|
+
}),
|
|
69
|
+
try: () => rpc.getLatestBlockhash().send(),
|
|
70
|
+
});
|
|
71
|
+
const message = pipe(createTransactionMessage({ version: 0 }), (m) => setTransactionMessageFeePayer(address, m), (m) => setTransactionMessageLifetimeUsingBlockhash(latestBlockhash, m), (m) => appendTransactionMessageInstructions([...computeBudgetInstructions, ...instructions], m));
|
|
72
|
+
return message;
|
|
73
|
+
}).pipe(Effect.withSpan(SpanNames.TX_BUILD)),
|
|
74
|
+
confirm: (signature, opts) => Effect.gen(function* () {
|
|
75
|
+
const rpc = yield* rpcService.getRpc();
|
|
76
|
+
const commitment = opts?.commitment ?? "confirmed";
|
|
77
|
+
const timeout = opts?.timeout ?? 60_000;
|
|
78
|
+
const pollEffect = checkSignatureStatus(rpc, signature, commitment).pipe(Effect.flatMap((receipt) => receipt ? Effect.succeed(receipt) : Effect.fail("not-confirmed")));
|
|
79
|
+
const retrySchedule = Schedule.spaced("2 seconds");
|
|
80
|
+
return yield* pollEffect.pipe(Effect.retry(retrySchedule), Effect.timeout(`${timeout} millis`), Effect.catchTag("TimeoutException", () => Effect.fail(new TransactionTimeoutError({
|
|
81
|
+
message: `Transaction confirmation timed out after ${timeout}ms`,
|
|
82
|
+
signature,
|
|
83
|
+
}))), Effect.catchAll((error) => {
|
|
84
|
+
if (error instanceof TransactionFailedError) {
|
|
85
|
+
return Effect.fail(error);
|
|
86
|
+
}
|
|
87
|
+
return Effect.fail(new TransactionTimeoutError({
|
|
88
|
+
message: `Transaction confirmation timed out after ${timeout}ms`,
|
|
89
|
+
signature,
|
|
90
|
+
}));
|
|
91
|
+
}));
|
|
92
|
+
}).pipe(Effect.withSpan(SpanNames.TX_CONFIRM)),
|
|
93
|
+
send: (tx) => Effect.gen(function* () {
|
|
94
|
+
const rpc = yield* rpcService.getRpc();
|
|
95
|
+
const signature = getSignatureFromTransaction(tx);
|
|
96
|
+
const wireTransaction = getBase64EncodedWireTransaction(tx);
|
|
97
|
+
yield* Effect.tryPromise({
|
|
98
|
+
catch: (cause) => new TransactionSendError({
|
|
99
|
+
cause,
|
|
100
|
+
message: "Failed to send transaction",
|
|
101
|
+
signature,
|
|
102
|
+
}),
|
|
103
|
+
try: () => rpc
|
|
104
|
+
.sendTransaction(wireTransaction, { encoding: "base64", skipPreflight: false })
|
|
105
|
+
.send(),
|
|
106
|
+
});
|
|
107
|
+
return signature;
|
|
108
|
+
}).pipe(Effect.withSpan(SpanNames.TX_SEND)),
|
|
109
|
+
sendAll: (txs, opts) => Effect.gen(function* () {
|
|
110
|
+
const retries = opts?.sendRetries ?? 0;
|
|
111
|
+
const retryDelay = opts?.sendRetryDelay ?? 500;
|
|
112
|
+
const sendWithRetry = (tx) => {
|
|
113
|
+
const sendEffect = service.send(tx);
|
|
114
|
+
if (retries <= 0) {
|
|
115
|
+
return sendEffect;
|
|
116
|
+
}
|
|
117
|
+
const retrySchedule = pipe(Schedule.recurs(retries), Schedule.addDelay(() => Duration.millis(retryDelay)));
|
|
118
|
+
return sendEffect.pipe(Effect.retry(retrySchedule));
|
|
119
|
+
};
|
|
120
|
+
return yield* Effect.forEach(txs, (tx) => sendWithRetry(tx), opts?.concurrency ? { concurrency: opts.concurrency } : undefined);
|
|
121
|
+
}).pipe(Effect.withSpan(SpanNames.TX_SEND)),
|
|
122
|
+
sendAndConfirm: (instructions, opts) => Effect.gen(function* () {
|
|
123
|
+
const tx = yield* service.build(instructions);
|
|
124
|
+
const signed = yield* service.sign(tx);
|
|
125
|
+
const signature = yield* service.send(signed);
|
|
126
|
+
return yield* service.confirm(signature, opts);
|
|
127
|
+
}).pipe(Effect.withSpan(SpanNames.TX_SEND_AND_CONFIRM)),
|
|
128
|
+
sendAndConfirmBatch: (items, opts) => Effect.gen(function* () {
|
|
129
|
+
const built = yield* Effect.forEach(items, (item) => service.build(item.instructions, { computeBudget: item.computeBudget }), opts?.concurrency ? { concurrency: opts.concurrency } : undefined);
|
|
130
|
+
const signed = yield* service.signAll(built);
|
|
131
|
+
const signatures = yield* service.sendAll(signed, opts);
|
|
132
|
+
return yield* Effect.forEach(signatures, (signature) => service.confirm(signature, opts?.confirm), opts?.concurrency ? { concurrency: opts.concurrency } : undefined);
|
|
133
|
+
}).pipe(Effect.withSpan(SpanNames.TX_SEND_AND_CONFIRM)),
|
|
134
|
+
sign: (tx) => Effect.gen(function* () {
|
|
135
|
+
const compiled = compileTransaction(tx);
|
|
136
|
+
const typed = compiled;
|
|
137
|
+
return yield* signerService
|
|
138
|
+
.signTransaction(typed)
|
|
139
|
+
.pipe(Effect.mapError((error) => error instanceof SignatureError
|
|
140
|
+
? new TransactionSendError({ cause: error, message: error.message })
|
|
141
|
+
: error));
|
|
142
|
+
}).pipe(Effect.withSpan(SpanNames.TX_SIGN)),
|
|
143
|
+
signAll: (txs) => Effect.gen(function* () {
|
|
144
|
+
const compiled = txs.map((tx) => compileTransaction(tx));
|
|
145
|
+
return (yield* signerService
|
|
146
|
+
.signAllTransactions(compiled)
|
|
147
|
+
.pipe(Effect.mapError((error) => error instanceof SignatureError
|
|
148
|
+
? new TransactionSendError({ cause: error, message: error.message })
|
|
149
|
+
: error)));
|
|
150
|
+
}).pipe(Effect.withSpan(SpanNames.TX_SIGN)),
|
|
151
|
+
simulate: (tx) => Effect.gen(function* () {
|
|
152
|
+
const rpc = yield* rpcService.getRpc();
|
|
153
|
+
const compiled = compileTransaction(tx);
|
|
154
|
+
const typed = compiled;
|
|
155
|
+
const signed = yield* signerService
|
|
156
|
+
.signTransaction(typed)
|
|
157
|
+
.pipe(Effect.mapError((error) => error instanceof SignatureError
|
|
158
|
+
? new TransactionSendError({ cause: error, message: error.message })
|
|
159
|
+
: error));
|
|
160
|
+
const wireTransaction = getBase64EncodedWireTransaction(signed);
|
|
161
|
+
const result = yield* Effect.tryPromise({
|
|
162
|
+
catch: (cause) => new SimulationFailedError({
|
|
163
|
+
cause,
|
|
164
|
+
message: "Simulation failed",
|
|
165
|
+
}),
|
|
166
|
+
try: () => rpc.simulateTransaction(wireTransaction, { encoding: "base64" }).send(),
|
|
167
|
+
});
|
|
168
|
+
if (result.value.err) {
|
|
169
|
+
return yield* Effect.fail(new SimulationFailedError({
|
|
170
|
+
logs: result.value.logs ?? [],
|
|
171
|
+
message: "Simulation failed with error",
|
|
172
|
+
}));
|
|
173
|
+
}
|
|
174
|
+
}).pipe(Effect.withSpan(SpanNames.TX_SIMULATE)),
|
|
175
|
+
};
|
|
176
|
+
return TransactionService.of(service);
|
|
177
|
+
}));
|
|
178
|
+
//# sourceMappingURL=service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/tx/service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { Instruction } from "@solana/instructions";
|
|
2
|
+
import type { Signature } from "@solana/keys";
|
|
3
|
+
export type ConfirmOpts = {
|
|
4
|
+
readonly commitment?: "processed" | "confirmed" | "finalized";
|
|
5
|
+
readonly timeout?: number;
|
|
6
|
+
};
|
|
7
|
+
export type ComputeBudgetConfig = {
|
|
8
|
+
readonly unitLimit?: number;
|
|
9
|
+
readonly microLamports?: number | bigint;
|
|
10
|
+
};
|
|
11
|
+
export type TransactionBuildOpts = {
|
|
12
|
+
readonly computeBudget?: ComputeBudgetConfig;
|
|
13
|
+
};
|
|
14
|
+
export type TransactionBatchItem = {
|
|
15
|
+
readonly instructions: readonly Instruction[];
|
|
16
|
+
readonly computeBudget?: ComputeBudgetConfig;
|
|
17
|
+
};
|
|
18
|
+
export type TransactionBatchOpts = {
|
|
19
|
+
readonly concurrency?: number;
|
|
20
|
+
readonly sendRetries?: number;
|
|
21
|
+
readonly sendRetryDelay?: number;
|
|
22
|
+
readonly confirm?: ConfirmOpts;
|
|
23
|
+
};
|
|
24
|
+
export type TransactionReceipt = {
|
|
25
|
+
readonly signature: Signature;
|
|
26
|
+
readonly slot: bigint;
|
|
27
|
+
readonly confirmations: bigint | null;
|
|
28
|
+
};
|
|
29
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/tx/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAO9C,MAAM,MAAM,WAAW,GAAG;IAKxB,QAAQ,CAAC,UAAU,CAAC,EAAE,WAAW,GAAG,WAAW,GAAG,WAAW,CAAC;IAM9D,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B,CAAC;AAOF,MAAM,MAAM,mBAAmB,GAAG;IAIhC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAK5B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAC1C,CAAC;AAOF,MAAM,MAAM,oBAAoB,GAAG;IAIjC,QAAQ,CAAC,aAAa,CAAC,EAAE,mBAAmB,CAAC;CAC9C,CAAC;AAOF,MAAM,MAAM,oBAAoB,GAAG;IAIjC,QAAQ,CAAC,YAAY,EAAE,SAAS,WAAW,EAAE,CAAC;IAK9C,QAAQ,CAAC,aAAa,CAAC,EAAE,mBAAmB,CAAC;CAC9C,CAAC;AAOF,MAAM,MAAM,oBAAoB,GAAG;IAKjC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAM9B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAM9B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IAKjC,QAAQ,CAAC,OAAO,CAAC,EAAE,WAAW,CAAC;CAChC,CAAC;AAOF,MAAM,MAAM,kBAAkB,GAAG;IAI/B,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAK9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAKtB,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CACvC,CAAC"}
|
package/dist/tx/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/tx/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export type { Address, Commitment, Lamports, Signature, TransactionError, } from "@solana/kit";
|
|
2
|
+
export type { TransactionSigner } from "@solana/signers";
|
|
3
|
+
export type Cluster = "mainnet-beta" | "devnet" | "testnet" | "localnet";
|
|
4
|
+
export type ClusterConfig = {
|
|
5
|
+
readonly cluster: Cluster;
|
|
6
|
+
readonly rpcUrl: string;
|
|
7
|
+
readonly wsUrl?: string;
|
|
8
|
+
};
|
|
9
|
+
export type Microlamports = bigint & {
|
|
10
|
+
readonly _brand: "Microlamports";
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAYA,YAAY,EACV,OAAO,EACP,UAAU,EACV,QAAQ,EACR,SAAS,EACT,gBAAgB,GACjB,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AASzD,MAAM,MAAM,OAAO,GAAG,cAAc,GAAG,QAAQ,GAAG,SAAS,GAAG,UAAU,CAAC;AAKzE,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAUF,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG;IAAE,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAA;CAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":""}
|
package/package.json
ADDED
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@prb/effect-solana",
|
|
3
|
+
"description": "Effect-TS integration for Solana",
|
|
4
|
+
"version": "1.0.0-beta.0",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"author": {
|
|
9
|
+
"name": "Paul Razvan Berg",
|
|
10
|
+
"url": "https://github.com/PaulRBerg"
|
|
11
|
+
},
|
|
12
|
+
"license": "MIT",
|
|
13
|
+
"repository": {
|
|
14
|
+
"type": "git",
|
|
15
|
+
"url": "git+https://github.com/PaulRBerg/prb-effect.git",
|
|
16
|
+
"directory": "solana"
|
|
17
|
+
},
|
|
18
|
+
"bugs": {
|
|
19
|
+
"url": "https://github.com/PaulRBerg/prb-effect/issues"
|
|
20
|
+
},
|
|
21
|
+
"homepage": "https://github.com/PaulRBerg/prb-effect/tree/main/solana#readme",
|
|
22
|
+
"devDependencies": {
|
|
23
|
+
"@biomejs/biome": "catalog:dev",
|
|
24
|
+
"@effect/platform": "catalog:effect",
|
|
25
|
+
"@effect/vitest": "catalog:dev",
|
|
26
|
+
"@sablier/devkit": "catalog:dev",
|
|
27
|
+
"@solana-program/compute-budget": "^0.8.0",
|
|
28
|
+
"@solana-program/system": "^0.8.0",
|
|
29
|
+
"@solana-program/token": "^0.8.0",
|
|
30
|
+
"@solana/kit": "^2.2.7",
|
|
31
|
+
"@types/node": "^25.0.3",
|
|
32
|
+
"@types/react": "catalog:dev",
|
|
33
|
+
"@types/react-dom": "catalog:dev",
|
|
34
|
+
"@typescript/native-preview": "catalog:dev",
|
|
35
|
+
"@vitest/ui": "catalog:dev",
|
|
36
|
+
"effect": "catalog:effect",
|
|
37
|
+
"react": "catalog:",
|
|
38
|
+
"react-dom": "catalog:",
|
|
39
|
+
"tsc-alias": "catalog:dev",
|
|
40
|
+
"typescript": "catalog:dev",
|
|
41
|
+
"vitest": "catalog:dev"
|
|
42
|
+
},
|
|
43
|
+
"exports": {
|
|
44
|
+
".": {
|
|
45
|
+
"types": "./dist/index.d.ts",
|
|
46
|
+
"import": "./dist/index.js"
|
|
47
|
+
},
|
|
48
|
+
"./internal/*": null,
|
|
49
|
+
"./*": {
|
|
50
|
+
"types": "./dist/*/index.d.ts",
|
|
51
|
+
"import": "./dist/*/index.js"
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
"files": [
|
|
55
|
+
"dist/**",
|
|
56
|
+
"README.md",
|
|
57
|
+
"DOCS.md",
|
|
58
|
+
"CONTRIBUTING.md"
|
|
59
|
+
],
|
|
60
|
+
"peerDependencies": {
|
|
61
|
+
"@effect/platform": "catalog:peers",
|
|
62
|
+
"effect": "catalog:peers",
|
|
63
|
+
"@solana/kit": "^2.2.0",
|
|
64
|
+
"@solana-program/system": "^0.8.0",
|
|
65
|
+
"@solana-program/token": "^0.8.0",
|
|
66
|
+
"@solana-program/compute-budget": "^0.8.0",
|
|
67
|
+
"react": "catalog:peers",
|
|
68
|
+
"react-dom": "catalog:peers"
|
|
69
|
+
},
|
|
70
|
+
"peerDependenciesMeta": {
|
|
71
|
+
"react": {
|
|
72
|
+
"optional": true
|
|
73
|
+
},
|
|
74
|
+
"react-dom": {
|
|
75
|
+
"optional": true
|
|
76
|
+
}
|
|
77
|
+
},
|
|
78
|
+
"publishConfig": {
|
|
79
|
+
"access": "public"
|
|
80
|
+
}
|
|
81
|
+
}
|