lotus/api/api_full.go

455 lines
16 KiB
Go
Raw Normal View History

package api
import (
"context"
2019-12-04 04:59:41 +00:00
"time"
2019-11-06 19:44:28 +00:00
2020-03-31 23:13:37 +00:00
"github.com/ipfs/go-cid"
"github.com/ipfs/go-filestore"
"github.com/libp2p/go-libp2p-core/peer"
2020-02-04 02:45:20 +00:00
"github.com/filecoin-project/go-address"
"github.com/filecoin-project/go-fil-markets/storagemarket"
2020-02-08 02:18:32 +00:00
"github.com/filecoin-project/specs-actors/actors/abi"
"github.com/filecoin-project/specs-actors/actors/abi/big"
"github.com/filecoin-project/specs-actors/actors/builtin/market"
2020-02-12 23:52:36 +00:00
"github.com/filecoin-project/specs-actors/actors/builtin/miner"
2020-02-25 21:09:22 +00:00
"github.com/filecoin-project/specs-actors/actors/builtin/paych"
2020-04-17 22:02:04 +00:00
"github.com/filecoin-project/specs-actors/actors/builtin/power"
2020-02-12 23:52:36 +00:00
"github.com/filecoin-project/specs-actors/actors/crypto"
2019-07-24 00:09:34 +00:00
"github.com/filecoin-project/lotus/chain/types"
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
2020-02-08 02:18:32 +00:00
// TODO: TipSetKeys
// MethodGroup: Chain
// The Chain method group contains methods for interacting with the
// blockchain, but that do not require any form of state computation
2019-09-18 11:01:52 +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)
// ChainHead returns the current head of the chain
ChainHead(context.Context) (*types.TipSet, error)
// ChainGetRandomness is used to sample the chain for randomness
2020-02-23 20:00:47 +00:00
ChainGetRandomness(ctx context.Context, tsk types.TipSetKey, personalization crypto.DomainSeparationTag, randEpoch abi.ChainEpoch, entropy []byte) (abi.Randomness, error)
// ChainGetBlock returns the block specified by the given CID
ChainGetBlock(context.Context, cid.Cid) (*types.BlockHeader, error)
ChainGetTipSet(context.Context, types.TipSetKey) (*types.TipSet, error)
2019-08-02 03:51:34 +00:00
ChainGetBlockMessages(context.Context, cid.Cid) (*BlockMessages, error)
ChainGetParentReceipts(context.Context, cid.Cid) ([]*types.MessageReceipt, error)
ChainGetParentMessages(context.Context, cid.Cid) ([]Message, error)
ChainGetTipSetByHeight(context.Context, abi.ChainEpoch, types.TipSetKey) (*types.TipSet, error)
ChainReadObj(context.Context, cid.Cid) ([]byte, error)
2020-02-04 02:45:20 +00:00
ChainHasObj(context.Context, cid.Cid) (bool, error)
2020-03-04 23:52:28 +00:00
ChainStatObj(context.Context, cid.Cid, cid.Cid) (ObjStat, error)
ChainSetHead(context.Context, types.TipSetKey) error
2019-10-11 02:14:22 +00:00
ChainGetGenesis(context.Context) (*types.TipSet, error)
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-01-07 19:03:11 +00:00
ChainGetMessage(context.Context, cid.Cid) (*types.Message, error)
ChainGetPath(ctx context.Context, from types.TipSetKey, to types.TipSetKey) ([]*HeadChange, error)
ChainExport(context.Context, types.TipSetKey) (<-chan []byte, error)
// MethodGroup: Sync
// The Sync method group contains methods for interacting with and
// observing the lotus sync service
// SyncState returns the current status of the lotus sync system
SyncState(context.Context) (*SyncState, error)
// SyncSubmitBlock can be used to submit a newly created block to the
// network through this node
SyncSubmitBlock(ctx context.Context, blk *types.BlockMsg) error
2019-11-18 21:39:07 +00:00
SyncIncomingBlocks(ctx context.Context) (<-chan *types.BlockHeader, error)
SyncMarkBad(ctx context.Context, bcid cid.Cid) error
SyncCheckBad(ctx context.Context, bcid cid.Cid) (string, 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.
MpoolPending(context.Context, types.TipSetKey) ([]*types.SignedMessage, error)
2020-01-07 16:44:55 +00:00
MpoolPush(context.Context, *types.SignedMessage) (cid.Cid, error)
2019-09-17 08:15:26 +00:00
MpoolPushMessage(context.Context, *types.Message) (*types.SignedMessage, error) // get nonce, sign, push
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-04-22 22:37:59 +00:00
MpoolEstimateGasPrice(context.Context, uint64, address.Address, int64, types.TipSetKey) (types.BigInt, 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-02-12 23:52:36 +00:00
WalletNew(context.Context, crypto.SigType) (address.Address, error)
2019-08-08 17:29:23 +00:00
WalletHas(context.Context, address.Address) (bool, error)
2019-07-13 00:41:32 +00:00
WalletList(context.Context) ([]address.Address, error)
2019-07-18 20:26:04 +00:00
WalletBalance(context.Context, address.Address) (types.BigInt, error)
2020-02-12 23:52:36 +00:00
WalletSign(context.Context, address.Address, []byte) (*crypto.Signature, error)
2019-08-09 15:59:12 +00:00
WalletSignMessage(context.Context, address.Address, *types.Message) (*types.SignedMessage, error)
2020-03-08 00:46:12 +00:00
WalletVerify(context.Context, address.Address, []byte, *crypto.Signature) bool
WalletDefaultAddress(context.Context) (address.Address, error)
WalletSetDefault(context.Context, address.Address) error
2019-10-08 09:46:36 +00:00
WalletExport(context.Context, address.Address) (*types.KeyInfo, error)
WalletImport(context.Context, *types.KeyInfo) (address.Address, error)
// Other
// MethodGroup: Client
// The Client methods all have to do with interacting with the storage and
// retrieval markets as a client
2019-07-12 09:59:18 +00:00
// ClientImport imports file under the specified path into filestore
ClientImport(ctx context.Context, ref FileRef) (cid.Cid, error)
// ClientStartDeal proposes a deal with a miner
ClientStartDeal(ctx context.Context, params *StartDealParams) (*cid.Cid, error)
// ClientGetDeal info returns the latest information about a given deal
2019-11-06 19:44:28 +00:00
ClientGetDealInfo(context.Context, cid.Cid) (*DealInfo, error)
2019-09-10 14:13:24 +00:00
ClientListDeals(ctx context.Context) ([]DealInfo, error)
2019-08-26 13:45:36 +00:00
ClientHasLocal(ctx context.Context, root cid.Cid) (bool, error)
2019-11-07 12:06:32 +00:00
ClientFindData(ctx context.Context, root cid.Cid) ([]QueryOffer, error)
ClientRetrieve(ctx context.Context, order RetrievalOrder, ref FileRef) error
2020-02-25 21:09:22 +00:00
ClientQueryAsk(ctx context.Context, p peer.ID, miner address.Address) (*storagemarket.SignedStorageAsk, error)
ClientCalcCommP(ctx context.Context, inpath string, miner address.Address) (*CommPRet, error)
ClientGenCar(ctx context.Context, ref FileRef, outpath string) error
2019-08-01 17:12:41 +00:00
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
// The State methods are used to query, inspect, and interact with chain state
// if tipset is nil, we'll use heaviest
StateCall(context.Context, *types.Message, types.TipSetKey) (*InvocResult, error)
StateReplay(context.Context, types.TipSetKey, cid.Cid) (*InvocResult, error)
StateGetActor(ctx context.Context, actor address.Address, tsk types.TipSetKey) (*types.Actor, error)
StateReadState(ctx context.Context, act *types.Actor, tsk types.TipSetKey) (*ActorState, error)
StateListMessages(ctx context.Context, match *types.Message, tsk types.TipSetKey, toht abi.ChainEpoch) ([]cid.Cid, error)
2020-03-31 23:13:37 +00:00
StateNetworkName(context.Context) (dtypes.NetworkName, error)
2020-04-21 17:22:53 +00:00
StateMinerSectors(context.Context, address.Address, *abi.BitField, bool, types.TipSetKey) ([]*ChainSectorInfo, error)
2020-04-15 20:40:46 +00:00
StateMinerProvingSet(context.Context, address.Address, types.TipSetKey) ([]*ChainSectorInfo, error)
StateMinerProvingDeadline(context.Context, address.Address, types.TipSetKey) (*miner.DeadlineInfo, error)
StateMinerPower(context.Context, address.Address, types.TipSetKey) (*MinerPower, error)
StateMinerInfo(context.Context, address.Address, types.TipSetKey) (miner.MinerInfo, error)
StateMinerDeadlines(context.Context, address.Address, types.TipSetKey) (*miner.Deadlines, error)
StateMinerFaults(context.Context, address.Address, types.TipSetKey) ([]abi.SectorNumber, error)
StateMinerInitialPledgeCollateral(context.Context, address.Address, abi.SectorNumber, types.TipSetKey) (types.BigInt, error)
StateMinerAvailableBalance(context.Context, address.Address, types.TipSetKey) (types.BigInt, error)
StateSectorPreCommitInfo(context.Context, address.Address, abi.SectorNumber, types.TipSetKey) (miner.SectorPreCommitOnChainInfo, error)
StatePledgeCollateral(context.Context, types.TipSetKey) (types.BigInt, error)
StateWaitMsg(context.Context, cid.Cid) (*MsgLookup, error)
StateSearchMsg(context.Context, cid.Cid) (*MsgLookup, error)
StateListMiners(context.Context, types.TipSetKey) ([]address.Address, error)
StateListActors(context.Context, types.TipSetKey) ([]address.Address, error)
StateMarketBalance(context.Context, address.Address, types.TipSetKey) (MarketBalance, error)
StateMarketParticipants(context.Context, types.TipSetKey) (map[string]MarketBalance, error)
StateMarketDeals(context.Context, types.TipSetKey) (map[string]MarketDeal, error)
StateMarketStorageDeal(context.Context, abi.DealID, types.TipSetKey) (*MarketDeal, error)
StateLookupID(context.Context, address.Address, types.TipSetKey) (address.Address, error)
2020-04-16 20:38:42 +00:00
StateAccountKey(context.Context, address.Address, types.TipSetKey) (address.Address, error)
2019-11-15 18:38:09 +00:00
StateChangedActors(context.Context, cid.Cid, cid.Cid) (map[string]types.Actor, error)
StateGetReceipt(context.Context, cid.Cid, types.TipSetKey) (*types.MessageReceipt, error)
StateMinerSectorCount(context.Context, address.Address, types.TipSetKey) (MinerSectors, error)
2020-03-08 02:31:36 +00:00
StateCompute(context.Context, abi.ChainEpoch, []*types.Message, types.TipSetKey) (*ComputeStateOutput, error)
// MethodGroup: Msig
// The Msig methods are used to interact with multisig wallets on the
// filecoin network
MsigGetAvailableBalance(context.Context, address.Address, types.TipSetKey) (types.BigInt, error)
MsigCreate(context.Context, int64, []address.Address, types.BigInt, address.Address, types.BigInt) (cid.Cid, error)
MsigPropose(context.Context, address.Address, address.Address, types.BigInt, address.Address, uint64, []byte) (cid.Cid, error)
MsigApprove(context.Context, address.Address, uint64, address.Address, address.Address, types.BigInt, address.Address, uint64, []byte) (cid.Cid, error)
MsigCancel(context.Context, address.Address, uint64, address.Address, address.Address, types.BigInt, address.Address, uint64, []byte) (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
2019-09-16 13:46:05 +00:00
PaychGet(ctx context.Context, from, to address.Address, ensureFunds types.BigInt) (*ChannelInfo, error)
PaychList(context.Context) ([]address.Address, error)
PaychStatus(context.Context, address.Address) (*PaychStatus, error)
PaychClose(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)
PaychVoucherCreate(context.Context, address.Address, types.BigInt, uint64) (*paych.SignedVoucher, error)
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) (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 {
Sset uint64
2020-04-15 22:16:24 +00:00
Pset uint64
2019-12-11 23:31:59 +00:00
}
type Import struct {
Status filestore.Status
Key cid.Cid
FilePath string
Size uint64
}
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
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
2019-09-10 14:13:24 +00:00
}
type MsgLookup struct {
Receipt types.MessageReceipt
TipSet *types.TipSet
}
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
}
2019-11-08 18:15:13 +00:00
type ChainSectorInfo struct {
2020-02-19 19:26:11 +00:00
Info miner.SectorOnChainInfo
2020-02-20 08:37:10 +00:00
ID abi.SectorNumber
}
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
ChannelMessage cid.Cid
}
type PaymentInfo struct {
Channel address.Address
ChannelMessage *cid.Cid
2020-02-25 21:09:22 +00:00
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
}
2019-08-21 16:31:14 +00:00
type MinerPower struct {
2020-04-17 22:02:04 +00:00
MinerPower power.Claim
TotalPower power.Claim
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
2019-08-27 18:45:21 +00:00
Root cid.Cid
Size uint64
MinPrice types.BigInt
PaymentInterval uint64
PaymentIntervalIncrease uint64
Miner address.Address
MinerPeerID peer.ID
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,
Size: o.Size,
Total: o.MinPrice,
PaymentInterval: o.PaymentInterval,
PaymentIntervalIncrease: o.PaymentIntervalIncrease,
Client: client,
2019-12-01 21:52:24 +00:00
2019-08-27 18:45:21 +00:00
Miner: o.Miner,
MinerPeerID: o.MinerPeerID,
}
}
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
2019-08-27 18:45:21 +00:00
Root cid.Cid
Size uint64
// TODO: support offset
Total types.BigInt
PaymentInterval uint64
PaymentIntervalIncrease uint64
Client address.Address
Miner address.Address
MinerPeerID peer.ID
2019-08-27 18:45:21 +00:00
}
2019-09-19 20:25:18 +00:00
type InvocResult struct {
2020-03-08 00:46:12 +00:00
Msg *types.Message
MsgRct *types.MessageReceipt
2020-04-08 22:27:31 +00:00
InternalExecutions []*types.ExecutionResult
2020-03-08 00:46:12 +00:00
Error string
Duration time.Duration
2019-09-19 20:25:18 +00:00
}
type MethodCall struct {
types.MessageReceipt
Error string
}
type StartDealParams struct {
2020-04-16 21:43:39 +00:00
Data *storagemarket.DataRef
Wallet address.Address
Miner address.Address
EpochPrice types.BigInt
MinBlocksDuration uint64
2020-04-30 17:42:16 +00:00
DealStartEpoch abi.ChainEpoch
}
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
}
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
2019-09-30 22:29:40 +00:00
)
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
}
type MiningBaseInfo struct {
2020-04-09 17:13:09 +00:00
MinerPower types.BigInt
NetworkPower types.BigInt
Sectors []abi.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
}
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 []abi.PoStProof
}
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
)