Filecoin lotus对象分析

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
}

   转载规则


《Filecoin lotus对象分析》 bill 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
windows如何映射共享文件夹、磁盘映射共享设置的方法 windows如何映射共享文件夹、磁盘映射共享设置的方法
在局域网中,我们经常需要访问共享文件服务器上的共享文件,访问共享文件通常需要在地址栏输入IP地址,然后输入服务器的登录账户和密码才可以。 但是这种操作比较繁琐,对于一些不太懂技术的人员操作起来也比较吃力。因此,我们可以映射网络驱动器、映射共
2020-04-26
下一篇 
mac下vim的长按问题 mac下vim的长按问题
问题mac 下的 VScode vim 插件,常按 hjkl 键无法持续移动光标 解决终端下执行命令: defaults write com.microsoft.VSCode ApplePressAndHoldEnabled -bool f
2020-04-26
  目录