Skip to content

Commit 766444b

Browse files
rickyromboclaude
andauthored
feat(relay): dual-write transactions to sos.audius.co (#736)
Fires the mainnet as best effort, always write to sos Hardcoded as a temporary fix. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent bc24be5 commit 766444b

1 file changed

Lines changed: 33 additions & 26 deletions

File tree

api/relay.go

Lines changed: 33 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111
"api.audius.co/trashid"
1212
"connectrpc.com/connect"
1313
v1 "github.com/OpenAudio/go-openaudio/pkg/api/core/v1"
14+
"github.com/OpenAudio/go-openaudio/pkg/sdk"
1415
cconfig "github.com/OpenAudio/go-openaudio/pkg/core/config"
1516
"github.com/OpenAudio/go-openaudio/pkg/core/server"
1617
eth_gen "github.com/OpenAudio/go-openaudio/pkg/eth/contracts/gen"
@@ -259,37 +260,43 @@ func (app *ApiServer) relay(c *fiber.Ctx) error {
259260
})
260261
}
261262

263+
const sosEndpoint = "https://sos.audius.co"
264+
262265
func (app *ApiServer) handleRelay(ctx context.Context, logger *zap.Logger, decodedTx *v1.ManageEntityLegacy) (*v1.Transaction, error) {
263-
allClients := app.openAudioPool.GetAll()
264-
if len(allClients) == 0 {
265-
logger.Error("no OpenAudio clients configured")
266-
return nil, fmt.Errorf("no OpenAudio clients configured")
267-
}
268-
269-
var lastErr error
270-
for i, clientInfo := range allClients {
271-
endpointLogger := logger.With(zap.String("openaudio_endpoint", clientInfo.Endpoint), zap.Int("attempt", i+1))
272-
res, err := clientInfo.Client.Core.SendTransaction(ctx, connect.NewRequest(&v1.SendTransactionRequest{
273-
Transaction: &v1.SignedTransaction{
274-
Transaction: &v1.SignedTransaction_ManageEntity{
275-
ManageEntity: decodedTx,
276-
},
266+
req := &v1.SendTransactionRequest{
267+
Transaction: &v1.SignedTransaction{
268+
Transaction: &v1.SignedTransaction_ManageEntity{
269+
ManageEntity: decodedTx,
277270
},
278-
}))
279-
280-
if err != nil {
281-
lastErr = err
282-
endpointLogger.Warn("transaction failed, trying next", zap.Error(err))
283-
continue
271+
},
272+
}
273+
274+
// mainnet
275+
go func() {
276+
allClients := app.openAudioPool.GetAll()
277+
for i, clientInfo := range allClients {
278+
endpointLogger := logger.With(zap.String("openaudio_endpoint", clientInfo.Endpoint), zap.Int("attempt", i+1))
279+
res, err := clientInfo.Client.Core.SendTransaction(context.Background(), connect.NewRequest(req))
280+
if err != nil {
281+
endpointLogger.Warn("transaction failed, trying next", zap.Error(err))
282+
continue
283+
}
284+
endpointLogger.Info("transaction confirmed", zap.String("hash", res.Msg.Transaction.GetHash()))
285+
return
284286
}
287+
logger.Error("all mainnet endpoints failed")
288+
}()
285289

286-
msg := res.Msg.Transaction
287-
endpointLogger.Info("transaction confirmed", zap.String("hash", msg.GetHash()))
288-
return msg, nil
290+
// sos
291+
sosClient := sdk.NewOpenAudioSDK(sosEndpoint)
292+
sosLogger := logger.With(zap.String("openaudio_endpoint", sosEndpoint))
293+
res, err := sosClient.Core.SendTransaction(ctx, connect.NewRequest(req))
294+
if err != nil {
295+
sosLogger.Warn("sos dual-write failed", zap.Error(err))
296+
return nil, err
289297
}
290-
291-
logger.Error("all OpenAudio endpoints failed", zap.Error(lastErr))
292-
return nil, fmt.Errorf("all endpoints failed, last error: %w", lastErr)
298+
sosLogger.Info("sos dual-write confirmed", zap.String("hash", res.Msg.Transaction.GetHash()))
299+
return res.Msg.Transaction, nil
293300
}
294301

295302
func transactionToReceipt(tx *v1.Transaction, wallet string) map[string]interface{} {

0 commit comments

Comments
 (0)