models

package
v0.1.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 23, 2025 License: MIT Imports: 7 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	ErrGasBankAccountNotFound      = errors.New("gas bank account not found")
	ErrInsufficientFunds           = errors.New("insufficient funds for withdrawal")
	ErrMaximumWithdrawalExceeded   = errors.New("maximum withdrawal amount exceeded")
	ErrDailyWithdrawalLimitReached = errors.New("daily withdrawal limit reached")
	ErrInvalidWithdrawalAmount     = errors.New("invalid withdrawal amount")
	ErrInvalidDepositAmount        = errors.New("invalid deposit amount")
	ErrDuplicateTransaction        = errors.New("duplicate transaction detected")
	ErrTransactionNotFound         = errors.New("transaction not found")
)

Gas Bank error constants

View Source
var (
	ErrDataSourceNotFound    = errors.New("data source not found")
	ErrInvalidDataSourceName = errors.New("invalid data source name")
	ErrInvalidDataSourceURL  = errors.New("invalid data source URL")
	ErrInvalidContractScript = errors.New("invalid contract script hash")
	ErrInvalidUpdateInterval = errors.New("invalid update interval")
	ErrMaxDataSourcesReached = errors.New("maximum number of data sources reached")
)

Common errors for Oracle operations

View Source
var (
	ErrPriceFeedNotFound        = errors.New("price feed not found")
	ErrInvalidPriceFeedSymbol   = errors.New("invalid price feed symbol")
	ErrInvalidContractAddress   = errors.New("invalid contract address")
	ErrPriceFeedUpdateInterval  = errors.New("invalid price feed update interval")
	ErrInsufficientValidSources = errors.New("insufficient valid price sources")
	ErrMaxPriceFeedsReached     = errors.New("maximum number of price feeds reached")
)

Common errors for price feed operations

Functions

func InitializeTransactionData

func InitializeTransactionData(req CreateTransactionRequest) ([]byte, error)

InitializeTransactionData converts the transaction request to the appropriate data structure

Types

type BlockProcessing

type BlockProcessing struct {
	ID                 int       `json:"id" db:"id"`
	Network            string    `json:"network" db:"network"`
	LastProcessedBlock int       `json:"lastProcessedBlock" db:"last_processed_block"`
	IsProcessing       bool      `json:"isProcessing" db:"is_processing"`
	LastProcessedAt    time.Time `json:"lastProcessedAt" db:"last_processed_at"`
	CreatedAt          time.Time `json:"createdAt" db:"created_at"`
	UpdatedAt          time.Time `json:"updatedAt" db:"updated_at"`
}

BlockProcessing represents the block processing state for a network

type BlockchainEvent

type BlockchainEvent struct {
	ID              uuid.UUID       `json:"id" db:"id"`
	ContractAddress string          `json:"contractAddress" db:"contract_address"`
	EventName       string          `json:"eventName" db:"event_name"`
	Parameters      json.RawMessage `json:"parameters" db:"parameters"`
	TransactionHash string          `json:"transactionHash" db:"transaction_hash"`
	BlockNumber     int             `json:"blockNumber" db:"block_number"`
	BlockHash       string          `json:"blockHash" db:"block_hash"`
	Timestamp       time.Time       `json:"timestamp" db:"timestamp"`
	CreatedAt       time.Time       `json:"createdAt" db:"created_at"`
}

BlockchainEvent represents an event from the blockchain

func NewBlockchainEvent

func NewBlockchainEvent(
	contractAddress string,
	eventName string,
	parameters json.RawMessage,
	transactionHash string,
	blockNumber int,
	blockHash string,
	timestamp time.Time,
) *BlockchainEvent

NewBlockchainEvent creates a new blockchain event

func (*BlockchainEvent) ToResponse

func (e *BlockchainEvent) ToResponse() *BlockchainEventResponse

ToResponse converts a blockchain event to a blockchain event response

type BlockchainEventResponse

type BlockchainEventResponse struct {
	ID              string      `json:"id"`
	ContractAddress string      `json:"contractAddress"`
	EventName       string      `json:"eventName"`
	Parameters      interface{} `json:"parameters"`
	TransactionHash string      `json:"transactionHash"`
	BlockNumber     int         `json:"blockNumber"`
	BlockHash       string      `json:"blockHash"`
	Timestamp       time.Time   `json:"timestamp"`
}

BlockchainEventResponse represents a response for a blockchain event

type BlockchainTriggerConfig

type BlockchainTriggerConfig struct {
	ContractHash string `json:"contract_hash"`
	EventName    string `json:"event_name"`
}

BlockchainTriggerConfig represents configuration for a blockchain event trigger

type Contract

type Contract struct {
	ID          uuid.UUID      `json:"id" db:"id"`
	Name        string         `json:"name" db:"name"`
	Description string         `json:"description" db:"description"`
	Source      string         `json:"source,omitempty" db:"source"`
	Bytecode    []byte         `json:"bytecode,omitempty" db:"bytecode"`
	Manifest    []byte         `json:"manifest,omitempty" db:"manifest"`
	Address     string         `json:"address" db:"address"`
	Network     string         `json:"network" db:"network"`
	CreatedAt   time.Time      `json:"createdAt" db:"created_at"`
	UpdatedAt   time.Time      `json:"updatedAt" db:"updated_at"`
	UserID      int            `json:"userId" db:"user_id"`
	Status      ContractStatus `json:"status" db:"status"`
	TxHash      string         `json:"txHash" db:"tx_hash"`
}

Contract represents a smart contract in the system

func NewContract

func NewContract(name, description, source string, userID int, network string) *Contract

NewContract creates a new contract

func (*Contract) ToDeployResponse

func (c *Contract) ToDeployResponse() *ContractDeployResponse

ToDeployResponse converts a contract to a contract deploy response

func (*Contract) ToResponse

func (c *Contract) ToResponse() *ContractResponse

ToResponse converts a contract to a contract response

type ContractDeployRequest

type ContractDeployRequest struct {
	Name        string                 `json:"name" validate:"required"`
	Description string                 `json:"description"`
	Source      string                 `json:"source" validate:"required"`
	Compiler    string                 `json:"compiler" validate:"required"`
	Parameters  map[string]interface{} `json:"parameters"`
	Wallet      string                 `json:"wallet" validate:"required"`
	Network     string                 `json:"network" validate:"required,oneof=mainnet testnet"`
}

ContractDeployRequest represents a request to deploy a contract

type ContractDeployResponse

type ContractDeployResponse struct {
	ContractID string         `json:"contractId"`
	TxHash     string         `json:"txHash"`
	Status     ContractStatus `json:"status"`
	Address    string         `json:"address,omitempty"`
}

ContractDeployResponse represents a contract deployment response

type ContractResponse

type ContractResponse struct {
	ID          string         `json:"id"`
	Name        string         `json:"name"`
	Description string         `json:"description"`
	Address     string         `json:"address"`
	CreatedAt   time.Time      `json:"createdAt"`
	UpdatedAt   time.Time      `json:"updatedAt"`
	Status      ContractStatus `json:"status"`
	TxHash      string         `json:"txHash"`
	Network     string         `json:"network"`
}

ContractResponse represents a contract response

type ContractStatus

type ContractStatus string

ContractStatus represents the status of a contract deployment

const (
	ContractStatusPending   ContractStatus = "pending"
	ContractStatusDeploying ContractStatus = "deploying"
	ContractStatusDeployed  ContractStatus = "deployed"
	ContractStatusFailed    ContractStatus = "failed"
)

Contract statuses

type ContractVerification

type ContractVerification struct {
	ID         uuid.UUID `json:"id" db:"id"`
	ContractID uuid.UUID `json:"contractId" db:"contract_id"`
	Verified   bool      `json:"verified" db:"verified"`
	Message    string    `json:"message" db:"message"`
	Details    []byte    `json:"details" db:"details"`
	CreatedAt  time.Time `json:"createdAt" db:"created_at"`
	UserID     int       `json:"userId" db:"user_id"`
}

ContractVerification represents a contract verification

func NewContractVerification

func NewContractVerification(contractID uuid.UUID, verified bool, message string, details []byte, userID int) *ContractVerification

NewContractVerification creates a new contract verification

type ContractVerifyRequest

type ContractVerifyRequest struct {
	ContractID string                 `json:"contractId" validate:"required,uuid"`
	Source     string                 `json:"source" validate:"required"`
	Compiler   string                 `json:"compiler" validate:"required"`
	Parameters map[string]interface{} `json:"parameters"`
}

ContractVerifyRequest represents a request to verify a contract

type ContractVerifyResponse

type ContractVerifyResponse struct {
	Verified bool                   `json:"verified"`
	Message  string                 `json:"message"`
	Details  map[string]interface{} `json:"details,omitempty"`
}

ContractVerifyResponse represents a contract verification response

type CreateTransactionRequest

type CreateTransactionRequest struct {
	Service    string          `json:"service" validate:"required"`
	EntityID   uuid.UUID       `json:"entityId,omitempty"`
	EntityType string          `json:"entityType,omitempty"`
	Type       TransactionType `json:"type" validate:"required"`
	Script     string          `json:"script,omitempty"`
	Params     []interface{}   `json:"params,omitempty"`
	Signers    []ScriptSigner  `json:"signers,omitempty"`
	GasPrice   int64           `json:"gasPrice" validate:"required"`
	SystemFee  int64           `json:"systemFee" validate:"required"`
	NetworkFee int64           `json:"networkFee" validate:"required"`
	Priority   string          `json:"priority,omitempty"`
}

CreateTransactionRequest represents a request to create a new transaction

type CreateWalletRequest

type CreateWalletRequest struct {
	Service string `json:"service" validate:"required"`
}

CreateWalletRequest represents a request to create a new wallet account

type CronTriggerConfig

type CronTriggerConfig struct {
	Schedule string `json:"schedule"`
	Timezone string `json:"timezone"`
}

CronTriggerConfig represents configuration for a cron trigger

type DeploymentData

type DeploymentData struct {
	Name        string         `json:"name"`
	Version     string         `json:"version"`
	Author      string         `json:"author"`
	Email       string         `json:"email"`
	Description string         `json:"description"`
	NEF         []byte         `json:"nef"`
	Manifest    interface{}    `json:"manifest"`
	Signers     []ScriptSigner `json:"signers,omitempty"`
	Network     string         `json:"network"`
}

DeploymentData represents the data specific to a deployment transaction

type DepositTracker

type DepositTracker struct {
	ID             string    `json:"id" db:"id"`
	BlockchainTxID string    `json:"blockchain_tx_id" db:"blockchain_tx_id"`
	FromAddress    string    `json:"from_address" db:"from_address"`
	ToAddress      string    `json:"to_address" db:"to_address"`
	Amount         string    `json:"amount" db:"amount"`
	Status         string    `json:"status" db:"status"`
	Processed      bool      `json:"processed" db:"processed"`
	TransactionID  string    `json:"transaction_id" db:"transaction_id"`
	BlockHeight    uint32    `json:"block_height" db:"block_height"`
	CreatedAt      time.Time `json:"created_at" db:"created_at"`
	UpdatedAt      time.Time `json:"updated_at" db:"updated_at"`
}

DepositTracker represents a record of deposits tracked from the blockchain

type EntropySource

type EntropySource struct {
	ID        int       `json:"id" db:"id"`
	Name      string    `json:"name" db:"name"`
	Type      string    `json:"type" db:"type"`
	Weight    float64   `json:"weight" db:"weight"`
	Active    bool      `json:"active" db:"active"`
	CreatedAt time.Time `json:"created_at" db:"created_at"`
	UpdatedAt time.Time `json:"updated_at" db:"updated_at"`
}

EntropySource represents a source of entropy

type EventNotification

type EventNotification struct {
	ID               uuid.UUID          `json:"id" db:"id"`
	SubscriptionID   uuid.UUID          `json:"subscriptionId" db:"subscription_id"`
	EventID          uuid.UUID          `json:"eventId" db:"event_id"`
	Status           NotificationStatus `json:"status" db:"status"`
	DeliveryAttempts int                `json:"deliveryAttempts" db:"delivery_attempts"`
	LastAttemptAt    *time.Time         `json:"lastAttemptAt" db:"last_attempt_at"`
	DeliveredAt      *time.Time         `json:"deliveredAt" db:"delivered_at"`
	Response         string             `json:"response" db:"response"`
	CreatedAt        time.Time          `json:"createdAt" db:"created_at"`
}

EventNotification represents a notification for a blockchain event

func NewEventNotification

func NewEventNotification(subscriptionID, eventID uuid.UUID) *EventNotification

NewEventNotification creates a new event notification

type EventSubscription

type EventSubscription struct {
	ID               uuid.UUID          `json:"id" db:"id"`
	UserID           int                `json:"userId" db:"user_id"`
	Name             string             `json:"name" db:"name"`
	Description      string             `json:"description" db:"description"`
	ContractAddress  string             `json:"contractAddress" db:"contract_address"`
	EventName        string             `json:"eventName" db:"event_name"`
	Parameters       json.RawMessage    `json:"parameters" db:"parameters"`
	StartBlock       *int               `json:"startBlock" db:"start_block"`
	EndBlock         *int               `json:"endBlock" db:"end_block"`
	CallbackURL      string             `json:"callbackUrl" db:"callback_url"`
	NotificationType NotificationType   `json:"notificationType" db:"notification_type"`
	Status           SubscriptionStatus `json:"status" db:"status"`
	CreatedAt        time.Time          `json:"createdAt" db:"created_at"`
	UpdatedAt        time.Time          `json:"updatedAt" db:"updated_at"`
	LastTriggeredAt  *time.Time         `json:"lastTriggeredAt" db:"last_triggered_at"`
	TriggerCount     int                `json:"triggerCount" db:"trigger_count"`
}

EventSubscription represents a subscription to blockchain events

func NewEventSubscription

func NewEventSubscription(
	userID int,
	name string,
	description string,
	contractAddress string,
	eventName string,
	parameters json.RawMessage,
	startBlock *int,
	endBlock *int,
	callbackURL string,
	notificationType NotificationType,
) *EventSubscription

NewEventSubscription creates a new event subscription

func (*EventSubscription) ToResponse

ToResponse converts an event subscription to an event subscription response

type EventSubscriptionRequest

type EventSubscriptionRequest struct {
	Name             string                 `json:"name" validate:"required"`
	Description      string                 `json:"description"`
	ContractAddress  string                 `json:"contractAddress"`
	EventName        string                 `json:"eventName"`
	Parameters       map[string]interface{} `json:"parameters"`
	StartBlock       *int                   `json:"startBlock"`
	EndBlock         *int                   `json:"endBlock"`
	CallbackURL      string                 `json:"callbackUrl"`
	NotificationType string                 `json:"notificationType" validate:"required,oneof=webhook email in-app automation"`
}

EventSubscriptionRequest represents a request to create or update an event subscription

type EventSubscriptionResponse

type EventSubscriptionResponse struct {
	ID               string      `json:"id"`
	Name             string      `json:"name"`
	Description      string      `json:"description"`
	ContractAddress  string      `json:"contractAddress"`
	EventName        string      `json:"eventName"`
	Parameters       interface{} `json:"parameters"`
	StartBlock       *int        `json:"startBlock"`
	EndBlock         *int        `json:"endBlock"`
	CallbackURL      string      `json:"callbackUrl"`
	NotificationType string      `json:"notificationType"`
	Status           string      `json:"status"`
	CreatedAt        time.Time   `json:"createdAt"`
	UpdatedAt        time.Time   `json:"updatedAt"`
	LastTriggeredAt  *time.Time  `json:"lastTriggeredAt,omitempty"`
	TriggerCount     int         `json:"triggerCount"`
}

EventSubscriptionResponse represents a response for an event subscription

type Execution

type Execution struct {
	ID         int             `json:"id" db:"id"`
	FunctionID int             `json:"function_id" db:"function_id"`
	Status     string          `json:"status" db:"status"`
	StartTime  time.Time       `json:"start_time" db:"start_time"`
	EndTime    time.Time       `json:"end_time,omitempty" db:"end_time"`
	Duration   int             `json:"duration,omitempty" db:"duration"`
	Result     json.RawMessage `json:"result,omitempty" db:"result"`
	Error      string          `json:"error,omitempty" db:"error"`
	CreatedAt  time.Time       `json:"created_at" db:"created_at"`
	Logs       []ExecutionLog  `json:"logs,omitempty" db:"-"`
}

Execution represents a function execution

type ExecutionLog

type ExecutionLog struct {
	ID          int       `json:"id" db:"id"`
	ExecutionID int       `json:"execution_id" db:"execution_id"`
	Timestamp   time.Time `json:"timestamp" db:"timestamp"`
	Level       string    `json:"level" db:"level"`
	Message     string    `json:"message" db:"message"`
}

ExecutionLog represents a log entry for a function execution

type ExecutionRepository

type ExecutionRepository interface {
	Create(execution *Execution) error
	GetByID(id int) (*Execution, error)
	ListByFunctionID(functionID int, offset, limit int) ([]*Execution, error)
	Update(execution *Execution) error
	Delete(id int) error
	AddLog(log *ExecutionLog) error
	GetLogs(executionID int, offset, limit int) ([]*ExecutionLog, error)
}

ExecutionRepository defines methods for working with executions

type ExecutionRequest

type ExecutionRequest struct {
	Params interface{} `json:"params"`
	Async  bool        `json:"async"`
}

ExecutionRequest represents a request to execute a function

type ExecutionResult

type ExecutionResult struct {
	ExecutionID string          `json:"execution_id"`
	FunctionID  int             `json:"function_id"`
	Status      string          `json:"status"`
	StartTime   time.Time       `json:"start_time"`
	EndTime     time.Time       `json:"end_time,omitempty"`
	Duration    int             `json:"duration,omitempty"`
	Result      json.RawMessage `json:"result,omitempty"`
	Error       string          `json:"error,omitempty"`
	Logs        []string        `json:"logs,omitempty"`
}

ExecutionResult represents the result of a function execution

type Function

type Function struct {
	ID             int       `json:"id" db:"id"`
	UserID         int       `json:"user_id" db:"user_id"`
	Name           string    `json:"name" db:"name"`
	Description    string    `json:"description" db:"description"`
	SourceCode     string    `json:"source_code" db:"source_code"`
	Version        int       `json:"version" db:"version"`
	Status         string    `json:"status" db:"status"`
	Timeout        int       `json:"timeout" db:"timeout"`
	Memory         int       `json:"memory" db:"memory"`
	ExecutionCount int       `json:"execution_count" db:"execution_count"`
	LastExecution  time.Time `json:"last_execution,omitempty" db:"last_execution"`
	CreatedAt      time.Time `json:"created_at" db:"created_at"`
	UpdatedAt      time.Time `json:"updated_at" db:"updated_at"`
	Secrets        []string  `json:"secrets,omitempty" db:"-"`
}

Function represents a JavaScript function stored in the system

type FunctionRepository

type FunctionRepository interface {
	Create(function *Function) error
	GetByID(id int) (*Function, error)
	GetByUserIDAndName(userID int, name string) (*Function, error)
	List(userID int, offset, limit int) ([]*Function, error)
	Update(function *Function) error
	Delete(id int) error
	IncrementExecutionCount(id int) error
	UpdateLastExecution(id int, lastExecution time.Time) error
	GetSecrets(functionID int) ([]string, error)
	SetSecrets(functionID int, secrets []string) error
}

FunctionRepository defines methods for working with functions

type GasBankAccount

type GasBankAccount struct {
	ID                string    `json:"id" db:"id"`
	UserID            string    `json:"user_id" db:"user_id"`
	WalletAddress     string    `json:"wallet_address" db:"wallet_address"`
	Balance           string    `json:"balance" db:"balance"`
	AvailableBalance  string    `json:"available_balance" db:"available_balance"`
	PendingBalance    string    `json:"pending_balance" db:"pending_balance"`
	DailyWithdrawal   string    `json:"daily_withdrawal" db:"daily_withdrawal"`
	LastWithdrawalDay time.Time `json:"last_withdrawal_day" db:"last_withdrawal_day"`
	Active            bool      `json:"active" db:"active"`
	CreatedAt         time.Time `json:"created_at" db:"created_at"`
	UpdatedAt         time.Time `json:"updated_at" db:"updated_at"`
}

GasBankAccount represents a user's account in the gas bank

type GasBankRepository

type GasBankRepository interface {
	// Account operations
	CreateAccount(ctx interface{}, account *GasBankAccount) (*GasBankAccount, error)
	GetAccount(ctx interface{}, id string) (*GasBankAccount, error)
	GetAccountByUserID(ctx interface{}, userID string) (*GasBankAccount, error)
	GetAccountByWalletAddress(ctx interface{}, address string) (*GasBankAccount, error)
	UpdateAccount(ctx interface{}, account *GasBankAccount) (*GasBankAccount, error)
	ListAccounts(ctx interface{}) ([]*GasBankAccount, error)

	// Transaction operations
	CreateTransaction(ctx interface{}, tx *GasBankTransaction) (*GasBankTransaction, error)
	GetTransaction(ctx interface{}, id string) (*GasBankTransaction, error)
	GetTransactionByBlockchainTxID(ctx interface{}, txID string) (*GasBankTransaction, error)
	UpdateTransaction(ctx interface{}, tx *GasBankTransaction) (*GasBankTransaction, error)
	ListTransactionsByUserID(ctx interface{}, userID string, limit int, offset int) ([]*GasBankTransaction, error)
	ListTransactionsByAccountID(ctx interface{}, accountID string, limit int, offset int) ([]*GasBankTransaction, error)

	// Withdrawal operations
	CreateWithdrawalRequest(ctx interface{}, req *WithdrawalRequest) (*WithdrawalRequest, error)
	GetWithdrawalRequest(ctx interface{}, id string) (*WithdrawalRequest, error)
	UpdateWithdrawalRequest(ctx interface{}, req *WithdrawalRequest) (*WithdrawalRequest, error)
	ListWithdrawalRequestsByUserID(ctx interface{}, userID string, limit int, offset int) ([]*WithdrawalRequest, error)

	// Deposit tracking operations
	CreateDepositTracker(ctx interface{}, deposit *DepositTracker) (*DepositTracker, error)
	GetDepositTrackerByTxID(ctx interface{}, txID string) (*DepositTracker, error)
	UpdateDepositTracker(ctx interface{}, deposit *DepositTracker) (*DepositTracker, error)
	ListUnprocessedDeposits(ctx interface{}) ([]*DepositTracker, error)

	// Balance operations
	UpdateBalance(ctx interface{}, accountID string, newBalance string, newPendingBalance string, newAvailableBalance string) error
	IncrementDailyWithdrawal(ctx interface{}, accountID string, amount string) error
	ResetDailyWithdrawal(ctx interface{}, accountID string) error
}

GasBankRepository defines the interface for gas bank operations

type GasBankService

type GasBankService interface {
	// Account management
	CreateAccount(ctx context.Context, userID string, walletAddress string) (*GasBankAccount, error)
	GetAccount(ctx context.Context, id string) (*GasBankAccount, error)
	GetAccountByUserID(ctx context.Context, userID string) (*GasBankAccount, error)
	GetAccountByWalletAddress(ctx context.Context, walletAddress string) (*GasBankAccount, error)
	ListAccounts(ctx context.Context) ([]*GasBankAccount, error)

	// Balance operations
	GetBalance(ctx context.Context, accountID string) (string, error)
	GetAvailableBalance(ctx context.Context, accountID string) (string, error)

	// Transaction operations
	ProcessDeposit(ctx context.Context, fromAddress string, toAddress string, amount string, blockchainTxID string, blockHeight uint32) (*GasBankTransaction, error)
	RequestWithdrawal(ctx context.Context, userID string, amount string, toAddress string) (*WithdrawalRequest, error)
	ProcessWithdrawalRequest(ctx context.Context, requestID string) (*GasBankTransaction, error)
	CancelWithdrawalRequest(ctx context.Context, requestID string) error
	DeductFee(ctx context.Context, userID string, amount string, notes string) (*GasBankTransaction, error)

	// Transaction history
	GetTransaction(ctx context.Context, id string) (*GasBankTransaction, error)
	ListTransactionsByUserID(ctx context.Context, userID string, limit int, offset int) ([]*GasBankTransaction, error)
	ListTransactionsByAccountID(ctx context.Context, accountID string, limit int, offset int) ([]*GasBankTransaction, error)

	// Withdrawal history
	GetWithdrawalRequest(ctx context.Context, id string) (*WithdrawalRequest, error)
	ListWithdrawalRequestsByUserID(ctx context.Context, userID string, limit int, offset int) ([]*WithdrawalRequest, error)

	// Service lifecycle
	Start(ctx context.Context) error
	Stop(ctx context.Context) error
}

GasBankService defines the interface for the gas bank service

type GasBankTransaction

type GasBankTransaction struct {
	ID             string                   `json:"id" db:"id"`
	AccountID      string                   `json:"account_id" db:"account_id"`
	UserID         string                   `json:"user_id" db:"user_id"`
	Type           GasBankTransactionType   `json:"type" db:"type"`
	Amount         string                   `json:"amount" db:"amount"`
	Fee            string                   `json:"fee" db:"fee"`
	NetAmount      string                   `json:"net_amount" db:"net_amount"`
	Status         GasBankTransactionStatus `json:"status" db:"status"`
	BlockchainTxID string                   `json:"blockchain_tx_id" db:"blockchain_tx_id"`
	FromAddress    string                   `json:"from_address" db:"from_address"`
	ToAddress      string                   `json:"to_address" db:"to_address"`
	Notes          string                   `json:"notes" db:"notes"`
	ConfirmedAt    *time.Time               `json:"confirmed_at" db:"confirmed_at"`
	BlockHeight    uint32                   `json:"block_height" db:"block_height"`
	ErrorMessage   string                   `json:"error_message" db:"error_message"`
	CreatedAt      time.Time                `json:"created_at" db:"created_at"`
	UpdatedAt      time.Time                `json:"updated_at" db:"updated_at"`
}

GasBankTransaction represents a gas bank transaction

type GasBankTransactionStatus

type GasBankTransactionStatus string

GasBankTransactionStatus defines the status of a gas bank transaction

const (
	TransactionPending   GasBankTransactionStatus = "pending"
	TransactionConfirmed GasBankTransactionStatus = "confirmed"
	TransactionFailed    GasBankTransactionStatus = "failed"
	TransactionCancelled GasBankTransactionStatus = "cancelled"
)

Transaction status constants

type GasBankTransactionType

type GasBankTransactionType string

GasBankTransactionType defines the type of gas bank transaction

const (
	DepositTransaction        GasBankTransactionType = "deposit"
	WithdrawalTransaction     GasBankTransactionType = "withdrawal"
	FeeDeductionTransaction   GasBankTransactionType = "fee_deduction"
	RefundTransaction         GasBankTransactionType = "refund"
	SystemTransferTransaction GasBankTransactionType = "system_transfer"
)

Transaction type constants

type InvokeScriptData

type InvokeScriptData struct {
	Script  string          `json:"script"`
	Params  []interface{}   `json:"params,omitempty"`
	Signers []ScriptSigner  `json:"signers,omitempty"`
	Network string          `json:"network"`
	Witness []ScriptWitness `json:"witness,omitempty"`
}

InvokeScriptData represents the data specific to an invoke transaction

type JsonMap

type JsonMap map[string]interface{}

JsonMap is a custom type for JSON maps

func (*JsonMap) Scan

func (j *JsonMap) Scan(value interface{}) error

Scan implements the sql.Scanner interface for JsonMap

func (JsonMap) Value

func (j JsonMap) Value() (driver.Value, error)

Value implements the driver.Valuer interface for JsonMap

type NotificationStatus

type NotificationStatus string

NotificationStatus represents the status of an event notification

const (
	NotificationStatusPending   NotificationStatus = "pending"
	NotificationStatusDelivered NotificationStatus = "delivered"
	NotificationStatusFailed    NotificationStatus = "failed"
	NotificationStatusRetrying  NotificationStatus = "retrying"
)

Notification statuses

type NotificationType

type NotificationType string

NotificationType represents the type of notification for an event subscription

const (
	NotificationTypeWebhook    NotificationType = "webhook"
	NotificationTypeEmail      NotificationType = "email"
	NotificationTypeInApp      NotificationType = "in-app"
	NotificationTypeAutomation NotificationType = "automation"
)

Notification types

type Oracle

type Oracle struct {
	ID          int                  `json:"id" db:"id"`
	Name        string               `json:"name" db:"name"`
	Description string               `json:"description" db:"description"`
	Type        OracleDataSourceType `json:"type" db:"type"`
	URL         string               `json:"url" db:"url"`
	Method      string               `json:"method" db:"method"`
	Headers     JsonMap              `json:"headers" db:"headers"`
	Body        string               `json:"body" db:"body"`
	AuthType    OracleAuthType       `json:"auth_type" db:"auth_type"`
	AuthParams  JsonMap              `json:"auth_params" db:"auth_params"`
	Path        string               `json:"path" db:"path"`
	Transform   string               `json:"transform" db:"transform"`
	Schedule    string               `json:"schedule" db:"schedule"`
	Active      bool                 `json:"active" db:"active"`
	UserID      int                  `json:"user_id" db:"user_id"`
	CreatedAt   time.Time            `json:"created_at" db:"created_at"`
	UpdatedAt   time.Time            `json:"updated_at" db:"updated_at"`
}

Oracle represents an oracle data source configuration

type OracleAuthType

type OracleAuthType string

OracleAuthType represents the type of authentication for an oracle data source

const (
	// OracleAuthTypeNone represents no authentication
	OracleAuthTypeNone OracleAuthType = "none"
	// OracleAuthTypeAPIKey represents API key authentication
	OracleAuthTypeAPIKey OracleAuthType = "api_key"
	// OracleAuthTypeOAuth represents OAuth authentication
	OracleAuthTypeOAuth OracleAuthType = "oauth"
	// OracleAuthTypeJWT represents JWT authentication
	OracleAuthTypeJWT OracleAuthType = "jwt"
	// OracleAuthTypeBasic represents basic authentication
	OracleAuthTypeBasic OracleAuthType = "basic"
	// OracleAuthTypeCustom represents custom authentication
	OracleAuthTypeCustom OracleAuthType = "custom"
)

type OracleDataSource

type OracleDataSource struct {
	ID              string    `json:"id" db:"id"`
	Name            string    `json:"name" db:"name"`
	URL             string    `json:"url" db:"url"`
	Method          string    `json:"method" db:"method"`
	Headers         string    `json:"headers" db:"headers"`
	ContractScript  string    `json:"contract_script" db:"contract_script"`
	DataPath        string    `json:"data_path" db:"data_path"`
	TransformScript string    `json:"transform_script" db:"transform_script"`
	UpdateInterval  int       `json:"update_interval" db:"update_interval"`
	Active          bool      `json:"active" db:"active"`
	LastUpdated     time.Time `json:"last_updated" db:"last_updated"`
	CreatedAt       time.Time `json:"created_at" db:"created_at"`
	UpdatedAt       time.Time `json:"updated_at" db:"updated_at"`
}

OracleDataSource represents an external data source for the Oracle service

type OracleDataSourceType

type OracleDataSourceType string

OracleDataSourceType represents the type of oracle data source

const (
	// OracleDataSourceTypeREST represents a REST API data source
	OracleDataSourceTypeREST OracleDataSourceType = "rest"
	// OracleDataSourceTypeWebSocket represents a WebSocket data source
	OracleDataSourceTypeWebSocket OracleDataSourceType = "websocket"
	// OracleDataSourceTypeFile represents a file data source
	OracleDataSourceTypeFile OracleDataSourceType = "file"
	// OracleDataSourceTypeIPFS represents an IPFS data source
	OracleDataSourceTypeIPFS OracleDataSourceType = "ipfs"
	// OracleDataSourceTypeDatabase represents a database data source
	OracleDataSourceTypeDatabase OracleDataSourceType = "database"
	// OracleDataSourceTypeCustom represents a custom data source
	OracleDataSourceTypeCustom OracleDataSourceType = "custom"
)

type OracleRepository

type OracleRepository interface {
	// Data source operations
	CreateDataSource(ctx interface{}, dataSource *OracleDataSource) (*OracleDataSource, error)
	GetDataSource(ctx interface{}, id string) (*OracleDataSource, error)
	UpdateDataSource(ctx interface{}, dataSource *OracleDataSource) (*OracleDataSource, error)
	DeleteDataSource(ctx interface{}, id string) error
	ListDataSources(ctx interface{}) ([]*OracleDataSource, error)

	// Update operations
	UpdateLastUpdated(ctx interface{}, id string) error
	RecordUpdate(ctx interface{}, id string, data string, txID string) error

	// Oracle management
	CreateOracle(oracle *Oracle) (*Oracle, error)
	UpdateOracle(oracle *Oracle) (*Oracle, error)
	GetOracleByID(id int) (*Oracle, error)
	GetOracleByName(name string) (*Oracle, error)
	ListOracles(userID int, offset, limit int) ([]*Oracle, error)
	DeleteOracle(id int) error

	// Oracle request management
	CreateOracleRequest(request *OracleRequest) (*OracleRequest, error)
	UpdateOracleRequest(request *OracleRequest) (*OracleRequest, error)
	GetOracleRequestByID(id int) (*OracleRequest, error)
	ListOracleRequests(oracleID int, offset, limit int) ([]*OracleRequest, error)
	ListPendingOracleRequests() ([]*OracleRequest, error)
	GetOracleStatistics() (map[string]interface{}, error)
}

OracleRepository defines the interface for Oracle data storage operations

type OracleRequest

type OracleRequest struct {
	ID              int                 `json:"id" db:"id"`
	OracleID        int                 `json:"oracle_id" db:"oracle_id"`
	UserID          int                 `json:"user_id" db:"user_id"`
	Status          OracleRequestStatus `json:"status" db:"status"`
	URL             string              `json:"url" db:"url"`
	Method          string              `json:"method" db:"method"`
	Headers         JsonMap             `json:"headers" db:"headers"`
	Body            string              `json:"body" db:"body"`
	AuthType        OracleAuthType      `json:"auth_type" db:"auth_type"`
	AuthParams      JsonMap             `json:"auth_params" db:"auth_params"`
	Path            string              `json:"path" db:"path"`
	Transform       string              `json:"transform" db:"transform"`
	CallbackAddress string              `json:"callback_address" db:"callback_address"`
	CallbackMethod  string              `json:"callback_method" db:"callback_method"`
	GasFee          float64             `json:"gas_fee" db:"gas_fee"`
	Result          JsonMap             `json:"result" db:"result"`
	RawResult       string              `json:"raw_result" db:"raw_result"`
	Error           string              `json:"error" db:"error"`
	TxHash          string              `json:"tx_hash" db:"tx_hash"`
	BlockHeight     int64               `json:"block_height" db:"block_height"`
	CreatedAt       time.Time           `json:"created_at" db:"created_at"`
	UpdatedAt       time.Time           `json:"updated_at" db:"updated_at"`
	CompletedAt     time.Time           `json:"completed_at" db:"completed_at"`
}

OracleRequest represents a request for oracle data

type OracleRequestStatus

type OracleRequestStatus string

OracleRequestStatus represents the status of an oracle request

const (
	// OracleRequestStatusPending indicates the request is pending
	OracleRequestStatusPending OracleRequestStatus = "pending"
	// OracleRequestStatusProcessing indicates the request is being processed
	OracleRequestStatusProcessing OracleRequestStatus = "processing"
	// OracleRequestStatusCompleted indicates the request completed successfully
	OracleRequestStatusCompleted OracleRequestStatus = "completed"
	// OracleRequestStatusCallbackSent indicates the callback has been sent to the contract
	OracleRequestStatusCallbackSent OracleRequestStatus = "callback_sent"
	// OracleRequestStatusFailed indicates the request failed
	OracleRequestStatusFailed OracleRequestStatus = "failed"
)

type OracleService

type OracleService interface {
	// Data source management
	CreateDataSource(ctx context.Context, name string, url string, method string, headers string,
		contractScript string, dataPath string, transformScript string, updateInterval int) (*OracleDataSource, error)
	GetDataSource(ctx context.Context, id string) (*OracleDataSource, error)
	UpdateDataSource(ctx context.Context, id string, url string, method string, headers string,
		contractScript string, dataPath string, transformScript string, updateInterval int, active bool) (*OracleDataSource, error)
	DeleteDataSource(ctx context.Context, id string) error
	ListDataSources(ctx context.Context) ([]*OracleDataSource, error)

	// Oracle operations
	TriggerUpdate(ctx context.Context, dataSourceID string) error
	GetLatestData(ctx context.Context, dataSourceID string) (string, error)
	GetDataHistory(ctx context.Context, dataSourceID string, limit int) ([]*OracleUpdate, error)

	// Oracle request management
	CreateRequest(ctx context.Context, userID int, oracleID int, callbackAddress string, callbackMethod string) (*OracleRequest, error)
	GetRequest(ctx context.Context, id int) (*OracleRequest, error)
	CancelRequest(ctx context.Context, id int) error
	ListRequests(ctx context.Context, userID int, offset int, limit int) ([]*OracleRequest, error)

	// Oracle management
	CreateOracle(ctx context.Context, name string, description string, oracleType OracleDataSourceType,
		url string, method string, headers JsonMap, body string, authType OracleAuthType,
		authParams JsonMap, path string, transform string, schedule string, userID int) (*Oracle, error)
	UpdateOracle(ctx context.Context, id int, name string, description string, active bool) (*Oracle, error)
	GetOracle(ctx context.Context, id int) (*Oracle, error)
	ListOracles(ctx context.Context, userID int, offset int, limit int) ([]*Oracle, error)
	DeleteOracle(ctx context.Context, id int) error

	// Service lifecycle
	Start(ctx context.Context) error
	Stop(ctx context.Context) error
}

OracleService defines the interface for oracle service

type OracleUpdate

type OracleUpdate struct {
	ID            string    `json:"id" db:"id"`
	DataSourceID  string    `json:"data_source_id" db:"data_source_id"`
	Data          string    `json:"data" db:"data"`
	TransactionID string    `json:"transaction_id" db:"transaction_id"`
	Success       bool      `json:"success" db:"success"`
	Error         string    `json:"error" db:"error"`
	BlockHeight   uint32    `json:"block_height" db:"block_height"`
	Timestamp     time.Time `json:"timestamp" db:"timestamp"`
}

OracleUpdate represents a record of an Oracle data update

type PriceData

type PriceData struct {
	SourceID   string    `json:"source_id" db:"source_id"`
	SourceName string    `json:"source_name" db:"source_name"`
	Price      float64   `json:"price" db:"price"`
	Timestamp  time.Time `json:"timestamp" db:"timestamp"`
	Success    bool      `json:"success" db:"success"`
	Error      string    `json:"error" db:"error"`
}

PriceData represents a price data point from a source

type PriceFeed

type PriceFeed struct {
	ID                 string        `json:"id" db:"id"`
	Symbol             string        `json:"symbol" db:"symbol"`
	ContractAddress    string        `json:"contract_address" db:"contract_address"`
	DeviationThreshold float64       `json:"deviation_threshold" db:"deviation_threshold"`
	UpdateInterval     int           `json:"update_interval" db:"update_interval"`
	MinValidSources    int           `json:"min_valid_sources" db:"min_valid_sources"`
	Timeout            int           `json:"timeout" db:"timeout"`
	Sources            []PriceSource `json:"sources" db:"sources"`
	Active             bool          `json:"active" db:"active"`
	LastUpdated        time.Time     `json:"last_updated" db:"last_updated"`
	LastPrice          float64       `json:"last_price" db:"last_price"`
	LastTxHash         string        `json:"last_tx_hash" db:"last_tx_hash"`
	CreatedAt          time.Time     `json:"created_at" db:"created_at"`
	UpdatedAt          time.Time     `json:"updated_at" db:"updated_at"`
}

PriceFeed represents a price feed configuration

type PriceFeedRepository

type PriceFeedRepository interface {
	// Price feed operations
	CreatePriceFeed(ctx interface{}, priceFeed *PriceFeed) (*PriceFeed, error)
	GetPriceFeed(ctx interface{}, id string) (*PriceFeed, error)
	UpdatePriceFeed(ctx interface{}, priceFeed *PriceFeed) (*PriceFeed, error)
	DeletePriceFeed(ctx interface{}, id string) error
	ListPriceFeeds(ctx interface{}) ([]*PriceFeed, error)
	GetPriceFeedBySymbol(ctx interface{}, symbol string) (*PriceFeed, error)

	// Price source operations
	AddPriceSource(ctx interface{}, priceFeedID string, source *PriceSource) (*PriceSource, error)
	RemovePriceSource(ctx interface{}, priceFeedID string, sourceID string) error

	// Price update operations
	UpdateLastPrice(ctx interface{}, id string, price float64, txHash string) error
	RecordPriceUpdate(ctx interface{}, id string, price float64, txID string) error
	GetPriceHistory(ctx interface{}, id string, limit int) ([]*PriceUpdate, error)
}

PriceFeedRepository defines the interface for price feed data storage

type PriceFeedService

type PriceFeedService interface {
	// Price feed management
	CreatePriceFeed(ctx context.Context, symbol string, contractAddress string, interval int, threshold float64, minSources int) (*PriceFeed, error)
	UpdatePriceFeed(ctx context.Context, id string, active bool, interval int, threshold float64, minSources int) (*PriceFeed, error)
	DeletePriceFeed(ctx context.Context, id string) error
	GetPriceFeed(ctx context.Context, id string) (*PriceFeed, error)
	GetPriceFeedBySymbol(ctx context.Context, symbol string) (*PriceFeed, error)
	ListPriceFeeds(ctx context.Context) ([]*PriceFeed, error)

	// Price source management
	AddPriceSource(ctx context.Context, priceFeedID string, name string, url string, path string, weight float64, timeout int) (*PriceSource, error)
	UpdatePriceSource(ctx context.Context, priceFeedID string, sourceID string, active bool, weight float64, timeout int) (*PriceSource, error)
	RemovePriceSource(ctx context.Context, priceFeedID string, sourceID string) error

	// Price operations
	TriggerPriceUpdate(ctx context.Context, priceFeedID string) error
	FetchLatestPrice(ctx context.Context, symbol string) (float64, error)
	GetPriceHistory(ctx context.Context, priceFeedID string, limit int) ([]*PriceUpdate, error)

	// Service lifecycle
	Start(ctx context.Context) error
	Stop(ctx context.Context) error
}

PriceFeedService defines the interface for the price feed service

type PriceSource

type PriceSource struct {
	ID        string    `json:"id" db:"id"`
	Name      string    `json:"name" db:"name"`
	URL       string    `json:"url" db:"url"`
	Path      string    `json:"path" db:"path"`
	Weight    float64   `json:"weight" db:"weight"`
	Timeout   int       `json:"timeout" db:"timeout"`
	Active    bool      `json:"active" db:"active"`
	CreatedAt time.Time `json:"created_at" db:"created_at"`
	UpdatedAt time.Time `json:"updated_at" db:"updated_at"`
}

PriceSource represents a data source for price information

type PriceTriggerConfig

type PriceTriggerConfig struct {
	AssetPair string  `json:"asset_pair"`
	Condition string  `json:"condition"` // "above", "below", "between"
	Threshold float64 `json:"threshold"`
	Duration  int     `json:"duration"` // seconds the condition must be met
}

PriceTriggerConfig represents configuration for a price trigger

type PriceUpdate

type PriceUpdate struct {
	ID            string    `json:"id" db:"id"`
	PriceFeedID   string    `json:"price_feed_id" db:"price_feed_id"`
	Symbol        string    `json:"symbol" db:"symbol"`
	Price         float64   `json:"price" db:"price"`
	TransactionID string    `json:"transaction_id" db:"transaction_id"`
	Success       bool      `json:"success" db:"success"`
	Error         string    `json:"error" db:"error"`
	BlockHeight   uint32    `json:"block_height" db:"block_height"`
	Timestamp     time.Time `json:"timestamp" db:"timestamp"`
}

PriceUpdate represents a record of a price feed update

type RandomRepository

type RandomRepository interface {
	// Request management
	CreateRequest(req *RandomRequest) (*RandomRequest, error)
	UpdateRequest(req *RandomRequest) (*RandomRequest, error)
	GetRequestByID(id int) (*RandomRequest, error)
	ListRequests(userID int, offset, limit int) ([]*RandomRequest, error)
	ListPendingRequests() ([]*RandomRequest, error)
	ListCommittedRequests() ([]*RandomRequest, error)
	GetRandomStatistics() (map[string]interface{}, error)

	// Entropy source management
	CreateEntropySource(source *EntropySource) (*EntropySource, error)
	UpdateEntropySource(source *EntropySource) (*EntropySource, error)
	GetEntropySourceByID(id int) (*EntropySource, error)
	GetEntropySourceByName(name string) (*EntropySource, error)
	ListEntropySources() ([]*EntropySource, error)
}

RandomRepository defines the interface for random number data access

type RandomRequest

type RandomRequest struct {
	ID               int                 `json:"id" db:"id"`
	UserID           int                 `json:"user_id" db:"user_id"`
	Status           RandomRequestStatus `json:"status" db:"status"`
	CallbackAddress  string              `json:"callback_address" db:"callback_address"`
	CallbackMethod   string              `json:"callback_method" db:"callback_method"`
	Seed             []byte              `json:"seed" db:"seed"`
	BlockHeight      int64               `json:"block_height" db:"block_height"`
	NumBytes         int                 `json:"num_bytes" db:"num_bytes"`
	DelayBlocks      int                 `json:"delay_blocks" db:"delay_blocks"`
	GasFee           float64             `json:"gas_fee" db:"gas_fee"`
	CommitmentHash   string              `json:"commitment_hash" db:"commitment_hash"`
	RandomNumber     []byte              `json:"random_number" db:"random_number"`
	Proof            []byte              `json:"proof" db:"proof"`
	CommitmentTxHash string              `json:"commitment_tx_hash" db:"commitment_tx_hash"`
	RevealTxHash     string              `json:"reveal_tx_hash" db:"reveal_tx_hash"`
	CallbackTxHash   string              `json:"callback_tx_hash" db:"callback_tx_hash"`
	Error            string              `json:"error" db:"error"`
	CreatedAt        time.Time           `json:"created_at" db:"created_at"`
	UpdatedAt        time.Time           `json:"updated_at" db:"updated_at"`
	RevealedAt       time.Time           `json:"revealed_at" db:"revealed_at"`
}

RandomRequest represents a request for a random number

type RandomRequestStatus

type RandomRequestStatus string

RandomRequestStatus represents the status of a random number request

const (
	// RandomRequestStatusPending indicates the request is pending
	RandomRequestStatusPending RandomRequestStatus = "pending"
	// RandomRequestStatusCommitted indicates the commitment has been made
	RandomRequestStatusCommitted RandomRequestStatus = "committed"
	// RandomRequestStatusRevealed indicates the random number has been revealed
	RandomRequestStatusRevealed RandomRequestStatus = "revealed"
	// RandomRequestStatusCallbackSent indicates the callback has been sent to the contract
	RandomRequestStatusCallbackSent RandomRequestStatus = "callback_sent"
	// RandomRequestStatusFailed indicates the request failed
	RandomRequestStatusFailed RandomRequestStatus = "failed"
)

type ScriptSigner

type ScriptSigner struct {
	Account          string              `json:"account"`
	Scopes           string              `json:"scopes"`
	AllowedContracts []string            `json:"allowedContracts,omitempty"`
	AllowedGroups    []string            `json:"allowedGroups,omitempty"`
	Rules            []map[string]string `json:"rules,omitempty"`
}

ScriptSigner represents a signer for a Neo transaction

type ScriptWitness

type ScriptWitness struct {
	InvocationScript   string `json:"invocationScript"`
	VerificationScript string `json:"verificationScript"`
}

ScriptWitness represents a witness for a Neo transaction

type Secret

type Secret struct {
	ID        int       `json:"id" db:"id"`
	UserID    int       `json:"user_id" db:"user_id"`
	Name      string    `json:"name" db:"name"`
	Value     string    `json:"-" db:"value"` // Value is never returned to clients
	Version   int       `json:"version" db:"version"`
	CreatedAt time.Time `json:"created_at" db:"created_at"`
	UpdatedAt time.Time `json:"updated_at" db:"updated_at"`
}

Secret represents a user secret

func (*Secret) ToMetadata

func (s *Secret) ToMetadata() *SecretMetadata

ToMetadata converts a Secret to SecretMetadata

type SecretMetadata

type SecretMetadata struct {
	ID        int       `json:"id"`
	UserID    int       `json:"user_id"`
	Name      string    `json:"name"`
	Version   int       `json:"version"`
	CreatedAt time.Time `json:"created_at"`
	UpdatedAt time.Time `json:"updated_at"`
}

SecretMetadata represents public information about a secret

type SecretRepository

type SecretRepository interface {
	Create(secret *Secret) error
	GetByID(id int) (*Secret, error)
	GetByUserIDAndName(userID int, name string) (*Secret, error)
	List(userID int) ([]*Secret, error)
	Update(secret *Secret) error
	Delete(id int) error
}

SecretRepository defines methods for working with secrets

type SubscriptionStatus

type SubscriptionStatus string

SubscriptionStatus represents the status of an event subscription

const (
	SubscriptionStatusActive  SubscriptionStatus = "active"
	SubscriptionStatusPaused  SubscriptionStatus = "paused"
	SubscriptionStatusDeleted SubscriptionStatus = "deleted"
	SubscriptionStatusError   SubscriptionStatus = "error"
)

Subscription statuses

type Transaction

type Transaction struct {
	ID          uuid.UUID         `json:"id" db:"id"`
	Hash        string            `json:"hash" db:"hash"`
	Service     string            `json:"service" db:"service"`
	EntityID    *uuid.UUID        `json:"entityId" db:"entity_id"`
	EntityType  string            `json:"entityType" db:"entity_type"`
	Status      TransactionStatus `json:"status" db:"status"`
	Type        TransactionType   `json:"type" db:"type"`
	Data        json.RawMessage   `json:"data" db:"data"`
	GasConsumed *int64            `json:"gasConsumed,omitempty" db:"gas_consumed"`
	GasPrice    int64             `json:"gasPrice" db:"gas_price"`
	SystemFee   int64             `json:"systemFee" db:"system_fee"`
	NetworkFee  int64             `json:"networkFee" db:"network_fee"`
	BlockHeight *int64            `json:"blockHeight,omitempty" db:"block_height"`
	BlockTime   *time.Time        `json:"blockTime,omitempty" db:"block_time"`
	Sender      string            `json:"sender" db:"sender"`
	Error       string            `json:"error,omitempty" db:"error"`
	Result      json.RawMessage   `json:"result,omitempty" db:"result"`
	CreatedAt   time.Time         `json:"createdAt" db:"created_at"`
	UpdatedAt   time.Time         `json:"updatedAt" db:"updated_at"`
	DeletedAt   *time.Time        `json:"deletedAt,omitempty" db:"deleted_at"`
}

Transaction represents a blockchain transaction

type TransactionEvent

type TransactionEvent struct {
	ID            uuid.UUID         `json:"id" db:"id"`
	TransactionID uuid.UUID         `json:"transactionId" db:"transaction_id"`
	Status        TransactionStatus `json:"status" db:"status"`
	Details       json.RawMessage   `json:"details,omitempty" db:"details"`
	Timestamp     time.Time         `json:"timestamp" db:"timestamp"`
}

TransactionEvent represents an event in the lifecycle of a transaction

type TransactionListResponse

type TransactionListResponse struct {
	Total        int           `json:"total"`
	Page         int           `json:"page"`
	Limit        int           `json:"limit"`
	Transactions []Transaction `json:"transactions"`
}

TransactionListResponse represents the response for listing transactions

type TransactionStatus

type TransactionStatus string

TransactionStatus represents the status of a blockchain transaction

const (
	// TransactionStatusCreated - Transaction has been created but not yet submitted
	TransactionStatusCreated TransactionStatus = "created"
	// TransactionStatusPending - Transaction has been submitted to the blockchain
	TransactionStatusPending TransactionStatus = "pending"
	// TransactionStatusConfirming - Transaction has been included in a block but waiting for confirmation blocks
	TransactionStatusConfirming TransactionStatus = "confirming"
	// TransactionStatusConfirmed - Transaction has been confirmed with the required number of blocks
	TransactionStatusConfirmed TransactionStatus = "confirmed"
	// TransactionStatusFailed - Transaction has failed due to execution error or rejection
	TransactionStatusFailed TransactionStatus = "failed"
	// TransactionStatusExpired - Transaction has not been included in a block within the timeout period
	TransactionStatusExpired TransactionStatus = "expired"
	// TransactionStatusCancelled - Transaction has been cancelled before confirmation
	TransactionStatusCancelled TransactionStatus = "cancelled"
)

type TransactionType

type TransactionType string

TransactionType represents the type of blockchain transaction

const (
	// TransactionTypeInvoke - Smart contract invocation
	TransactionTypeInvoke TransactionType = "invoke"
	// TransactionTypeDeployment - Smart contract deployment
	TransactionTypeDeployment TransactionType = "deployment"
	// TransactionTypeTransfer - Asset transfer
	TransactionTypeTransfer TransactionType = "transfer"
	// TransactionTypeClaimGas - GAS claim transaction
	TransactionTypeClaimGas TransactionType = "claim_gas"
)

type TransferData

type TransferData struct {
	Asset     string         `json:"asset"`
	Amount    string         `json:"amount"`
	Recipient string         `json:"recipient"`
	Signers   []ScriptSigner `json:"signers,omitempty"`
	Network   string         `json:"network"`
}

TransferData represents the data specific to a transfer transaction

type Trigger

type Trigger struct {
	ID            int             `json:"id" db:"id"`
	UserID        int             `json:"user_id" db:"user_id"`
	FunctionID    int             `json:"function_id" db:"function_id"`
	Name          string          `json:"name" db:"name"`
	Description   string          `json:"description" db:"description"`
	TriggerType   TriggerType     `json:"trigger_type" db:"trigger_type"`
	TriggerConfig json.RawMessage `json:"trigger_config" db:"trigger_config"`
	Status        string          `json:"status" db:"status"`
	CreatedAt     time.Time       `json:"created_at" db:"created_at"`
	UpdatedAt     time.Time       `json:"updated_at" db:"updated_at"`
}

Trigger represents a contract automation trigger

type TriggerEvent

type TriggerEvent struct {
	ID          int       `json:"id" db:"id"`
	TriggerID   int       `json:"trigger_id" db:"trigger_id"`
	Timestamp   time.Time `json:"timestamp" db:"timestamp"`
	Status      string    `json:"status" db:"status"`
	ExecutionID int       `json:"execution_id,omitempty" db:"execution_id"`
}

TriggerEvent represents a trigger execution event

type TriggerRepository

type TriggerRepository interface {
	Create(trigger *Trigger) error
	GetByID(id int) (*Trigger, error)
	GetByUserIDAndName(userID int, name string) (*Trigger, error)
	List(userID int, offset, limit int) ([]*Trigger, error)
	ListActiveTriggers() ([]*Trigger, error)
	Update(trigger *Trigger) error
	UpdateStatus(id int, status string) error
	Delete(id int) error

	// Event related methods
	CreateEvent(event *TriggerEvent) error
	GetEventByID(id int) (*TriggerEvent, error)
	ListEventsByTriggerID(triggerID int, offset, limit int) ([]*TriggerEvent, error)
}

TriggerRepository defines methods for working with triggers

type TriggerType

type TriggerType string

TriggerType defines the type of trigger

const (
	// TriggerTypeCron is a time-based trigger using cron syntax
	TriggerTypeCron TriggerType = "cron"
	// TriggerTypePrice is a price-based trigger
	TriggerTypePrice TriggerType = "price"
	// TriggerTypeBlockchain is a blockchain event trigger
	TriggerTypeBlockchain TriggerType = "blockchain"
)

type User

type User struct {
	ID           int       `json:"id" db:"id"`
	Username     string    `json:"username" db:"username"`
	Email        string    `json:"email" db:"email"`
	PasswordHash string    `json:"-" db:"password_hash"`
	APIKey       string    `json:"-" db:"api_key"`
	IsActive     bool      `json:"is_active" db:"is_active"`
	CreatedAt    time.Time `json:"created_at" db:"created_at"`
	UpdatedAt    time.Time `json:"updated_at" db:"updated_at"`
}

User represents a user in the system

func NewUser

func NewUser(username, email, password string) (*User, error)

NewUser creates a new user

func (*User) CheckPassword

func (u *User) CheckPassword(password string) bool

CheckPassword checks if the provided password matches the user's password

func (*User) SetPassword

func (u *User) SetPassword(password string) error

SetPassword sets a new password for the user

type UserRepository

type UserRepository interface {
	Create(user *User) error
	GetByID(id int) (*User, error)
	GetByUsername(username string) (*User, error)
	GetByEmail(email string) (*User, error)
	GetByAPIKey(apiKey string) (*User, error)
	Update(user *User) error
	Delete(id int) error
}

UserRepository defines methods for working with users

type WalletAccount

type WalletAccount struct {
	ID                  uuid.UUID  `json:"id" db:"id"`
	Service             string     `json:"service" db:"service"`
	Address             string     `json:"address" db:"address"`
	EncryptedPrivateKey string     `json:"encryptedPrivateKey" db:"encrypted_private_key"`
	PublicKey           string     `json:"publicKey" db:"public_key"`
	CreatedAt           time.Time  `json:"createdAt" db:"created_at"`
	UpdatedAt           time.Time  `json:"updatedAt" db:"updated_at"`
	DeletedAt           *time.Time `json:"deletedAt,omitempty" db:"deleted_at"`
}

WalletAccount represents a wallet account for transaction signing

type WithdrawalRequest

type WithdrawalRequest struct {
	ID            string                   `json:"id" db:"id"`
	AccountID     string                   `json:"account_id" db:"account_id"`
	UserID        string                   `json:"user_id" db:"user_id"`
	Amount        string                   `json:"amount" db:"amount"`
	Fee           string                   `json:"fee" db:"fee"`
	NetAmount     string                   `json:"net_amount" db:"net_amount"`
	Status        GasBankTransactionStatus `json:"status" db:"status"`
	ToAddress     string                   `json:"to_address" db:"to_address"`
	TransactionID string                   `json:"transaction_id" db:"transaction_id"`
	ErrorMessage  string                   `json:"error_message" db:"error_message"`
	CreatedAt     time.Time                `json:"created_at" db:"created_at"`
	UpdatedAt     time.Time                `json:"updated_at" db:"updated_at"`
}

WithdrawalRequest represents a request to withdraw funds from the gas bank

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL