2019-06-25 11:42:17 +00:00
|
|
|
package api
|
|
|
|
|
2019-06-29 09:19:06 +00:00
|
|
|
import (
|
|
|
|
"context"
|
2020-11-24 23:06:47 +00:00
|
|
|
"encoding/json"
|
2020-09-08 18:42:20 +00:00
|
|
|
"fmt"
|
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/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"
|
2021-03-23 12:42:56 +00:00
|
|
|
datatransfer "github.com/filecoin-project/go-data-transfer"
|
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"
|
2020-09-12 03:07:52 +00:00
|
|
|
"github.com/filecoin-project/go-state-types/dline"
|
2021-03-23 12:42:56 +00:00
|
|
|
|
integrate DAG store and CARv2 in deal-making (#6671)
This commit removes badger from the deal-making processes, and
moves to a new architecture with the dagstore as the cental
component on the miner-side, and CARv2s on the client-side.
Every deal that has been handed off to the sealing subsystem becomes
a shard in the dagstore. Shards are mounted via the LotusMount, which
teaches the dagstore how to load the related piece when serving
retrievals.
When the miner starts the Lotus for the first time with this patch,
we will perform a one-time migration of all active deals into the
dagstore. This is a lightweight process, and it consists simply
of registering the shards in the dagstore.
Shards are backed by the unsealed copy of the piece. This is currently
a CARv1. However, the dagstore keeps CARv2 indices for all pieces, so
when it's time to acquire a shard to serve a retrieval, the unsealed
CARv1 is joined with its index (safeguarded by the dagstore), to form
a read-only blockstore, thus taking the place of the monolithic
badger.
Data transfers have been adjusted to interface directly with CARv2 files.
On inbound transfers (client retrievals, miner storage deals), we stream
the received data into a CARv2 ReadWrite blockstore. On outbound transfers
(client storage deals, miner retrievals), we serve the data off a CARv2
ReadOnly blockstore.
Client-side imports are managed by the refactored *imports.Manager
component (when not using IPFS integration). Just like it before, we use
the go-filestore library to avoid duplicating the data from the original
file in the resulting UnixFS DAG (concretely the leaves). However, the
target of those imports are what we call "ref-CARv2s": CARv2 files placed
under the `$LOTUS_PATH/imports` directory, containing the intermediate
nodes in full, and the leaves as positional references to the original file
on disk.
Client-side retrievals are placed into CARv2 files in the location:
`$LOTUS_PATH/retrievals`.
A new set of `Dagstore*` JSON-RPC operations and `lotus-miner dagstore`
subcommands have been introduced on the miner-side to inspect and manage
the dagstore.
Despite moving to a CARv2-backed system, the IPFS integration has been
respected, and it continues to be possible to make storage deals with data
held in an IPFS node, and to perform retrievals directly into an IPFS node.
NOTE: because the "staging" and "client" Badger blockstores are no longer
used, existing imports on the client will be rendered useless. On startup,
Lotus will enumerate all imports and print WARN statements on the log for
each import that needs to be reimported. These log lines contain these
messages:
- import lacks carv2 path; import will not work; please reimport
- import has missing/broken carv2; please reimport
At the end, we will print a "sanity check completed" message indicating
the count of imports found, and how many were deemed broken.
Co-authored-by: Aarsh Shah <aarshkshah1992@gmail.com>
Co-authored-by: Dirk McCormick <dirkmdev@gmail.com>
Co-authored-by: Raúl Kripalani <raul@protocol.ai>
Co-authored-by: Dirk McCormick <dirkmdev@gmail.com>
2021-08-16 22:34:32 +00:00
|
|
|
"github.com/filecoin-project/go-fil-markets/retrievalmarket"
|
|
|
|
"github.com/filecoin-project/go-fil-markets/storagemarket"
|
|
|
|
|
2022-04-20 21:34:28 +00:00
|
|
|
"github.com/filecoin-project/go-state-types/builtin/v8/market"
|
|
|
|
"github.com/filecoin-project/go-state-types/builtin/v8/miner"
|
|
|
|
"github.com/filecoin-project/go-state-types/builtin/v8/paych"
|
2021-03-23 12:42:56 +00:00
|
|
|
apitypes "github.com/filecoin-project/lotus/api/types"
|
|
|
|
"github.com/filecoin-project/lotus/chain/actors/builtin"
|
2022-04-20 21:34:28 +00:00
|
|
|
lminer "github.com/filecoin-project/lotus/chain/actors/builtin/miner"
|
2020-09-15 13:29:25 +00:00
|
|
|
"github.com/filecoin-project/lotus/chain/actors/builtin/power"
|
2019-10-18 04:47:41 +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"
|
integrate DAG store and CARv2 in deal-making (#6671)
This commit removes badger from the deal-making processes, and
moves to a new architecture with the dagstore as the cental
component on the miner-side, and CARv2s on the client-side.
Every deal that has been handed off to the sealing subsystem becomes
a shard in the dagstore. Shards are mounted via the LotusMount, which
teaches the dagstore how to load the related piece when serving
retrievals.
When the miner starts the Lotus for the first time with this patch,
we will perform a one-time migration of all active deals into the
dagstore. This is a lightweight process, and it consists simply
of registering the shards in the dagstore.
Shards are backed by the unsealed copy of the piece. This is currently
a CARv1. However, the dagstore keeps CARv2 indices for all pieces, so
when it's time to acquire a shard to serve a retrieval, the unsealed
CARv1 is joined with its index (safeguarded by the dagstore), to form
a read-only blockstore, thus taking the place of the monolithic
badger.
Data transfers have been adjusted to interface directly with CARv2 files.
On inbound transfers (client retrievals, miner storage deals), we stream
the received data into a CARv2 ReadWrite blockstore. On outbound transfers
(client storage deals, miner retrievals), we serve the data off a CARv2
ReadOnly blockstore.
Client-side imports are managed by the refactored *imports.Manager
component (when not using IPFS integration). Just like it before, we use
the go-filestore library to avoid duplicating the data from the original
file in the resulting UnixFS DAG (concretely the leaves). However, the
target of those imports are what we call "ref-CARv2s": CARv2 files placed
under the `$LOTUS_PATH/imports` directory, containing the intermediate
nodes in full, and the leaves as positional references to the original file
on disk.
Client-side retrievals are placed into CARv2 files in the location:
`$LOTUS_PATH/retrievals`.
A new set of `Dagstore*` JSON-RPC operations and `lotus-miner dagstore`
subcommands have been introduced on the miner-side to inspect and manage
the dagstore.
Despite moving to a CARv2-backed system, the IPFS integration has been
respected, and it continues to be possible to make storage deals with data
held in an IPFS node, and to perform retrievals directly into an IPFS node.
NOTE: because the "staging" and "client" Badger blockstores are no longer
used, existing imports on the client will be rendered useless. On startup,
Lotus will enumerate all imports and print WARN statements on the log for
each import that needs to be reimported. These log lines contain these
messages:
- import lacks carv2 path; import will not work; please reimport
- import has missing/broken carv2; please reimport
At the end, we will print a "sanity check completed" message indicating
the count of imports found, and how many were deemed broken.
Co-authored-by: Aarsh Shah <aarshkshah1992@gmail.com>
Co-authored-by: Dirk McCormick <dirkmdev@gmail.com>
Co-authored-by: Raúl Kripalani <raul@protocol.ai>
Co-authored-by: Dirk McCormick <dirkmdev@gmail.com>
2021-08-16 22:34:32 +00:00
|
|
|
"github.com/filecoin-project/lotus/node/repo/imports"
|
2019-06-29 09:19:06 +00:00
|
|
|
)
|
|
|
|
|
2021-02-23 14:50:47 +00:00
|
|
|
//go:generate go run github.com/golang/mock/mockgen -destination=mocks/mock_full.go -package=mocks . FullNode
|
|
|
|
|
2021-02-28 19:44:02 +00:00
|
|
|
// ChainIO abstracts operations for accessing raw IPLD objects.
|
|
|
|
type ChainIO interface {
|
|
|
|
ChainReadObj(context.Context, cid.Cid) ([]byte, error)
|
|
|
|
ChainHasObj(context.Context, cid.Cid) (bool, error)
|
|
|
|
}
|
|
|
|
|
2021-04-05 11:23:46 +00:00
|
|
|
const LookbackNoLimit = abi.ChainEpoch(-1)
|
|
|
|
|
2021-04-26 18:36:20 +00:00
|
|
|
// MODIFYING THE API INTERFACE
|
|
|
|
//
|
|
|
|
// NOTE: This is the V1 (Unstable) API - to add methods to the V0 (Stable) API
|
|
|
|
// you'll have to add those methods to interfaces in `api/v0api`
|
|
|
|
//
|
|
|
|
// When adding / changing methods in this file:
|
|
|
|
// * Do the change here
|
|
|
|
// * Adjust implementation in `node/impl/`
|
|
|
|
// * Run `make gen` - this will:
|
|
|
|
// * Generate proxy structs
|
|
|
|
// * Generate mocks
|
|
|
|
// * Generate markdown docs
|
|
|
|
// * Generate openrpc blobs
|
|
|
|
|
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
|
2021-06-29 12:07:00 +00:00
|
|
|
Net
|
2019-07-24 00:09:34 +00:00
|
|
|
|
2020-04-20 18:34:07 +00:00
|
|
|
// 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'.
|
2021-03-23 12:42:56 +00:00
|
|
|
ChainNotify(context.Context) (<-chan []*HeadChange, error) //perm:read
|
2020-06-18 13:44:47 +00:00
|
|
|
|
2020-06-30 22:28:49 +00:00
|
|
|
// ChainHead returns the current head of the chain.
|
2021-03-23 12:42:56 +00:00
|
|
|
ChainHead(context.Context) (*types.TipSet, error) //perm:read
|
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.
|
2021-03-23 12:42:56 +00:00
|
|
|
ChainGetBlock(context.Context, cid.Cid) (*types.BlockHeader, error) //perm:read
|
2020-06-30 22:28:49 +00:00
|
|
|
// ChainGetTipSet returns the tipset specified by the given TipSetKey.
|
2021-03-23 12:42:56 +00:00
|
|
|
ChainGetTipSet(context.Context, types.TipSetKey) (*types.TipSet, error) //perm:read
|
2020-06-18 13:44:47 +00:00
|
|
|
|
2020-06-30 22:28:49 +00:00
|
|
|
// ChainGetBlockMessages returns messages stored in the specified block.
|
2021-03-18 21:12:22 +00:00
|
|
|
//
|
|
|
|
// Note: If there are multiple blocks in a tipset, it's likely that some
|
|
|
|
// messages will be duplicated. It's also possible for blocks in a tipset to have
|
|
|
|
// different messages from the same sender at the same nonce. When that happens,
|
|
|
|
// only the first message (in a block with lowest ticket) will be considered
|
|
|
|
// for execution
|
|
|
|
//
|
|
|
|
// NOTE: THIS METHOD SHOULD ONLY BE USED FOR GETTING MESSAGES IN A SPECIFIC BLOCK
|
|
|
|
//
|
|
|
|
// DO NOT USE THIS METHOD TO GET MESSAGES INCLUDED IN A TIPSET
|
|
|
|
// Use ChainGetParentMessages, which will perform correct message deduplication
|
2021-03-23 12:42:56 +00:00
|
|
|
ChainGetBlockMessages(ctx context.Context, blockCid cid.Cid) (*BlockMessages, error) //perm:read
|
2020-06-18 13:44:47 +00:00
|
|
|
|
|
|
|
// ChainGetParentReceipts returns receipts for messages in parent tipset of
|
2021-03-18 18:35:32 +00:00
|
|
|
// the specified block. The receipts in the list returned is one-to-one with the
|
|
|
|
// messages returned by a call to ChainGetParentMessages with the same blockCid.
|
2021-03-23 12:42:56 +00:00
|
|
|
ChainGetParentReceipts(ctx context.Context, blockCid cid.Cid) ([]*types.MessageReceipt, error) //perm:read
|
2020-06-18 13:44:47 +00:00
|
|
|
|
2020-07-13 14:35:51 +00:00
|
|
|
// ChainGetParentMessages returns messages stored in parent tipset of the
|
2020-06-30 22:28:49 +00:00
|
|
|
// specified block.
|
2021-03-23 12:42:56 +00:00
|
|
|
ChainGetParentMessages(ctx context.Context, blockCid cid.Cid) ([]Message, error) //perm:read
|
2020-06-18 13:44:47 +00:00
|
|
|
|
2021-07-01 03:20:22 +00:00
|
|
|
// ChainGetMessagesInTipset returns message stores in current tipset
|
|
|
|
ChainGetMessagesInTipset(ctx context.Context, tsk types.TipSetKey) ([]Message, error) //perm:read
|
|
|
|
|
2020-06-18 13:44:47 +00:00
|
|
|
// 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.
|
2021-03-23 12:42:56 +00:00
|
|
|
ChainGetTipSetByHeight(context.Context, abi.ChainEpoch, types.TipSetKey) (*types.TipSet, error) //perm:read
|
2021-08-05 17:53:12 +00:00
|
|
|
|
|
|
|
// ChainGetTipSetAfterHeight looks back for a tipset at the specified epoch.
|
|
|
|
// If there are no blocks at the specified epoch, the first non-nil tipset at a later epoch
|
|
|
|
// will be returned.
|
|
|
|
ChainGetTipSetAfterHeight(context.Context, abi.ChainEpoch, types.TipSetKey) (*types.TipSet, error) //perm:read
|
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.
|
2021-03-23 12:42:56 +00:00
|
|
|
ChainReadObj(context.Context, cid.Cid) ([]byte, error) //perm:read
|
2020-06-18 13:44:47 +00:00
|
|
|
|
2020-09-10 17:35:06 +00:00
|
|
|
// ChainDeleteObj deletes node referenced by the given CID
|
2021-03-23 12:42:56 +00:00
|
|
|
ChainDeleteObj(context.Context, cid.Cid) error //perm:admin
|
2020-09-10 17:35:06 +00:00
|
|
|
|
2020-06-30 22:28:49 +00:00
|
|
|
// ChainHasObj checks if a given CID exists in the chain blockstore.
|
2021-03-23 12:42:56 +00:00
|
|
|
ChainHasObj(context.Context, cid.Cid) (bool, error) //perm:read
|
2020-07-23 22:32:28 +00:00
|
|
|
|
|
|
|
// 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.
|
2021-03-23 12:42:56 +00:00
|
|
|
ChainStatObj(ctx context.Context, obj cid.Cid, base cid.Cid) (ObjStat, error) //perm:read
|
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.
|
2021-03-23 12:42:56 +00:00
|
|
|
ChainSetHead(context.Context, types.TipSetKey) error //perm:admin
|
2020-06-18 13:44:47 +00:00
|
|
|
|
2020-06-30 22:28:49 +00:00
|
|
|
// ChainGetGenesis returns the genesis tipset.
|
2021-03-23 12:42:56 +00:00
|
|
|
ChainGetGenesis(context.Context) (*types.TipSet, error) //perm:read
|
2020-06-18 13:44:47 +00:00
|
|
|
|
2020-06-30 22:28:49 +00:00
|
|
|
// ChainTipSetWeight computes weight for the specified tipset.
|
2021-03-23 12:42:56 +00:00
|
|
|
ChainTipSetWeight(context.Context, types.TipSetKey) (types.BigInt, error) //perm:read
|
|
|
|
ChainGetNode(ctx context.Context, p string) (*IpldObject, error) //perm:read
|
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.
|
2021-03-23 12:42:56 +00:00
|
|
|
ChainGetMessage(context.Context, cid.Cid) (*types.Message, error) //perm:read
|
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)]`
|
2021-03-23 12:42:56 +00:00
|
|
|
ChainGetPath(ctx context.Context, from types.TipSetKey, to types.TipSetKey) ([]*HeadChange, error) //perm:read
|
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.
|
2020-09-01 23:38:24 +00:00
|
|
|
// 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.
|
2020-09-11 00:40:47 +00:00
|
|
|
// If oldmsgskip is set, messages from before the requested roots are also not included.
|
2021-03-23 12:42:56 +00:00
|
|
|
ChainExport(ctx context.Context, nroots abi.ChainEpoch, oldmsgskip bool, tsk types.TipSetKey) (<-chan []byte, error) //perm:read
|
2019-06-25 11:42:17 +00:00
|
|
|
|
2021-07-25 08:14:48 +00:00
|
|
|
// ChainCheckBlockstore performs an (asynchronous) health check on the chain/state blockstore
|
|
|
|
// if supported by the underlying implementation.
|
2021-07-26 09:13:41 +00:00
|
|
|
ChainCheckBlockstore(context.Context) error //perm:admin
|
2021-07-25 08:14:48 +00:00
|
|
|
|
2021-07-26 05:30:07 +00:00
|
|
|
// ChainBlockstoreInfo returns some basic information about the blockstore
|
|
|
|
ChainBlockstoreInfo(context.Context) (map[string]interface{}, error) //perm:read
|
|
|
|
|
2020-08-05 00:01:21 +00:00
|
|
|
// 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
|
2021-03-23 12:42:56 +00:00
|
|
|
BeaconGetEntry(ctx context.Context, epoch abi.ChainEpoch) (*types.BeaconEntry, error) //perm:read
|
2020-08-05 00:01:21 +00:00
|
|
|
|
2020-08-06 22:10:55 +00:00
|
|
|
// GasEstimateFeeCap estimates gas fee cap
|
2021-03-23 12:42:56 +00:00
|
|
|
GasEstimateFeeCap(context.Context, *types.Message, int64, types.TipSetKey) (types.BigInt, error) //perm:read
|
2020-08-06 22:10:55 +00:00
|
|
|
|
2020-07-20 17:48:30 +00:00
|
|
|
// GasEstimateGasLimit estimates gas used by the message and returns it.
|
|
|
|
// It fails if message fails to execute.
|
2021-03-23 12:42:56 +00:00
|
|
|
GasEstimateGasLimit(context.Context, *types.Message, types.TipSetKey) (int64, error) //perm:read
|
2020-07-20 17:48:30 +00:00
|
|
|
|
2020-08-11 05:10:12 +00:00
|
|
|
// GasEstimateGasPremium estimates what gas price should be used for a
|
2020-07-20 17:48:30 +00:00
|
|
|
// message to have high likelihood of inclusion in `nblocksincl` epochs.
|
|
|
|
|
2020-08-11 05:10:12 +00:00
|
|
|
GasEstimateGasPremium(_ context.Context, nblocksincl uint64,
|
2021-03-23 12:42:56 +00:00
|
|
|
sender address.Address, gaslimit int64, tsk types.TipSetKey) (types.BigInt, error) //perm:read
|
2020-07-20 17:48:30 +00:00
|
|
|
|
2020-08-19 23:26:13 +00:00
|
|
|
// GasEstimateMessageGas estimates gas values for unset message gas fields
|
2021-03-23 12:42:56 +00:00
|
|
|
GasEstimateMessageGas(context.Context, *types.Message, *MessageSendSpec, types.TipSetKey) (*types.Message, error) //perm:read
|
2020-08-19 21:25:58 +00:00
|
|
|
|
2020-04-20 18:34:07 +00:00
|
|
|
// 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-04-20 18:34:07 +00:00
|
|
|
|
2020-06-30 22:28:49 +00:00
|
|
|
// SyncState returns the current status of the lotus sync system.
|
2021-03-23 12:42:56 +00:00
|
|
|
SyncState(context.Context) (*SyncState, error) //perm:read
|
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.
|
2020-04-20 18:34:07 +00:00
|
|
|
// network through this node
|
2021-03-23 12:42:56 +00:00
|
|
|
SyncSubmitBlock(ctx context.Context, blk *types.BlockMsg) error //perm:write
|
2020-06-18 13:44:47 +00:00
|
|
|
|
|
|
|
// SyncIncomingBlocks returns a channel streaming incoming, potentially not
|
|
|
|
// yet synced block headers.
|
2021-03-23 12:42:56 +00:00
|
|
|
SyncIncomingBlocks(ctx context.Context) (<-chan *types.BlockHeader, error) //perm:read
|
2020-06-18 13:44:47 +00:00
|
|
|
|
2020-09-09 05:14:01 +00:00
|
|
|
// SyncCheckpoint marks a blocks as checkpointed, meaning that it won't ever fork away from it.
|
2021-03-23 12:42:56 +00:00
|
|
|
SyncCheckpoint(ctx context.Context, tsk types.TipSetKey) error //perm:admin
|
2020-09-09 05:14:01 +00:00
|
|
|
|
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.
|
2021-03-23 12:42:56 +00:00
|
|
|
SyncMarkBad(ctx context.Context, bcid cid.Cid) error //perm:admin
|
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.
|
2021-03-23 12:42:56 +00:00
|
|
|
SyncUnmarkBad(ctx context.Context, bcid cid.Cid) error //perm:admin
|
2020-09-09 07:24:09 +00:00
|
|
|
|
2020-10-10 08:26:42 +00:00
|
|
|
// SyncUnmarkAllBad purges bad block cache, making it possible to sync to chains previously marked as bad
|
2021-03-23 12:42:56 +00:00
|
|
|
SyncUnmarkAllBad(ctx context.Context) error //perm:admin
|
2020-10-10 08:26:42 +00:00
|
|
|
|
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.
|
2021-03-23 12:42:56 +00:00
|
|
|
SyncCheckBad(ctx context.Context, bcid cid.Cid) (string, error) //perm:read
|
2019-09-30 21:06:47 +00:00
|
|
|
|
2020-09-27 21:52:26 +00:00
|
|
|
// SyncValidateTipset indicates whether the provided tipset is valid or not
|
2021-03-23 12:42:56 +00:00
|
|
|
SyncValidateTipset(ctx context.Context, tsk types.TipSetKey) (bool, error) //perm:read
|
2020-09-27 21:52:26 +00:00
|
|
|
|
2020-04-20 18:34:07 +00:00
|
|
|
// 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.
|
2021-03-23 12:42:56 +00:00
|
|
|
MpoolPending(context.Context, types.TipSetKey) ([]*types.SignedMessage, error) //perm:read
|
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
|
2021-03-23 12:42:56 +00:00
|
|
|
MpoolSelect(context.Context, types.TipSetKey, float64) ([]*types.SignedMessage, error) //perm:read
|
2020-08-05 20:17:14 +00:00
|
|
|
|
2020-06-30 22:28:49 +00:00
|
|
|
// MpoolPush pushes a signed message to mempool.
|
2021-03-23 12:42:56 +00:00
|
|
|
MpoolPush(context.Context, *types.SignedMessage) (cid.Cid, error) //perm:write
|
2020-06-18 13:44:47 +00:00
|
|
|
|
2020-09-18 06:40:43 +00:00
|
|
|
// MpoolPushUntrusted pushes a signed message to mempool from untrusted sources.
|
2021-03-23 12:42:56 +00:00
|
|
|
MpoolPushUntrusted(context.Context, *types.SignedMessage) (cid.Cid, error) //perm:write
|
2020-09-18 06:40:43 +00:00
|
|
|
|
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
|
2021-03-23 12:42:56 +00:00
|
|
|
MpoolPushMessage(ctx context.Context, msg *types.Message, spec *MessageSendSpec) (*types.SignedMessage, error) //perm:sign
|
2020-06-18 13:44:47 +00:00
|
|
|
|
2020-10-08 02:04:43 +00:00
|
|
|
// MpoolBatchPush batch pushes a signed message to mempool.
|
2021-03-23 12:42:56 +00:00
|
|
|
MpoolBatchPush(context.Context, []*types.SignedMessage) ([]cid.Cid, error) //perm:write
|
2020-10-08 02:04:43 +00:00
|
|
|
|
|
|
|
// MpoolBatchPushUntrusted batch pushes a signed message to mempool from untrusted sources.
|
2021-03-23 12:42:56 +00:00
|
|
|
MpoolBatchPushUntrusted(context.Context, []*types.SignedMessage) ([]cid.Cid, error) //perm:write
|
2020-10-08 02:04:43 +00:00
|
|
|
|
|
|
|
// MpoolBatchPushMessage batch pushes a unsigned message to mempool.
|
2021-03-23 12:42:56 +00:00
|
|
|
MpoolBatchPushMessage(context.Context, []*types.Message, *MessageSendSpec) ([]*types.SignedMessage, error) //perm:sign
|
2020-10-08 02:04:43 +00:00
|
|
|
|
2021-03-12 15:10:12 +00:00
|
|
|
// MpoolCheckMessages performs logical checks on a batch of messages
|
2021-04-02 14:12:34 +00:00
|
|
|
MpoolCheckMessages(context.Context, []*MessagePrototype) ([][]MessageCheckStatus, error) //perm:read
|
2021-03-12 15:10:12 +00:00
|
|
|
// MpoolCheckPendingMessages performs logical checks for all pending messages from a given address
|
|
|
|
MpoolCheckPendingMessages(context.Context, address.Address) ([][]MessageCheckStatus, error) //perm:read
|
2021-03-23 14:55:38 +00:00
|
|
|
// MpoolCheckReplaceMessages performs logical checks on pending messages with replacement
|
|
|
|
MpoolCheckReplaceMessages(context.Context, []*types.Message) ([][]MessageCheckStatus, error) //perm:read
|
2021-03-12 15:10:12 +00:00
|
|
|
|
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.
|
2021-03-23 12:42:56 +00:00
|
|
|
MpoolGetNonce(context.Context, address.Address) (uint64, error) //perm:read
|
|
|
|
MpoolSub(context.Context) (<-chan MpoolUpdate, error) //perm:read
|
2020-06-18 13:44:47 +00:00
|
|
|
|
2020-08-21 20:24:53 +00:00
|
|
|
// MpoolClear clears pending messages from the mpool
|
2021-03-23 12:42:56 +00:00
|
|
|
MpoolClear(context.Context, bool) error //perm:write
|
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
|
2021-03-23 12:42:56 +00:00
|
|
|
MpoolGetConfig(context.Context) (*types.MpoolConfig, error) //perm:read
|
2020-08-07 14:45:31 +00:00
|
|
|
// MpoolSetConfig sets the mpool config to (a copy of) the supplied config
|
2021-03-23 12:42:56 +00:00
|
|
|
MpoolSetConfig(context.Context, *types.MpoolConfig) error //perm:admin
|
2020-08-07 14:45:31 +00:00
|
|
|
|
2020-04-20 18:34:07 +00:00
|
|
|
// MethodGroup: Miner
|
2019-06-25 11:42:17 +00:00
|
|
|
|
2021-03-23 12:42:56 +00:00
|
|
|
MinerGetBaseInfo(context.Context, address.Address, abi.ChainEpoch, types.TipSetKey) (*MiningBaseInfo, error) //perm:read
|
|
|
|
MinerCreateBlock(context.Context, *BlockTemplate) (*types.BlockMsg, error) //perm:write
|
2019-06-25 11:42:17 +00:00
|
|
|
|
|
|
|
// // UX ?
|
|
|
|
|
2021-10-27 00:10:18 +00:00
|
|
|
// MethodGroup: WalletF
|
2019-06-25 11:42:17 +00:00
|
|
|
|
2020-06-30 22:28:49 +00:00
|
|
|
// WalletNew creates a new address in the wallet with the given sigType.
|
2020-10-11 18:12:01 +00:00
|
|
|
// Available key types: bls, secp256k1, secp256k1-ledger
|
|
|
|
// Support for numerical types: 1 - secp256k1, 2 - BLS is deprecated
|
2021-03-23 12:42:56 +00:00
|
|
|
WalletNew(context.Context, types.KeyType) (address.Address, error) //perm:write
|
2020-06-30 22:28:49 +00:00
|
|
|
// WalletHas indicates whether the given address is in the wallet.
|
2021-03-23 12:42:56 +00:00
|
|
|
WalletHas(context.Context, address.Address) (bool, error) //perm:write
|
2020-07-13 05:13:29 +00:00
|
|
|
// WalletList lists all the addresses in the wallet.
|
2021-03-23 12:42:56 +00:00
|
|
|
WalletList(context.Context) ([]address.Address, error) //perm:write
|
2020-06-30 22:28:49 +00:00
|
|
|
// WalletBalance returns the balance of the given address at the current head of the chain.
|
2021-03-23 12:42:56 +00:00
|
|
|
WalletBalance(context.Context, address.Address) (types.BigInt, error) //perm:read
|
2020-06-30 22:28:49 +00:00
|
|
|
// WalletSign signs the given bytes using the given address.
|
2021-03-23 12:42:56 +00:00
|
|
|
WalletSign(context.Context, address.Address, []byte) (*crypto.Signature, error) //perm:sign
|
2020-06-30 22:28:49 +00:00
|
|
|
// WalletSignMessage signs the given message using the given address.
|
2021-03-23 12:42:56 +00:00
|
|
|
WalletSignMessage(context.Context, address.Address, *types.Message) (*types.SignedMessage, error) //perm:sign
|
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.
|
2021-03-23 12:42:56 +00:00
|
|
|
WalletVerify(context.Context, address.Address, []byte, *crypto.Signature) (bool, error) //perm:read
|
2020-06-30 22:28:49 +00:00
|
|
|
// WalletDefaultAddress returns the address marked as default in the wallet.
|
2021-03-23 12:42:56 +00:00
|
|
|
WalletDefaultAddress(context.Context) (address.Address, error) //perm:write
|
2020-06-30 22:28:49 +00:00
|
|
|
// WalletSetDefault marks the given address as as the default one.
|
2021-03-23 12:42:56 +00:00
|
|
|
WalletSetDefault(context.Context, address.Address) error //perm:write
|
2020-06-30 22:28:49 +00:00
|
|
|
// WalletExport returns the private key of an address in the wallet.
|
2021-03-23 12:42:56 +00:00
|
|
|
WalletExport(context.Context, address.Address) (*types.KeyInfo, error) //perm:admin
|
2020-06-30 22:28:49 +00:00
|
|
|
// WalletImport receives a KeyInfo, which includes a private key, and imports it into the wallet.
|
2021-03-23 12:42:56 +00:00
|
|
|
WalletImport(context.Context, *types.KeyInfo) (address.Address, error) //perm:admin
|
2020-06-30 22:28:49 +00:00
|
|
|
// WalletDelete deletes an address from the wallet.
|
2021-03-23 12:42:56 +00:00
|
|
|
WalletDelete(context.Context, address.Address) error //perm:admin
|
2020-09-30 05:43:10 +00:00
|
|
|
// WalletValidateAddress validates whether a given string can be decoded as a well-formed address
|
2021-03-23 12:42:56 +00:00
|
|
|
WalletValidateAddress(context.Context, string) (address.Address, error) //perm:read
|
2019-07-17 03:05:55 +00:00
|
|
|
|
2019-06-25 11:42:17 +00:00
|
|
|
// Other
|
|
|
|
|
2020-05-19 16:49:47 +00:00
|
|
|
// 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.
|
2021-03-23 12:42:56 +00:00
|
|
|
ClientImport(ctx context.Context, ref FileRef) (*ImportRes, error) //perm:admin
|
2020-07-07 11:45:02 +00:00
|
|
|
// ClientRemoveImport removes file import
|
integrate DAG store and CARv2 in deal-making (#6671)
This commit removes badger from the deal-making processes, and
moves to a new architecture with the dagstore as the cental
component on the miner-side, and CARv2s on the client-side.
Every deal that has been handed off to the sealing subsystem becomes
a shard in the dagstore. Shards are mounted via the LotusMount, which
teaches the dagstore how to load the related piece when serving
retrievals.
When the miner starts the Lotus for the first time with this patch,
we will perform a one-time migration of all active deals into the
dagstore. This is a lightweight process, and it consists simply
of registering the shards in the dagstore.
Shards are backed by the unsealed copy of the piece. This is currently
a CARv1. However, the dagstore keeps CARv2 indices for all pieces, so
when it's time to acquire a shard to serve a retrieval, the unsealed
CARv1 is joined with its index (safeguarded by the dagstore), to form
a read-only blockstore, thus taking the place of the monolithic
badger.
Data transfers have been adjusted to interface directly with CARv2 files.
On inbound transfers (client retrievals, miner storage deals), we stream
the received data into a CARv2 ReadWrite blockstore. On outbound transfers
(client storage deals, miner retrievals), we serve the data off a CARv2
ReadOnly blockstore.
Client-side imports are managed by the refactored *imports.Manager
component (when not using IPFS integration). Just like it before, we use
the go-filestore library to avoid duplicating the data from the original
file in the resulting UnixFS DAG (concretely the leaves). However, the
target of those imports are what we call "ref-CARv2s": CARv2 files placed
under the `$LOTUS_PATH/imports` directory, containing the intermediate
nodes in full, and the leaves as positional references to the original file
on disk.
Client-side retrievals are placed into CARv2 files in the location:
`$LOTUS_PATH/retrievals`.
A new set of `Dagstore*` JSON-RPC operations and `lotus-miner dagstore`
subcommands have been introduced on the miner-side to inspect and manage
the dagstore.
Despite moving to a CARv2-backed system, the IPFS integration has been
respected, and it continues to be possible to make storage deals with data
held in an IPFS node, and to perform retrievals directly into an IPFS node.
NOTE: because the "staging" and "client" Badger blockstores are no longer
used, existing imports on the client will be rendered useless. On startup,
Lotus will enumerate all imports and print WARN statements on the log for
each import that needs to be reimported. These log lines contain these
messages:
- import lacks carv2 path; import will not work; please reimport
- import has missing/broken carv2; please reimport
At the end, we will print a "sanity check completed" message indicating
the count of imports found, and how many were deemed broken.
Co-authored-by: Aarsh Shah <aarshkshah1992@gmail.com>
Co-authored-by: Dirk McCormick <dirkmdev@gmail.com>
Co-authored-by: Raúl Kripalani <raul@protocol.ai>
Co-authored-by: Dirk McCormick <dirkmdev@gmail.com>
2021-08-16 22:34:32 +00:00
|
|
|
ClientRemoveImport(ctx context.Context, importID imports.ID) error //perm:admin
|
2020-06-30 22:28:49 +00:00
|
|
|
// ClientStartDeal proposes a deal with a miner.
|
2021-03-23 12:42:56 +00:00
|
|
|
ClientStartDeal(ctx context.Context, params *StartDealParams) (*cid.Cid, error) //perm:admin
|
2021-04-05 11:11:10 +00:00
|
|
|
// ClientStatelessDeal fire-and-forget-proposes an offline deal to a miner without subsequent tracking.
|
2021-04-05 14:06:20 +00:00
|
|
|
ClientStatelessDeal(ctx context.Context, params *StartDealParams) (*cid.Cid, error) //perm:write
|
2020-06-30 22:28:49 +00:00
|
|
|
// ClientGetDealInfo returns the latest information about a given deal.
|
2021-03-23 12:42:56 +00:00
|
|
|
ClientGetDealInfo(context.Context, cid.Cid) (*DealInfo, error) //perm:read
|
2020-06-30 22:28:49 +00:00
|
|
|
// ClientListDeals returns information about the deals made by the local client.
|
2021-03-23 12:42:56 +00:00
|
|
|
ClientListDeals(ctx context.Context) ([]DealInfo, error) //perm:write
|
2020-08-27 18:32:51 +00:00
|
|
|
// ClientGetDealUpdates returns the status of updated deals
|
2021-03-23 12:42:56 +00:00
|
|
|
ClientGetDealUpdates(ctx context.Context) (<-chan DealInfo, error) //perm:write
|
2020-10-07 04:57:51 +00:00
|
|
|
// ClientGetDealStatus returns status given a code
|
2021-03-23 12:42:56 +00:00
|
|
|
ClientGetDealStatus(ctx context.Context, statusCode uint64) (string, error) //perm:read
|
2020-06-30 22:28:49 +00:00
|
|
|
// ClientHasLocal indicates whether a certain CID is locally stored.
|
2021-03-23 12:42:56 +00:00
|
|
|
ClientHasLocal(ctx context.Context, root cid.Cid) (bool, error) //perm:write
|
2020-06-30 22:28:49 +00:00
|
|
|
// ClientFindData identifies peers that have a certain file, and returns QueryOffers (one per peer).
|
2021-03-23 12:42:56 +00:00
|
|
|
ClientFindData(ctx context.Context, root cid.Cid, piece *cid.Cid) ([]QueryOffer, error) //perm:read
|
2020-06-30 22:28:49 +00:00
|
|
|
// ClientMinerQueryOffer returns a QueryOffer for the specific miner and file.
|
2021-03-23 12:42:56 +00:00
|
|
|
ClientMinerQueryOffer(ctx context.Context, miner address.Address, root cid.Cid, piece *cid.Cid) (QueryOffer, error) //perm:read
|
2020-06-30 22:28:49 +00:00
|
|
|
// ClientRetrieve initiates the retrieval of a file, as specified in the order.
|
2021-11-10 14:45:46 +00:00
|
|
|
ClientRetrieve(ctx context.Context, params RetrievalOrder) (*RestrievalRes, error) //perm:admin
|
2021-11-10 16:51:16 +00:00
|
|
|
// ClientRetrieveWait waits for retrieval to be complete
|
|
|
|
ClientRetrieveWait(ctx context.Context, deal retrievalmarket.DealID) error //perm:admin
|
2021-11-10 14:45:46 +00:00
|
|
|
// ClientExport exports a file stored in the local filestore to a system file
|
|
|
|
ClientExport(ctx context.Context, exportRef ExportRef, fileRef FileRef) error //perm:admin
|
2021-05-27 02:50:34 +00:00
|
|
|
// ClientListRetrievals returns information about retrievals made by the local client
|
|
|
|
ClientListRetrievals(ctx context.Context) ([]RetrievalInfo, error) //perm:write
|
|
|
|
// ClientGetRetrievalUpdates returns status of updated retrieval deals
|
|
|
|
ClientGetRetrievalUpdates(ctx context.Context) (<-chan RetrievalInfo, error) //perm:write
|
2020-06-30 22:28:49 +00:00
|
|
|
// ClientQueryAsk returns a signed StorageAsk from the specified miner.
|
2022-04-11 17:49:52 +00:00
|
|
|
ClientQueryAsk(ctx context.Context, p peer.ID, miner address.Address) (*StorageAsk, error) //perm:read
|
2020-10-22 11:59:08 +00:00
|
|
|
// ClientCalcCommP calculates the CommP and data size of the specified CID
|
2021-03-23 12:42:56 +00:00
|
|
|
ClientDealPieceCID(ctx context.Context, root cid.Cid) (DataCIDSize, error) //perm:read
|
2020-08-12 19:40:25 +00:00
|
|
|
// ClientCalcCommP calculates the CommP for a specified file
|
2021-03-23 12:42:56 +00:00
|
|
|
ClientCalcCommP(ctx context.Context, inpath string) (*CommPRet, error) //perm:write
|
2020-06-30 22:28:49 +00:00
|
|
|
// ClientGenCar generates a CAR file for the specified file.
|
2021-03-23 12:42:56 +00:00
|
|
|
ClientGenCar(ctx context.Context, ref FileRef, outpath string) error //perm:write
|
2020-07-31 16:22:04 +00:00
|
|
|
// ClientDealSize calculates real deal data size
|
2021-03-23 12:42:56 +00:00
|
|
|
ClientDealSize(ctx context.Context, root cid.Cid) (DataSize, error) //perm:read
|
2020-08-18 23:26:21 +00:00
|
|
|
// ClientListTransfers returns the status of all ongoing transfers of data
|
2021-03-23 12:42:56 +00:00
|
|
|
ClientListDataTransfers(ctx context.Context) ([]DataTransferChannel, error) //perm:write
|
|
|
|
ClientDataTransferUpdates(ctx context.Context) (<-chan DataTransferChannel, error) //perm:write
|
2020-10-13 10:37:00 +00:00
|
|
|
// ClientRestartDataTransfer attempts to restart a data transfer with the given transfer ID and other peer
|
2021-03-23 12:42:56 +00:00
|
|
|
ClientRestartDataTransfer(ctx context.Context, transferID datatransfer.TransferID, otherPeer peer.ID, isInitiator bool) error //perm:write
|
2020-10-22 20:40:26 +00:00
|
|
|
// ClientCancelDataTransfer cancels a data transfer with the given transfer ID and other peer
|
2021-03-23 12:42:56 +00:00
|
|
|
ClientCancelDataTransfer(ctx context.Context, transferID datatransfer.TransferID, otherPeer peer.ID, isInitiator bool) error //perm:write
|
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
|
2021-03-23 12:42:56 +00:00
|
|
|
ClientRetrieveTryRestartInsufficientFunds(ctx context.Context, paymentChannel address.Address) error //perm:write
|
2020-08-19 00:36:22 +00:00
|
|
|
|
2021-03-24 12:36:21 +00:00
|
|
|
// ClientCancelRetrievalDeal cancels an ongoing retrieval deal based on DealID
|
|
|
|
ClientCancelRetrievalDeal(ctx context.Context, dealid retrievalmarket.DealID) error //perm:write
|
2020-08-19 00:36:22 +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
|
2021-03-23 12:42:56 +00:00
|
|
|
ClientListImports(ctx context.Context) ([]Import, error) //perm:write
|
2019-07-12 09:59:18 +00:00
|
|
|
|
|
|
|
//ClientListAsks() []Ask
|
2019-08-07 06:35:57 +00:00
|
|
|
|
2020-05-19 16:49:47 +00:00
|
|
|
// MethodGroup: State
|
2020-06-30 22:28:49 +00:00
|
|
|
// The State methods are used to query, inspect, and interact with chain state.
|
2020-10-22 19:09:30 +00:00
|
|
|
// Most methods take a TipSetKey as a parameter. The state looked up is the parent state of the tipset.
|
2020-06-30 22:28:49 +00:00
|
|
|
// A nil TipSetKey can be provided as a param, this will cause the heaviest tipset in the chain to be used.
|
2020-05-19 16:49:47 +00:00
|
|
|
|
2020-06-30 22:28:49 +00:00
|
|
|
// StateCall runs the given message and returns its result without any persisted changes.
|
2020-10-22 19:09:30 +00:00
|
|
|
//
|
|
|
|
// StateCall applies the message to the tipset's parent state. The
|
|
|
|
// message is not applied on-top-of the messages in the passed-in
|
|
|
|
// tipset.
|
2021-03-23 12:42:56 +00:00
|
|
|
StateCall(context.Context, *types.Message, types.TipSetKey) (*InvocResult, error) //perm:read
|
2020-10-16 02:45:11 +00:00
|
|
|
// StateReplay replays a given message, assuming it was included in a block in the specified tipset.
|
2021-03-18 20:54:35 +00:00
|
|
|
//
|
|
|
|
// If a tipset key is provided, and a replacing message is found on chain,
|
|
|
|
// the method will return an error saying that the message wasn't found
|
|
|
|
//
|
|
|
|
// If no tipset key is provided, the appropriate tipset is looked up, and if
|
|
|
|
// the message was gas-repriced, the on-chain message will be replayed - in
|
|
|
|
// that case the returned InvocResult.MsgCid will not match the Cid param
|
|
|
|
//
|
|
|
|
// If the caller wants to ensure that exactly the requested message was executed,
|
|
|
|
// they MUST check that InvocResult.MsgCid is equal to the provided Cid.
|
|
|
|
// Without this check both the requested and original message may appear as
|
|
|
|
// successfully executed on-chain, which may look like a double-spend.
|
|
|
|
//
|
|
|
|
// A replacing message is a message with a different CID, any of Gas values, and
|
|
|
|
// different signature, but with all other parameters matching (source/destination,
|
|
|
|
// nonce, params, etc.)
|
2021-03-23 12:42:56 +00:00
|
|
|
StateReplay(context.Context, types.TipSetKey, cid.Cid) (*InvocResult, error) //perm:read
|
2020-06-30 22:28:49 +00:00
|
|
|
// StateGetActor returns the indicated actor's nonce and balance.
|
2021-03-23 12:42:56 +00:00
|
|
|
StateGetActor(ctx context.Context, actor address.Address, tsk types.TipSetKey) (*types.Actor, error) //perm:read
|
2020-06-30 22:28:49 +00:00
|
|
|
// StateReadState returns the indicated actor's state.
|
2021-03-23 12:42:56 +00:00
|
|
|
StateReadState(ctx context.Context, actor address.Address, tsk types.TipSetKey) (*ActorState, error) //perm:read
|
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.
|
2021-03-23 12:42:56 +00:00
|
|
|
StateListMessages(ctx context.Context, match *MessageMatch, tsk types.TipSetKey, toht abi.ChainEpoch) ([]cid.Cid, error) //perm:read
|
2020-09-29 07:01:52 +00:00
|
|
|
// StateDecodeParams attempts to decode the provided params, based on the recipient actor address and method number.
|
2021-03-23 12:42:56 +00:00
|
|
|
StateDecodeParams(ctx context.Context, toAddr address.Address, method abi.MethodNum, params []byte, tsk types.TipSetKey) (interface{}, error) //perm:read
|
2021-08-20 15:31:01 +00:00
|
|
|
// StateEncodeParams attempts to encode the provided json params to the binary from
|
|
|
|
StateEncodeParams(ctx context.Context, toActCode cid.Cid, method abi.MethodNum, params json.RawMessage) ([]byte, error) //perm:read
|
2020-02-11 23:29:45 +00:00
|
|
|
|
2020-06-30 22:28:49 +00:00
|
|
|
// StateNetworkName returns the name of the network the node is synced to
|
2021-03-23 12:42:56 +00:00
|
|
|
StateNetworkName(context.Context) (dtypes.NetworkName, error) //perm:read
|
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.
|
2021-03-23 12:42:56 +00:00
|
|
|
StateMinerSectors(context.Context, address.Address, *bitfield.BitField, types.TipSetKey) ([]*miner.SectorOnChainInfo, error) //perm:read
|
2020-07-17 14:26:48 +00:00
|
|
|
// StateMinerActiveSectors returns info about sectors that a given miner is actively proving.
|
2021-03-23 12:42:56 +00:00
|
|
|
StateMinerActiveSectors(context.Context, address.Address, types.TipSetKey) ([]*miner.SectorOnChainInfo, error) //perm:read
|
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.
|
2021-03-23 12:42:56 +00:00
|
|
|
StateMinerProvingDeadline(context.Context, address.Address, types.TipSetKey) (*dline.Info, error) //perm:read
|
2020-06-30 22:28:49 +00:00
|
|
|
// StateMinerPower returns the power of the indicated miner
|
2021-03-23 12:42:56 +00:00
|
|
|
StateMinerPower(context.Context, address.Address, types.TipSetKey) (*MinerPower, error) //perm:read
|
2020-06-30 22:28:49 +00:00
|
|
|
// StateMinerInfo returns info about the indicated miner
|
2022-04-20 21:34:28 +00:00
|
|
|
StateMinerInfo(context.Context, address.Address, types.TipSetKey) (MinerInfo, error) //perm:read
|
2020-06-30 22:28:49 +00:00
|
|
|
// StateMinerDeadlines returns all the proving deadlines for the given miner
|
2021-03-23 12:42:56 +00:00
|
|
|
StateMinerDeadlines(context.Context, address.Address, types.TipSetKey) ([]Deadline, error) //perm:read
|
2020-09-17 15:30:15 +00:00
|
|
|
// StateMinerPartitions returns all partitions in the specified deadline
|
2021-03-23 12:42:56 +00:00
|
|
|
StateMinerPartitions(ctx context.Context, m address.Address, dlIdx uint64, tsk types.TipSetKey) ([]Partition, error) //perm:read
|
2020-06-30 22:28:49 +00:00
|
|
|
// StateMinerFaults returns a bitfield indicating the faulty sectors of the given miner
|
2021-03-23 12:42:56 +00:00
|
|
|
StateMinerFaults(context.Context, address.Address, types.TipSetKey) (bitfield.BitField, error) //perm:read
|
2020-06-30 22:28:49 +00:00
|
|
|
// StateAllMinerFaults returns all non-expired Faults that occur within lookback epochs of the given tipset
|
2021-03-23 12:42:56 +00:00
|
|
|
StateAllMinerFaults(ctx context.Context, lookback abi.ChainEpoch, ts types.TipSetKey) ([]*Fault, error) //perm:read
|
2020-06-30 22:28:49 +00:00
|
|
|
// StateMinerRecoveries returns a bitfield indicating the recovering sectors of the given miner
|
2021-03-23 12:42:56 +00:00
|
|
|
StateMinerRecoveries(context.Context, address.Address, types.TipSetKey) (bitfield.BitField, error) //perm:read
|
2020-07-28 18:55:20 +00:00
|
|
|
// StateMinerInitialPledgeCollateral returns the precommit deposit for the specified miner's sector
|
2021-03-23 12:42:56 +00:00
|
|
|
StateMinerPreCommitDepositForPower(context.Context, address.Address, miner.SectorPreCommitInfo, types.TipSetKey) (types.BigInt, error) //perm:read
|
2020-06-30 22:28:49 +00:00
|
|
|
// StateMinerInitialPledgeCollateral returns the initial pledge collateral for the specified miner's sector
|
2021-03-23 12:42:56 +00:00
|
|
|
StateMinerInitialPledgeCollateral(context.Context, address.Address, miner.SectorPreCommitInfo, types.TipSetKey) (types.BigInt, error) //perm:read
|
2020-06-30 22:28:49 +00:00
|
|
|
// StateMinerAvailableBalance returns the portion of a miner's balance that can be withdrawn or spent
|
2021-03-23 12:42:56 +00:00
|
|
|
StateMinerAvailableBalance(context.Context, address.Address, types.TipSetKey) (types.BigInt, error) //perm:read
|
2020-10-13 19:35:29 +00:00
|
|
|
// StateMinerSectorAllocated checks if a sector is allocated
|
2021-03-23 12:42:56 +00:00
|
|
|
StateMinerSectorAllocated(context.Context, address.Address, abi.SectorNumber, types.TipSetKey) (bool, error) //perm:read
|
2020-06-30 22:28:49 +00:00
|
|
|
// StateSectorPreCommitInfo returns the PreCommit info for the specified miner's sector
|
2021-03-23 12:42:56 +00:00
|
|
|
StateSectorPreCommitInfo(context.Context, address.Address, abi.SectorNumber, types.TipSetKey) (miner.SectorPreCommitOnChainInfo, error) //perm:read
|
2020-08-27 11:51:13 +00:00
|
|
|
// StateSectorGetInfo returns the on-chain info for the specified miner's sector. Returns null in case the sector info isn't found
|
2020-07-16 15:24:41 +00:00
|
|
|
// NOTE: returned info.Expiration may not be accurate in some cases, use StateSectorExpiration to get accurate
|
|
|
|
// expiration epoch
|
2021-03-23 12:42:56 +00:00
|
|
|
StateSectorGetInfo(context.Context, address.Address, abi.SectorNumber, types.TipSetKey) (*miner.SectorOnChainInfo, error) //perm:read
|
2020-07-16 15:24:41 +00:00
|
|
|
// StateSectorExpiration returns epoch at which given sector will expire
|
2022-04-20 21:34:28 +00:00
|
|
|
StateSectorExpiration(context.Context, address.Address, abi.SectorNumber, types.TipSetKey) (*lminer.SectorExpiration, error) //perm:read
|
2020-07-14 12:32:17 +00:00
|
|
|
// StateSectorPartition finds deadline/partition with the specified sector
|
2022-04-20 21:34:28 +00:00
|
|
|
StateSectorPartition(ctx context.Context, maddr address.Address, sectorNumber abi.SectorNumber, tok types.TipSetKey) (*lminer.SectorLocation, error) //perm:read
|
2021-04-02 11:52:24 +00:00
|
|
|
// StateSearchMsg looks back up to limit epochs in the chain for a message, and returns its receipt and the tipset where it was executed
|
2021-03-18 17:17:46 +00:00
|
|
|
//
|
|
|
|
// NOTE: If a replacing message is found on chain, this method will return
|
|
|
|
// a MsgLookup for the replacing message - the MsgLookup.Message will be a different
|
|
|
|
// CID than the one provided in the 'cid' param, MsgLookup.Receipt will contain the
|
|
|
|
// result of the execution of the replacing message.
|
|
|
|
//
|
|
|
|
// If the caller wants to ensure that exactly the requested message was executed,
|
2021-04-02 11:52:24 +00:00
|
|
|
// they must check that MsgLookup.Message is equal to the provided 'cid', or set the
|
|
|
|
// `allowReplaced` parameter to false. Without this check, and with `allowReplaced`
|
|
|
|
// set to true, both the requested and original message may appear as
|
2021-03-18 17:17:46 +00:00
|
|
|
// successfully executed on-chain, which may look like a double-spend.
|
|
|
|
//
|
|
|
|
// A replacing message is a message with a different CID, any of Gas values, and
|
|
|
|
// different signature, but with all other parameters matching (source/destination,
|
|
|
|
// nonce, params, etc.)
|
2021-04-02 11:52:24 +00:00
|
|
|
StateSearchMsg(ctx context.Context, from types.TipSetKey, msg cid.Cid, limit abi.ChainEpoch, allowReplaced bool) (*MsgLookup, error) //perm:read
|
|
|
|
// StateWaitMsg looks back up to limit epochs in the chain for a message.
|
2020-10-02 14:14:30 +00:00
|
|
|
// If not found, it blocks until the message arrives on chain, and gets to the
|
|
|
|
// indicated confidence depth.
|
2021-03-18 17:17:46 +00:00
|
|
|
//
|
|
|
|
// NOTE: If a replacing message is found on chain, this method will return
|
|
|
|
// a MsgLookup for the replacing message - the MsgLookup.Message will be a different
|
|
|
|
// CID than the one provided in the 'cid' param, MsgLookup.Receipt will contain the
|
|
|
|
// result of the execution of the replacing message.
|
|
|
|
//
|
|
|
|
// If the caller wants to ensure that exactly the requested message was executed,
|
2021-04-02 11:52:24 +00:00
|
|
|
// they must check that MsgLookup.Message is equal to the provided 'cid', or set the
|
|
|
|
// `allowReplaced` parameter to false. Without this check, and with `allowReplaced`
|
|
|
|
// set to true, both the requested and original message may appear as
|
2021-03-18 17:17:46 +00:00
|
|
|
// successfully executed on-chain, which may look like a double-spend.
|
|
|
|
//
|
|
|
|
// A replacing message is a message with a different CID, any of Gas values, and
|
|
|
|
// different signature, but with all other parameters matching (source/destination,
|
|
|
|
// nonce, params, etc.)
|
2021-04-02 11:52:24 +00:00
|
|
|
StateWaitMsg(ctx context.Context, cid cid.Cid, confidence uint64, limit abi.ChainEpoch, allowReplaced bool) (*MsgLookup, error) //perm:read
|
2020-06-30 22:28:49 +00:00
|
|
|
// StateListMiners returns the addresses of every miner that has claimed power in the Power Actor
|
2021-03-23 12:42:56 +00:00
|
|
|
StateListMiners(context.Context, types.TipSetKey) ([]address.Address, error) //perm:read
|
2020-06-30 22:28:49 +00:00
|
|
|
// StateListActors returns the addresses of every actor in the state
|
2021-03-23 12:42:56 +00:00
|
|
|
StateListActors(context.Context, types.TipSetKey) ([]address.Address, error) //perm:read
|
2020-06-30 22:28:49 +00:00
|
|
|
// StateMarketBalance looks up the Escrow and Locked balances of the given address in the Storage Market
|
2021-03-23 12:42:56 +00:00
|
|
|
StateMarketBalance(context.Context, address.Address, types.TipSetKey) (MarketBalance, error) //perm:read
|
2020-06-30 22:28:49 +00:00
|
|
|
// StateMarketParticipants returns the Escrow and Locked balances of every participant in the Storage Market
|
2021-03-23 12:42:56 +00:00
|
|
|
StateMarketParticipants(context.Context, types.TipSetKey) (map[string]MarketBalance, error) //perm:read
|
2020-06-30 22:28:49 +00:00
|
|
|
// StateMarketDeals returns information about every deal in the Storage Market
|
2022-04-22 21:01:23 +00:00
|
|
|
StateMarketDeals(context.Context, types.TipSetKey) (map[string]*MarketDeal, error) //perm:read
|
2020-06-30 22:28:49 +00:00
|
|
|
// StateMarketStorageDeal returns information about the indicated deal
|
2021-03-23 12:42:56 +00:00
|
|
|
StateMarketStorageDeal(context.Context, abi.DealID, types.TipSetKey) (*MarketDeal, error) //perm:read
|
2020-06-30 22:28:49 +00:00
|
|
|
// StateLookupID retrieves the ID address of the given address
|
2021-03-23 12:42:56 +00:00
|
|
|
StateLookupID(context.Context, address.Address, types.TipSetKey) (address.Address, error) //perm:read
|
2020-06-30 22:28:49 +00:00
|
|
|
// StateAccountKey returns the public key address of the given ID address
|
2021-03-23 12:42:56 +00:00
|
|
|
StateAccountKey(context.Context, address.Address, types.TipSetKey) (address.Address, error) //perm:read
|
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?
|
2021-03-23 12:42:56 +00:00
|
|
|
StateChangedActors(context.Context, cid.Cid, cid.Cid) (map[string]types.Actor, error) //perm:read
|
2020-06-30 22:28:49 +00:00
|
|
|
// StateMinerSectorCount returns the number of sectors in a miner's sector set and proving set
|
2021-03-23 12:42:56 +00:00
|
|
|
StateMinerSectorCount(context.Context, address.Address, types.TipSetKey) (MinerSectors, error) //perm:read
|
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.
|
2021-03-19 11:57:59 +00:00
|
|
|
//
|
|
|
|
// When called, StateCompute will:
|
|
|
|
// - Load the provided tipset, or use the current chain head if not provided
|
|
|
|
// - Compute the tipset state of the provided tipset on top of the parent state
|
|
|
|
// - (note that this step runs before vmheight is applied to the execution)
|
|
|
|
// - Execute state upgrade if any were scheduled at the epoch, or in null
|
|
|
|
// blocks preceding the tipset
|
|
|
|
// - Call the cron actor on null blocks preceding the tipset
|
|
|
|
// - For each block in the tipset
|
|
|
|
// - Apply messages in blocks in the specified
|
|
|
|
// - Award block reward by calling the reward actor
|
|
|
|
// - Call the cron actor for the current epoch
|
|
|
|
// - If the specified vmheight is higher than the current epoch, apply any
|
|
|
|
// needed state upgrades to the state
|
|
|
|
// - Apply the specified messages to the state
|
|
|
|
//
|
|
|
|
// The vmheight parameter sets VM execution epoch, and can be used to simulate
|
|
|
|
// message execution in different network versions. If the specified vmheight
|
|
|
|
// epoch is higher than the epoch of the specified tipset, any state upgrades
|
|
|
|
// until the vmheight will be executed on the state before applying messages
|
|
|
|
// specified by the user.
|
|
|
|
//
|
|
|
|
// Note that the initial tipset state computation is not affected by the
|
|
|
|
// vmheight parameter - only the messages in the `apply` set are
|
|
|
|
//
|
|
|
|
// If the caller wants to simply compute the state, vmheight should be set to
|
|
|
|
// the epoch of the specified tipset.
|
|
|
|
//
|
|
|
|
// Messages in the `apply` parameter must have the correct nonces, and gas
|
|
|
|
// values set.
|
2021-03-23 12:42:56 +00:00
|
|
|
StateCompute(context.Context, abi.ChainEpoch, []*types.Message, types.TipSetKey) (*ComputeStateOutput, error) //perm:read
|
2020-10-01 07:14:59 +00:00
|
|
|
// StateVerifierStatus returns the data cap for the given address.
|
|
|
|
// Returns nil if there is no entry in the data cap table for the
|
|
|
|
// address.
|
2021-03-23 12:42:56 +00:00
|
|
|
StateVerifierStatus(ctx context.Context, addr address.Address, tsk types.TipSetKey) (*abi.StoragePower, error) //perm:read
|
2020-07-07 17:35:03 +00:00
|
|
|
// StateVerifiedClientStatus returns the data cap for the given address.
|
|
|
|
// Returns nil if there is no entry in the data cap table for the
|
|
|
|
// address.
|
2021-03-23 12:42:56 +00:00
|
|
|
StateVerifiedClientStatus(ctx context.Context, addr address.Address, tsk types.TipSetKey) (*abi.StoragePower, error) //perm:read
|
2020-10-01 07:14:59 +00:00
|
|
|
// StateVerifiedClientStatus returns the address of the Verified Registry's root key
|
2021-03-23 12:42:56 +00:00
|
|
|
StateVerifiedRegistryRootKey(ctx context.Context, tsk types.TipSetKey) (address.Address, error) //perm:read
|
2020-07-30 04:55:37 +00:00
|
|
|
// StateDealProviderCollateralBounds returns the min and max collateral a storage provider
|
|
|
|
// can issue. It takes the deal size and verified status as parameters.
|
2021-03-23 12:42:56 +00:00
|
|
|
StateDealProviderCollateralBounds(context.Context, abi.PaddedPieceSize, bool, types.TipSetKey) (DealCollateralBounds, error) //perm:read
|
2019-08-09 21:41:50 +00:00
|
|
|
|
2020-10-11 22:17:28 +00:00
|
|
|
// StateCirculatingSupply returns the exact circulating supply of Filecoin at the given tipset.
|
|
|
|
// This is not used anywhere in the protocol itself, and is only for external consumption.
|
2021-03-23 12:42:56 +00:00
|
|
|
StateCirculatingSupply(context.Context, types.TipSetKey) (abi.TokenAmount, error) //perm:read
|
2020-10-12 20:41:27 +00:00
|
|
|
// StateVMCirculatingSupplyInternal returns an approximation of the circulating supply of Filecoin at the given tipset.
|
2020-10-11 22:17:28 +00:00
|
|
|
// This is the value reported by the runtime interface to actors code.
|
2021-03-23 12:42:56 +00:00
|
|
|
StateVMCirculatingSupplyInternal(context.Context, types.TipSetKey) (CirculatingSupply, error) //perm:read
|
2020-09-17 01:56:02 +00:00
|
|
|
// StateNetworkVersion returns the network version at the given tipset
|
2021-03-23 12:42:56 +00:00
|
|
|
StateNetworkVersion(context.Context, types.TipSetKey) (apitypes.NetworkVersion, error) //perm:read
|
2020-08-07 19:57:03 +00:00
|
|
|
|
2021-09-12 02:24:53 +00:00
|
|
|
// StateGetRandomnessFromTickets is used to sample the chain for randomness.
|
|
|
|
StateGetRandomnessFromTickets(ctx context.Context, personalization crypto.DomainSeparationTag, randEpoch abi.ChainEpoch, entropy []byte, tsk types.TipSetKey) (abi.Randomness, error) //perm:read
|
|
|
|
// StateGetRandomnessFromBeacon is used to sample the beacon for randomness.
|
|
|
|
StateGetRandomnessFromBeacon(ctx context.Context, personalization crypto.DomainSeparationTag, randEpoch abi.ChainEpoch, entropy []byte, tsk types.TipSetKey) (abi.Randomness, error) //perm:read
|
|
|
|
|
2020-05-19 16:49:47 +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
|
2021-03-23 12:42:56 +00:00
|
|
|
MsigGetAvailableBalance(context.Context, address.Address, types.TipSetKey) (types.BigInt, error) //perm:read
|
2020-10-09 21:14:21 +00:00
|
|
|
// MsigGetVestingSchedule returns the vesting details of a given multisig.
|
2021-03-23 12:42:56 +00:00
|
|
|
MsigGetVestingSchedule(context.Context, address.Address, types.TipSetKey) (MsigVesting, error) //perm:read
|
2020-09-06 00:29:26 +00:00
|
|
|
// 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>
|
2021-03-23 12:42:56 +00:00
|
|
|
MsigGetVested(context.Context, address.Address, types.TipSetKey, types.TipSetKey) (types.BigInt, error) //perm:read
|
2021-02-04 04:46:10 +00:00
|
|
|
|
|
|
|
//MsigGetPending returns pending transactions for the given multisig
|
|
|
|
//wallet. Once pending transactions are fully approved, they will no longer
|
|
|
|
//appear here.
|
2021-03-23 12:42:56 +00:00
|
|
|
MsigGetPending(context.Context, address.Address, types.TipSetKey) ([]*MsigTransaction, error) //perm:read
|
2021-02-04 04:46:10 +00:00
|
|
|
|
2020-07-13 14:35:51 +00:00
|
|
|
// MsigCreate creates a multisig wallet
|
2020-07-10 20:52:04 +00:00
|
|
|
// It takes the following params: <required number of senders>, <approving addresses>, <unlock duration>
|
|
|
|
//<initial balance>, <sender address of the create msg>, <gas price>
|
2021-03-27 14:35:46 +00:00
|
|
|
MsigCreate(context.Context, uint64, []address.Address, abi.ChainEpoch, types.BigInt, address.Address, types.BigInt) (*MessagePrototype, error) //perm:sign
|
|
|
|
|
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>
|
2021-03-27 14:35:46 +00:00
|
|
|
MsigPropose(context.Context, address.Address, address.Address, types.BigInt, address.Address, uint64, []byte) (*MessagePrototype, error) //perm:sign
|
2020-10-09 16:40:25 +00:00
|
|
|
|
|
|
|
// MsigApprove approves a previously-proposed multisig message by transaction ID
|
|
|
|
// It takes the following params: <multisig address>, <proposed transaction ID> <signer address>
|
2021-03-27 14:35:46 +00:00
|
|
|
MsigApprove(context.Context, address.Address, uint64, address.Address) (*MessagePrototype, error) //perm:sign
|
2020-10-09 16:40:25 +00:00
|
|
|
|
|
|
|
// MsigApproveTxnHash approves a previously-proposed multisig message, specified
|
|
|
|
// using both transaction ID and a hash of the parameters used in the
|
|
|
|
// proposal. This method of approval can be used to ensure you only approve
|
|
|
|
// exactly the transaction you think you are.
|
2020-06-30 22:28:49 +00:00
|
|
|
// 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>
|
2021-03-27 14:35:46 +00:00
|
|
|
MsigApproveTxnHash(context.Context, address.Address, uint64, address.Address, address.Address, types.BigInt, address.Address, uint64, []byte) (*MessagePrototype, error) //perm:sign
|
2020-10-09 16:40:25 +00:00
|
|
|
|
2021-11-18 23:52:20 +00:00
|
|
|
// MsigCancel cancels a previously-proposed multisig message
|
|
|
|
// It takes the following params: <multisig address>, <proposed transaction ID> <signer address>
|
|
|
|
MsigCancel(context.Context, address.Address, uint64, address.Address) (*MessagePrototype, error) //perm:sign
|
|
|
|
|
2020-06-30 22:28:49 +00:00
|
|
|
// MsigCancel cancels a previously-proposed multisig message
|
2020-10-09 16:40:25 +00:00
|
|
|
// It takes the following params: <multisig address>, <proposed transaction 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>
|
2021-11-18 23:52:20 +00:00
|
|
|
MsigCancelTxnHash(context.Context, address.Address, uint64, address.Address, types.BigInt, address.Address, uint64, []byte) (*MessagePrototype, error) //perm:sign
|
2021-03-27 14:35:46 +00:00
|
|
|
|
2020-09-06 05:52:30 +00:00
|
|
|
// 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>
|
2021-03-27 14:35:46 +00:00
|
|
|
MsigAddPropose(context.Context, address.Address, address.Address, address.Address, bool) (*MessagePrototype, error) //perm:sign
|
|
|
|
|
2020-09-06 05:52:30 +00:00
|
|
|
// 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>
|
2021-03-27 14:35:46 +00:00
|
|
|
MsigAddApprove(context.Context, address.Address, address.Address, uint64, address.Address, address.Address, bool) (*MessagePrototype, error) //perm:sign
|
|
|
|
|
2020-09-06 05:52:30 +00:00
|
|
|
// 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>
|
2021-03-27 14:35:46 +00:00
|
|
|
MsigAddCancel(context.Context, address.Address, address.Address, uint64, address.Address, bool) (*MessagePrototype, error) //perm:sign
|
|
|
|
|
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>,
|
2020-09-06 05:52:30 +00:00
|
|
|
// <old signer>, <new signer>
|
2021-03-27 14:35:46 +00:00
|
|
|
MsigSwapPropose(context.Context, address.Address, address.Address, address.Address, address.Address) (*MessagePrototype, error) //perm:sign
|
|
|
|
|
2020-07-16 00:55:27 +00:00
|
|
|
// MsigSwapApprove approves a previously proposed SwapSigner
|
|
|
|
// It takes the following params: <multisig address>, <sender address of the approve msg>, <proposed message ID>,
|
2020-09-06 05:52:30 +00:00
|
|
|
// <proposer address>, <old signer>, <new signer>
|
2021-03-27 14:35:46 +00:00
|
|
|
MsigSwapApprove(context.Context, address.Address, address.Address, uint64, address.Address, address.Address, address.Address) (*MessagePrototype, error) //perm:sign
|
|
|
|
|
2020-07-16 00:55:27 +00:00
|
|
|
// MsigSwapCancel cancels a previously proposed SwapSigner message
|
|
|
|
// It takes the following params: <multisig address>, <sender address of the cancel msg>, <proposed message ID>,
|
2020-09-06 05:52:30 +00:00
|
|
|
// <old signer>, <new signer>
|
2021-03-27 14:35:46 +00:00
|
|
|
MsigSwapCancel(context.Context, address.Address, address.Address, uint64, address.Address, address.Address) (*MessagePrototype, error) //perm:sign
|
2020-01-30 01:23:16 +00:00
|
|
|
|
2020-10-09 16:40:25 +00:00
|
|
|
// MsigRemoveSigner proposes the removal of a signer from the multisig.
|
|
|
|
// It accepts the multisig to make the change on, the proposer address to
|
|
|
|
// send the message from, the address to be removed, and a boolean
|
|
|
|
// indicating whether or not the signing threshold should be lowered by one
|
|
|
|
// along with the address removal.
|
2021-03-27 14:35:46 +00:00
|
|
|
MsigRemoveSigner(ctx context.Context, msig address.Address, proposer address.Address, toRemove address.Address, decrease bool) (*MessagePrototype, error) //perm:sign
|
2020-10-09 16:40:25 +00:00
|
|
|
|
2021-01-06 13:27:28 +00:00
|
|
|
// MarketAddBalance adds funds to the market actor
|
2021-03-23 12:42:56 +00:00
|
|
|
MarketAddBalance(ctx context.Context, wallet, addr address.Address, amt types.BigInt) (cid.Cid, error) //perm:sign
|
2021-01-07 08:35:30 +00:00
|
|
|
// MarketGetReserved gets the amount of funds that are currently reserved for the address
|
2021-03-23 12:42:56 +00:00
|
|
|
MarketGetReserved(ctx context.Context, addr address.Address) (types.BigInt, error) //perm:sign
|
2020-11-10 15:45:48 +00:00
|
|
|
// MarketReserveFunds reserves funds for a deal
|
2021-03-23 12:42:56 +00:00
|
|
|
MarketReserveFunds(ctx context.Context, wallet address.Address, addr address.Address, amt types.BigInt) (cid.Cid, error) //perm:sign
|
2020-11-10 15:45:48 +00:00
|
|
|
// MarketReleaseFunds releases funds reserved by MarketReserveFunds
|
2021-03-23 12:42:56 +00:00
|
|
|
MarketReleaseFunds(ctx context.Context, addr address.Address, amt types.BigInt) error //perm:sign
|
2020-12-03 20:47:26 +00:00
|
|
|
// MarketWithdraw withdraws unlocked funds from the market actor
|
2021-03-23 12:42:56 +00:00
|
|
|
MarketWithdraw(ctx context.Context, wallet, addr address.Address, amt types.BigInt) (cid.Cid, error) //perm:sign
|
2019-11-08 17:15:38 +00:00
|
|
|
|
2020-05-19 16:49:47 +00:00
|
|
|
// MethodGroup: Paych
|
|
|
|
// The Paych methods are for interacting with and managing payment channels
|
|
|
|
|
2022-01-04 19:33:49 +00:00
|
|
|
// PaychGet gets or creates a payment channel between address pair
|
2022-02-14 18:56:02 +00:00
|
|
|
// The specified amount will be reserved for use. If there aren't enough non-reserved funds
|
2022-01-04 19:33:49 +00:00
|
|
|
// available, funds will be added through an on-chain message.
|
2022-01-06 15:04:39 +00:00
|
|
|
// - When opts.OffChain is true, this call will not cause any messages to be sent to the chain (no automatic
|
|
|
|
// channel creation/funds adding). If the operation can't be performed without sending a message an error will be
|
|
|
|
// returned. Note that even when this option is specified, this call can be blocked by previous operations on the
|
|
|
|
// channel waiting for on-chain operations.
|
2022-02-14 18:56:02 +00:00
|
|
|
PaychGet(ctx context.Context, from, to address.Address, amt types.BigInt, opts PaychGetOpts) (*ChannelInfo, error) //perm:sign
|
|
|
|
// PaychFund gets or creates a payment channel between address pair.
|
|
|
|
// The specified amount will be added to the channel through on-chain send for future use
|
|
|
|
PaychFund(ctx context.Context, from, to address.Address, amt types.BigInt) (*ChannelInfo, error) //perm:sign
|
2021-03-23 12:42:56 +00:00
|
|
|
PaychGetWaitReady(context.Context, cid.Cid) (address.Address, error) //perm:sign
|
|
|
|
PaychAvailableFunds(ctx context.Context, ch address.Address) (*ChannelAvailableFunds, error) //perm:sign
|
|
|
|
PaychAvailableFundsByFromTo(ctx context.Context, from, to address.Address) (*ChannelAvailableFunds, error) //perm:sign
|
|
|
|
PaychList(context.Context) ([]address.Address, error) //perm:read
|
|
|
|
PaychStatus(context.Context, address.Address) (*PaychStatus, error) //perm:read
|
|
|
|
PaychSettle(context.Context, address.Address) (cid.Cid, error) //perm:sign
|
|
|
|
PaychCollect(context.Context, address.Address) (cid.Cid, error) //perm:sign
|
|
|
|
PaychAllocateLane(ctx context.Context, ch address.Address) (uint64, error) //perm:sign
|
|
|
|
PaychNewPayment(ctx context.Context, from, to address.Address, vouchers []VoucherSpec) (*PaymentInfo, error) //perm:sign
|
|
|
|
PaychVoucherCheckValid(context.Context, address.Address, *paych.SignedVoucher) error //perm:read
|
|
|
|
PaychVoucherCheckSpendable(context.Context, address.Address, *paych.SignedVoucher, []byte, []byte) (bool, error) //perm:read
|
|
|
|
PaychVoucherCreate(context.Context, address.Address, types.BigInt, uint64) (*VoucherCreateResult, error) //perm:sign
|
|
|
|
PaychVoucherAdd(context.Context, address.Address, *paych.SignedVoucher, []byte, types.BigInt) (types.BigInt, error) //perm:write
|
|
|
|
PaychVoucherList(context.Context, address.Address) ([]*paych.SignedVoucher, error) //perm:write
|
|
|
|
PaychVoucherSubmit(context.Context, address.Address, *paych.SignedVoucher, []byte, []byte) (cid.Cid, error) //perm:sign
|
2020-10-01 15:14:08 +00:00
|
|
|
|
2021-03-10 17:22:35 +00:00
|
|
|
// MethodGroup: Node
|
|
|
|
// These methods are general node management and status commands
|
|
|
|
|
|
|
|
NodeStatus(ctx context.Context, inclChainStatus bool) (NodeStatus, error) //perm:read
|
|
|
|
|
2020-10-01 15:14:08 +00:00
|
|
|
// CreateBackup creates node backup onder the specified file name. The
|
|
|
|
// method requires that the lotus daemon is running with the
|
|
|
|
// LOTUS_BACKUP_BASE_PATH environment variable set to some path, and that
|
|
|
|
// the path specified when calling CreateBackup is within the base path
|
2021-03-23 12:42:56 +00:00
|
|
|
CreateBackup(ctx context.Context, fpath string) error //perm:admin
|
2019-07-24 00:09:34 +00:00
|
|
|
}
|
|
|
|
|
2022-04-11 17:49:52 +00:00
|
|
|
type StorageAsk struct {
|
|
|
|
Response *storagemarket.StorageAsk
|
|
|
|
|
|
|
|
DealProtocols []string
|
|
|
|
}
|
|
|
|
|
2020-03-03 04:13:08 +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
|
2020-07-14 12:32:17 +00:00
|
|
|
}
|
|
|
|
|
2020-07-07 11:45:02 +00:00
|
|
|
type ImportRes struct {
|
|
|
|
Root cid.Cid
|
integrate DAG store and CARv2 in deal-making (#6671)
This commit removes badger from the deal-making processes, and
moves to a new architecture with the dagstore as the cental
component on the miner-side, and CARv2s on the client-side.
Every deal that has been handed off to the sealing subsystem becomes
a shard in the dagstore. Shards are mounted via the LotusMount, which
teaches the dagstore how to load the related piece when serving
retrievals.
When the miner starts the Lotus for the first time with this patch,
we will perform a one-time migration of all active deals into the
dagstore. This is a lightweight process, and it consists simply
of registering the shards in the dagstore.
Shards are backed by the unsealed copy of the piece. This is currently
a CARv1. However, the dagstore keeps CARv2 indices for all pieces, so
when it's time to acquire a shard to serve a retrieval, the unsealed
CARv1 is joined with its index (safeguarded by the dagstore), to form
a read-only blockstore, thus taking the place of the monolithic
badger.
Data transfers have been adjusted to interface directly with CARv2 files.
On inbound transfers (client retrievals, miner storage deals), we stream
the received data into a CARv2 ReadWrite blockstore. On outbound transfers
(client storage deals, miner retrievals), we serve the data off a CARv2
ReadOnly blockstore.
Client-side imports are managed by the refactored *imports.Manager
component (when not using IPFS integration). Just like it before, we use
the go-filestore library to avoid duplicating the data from the original
file in the resulting UnixFS DAG (concretely the leaves). However, the
target of those imports are what we call "ref-CARv2s": CARv2 files placed
under the `$LOTUS_PATH/imports` directory, containing the intermediate
nodes in full, and the leaves as positional references to the original file
on disk.
Client-side retrievals are placed into CARv2 files in the location:
`$LOTUS_PATH/retrievals`.
A new set of `Dagstore*` JSON-RPC operations and `lotus-miner dagstore`
subcommands have been introduced on the miner-side to inspect and manage
the dagstore.
Despite moving to a CARv2-backed system, the IPFS integration has been
respected, and it continues to be possible to make storage deals with data
held in an IPFS node, and to perform retrievals directly into an IPFS node.
NOTE: because the "staging" and "client" Badger blockstores are no longer
used, existing imports on the client will be rendered useless. On startup,
Lotus will enumerate all imports and print WARN statements on the log for
each import that needs to be reimported. These log lines contain these
messages:
- import lacks carv2 path; import will not work; please reimport
- import has missing/broken carv2; please reimport
At the end, we will print a "sanity check completed" message indicating
the count of imports found, and how many were deemed broken.
Co-authored-by: Aarsh Shah <aarshkshah1992@gmail.com>
Co-authored-by: Dirk McCormick <dirkmdev@gmail.com>
Co-authored-by: Raúl Kripalani <raul@protocol.ai>
Co-authored-by: Dirk McCormick <dirkmdev@gmail.com>
2021-08-16 22:34:32 +00:00
|
|
|
ImportID imports.ID
|
2020-07-07 11:45:02 +00:00
|
|
|
}
|
|
|
|
|
2019-08-09 21:41:50 +00:00
|
|
|
type Import struct {
|
integrate DAG store and CARv2 in deal-making (#6671)
This commit removes badger from the deal-making processes, and
moves to a new architecture with the dagstore as the cental
component on the miner-side, and CARv2s on the client-side.
Every deal that has been handed off to the sealing subsystem becomes
a shard in the dagstore. Shards are mounted via the LotusMount, which
teaches the dagstore how to load the related piece when serving
retrievals.
When the miner starts the Lotus for the first time with this patch,
we will perform a one-time migration of all active deals into the
dagstore. This is a lightweight process, and it consists simply
of registering the shards in the dagstore.
Shards are backed by the unsealed copy of the piece. This is currently
a CARv1. However, the dagstore keeps CARv2 indices for all pieces, so
when it's time to acquire a shard to serve a retrieval, the unsealed
CARv1 is joined with its index (safeguarded by the dagstore), to form
a read-only blockstore, thus taking the place of the monolithic
badger.
Data transfers have been adjusted to interface directly with CARv2 files.
On inbound transfers (client retrievals, miner storage deals), we stream
the received data into a CARv2 ReadWrite blockstore. On outbound transfers
(client storage deals, miner retrievals), we serve the data off a CARv2
ReadOnly blockstore.
Client-side imports are managed by the refactored *imports.Manager
component (when not using IPFS integration). Just like it before, we use
the go-filestore library to avoid duplicating the data from the original
file in the resulting UnixFS DAG (concretely the leaves). However, the
target of those imports are what we call "ref-CARv2s": CARv2 files placed
under the `$LOTUS_PATH/imports` directory, containing the intermediate
nodes in full, and the leaves as positional references to the original file
on disk.
Client-side retrievals are placed into CARv2 files in the location:
`$LOTUS_PATH/retrievals`.
A new set of `Dagstore*` JSON-RPC operations and `lotus-miner dagstore`
subcommands have been introduced on the miner-side to inspect and manage
the dagstore.
Despite moving to a CARv2-backed system, the IPFS integration has been
respected, and it continues to be possible to make storage deals with data
held in an IPFS node, and to perform retrievals directly into an IPFS node.
NOTE: because the "staging" and "client" Badger blockstores are no longer
used, existing imports on the client will be rendered useless. On startup,
Lotus will enumerate all imports and print WARN statements on the log for
each import that needs to be reimported. These log lines contain these
messages:
- import lacks carv2 path; import will not work; please reimport
- import has missing/broken carv2; please reimport
At the end, we will print a "sanity check completed" message indicating
the count of imports found, and how many were deemed broken.
Co-authored-by: Aarsh Shah <aarshkshah1992@gmail.com>
Co-authored-by: Dirk McCormick <dirkmdev@gmail.com>
Co-authored-by: Raúl Kripalani <raul@protocol.ai>
Co-authored-by: Dirk McCormick <dirkmdev@gmail.com>
2021-08-16 22:34:32 +00:00
|
|
|
Key imports.ID
|
2020-07-07 09:12:32 +00:00
|
|
|
Err string
|
2020-07-07 08:52:19 +00:00
|
|
|
|
integrate DAG store and CARv2 in deal-making (#6671)
This commit removes badger from the deal-making processes, and
moves to a new architecture with the dagstore as the cental
component on the miner-side, and CARv2s on the client-side.
Every deal that has been handed off to the sealing subsystem becomes
a shard in the dagstore. Shards are mounted via the LotusMount, which
teaches the dagstore how to load the related piece when serving
retrievals.
When the miner starts the Lotus for the first time with this patch,
we will perform a one-time migration of all active deals into the
dagstore. This is a lightweight process, and it consists simply
of registering the shards in the dagstore.
Shards are backed by the unsealed copy of the piece. This is currently
a CARv1. However, the dagstore keeps CARv2 indices for all pieces, so
when it's time to acquire a shard to serve a retrieval, the unsealed
CARv1 is joined with its index (safeguarded by the dagstore), to form
a read-only blockstore, thus taking the place of the monolithic
badger.
Data transfers have been adjusted to interface directly with CARv2 files.
On inbound transfers (client retrievals, miner storage deals), we stream
the received data into a CARv2 ReadWrite blockstore. On outbound transfers
(client storage deals, miner retrievals), we serve the data off a CARv2
ReadOnly blockstore.
Client-side imports are managed by the refactored *imports.Manager
component (when not using IPFS integration). Just like it before, we use
the go-filestore library to avoid duplicating the data from the original
file in the resulting UnixFS DAG (concretely the leaves). However, the
target of those imports are what we call "ref-CARv2s": CARv2 files placed
under the `$LOTUS_PATH/imports` directory, containing the intermediate
nodes in full, and the leaves as positional references to the original file
on disk.
Client-side retrievals are placed into CARv2 files in the location:
`$LOTUS_PATH/retrievals`.
A new set of `Dagstore*` JSON-RPC operations and `lotus-miner dagstore`
subcommands have been introduced on the miner-side to inspect and manage
the dagstore.
Despite moving to a CARv2-backed system, the IPFS integration has been
respected, and it continues to be possible to make storage deals with data
held in an IPFS node, and to perform retrievals directly into an IPFS node.
NOTE: because the "staging" and "client" Badger blockstores are no longer
used, existing imports on the client will be rendered useless. On startup,
Lotus will enumerate all imports and print WARN statements on the log for
each import that needs to be reimported. These log lines contain these
messages:
- import lacks carv2 path; import will not work; please reimport
- import has missing/broken carv2; please reimport
At the end, we will print a "sanity check completed" message indicating
the count of imports found, and how many were deemed broken.
Co-authored-by: Aarsh Shah <aarshkshah1992@gmail.com>
Co-authored-by: Dirk McCormick <dirkmdev@gmail.com>
Co-authored-by: Raúl Kripalani <raul@protocol.ai>
Co-authored-by: Dirk McCormick <dirkmdev@gmail.com>
2021-08-16 22:34:32 +00:00
|
|
|
Root *cid.Cid
|
|
|
|
|
|
|
|
// Source is the provenance of the import, e.g. "import", "unknown", else.
|
|
|
|
// Currently useless but may be used in the future.
|
|
|
|
Source string
|
|
|
|
|
|
|
|
// FilePath is the path of the original file. It is important that the file
|
|
|
|
// is retained at this path, because it will be referenced during
|
|
|
|
// the transfer (when we do the UnixFS chunking, we don't duplicate the
|
|
|
|
// leaves, but rather point to chunks of the original data through
|
|
|
|
// positional references).
|
2019-08-09 21:41:50 +00:00
|
|
|
FilePath string
|
integrate DAG store and CARv2 in deal-making (#6671)
This commit removes badger from the deal-making processes, and
moves to a new architecture with the dagstore as the cental
component on the miner-side, and CARv2s on the client-side.
Every deal that has been handed off to the sealing subsystem becomes
a shard in the dagstore. Shards are mounted via the LotusMount, which
teaches the dagstore how to load the related piece when serving
retrievals.
When the miner starts the Lotus for the first time with this patch,
we will perform a one-time migration of all active deals into the
dagstore. This is a lightweight process, and it consists simply
of registering the shards in the dagstore.
Shards are backed by the unsealed copy of the piece. This is currently
a CARv1. However, the dagstore keeps CARv2 indices for all pieces, so
when it's time to acquire a shard to serve a retrieval, the unsealed
CARv1 is joined with its index (safeguarded by the dagstore), to form
a read-only blockstore, thus taking the place of the monolithic
badger.
Data transfers have been adjusted to interface directly with CARv2 files.
On inbound transfers (client retrievals, miner storage deals), we stream
the received data into a CARv2 ReadWrite blockstore. On outbound transfers
(client storage deals, miner retrievals), we serve the data off a CARv2
ReadOnly blockstore.
Client-side imports are managed by the refactored *imports.Manager
component (when not using IPFS integration). Just like it before, we use
the go-filestore library to avoid duplicating the data from the original
file in the resulting UnixFS DAG (concretely the leaves). However, the
target of those imports are what we call "ref-CARv2s": CARv2 files placed
under the `$LOTUS_PATH/imports` directory, containing the intermediate
nodes in full, and the leaves as positional references to the original file
on disk.
Client-side retrievals are placed into CARv2 files in the location:
`$LOTUS_PATH/retrievals`.
A new set of `Dagstore*` JSON-RPC operations and `lotus-miner dagstore`
subcommands have been introduced on the miner-side to inspect and manage
the dagstore.
Despite moving to a CARv2-backed system, the IPFS integration has been
respected, and it continues to be possible to make storage deals with data
held in an IPFS node, and to perform retrievals directly into an IPFS node.
NOTE: because the "staging" and "client" Badger blockstores are no longer
used, existing imports on the client will be rendered useless. On startup,
Lotus will enumerate all imports and print WARN statements on the log for
each import that needs to be reimported. These log lines contain these
messages:
- import lacks carv2 path; import will not work; please reimport
- import has missing/broken carv2; please reimport
At the end, we will print a "sanity check completed" message indicating
the count of imports found, and how many were deemed broken.
Co-authored-by: Aarsh Shah <aarshkshah1992@gmail.com>
Co-authored-by: Dirk McCormick <dirkmdev@gmail.com>
Co-authored-by: Raúl Kripalani <raul@protocol.ai>
Co-authored-by: Dirk McCormick <dirkmdev@gmail.com>
2021-08-16 22:34:32 +00:00
|
|
|
|
|
|
|
// CARPath is the path of the CAR file containing the DAG for this import.
|
|
|
|
CARPath string
|
2019-08-09 21:41:50 +00:00
|
|
|
}
|
|
|
|
|
2019-09-10 14:13:24 +00:00
|
|
|
type DealInfo struct {
|
|
|
|
ProposalCid cid.Cid
|
2020-01-24 21:44:28 +00:00
|
|
|
State storagemarket.StorageDealStatus
|
2020-03-31 18:53:30 +00:00
|
|
|
Message string // more information about deal state, particularly errors
|
2021-03-10 12:25:52 +00:00
|
|
|
DealStages *storagemarket.DealStages
|
2019-10-22 10:09:36 +00:00
|
|
|
Provider address.Address
|
2019-09-10 14:48:54 +00:00
|
|
|
|
2020-07-21 23:43:57 +00:00
|
|
|
DataRef *storagemarket.DataRef
|
2020-03-31 18:53:30 +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
|
2020-03-25 19:30:59 +00:00
|
|
|
|
|
|
|
DealID abi.DealID
|
2020-08-15 00:00:31 +00:00
|
|
|
|
|
|
|
CreationTime time.Time
|
2020-10-02 22:41:08 +00:00
|
|
|
Verified bool
|
2020-12-08 14:18:47 +00:00
|
|
|
|
|
|
|
TransferChannelID *datatransfer.ChannelID
|
|
|
|
DataTransfer *DataTransferChannel
|
2019-09-10 14:13:24 +00:00
|
|
|
}
|
|
|
|
|
2020-03-18 23:06:53 +00:00
|
|
|
type MsgLookup struct {
|
2020-08-10 12:55:27 +00:00
|
|
|
Message cid.Cid // Can be different than requested, in case it was replaced, but only gas values changed
|
2020-07-03 16:57:58 +00:00
|
|
|
Receipt types.MessageReceipt
|
|
|
|
ReturnDec interface{}
|
2020-07-12 03:54:25 +00:00
|
|
|
TipSet types.TipSetKey
|
|
|
|
Height abi.ChainEpoch
|
2019-08-09 21:41:50 +00:00
|
|
|
}
|
|
|
|
|
2020-09-13 05:26:44 +00:00
|
|
|
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
|
|
|
|
}
|
|
|
|
|
2020-10-20 06:28:43 +00:00
|
|
|
// BlsMessages[x].cid = Cids[x]
|
|
|
|
// SecpkMessages[y].cid = Cids[BlsMessages.length + y]
|
2019-08-09 21:41:50 +00:00
|
|
|
type BlockMessages struct {
|
|
|
|
BlsMessages []*types.Message
|
|
|
|
SecpkMessages []*types.SignedMessage
|
2019-09-23 11:15:16 +00:00
|
|
|
|
|
|
|
Cids []cid.Cid
|
2019-08-09 21:41:50 +00:00
|
|
|
}
|
|
|
|
|
2019-10-06 00:37:28 +00:00
|
|
|
type Message struct {
|
|
|
|
Cid cid.Cid
|
|
|
|
Message *types.Message
|
|
|
|
}
|
|
|
|
|
2019-08-09 21:41:50 +00:00
|
|
|
type ActorState struct {
|
|
|
|
Balance types.BigInt
|
2021-02-09 22:18:19 +00:00
|
|
|
Code cid.Cid
|
2019-08-09 21:41:50 +00:00
|
|
|
State interface{}
|
|
|
|
}
|
|
|
|
|
2019-09-06 22:39:47 +00:00
|
|
|
type PCHDir int
|
|
|
|
|
|
|
|
const (
|
|
|
|
PCHUndef PCHDir = iota
|
|
|
|
PCHInbound
|
|
|
|
PCHOutbound
|
|
|
|
)
|
|
|
|
|
2022-01-06 15:04:39 +00:00
|
|
|
type PaychGetOpts struct {
|
|
|
|
OffChain bool
|
|
|
|
}
|
|
|
|
|
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
|
|
|
|
2019-09-13 14:11:40 +00:00
|
|
|
type ChannelInfo struct {
|
2020-08-11 14:45:45 +00:00
|
|
|
Channel address.Address
|
2020-08-12 20:29:44 +00:00
|
|
|
WaitSentinel cid.Cid
|
2019-09-13 14:11:40 +00:00
|
|
|
}
|
|
|
|
|
2020-09-01 14:33:44 +00:00
|
|
|
type ChannelAvailableFunds struct {
|
2020-09-04 11:44:09 +00:00
|
|
|
// Channel is the address of the channel
|
2020-09-01 14:33:44 +00:00
|
|
|
Channel *address.Address
|
2020-09-04 11:44:09 +00:00
|
|
|
// From is the from address of the channel (channel creator)
|
|
|
|
From address.Address
|
|
|
|
// To is the to address of the channel
|
|
|
|
To address.Address
|
2022-02-16 19:39:43 +00:00
|
|
|
|
|
|
|
// ConfirmedAmt is the total amount of funds that have been confirmed on-chain for the channel
|
2020-09-01 14:33:44 +00:00
|
|
|
ConfirmedAmt types.BigInt
|
|
|
|
// PendingAmt is the amount of funds that are pending confirmation on-chain
|
|
|
|
PendingAmt types.BigInt
|
2022-02-16 19:39:43 +00:00
|
|
|
|
|
|
|
// NonReservedAmt is part of ConfirmedAmt that is available for use (e.g. when the payment channel was pre-funded)
|
|
|
|
NonReservedAmt types.BigInt
|
2022-02-14 20:16:41 +00:00
|
|
|
// PendingAvailableAmt is the amount of funds that are pending confirmation on-chain that will become available once confirmed
|
2022-01-04 22:20:11 +00:00
|
|
|
PendingAvailableAmt types.BigInt
|
2022-02-16 19:39:43 +00:00
|
|
|
|
2020-09-01 14:33:44 +00:00
|
|
|
// 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
|
2022-02-16 19:39:43 +00:00
|
|
|
|
2020-09-01 14:33:44 +00:00
|
|
|
// VoucherRedeemedAmt is the amount that is redeemed by vouchers on-chain
|
|
|
|
// and in the local datastore
|
|
|
|
VoucherReedeemedAmt types.BigInt
|
|
|
|
}
|
|
|
|
|
2019-09-10 13:43:01 +00:00
|
|
|
type PaymentInfo struct {
|
2020-08-11 14:45:45 +00:00
|
|
|
Channel address.Address
|
2020-08-12 20:29:44 +00:00
|
|
|
WaitSentinel cid.Cid
|
2020-08-11 14:45:45 +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-09-10 13:43:01 +00:00
|
|
|
}
|
|
|
|
|
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 {
|
2020-09-16 05:47:24 +00:00
|
|
|
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
|
|
|
|
2020-01-25 00:32:17 +00:00
|
|
|
Size uint64
|
|
|
|
MinPrice types.BigInt
|
2020-07-23 21:01:34 +00:00
|
|
|
UnsealPrice types.BigInt
|
2021-12-17 14:50:51 +00:00
|
|
|
PricePerByte abi.TokenAmount
|
2020-01-25 00:32:17 +00:00
|
|
|
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{
|
2020-01-25 00:32:17 +00:00
|
|
|
Root: o.Root,
|
2020-07-09 16:29:57 +00:00
|
|
|
Piece: o.Piece,
|
2020-01-25 00:32:17 +00:00
|
|
|
Size: o.Size,
|
|
|
|
Total: o.MinPrice,
|
2020-07-23 21:01:34 +00:00
|
|
|
UnsealPrice: o.UnsealPrice,
|
2020-01-25 00:32:17 +00:00
|
|
|
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,
|
2021-03-30 19:28:54 +00:00
|
|
|
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
|
|
|
|
}
|
|
|
|
|
2020-02-09 06:06:32 +00:00
|
|
|
type MarketDeal struct {
|
|
|
|
Proposal market.DealProposal
|
|
|
|
State market.DealState
|
|
|
|
}
|
|
|
|
|
2019-08-27 18:45:21 +00:00
|
|
|
type RetrievalOrder struct {
|
2021-11-11 15:17:54 +00:00
|
|
|
Root cid.Cid
|
2021-11-11 15:17:39 +00:00
|
|
|
Piece *cid.Cid
|
|
|
|
DataSelector *Selector
|
2021-03-30 19:28:54 +00:00
|
|
|
|
2021-11-22 13:18:50 +00:00
|
|
|
// todo: Size/Total are only used for calculating price per byte; we should let users just pass that
|
|
|
|
Size uint64
|
|
|
|
Total types.BigInt
|
|
|
|
|
2020-07-23 21:01:34 +00:00
|
|
|
UnsealPrice types.BigInt
|
2020-01-25 00:32:17 +00:00
|
|
|
PaymentInterval uint64
|
|
|
|
PaymentIntervalIncrease uint64
|
|
|
|
Client address.Address
|
|
|
|
Miner address.Address
|
2021-03-30 19:28:54 +00:00
|
|
|
MinerPeer *retrievalmarket.RetrievalPeer
|
2019-08-27 18:45:21 +00:00
|
|
|
}
|
2019-09-19 20:25:18 +00:00
|
|
|
|
2020-03-03 23:32:17 +00:00
|
|
|
type InvocResult struct {
|
2020-10-14 03:45:47 +00:00
|
|
|
MsgCid cid.Cid
|
2020-06-11 00:47:28 +00:00
|
|
|
Msg *types.Message
|
|
|
|
MsgRct *types.MessageReceipt
|
2020-10-15 22:48:51 +00:00
|
|
|
GasCost MsgGasCost
|
2020-06-11 00:47:28 +00:00
|
|
|
ExecutionTrace types.ExecutionTrace
|
|
|
|
Error string
|
|
|
|
Duration time.Duration
|
2019-09-19 20:25:18 +00:00
|
|
|
}
|
2019-09-30 21:06:47 +00:00
|
|
|
|
2020-01-15 21:24:01 +00:00
|
|
|
type MethodCall struct {
|
|
|
|
types.MessageReceipt
|
|
|
|
Error string
|
|
|
|
}
|
|
|
|
|
2020-03-03 00:36:01 +00:00
|
|
|
type StartDealParams struct {
|
2020-08-14 00:08:46 +00:00
|
|
|
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-03 00:36:01 +00:00
|
|
|
}
|
|
|
|
|
2020-11-24 23:06:47 +00:00
|
|
|
func (s *StartDealParams) UnmarshalJSON(raw []byte) (err error) {
|
|
|
|
type sdpAlias StartDealParams
|
|
|
|
|
|
|
|
sdp := sdpAlias{
|
|
|
|
FastRetrieval: true,
|
|
|
|
}
|
|
|
|
|
|
|
|
if err := json.Unmarshal(raw, &sdp); err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
|
|
|
*s = StartDealParams(sdp)
|
|
|
|
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
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 {
|
2020-10-28 19:22:07 +00:00
|
|
|
WorkerID uint64
|
|
|
|
Base *types.TipSet
|
|
|
|
Target *types.TipSet
|
2019-09-30 21:06:47 +00:00
|
|
|
|
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 21:06:47 +00:00
|
|
|
}
|
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
|
2020-09-08 18:42:20 +00:00
|
|
|
StageFetchingMessages
|
2019-09-30 22:29:40 +00:00
|
|
|
)
|
2019-11-17 07:44:06 +00:00
|
|
|
|
2020-09-08 18:42:20 +00:00
|
|
|
func (v SyncStateStage) String() string {
|
|
|
|
switch v {
|
2021-03-02 04:56:51 +00:00
|
|
|
case StageIdle:
|
|
|
|
return "idle"
|
2020-09-08 18:42:20 +00:00
|
|
|
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-04-02 01:10:28 +00:00
|
|
|
|
2020-07-30 12:31:31 +00:00
|
|
|
type DealCollateralBounds struct {
|
|
|
|
Min abi.TokenAmount
|
|
|
|
Max abi.TokenAmount
|
|
|
|
}
|
|
|
|
|
2020-08-14 20:44:33 +00:00
|
|
|
type CirculatingSupply struct {
|
2021-04-16 22:15:38 +00:00
|
|
|
FilVested abi.TokenAmount
|
|
|
|
FilMined abi.TokenAmount
|
|
|
|
FilBurnt abi.TokenAmount
|
|
|
|
FilLocked abi.TokenAmount
|
|
|
|
FilCirculating abi.TokenAmount
|
|
|
|
FilReserveDisbursed abi.TokenAmount
|
2020-08-14 20:44:33 +00:00
|
|
|
}
|
|
|
|
|
2020-04-02 01:10:28 +00:00
|
|
|
type MiningBaseInfo struct {
|
2020-10-06 07:49:11 +00:00
|
|
|
MinerPower types.BigInt
|
|
|
|
NetworkPower types.BigInt
|
2021-12-08 17:11:19 +00:00
|
|
|
Sectors []builtin.ExtendedSectorInfo
|
2020-10-06 07:49:11 +00:00
|
|
|
WorkerKey address.Address
|
|
|
|
SectorSize abi.SectorSize
|
|
|
|
PrevBeaconEntry types.BeaconEntry
|
|
|
|
BeaconEntries []types.BeaconEntry
|
|
|
|
EligibleForMining bool
|
2020-04-02 01:10:28 +00:00
|
|
|
}
|
2020-04-09 00:24:10 +00:00
|
|
|
|
|
|
|
type BlockTemplate struct {
|
2020-04-17 05:39:55 +00:00
|
|
|
Miner address.Address
|
|
|
|
Parents types.TipSetKey
|
|
|
|
Ticket *types.Ticket
|
|
|
|
Eproof *types.ElectionProof
|
|
|
|
BeaconValues []types.BeaconEntry
|
|
|
|
Messages []*types.SignedMessage
|
|
|
|
Epoch abi.ChainEpoch
|
|
|
|
Timestamp uint64
|
2020-09-23 04:48:35 +00:00
|
|
|
WinningPoStProof []builtin.PoStProof
|
2020-04-02 01:10:28 +00:00
|
|
|
}
|
2020-04-03 22:17:57 +00:00
|
|
|
|
2020-07-31 16:22:04 +00:00
|
|
|
type DataSize struct {
|
|
|
|
PayloadSize int64
|
|
|
|
PieceSize abi.PaddedPieceSize
|
|
|
|
}
|
|
|
|
|
2020-10-22 11:59:08 +00:00
|
|
|
type DataCIDSize struct {
|
|
|
|
PayloadSize int64
|
|
|
|
PieceSize abi.PaddedPieceSize
|
|
|
|
PieceCID cid.Cid
|
|
|
|
}
|
|
|
|
|
2020-04-03 22:17:57 +00:00
|
|
|
type CommPRet struct {
|
|
|
|
Root cid.Cid
|
|
|
|
Size abi.UnpaddedPieceSize
|
|
|
|
}
|
2020-04-23 22:15:00 +00:00
|
|
|
type HeadChange struct {
|
|
|
|
Type string
|
|
|
|
Val *types.TipSet
|
|
|
|
}
|
2020-05-04 19:29:26 +00:00
|
|
|
|
|
|
|
type MsigProposeResponse int
|
|
|
|
|
|
|
|
const (
|
|
|
|
MsigApprove MsigProposeResponse = iota
|
|
|
|
MsigCancel
|
|
|
|
)
|
2020-05-21 20:28:59 +00:00
|
|
|
|
2020-09-17 15:30:15 +00:00
|
|
|
type Deadline struct {
|
2021-01-18 08:46:22 +00:00
|
|
|
PostSubmissions bitfield.BitField
|
|
|
|
DisputableProofCount uint64
|
2020-09-17 15:30:15 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
type Partition struct {
|
|
|
|
AllSectors bitfield.BitField
|
|
|
|
FaultySectors bitfield.BitField
|
|
|
|
RecoveringSectors bitfield.BitField
|
|
|
|
LiveSectors bitfield.BitField
|
|
|
|
ActiveSectors bitfield.BitField
|
|
|
|
}
|
|
|
|
|
2020-05-21 20:28:59 +00:00
|
|
|
type Fault struct {
|
|
|
|
Miner address.Address
|
|
|
|
Epoch abi.ChainEpoch
|
|
|
|
}
|
2020-10-08 19:19:39 +00:00
|
|
|
|
|
|
|
var EmptyVesting = MsigVesting{
|
|
|
|
InitialBalance: types.EmptyInt,
|
|
|
|
StartEpoch: -1,
|
|
|
|
UnlockDuration: -1,
|
|
|
|
}
|
|
|
|
|
|
|
|
type MsigVesting struct {
|
|
|
|
InitialBalance abi.TokenAmount
|
|
|
|
StartEpoch abi.ChainEpoch
|
|
|
|
UnlockDuration abi.ChainEpoch
|
|
|
|
}
|
2020-10-15 15:54:36 +00:00
|
|
|
|
|
|
|
type MessageMatch struct {
|
|
|
|
To address.Address
|
|
|
|
From address.Address
|
|
|
|
}
|
2021-02-04 04:46:10 +00:00
|
|
|
|
|
|
|
type MsigTransaction struct {
|
|
|
|
ID int64
|
|
|
|
To address.Address
|
|
|
|
Value abi.TokenAmount
|
|
|
|
Method abi.MethodNum
|
|
|
|
Params []byte
|
|
|
|
|
|
|
|
Approved []address.Address
|
|
|
|
}
|