Skip to content

SDP-1592: Add embedded wallet provider - #1019

Merged
philipliu merged 121 commits into
developfrom
feature/c-accounts
Feb 3, 2026
Merged

SDP-1592: Add embedded wallet provider#1019
philipliu merged 121 commits into
developfrom
feature/c-accounts

Conversation

@philipliu

@philipliu philipliu commented Jan 20, 2026

Copy link
Copy Markdown
Contributor

What

This merges the embedded wallet feature into develop

Why

N/A

Known limitations

N/A

Checklist

  • Title follows SDP-1234: Add new feature or Chore: Refactor package xyz format. The Jira ticket code was included if available.
  • PR has a focused scope and doesn't mix features with refactoring
  • Tests are included (if applicable)
  • CHANGELOG.md is updated (if applicable)
  • CONFIG/SECRETS changes are updated in helmcharts and deployments (if applicable)
  • Preview deployment works as expected
  • Ready for production

philipliu and others added 30 commits April 24, 2025 10:42
* Implement disbursements to contract accounts

* Update go.list

* fmt

* Fix typo in unit test

Co-authored-by: Copilot <[email protected]>

* Fix error message

---------

Co-authored-by: Copilot <[email protected]>
Chore: Merge `develop` into `feature/c-accounts`
* Upgrade to AP 3.2.0-beta.1 and set up config

* Add docs for RpcOptions

* Fix serve test

* Update internal/serve/httphandler/stellar_toml_handler.go

Co-authored-by: Copilot <[email protected]>

* Fix custom_set_value tests

* Fix AP SEP-45 config

* Remove RpcOptions from TSS

* Fix Anchor Platform sep45.enabled config

* Fix custom_set_value error message

---------

Co-authored-by: Copilot <[email protected]>
* Implement webauthn account contract

* Add tests

* Implement tests

* Cleanup

* Add GH workflow

* Update base64_url

* Fix comment

* Use single signature

* Fix challenge check

* Fix comment

* Update docker_image_public_release workflow
* Parse challenge as JSON

* Add unit test for invalid challenge length
Chore: Merge `develop` into `feature/c-accounts`
* Implement wallet creation service

* Typo

* PR comments

* PR comments
* Add wallet creation type to TSS transactions

* PR comments

* Fix constraint
* Refactor payment transaction handling out of TSS

* PR comments
* Implement wallet creation for embedded wallets

* PR comments

* Rename Dynamic -> SelfHosted
* Implement wallet creation TSS worker

* Dependency injection

* Update wallet creation transaction worker

* Config

* PR comments

* Mocks

* Auth header
* Add sponsored type to TSS transactions

* Copilot

* Rename fields and use enum type

* Fix constraint
* SDP-1689 Prevent unregistering user-managed wallets and wallets with in-progress payments. (#683)

* Feat: Turn on service account use in the ap deployment in the helm chart (#679)

### What

Turn on the service account in the helm chart for the ap deployment

### Why

Currently the serviceaccount name is commented out while all the other deployments have the serviceaccountname set up

* Bump vite (#654)

* Bump the minor-and-patch group across 1 directory with 6 updates (#690)

* Bump the minor-and-patch group across 1 directory with 6 updates

Bumps the minor-and-patch group with 6 updates in the / directory:

| Package | From | To |
| --- | --- | --- |
| [github.com/getsentry/sentry-go](https://github.com/getsentry/sentry-go) | `0.32.0` | `0.33.0` |
| [github.com/nyaruka/phonenumbers](https://github.com/nyaruka/phonenumbers) | `1.6.1` | `1.6.3` |
| [github.com/segmentio/kafka-go](https://github.com/segmentio/kafka-go) | `0.4.47` | `0.4.48` |
| [github.com/twilio/twilio-go](https://github.com/twilio/twilio-go) | `1.25.1` | `1.26.1` |
| [golang.org/x/crypto](https://github.com/golang/crypto) | `0.37.0` | `0.38.0` |
| [golang.org/x/net](https://github.com/golang/net) | `0.39.0` | `0.40.0` |



Updates `github.com/getsentry/sentry-go` from 0.32.0 to 0.33.0
- [Release notes](https://github.com/getsentry/sentry-go/releases)
- [Changelog](https://github.com/getsentry/sentry-go/blob/master/CHANGELOG.md)
- [Commits](getsentry/sentry-go@v0.32.0...v0.33.0)

Updates `github.com/nyaruka/phonenumbers` from 1.6.1 to 1.6.3
- [Release notes](https://github.com/nyaruka/phonenumbers/releases)
- [Changelog](https://github.com/nyaruka/phonenumbers/blob/main/CHANGELOG.md)
- [Commits](nyaruka/phonenumbers@v1.6.1...v1.6.3)

Updates `github.com/segmentio/kafka-go` from 0.4.47 to 0.4.48
- [Release notes](https://github.com/segmentio/kafka-go/releases)
- [Commits](segmentio/kafka-go@v0.4.47...v0.4.48)

Updates `github.com/twilio/twilio-go` from 1.25.1 to 1.26.1
- [Release notes](https://github.com/twilio/twilio-go/releases)
- [Changelog](https://github.com/twilio/twilio-go/blob/main/CHANGES.md)
- [Commits](twilio/twilio-go@v1.25.1...v1.26.1)

Updates `golang.org/x/crypto` from 0.37.0 to 0.38.0
- [Commits](golang/crypto@v0.37.0...v0.38.0)

Updates `golang.org/x/net` from 0.39.0 to 0.40.0
- [Commits](golang/net@v0.39.0...v0.40.0)

---
updated-dependencies:
- dependency-name: github.com/getsentry/sentry-go
  dependency-version: 0.33.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: minor-and-patch
- dependency-name: github.com/nyaruka/phonenumbers
  dependency-version: 1.6.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: minor-and-patch
- dependency-name: github.com/segmentio/kafka-go
  dependency-version: 0.4.48
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: minor-and-patch
- dependency-name: github.com/twilio/twilio-go
  dependency-version: 1.26.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: minor-and-patch
- dependency-name: golang.org/x/crypto
  dependency-version: 0.38.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: minor-and-patch
- dependency-name: golang.org/x/net
  dependency-version: 0.40.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: minor-and-patch
...

Signed-off-by: dependabot[bot] <[email protected]>

* Update CHANGELOG.md

* Update go.list

---------

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Marcelo Salloum <[email protected]>

* SDP 1685 add create receiver endpoint (#687)

* SDP 1685 add create receiver endpoint

* SDP 1685 receiver shadowing fix

* SDP-1685 discussions fix

* Add badges to the README.md file (#691)

### What

Add Several badges to the README.md:

<img width="969" alt="Screenshot 2025-05-23 at 2 19 10 PM" src="https://github.com/user-attachments/assets/d0a45bb4-4d35-4ccb-a9c7-798e16845ffe" />

This includes the DeepWiki badge, which ensures DeepWiki will re-index this repo once a week.

### Why

📈  Kaizen

* chore: bump version to 3.7.1

* Fix stellar.expert pubnet URL configuration in helm chart

* SDP-1630: add api key auth to all SDP endpoints (#681)

* SDP-1630 add api keys middleware

* SDP-1630 fix existing tests

* SDP 1630 merge develop

* SDP 1630

* SDP 1630 gofumpt

* SDP 1630

* SDP 1630 changelog update

* SDP 1630 keys parsing improve

* SDP 1630 update remote debug template file

* SDP-1630 resolve discussions

* SDP 1630 resolve discussion

* SDP 1686 create wallet endpoint update (#696)

* SDP 1686 create wallet endpoint update

* SDP-1686

* SDP-1686 fix test

* SDP-1686

* SDP 1687 update wallet patch endpoint (#697)

* SDP 1686 create wallet endpoint update

* SDP-1686

* SDP-1686 fix test

* SDP-1687 update PATCH endpoint

* SDP 1687 update chengelog

* SDP 1687

* SDP-1687 linter fix

* SDP-1687 discussions fix

* SDP-1687

---------

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: Marwen Abid <[email protected]>
Co-authored-by: Traver Tischio <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Marcelo Salloum <[email protected]>
Co-authored-by: Denys <[email protected]>
Co-authored-by: Marcelo Salloum dos Santos <[email protected]>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
* Update embedded wallets configuration

* Fix embedded_wallet_serivce_test

* PR comments
* Remove tenant_id from embedded_wallet

* PR comments

* Oops
* Generate unique tokens

* DI

* Remove tenant ID

* Fix test
* Fix wallet creation transaction building

* Empty commit
* Fix embedded wallet service DI

* PR comments
* Implement embedded wallet from TSS sync

* Rename

* Fix tests

* Fix shadow

* PR comments

* Fix tests
* Fetch wallet status by credential_id

* PR comments

* Copilot comment
* Update helm chart

* Improve RPC header documentation

* Spacing

* Update descriptions
Chore: Merge `develop` into `feature/c-accounts`
philipliu and others added 2 commits February 2, 2026 12:21
…1025)

### What
Reuse invite link when there is already an existing pending embedded
wallet for the receiver.

### Why

When resending an invitation for an embedded wallet via `PATCH
/receivers/wallets/{id}`, the system was creating fresh entries in the
`embedded_wallets` table for each resend attempt, even when a PENDING
registration already
existed for that receiver wallet. This caused:
1. Duplicate entries accumulating in the embedded_wallets table
2. Previously sent invitation links becoming orphaned/invalid
3. Potential confusion for receivers who might have multiple
valid-looking registration tokens
### What

This treats any TSS transactions with the `function_trapped` op code as
a permanent failure.

### Why

We observed this op code when the TSS tries submitting an XLM payment
via SAC, where the transfer brings the balance below 0 after fees. In
general, we want any contract execution failures (`function_trapped`) to
be marked as a failure.

### Known limitations

N/A

### Checklist

- [x] Title follows `SDP-1234: Add new feature` or `Chore: Refactor
package xyz` format. The Jira ticket code was included if available.
- [x] PR has a focused scope and doesn't mix features with refactoring
- [x] Tests are included (if applicable)
- [ ] `CHANGELOG.md` is updated (if applicable)
- [ ] CONFIG/SECRETS changes are updated in helmcharts and deployments
(if applicable)
- [ ] Preview deployment works as expected
- [ ] Ready for production
### What

Add missing database indexes to support embedded wallet flows:
- `embedded_wallets_contract_address_idx`: used by `GET
/embedded-wallets/profile` to resolve the wallet/receiver by
`contract_address`.
- `payments_receiver_wallet_type_status_updated_at_idx`: used by `GET
/embedded-wallets/profile` when verification is pending, to fetch the
latest in‑progress disbursement asset for the wallet.
- `embedded_wallets_status_updated_at_idx`: used by the embedded wallet
submission job.
- `sponsored_transactions_status_updated_at_idx`: used by the sponsored
transaction submission job.

### Why

The embedded wallet feature introduced new query paths that require new
indexes.

### Known limitations

N/A

### Checklist

- [x] Title follows `SDP-1234: Add new feature` or `Chore: Refactor
package xyz` format. The Jira ticket code was included if available.
- [x] PR has a focused scope and doesn't mix features with refactoring
- [ ] Tests are included (if applicable)
- [ ] `CHANGELOG.md` is updated (if applicable)
- [ ] CONFIG/SECRETS changes are updated in helmcharts and deployments
(if applicable)
- [ ] Preview deployment works as expected
- [ ] Ready for production
### What

This simulates sponsored transactions before persisting them in TSS.

### Why

To catch invalid or failing contract invocations earlier and return
clearer client errors instead of creating sponsored transactions that
would later fail.

### Known limitations

N/A

### Checklist

- [x] Title follows `SDP-1234: Add new feature` or `Chore: Refactor
package xyz` format. The Jira ticket code was included if available.
- [x] PR has a focused scope and doesn't mix features with refactoring
- [x] Tests are included (if applicable)
- [ ] `CHANGELOG.md` is updated (if applicable)
- [ ] CONFIG/SECRETS changes are updated in helmcharts and deployments
(if applicable)
- [ ] Preview deployment works as expected
- [ ] Ready for production
Chore: Merge `develop` into `feature/c-accounts` and update `CHANGELOG.md`
@philipliu
philipliu temporarily deployed to Internal SEP Tests February 3, 2026 14:47 — with GitHub Actions Inactive
@philipliu
philipliu temporarily deployed to Receiver Registration - E2E Integration Tests (Stellar) February 3, 2026 14:47 — with GitHub Actions Inactive
### What

This PR adds a manual workflow to build contract WASMs and generate
attestations, updates the release/PR checklists to ensure WASMs are
attached when contracts change, and documents the WASM update step in
the PR process.

### Why

We want to build contracts with attestations so their source code can be
verified via SEP-55. We also need an easily accessible copy of the WASMs
for testnet/pubnet outside of releases; if we only upload them to
releases when they change, locating the correct WASM is harder. Keeping
the WASMs in the repo makes them easy to find, and their size is small
enough that this is acceptable.

### Known limitations

N/A

### Checklist

- [x] Title follows `SDP-1234: Add new feature` or `Chore: Refactor
package xyz` format. The Jira ticket code was included if available.
- [x] PR has a focused scope and doesn't mix features with refactoring
- [ ] Tests are included (if applicable)
- [ ] `CHANGELOG.md` is updated (if applicable)
- [ ] CONFIG/SECRETS changes are updated in helmcharts and deployments
(if applicable)
- [ ] Preview deployment works as expected
- [ ] Ready for production
@philipliu
philipliu temporarily deployed to Internal SEP Tests February 3, 2026 15:01 — with GitHub Actions Inactive
@philipliu
philipliu temporarily deployed to Receiver Registration - E2E Integration Tests (Stellar) February 3, 2026 15:01 — with GitHub Actions Inactive
@philipliu
philipliu marked this pull request as ready for review February 3, 2026 15:02
Copilot AI review requested due to automatic review settings February 3, 2026 15:02
CREATE TABLE embedded_wallets (
token VARCHAR(36) PRIMARY KEY,
wasm_hash VARCHAR(64),
contract_address VARCHAR(56),

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

We're missing some index / unique constraints here I think. contract_address should be unique right ? It is also used for lookups.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

You're right. We have an index, but it should be unique too.

WalletStatus: data.PendingWalletStatus,
}

embeddedWallet, err := e.sdpModels.EmbeddedWallets.Insert(ctx, e.sdpModels.DBConnectionPool, insert)

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Do we need to pass in dbTx here instead of the connection pool ?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Yes, nice catch.

SELECT ` + SponsoredTransactionColumnNames("", "") + `
FROM sponsored_transactions
WHERE id = $1
AND account = $2

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Do we have a unique index for both id and account to avoid dupes ?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

id is the primary key, so I don't think duplicate records are possible.

transactions := make([]store.Transaction, 0, len(wallets))
for _, wallet := range wallets {
if wallet.PublicKey == "" || wallet.WasmHash == "" {
log.Ctx(ctx).Warnf("embedded wallet %s is missing required data, skipping", wallet.Token)

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

What happens to these wallets ? Do they get stuck in this state ?
It may be ok because we're logging a warning here.
If there is no chance of recovery, we can consider setting them to failed.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

The public key is set when the user creates their passkey, so we should leave those records pending, but the Wasm hash should always be present. Rather than marking the records as failed, we can enforce non-null at the DB level. WDYT?

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Sounds good!

return
}

contractAddress, err := getInvokeContractAddress(reqBody.OperationXDR)

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

❓Are we also validating at some point that the invoker is correct ? (matches wallet contract address from JWT).

Do we also need to validate InvokeContract.FunctionName to limit the type of functions allowed: only allow transfer.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

There's no concept of an invoker in Soroban, but if we limit the functions to transfers only, we can check that the first address argument is the wallet. I think this is a good idea.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

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 integrates embedded wallet functionality into the develop branch, enabling users to create and manage Stellar smart contract wallets through the platform. The implementation includes SEP-45 authentication support, WebAuthn passkey integration, and new transaction submission pipelines for wallet creation and sponsored transactions.

Changes:

  • Adds embedded wallet service with smart contract deployment capabilities
  • Implements SEP-45 web authentication for contract-based wallets
  • Introduces WebAuthn passkey authentication support
  • Extends transaction submission system to handle wallet creation and sponsored transactions

Reviewed changes

Copilot reviewed 147 out of 218 changed files in this pull request and generated 5 comments.

Show a summary per file
File Description
internal/services/sep45_service_mock.go Generated mock for SEP-45 service testing
internal/services/sep10_service_test.go Adds nonce store to SEP-10 service and tests nonce replay protection
internal/services/send_receiver_wallets_invite_service.go Updates invitation service to support embedded wallet deep links
internal/services/paymentdispatchers/stellar_payment_dispatcher.go Restructures transaction format for TSS compatibility
internal/services/payment_from_submitter_service.go Adds transaction type filtering for payment syncing
internal/services/nonce_store.go Implements nonce storage for replay attack prevention
internal/services/mocks/*.go Generated mocks for wallet creation and sponsored transaction services
internal/serve/middleware/wallet_auth_middleware.go New middleware for wallet JWT authentication
internal/serve/httphandler/wallets_handler.go Adds embedded wallet filtering and validation
internal/serve/httphandler/wallet_creation_handler.go New handler for embedded wallet creation endpoints
internal/serve/httphandler/verify_receiver_registration_handler.go Updates to use renamed WebAuth claims methods
internal/serve/httphandler/stellar_toml_handler.go Adds SEP-45 contract information to TOML
internal/serve/httphandler/sep45_handler.go New handler for SEP-45 challenge/validation endpoints
internal/serve/httphandler/sep24_handler.go Updates to use unified WebAuth claims
internal/serve/httphandler/rpc_proxy_handler.go New handler for proxying RPC requests
internal/serve/httphandler/embedded_wallet_profile_handler.go New handler for embedded wallet profile endpoints
internal/serve/httphandler/disbursement_handler.go Updates validation to support embedded wallets without verification
internal/sepauth/webauth_auth_middleware.go New unified middleware supporting both SEP-10 and SEP-45 tokens
internal/sepauth/sep24_jwt_claims.go Updates to support contract addresses in claims
internal/sepauth/jwt_manager.go Adds SEP-45 token generation and parsing
internal/sdpcontext/context.go Adds wallet contract address context helpers
internal/scheduler/scheduler.go Registers new jobs for embedded wallet sync
internal/scheduler/jobs/*.go New jobs for wallet creation and sponsored transaction sync
internal/monitor/tss_*.go Adds metrics for wallet creation and sponsored transactions
internal/dependencyinjection/*.go New dependency injection for WebAuthn and RPC client
internal/data/*.go Database models and migrations for embedded wallets, nonces, and passkey sessions
helmchart/sdp/values.yaml Configuration for embedded wallet features
go.mod Adds WebAuthn and CBOR dependencies
contracts/smart-wallet/* Smart contract implementation for embedded wallets
db/migrations/* Database schema changes for embedded wallet support
dev/* Development environment updates for embedded wallet testing
cmd/*.go Command-line updates for embedded wallet configuration


func (c *SEP24JWTClaims) SEP10StellarMemo() string {
func (c *SEP24JWTClaims) Memo() string {
// The SEP-10 account will be in the format "account:memo", in case there's a memo.

Copilot AI Feb 3, 2026

Copy link

Choose a reason for hiding this comment

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

The comment still references 'SEP-10 account' but should also mention SEP-45 since the method now supports both authentication types. Update to: 'The SEP-10 or SEP-45 account will be in the format "account:memo", in case there's a memo.'

Suggested change
// The SEP-10 account will be in the format "account:memo", in case there's a memo.
// The SEP-10 or SEP-45 account will be in the format "account:memo", in case there's a memo.

Copilot uses AI. Check for mistakes.
TenantBaseURL string
// TenantUIBaseURL is the base URL for the tenant UI that the receiver wallet belongs to.
TenantUIBaseURL string
// Token is a unique token that identifies identifies a receiver wallet creation request.

Copilot AI Feb 3, 2026

Copy link

Choose a reason for hiding this comment

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

Corrected duplicate word 'identifies' to single occurrence.

Suggested change
// Token is a unique token that identifies identifies a receiver wallet creation request.
// Token is a unique token that identifies a receiver wallet creation request.

Copilot uses AI. Check for mistakes.
Comment on lines +22 to +27
type ColumnType int

const (
String ColumnType = iota
Float64
)

Copilot AI Feb 3, 2026

Copy link

Choose a reason for hiding this comment

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

The exported type 'ColumnType' and its constants 'String' and 'Float64' use generic names that could conflict with built-in types or common identifiers. Consider prefixing with the package context, e.g., 'SQLColumnType', 'SQLColumnString', 'SQLColumnFloat64'.

Copilot uses AI. Check for mistakes.

tc := customSetterTestCase[[]string]{
name: "returns an error if ui base url is empty and it's required",
args: []string{"--sdp-ui-base-url", " "}, // Workaround to test empty values

Copilot AI Feb 3, 2026

Copy link

Choose a reason for hiding this comment

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

The workaround comment appears twice (lines 481 and 595). Consider extracting this test pattern into a helper function to avoid duplication and make the workaround's purpose clearer.

Copilot uses AI. Check for mistakes.
TWILIO_SERVICE_SID: MY_TWILIO_SERVICE_SID
EC256_PRIVATE_KEY: "-----BEGIN PRIVATE KEY-----\nMIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgdo6o+tdFkF94B7z8\nnoybH6/zO3PryLLjLbj54/zOi4WhRANCAAQncc2mE8AQoe+1GOyXkqPBz21MypLa\nmZg3JusuzFnpy5C+DbKIShdmLE/ZwnvtywcKVcLpxvXBCn8E0YO8Yqg+\n-----END PRIVATE KEY-----"
SEP24_JWT_SECRET: jwt_secret_1234567890
SEP24_JWT_SECRET: jwt_secret_ducrCcqnKmIqG6mYG48Hqlf9TWb7CJh4

Copilot AI Feb 3, 2026

Copy link

Choose a reason for hiding this comment

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

The SEP24_JWT_SECRET appears to be a hardcoded secret in a docker-compose file. While this may be acceptable for testing, ensure this secret is not used in production environments and consider adding a comment indicating this is for testing only.

Suggested change
SEP24_JWT_SECRET: jwt_secret_ducrCcqnKmIqG6mYG48Hqlf9TWb7CJh4
# SEP24 JWT secret for E2E tests only; must be provided via environment and must not be reused in production
SEP24_JWT_SECRET: ${SEP24_JWT_SECRET:?SEP24_JWT_SECRET environment variable is required for E2E tests}

Copilot uses AI. Check for mistakes.
### What

This addresses the database-related comments mentioned in
#1019.

- Make `contract_address` unique in `embedded_wallets`
- Make `wasm_hash` non-null in `embedded_wallets`
- Use the DB transaction instead of the connection pool in the sponsored
transaction service.

### Why

N/A

### Known limitations

N/A

### Checklist

- [x] Title follows `SDP-1234: Add new feature` or `Chore: Refactor
package xyz` format. The Jira ticket code was included if available.
- [x] PR has a focused scope and doesn't mix features with refactoring
- [x] Tests are included (if applicable)
- [ ] `CHANGELOG.md` is updated (if applicable)
- [ ] CONFIG/SECRETS changes are updated in helmcharts and deployments
(if applicable)
- [ ] Preview deployment works as expected
- [ ] Ready for production
@philipliu
philipliu temporarily deployed to Receiver Registration - E2E Integration Tests (Stellar) February 3, 2026 16:29 — with GitHub Actions Inactive
@philipliu
philipliu temporarily deployed to Internal SEP Tests February 3, 2026 16:29 — with GitHub Actions Inactive
@philipliu
philipliu merged commit 7d166dc into develop Feb 3, 2026
19 checks passed
hypekostas pushed a commit that referenced this pull request Jul 6, 2026
## Bumps the all-actions group with 2 updates

- [docker/login-action](https://github.com/docker/login-action)
- [docker/build-push-action](https://github.com/docker/build-push-action)

---

## docker/login-action: 4.2.0 → 4.4.0

### Release notes (v4.4.0)

- Skip empty `registry-auth` secret mask by @crazy-max in #1035
- Bump `@aws-sdk/client-ecr` and `@aws-sdk/client-ecr-public` to 3.1077.0 in #1034

**Full Changelog:**  
docker/login-action@v4.3.0...v4.4.0

---

### Release notes (v4.3.0)

- Preserve names in esbuild bundle by @crazy-max in #1022
- Bump `@aws-sdk/client-ecr` and `@aws-sdk/client-ecr-public` to 3.1076.0 in #999 and #1030
- Bump `@docker/actions-toolkit` from 0.90.0 to 0.92.0 in #1004 and #1027
- Bump `@sigstore/core` from 3.1.0 to 3.2.1 in #1023
- Bump `@sigstore/verify` from 3.1.0 to 3.1.1 in #1029
- Bump http-proxy-agent and https-proxy-agent to 9.1.0 in #1017
- Bump js-yaml from 4.1.1 to 5.2.0 in #1028
- Bump sigstore from 4.1.0 to 4.1.1 in #1031
- Bump tmp from 0.2.5 to 0.2.7 in #1002
- Bump undici from 6.24.1 to 6.27.0 in #1020
- Bump vite from 7.3.3 to 7.3.6 in #1019

**Full Changelog:**  
docker/login-action@v4.2.0...v4.3.0

---

## docker/build-push-action: 7.2.0 → 7.3.0

### Release notes (v7.3.0)

- Preserve names in esbuild bundle by @crazy-max in #1567
- Bump `@docker/actions-toolkit` from 0.90.0 to 0.92.0 in #1545 and #1572
- Bump `@sigstore/core` from 3.1.0 to 3.2.1 in #1568
- Bump js-yaml from 4.1.1 to 4.3.0 in #1566
- Bump tmp from 0.2.5 to 0.2.7 in #1547
- Bump undici from 6.24.1 to 6.27.0 in #1564
- Bump vite from 7.3.2 to 7.3.6 in #1563

**Full Changelog:**  
docker/build-push-action@v7.2.0...v7.3.0
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.

6 participants