Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
14 commits
Select commit Hold shift + click to select a range
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
498 changes: 498 additions & 0 deletions PLAN_CHAIN_DECOUPLING.md

Large diffs are not rendered by default.

35 changes: 0 additions & 35 deletions aggregator/rest/generated/server.gen.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

133 changes: 52 additions & 81 deletions aggregator/rest/generated/types.gen.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

18 changes: 3 additions & 15 deletions aggregator/rest/handlers_workflows.go
Original file line number Diff line number Diff line change
Expand Up @@ -43,21 +43,9 @@ func (s *Server) CreateWorkflow(ctx echo.Context) error {
return badRequest("WORKFLOWS_BAD_PAYLOAD", "Invalid workflow payload", err.Error())
}

// Fall back to the JWT's audience chain when the body omits chainId.
// Studio 4.0.0-dev.1 builds the CreateWorkflowRequest body without a
// chainId field even though the surrounding deploy flow already knows
// the target chain — without this fallback the task lands with
// ChainId=0 and engine.ResolveSmartWalletConfig(0) returns chains[0]
// (Ethereum mainnet via the IsGateway fallback in config.go). The
// deployed-execution VM then dials the mainnet RPC, queries the
// Sepolia paymaster on mainnet, and the bundler returns
// "failed to get paymaster hash: no contract code at given address".
// Same pattern as WithdrawWallet / SimulateWorkflow / RunNode.
if req.ChainId == 0 {
if authed := restmw.UserFromContext(ctx); authed != nil && authed.ChainID != 0 {
req.ChainId = authed.ChainID
}
}
// A task no longer carries a workflow-level chain (G5) — each chain-aware
// trigger/node specifies its own chain_id. The JWT audience chain is API
// auth scope only; it is not stamped onto the task.

workflow, err := s.engine.CreateWorkflow(user, req)
if err != nil {
Expand Down
Loading
Loading