github.com/kotalco/kotal@v0.3.0/clients/ethereum/nethermind_client_test.go (about) 1 package ethereum 2 3 import ( 4 "fmt" 5 6 ethereumv1alpha1 "github.com/kotalco/kotal/apis/ethereum/v1alpha1" 7 sharedAPI "github.com/kotalco/kotal/apis/shared" 8 "github.com/kotalco/kotal/controllers/shared" 9 . "github.com/onsi/ginkgo/v2" 10 . "github.com/onsi/gomega" 11 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 12 ) 13 14 var _ = Describe("Nethermind Client", func() { 15 16 enode := ethereumv1alpha1.Enode("enode://2281549869465d98e90cebc45e1d6834a01465a990add7bcf07a49287e7e66b50ca27f9c70a46190cef7ad746dd5d5b6b9dfee0c9954104c8e9bd0d42758ec58@10.5.0.2:30300") 17 coinbase := "0x5A0b54D5dc17e0AadC383d2db43B0a0D3E029c4c" 18 19 Context("general", func() { 20 node := ðereumv1alpha1.Node{ 21 ObjectMeta: metav1.ObjectMeta{ 22 Name: "gneral", 23 }, 24 Spec: ethereumv1alpha1.NodeSpec{ 25 Client: ethereumv1alpha1.NethermindClient, 26 StaticNodes: []ethereumv1alpha1.Enode{ 27 enode, 28 }, 29 }, 30 } 31 client, _ := NewClient(node) 32 33 It("should return correct home directory", func() { 34 Expect(client.HomeDir()).To(Equal(NethermindHomeDir)) 35 }) 36 37 It("should encode static nodes correctly", func() { 38 Expect(client.EncodeStaticNodes()).To(Equal(fmt.Sprintf("[\"%s\"]", string(enode)))) 39 }) 40 }) 41 42 Context("Joining mainnet", func() { 43 node := ethereumv1alpha1.Node{ 44 ObjectMeta: metav1.ObjectMeta{ 45 Name: "nethermind-mainnet-node", 46 }, 47 Spec: ethereumv1alpha1.NodeSpec{ 48 Client: ethereumv1alpha1.NethermindClient, 49 Network: ethereumv1alpha1.MainNetwork, 50 NodePrivateKeySecretName: "mainnet-nethermind-nodekey", 51 Logging: sharedAPI.WarnLogs, 52 RPC: true, 53 RPCPort: 8799, 54 RPCAPI: []ethereumv1alpha1.API{ 55 ethereumv1alpha1.AdminAPI, 56 ethereumv1alpha1.NetworkAPI, 57 }, 58 Engine: true, 59 EnginePort: 8552, 60 JWTSecretName: "jwt-secret", 61 P2PPort: 30306, 62 WS: true, 63 WSPort: 30307, 64 SyncMode: ethereumv1alpha1.FastSynchronization, 65 StaticNodes: []ethereumv1alpha1.Enode{ 66 enode, 67 }, 68 }, 69 } 70 71 node.Default() 72 73 It("Should generate correct args", func() { 74 client, err := NewClient(&node) 75 76 Expect(err).To(BeNil()) 77 Expect(client.Args()).To(ContainElements( 78 NethermindNodePrivateKey, 79 fmt.Sprintf("%s/kotal_nodekey", shared.PathData(client.HomeDir())), 80 NethermindStaticNodesFile, 81 fmt.Sprintf("%s/static-nodes.json", shared.PathConfig(client.HomeDir())), 82 NethermindDataPath, 83 shared.PathData(client.HomeDir()), 84 NethermindNetwork, 85 node.Spec.Network, 86 NethermindP2PPort, 87 "30306", 88 NethermindFastSync, 89 "true", 90 NethermindFastBlocks, 91 "true", 92 NethermindDownloadBodiesInFastSync, 93 "true", 94 NethermindDownloadReceiptsInFastSync, 95 "true", 96 NethermindRPCHTTPEnabled, 97 "true", 98 NethermindRPCHTTPHost, 99 "0.0.0.0", 100 NethermindRPCHTTPPort, 101 "8799", 102 NethermindRPCHTTPAPI, 103 "admin,net", 104 NethermindRPCEnginePort, 105 "8552", 106 NethermindRPCEngineHost, 107 "0.0.0.0", 108 NethermindRPCJwtSecretFile, 109 fmt.Sprintf("%s/jwt.secret", shared.PathSecrets(client.HomeDir())), 110 NethermindRPCWSEnabled, 111 "true", 112 NethermindRPCWSPort, 113 "30307", 114 )) 115 116 }) 117 118 }) 119 120 Context("miner in private PoW network", func() { 121 node := ðereumv1alpha1.Node{ 122 ObjectMeta: metav1.ObjectMeta{ 123 Name: "nethermind-pow-node", 124 }, 125 Spec: ethereumv1alpha1.NodeSpec{ 126 Genesis: ðereumv1alpha1.Genesis{ 127 ChainID: 12345, 128 NetworkID: 12345, 129 Ethash: ðereumv1alpha1.Ethash{}, 130 }, 131 Client: ethereumv1alpha1.NethermindClient, 132 Miner: true, 133 Coinbase: sharedAPI.EthereumAddress(coinbase), 134 Import: ðereumv1alpha1.ImportedAccount{ 135 PrivateKeySecretName: "nethermind-pow-account-key", 136 PasswordSecretName: "nethermind-pow-account-password", 137 }, 138 }, 139 } 140 node.Default() 141 142 It("should generate correct arguments", func() { 143 144 client, err := NewClient(node) 145 146 Expect(err).To(BeNil()) 147 Expect(client.Args()).To(ContainElements( 148 NethermindMiningEnabled, 149 "true", 150 NethermindMinerCoinbase, 151 coinbase, 152 NethermindUnlockAccounts, 153 fmt.Sprintf("[%s]", coinbase), 154 NethermindPasswordFiles, 155 fmt.Sprintf("[%s/account.password]", shared.PathSecrets(client.HomeDir())), 156 NethermindDiscoveryEnabled, 157 "false", 158 NethermindNetwork, 159 fmt.Sprintf("%s/empty.cfg", shared.PathConfig(client.HomeDir())), 160 )) 161 }) 162 163 }) 164 165 Context("signer in private PoA network", func() { 166 node := ðereumv1alpha1.Node{ 167 ObjectMeta: metav1.ObjectMeta{ 168 Name: "nethermind-poa-node", 169 }, 170 Spec: ethereumv1alpha1.NodeSpec{ 171 Genesis: ðereumv1alpha1.Genesis{ 172 ChainID: 12345, 173 NetworkID: 12345, 174 Clique: ðereumv1alpha1.Clique{ 175 Signers: []sharedAPI.EthereumAddress{ 176 "0xcF2C3fB8F36A863FD1A8c72E2473f81744B4CA6C", 177 "0x1990E5760d9f8Ae0ec55dF8B0819C77e59846Ff2", 178 "0xB87c1c66b36D98D1A74a9875EbA12c001e0bcEda", 179 }, 180 }, 181 }, 182 Client: ethereumv1alpha1.NethermindClient, 183 Miner: true, 184 Coinbase: sharedAPI.EthereumAddress(coinbase), 185 Import: ðereumv1alpha1.ImportedAccount{ 186 PrivateKeySecretName: "nethermind-poa-account-key", 187 PasswordSecretName: "nethermind-poa-account-password", 188 }, 189 }, 190 } 191 node.Default() 192 193 It("should generate correct arguments", func() { 194 195 client, err := NewClient(node) 196 197 Expect(err).To(BeNil()) 198 Expect(client.Args()).To(ContainElements( 199 NethermindMiningEnabled, 200 "true", 201 NethermindMinerCoinbase, 202 coinbase, 203 NethermindUnlockAccounts, 204 fmt.Sprintf("[%s]", coinbase), 205 NethermindPasswordFiles, 206 fmt.Sprintf("[%s/account.password]", shared.PathSecrets(client.HomeDir())), 207 NethermindDiscoveryEnabled, 208 "false", 209 NethermindNetwork, 210 fmt.Sprintf("%s/empty.cfg", shared.PathConfig(client.HomeDir())), 211 )) 212 }) 213 214 }) 215 216 })