lotus/api/api_full.go

858 lines
37 KiB
Go
Raw Normal View History

package api
import (
"context"
"fmt"
2019-12-04 04:59:41 +00:00
"time"
2019-11-06 19:44:28 +00:00
2020-09-17 01:56:02 +00:00
"github.com/filecoin-project/go-state-types/network"
2020-03-31 23:13:37 +00:00
"github.com/ipfs/go-cid"
"github.com/libp2p/go-libp2p-core/peer"
2020-02-04 02:45:20 +00:00
"github.com/filecoin-project/go-address"
2020-09-07 03:49:10 +00:00
"github.com/filecoin-project/go-bitfield"
2020-08-05 22:35:59 +00:00
"github.com/filecoin-project/go-fil-markets/retrievalmarket"
"github.com/filecoin-project/go-fil-markets/storagemarket"
"github.com/filecoin-project/go-multistore"
2020-09-07 03:49:10 +00:00
"github.com/filecoin-project/go-state-types/abi"
"github.com/filecoin-project/go-state-types/big"
"github.com/filecoin-project/go-state-types/crypto"
"github.com/filecoin-project/go-state-types/dline"
"github.com/filecoin-project/lotus/chain/actors/builtin/market"
2020-09-15 04:55:49 +00:00
"github.com/filecoin-project/lotus/chain/actors/builtin/miner"
"github.com/filecoin-project/lotus/chain/actors/builtin/paych"
2019-07-24 00:09:34 +00:00
"github.com/filecoin-project/lotus/chain/actors/builtin"
2020-09-15 13:29:25 +00:00
"github.com/filecoin-project/lotus/chain/actors/builtin/power"
"github.com/filecoin-project/lotus/chain/types"
2020-08-11 20:04:00 +00:00
marketevents "github.com/filecoin-project/lotus/markets/loggers"
2020-03-31 23:13:37 +00:00
"github.com/filecoin-project/lotus/node/modules/dtypes"
)
2019-07-24 00:09:34 +00:00
// FullNode API is a low-level interface to the Filecoin network full node
type FullNode interface {
Common
// MethodGroup: Chain
// The Chain method group contains methods for interacting with the
2020-06-30 22:28:49 +00:00
// blockchain, but that do not require any form of state computation.
2019-09-18 11:01:52 +00:00
2020-06-30 22:28:49 +00:00
// ChainNotify returns channel with chain head updates.
// First message is guaranteed to be of len == 1, and type == 'current'.
ChainNotify(context.Context) (<-chan []*HeadChange, error)
2020-06-18 13:44:47 +00:00
2020-06-30 22:28:49 +00:00
// ChainHead returns the current head of the chain.
ChainHead(context.Context) (*types.TipSet, error)
2020-06-18 13:44:47 +00:00
2020-08-11 23:58:35 +00:00
// ChainGetRandomnessFromTickets is used to sample the chain for randomness.
ChainGetRandomnessFromTickets(ctx context.Context, tsk types.TipSetKey, personalization crypto.DomainSeparationTag, randEpoch abi.ChainEpoch, entropy []byte) (abi.Randomness, error)
// ChainGetRandomnessFromBeacon is used to sample the beacon for randomness.
ChainGetRandomnessFromBeacon(ctx context.Context, tsk types.TipSetKey, personalization crypto.DomainSeparationTag, randEpoch abi.ChainEpoch, entropy []byte) (abi.Randomness, error)
2020-06-18 13:44:47 +00:00
2020-06-30 22:28:49 +00:00
// ChainGetBlock returns the block specified by the given CID.
ChainGetBlock(context.Context, cid.Cid) (*types.BlockHeader, error)
2020-06-30 22:28:49 +00:00
// ChainGetTipSet returns the tipset specified by the given TipSetKey.
ChainGetTipSet(context.Context, types.TipSetKey) (*types.TipSet, error)
2020-06-18 13:44:47 +00:00
2020-06-30 22:28:49 +00:00
// ChainGetBlockMessages returns messages stored in the specified block.
2020-06-18 13:44:47 +00:00
ChainGetBlockMessages(ctx context.Context, blockCid cid.Cid) (*BlockMessages, error)
// ChainGetParentReceipts returns receipts for messages in parent tipset of
2020-06-30 22:28:49 +00:00
// the specified block.
2020-06-18 13:44:47 +00:00
ChainGetParentReceipts(ctx context.Context, blockCid cid.Cid) ([]*types.MessageReceipt, error)
// ChainGetParentMessages returns messages stored in parent tipset of the
2020-06-30 22:28:49 +00:00
// specified block.
2020-06-18 13:44:47 +00:00
ChainGetParentMessages(ctx context.Context, blockCid cid.Cid) ([]Message, error)
// ChainGetTipSetByHeight looks back for a tipset at the specified epoch.
2020-07-21 17:44:05 +00:00
// If there are no blocks at the specified epoch, a tipset at an earlier epoch
2020-06-30 22:28:49 +00:00
// will be returned.
ChainGetTipSetByHeight(context.Context, abi.ChainEpoch, types.TipSetKey) (*types.TipSet, error)
2020-06-18 13:44:47 +00:00
// ChainReadObj reads ipld nodes referenced by the specified CID from chain
2020-06-30 22:28:49 +00:00
// blockstore and returns raw bytes.
ChainReadObj(context.Context, cid.Cid) ([]byte, error)
2020-06-18 13:44:47 +00:00
2020-09-10 17:35:06 +00:00
// ChainDeleteObj deletes node referenced by the given CID
ChainDeleteObj(context.Context, cid.Cid) error
2020-06-30 22:28:49 +00:00
// ChainHasObj checks if a given CID exists in the chain blockstore.
2020-02-04 02:45:20 +00:00
ChainHasObj(context.Context, cid.Cid) (bool, error)
// ChainStatObj returns statistics about the graph referenced by 'obj'.
// If 'base' is also specified, then the returned stat will be a diff
// between the two objects.
ChainStatObj(ctx context.Context, obj cid.Cid, base cid.Cid) (ObjStat, error)
2020-06-18 13:44:47 +00:00
2020-06-30 22:28:49 +00:00
// ChainSetHead forcefully sets current chain head. Use with caution.
ChainSetHead(context.Context, types.TipSetKey) error
2020-06-18 13:44:47 +00:00
2020-06-30 22:28:49 +00:00
// ChainGetGenesis returns the genesis tipset.
2019-10-11 02:14:22 +00:00
ChainGetGenesis(context.Context) (*types.TipSet, error)
2020-06-18 13:44:47 +00:00
2020-06-30 22:28:49 +00:00
// ChainTipSetWeight computes weight for the specified tipset.
ChainTipSetWeight(context.Context, types.TipSetKey) (types.BigInt, error)
2020-03-07 02:47:19 +00:00
ChainGetNode(ctx context.Context, p string) (*IpldObject, error)
2020-06-18 13:44:47 +00:00
// ChainGetMessage reads a message referenced by the specified CID from the
2020-06-30 22:28:49 +00:00
// chain blockstore.
2020-01-07 19:03:11 +00:00
ChainGetMessage(context.Context, cid.Cid) (*types.Message, error)
2020-06-18 13:44:47 +00:00
// ChainGetPath returns a set of revert/apply operations needed to get from
// one tipset to another, for example:
//```
// to
// ^
// from tAA
// ^ ^
// tBA tAB
// ^---*--^
// ^
// tRR
//```
// Would return `[revert(tBA), apply(tAB), apply(tAA)]`
ChainGetPath(ctx context.Context, from types.TipSetKey, to types.TipSetKey) ([]*HeadChange, error)
2020-06-18 13:44:47 +00:00
2020-06-30 22:28:49 +00:00
// ChainExport returns a stream of bytes with CAR dump of chain data.
// The exported chain data includes the header chain from the given tipset
// back to genesis, the entire genesis state, and the most recent 'nroots'
// state trees.
// If oldmsgskip is set, messages from before the requested roots are also not included.
ChainExport(ctx context.Context, nroots abi.ChainEpoch, oldmsgskip bool, tsk types.TipSetKey) (<-chan []byte, error)
// MethodGroup: Beacon
// The Beacon method group contains methods for interacting with the random beacon (DRAND)
// BeaconGetEntry returns the beacon entry for the given filecoin epoch. If
// the entry has not yet been produced, the call will block until the entry
// becomes available
BeaconGetEntry(ctx context.Context, epoch abi.ChainEpoch) (*types.BeaconEntry, error)
// GasEstimateFeeCap estimates gas fee cap
GasEstimateFeeCap(context.Context, *types.Message, int64, types.TipSetKey) (types.BigInt, error)
// GasEstimateGasLimit estimates gas used by the message and returns it.
// It fails if message fails to execute.
GasEstimateGasLimit(context.Context, *types.Message, types.TipSetKey) (int64, error)
2020-08-11 05:10:12 +00:00
// GasEstimateGasPremium estimates what gas price should be used for a
// message to have high likelihood of inclusion in `nblocksincl` epochs.
2020-08-11 05:10:12 +00:00
GasEstimateGasPremium(_ context.Context, nblocksincl uint64,
sender address.Address, gaslimit int64, tsk types.TipSetKey) (types.BigInt, error)
2020-08-19 23:26:13 +00:00
// GasEstimateMessageGas estimates gas values for unset message gas fields
2020-08-19 21:25:58 +00:00
GasEstimateMessageGas(context.Context, *types.Message, *MessageSendSpec, types.TipSetKey) (*types.Message, error)
// MethodGroup: Sync
// The Sync method group contains methods for interacting with and
2020-06-30 22:28:49 +00:00
// observing the lotus sync service.
2020-06-30 22:28:49 +00:00
// SyncState returns the current status of the lotus sync system.
SyncState(context.Context) (*SyncState, error)
2020-06-18 13:44:47 +00:00
2020-06-30 22:28:49 +00:00
// SyncSubmitBlock can be used to submit a newly created block to the.
// network through this node
SyncSubmitBlock(ctx context.Context, blk *types.BlockMsg) error
2020-06-18 13:44:47 +00:00
// SyncIncomingBlocks returns a channel streaming incoming, potentially not
// yet synced block headers.
2019-11-18 21:39:07 +00:00
SyncIncomingBlocks(ctx context.Context) (<-chan *types.BlockHeader, error)
2020-06-18 13:44:47 +00:00
// SyncCheckpoint marks a blocks as checkpointed, meaning that it won't ever fork away from it.
SyncCheckpoint(ctx context.Context, tsk types.TipSetKey) error
2020-06-18 13:44:47 +00:00
// SyncMarkBad marks a blocks as bad, meaning that it won't ever by synced.
2020-06-30 22:28:49 +00:00
// Use with extreme caution.
SyncMarkBad(ctx context.Context, bcid cid.Cid) error
2020-06-18 13:44:47 +00:00
2020-09-09 07:24:09 +00:00
// SyncUnmarkBad unmarks a blocks as bad, making it possible to be validated and synced again.
SyncUnmarkBad(ctx context.Context, bcid cid.Cid) error
2020-06-18 13:44:47 +00:00
// SyncCheckBad checks if a block was marked as bad, and if it was, returns
2020-06-30 22:28:49 +00:00
// the reason.
SyncCheckBad(ctx context.Context, bcid cid.Cid) (string, error)
// SyncValidateTipset indicates whether the provided tipset is valid or not
SyncValidateTipset(ctx context.Context, tsk types.TipSetKey) (bool, error)
// MethodGroup: Mpool
// The Mpool methods are for interacting with the message pool. The message pool
// manages all incoming and outgoing 'messages' going over the network.
2020-06-30 22:28:49 +00:00
// MpoolPending returns pending mempool messages.
MpoolPending(context.Context, types.TipSetKey) ([]*types.SignedMessage, error)
2020-06-18 13:44:47 +00:00
2020-08-05 20:17:14 +00:00
// MpoolSelect returns a list of pending messages for inclusion in the next block
MpoolSelect(context.Context, types.TipSetKey, float64) ([]*types.SignedMessage, error)
2020-08-05 20:17:14 +00:00
2020-06-30 22:28:49 +00:00
// MpoolPush pushes a signed message to mempool.
2020-01-07 16:44:55 +00:00
MpoolPush(context.Context, *types.SignedMessage) (cid.Cid, error)
2020-06-18 13:44:47 +00:00
// MpoolPushMessage atomically assigns a nonce, signs, and pushes a message
2020-06-30 22:28:49 +00:00
// to mempool.
2020-08-12 17:06:08 +00:00
// maxFee is only used when GasFeeCap/GasPremium fields aren't specified
//
// When maxFee is set to 0, MpoolPushMessage will guess appropriate fee
// based on current chain conditions
MpoolPushMessage(ctx context.Context, msg *types.Message, spec *MessageSendSpec) (*types.SignedMessage, error)
2020-06-18 13:44:47 +00:00
// MpoolGetNonce gets next nonce for the specified sender.
2020-06-30 22:28:49 +00:00
// Note that this method may not be atomic. Use MpoolPushMessage instead.
2019-07-31 07:13:49 +00:00
MpoolGetNonce(context.Context, address.Address) (uint64, error)
2019-11-17 07:44:06 +00:00
MpoolSub(context.Context) (<-chan MpoolUpdate, error)
2020-06-18 13:44:47 +00:00
// MpoolClear clears pending messages from the mpool
2020-08-21 17:59:40 +00:00
MpoolClear(context.Context, bool) error
2020-08-21 17:28:45 +00:00
2020-08-07 14:45:31 +00:00
// MpoolGetConfig returns (a copy of) the current mpool config
MpoolGetConfig(context.Context) (*types.MpoolConfig, error)
// MpoolSetConfig sets the mpool config to (a copy of) the supplied config
MpoolSetConfig(context.Context, *types.MpoolConfig) error
// MethodGroup: Miner
MinerGetBaseInfo(context.Context, address.Address, abi.ChainEpoch, types.TipSetKey) (*MiningBaseInfo, error)
2020-04-09 00:24:10 +00:00
MinerCreateBlock(context.Context, *BlockTemplate) (*types.BlockMsg, error)
// // UX ?
// MethodGroup: Wallet
2020-06-30 22:28:49 +00:00
// WalletNew creates a new address in the wallet with the given sigType.
2020-02-12 23:52:36 +00:00
WalletNew(context.Context, crypto.SigType) (address.Address, error)
2020-06-30 22:28:49 +00:00
// WalletHas indicates whether the given address is in the wallet.
2019-08-08 17:29:23 +00:00
WalletHas(context.Context, address.Address) (bool, error)
2020-07-13 05:13:29 +00:00
// WalletList lists all the addresses in the wallet.
2019-07-13 00:41:32 +00:00
WalletList(context.Context) ([]address.Address, error)
2020-06-30 22:28:49 +00:00
// WalletBalance returns the balance of the given address at the current head of the chain.
2019-07-18 20:26:04 +00:00
WalletBalance(context.Context, address.Address) (types.BigInt, error)
2020-06-30 22:28:49 +00:00
// WalletSign signs the given bytes using the given address.
2020-02-12 23:52:36 +00:00
WalletSign(context.Context, address.Address, []byte) (*crypto.Signature, error)
2020-06-30 22:28:49 +00:00
// WalletSignMessage signs the given message using the given address.
2019-08-09 15:59:12 +00:00
WalletSignMessage(context.Context, address.Address, *types.Message) (*types.SignedMessage, error)
2020-06-30 22:28:49 +00:00
// WalletVerify takes an address, a signature, and some bytes, and indicates whether the signature is valid.
// The address does not have to be in the wallet.
2020-09-17 10:22:56 +00:00
WalletVerify(context.Context, address.Address, []byte, *crypto.Signature) (bool, error)
2020-06-30 22:28:49 +00:00
// WalletDefaultAddress returns the address marked as default in the wallet.
WalletDefaultAddress(context.Context) (address.Address, error)
2020-06-30 22:28:49 +00:00
// WalletSetDefault marks the given address as as the default one.
WalletSetDefault(context.Context, address.Address) error
2020-06-30 22:28:49 +00:00
// WalletExport returns the private key of an address in the wallet.
2019-10-08 09:46:36 +00:00
WalletExport(context.Context, address.Address) (*types.KeyInfo, error)
2020-06-30 22:28:49 +00:00
// WalletImport receives a KeyInfo, which includes a private key, and imports it into the wallet.
2019-10-08 09:46:36 +00:00
WalletImport(context.Context, *types.KeyInfo) (address.Address, error)
2020-06-30 22:28:49 +00:00
// WalletDelete deletes an address from the wallet.
2020-06-05 23:04:23 +00:00
WalletDelete(context.Context, address.Address) error
// WalletValidateAddress validates whether a given string can be decoded as a well-formed address
WalletValidateAddress(context.Context, string) (address.Address, error)
// Other
// MethodGroup: Client
// The Client methods all have to do with interacting with the storage and
// retrieval markets as a client
2020-06-30 22:28:49 +00:00
// ClientImport imports file under the specified path into filestore.
2020-07-07 11:45:02 +00:00
ClientImport(ctx context.Context, ref FileRef) (*ImportRes, error)
// ClientRemoveImport removes file import
ClientRemoveImport(ctx context.Context, importID multistore.StoreID) error
2020-06-30 22:28:49 +00:00
// ClientStartDeal proposes a deal with a miner.
ClientStartDeal(ctx context.Context, params *StartDealParams) (*cid.Cid, error)
2020-06-30 22:28:49 +00:00
// ClientGetDealInfo returns the latest information about a given deal.
2019-11-06 19:44:28 +00:00
ClientGetDealInfo(context.Context, cid.Cid) (*DealInfo, error)
2020-06-30 22:28:49 +00:00
// ClientListDeals returns information about the deals made by the local client.
2019-09-10 14:13:24 +00:00
ClientListDeals(ctx context.Context) ([]DealInfo, error)
2020-08-27 18:32:51 +00:00
// ClientGetDealUpdates returns the status of updated deals
ClientGetDealUpdates(ctx context.Context) (<-chan DealInfo, error)
2020-06-30 22:28:49 +00:00
// ClientHasLocal indicates whether a certain CID is locally stored.
2019-08-26 13:45:36 +00:00
ClientHasLocal(ctx context.Context, root cid.Cid) (bool, error)
2020-06-30 22:28:49 +00:00
// ClientFindData identifies peers that have a certain file, and returns QueryOffers (one per peer).
2020-07-09 16:29:57 +00:00
ClientFindData(ctx context.Context, root cid.Cid, piece *cid.Cid) ([]QueryOffer, error)
2020-06-30 22:28:49 +00:00
// ClientMinerQueryOffer returns a QueryOffer for the specific miner and file.
ClientMinerQueryOffer(ctx context.Context, miner address.Address, root cid.Cid, piece *cid.Cid) (QueryOffer, error)
2020-06-30 22:28:49 +00:00
// ClientRetrieve initiates the retrieval of a file, as specified in the order.
ClientRetrieve(ctx context.Context, order RetrievalOrder, ref *FileRef) error
// ClientRetrieveWithEvents initiates the retrieval of a file, as specified in the order, and provides a channel
// of status updates.
ClientRetrieveWithEvents(ctx context.Context, order RetrievalOrder, ref *FileRef) (<-chan marketevents.RetrievalEvent, error)
2020-06-30 22:28:49 +00:00
// ClientQueryAsk returns a signed StorageAsk from the specified miner.
2020-02-25 21:09:22 +00:00
ClientQueryAsk(ctx context.Context, p peer.ID, miner address.Address) (*storagemarket.SignedStorageAsk, error)
// ClientCalcCommP calculates the CommP for a specified file
ClientCalcCommP(ctx context.Context, inpath string) (*CommPRet, error)
2020-06-30 22:28:49 +00:00
// ClientGenCar generates a CAR file for the specified file.
ClientGenCar(ctx context.Context, ref FileRef, outpath string) error
2020-07-31 16:22:04 +00:00
// ClientDealSize calculates real deal data size
ClientDealSize(ctx context.Context, root cid.Cid) (DataSize, error)
// ClientListTransfers returns the status of all ongoing transfers of data
ClientListDataTransfers(ctx context.Context) ([]DataTransferChannel, error)
ClientDataTransferUpdates(ctx context.Context) (<-chan DataTransferChannel, error)
2020-09-04 05:34:59 +00:00
// ClientRetrieveTryRestartInsufficientFunds attempts to restart stalled retrievals on a given payment channel
// which are stuck due to insufficient funds
ClientRetrieveTryRestartInsufficientFunds(ctx context.Context, paymentChannel address.Address) error
2019-07-12 09:59:18 +00:00
// ClientUnimport removes references to the specified file from filestore
//ClientUnimport(path string)
// ClientListImports lists imported files and their root CIDs
2019-07-12 10:44:01 +00:00
ClientListImports(ctx context.Context) ([]Import, error)
2019-07-12 09:59:18 +00:00
//ClientListAsks() []Ask
// MethodGroup: State
2020-06-30 22:28:49 +00:00
// The State methods are used to query, inspect, and interact with chain state.
// All methods take a TipSetKey as a parameter. The state looked up is the state at that tipset.
// A nil TipSetKey can be provided as a param, this will cause the heaviest tipset in the chain to be used.
2020-06-30 22:28:49 +00:00
// StateCall runs the given message and returns its result without any persisted changes.
StateCall(context.Context, *types.Message, types.TipSetKey) (*InvocResult, error)
2020-06-30 22:28:49 +00:00
// StateReplay returns the result of executing the indicated message, assuming it was executed in the indicated tipset.
StateReplay(context.Context, types.TipSetKey, cid.Cid) (*InvocResult, error)
2020-06-30 22:28:49 +00:00
// StateGetActor returns the indicated actor's nonce and balance.
StateGetActor(ctx context.Context, actor address.Address, tsk types.TipSetKey) (*types.Actor, error)
2020-06-30 22:28:49 +00:00
// StateReadState returns the indicated actor's state.
StateReadState(ctx context.Context, actor address.Address, tsk types.TipSetKey) (*ActorState, error)
2020-06-30 22:28:49 +00:00
// StateListMessages looks back and returns all messages with a matching to or from address, stopping at the given height.
StateListMessages(ctx context.Context, match *types.Message, tsk types.TipSetKey, toht abi.ChainEpoch) ([]cid.Cid, error)
2020-06-30 22:28:49 +00:00
// StateNetworkName returns the name of the network the node is synced to
2020-03-31 23:13:37 +00:00
StateNetworkName(context.Context) (dtypes.NetworkName, error)
2020-06-30 22:28:49 +00:00
// StateMinerSectors returns info about the given miner's sectors. If the filter bitfield is nil, all sectors are included.
StateMinerSectors(context.Context, address.Address, *bitfield.BitField, types.TipSetKey) ([]*miner.SectorOnChainInfo, error)
2020-07-17 14:26:48 +00:00
// StateMinerActiveSectors returns info about sectors that a given miner is actively proving.
StateMinerActiveSectors(context.Context, address.Address, types.TipSetKey) ([]*miner.SectorOnChainInfo, error)
2020-06-30 22:28:49 +00:00
// StateMinerProvingDeadline calculates the deadline at some epoch for a proving period
// and returns the deadline-related calculations.
StateMinerProvingDeadline(context.Context, address.Address, types.TipSetKey) (*dline.Info, error)
2020-06-30 22:28:49 +00:00
// StateMinerPower returns the power of the indicated miner
StateMinerPower(context.Context, address.Address, types.TipSetKey) (*MinerPower, error)
2020-06-30 22:28:49 +00:00
// StateMinerInfo returns info about the indicated miner
StateMinerInfo(context.Context, address.Address, types.TipSetKey) (miner.MinerInfo, error)
2020-09-17 08:17:14 +00:00
// StateMinerDeadlines returns all the proving deadlines for the given miner
2020-09-17 15:30:15 +00:00
StateMinerDeadlines(context.Context, address.Address, types.TipSetKey) ([]Deadline, error)
// StateMinerPartitions returns all partitions in the specified deadline
StateMinerPartitions(ctx context.Context, m address.Address, dlIdx uint64, tsk types.TipSetKey) ([]Partition, error)
2020-06-30 22:28:49 +00:00
// StateMinerFaults returns a bitfield indicating the faulty sectors of the given miner
2020-09-07 03:49:10 +00:00
StateMinerFaults(context.Context, address.Address, types.TipSetKey) (bitfield.BitField, error)
2020-06-30 22:28:49 +00:00
// StateAllMinerFaults returns all non-expired Faults that occur within lookback epochs of the given tipset
StateAllMinerFaults(ctx context.Context, lookback abi.ChainEpoch, ts types.TipSetKey) ([]*Fault, error)
2020-06-30 22:28:49 +00:00
// StateMinerRecoveries returns a bitfield indicating the recovering sectors of the given miner
2020-09-07 03:49:10 +00:00
StateMinerRecoveries(context.Context, address.Address, types.TipSetKey) (bitfield.BitField, error)
2020-07-28 18:55:20 +00:00
// StateMinerInitialPledgeCollateral returns the precommit deposit for the specified miner's sector
StateMinerPreCommitDepositForPower(context.Context, address.Address, miner.SectorPreCommitInfo, types.TipSetKey) (types.BigInt, error)
2020-06-30 22:28:49 +00:00
// StateMinerInitialPledgeCollateral returns the initial pledge collateral for the specified miner's sector
StateMinerInitialPledgeCollateral(context.Context, address.Address, miner.SectorPreCommitInfo, types.TipSetKey) (types.BigInt, error)
2020-06-30 22:28:49 +00:00
// StateMinerAvailableBalance returns the portion of a miner's balance that can be withdrawn or spent
StateMinerAvailableBalance(context.Context, address.Address, types.TipSetKey) (types.BigInt, error)
2020-06-30 22:28:49 +00:00
// StateSectorPreCommitInfo returns the PreCommit info for the specified miner's sector
StateSectorPreCommitInfo(context.Context, address.Address, abi.SectorNumber, types.TipSetKey) (miner.SectorPreCommitOnChainInfo, error)
// StateSectorGetInfo returns the on-chain info for the specified miner's sector. Returns null in case the sector info isn't found
// NOTE: returned info.Expiration may not be accurate in some cases, use StateSectorExpiration to get accurate
// expiration epoch
StateSectorGetInfo(context.Context, address.Address, abi.SectorNumber, types.TipSetKey) (*miner.SectorOnChainInfo, error)
// StateSectorExpiration returns epoch at which given sector will expire
2020-09-15 19:13:13 +00:00
StateSectorExpiration(context.Context, address.Address, abi.SectorNumber, types.TipSetKey) (*miner.SectorExpiration, error)
2020-07-14 12:32:17 +00:00
// StateSectorPartition finds deadline/partition with the specified sector
2020-09-15 19:13:13 +00:00
StateSectorPartition(ctx context.Context, maddr address.Address, sectorNumber abi.SectorNumber, tok types.TipSetKey) (*miner.SectorLocation, error)
2020-06-30 22:28:49 +00:00
// StateSearchMsg searches for a message in the chain, and returns its receipt and the tipset where it was executed
StateSearchMsg(context.Context, cid.Cid) (*MsgLookup, error)
// StateMsgGasCost searches for a message in the chain, and returns details of the messages gas costs, including the penalty and miner tip
StateMsgGasCost(context.Context, cid.Cid, types.TipSetKey) (*MsgGasCost, error)
2020-06-30 22:28:49 +00:00
// StateWaitMsg looks back in the chain for a message. If not found, it blocks until the
// message arrives on chain, and gets to the indicated confidence depth.
StateWaitMsg(ctx context.Context, cid cid.Cid, confidence uint64) (*MsgLookup, error)
// StateListMiners returns the addresses of every miner that has claimed power in the Power Actor
StateListMiners(context.Context, types.TipSetKey) ([]address.Address, error)
2020-06-30 22:28:49 +00:00
// StateListActors returns the addresses of every actor in the state
StateListActors(context.Context, types.TipSetKey) ([]address.Address, error)
2020-06-30 22:28:49 +00:00
// StateMarketBalance looks up the Escrow and Locked balances of the given address in the Storage Market
StateMarketBalance(context.Context, address.Address, types.TipSetKey) (MarketBalance, error)
2020-06-30 22:28:49 +00:00
// StateMarketParticipants returns the Escrow and Locked balances of every participant in the Storage Market
StateMarketParticipants(context.Context, types.TipSetKey) (map[string]MarketBalance, error)
2020-06-30 22:28:49 +00:00
// StateMarketDeals returns information about every deal in the Storage Market
StateMarketDeals(context.Context, types.TipSetKey) (map[string]MarketDeal, error)
2020-06-30 22:28:49 +00:00
// StateMarketStorageDeal returns information about the indicated deal
StateMarketStorageDeal(context.Context, abi.DealID, types.TipSetKey) (*MarketDeal, error)
2020-06-30 22:28:49 +00:00
// StateLookupID retrieves the ID address of the given address
StateLookupID(context.Context, address.Address, types.TipSetKey) (address.Address, error)
2020-06-30 22:28:49 +00:00
// StateAccountKey returns the public key address of the given ID address
2020-04-16 20:38:42 +00:00
StateAccountKey(context.Context, address.Address, types.TipSetKey) (address.Address, error)
2020-06-30 22:28:49 +00:00
// StateChangedActors returns all the actors whose states change between the two given state CIDs
// TODO: Should this take tipset keys instead?
2019-11-15 18:38:09 +00:00
StateChangedActors(context.Context, cid.Cid, cid.Cid) (map[string]types.Actor, error)
2020-06-30 22:28:49 +00:00
// StateGetReceipt returns the message receipt for the given message
StateGetReceipt(context.Context, cid.Cid, types.TipSetKey) (*types.MessageReceipt, error)
2020-06-30 22:28:49 +00:00
// StateMinerSectorCount returns the number of sectors in a miner's sector set and proving set
StateMinerSectorCount(context.Context, address.Address, types.TipSetKey) (MinerSectors, error)
2020-06-30 22:28:49 +00:00
// StateCompute is a flexible command that applies the given messages on the given tipset.
// The messages are run as though the VM were at the provided height.
2020-03-08 02:31:36 +00:00
StateCompute(context.Context, abi.ChainEpoch, []*types.Message, types.TipSetKey) (*ComputeStateOutput, error)
// StateVerifiedClientStatus returns the data cap for the given address.
// Returns nil if there is no entry in the data cap table for the
// address.
2020-09-17 15:30:15 +00:00
StateVerifiedClientStatus(ctx context.Context, addr address.Address, tsk types.TipSetKey) (*abi.StoragePower, error)
// StateDealProviderCollateralBounds returns the min and max collateral a storage provider
// can issue. It takes the deal size and verified status as parameters.
2020-07-30 12:31:31 +00:00
StateDealProviderCollateralBounds(context.Context, abi.PaddedPieceSize, bool, types.TipSetKey) (DealCollateralBounds, error)
2020-08-07 19:57:03 +00:00
// StateCirculatingSupply returns the circulating supply of Filecoin at the given tipset
StateCirculatingSupply(context.Context, types.TipSetKey) (CirculatingSupply, error)
2020-09-17 01:56:02 +00:00
// StateNetworkVersion returns the network version at the given tipset
StateNetworkVersion(context.Context, types.TipSetKey) (network.Version, error)
2020-08-07 19:57:03 +00:00
// MethodGroup: Msig
// The Msig methods are used to interact with multisig wallets on the
// filecoin network
2020-06-30 22:28:49 +00:00
// MsigGetAvailableBalance returns the portion of a multisig's balance that can be withdrawn or spent
MsigGetAvailableBalance(context.Context, address.Address, types.TipSetKey) (types.BigInt, error)
// MsigGetVested returns the amount of FIL that vested in a multisig in a certain period.
// It takes the following params: <multisig address>, <start epoch>, <end epoch>
MsigGetVested(context.Context, address.Address, types.TipSetKey, types.TipSetKey) (types.BigInt, error)
// MsigCreate creates a multisig wallet
// It takes the following params: <required number of senders>, <approving addresses>, <unlock duration>
//<initial balance>, <sender address of the create msg>, <gas price>
MsigCreate(context.Context, uint64, []address.Address, abi.ChainEpoch, types.BigInt, address.Address, types.BigInt) (cid.Cid, error)
2020-06-30 22:28:49 +00:00
// MsigPropose proposes a multisig message
// It takes the following params: <multisig address>, <recipient address>, <value to transfer>,
// <sender address of the propose msg>, <method to call in the proposed message>, <params to include in the proposed message>
MsigPropose(context.Context, address.Address, address.Address, types.BigInt, address.Address, uint64, []byte) (cid.Cid, error)
2020-06-30 22:28:49 +00:00
// MsigApprove approves a previously-proposed multisig message
// It takes the following params: <multisig address>, <proposed message ID>, <proposer address>, <recipient address>, <value to transfer>,
// <sender address of the approve msg>, <method to call in the proposed message>, <params to include in the proposed message>
MsigApprove(context.Context, address.Address, uint64, address.Address, address.Address, types.BigInt, address.Address, uint64, []byte) (cid.Cid, error)
2020-06-30 22:28:49 +00:00
// MsigCancel cancels a previously-proposed multisig message
2020-07-12 03:54:25 +00:00
// It takes the following params: <multisig address>, <proposed message ID>, <recipient address>, <value to transfer>,
2020-06-30 22:28:49 +00:00
// <sender address of the cancel msg>, <method to call in the proposed message>, <params to include in the proposed message>
2020-07-12 03:54:25 +00:00
MsigCancel(context.Context, address.Address, uint64, address.Address, types.BigInt, address.Address, uint64, []byte) (cid.Cid, error)
// MsigAddPropose proposes adding a signer in the multisig
// It takes the following params: <multisig address>, <sender address of the propose msg>,
// <new signer>, <whether the number of required signers should be increased>
MsigAddPropose(context.Context, address.Address, address.Address, address.Address, bool) (cid.Cid, error)
// MsigAddApprove approves a previously proposed AddSigner message
// It takes the following params: <multisig address>, <sender address of the approve msg>, <proposed message ID>,
// <proposer address>, <new signer>, <whether the number of required signers should be increased>
MsigAddApprove(context.Context, address.Address, address.Address, uint64, address.Address, address.Address, bool) (cid.Cid, error)
// MsigAddCancel cancels a previously proposed AddSigner message
// It takes the following params: <multisig address>, <sender address of the cancel msg>, <proposed message ID>,
// <new signer>, <whether the number of required signers should be increased>
MsigAddCancel(context.Context, address.Address, address.Address, uint64, address.Address, bool) (cid.Cid, error)
2020-07-16 00:55:27 +00:00
// MsigSwapPropose proposes swapping 2 signers in the multisig
// It takes the following params: <multisig address>, <sender address of the propose msg>,
// <old signer>, <new signer>
2020-07-16 00:55:27 +00:00
MsigSwapPropose(context.Context, address.Address, address.Address, address.Address, address.Address) (cid.Cid, error)
// MsigSwapApprove approves a previously proposed SwapSigner
// It takes the following params: <multisig address>, <sender address of the approve msg>, <proposed message ID>,
// <proposer address>, <old signer>, <new signer>
2020-07-16 00:55:27 +00:00
MsigSwapApprove(context.Context, address.Address, address.Address, uint64, address.Address, address.Address, address.Address) (cid.Cid, error)
// MsigSwapCancel cancels a previously proposed SwapSigner message
// It takes the following params: <multisig address>, <sender address of the cancel msg>, <proposed message ID>,
// <old signer>, <new signer>
2020-07-16 00:55:27 +00:00
MsigSwapCancel(context.Context, address.Address, address.Address, uint64, address.Address, address.Address) (cid.Cid, error)
MarketEnsureAvailable(context.Context, address.Address, address.Address, types.BigInt) (cid.Cid, error)
2019-11-08 17:15:38 +00:00
// MarketFreeBalance
// MethodGroup: Paych
// The Paych methods are for interacting with and managing payment channels
2020-07-28 23:16:47 +00:00
PaychGet(ctx context.Context, from, to address.Address, amt types.BigInt) (*ChannelInfo, error)
PaychGetWaitReady(context.Context, cid.Cid) (address.Address, error)
PaychAvailableFunds(ctx context.Context, ch address.Address) (*ChannelAvailableFunds, error)
PaychAvailableFundsByFromTo(ctx context.Context, from, to address.Address) (*ChannelAvailableFunds, error)
PaychList(context.Context) ([]address.Address, error)
PaychStatus(context.Context, address.Address) (*PaychStatus, error)
PaychSettle(context.Context, address.Address) (cid.Cid, error)
PaychCollect(context.Context, address.Address) (cid.Cid, error)
2020-02-21 17:26:44 +00:00
PaychAllocateLane(ctx context.Context, ch address.Address) (uint64, error)
2019-09-24 21:13:47 +00:00
PaychNewPayment(ctx context.Context, from, to address.Address, vouchers []VoucherSpec) (*PaymentInfo, error)
2020-02-25 21:09:22 +00:00
PaychVoucherCheckValid(context.Context, address.Address, *paych.SignedVoucher) error
PaychVoucherCheckSpendable(context.Context, address.Address, *paych.SignedVoucher, []byte, []byte) (bool, error)
2020-09-01 14:33:44 +00:00
PaychVoucherCreate(context.Context, address.Address, types.BigInt, uint64) (*VoucherCreateResult, error)
2020-02-25 21:09:22 +00:00
PaychVoucherAdd(context.Context, address.Address, *paych.SignedVoucher, []byte, types.BigInt) (types.BigInt, error)
PaychVoucherList(context.Context, address.Address) ([]*paych.SignedVoucher, error)
PaychVoucherSubmit(context.Context, address.Address, *paych.SignedVoucher, []byte, []byte) (cid.Cid, error)
2019-07-24 00:09:34 +00:00
}
type FileRef struct {
Path string
IsCAR bool
}
2019-12-11 23:31:59 +00:00
type MinerSectors struct {
2020-09-15 19:09:39 +00:00
// Live sectors that should be proven.
Live uint64
// Sectors actively contributing to power.
Active uint64
// Sectors with failed proofs.
Faulty uint64
2019-12-11 23:31:59 +00:00
}
2020-07-07 11:45:02 +00:00
type ImportRes struct {
Root cid.Cid
ImportID multistore.StoreID
2020-07-07 11:45:02 +00:00
}
type Import struct {
Key multistore.StoreID
2020-07-07 09:12:32 +00:00
Err string
2020-07-07 08:52:19 +00:00
2020-07-07 09:38:22 +00:00
Root *cid.Cid
2020-07-07 08:52:19 +00:00
Source string
FilePath string
}
2019-09-10 14:13:24 +00:00
type DealInfo struct {
ProposalCid cid.Cid
State storagemarket.StorageDealStatus
Message string // more information about deal state, particularly errors
2019-10-22 10:09:36 +00:00
Provider address.Address
2019-09-10 14:48:54 +00:00
DataRef *storagemarket.DataRef
PieceCID cid.Cid
2019-09-10 14:48:54 +00:00
Size uint64
2019-10-29 10:01:18 +00:00
PricePerEpoch types.BigInt
Duration uint64
DealID abi.DealID
2020-08-15 00:00:31 +00:00
CreationTime time.Time
2019-09-10 14:13:24 +00:00
}
type MsgLookup struct {
Message cid.Cid // Can be different than requested, in case it was replaced, but only gas values changed
Receipt types.MessageReceipt
ReturnDec interface{}
2020-07-12 03:54:25 +00:00
TipSet types.TipSetKey
Height abi.ChainEpoch
}
type MsgGasCost struct {
Message cid.Cid // Can be different than requested, in case it was replaced, but only gas values changed
GasUsed abi.TokenAmount
BaseFeeBurn abi.TokenAmount
OverEstimationBurn abi.TokenAmount
MinerPenalty abi.TokenAmount
MinerTip abi.TokenAmount
Refund abi.TokenAmount
TotalCost abi.TokenAmount
}
type BlockMessages struct {
BlsMessages []*types.Message
SecpkMessages []*types.SignedMessage
2019-09-23 11:15:16 +00:00
Cids []cid.Cid
}
type Message struct {
Cid cid.Cid
Message *types.Message
}
type ActorState struct {
Balance types.BigInt
State interface{}
}
2019-09-06 22:39:47 +00:00
type PCHDir int
const (
PCHUndef PCHDir = iota
PCHInbound
PCHOutbound
)
2019-09-09 16:02:57 +00:00
type PaychStatus struct {
2019-09-06 22:39:47 +00:00
ControlAddr address.Address
Direction PCHDir
}
2019-08-21 16:31:14 +00:00
type ChannelInfo struct {
Channel address.Address
WaitSentinel cid.Cid
}
2020-09-01 14:33:44 +00:00
type ChannelAvailableFunds struct {
// Channel is the address of the channel
2020-09-01 14:33:44 +00:00
Channel *address.Address
// From is the from address of the channel (channel creator)
From address.Address
// To is the to address of the channel
To address.Address
2020-09-01 14:33:44 +00:00
// ConfirmedAmt is the amount of funds that have been confirmed on-chain
// for the channel
ConfirmedAmt types.BigInt
// PendingAmt is the amount of funds that are pending confirmation on-chain
PendingAmt types.BigInt
// PendingWaitSentinel can be used with PaychGetWaitReady to wait for
// confirmation of pending funds
PendingWaitSentinel *cid.Cid
// QueuedAmt is the amount that is queued up behind a pending request
QueuedAmt types.BigInt
// VoucherRedeemedAmt is the amount that is redeemed by vouchers on-chain
// and in the local datastore
VoucherReedeemedAmt types.BigInt
}
type PaymentInfo struct {
Channel address.Address
WaitSentinel cid.Cid
Vouchers []*paych.SignedVoucher
2019-09-24 21:13:47 +00:00
}
type VoucherSpec struct {
2020-02-27 21:45:31 +00:00
Amount types.BigInt
TimeLockMin abi.ChainEpoch
TimeLockMax abi.ChainEpoch
MinSettle abi.ChainEpoch
2019-09-24 21:13:47 +00:00
2020-02-25 21:09:22 +00:00
Extra *paych.ModVerifyParams
}
2020-09-01 14:33:44 +00:00
// VoucherCreateResult is the response to calling PaychVoucherCreate
type VoucherCreateResult struct {
// Voucher that was created, or nil if there was an error or if there
// were insufficient funds in the channel
Voucher *paych.SignedVoucher
// Shortfall is the additional amount that would be needed in the channel
// in order to be able to create the voucher
Shortfall types.BigInt
}
2019-08-21 16:31:14 +00:00
type MinerPower struct {
MinerPower power.Claim
TotalPower power.Claim
HasMinPower bool
2019-08-21 16:31:14 +00:00
}
2019-08-26 10:04:57 +00:00
2019-08-26 18:23:11 +00:00
type QueryOffer struct {
2019-08-26 13:45:36 +00:00
Err string
2020-07-09 16:29:57 +00:00
Root cid.Cid
Piece *cid.Cid
2019-08-27 18:45:21 +00:00
Size uint64
MinPrice types.BigInt
UnsealPrice types.BigInt
PaymentInterval uint64
PaymentIntervalIncrease uint64
Miner address.Address
2020-08-05 22:35:59 +00:00
MinerPeer retrievalmarket.RetrievalPeer
2019-08-26 13:45:36 +00:00
}
2019-08-27 18:45:21 +00:00
2019-12-01 21:52:24 +00:00
func (o *QueryOffer) Order(client address.Address) RetrievalOrder {
2019-08-27 18:45:21 +00:00
return RetrievalOrder{
Root: o.Root,
2020-07-09 16:29:57 +00:00
Piece: o.Piece,
Size: o.Size,
Total: o.MinPrice,
UnsealPrice: o.UnsealPrice,
PaymentInterval: o.PaymentInterval,
PaymentIntervalIncrease: o.PaymentIntervalIncrease,
Client: client,
2019-12-01 21:52:24 +00:00
2020-08-05 22:35:59 +00:00
Miner: o.Miner,
MinerPeer: o.MinerPeer,
2019-08-27 18:45:21 +00:00
}
}
2020-02-08 02:18:32 +00:00
type MarketBalance struct {
Escrow big.Int
Locked big.Int
}
type MarketDeal struct {
Proposal market.DealProposal
State market.DealState
}
2019-08-27 18:45:21 +00:00
type RetrievalOrder struct {
2019-08-29 15:09:34 +00:00
// TODO: make this less unixfs specific
2020-07-09 16:29:57 +00:00
Root cid.Cid
Piece *cid.Cid
Size uint64
2019-08-27 18:45:21 +00:00
// TODO: support offset
Total types.BigInt
UnsealPrice types.BigInt
PaymentInterval uint64
PaymentIntervalIncrease uint64
Client address.Address
Miner address.Address
2020-08-05 22:35:59 +00:00
MinerPeer retrievalmarket.RetrievalPeer
2019-08-27 18:45:21 +00:00
}
2019-09-19 20:25:18 +00:00
type InvocResult struct {
Msg *types.Message
MsgRct *types.MessageReceipt
ExecutionTrace types.ExecutionTrace
Error string
Duration time.Duration
2019-09-19 20:25:18 +00:00
}
type MethodCall struct {
types.MessageReceipt
Error string
}
type StartDealParams struct {
Data *storagemarket.DataRef
Wallet address.Address
Miner address.Address
EpochPrice types.BigInt
MinBlocksDuration uint64
ProviderCollateral big.Int
DealStartEpoch abi.ChainEpoch
FastRetrieval bool
VerifiedDeal bool
}
2020-03-07 02:47:19 +00:00
type IpldObject struct {
Cid cid.Cid
Obj interface{}
}
2019-11-16 01:05:16 +00:00
type ActiveSync struct {
Base *types.TipSet
Target *types.TipSet
2019-09-30 22:29:40 +00:00
Stage SyncStateStage
2020-02-08 02:18:32 +00:00
Height abi.ChainEpoch
2019-12-04 04:59:41 +00:00
Start time.Time
End time.Time
Message string
}
2019-09-30 22:29:40 +00:00
2019-11-16 01:05:16 +00:00
type SyncState struct {
ActiveSyncs []ActiveSync
2020-09-24 11:35:45 +00:00
VMApplied uint64
2019-11-16 01:05:16 +00:00
}
2019-09-30 22:29:40 +00:00
type SyncStateStage int
const (
StageIdle = SyncStateStage(iota)
StageHeaders
StagePersistHeaders
StageMessages
StageSyncComplete
2019-12-04 03:56:29 +00:00
StageSyncErrored
StageFetchingMessages
2019-09-30 22:29:40 +00:00
)
2019-11-17 07:44:06 +00:00
func (v SyncStateStage) String() string {
switch v {
case StageHeaders:
return "header sync"
case StagePersistHeaders:
return "persisting headers"
case StageMessages:
return "message sync"
case StageSyncComplete:
return "complete"
case StageSyncErrored:
return "error"
case StageFetchingMessages:
return "fetching messages"
default:
return fmt.Sprintf("<unknown: %d>", v)
}
}
2019-11-17 07:44:06 +00:00
type MpoolChange int
const (
MpoolAdd MpoolChange = iota
MpoolRemove
)
type MpoolUpdate struct {
2019-11-18 21:39:07 +00:00
Type MpoolChange
2019-11-17 07:44:06 +00:00
Message *types.SignedMessage
}
2020-02-27 21:45:31 +00:00
2020-03-08 02:31:36 +00:00
type ComputeStateOutput struct {
Root cid.Cid
Trace []*InvocResult
}
2020-07-30 12:31:31 +00:00
type DealCollateralBounds struct {
Min abi.TokenAmount
Max abi.TokenAmount
}
type CirculatingSupply struct {
FilVested abi.TokenAmount
FilMined abi.TokenAmount
FilBurnt abi.TokenAmount
FilLocked abi.TokenAmount
FilCirculating abi.TokenAmount
}
type MiningBaseInfo struct {
2020-04-09 17:13:09 +00:00
MinerPower types.BigInt
NetworkPower types.BigInt
Sectors []builtin.SectorInfo
2020-04-16 17:17:56 +00:00
WorkerKey address.Address
2020-04-09 17:13:09 +00:00
SectorSize abi.SectorSize
PrevBeaconEntry types.BeaconEntry
2020-04-30 22:11:14 +00:00
BeaconEntries []types.BeaconEntry
HasMinPower bool
}
2020-04-09 00:24:10 +00:00
type BlockTemplate struct {
Miner address.Address
Parents types.TipSetKey
Ticket *types.Ticket
Eproof *types.ElectionProof
BeaconValues []types.BeaconEntry
Messages []*types.SignedMessage
Epoch abi.ChainEpoch
Timestamp uint64
WinningPoStProof []builtin.PoStProof
}
2020-07-31 16:22:04 +00:00
type DataSize struct {
PayloadSize int64
PieceSize abi.PaddedPieceSize
}
type CommPRet struct {
Root cid.Cid
Size abi.UnpaddedPieceSize
}
type HeadChange struct {
Type string
Val *types.TipSet
}
type MsigProposeResponse int
const (
MsigApprove MsigProposeResponse = iota
MsigCancel
)
2020-09-17 15:30:15 +00:00
type Deadline struct {
PostSubmissions bitfield.BitField
}
type Partition struct {
AllSectors bitfield.BitField
FaultySectors bitfield.BitField
RecoveringSectors bitfield.BitField
LiveSectors bitfield.BitField
ActiveSectors bitfield.BitField
}
type Fault struct {
Miner address.Address
Epoch abi.ChainEpoch
}