Skip to content

refactor(sdk): rename .Effect to .effect#227

Merged
solidsnakedev merged 14 commits intomainfrom
refactor/effect-to-lowercase
Apr 7, 2026
Merged

refactor(sdk): rename .Effect to .effect#227
solidsnakedev merged 14 commits intomainfrom
refactor/effect-to-lowercase

Conversation

@solidsnakedev
Copy link
Copy Markdown
Collaborator

Renames the .Effect property to .effect on all SDK interfaces to follow JS conventions for instance properties and avoid confusion with the Effect type import from the effect library.

Changes

  • Rename .Effect.effect across Provider, Wallet, Client, SignBuilder, SubmitBuilder, and TransactionResult
  • Export Chain and ProviderError from package root
  • Refactor delegateTo into dedicated delegateToPool, delegateToDRep, delegateToPoolAndDRep functions (old function marked @deprecated)
  • Clean up redundant JSDoc @returns tags across builders
  • Regenerate module reference docs

Breaking Changes

All usages of .Effect must be updated to .effect:

- client.Effect.getProtocolParameters()
+ client.effect.getProtocolParameters()

- provider.Effect.submitTx(tx)
+ provider.effect.submitTx(tx)

- wallet.Effect.signTx(tx)
+ wallet.effect.signTx(tx)

Copilot AI review requested due to automatic review settings April 6, 2026 13:48
…llet, and builders

Renames the .Effect property to .effect on all SDK interfaces (Provider, Wallet,
Client, SignBuilder, SubmitBuilder, TransactionResult) to follow JS conventions
for instance properties and avoid confusion with the Effect type import.

Also includes:
- Export Chain and ProviderError from package root
- Refactor delegateTo into dedicated pool/drep/both functions
- Clean up redundant JSDoc @returns tags
- Fix spread order in signing client (wallet before provider)
@solidsnakedev solidsnakedev force-pushed the refactor/effect-to-lowercase branch from e3dfc20 to ce3add9 Compare April 6, 2026 13:50
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

This PR standardizes the SDK’s Effect-bearing instance property from .Effect to .effect (avoiding confusion with the Effect type), updates related client/provider/wallet/builders wiring, refactors stake delegation helpers, and regenerates module reference docs. It also re-exports Chain and ProviderError from the package root.

Changes:

  • Rename .Effect.effect across SDK interfaces and implementations (client, wallet, provider, builders, results).
  • Refactor delegateTo into dedicated pool/DRep delegation functions (keeping a deprecated dispatcher).
  • Regenerate docs and adjust exports (root exports now include Chain presets and ProviderError).

Reviewed changes

Copilot reviewed 135 out of 136 changed files in this pull request and generated 3 comments.

Show a summary per file
File Description
packages/evolution/src/sdk/wallet/WalletNew.ts Renames Effect property to effect; updates ApiWallet signTx context shape.
packages/evolution/src/sdk/provider/Provider.ts Renames Effect property to effect; trims redundant JSDoc.
packages/evolution/src/sdk/provider/Maestro.ts Provider implementation updated to effect.
packages/evolution/src/sdk/provider/Kupmios.ts Provider implementation updated to effect.
packages/evolution/src/sdk/provider/Koios.ts Provider implementation updated to effect.
packages/evolution/src/sdk/provider/Blockfrost.ts Provider implementation updated to effect.
packages/evolution/src/sdk/client/Wallets.ts Updates wallet constructors to expose effect; improves signer detection & CIP-30 caching.
packages/evolution/src/sdk/client/Providers.ts Minor formatting + docs cleanup for provider constructors.
packages/evolution/src/sdk/client/ClientImpl.ts Switches client composition to .effect; refines effect interface composition.
packages/evolution/src/sdk/client/Client.ts Updates client types to use .effect; removes old ProviderError from this module.
packages/evolution/src/sdk/builders/Unfrack.ts Removes redundant JSDoc @returns.
packages/evolution/src/sdk/builders/TxBuilderImpl.ts Uses provider .effect; minor formatting/log cleanup.
packages/evolution/src/sdk/builders/TransactionResult.ts Renames result Effect property to effect; removes redundant JSDoc.
packages/evolution/src/sdk/builders/TransactionBuilder.ts Uses provider/wallet .effect; doc updates and minor formatting.
packages/evolution/src/sdk/builders/SubmitBuilderImpl.ts Uses provider .effect; renames builder Effect property to effect.
packages/evolution/src/sdk/builders/SubmitBuilder.ts Renames Effect property to effect; removes redundant JSDoc.
packages/evolution/src/sdk/builders/SignBuilderImpl.ts Uses wallet/submit .effect; renames builder Effect property to effect.
packages/evolution/src/sdk/builders/SignBuilder.ts Renames Effect property to effect.
packages/evolution/src/sdk/builders/phases/utils.ts Removes redundant JSDoc @returns.
packages/evolution/src/sdk/builders/phases/Evaluation.ts Uses provider .effect.
packages/evolution/src/sdk/builders/operations/Stake.ts Delegation dispatcher refactor; switches protocol param fetch to provider .effect.
packages/evolution/src/sdk/builders/operations/Propose.ts Uses provider .effect.
packages/evolution/src/sdk/builders/operations/Pool.ts Uses provider .effect.
packages/evolution/src/sdk/builders/operations/Mint.ts Removes redundant JSDoc @returns.
packages/evolution/src/sdk/builders/operations/Governance.ts Uses provider .effect.
packages/evolution/src/sdk/builders/EvaluationStateManager.ts Removes redundant JSDoc @returns.
packages/evolution/src/index.ts Re-exports Chain and ProviderError from the package root.
docs/next-env.d.ts Formatting tweak (adds semicolon).
packages/evolution/docs/modules/Withdrawals.ts.md Regenerated docs (nav order).
packages/evolution/docs/modules/VrfVkey.ts.md Regenerated docs (nav order).
packages/evolution/docs/modules/VrfKeyHash.ts.md Regenerated docs (nav order).
packages/evolution/docs/modules/VrfCert.ts.md Regenerated docs (nav order).
packages/evolution/docs/modules/VotingProcedures.ts.md Regenerated docs (nav order).
packages/evolution/docs/modules/VKey.ts.md Regenerated docs (nav order).
packages/evolution/docs/modules/Value.ts.md Regenerated docs (nav order).
packages/evolution/docs/modules/UTxO.ts.md Regenerated docs (nav order).
packages/evolution/docs/modules/utils/Hash.ts.md Regenerated docs (nav order).
packages/evolution/docs/modules/utils/FeeValidation.ts.md Regenerated docs (nav order).
packages/evolution/docs/modules/utils/effect-runtime.ts.md Regenerated docs (nav order).
packages/evolution/docs/modules/Url.ts.md Regenerated docs (nav order).
packages/evolution/docs/modules/uplc/UPLC.ts.md Regenerated docs (nav order).
packages/evolution/docs/modules/UnitInterval.ts.md Regenerated docs (nav order).
packages/evolution/docs/modules/TxOut.ts.md Regenerated docs (nav order).
packages/evolution/docs/modules/TSchema.ts.md Regenerated docs (nav order).
packages/evolution/docs/modules/TransactionWitnessSet.ts.md Regenerated docs (nav order).
packages/evolution/docs/modules/TransactionOutput.ts.md Regenerated docs (nav order).
packages/evolution/docs/modules/TransactionMetadatumLabels.ts.md Regenerated docs (nav order).
packages/evolution/docs/modules/TransactionMetadatum.ts.md Regenerated docs (nav order).
packages/evolution/docs/modules/TransactionInput.ts.md Regenerated docs (nav order).
packages/evolution/docs/modules/TransactionIndex.ts.md Regenerated docs (nav order).
packages/evolution/docs/modules/TransactionHash.ts.md Regenerated docs (nav order).
packages/evolution/docs/modules/TransactionBody.ts.md Regenerated docs (nav order).
packages/evolution/docs/modules/Transaction.ts.md Regenerated docs (updated narrative for addVKeyWitnessesBytes + nav order).
packages/evolution/docs/modules/Time/UnixTime.ts.md Regenerated docs (nav order).
packages/evolution/docs/modules/Time/SlotConfig.ts.md Regenerated docs (nav order).
packages/evolution/docs/modules/Time/Slot.ts.md Regenerated docs (nav order).
packages/evolution/docs/modules/Text128.ts.md Regenerated docs (nav order).
packages/evolution/docs/modules/Text.ts.md Regenerated docs (nav order).
packages/evolution/docs/modules/StakeReference.ts.md Regenerated docs (nav order).
packages/evolution/docs/modules/SingleHostName.ts.md Regenerated docs (nav order).
packages/evolution/docs/modules/SingleHostAddr.ts.md Regenerated docs (nav order).
packages/evolution/docs/modules/sdk/wallet/WalletNew.ts.md Regenerated docs for .effect rename + ApiWallet signTx context.
packages/evolution/docs/modules/sdk/wallet/Derivation.ts.md Regenerated docs (adds paymentIndex/stakeIndex options in signature).
packages/evolution/docs/modules/sdk/Type.ts.md Regenerated docs (nav order).
packages/evolution/docs/modules/sdk/provider/Provider.ts.md Regenerated docs for .effect rename + awaitTx signature.
packages/evolution/docs/modules/sdk/provider/Maestro.ts.md Regenerated docs for .effect rename + awaitTx signature.
packages/evolution/docs/modules/sdk/provider/Kupmios.ts.md Regenerated docs for .effect rename + awaitTx signature.
packages/evolution/docs/modules/sdk/provider/Koios.ts.md Regenerated docs for .effect rename + awaitTx signature.
packages/evolution/docs/modules/sdk/provider/Blockfrost.ts.md Regenerated docs for .effect rename + awaitTx signature.
packages/evolution/docs/modules/sdk/EvalRedeemer.ts.md Regenerated docs (nav order).
packages/evolution/docs/modules/sdk/client/Wallets.ts.md New generated docs for wallet constructors/factories.
packages/evolution/docs/modules/sdk/client/Providers.ts.md New generated docs for provider constructors.
packages/evolution/docs/modules/sdk/client/dual.ts.md New generated docs for dual/dualify utilities.
packages/evolution/docs/modules/sdk/client/ClientImpl.ts.md Regenerated docs for createClient overloads and categories.
packages/evolution/docs/modules/sdk/client/Client.ts.md Regenerated docs for new Chain-based client API + .effect.
packages/evolution/docs/modules/sdk/client/Chain.ts.md New generated docs for Chain presets/model.
packages/evolution/docs/modules/sdk/builders/TransactionResult.ts.md Regenerated docs for .effect rename.
packages/evolution/docs/modules/sdk/builders/TransactionBuilder.ts.md Regenerated docs for .effect rename and Chain-required builder config.
packages/evolution/docs/modules/sdk/builders/SubmitBuilder.ts.md Regenerated docs for .effect rename.
packages/evolution/docs/modules/sdk/builders/SignBuilder.ts.md Regenerated docs for .effect rename.
packages/evolution/docs/modules/sdk/builders/operations/Stake.ts.md Regenerated docs to mark createDelegateToProgram deprecated + signature change.
packages/evolution/docs/modules/blueprint/codegen-config.ts.md Regenerated docs (config fields/wording updates).
docs/content/docs/modules/Withdrawals.mdx Site docs regen (nav order).
docs/content/docs/modules/VrfVkey.mdx Site docs regen (nav order).
docs/content/docs/modules/VrfKeyHash.mdx Site docs regen (nav order).
docs/content/docs/modules/VrfCert.mdx Site docs regen (nav order).
docs/content/docs/modules/VotingProcedures.mdx Site docs regen (nav order).
docs/content/docs/modules/VKey.mdx Site docs regen (nav order).
docs/content/docs/modules/Value.mdx Site docs regen (nav order).
docs/content/docs/modules/UTxO.mdx Site docs regen (nav order).
docs/content/docs/modules/utils/Hash.mdx Site docs regen (nav order).
docs/content/docs/modules/utils/FeeValidation.mdx Site docs regen (nav order).
docs/content/docs/modules/utils/effect-runtime.mdx Site docs regen (nav order).
docs/content/docs/modules/Url.mdx Site docs regen (nav order).
docs/content/docs/modules/uplc/UPLC.mdx Site docs regen (nav order).
docs/content/docs/modules/UnitInterval.mdx Site docs regen (nav order).
docs/content/docs/modules/TxOut.mdx Site docs regen (nav order).
docs/content/docs/modules/TSchema.mdx Site docs regen (nav order).
docs/content/docs/modules/TransactionWitnessSet.mdx Site docs regen (nav order).
docs/content/docs/modules/TransactionOutput.mdx Site docs regen (nav order).
docs/content/docs/modules/TransactionMetadatumLabels.mdx Site docs regen (nav order).
docs/content/docs/modules/TransactionMetadatum.mdx Site docs regen (nav order).
docs/content/docs/modules/TransactionInput.mdx Site docs regen (nav order).
docs/content/docs/modules/TransactionIndex.mdx Site docs regen (nav order).
docs/content/docs/modules/TransactionHash.mdx Site docs regen (nav order).
docs/content/docs/modules/TransactionBody.mdx Site docs regen (nav order).
docs/content/docs/modules/Transaction.mdx Site docs regen (addVKeyWitnessesBytes narrative + nav order).
docs/content/docs/modules/Time/UnixTime.mdx Site docs regen (nav order).
docs/content/docs/modules/Time/SlotConfig.mdx Site docs regen (nav order).
docs/content/docs/modules/Time/Slot.mdx Site docs regen (nav order).
docs/content/docs/modules/Text128.mdx Site docs regen (nav order).
docs/content/docs/modules/Text.mdx Site docs regen (nav order).
docs/content/docs/modules/StakeReference.mdx Site docs regen (nav order).
docs/content/docs/modules/SingleHostName.mdx Site docs regen (nav order).
docs/content/docs/modules/SingleHostAddr.mdx Site docs regen (nav order).
docs/content/docs/modules/sdk/wallet/WalletNew.mdx Site docs regen for .effect rename + ApiWallet signTx context.
docs/content/docs/modules/sdk/wallet/Derivation.mdx Site docs regen (adds paymentIndex/stakeIndex options).
docs/content/docs/modules/sdk/Type.mdx Site docs regen (nav order).
docs/content/docs/modules/sdk/provider/Provider.mdx Site docs regen for .effect rename + awaitTx signature.
docs/content/docs/modules/sdk/provider/Maestro.mdx Site docs regen for .effect rename + awaitTx signature.
docs/content/docs/modules/sdk/provider/Kupmios.mdx Site docs regen for .effect rename + awaitTx signature.
docs/content/docs/modules/sdk/provider/Koios.mdx Site docs regen for .effect rename + awaitTx signature.
docs/content/docs/modules/sdk/provider/Blockfrost.mdx Site docs regen for .effect rename + awaitTx signature.
docs/content/docs/modules/sdk/EvalRedeemer.mdx Site docs regen (nav order).
docs/content/docs/modules/sdk/client/Wallets.mdx New site docs for wallet constructors/factories.
docs/content/docs/modules/sdk/client/Providers.mdx New site docs for provider constructors.
docs/content/docs/modules/sdk/client/dual.mdx New site docs for dual/dualify utilities.
docs/content/docs/modules/sdk/client/ClientImpl.mdx Site docs regen for createClient overloads.
docs/content/docs/modules/sdk/client/Client.mdx Site docs regen for Chain-based client API + .effect.
docs/content/docs/modules/sdk/client/Chain.mdx New site docs for Chain presets/model.
docs/content/docs/modules/sdk/builders/TransactionResult.mdx Site docs regen for .effect rename.
docs/content/docs/modules/sdk/builders/TransactionBuilder.mdx Site docs regen for .effect rename and Chain-required builder config.
docs/content/docs/modules/sdk/builders/SubmitBuilder.mdx Site docs regen for .effect rename.
docs/content/docs/modules/sdk/builders/SignBuilder.mdx Site docs regen for .effect rename.
docs/content/docs/modules/sdk/builders/operations/Stake.mdx Site docs regen marking createDelegateToProgram deprecated + signature change.
docs/content/docs/modules/blueprint/codegen-config.mdx Site docs regen (config fields/wording updates).

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines 128 to 156
@@ -128,7 +129,7 @@ const createSigningClient = (
): Effect.Effect<TransactionWitnessSet.TransactionWitnessSet, WalletNew.WalletError> =>
Effect.gen(function* () {
if (context?.referenceUtxos && context.referenceUtxos.length > 0) {
return yield* wallet.Effect.signTx(txOrHex, context)
return yield* wallet.effect.signTx(txOrHex, context)
}

const tx =
@@ -142,37 +143,53 @@ const createSigningClient = (

let referenceUtxos: ReadonlyArray<CoreUTxO.UTxO> = []
if (tx.body.referenceInputs && tx.body.referenceInputs.length > 0) {
referenceUtxos = yield* provider.Effect.getUtxosByOutRef(tx.body.referenceInputs).pipe(
Effect.mapError(
(e) => new WalletNew.WalletError({ message: `Failed to fetch reference UTxOs: ${e.message}`, cause: e })
referenceUtxos = yield* provider.effect
.getUtxosByOutRef(tx.body.referenceInputs)
.pipe(
Effect.mapError(
(e) => new WalletNew.WalletError({ message: `Failed to fetch reference UTxOs: ${e.message}`, cause: e })
)
)
)
}

return yield* wallet.Effect.signTx(txOrHex, { ...context, referenceUtxos })
return yield* wallet.effect.signTx(txOrHex, { ...context, referenceUtxos })
})
Copy link

Copilot AI Apr 6, 2026

Choose a reason for hiding this comment

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

In createSigningClient, signTxWithAutoFetch forwards context (and a { ...context, referenceUtxos } object) to wallet.effect.signTx(). For ApiWalletEffect, signTx no longer accepts referenceUtxos, so this call can fail TypeScript excess-property checks and makes the implementation incompatible with ApiWallets. Consider branching on wallet.type === "api" to strip referenceUtxos (and skip auto-fetch) when delegating to an API wallet, while keeping the full context for SigningWallets.

Copilot uses AI. Check for mistakes.
Comment on lines +367 to +374
const fetchPrimaryAddress = (): Promise<CoreAddress.Address> => {
if (!addressPromise) {
addressPromise = (async () => {
const used = await api.getUsedAddresses()
const unused = await api.getUnusedAddresses()
const addrStr = used[0] ?? unused[0]
if (!addrStr) throw new WalletNew.WalletError({ message: "Wallet API returned no addresses", cause: null })
try {
Copy link

Copilot AI Apr 6, 2026

Choose a reason for hiding this comment

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

fetchPrimaryAddress caches the in-flight Promise in addressPromise, but if the first call rejects (e.g., wallet returns no addresses, transient provider issue), the rejected Promise will be cached permanently and subsequent calls will never retry. Consider clearing addressPromise back to null on rejection so later calls can recover.

Copilot uses AI. Check for mistakes.
Comment on lines +391 to +397
const fetchPrimaryRewardAddress = (): Promise<CoreRewardAddress.RewardAddress | null> => {
if (!rewardAddressPromise) {
rewardAddressPromise = api
.getRewardAddresses()
.then((rewards) => (rewards[0] ? Schema.decodeSync(CoreRewardAddress.RewardAddress)(rewards[0]) : null))
}
return cachedAddress
return rewardAddressPromise
Copy link

Copilot AI Apr 6, 2026

Choose a reason for hiding this comment

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

fetchPrimaryRewardAddress caches rewardAddressPromise without resetting it on rejection. A single failure (wallet API error or decode error) will permanently poison the cache for the lifetime of the wallet instance. Consider resetting the cached promise on failure (or caching only successful results).

Copilot uses AI. Check for mistakes.
@solidsnakedev solidsnakedev force-pushed the refactor/effect-to-lowercase branch from ce3add9 to 844f45c Compare April 6, 2026 14:25
Replace manual Promise-based cache variables with Effect.cached — eliminates
the null-reset-on-rejection pattern and the mixed Promise/Effect boundary.

Effect.cached allocates a Deferred synchronously (safe for Effect.runSync at
construction time) and replays success or failure to all subsequent callers.
Caching failures permanently is acceptable here because a failed cip30Wallet
instance is tied to a broken wallet-enable session and should be discarded.
- Move signing logic from Wallets.ts to new internal/Signing.ts
- Extract client assembly to new internal/Client.ts
- Rename WalletNew to Wallet, delete ClientImpl and dual modules
- Simplify runEffectPromise: remove stack-cleaning mutation, preserve instanceof
- Replace all Effect.runPromise with runEffectPromise across client layer
- Unify provider method wiring (spread instead of manual .bind())
- Make ProviderError.cause optional, remove cause: null sentinels
@solidsnakedev solidsnakedev merged commit f60b28e into main Apr 7, 2026
9 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants