1、TipSet
type TipSet struct {
// 区块cid集合
cids []cid.Cid
// 区块集合
blks []*BlockHeader
// 当前高度
height abi.ChainEpoch
}
1.1 BlockHeader
type BlockHeader struct {
// 每个区块所属的矿工(同一个tipset中的每个区块都不相同)
Miner address.Address // 0 unique per block/miner
// 每个区块的奖票(一个已经验证的VRF(可验证的随机函数))(同一个tipset中的每个区块都不相同)
Ticket *Ticket // 1 unique per block/miner: should be a valid VRF
// 选举证明(赢得区块的证明)(同一个tipset中的每个区块都不相同)
ElectionProof *ElectionProof // 2 unique per block/miner: should be a valid VRF
// drand信标实例(同一个tipset中的所有块都是相同的)
BeaconEntries []BeaconEntry // 3 identical for all blocks in same tipset
// WinningPoSt证明(同一个tipset中的每个区块都不相同)
WinPoStProof []proof2.PoStProof // 4 unique per block/miner
// 父区块的cid集合(同一个tipset中的所有块都是相同的)
Parents []cid.Cid // 5 identical for all blocks in same tipset
// 父区块的重量(同一个tipset中的所有块都是相同的)
ParentWeight BigInt // 6 identical for all blocks in same tipset
// 这个区块的高度(同一个tipset中的所有块都是相同的)
Height abi.ChainEpoch // 7 identical for all blocks in same tipset
// 父StateRoot的cid(同一个tipset中的所有块都是相同的)
ParentStateRoot cid.Cid // 8 identical for all blocks in same tipset
// 父MessageReceipts的cid(同一个tipset中的所有块都是相同的)
ParentMessageReceipts cid.Cid // 9 identical for all blocks in same tipset
// 消息的cid(同一个tipset中的每个区块都不相同)
Messages cid.Cid // 10 unique per block
// 来自上面Messages的BLS消息的聚合
BLSAggregate *crypto.Signature // 11 unique per block: aggrregate of BLS messages from above
// 时间戳(同一个tipset中的所有块都是相同的/与高度值紧密相连)
Timestamp uint64 // 12 identical for all blocks in same tipset / hard-tied to the value of Height above
// 区块签名
BlockSig *crypto.Signature // 13 unique per block/miner: miner signature
// fork信号(目前未使用/未定义)
ForkSignaling uint64 // 14 currently unused/undefined
// 执行父tipset的基本费用(同一个tipset中的所有块都是相同的)
ParentBaseFee abi.TokenAmount // 15 identical for all blocks in same tipset: the base fee after executing parent tipset
// 是否验证,如果签名已经被验证,则为true
validated bool // internal, true if the signature has been validated
}
嵌套结构体
2、订单相关
2.1 DealInfo
type DealInfo struct {
// 交易提案cid
ProposalCid cid.Cid
// 存储订单的状态
State storagemarket.StorageDealStatus
// 更多关于交易状态的信息,特别是错误
Message string // more information about deal state, particularly errors
// 订单交易阶段信息
DealStages *storagemarket.DealStages
// 托管者地址
Provider address.Address
// 数据传输参考
DataRef *storagemarket.DataRef
// piece cid
PieceCID cid.Cid
// piece大小
Size uint64
// 每个epoch(高度)的价格
PricePerEpoch types.BigInt
Duration uint64
DealID abi.DealID
// 创建时间
CreationTime time.Time
// 是否验证
Verified bool
// 数据传输的ChannelID
TransferChannelID *datatransfer.ChannelID
// 数据传输的Channel
DataTransfer *DataTransferChannel
}
2.2 DealStateChange
// DealStateChange表示交易状态从from->变为to
type DealStateChange struct {
ID abi.DealID
From *DealState
To *DealState
}
3、矿工相关
3.1 MinerInfo
type MinerInfo struct {
Owner address.Address // Must be an ID-address.
Worker address.Address // Must be an ID-address.
NewWorker address.Address // Must be an ID-address.
ControlAddresses []address.Address // Must be an ID-addresses.
// Worker地址改变的高度
WorkerChangeEpoch abi.ChainEpoch
PeerId *peer.ID
// 多签地址
Multiaddrs []abi.Multiaddrs
// WindowPoSt证明类型(扇区大小)
WindowPoStProofType abi.RegisteredPoStProof
// 扇区大小
SectorSize abi.SectorSize
// WindowPoSt证明时每个Partition中Sector的个数
WindowPoStPartitionSectors uint64
// 上一次共识错误的高度
ConsensusFaultElapsed abi.ChainEpoch
}
3.2 MinerPower
type MinerPower struct {
// 矿工算力
MinerPower power.Claim
// 全网总算力
TotalPower power.Claim
// 是否达到最小算力值
HasMinPower bool
}
3.3 MinerSectors
type MinerSectors struct {
// Live sectors that should be proven.
// 应该被证明的有效扇区
Live uint64
// Sectors actively contributing to power.
// 有效地贡献算力的扇区
Active uint64
// Sectors with failed proofs.
// 证明失败的扇区
Faulty uint64
}
3.4 LockedFunds
type LockedFunds struct {
// 锁仓线性释放的金额
VestingFunds abi.TokenAmount
// 扇区最初的抵押需要的金额
InitialPledgeRequirement abi.TokenAmount
// PreCommit上链保证金
PreCommitDeposits abi.TokenAmount
}
3.5 DealProposalChanges
// 订单提案改变
type DealProposalChanges struct {
Added []ProposalIDState
Removed []ProposalIDState
}
// 订单提案的ID和状态信息
type ProposalIDState struct {
ID abi.DealID
// 订单提案信息
Proposal DealProposal
}
3.6 PublishStorageDealsParams
type PublishStorageDealsParams struct {
Deals []ClientDealProposal
}
// ClientDealProposal是一个客户端签名的DealProposal
type ClientDealProposal struct {
// 订单提案信息
Proposal DealProposal
// 客户端签名
ClientSignature acrypto.Signature
}
4、合约相关
4.1 Actor
type Actor struct {
// 标识actor的类型
Code cid.Cid
Head cid.Cid
// 用于标识顺序
Nonce uint64
// actor余额
Balance BigInt
}
5、计算状态
5.1 ComputeStateOutput
type ComputeStateOutput struct {
// 状态树的Root cid
Root cid.Cid
// 调用结果
Trace []*InvocResult
}
type InvocResult struct {
// 消息cid
MsgCid cid.Cid
// 消息
Msg *types.Message
// 消息收据(执行结果)
MsgRct *types.MessageReceipt
// 消息gas费用
GasCost MsgGasCost
// 执行追踪
ExecutionTrace types.ExecutionTrace
Error string
Duration time.Duration
}
6、扇区相关
6.1 SectorPreCommitOnChainInfo
// 扇区预提交上链信息
type SectorPreCommitOnChainInfo struct {
// 扇区PreCommit信息
Info SectorPreCommitInfo
// PreCommit保证金
PreCommitDeposit abi.TokenAmount
// PreCommit高度
PreCommitEpoch abi.ChainEpoch
// 订单权重
DealWeight abi.DealWeight
// 验证后的订单权重
VerifiedDealWeight abi.DealWeight
}
6.2 PreCommitChanges
type PreCommitChanges struct {
Added []SectorPreCommitOnChainInfo
Removed []SectorPreCommitOnChainInfo
}
6.3 SectorChanges
type SectorChanges struct {
Added []SectorOnChainInfo
Extended []SectorExtensions
Removed []SectorOnChainInfo
}
// 扇区扩展
type SectorExtensions struct {
From SectorOnChainInfo
To SectorOnChainInfo
}
6.4 SectorLocation
// 扇区位置
type SectorLocation struct {
Deadline uint64
Partition uint64
}
其他结构体
Ticket
type Ticket struct {
// 一个已经验证的VRF结果(可验证的随机函数)
VRFProof []byte
}
ElectionProof
type ElectionProof struct {
// 中奖个数
WinCount int64
// 一个已经验证的VRF结果(可验证的随机函数)
VRFProof []byte
}
BeaconEntry
type BeaconEntry struct {
// 给定的随机数的drand Round
Round uint64
// 给定随机数的Drand签名,命名为Data,作为随机信标输出的更常规的名称
Data []byte
}
Signature
type Signature struct {
// 签名类型
Type SigType
// 签名内容
Data []byte
}
PoStProof
type PoStProof struct {
// PoStProof类型(扇区大小)
PoStProof abi.RegisteredPoStProof
// 证明内容
ProofBytes []byte
}
DealStages
// DealStages获取订单交易进展的时间表,按阶段分组。
type DealStages struct {
// stage包含交易经过的每个阶段的记录。
// 每个订单阶段都包含日志。
Stages []*DealStage
}
// DealStage捕获订单交易阶段的执行数据。
type DealStage struct {
// 订单阶段名称
Name string
// 订单阶段描述
Description string
// 预计持续时间
ExpectedDuration string
// 创建时间
CreatedTime cbg.CborTime
// 更新时间
UpdatedTime cbg.CborTime
// Logs包含此阶段内发生的事件的详细时间线。
Logs []*Log
}
DealState
type DealState struct {
// 扇区开始的高度
SectorStartEpoch abi.ChainEpoch // -1 if not yet included in proven sector
// 上次更新状态的高度
LastUpdatedEpoch abi.ChainEpoch // -1 if deal state never updated
// 上次消减的高度
SlashEpoch abi.ChainEpoch // -1 if deal never slashed
}
DealProposal
// 订单提案
type DealProposal struct {
// piece cid
PieceCID cid.Cid
// piece大小
PieceSize abi.PaddedPieceSize
// 订单是否验证
VerifiedDeal bool
// 客户端
Client address.Address
// 存储提供者
Provider address.Address
// 标签
Label string
// 订单开始的高度
StartEpoch abi.ChainEpoch
// 底单结束的高度
EndEpoch abi.ChainEpoch
// 每个高度存储的价格
StoragePricePerEpoch abi.TokenAmount
// 存储提供者缴纳的担保金
ProviderCollateral abi.TokenAmount
// 客户端缴纳的担保金
ClientCollateral abi.TokenAmount
}
DataRef
// DataRef是一个关于数据如何被传输给一个给定的存储交易的参考
type DataRef struct {
// 传输类型
TransferType string
Root cid.Cid
PieceCid *cid.Cid // Optional for non-manual transfer, will be recomputed from the data if not given
PieceSize abi.UnpaddedPieceSize // Optional for non-manual transfer, will be recomputed from the data if not given
RawBlockSize uint64 // Optional: used as the denominator when calculating transfer %
}
ChannelID
// ChannelID是一个通道的唯一标识符,通过对方的peer ID + transfer ID来区分
type ChannelID struct {
// 发起者peer id
Initiator peer.ID
// 响应者peer id
Responder peer.ID
ID TransferID
}
DataTransferChannel
// 数据传输的通道信息
type DataTransferChannel struct {
// TransferID
TransferID datatransfer.TransferID
// 传输状态
Status datatransfer.Status
BaseCID cid.Cid
// 是否是发起者
IsInitiator bool
// 是否是发送者
IsSender bool
// 保证人
Voucher string
Message string
OtherPeer peer.ID
Transferred uint64
Stages *datatransfer.ChannelStages
}
// ChannelStages捕获数据传输通道进程的时间轴,按阶段分组
type ChannelStages struct {
// stages包含通道通过的每个stage的记录。每个阶段都包含日志。
Stages []*ChannelStage
}
// ChannelStage跟踪数据传输通道阶段的执行。
type ChannelStage struct {
// Channel阶段名称
Name string
// Channel阶段描述
Description string
// 创建时间
CreatedTime cbg.CborTime
// 更新时间
UpdatedTime cbg.CborTime
// Logs包含此阶段内发生的事件的详细时间线。
Logs []*Log
}
Claim
type Claim struct {
// Sum of raw byte power for a miner's sectors.
// 一个矿工的扇区的原始字节功率的总和
RawBytePower abi.StoragePower
// Sum of quality adjusted power for a miner's sectors.
// 矿工的扇区的质量调整功率总和。
QualityAdjPower abi.StoragePower
}
Message
type Message struct {
Version uint64
To address.Address
From address.Address
Nonce uint64
Value abi.TokenAmount
GasLimit int64
GasFeeCap abi.TokenAmount
GasPremium abi.TokenAmount
Method abi.MethodNum
Params []byte
}
BlockMessages
type BlockMessages struct {
BlsMessages []*types.Message
// 签名消息
SecpkMessages []*types.SignedMessage
Cids []cid.Cid
}
type SignedMessage struct {
Message Message
Signature crypto.Signature
}
MessageReceipt
// 消息收据(执行结果)
type MessageReceipt struct {
// code结果码
ExitCode exitcode.ExitCode
// 返回内容
Return []byte
// gas使用
GasUsed int64
}
MsgGasCost
// 消息gas花费
type MsgGasCost struct {
// 消息cid(消息不同于要求,如果它被替换,只有gas值被改变)
Message cid.Cid
// gas使用
GasUsed abi.TokenAmount
// 基础燃烧费用
BaseFeeBurn abi.TokenAmount
// 估计燃烧费用
OverEstimationBurn abi.TokenAmount
// 矿工惩罚
MinerPenalty abi.TokenAmount
// 矿工打包消费
MinerTip abi.TokenAmount
// 退款金额
Refund abi.TokenAmount
// 总花费
TotalCost abi.TokenAmount
}
ExecutionTrace
type ExecutionTrace struct {
Msg *Message
// 消息收据
MsgRct *MessageReceipt
Error string
// 时间
Duration time.Duration
// gas费用
GasCharges []*GasTrace
Subcalls []ExecutionTrace
}
SectorPreCommitInfo
// 矿工在扇区pre-committing时提供的信息。
type SectorPreCommitInfo struct {
// 注册密封证明的类型(扇区大小不同)
SealProof abi.RegisteredSealProof
// 扇区号
SectorNumber abi.SectorNumber
// 密封cid
SealedCID cid.Cid `checked:"true"` // CommR
SealRandEpoch abi.ChainEpoch
// 订单集合
DealIDs []abi.DealID
// 过期高度
Expiration abi.ChainEpoch
// 替换容量
ReplaceCapacity bool // Whether to replace a "committed capacity" no-deal sector (requires non-empty DealIDs)
// The committed capacity sector to replace, and it's deadline/partition location
// 替换扇区的Deadline
ReplaceSectorDeadline uint64
// 替换扇区的Partition
ReplaceSectorPartition uint64
// 替换扇区号
ReplaceSectorNumber abi.SectorNumber
}
SectorOnChainInfo
type SectorOnChainInfo struct {
SectorNumber abi.SectorNumber
SealProof abi.RegisteredSealProof
SealedCID cid.Cid
// 订单集合
DealIDs []abi.DealID
// 激活的高度
Activation abi.ChainEpoch
// 过期的高度
Expiration abi.ChainEpoch
// 订单权重
DealWeight abi.DealWeight
// 已验证的订单权重
VerifiedDealWeight abi.DealWeight
// 扇区最初的抵押需要的金额
InitialPledge abi.TokenAmount
// 预计每天奖励
ExpectedDayReward abi.TokenAmount
// 预期存储抵押金
ExpectedStoragePledge abi.TokenAmount
}