Skip to content

Commit

Permalink
Backport 6155 - Upgrade to support 8.0 Mio ATXs (#6123)
Browse files Browse the repository at this point in the history
* Upgrade to support 8.0 Mio ATXs (#6115)

## Motivation

Upgrade limits to allow for up to 8.0 Mio ATXs

* Update CHANGELOG
  • Loading branch information
fasmat authored Jul 10, 2024
1 parent 4e44ec1 commit 2f80519
Show file tree
Hide file tree
Showing 9 changed files with 37 additions and 33 deletions.
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,14 @@ See [RELEASE](./RELEASE.md) for workflow instructions.

* [#5793](https://github.com/spacemeshos/go-spacemesh/pull/5793) Reduced hare committee 8x from 400 to 50 to decrease
network traffic caused by Hare.

* [#6099](https://github.com/spacemeshos/go-spacemesh/pull/6099) Adds new metrics to the API to provide insights into
the performance and behavior of the node's APIs.

* [#6115](https://github.com/spacemeshos/go-spacemesh/pull/6115) Increase the number of supported ATXs to 8.0 Mio.

### Features

* [#6112](https://github.com/spacemeshos/go-spacemesh/pull/6112) Adds vesting, vault, and drain vault contents to the
v2alpha2 Transaction API. Fixes the 'unspecified' transaction type.

Expand Down
2 changes: 1 addition & 1 deletion common/types/activation.go
Original file line number Diff line number Diff line change
Expand Up @@ -396,7 +396,7 @@ func ATXIDsToHashes(ids []ATXID) []Hash32 {

type EpochActiveSet struct {
Epoch EpochID
Set []ATXID `scale:"max=7000000"` // to be in line with `EpochData` in fetch/wire_types.go
Set []ATXID `scale:"max=8000000"` // to be in line with `EpochData` in fetch/wire_types.go
}

var MaxEpochActiveSetSize = scale.MustGetMaxElements[EpochActiveSet]("Set")
Expand Down
4 changes: 2 additions & 2 deletions common/types/activation_scale.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 5 additions & 5 deletions common/types/block.go
Original file line number Diff line number Diff line change
Expand Up @@ -77,14 +77,14 @@ type InnerBlock struct {
// In this case they will get all 50 available slots in all 4032 layers of the epoch.
// Additionally every other identity on the network that successfully published an ATX will get 1 slot.
//
// If we expect 7.0 Mio ATXs that would be a total of 7.0 Mio + 50 * 4032 = 7 201 600 slots.
// If we expect 8.0 Mio ATXs that would be a total of 8.0 Mio + 50 * 4032 = 8 201 600 slots.
// Since these are randomly distributed across the epoch, we can expect an average of n * p =
// 7 201 600 / 4032 = 1786.1 rewards in a block with a standard deviation of sqrt(n * p * (1 - p)) =
// sqrt(7 201 600 * 1/4032 * 4031/4032) = 42.3
// 8 201 600 / 4032 = 2034.1 rewards in a block with a standard deviation of sqrt(n * p * (1 - p)) =
// sqrt(8 201 600 * 1/4032 * 4031/4032) = 45.1
//
// This means that we can expect a maximum of 1786.1 + 6*42.3 = 2039.7 rewards per block with
// This means that we can expect a maximum of 2034.1 + 6*45.1 = 2304.7 rewards per block with
// > 99.9997% probability.
Rewards []AnyReward `scale:"max=2050"`
Rewards []AnyReward `scale:"max=2350"`
TxIDs []TransactionID `scale:"max=100000"`
}

Expand Down
4 changes: 2 additions & 2 deletions common/types/block_scale.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

16 changes: 8 additions & 8 deletions fetch/wire_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ type RequestMessage struct {
type ResponseMessage struct {
Hash types.Hash32
// keep in line with limit of Response.Data in `p2p/server/server.go`
Data []byte `scale:"max=235929600"` // 225 MiB > 7.0 mio ATX * 32 bytes per ID
Data []byte `scale:"max=272629760"` // 260 MiB > 8.0 mio ATX * 32 bytes per ID
}

// RequestBatch is a batch of requests and a hash of all requests as ID.
Expand Down Expand Up @@ -116,7 +116,7 @@ type MeshHashes struct {
}

type MaliciousIDs struct {
NodeIDs []types.NodeID `scale:"max=7000000"` // to be in line with `EpochData.AtxIDs` below
NodeIDs []types.NodeID `scale:"max=8000000"` // to be in line with `EpochData.AtxIDs` below
}

type EpochData struct {
Expand All @@ -128,7 +128,7 @@ type EpochData struct {
// - the size of `Rewards` in the type `InnerBlock` in common/types/block.go
// - the size of `Ballots` in the type `LayerData` below
// - the size of `Proposals` in the type `Value` in hare3/types.go
AtxIDs []types.ATXID `scale:"max=7000000"`
AtxIDs []types.ATXID `scale:"max=8000000"`
}

// LayerData is the data response for a given layer ID.
Expand All @@ -139,14 +139,14 @@ type LayerData struct {
// In this case they will get all 50 available slots in all 4032 layers of the epoch.
// Additionally every other identity on the network that successfully published an ATX will get 1 slot.
//
// If we expect 7.0 Mio ATXs that would be a total of 7.0 Mio + 50 * 4032 = 7 201 600 slots.
// If we expect 8.0 Mio ATXs that would be a total of 8.0 Mio + 50 * 4032 = 8 201 600 slots.
// Since these are randomly distributed across the epoch, we can expect an average of n * p =
// 7 201 600 / 4032 = 1786.1 ballots in a layer with a standard deviation of sqrt(n * p * (1 - p)) =
// sqrt(7 201 600 * 1/4032 * 4031/4032) = 42.3
// 8 201 600 / 4032 = 2034.1 ballots in a layer with a standard deviation of sqrt(n * p * (1 - p)) =
// sqrt(8 201 600 * 1/4032 * 4031/4032) = 45.1
//
// This means that we can expect a maximum of 1786.1 + 6*42.3 = 2039.7 ballots per layer with
// This means that we can expect a maximum of 2034.1 + 6*45.1 = 2304.7 ballots per layer with
// > 99.9997% probability.
Ballots []types.BallotID `scale:"max=2050"`
Ballots []types.BallotID `scale:"max=2350"`
}

type OpinionRequest struct {
Expand Down
16 changes: 8 additions & 8 deletions fetch/wire_types_scale.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 5 additions & 5 deletions hare3/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -82,14 +82,14 @@ type Value struct {
// In this case they will get all 50 available slots in all 4032 layers of the epoch.
// Additionally every other identity on the network that successfully published an ATX will get 1 slot.
//
// If we expect 7.0 Mio ATXs that would be a total of 7.0 Mio + 50 * 4032 = 7 201 600 slots.
// If we expect 7.0 Mio ATXs that would be a total of 7.0 Mio + 50 * 4032 = 8 201 600 slots.
// Since these are randomly distributed across the epoch, we can expect an average of n * p =
// 7 201 600 / 4032 = 1786.1 eligibilities in a layer with a standard deviation of sqrt(n * p * (1 - p)) =
// sqrt(7 201 600 * 1/4032 * 4031/4032) = 42.3
// 8 201 600 / 4032 = 2034.1 eligibilities in a layer with a standard deviation of sqrt(n * p * (1 - p)) =
// sqrt(8 201 600 * 1/4032 * 4031/4032) = 45.1
//
// This means that we can expect a maximum of 1786.1 + 6*42.3 = 2039.7 eligibilities in a layer with
// This means that we can expect a maximum of 2034.1 + 6*45.1 = 2304.7 eligibilities in a layer with
// > 99.9997% probability.
Proposals []types.ProposalID `scale:"max=2050"`
Proposals []types.ProposalID `scale:"max=2350"`
// Reference is set in messages for commit and notify rounds.
Reference *types.Hash32
}
Expand Down
4 changes: 2 additions & 2 deletions hare3/types_scale.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit 2f80519

Please sign in to comment.