flowchmgr

package
v1.0.0 Latest Latest
Warning

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

Go to latest
Published: Aug 15, 2021 License: Apache-2.0, MIT Imports: 35 Imported by: 0

Documentation

Index

Constants

View Source
const (
	DirInbound  = 1
	DirOutbound = 2
)

Variables

View Source
var ErrChannelNotTracked = errors.New("channel not tracked")

Functions

func BestSpendableByLane

func BestSpendableByLane(ctx context.Context, api BestSpendableAPI, ch address.Address) (map[uint64]*flowch.SignedVoucher, error)

func HandleManager

func HandleManager(lc fx.Lifecycle, pm *Manager)

HandleManager is called by dependency injection to set up hooks

Types

type BestSpendableAPI

type BestSpendableAPI interface {
	FlowchVoucherList(context.Context, address.Address) ([]*flowch.SignedVoucher, error)
	FlowchVoucherCheckSpendable(context.Context, address.Address, *flowch.SignedVoucher, []byte, []byte) (bool, error)
}

type ChannelInfo

type ChannelInfo struct {
	// ChannelID is a uuid set at channel creation
	ChannelID string
	// Channel address - may be nil if the channel hasn't been created yet
	Channel *address.Address
	// Control is the address of the local node
	Control address.Address
	// Target is the address of the remote node (on the other end of the channel)
	Target address.Address
	// Direction indicates if the channel is inbound (Control is the "to" address)
	// or outbound (Control is the "from" address)
	Direction uint64
	// Vouchers is a list of all vouchers sent on the channel
	Vouchers []*VoucherInfo
	// NextLane is the number of the next lane that should be used when the
	// client requests a new lane (eg to create a voucher for a new deal)
	NextLane uint64
	// Amount added to the channel.
	// Note: This amount is only used by GetFlowch to keep track of how much
	// has locally been added to the channel. It should reflect the channel's
	// Balance on chain as long as all operations occur on the same datastore.
	Amount types.BigInt
	// PendingAmount is the amount that we're awaiting confirmation of
	PendingAmount types.BigInt
	// CreateMsg is the CID of a pending create message (while waiting for confirmation)
	CreateMsg *cid.Cid
	// AddFundsMsg is the CID of a pending add funds message (while waiting for confirmation)
	AddFundsMsg *cid.Cid
	// Settling indicates whether the channel has entered into the settling state
	Settling bool
}

ChannelInfo keeps track of information about a channel

func (*ChannelInfo) MarshalCBOR

func (t *ChannelInfo) MarshalCBOR(w io.Writer) error

func (*ChannelInfo) UnmarshalCBOR

func (t *ChannelInfo) UnmarshalCBOR(r io.Reader) error

type ErrInsufficientFunds

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

func (*ErrInsufficientFunds) Error

func (e *ErrInsufficientFunds) Error() string

func (*ErrInsufficientFunds) Shortfall

func (e *ErrInsufficientFunds) Shortfall() types.BigInt

type FlowchAPI

type FlowchAPI struct {
	fx.In

	full.MpoolAPI
	full.StateAPI
}

FlowchAPI is used by dependency injection to pass the consituent APIs to NewManager()

type Manager

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

func NewManager

func NewManager(mctx helpers.MetricsCtx, lc fx.Lifecycle, sm stmgr.StateManagerAPI, pchstore *Store, api FlowchAPI) *Manager

func (*Manager) AddVoucherInbound

func (pm *Manager) AddVoucherInbound(ctx context.Context, ch address.Address, sv *flowch.SignedVoucher, proof []byte, minDelta types.BigInt) (types.BigInt, error)

AddVoucherInbound adds a voucher for an inbound channel. If the channel is not in the store, fetches the channel from state (and checks that the channel To address is owned by the wallet).

func (*Manager) AddVoucherOutbound

func (pm *Manager) AddVoucherOutbound(ctx context.Context, ch address.Address, sv *flowch.SignedVoucher, proof []byte, minDelta types.BigInt) (types.BigInt, error)

AddVoucherOutbound adds a voucher for an outbound channel. Returns an error if the channel is not already in the store.

func (*Manager) AllocateLane

func (pm *Manager) AllocateLane(ch address.Address) (uint64, error)

func (*Manager) AvailableFunds

func (pm *Manager) AvailableFunds(ch address.Address) (*api.ChannelAvailableFunds, error)

func (*Manager) AvailableFundsByFromTo

func (pm *Manager) AvailableFundsByFromTo(from address.Address, to address.Address) (*api.ChannelAvailableFunds, error)

func (*Manager) CheckVoucherSpendable

func (pm *Manager) CheckVoucherSpendable(ctx context.Context, ch address.Address, sv *flowch.SignedVoucher, secret []byte, proof []byte) (bool, error)

CheckVoucherSpendable checks if the given voucher is currently spendable

func (*Manager) CheckVoucherValid

func (pm *Manager) CheckVoucherValid(ctx context.Context, ch address.Address, sv *flowch.SignedVoucher) error

CheckVoucherValid checks if the given voucher is valid (is or could become spendable at some point). If the channel is not in the store, fetches the channel from state (and checks that the channel To address is owned by the wallet).

func (*Manager) Collect

func (pm *Manager) Collect(ctx context.Context, addr address.Address) (cid.Cid, error)

func (*Manager) CreateVoucher

func (pm *Manager) CreateVoucher(ctx context.Context, ch address.Address, voucher flowch.SignedVoucher) (*api.FlowVoucherCreateResult, error)

func (*Manager) GetChannelInfo

func (pm *Manager) GetChannelInfo(addr address.Address) (*ChannelInfo, error)

func (*Manager) GetFlowch

func (pm *Manager) GetFlowch(ctx context.Context, from, to address.Address, amt types.BigInt) (address.Address, cid.Cid, error)

func (*Manager) GetFlowchWaitReady

func (pm *Manager) GetFlowchWaitReady(ctx context.Context, mcid cid.Cid) (address.Address, error)

GetFlowchWaitReady waits until the create channel / add funds message with the given message CID arrives. The returned channel address can safely be used against the Manager methods.

func (*Manager) ListChannels

func (pm *Manager) ListChannels() ([]address.Address, error)

func (*Manager) ListVouchers

func (pm *Manager) ListVouchers(ctx context.Context, ch address.Address) ([]*VoucherInfo, error)

func (*Manager) Settle

func (pm *Manager) Settle(ctx context.Context, addr address.Address) (cid.Cid, error)

func (*Manager) Start

func (pm *Manager) Start() error

Start restarts tracking of any messages that were sent to chain.

func (*Manager) Stop

func (pm *Manager) Stop() error

Stop shuts down any processes used by the manager

func (*Manager) SubmitVoucher

func (pm *Manager) SubmitVoucher(ctx context.Context, ch address.Address, sv *flowch.SignedVoucher, secret []byte, proof []byte) (cid.Cid, error)

type MsgInfo

type MsgInfo struct {
	// ChannelID links the message to a channel
	ChannelID string
	// MsgCid is the CID of the message
	MsgCid cid.Cid
	// Received indicates whether a response has been received
	Received bool
	// Err is the error received in the response
	Err string
}

MsgInfo stores information about a create channel / add funds message that has been sent

func (*MsgInfo) MarshalCBOR

func (t *MsgInfo) MarshalCBOR(w io.Writer) error

func (*MsgInfo) UnmarshalCBOR

func (t *MsgInfo) UnmarshalCBOR(r io.Reader) error

type Store

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

func NewStore

func NewStore(ds dtypes.MetadataDS) *Store

func (*Store) AllocateLane

func (ps *Store) AllocateLane(ch address.Address) (uint64, error)

AllocateLane allocates a new lane for the given channel

func (*Store) ByAddress

func (ps *Store) ByAddress(addr address.Address) (*ChannelInfo, error)

ByAddress gets the channel that matches the given address

func (*Store) ByChannelID

func (ps *Store) ByChannelID(channelID string) (*ChannelInfo, error)

ByChannelID gets channel info by channel ID

func (*Store) ByMessageCid

func (ps *Store) ByMessageCid(mcid cid.Cid) (*ChannelInfo, error)

ByMessageCid gets the channel associated with a message

func (*Store) CreateChannel

func (ps *Store) CreateChannel(from address.Address, to address.Address, createMsgCid cid.Cid, amt types.BigInt) (*ChannelInfo, error)

CreateChannel creates an outbound channel for the given from / to

func (*Store) GetMessage

func (ps *Store) GetMessage(mcid cid.Cid) (*MsgInfo, error)

GetMessage gets the message info for a given message CID

func (*Store) ListChannels

func (ps *Store) ListChannels() ([]address.Address, error)

ListChannels returns the addresses of all channels that have been created

func (*Store) MarkVoucherSubmitted

func (ps *Store) MarkVoucherSubmitted(ci *ChannelInfo, sv *flowch.SignedVoucher) error

func (*Store) OutboundActiveByFromTo

func (ps *Store) OutboundActiveByFromTo(from address.Address, to address.Address) (*ChannelInfo, error)

OutboundActiveByFromTo looks for outbound channels that have not been settled, with the given from / to addresses

func (*Store) RemoveChannel

func (ps *Store) RemoveChannel(channelID string) error

RemoveChannel removes the channel with the given channel ID

func (*Store) SaveMessageResult

func (ps *Store) SaveMessageResult(mcid cid.Cid, msgErr error) error

SaveMessageResult is called when the result of a message is received

func (*Store) SaveNewMessage

func (ps *Store) SaveNewMessage(channelID string, mcid cid.Cid) error

SaveNewMessage is called when a message is sent

func (*Store) TrackChannel

func (ps *Store) TrackChannel(ci *ChannelInfo) (*ChannelInfo, error)

TrackChannel stores a channel, returning an error if the channel was already being tracked

func (*Store) VouchersForFlowch

func (ps *Store) VouchersForFlowch(ch address.Address) ([]*VoucherInfo, error)

VouchersForFlowch gets the vouchers for the given channel

func (*Store) WithPendingAddFunds

func (ps *Store) WithPendingAddFunds() ([]ChannelInfo, error)

WithPendingAddFunds is used on startup to find channels for which a create channel or add funds message has been sent, but epik shut down before the response was received.

type VoucherInfo

type VoucherInfo struct {
	Voucher   *flowch.SignedVoucher
	Proof     []byte // ignored
	Submitted bool
}

func (*VoucherInfo) MarshalCBOR

func (t *VoucherInfo) MarshalCBOR(w io.Writer) error

func (*VoucherInfo) UnmarshalCBOR

func (t *VoucherInfo) UnmarshalCBOR(r io.Reader) error

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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