application

package
v0.7.0 Latest Latest
Warning

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

Go to latest
Published: Oct 26, 2021 License: MIT Imports: 33 Imported by: 0

Documentation

Index

Constants

View Source
const (
	InitWallet = iota
	UnlockWallet
	ChangePassphrase
)

Passphrase msg type

View Source
const (
	TradeBuy = iota
	TradeSell
)

trade type

View Source
const (
	Processing = iota
	Done
)

restore status

View Source
const (
	TradeSettled = iota
	AccountLowBalance
	AccountWithdraw
)

Topics to be published

Variables

View Source
var (
	ErrMarketInvalidBaseAsset  = domain.ErrMarketInvalidBaseAsset
	ErrMarketInvalidQuoteAsset = domain.ErrMarketInvalidQuoteAsset
	// ErrFeeAccountNotFunded ...
	ErrFeeAccountNotFunded = errors.New("fee account not funded")
	// ErrUnknownStrategy ...
	ErrUnknownStrategy = errors.New("strategy not supported")
	// ErrMarketAlreadyExist ...
	ErrMarketAlreadyExist = errors.New("market already exists")
	// ErrMarketNotExist ...
	ErrMarketNotExist = errors.New("market does not exist")
	// ErrMarketNotFunded ...
	ErrMarketNotFunded = errors.New("market account not funded")
	// ErrMissingNonFundedMarkets ...
	ErrMissingNonFundedMarkets = errors.New("no non-funded markets found")
	// ErrInvalidOutpoint ...
	ErrInvalidOutpoint = errors.New("outpoint refers to inexistent tx output")
	// ErrInvalidOutpoints ...
	ErrInvalidOutpoints = errors.New("all outpoints must be funded for the same account")
	// ErrServiceUnavailable is the error returned by the trade service in case of
	// internal errors
	ErrServiceUnavailable = errors.New("service is unavailable, try again later")
	// ErrPubSubServiceNotInitialized is returned when attempting to use
	// AddWebhook or RemoveWebhook RPCs without having initialized the pubsub
	// service at the start up.
	ErrPubSubServiceNotInitialized = errors.New("pubsub service is not initialized")
	// ErrInvalidActionType is returned if the attempting to register a webhook
	// for an invalid action type.
	ErrInvalidActionType = errors.New("action type is unknown")
	// ErrMarketBalanceTooLow is returned when the balance of the base or quote
	// asset of a market is below its fixed fee.
	ErrMarketBalanceTooLow = errors.New("market base or quote balance too low")
	// ErrWithdrawBaseAmountTooBig is returned when attempting to withdraw more
	// than the total amount of base asset of a market.
	ErrWithdrawBaseAmountTooBig = errors.New(
		"base amount to withdraw exceeds the market base balance",
	)
	// ErrWithdrawQuoteAmountTooBig is returned when attempting to withdraw more
	// than the total amount of quote asset of a market.
	ErrWithdrawQuoteAmountTooBig = errors.New(
		"quote amount to withdraw is too big",
	)
	// ErrWithdrawAmountTooBig is returned when attempting to withdraw more
	// than the total amount of LBTC asset of the fee account.
	ErrWithdrawAmountTooBig = errors.New(
		"amount to withdraw os too big",
	)
	// ErrInvalidAccountIndex returned if provided account index is invalid
	ErrInvalidAccountIndex = errors.New("invalid account index")
	// ErrMissingMarketBalanceToWithdraw is returned in case none of the base or
	// quote amounts to withdraw for a market are defined.
	ErrMissingMarketBalanceToWithdraw = errors.New(
		"either base or quote amount to withdraw must be specified",
	)
	// ErrMissingWithdrawAddress is returned if the receiving address to is not
	// set for a withdrawal.
	ErrMissingWithdrawAddress = errors.New("address must not be null")
)
View Source
var (
	DefaultFeeFragmenterFragments = uint32(50)
	DefaultFeeFragmenterAmount    = uint64(5000)
	FragmentationMap              = map[int]int{
		1: 30,
		2: 15,
		3: 10,
		5: 2,
	}
)
View Source
var (
	BlinderManager     Blinder
	TradeManager       TradeHandler
	TransactionManager TransactionHandler
)
View Source
var (
	// ErrWalletNotFunded ...
	ErrWalletNotFunded = fmt.Errorf("wallet not funded")
)
View Source
var (
	// ErrWalletNotInitialized is returned when attempting to unlock or change
	// the password of a not initialized wallet.
	ErrWalletNotInitialized = fmt.Errorf("wallet not initialized")
)

Functions

This section is empty.

Types

type AccountInfo added in v0.6.0

type AccountInfo struct {
	Index               uint32
	DerivationPath      string
	Xpub                string
	LastExternalDerived uint32
	LastInternalDerived uint32
}

AccountInfo contains info about a wallet account.

type AddressAndBlindingKey added in v0.1.2

type AddressAndBlindingKey struct {
	Address     string
	BlindingKey string
}

type Balance

type Balance struct {
	BaseAmount  uint64
	QuoteAmount uint64
}

type BalanceInfo added in v0.3.0

type BalanceInfo struct {
	TotalBalance       uint64
	ConfirmedBalance   uint64
	UnconfirmedBalance uint64
}

type BalanceWithFee

type BalanceWithFee struct {
	Balance Balance
	Fee     Fee
}

type Blinder added in v0.3.1

type Blinder interface {
	UnblindOutput(txout *transaction.TxOutput, key []byte) (UnblindedResult, bool)
}

type BlindingData added in v0.3.2

type BlindingData wallet.BlindingData

type BlockchainListener

type BlockchainListener interface {
	StartObservation()
	StopObservation()

	StartObserveAddress(accountIndex int, addr string, blindKey []byte)
	StopObserveAddress(addr string)

	StartObserveTx(txid, marketQuoteAsset string)
	StopObserveTx(txid string)

	StartObserveOutpoints(outpoints []explorer.Utxo, tradeID string)
	StopObserveOutpoints(outpoints interface{})

	PubSubService() ports.SecurePubSub
}

BlockchainListener defines the needed method sto start and stop a blockchain listener

func NewBlockchainListener

func NewBlockchainListener(
	crawlerSvc crawler.Service,
	repoManager ports.RepoManager,
	pubsubSvc ports.SecurePubSub,
	net *network.Network,
) BlockchainListener

NewBlockchainListener returns a BlockchainListener with all the needed services

type Deposits added in v0.6.0

type Deposits []domain.Deposit

type Fee

type Fee struct {
	BasisPoint    int64
	FixedBaseFee  int64
	FixedQuoteFee int64
}

type FeeInfo added in v0.2.0

type FeeInfo struct {
	TradeID             string
	BasisPoint          int64
	Asset               string
	PercentageFeeAmount uint64
	FixedFeeAmount      uint64
	MarketPrice         decimal.Decimal
}

type FillProposalOpts added in v0.3.2

type FillProposalOpts struct {
	Mnemonic      []string
	SwapRequest   domain.SwapRequest
	MarketUtxos   []explorer.Utxo
	FeeUtxos      []explorer.Utxo
	MarketInfo    domain.AddressesInfo
	FeeInfo       domain.AddressesInfo
	OutputInfo    domain.AddressInfo
	ChangeInfo    domain.AddressInfo
	FeeChangeInfo domain.AddressInfo
	Network       *network.Network
}

type FillProposalResult added in v0.3.2

type FillProposalResult struct {
	PsetBase64         string
	SelectedUnspents   []explorer.Utxo
	InputBlindingKeys  map[string][]byte
	OutputBlindingKeys map[string][]byte
}

type FragmentDepositsReply added in v0.7.0

type FragmentDepositsReply struct {
	Msg string
	Err error
}

type FragmentDepositsReq added in v0.7.0

type FragmentDepositsReq struct {
	RecoverAddress string
	MaxFragments   uint32
}

type HDWalletInfo added in v0.6.0

type HDWalletInfo struct {
	RootPath          string
	MasterBlindingKey string
	Accounts          []AccountInfo
}

HDWalletInfo contains info about the internal wallet of the daemon and its sub-accounts.

type HDWalletStatus added in v0.6.0

type HDWalletStatus struct {
	Initialized bool
	Unlocked    bool
	Synced      bool
}

type InitWalletReply added in v0.3.0

type InitWalletReply struct {
	AccountIndex int32
	Status       int
	Data         string
	Err          error
}

type Market

type Market struct {
	BaseAsset  string
	QuoteAsset string
}

func (Market) Validate added in v0.6.0

func (m Market) Validate() error

type MarketInfo

type MarketInfo struct {
	AccountIndex uint64
	Market       Market
	Fee          Fee
	Tradable     bool
	StrategyType int
	Price        domain.Prices
	Balance      Balance
}

MarketInfo is the data struct returned by ListMarket RPC.

type MarketStrategy

type MarketStrategy struct {
	Market
	Strategy domain.StrategyType
}

type MarketWithFee

type MarketWithFee struct {
	Market
	Fee
}

type MarketWithPrice

type MarketWithPrice struct {
	Market
	Price
}

type OperatorService

type OperatorService interface {
	GetInfo(ctx context.Context) (*HDWalletInfo, error)
	GetFeeAddress(
		ctx context.Context, numOfAddresses int,
	) ([]AddressAndBlindingKey, error)
	ListFeeExternalAddresses(
		ctx context.Context,
	) ([]AddressAndBlindingKey, error)
	GetFeeBalance(ctx context.Context) (int64, int64, error)
	ClaimFeeDeposits(ctx context.Context, outpoints []TxOutpoint) error
	GetFeeFragmenterAddress(ctx context.Context) (string, error)
	FragmentFeeDeposits(
		ctx context.Context,
		req FragmentDepositsReq, chRes chan FragmentDepositsReply,
	)
	WithdrawFeeFunds(
		ctx context.Context, req WithdrawFeeReq,
	) ([]byte, []byte, error)
	NewMarket(ctx context.Context, market Market) error
	GetMarketAddress(
		ctx context.Context, market Market, numOfAddresses int,
	) ([]AddressAndBlindingKey, error)
	ListMarketExternalAddresses(
		ctx context.Context, req Market,
	) ([]AddressAndBlindingKey, error)
	GetMarketBalance(ctx context.Context, market Market) (*Balance, *Balance, error)
	ClaimMarketDeposits(
		ctx context.Context, market Market, outpoints []TxOutpoint,
	) error
	OpenMarket(ctx context.Context, market Market) error
	CloseMarket(ctx context.Context, market Market) error
	DropMarket(ctx context.Context, market Market) error
	GetMarketCollectedFee(
		ctx context.Context, market Market, page *Page,
	) (*ReportMarketFee, error)
	GetMarketFragmenterAddress(ctx context.Context, market Market) (string, error)
	FragmentMarketDeposits(
		ctx context.Context, market Market, req FragmentDepositsReq,
		chRes chan FragmentDepositsReply,
	)
	WithdrawMarketFunds(
		ctx context.Context, req WithdrawMarketReq,
	) ([]byte, []byte, error)
	UpdateMarketPercentageFee(
		ctx context.Context, req MarketWithFee,
	) (*MarketWithFee, error)
	UpdateMarketFixedFee(
		ctx context.Context, req MarketWithFee,
	) (*MarketWithFee, error)
	UpdateMarketPrice(ctx context.Context, req MarketWithPrice) error
	UpdateMarketStrategy(ctx context.Context, req MarketStrategy) error
	ListMarkets(ctx context.Context) ([]MarketInfo, error)
	ListTrades(ctx context.Context, page *Page) ([]TradeInfo, error)
	ListTradesForMarket(
		ctx context.Context, market Market, page *Page,
	) ([]TradeInfo, error)
	ListUtxos(
		ctx context.Context, accountIndex int, page *Page,
	) (*UtxoInfoList, error)
	ReloadUtxos(ctx context.Context) error
	ListDeposits(
		ctx context.Context, accountIndex int, page *Page,
	) (Deposits, error)
	ListWithdrawals(
		ctx context.Context, accountIndex int, page *Page,
	) (Withdrawals, error)
	AddWebhook(ctx context.Context, hook Webhook) (string, error)
	RemoveWebhook(ctx context.Context, id string) error
	ListWebhooks(ctx context.Context, actionType int) ([]WebhookInfo, error)
}

OperatorService defines the methods of the application layer for the operator service.

func NewOperatorService

func NewOperatorService(
	repoManager ports.RepoManager,
	explorerSvc explorer.Service,
	bcListener BlockchainListener,
	marketBaseAsset string,
	marketFee int64,
	net *network.Network,
	feeAccountBalanceThreshold uint64,
) OperatorService

NewOperatorService is a constructor function for OperatorService.

type Page added in v0.6.0

type Page domain.Page

func (*Page) ToDomain added in v0.6.0

func (p *Page) ToDomain() domain.Page

type PassphraseMsg added in v0.4.0

type PassphraseMsg struct {
	Method     int
	CurrentPwd string
	NewPwd     string
}

type Price

type Price struct {
	BasePrice  decimal.Decimal
	QuotePrice decimal.Decimal
}

func (Price) Validate added in v0.6.0

func (p Price) Validate() error

type PriceWithFee

type PriceWithFee struct {
	Price   Price
	Fee     Fee
	Amount  uint64
	Asset   string
	Balance Balance
}

type ReportMarketFee

type ReportMarketFee struct {
	CollectedFees              []FeeInfo
	TotalCollectedFeesPerAsset map[string]int64
}

type SendToManyRequest

type SendToManyRequest struct {
	Outputs         []TxOut
	MillisatPerByte int64
	Push            bool
}

type SwapFailInfo added in v0.3.7

type SwapFailInfo struct {
	Code    int
	Message string
}

type SwapInfo

type SwapInfo struct {
	AmountP uint64
	AssetP  string
	AmountR uint64
	AssetR  string
}

SwapInfo contains info about a swap

type TradeHandler added in v0.3.2

type TradeHandler interface {
	FillProposal(FillProposalOpts) (*FillProposalResult, error)
}

type TradeInfo added in v0.3.7

type TradeInfo struct {
	ID               string
	Status           domain.Status
	SwapInfo         SwapInfo
	SwapFailInfo     SwapFailInfo
	MarketWithFee    MarketWithFee
	Price            Price
	TxURL            string
	RequestTimeUnix  uint64
	AcceptTimeUnix   uint64
	CompleteTimeUnix uint64
	SettleTimeUnix   uint64
	ExpiryTimeUnix   uint64
}

TradeInfo contains info about a trade.

type TradeService

type TradeService interface {
	GetTradableMarkets(ctx context.Context) ([]MarketWithFee, error)
	GetMarketPrice(
		ctx context.Context,
		market Market,
		tradeType int,
		amount uint64,
		asset string,
	) (*PriceWithFee, error)
	TradePropose(
		ctx context.Context,
		market Market,
		tradeType int,
		swapRequest domain.SwapRequest,
	) (domain.SwapAccept, domain.SwapFail, uint64, error)
	TradeComplete(
		ctx context.Context,
		swapComplete domain.SwapComplete,
		swapFail domain.SwapFail,
	) (string, domain.SwapFail, error)
	GetMarketBalance(
		ctx context.Context,
		market Market,
	) (*BalanceWithFee, error)
}

func NewTradeService

func NewTradeService(
	repoManager ports.RepoManager,
	explorerSvc explorer.Service,
	bcListener BlockchainListener,
	marketBaseAsset string,
	expiryDuration time.Duration,
	priceSlippage decimal.Decimal,
	net *network.Network,
	feeAccountBalanceThreshold uint64,
) TradeService

type TransactionHandler added in v0.3.4

type TransactionHandler interface {
	ExtractUnspents(
		txhex string,
		infoByScript map[string]domain.AddressInfo,
		network *network.Network,
	) ([]domain.Unspent, []domain.UnspentKey, error)
	ExtractBlindingData(
		psetBase64 string,
		inBlindingKeys, outBlidningKeys map[string][]byte,
	) (map[int]BlindingData, map[int]BlindingData, error)
}

type TxOut

type TxOut struct {
	// contains filtered or unexported fields
}

func NewTxOut added in v0.7.0

func NewTxOut(address, asset string, value int64) TxOut

func (TxOut) Address

func (o TxOut) Address() string

func (TxOut) Asset

func (o TxOut) Asset() string

func (TxOut) Value

func (o TxOut) Value() uint64

type TxOutpoint added in v0.3.0

type TxOutpoint struct {
	Hash  string
	Index int
}

type UnblindedResult added in v0.3.1

type UnblindedResult *transactionutil.UnblindedResult

type Unspents added in v0.3.2

type Unspents []domain.Unspent

func (Unspents) ToUtxos added in v0.3.2

func (u Unspents) ToUtxos() []explorer.Utxo

type UtxoInfo added in v0.3.0

type UtxoInfo struct {
	Outpoint *TxOutpoint
	Value    uint64
	Asset    string
}

type UtxoInfoList added in v0.3.0

type UtxoInfoList struct {
	Unspents []UtxoInfo
	Spents   []UtxoInfo
	Locks    []UtxoInfo
}

type WalletService

type WalletService interface {
	GenerateAddressAndBlindingKey(
		ctx context.Context,
	) (address string, blindingKey string, err error)
	GetWalletBalance(
		ctx context.Context,
	) (map[string]BalanceInfo, error)
	SendToMany(
		ctx context.Context,
		req SendToManyRequest,
	) ([]byte, []byte, error)
}

func NewWalletService

func NewWalletService(
	repoManager ports.RepoManager,
	explorerService explorer.Service,
	blockchainListener BlockchainListener,
	net *network.Network,
	marketFee int64,
) WalletService

type WalletUnlockerService added in v0.5.0

type WalletUnlockerService interface {
	GenSeed(ctx context.Context) ([]string, error)
	InitWallet(
		ctx context.Context,
		mnemonic []string,
		passphrase string,
		restore bool,
		chRes chan InitWalletReply,
	)
	UnlockWallet(
		ctx context.Context,
		passphrase string,
	) error
	ChangePassword(
		ctx context.Context,
		currentPassphrase string,
		newPassphrase string,
	) error
	IsReady(ctx context.Context) HDWalletStatus
	PassphraseChan() chan PassphraseMsg
	ReadyChan() chan bool
}

func NewWalletUnlockerService added in v0.5.0

func NewWalletUnlockerService(
	repoManager ports.RepoManager,
	explorerService explorer.Service,
	blockchainListener BlockchainListener,
	net *network.Network,
	marketFee int64,
	marketBaseAsset string,
	rescanRangeStart, rescanRangeEnd int,
) WalletUnlockerService

type Webhook added in v0.3.11

type Webhook struct {
	ActionType int
	Endpoint   string
	Secret     string
}

type WebhookInfo added in v0.3.11

type WebhookInfo struct {
	Id         string
	ActionType int
	Endpoint   string
	IsSecured  bool
}

type WithdrawFeeReq added in v0.6.0

type WithdrawFeeReq struct {
	Amount          uint64
	MillisatPerByte uint64
	Address         string
	Asset           string
	Push            bool
}

func (WithdrawFeeReq) Validate added in v0.6.0

func (r WithdrawFeeReq) Validate() error

type WithdrawMarketReq

type WithdrawMarketReq struct {
	Market
	BalanceToWithdraw Balance
	MillisatPerByte   int64
	Address           string
	Push              bool
}

func (WithdrawMarketReq) Validate added in v0.6.0

func (r WithdrawMarketReq) Validate() error

type Withdrawals added in v0.6.0

type Withdrawals []domain.Withdrawal

Jump to

Keyboard shortcuts

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