Files
prime-sdk-go/transaction/transaction.go
Andrew Miller 4dabbcd23a Document fire-and-forget transaction mode
Add godoc to Create and CreateBulk explaining they return immediately
without waiting for block inclusion. Update package-level example to show
both fire-and-forget and wait-for-block patterns. Add Transaction Modes
section to README with code examples.
2026-02-17 13:24:35 -05:00

64 lines
2.2 KiB
Go
Executable File

package transaction
import (
"context"
"fmt"
"git.dragonchain.com/dragonchain/prime-sdk-go/client"
"git.dragonchain.com/dragonchain/prime-sdk-go/models"
)
type TransactionClient struct {
client *client.Client
}
func NewTransactionClient(c *client.Client) *TransactionClient {
return &TransactionClient{client: c}
}
// Create submits a new transaction and returns immediately with the assigned transaction ID.
// It does NOT wait for the transaction to be included in a block. Block processing happens
// asynchronously on a ~5-second cycle. If you need the block ID (e.g. for interchain
// verification), poll Get until Header.BlockId is populated.
func (tc *TransactionClient) Create(ctx context.Context, req *models.TransactionCreateRequest) (*models.TransactionCreateResponse, error) {
var resp models.TransactionCreateResponse
err := tc.client.Post(ctx, "/api/v1/transaction", models.ContentTypeJSON, req, &resp)
if err != nil {
return nil, err
}
return &resp, nil
}
// CreateBulk submits multiple transactions and returns immediately with the assigned transaction IDs.
// It does NOT wait for the transactions to be included in a block. Block processing happens
// asynchronously on a ~5-second cycle. If you need block IDs, poll Get for each transaction
// until Header.BlockId is populated.
func (tc *TransactionClient) CreateBulk(ctx context.Context, req *models.TransactionBulkRequest) (*models.TransactionBulkResponse, error) {
var resp models.TransactionBulkResponse
err := tc.client.Post(ctx, "/api/v1/transaction/bulk", models.ContentTypeJSON, req, &resp)
if err != nil {
return nil, err
}
return &resp, nil
}
func (tc *TransactionClient) Get(ctx context.Context, transactionID string) (*models.Transaction, error) {
var resp models.Transaction
path := fmt.Sprintf("/api/v1/transaction/%s", transactionID)
err := tc.client.Get(ctx, path, &resp)
if err != nil {
return nil, err
}
return &resp, nil
}
func (tc *TransactionClient) List(ctx context.Context) (*models.ListTransactionsResponse, error) {
var resp models.ListTransactionsResponse
path := "/api/v1/transaction/"
err := tc.client.Get(ctx, path, &resp)
if err != nil {
return nil, err
}
return &resp, nil
}