refactor(context): simplify Context struct

- Remove PrimaryNetworkID field (NetworkID == 1 means primary network)
- Remove LUXAssetID (use XAssetID for X-chain native asset)
- Replace GetPrimaryNetworkID with IsPrimaryNetwork
- NetworkID: 1=mainnet, 2=testnet
This commit is contained in:
2025-12-21 12:57:13 -08:00
parent caeacf4102
commit dc74a41dba
3 changed files with 57 additions and 78 deletions
+11 -17
View File
@@ -14,16 +14,13 @@ type Context struct {
// NetworkID is the numeric network identifier (1=mainnet, 2=testnet)
// EVM chain IDs are derived: mainnet=96369, testnet=96368
NetworkID uint32 `json:"networkID"`
// PrimaryNetworkID identifies if chain is in primary network (ids.Empty = primary)
PrimaryNetworkID ids.ID `json:"primaryNetworkID"`
// ChainID identifies the specific chain within the network
ChainID ids.ID `json:"chainID"`
NodeID ids.NodeID `json:"nodeID"`
PublicKey []byte `json:"publicKey"`
XChainID ids.ID `json:"xChainID"`
CChainID ids.ID `json:"cChainID"`
XAssetID ids.ID `json:"xAssetID"`
LUXAssetID ids.ID `json:"luxAssetID"`
XAssetID ids.ID `json:"xAssetID"` // Primary asset ID (X-chain native)
ChainDataDir string `json:"chainDataDir"`
// Timing
@@ -101,12 +98,12 @@ func GetNetworkID(ctx context.Context) uint32 {
return 0
}
// GetPrimaryNetworkID gets the primary network ID (ids.Empty = primary network)
func GetPrimaryNetworkID(ctx context.Context) ids.ID {
// IsPrimaryNetwork checks if the network is the primary network (NetworkID == 1)
func IsPrimaryNetwork(ctx context.Context) bool {
if c, ok := ctx.Value(contextKey).(*Context); ok {
return c.PrimaryNetworkID
return c.NetworkID == 1 // Mainnet is the primary network
}
return ids.Empty
return false
}
// GetValidatorState gets the validator state from context
@@ -150,14 +147,12 @@ func GetNodeID(ctx context.Context) ids.NodeID {
// IDs holds the IDs for consensus context
type IDs struct {
NetworkID uint32
PrimaryNetworkID ids.ID
ChainID ids.ID
NodeID ids.NodeID
PublicKey []byte
XAssetID ids.ID
LUXAssetID ids.ID `json:"luxAssetID"`
ChainDataDir string `json:"chainDataDir"`
NetworkID uint32 // 1=mainnet, 2=testnet
ChainID ids.ID
NodeID ids.NodeID
PublicKey []byte
XAssetID ids.ID // Primary asset ID (X-chain native)
ChainDataDir string `json:"chainDataDir"`
}
// WithIDs adds IDs to the context
@@ -167,7 +162,6 @@ func WithIDs(ctx context.Context, ids IDs) context.Context {
c = &Context{}
}
c.NetworkID = ids.NetworkID
c.PrimaryNetworkID = ids.PrimaryNetworkID
c.ChainID = ids.ChainID
c.NodeID = ids.NodeID
c.PublicKey = ids.PublicKey
+40 -53
View File
@@ -52,25 +52,30 @@ func TestGetNetworkID(t *testing.T) {
require.Equal(t, uint32(1), result)
}
func TestGetPrimaryNetworkID(t *testing.T) {
func TestIsPrimaryNetwork(t *testing.T) {
// Test with nil context
ctx := context.Background()
result := GetPrimaryNetworkID(ctx)
require.Equal(t, ids.Empty, result)
result := IsPrimaryNetwork(ctx)
require.False(t, result)
// Test with valid context
primaryNetID := ids.GenerateTestID()
cc := &Context{PrimaryNetworkID: primaryNetID}
// Test with mainnet (primary network)
cc := &Context{NetworkID: 1}
ctx = WithContext(ctx, cc)
result = GetPrimaryNetworkID(ctx)
require.Equal(t, primaryNetID, result)
result = IsPrimaryNetwork(ctx)
require.True(t, result)
// Test with testnet (not primary)
cc = &Context{NetworkID: 2}
ctx = WithContext(context.Background(), cc)
result = IsPrimaryNetwork(ctx)
require.False(t, result)
}
// mockValidatorState implements ValidatorState for testing
type mockValidatorState struct{}
func (m *mockValidatorState) GetChainID(ids.ID) (ids.ID, error) { return ids.Empty, nil }
func (m *mockValidatorState) GetNetworkID(ids.ID) (ids.ID, error) { return ids.Empty, nil }
func (m *mockValidatorState) GetChainID(ids.ID) (ids.ID, error) { return ids.Empty, nil }
func (m *mockValidatorState) GetNetworkID(ids.ID) (ids.ID, error) { return ids.Empty, nil }
func (m *mockValidatorState) GetValidatorSet(uint64, ids.ID) (map[ids.NodeID]uint64, error) {
return nil, nil
}
@@ -108,9 +113,8 @@ func TestGetWarpSigner(t *testing.T) {
func TestWithContext_FromContext(t *testing.T) {
// Test round-trip
cc := &Context{
NetworkID: 1,
PrimaryNetworkID: ids.GenerateTestID(),
ChainID: ids.GenerateTestID(),
NetworkID: 1,
ChainID: ids.GenerateTestID(),
}
ctx := context.Background()
@@ -119,7 +123,6 @@ func TestWithContext_FromContext(t *testing.T) {
result := FromContext(ctx)
require.Equal(t, cc, result)
require.Equal(t, cc.NetworkID, result.NetworkID)
require.Equal(t, cc.PrimaryNetworkID, result.PrimaryNetworkID)
require.Equal(t, cc.ChainID, result.ChainID)
}
@@ -150,18 +153,16 @@ func TestWithIDs_ExistingContext(t *testing.T) {
ctx := WithContext(context.Background(), cc)
newIDs := IDs{
NetworkID: 2,
PrimaryNetworkID: ids.GenerateTestID(),
ChainID: ids.GenerateTestID(),
NodeID: ids.GenerateTestNodeID(),
PublicKey: []byte("test-public-key"),
NetworkID: 2,
ChainID: ids.GenerateTestID(),
NodeID: ids.GenerateTestNodeID(),
PublicKey: []byte("test-public-key"),
}
ctx = WithIDs(ctx, newIDs)
result := FromContext(ctx)
require.Equal(t, newIDs.NetworkID, result.NetworkID)
require.Equal(t, newIDs.PrimaryNetworkID, result.PrimaryNetworkID)
require.Equal(t, newIDs.ChainID, result.ChainID)
require.Equal(t, newIDs.NodeID, result.NodeID)
require.Equal(t, newIDs.PublicKey, result.PublicKey)
@@ -172,11 +173,10 @@ func TestWithIDs_NewContext(t *testing.T) {
ctx := context.Background()
newIDs := IDs{
NetworkID: 1,
PrimaryNetworkID: ids.GenerateTestID(),
ChainID: ids.GenerateTestID(),
NodeID: ids.GenerateTestNodeID(),
PublicKey: []byte("another-key"),
NetworkID: 1,
ChainID: ids.GenerateTestID(),
NodeID: ids.GenerateTestNodeID(),
PublicKey: []byte("another-key"),
}
ctx = WithIDs(ctx, newIDs)
@@ -184,7 +184,6 @@ func TestWithIDs_NewContext(t *testing.T) {
require.NotNil(t, result)
require.Equal(t, newIDs.NetworkID, result.NetworkID)
require.Equal(t, newIDs.PrimaryNetworkID, result.PrimaryNetworkID)
require.Equal(t, newIDs.ChainID, result.ChainID)
require.Equal(t, newIDs.NodeID, result.NodeID)
require.Equal(t, newIDs.PublicKey, result.PublicKey)
@@ -231,65 +230,53 @@ func TestContextLock(t *testing.T) {
func TestContextFields(t *testing.T) {
now := time.Now()
chainID := ids.GenerateTestID()
primaryNetworkID := ids.GenerateTestID()
nodeID := ids.GenerateTestNodeID()
xChainID := ids.GenerateTestID()
cChainID := ids.GenerateTestID()
xAssetID := ids.GenerateTestID()
luxAssetID := ids.GenerateTestID()
cc := &Context{
NetworkID: 1,
PrimaryNetworkID: primaryNetworkID,
ChainID: chainID,
NodeID: nodeID,
PublicKey: []byte("test-key"),
XChainID: xChainID,
CChainID: cChainID,
XAssetID: xAssetID,
LUXAssetID: luxAssetID,
ChainDataDir: "/data/chain",
StartTime: now,
NetworkID: 1,
ChainID: chainID,
NodeID: nodeID,
PublicKey: []byte("test-key"),
XChainID: xChainID,
CChainID: cChainID,
XAssetID: xAssetID,
ChainDataDir: "/data/chain",
StartTime: now,
}
require.Equal(t, uint32(1), cc.NetworkID)
require.Equal(t, primaryNetworkID, cc.PrimaryNetworkID)
require.Equal(t, chainID, cc.ChainID)
require.Equal(t, nodeID, cc.NodeID)
require.Equal(t, []byte("test-key"), cc.PublicKey)
require.Equal(t, xChainID, cc.XChainID)
require.Equal(t, cChainID, cc.CChainID)
require.Equal(t, xAssetID, cc.XAssetID)
require.Equal(t, luxAssetID, cc.LUXAssetID)
require.Equal(t, "/data/chain", cc.ChainDataDir)
require.Equal(t, now, cc.StartTime)
}
func TestIDsStruct(t *testing.T) {
primaryNetworkID := ids.GenerateTestID()
chainID := ids.GenerateTestID()
nodeID := ids.GenerateTestNodeID()
xAssetID := ids.GenerateTestID()
luxAssetID := ids.GenerateTestID()
i := IDs{
NetworkID: 1,
PrimaryNetworkID: primaryNetworkID,
ChainID: chainID,
NodeID: nodeID,
PublicKey: []byte("key"),
XAssetID: xAssetID,
LUXAssetID: luxAssetID,
ChainDataDir: "/data",
NetworkID: 1,
ChainID: chainID,
NodeID: nodeID,
PublicKey: []byte("key"),
XAssetID: xAssetID,
ChainDataDir: "/data",
}
require.Equal(t, uint32(1), i.NetworkID)
require.Equal(t, primaryNetworkID, i.PrimaryNetworkID)
require.Equal(t, chainID, i.ChainID)
require.Equal(t, nodeID, i.NodeID)
require.Equal(t, []byte("key"), i.PublicKey)
require.Equal(t, xAssetID, i.XAssetID)
require.Equal(t, luxAssetID, i.LUXAssetID)
require.Equal(t, "/data", i.ChainDataDir)
}
+6 -8
View File
@@ -69,14 +69,12 @@ func Context(tb testing.TB, chainID ids.ID) *consensus.Context {
tb.Helper()
ctx := &consensus.Context{
NetworkID: 1, // Mainnet
PrimaryNetworkID: ids.Empty, // Primary network
ChainID: chainID,
NodeID: ids.GenerateTestNodeID(),
XChainID: XChainID,
CChainID: CChainID,
XAssetID: XAssetID,
LUXAssetID: XAssetID, // Use XAssetID as default LUX asset
NetworkID: 1, // Mainnet (primary network)
ChainID: chainID,
NodeID: ids.GenerateTestNodeID(),
XChainID: XChainID,
CChainID: CChainID,
XAssetID: XAssetID,
}
// Set up a simple validator state