diff --git a/node/block_data.go b/node/block_data.go index ac80775..c849ecc 100644 --- a/node/block_data.go +++ b/node/block_data.go @@ -30,29 +30,29 @@ type BlockMetadata struct { TestChainStatus struct { Status string `json:"status"` } `json:"test_chain_status"` - MaxOperationsTTL int `json:"max_operations_ttl"` - MaxOperationDataLength int `json:"max_operation_data_length"` - MaxBlockHeaderLength int `json:"max_block_header_length"` + MaxOperationsTTL uint64 `json:"max_operations_ttl"` + MaxOperationDataLength uint64 `json:"max_operation_data_length"` + MaxBlockHeaderLength uint64 `json:"max_block_header_length"` MaxOperationListLength []struct { - MaxSize int `json:"max_size"` - MaxOp int `json:"max_op,omitempty"` + MaxSize uint64 `json:"max_size"` + MaxOp uint64 `json:"max_op,omitempty"` } `json:"max_operation_list_length"` Baker string `json:"baker"` LevelInfo LevelInfo `json:"level_info"` VotingPeriodInfo struct { VotingPeriod struct { - Index int `json:"index"` + Index uint64 `json:"index"` Kind string `json:"kind"` - StartPosition int `json:"start_position"` + StartPosition uint64 `json:"start_position"` } `json:"voting_period"` - Position int `json:"position"` - Remaining int `json:"remaining"` + Position uint64 `json:"position"` + Remaining uint64 `json:"remaining"` } `json:"voting_period_info"` NonceHash string `json:"nonce_hash"` ConsumedGas string `json:"consumed_gas"` Deactivated []interface{} `json:"deactivated"` BalanceUpdates []BalanceUpdate `json:"balance_updates"` - LiquidityBakingEscapeEma int `json:"liquidity_baking_escape_ema"` + LiquidityBakingEscapeEma uint64 `json:"liquidity_baking_escape_ema"` ImplicitOperationsResults []ImplicitOperationsResult `json:"implicit_operations_results"` } diff --git a/node/chain_data.go b/node/chain_data.go index 2367516..f3756a3 100644 --- a/node/chain_data.go +++ b/node/chain_data.go @@ -134,5 +134,5 @@ func (c *Content) UnmarshalJSON(data []byte) error { // IsManager - func IsManager(kind string) bool { - return kind == KindDelegation || kind == KindOrigination || kind == KindReveal || kind == KindTransaction + return kind == KindDelegation || kind == KindOrigination || kind == KindReveal || kind == KindTransaction || kind == KindSetDepositsLimit } diff --git a/node/consts.go b/node/consts.go index ec882e2..aeea8fc 100644 --- a/node/consts.go +++ b/node/consts.go @@ -19,6 +19,9 @@ const ( KindNonceRevelation = "seed_nonce_revelation" KindTransaction = "transaction" KindRegisterGlobalConstant = "register_global_constant" + KindPreendorsement = "preendorsement" + KindSetDepositsLimit = "set_deposits_limit" + KindDoublePreendorsement = "double_preendorsement_evidence" ) const ( diff --git a/node/context_data.go b/node/context_data.go index 18d7b6e..93bc8d0 100644 --- a/node/context_data.go +++ b/node/context_data.go @@ -38,6 +38,7 @@ type Constants struct { MinProposalQuorum int64 `json:"min_proposal_quorum"` InitialEndorsers int64 `json:"initial_endorsers"` DelayPerMissingEndorsement int64 `json:"delay_per_missing_endorsement,string"` + MinimalBlockDelay int64 `json:"minimal_block_delay,string,omitempty"` } // Int64StringSlice - diff --git a/node/general.go b/node/general.go index ac1c5aa..a5cab3f 100644 --- a/node/general.go +++ b/node/general.go @@ -7,6 +7,8 @@ type GeneralAPI interface { Version(ctx context.Context) (Version, error) StatsGC(ctx context.Context) (StatsGC, error) StatsMemory(ctx context.Context) (StatsMemory, error) + + URL() string } // General - @@ -23,6 +25,11 @@ func NewGeneral(baseURL string) *General { } } +// URL - +func (api *General) URL() string { + return api.baseURL +} + // Version - func (api *General) Version(ctx context.Context) (Version, error) { req, err := newGetRequest(api.baseURL, "version", nil) diff --git a/node/operations.go b/node/operations.go index 62c3409..429ee90 100644 --- a/node/operations.go +++ b/node/operations.go @@ -109,6 +109,24 @@ func (op *Operation) UnmarshalJSON(data []byte) error { return err } op.Body = register + case KindDoublePreendorsement: + var doublePreendorsement DoublePreendorsementEvidence + if err := json.Unmarshal(data, &doublePreendorsement); err != nil { + return err + } + op.Body = doublePreendorsement + case KindSetDepositsLimit: + var setDepositsLimit SetDepositsLimit + if err := json.Unmarshal(data, &setDepositsLimit); err != nil { + return err + } + op.Body = setDepositsLimit + case KindPreendorsement: + var preendorsement Preendorsement + if err := json.Unmarshal(data, &preendorsement); err != nil { + return err + } + op.Body = preendorsement } return nil } @@ -158,6 +176,21 @@ func (op Operation) Endorsement() (Endorsement, error) { return endorsement, nil } +// Preendorsement - +func (op Operation) Preendorsement() (Preendorsement, error) { + if op.Kind != KindPreendorsement { + return Preendorsement{}, errors.Errorf("invalid kind of operation: %s", op.Kind) + } + if op.Body == nil { + return Preendorsement{}, errors.New("nil operation body") + } + preendorsement, ok := op.Body.(Preendorsement) + if !ok { + return Preendorsement{}, errors.Errorf("invalid body type: %T", op.Body) + } + return preendorsement, nil +} + // EndorsementWithSlot - func (op Operation) EndorsementWithSlot() (EndorsementWithSlot, error) { if op.Kind != KindEndorsementWithSlot { @@ -293,6 +326,21 @@ func (op Operation) SeedNonceRevelation() (SeedNonceRevelation, error) { return seed, nil } +// SetDepositsLimit - +func (op Operation) SetDepositsLimit() (SetDepositsLimit, error) { + if op.Kind != KindSetDepositsLimit { + return SetDepositsLimit{}, errors.Errorf("invalid kind of operation: %s", op.Kind) + } + if op.Body == nil { + return SetDepositsLimit{}, errors.New("nil operation body") + } + tx, ok := op.Body.(SetDepositsLimit) + if !ok { + return SetDepositsLimit{}, errors.Errorf("invalid body type: %T", op.Body) + } + return tx, nil +} + // Transaction - func (op Operation) Transaction() (Transaction, error) { if op.Kind != KindTransaction { @@ -336,6 +384,19 @@ type EndorsementWithSlot struct { Metadata *EndorsementMetadata `json:"metadata,omitempty"` } +// Preendorsement - +type Preendorsement struct { + Slot uint64 `json:"slot"` + Level uint64 `json:"level"` + Round int64 `json:"round"` + BlockPayloadHash string `json:"block_payload_hash"` + Metadata struct { + BalanceUpdates []interface{} `json:"balance_updates"` + Delegate string `json:"delegate"` + PreendorsementPower int `json:"preendorsement_power"` + } `json:"metadata"` +} + // Delegation - type Delegation struct { Source string `json:"source"` @@ -356,8 +417,15 @@ type DoubleBakingEvidence struct { // DoubleEndorsementEvidence - type DoubleEndorsementEvidence struct { - Op1 *InlinedEndorsement `json:"Op1"` - Op2 *InlinedEndorsement `json:"Op2"` + Op1 *InlinedEndorsement `json:"op1"` + Op2 *InlinedEndorsement `json:"op2"` + Metadata *OnlyBalanceUpdatesMetadata `json:"metadata,omitempty"` +} + +// DoublePreendorsementEvidence - +type DoublePreendorsementEvidence struct { + Op1 *InlinedEndorsement `json:"op1"` + Op2 *InlinedEndorsement `json:"op2"` Metadata *OnlyBalanceUpdatesMetadata `json:"metadata,omitempty"` } @@ -410,6 +478,18 @@ type SeedNonceRevelation struct { Metadata *OnlyBalanceUpdatesMetadata `json:"metadata,omitempty"` } +// SetDepositsLimit - +type SetDepositsLimit struct { + Kind string `json:"kind"` + Source string `json:"source"` + Fee string `json:"fee"` + Counter string `json:"counter"` + GasLimit string `json:"gas_limit"` + StorageLimit string `json:"storage_limit"` + Limit *string `json:"limit,omitempty"` + Metadata *ManagerOperationMetadata `json:"metadata"` +} + // Transaction - type Transaction struct { Source string `json:"source"` @@ -597,6 +677,22 @@ type InlinedEndorsementOperations struct { Level int `json:"level"` } +// InlinedPreendorsement - +type InlinedPreendorsement struct { + Branch string `json:"branch"` + Operations *InlinedPreendorsementOperations `json:"operations,omitempty"` + Signature string `json:"signature"` +} + +// InlinedPreendorsementOperations - +type InlinedPreendorsementOperations struct { + Kind string `json:"kind"` + Slot uint64 `json:"slot"` + Level uint64 `json:"level"` + Round int64 `json:"round"` + BlockPayloadHash string `json:"block_payload_hash"` +} + // EndorsementWithSlotEntity - type EndorsementWithSlotEntity struct { Branch string `json:"branch"` diff --git a/node/protocols_api.go b/node/protocols_api.go index f1a1edc..b1b4ea9 100644 --- a/node/protocols_api.go +++ b/node/protocols_api.go @@ -7,7 +7,7 @@ import ( // ProtocolsAPI - type ProtocolsAPI interface { - Protocols(ctx context.Context) ([]string, error) + GetProtocols(ctx context.Context) ([]string, error) Protocol(ctx context.Context, hash string) (ProtocolInfo, error) Environment(ctx context.Context, hash string) (int, error) } @@ -26,8 +26,8 @@ func NewProtocols(baseURL string) *Protocols { } } -// Protocols - -func (api *Protocols) Protocols(ctx context.Context) ([]string, error) { +// GetProtocols - +func (api *Protocols) GetProtocols(ctx context.Context) ([]string, error) { req, err := newGetRequest(api.baseURL, "protocols", nil) if err != nil { return nil, err