# Ethereum on Amazon Managed Blockchain
[](https://opensource.org/licenses/MIT)
[](https://github.com/cdklabs/cdk-ethereum-node/releases)
[](https://www.npmjs.com/package/@cdklabs/cdk-ethereum-node)
[](https://pypi.org/project/cdklabs.cdk-ethereum-node/)
[](https://central.sonatype.dev/artifact/io.github.cdklabs/cdk-ethereum-node/0.0.61)
[](https://www.nuget.org/packages/Cdklabs.CdkEthereumNode)
This repository contains a CDK construct to deploy an Ethereum node running
on Amazon Managed Blockchain. The following networks are supported:
* Mainnet (default)
* Testnet: Goerli
* Testnet: Rinkeby
* Testnet: Ropsten
## Installation
Note that this construct requires [AWS CDK v2](https://docs.aws.amazon.com/cdk/v2/guide/getting_started.html#getting_started_install).
#### JavaScript
```bash
npm install --save @cdklabs/cdk-ethereum-node
```
#### Python
```bash
pip3 install cdklabs.cdk-ethereum-node
```
#### Java
Add the following to `pom.xml`:
```xml
io.github.cdklabs
cdk-ethereum-node
```
#### .NET
```bash
dotnet add package Cdklabs.CdkEthereumNode
```
## Usage
A minimally complete deployment is shown below. By default,
a `bc.t3.large` node will be created on the Ethereum Mainnet.
```typescript
import { Stack, StackProps } from 'aws-cdk-lib';
import { Construct } from 'constructs';
import { EthereumNode, Network, InstanceType } from '@cdklabs/cdk-ethereum-node';
export class MyStack extends Stack {
constructor(scope: Construct, id: string, props?: StackProps) {
super(scope, id, props);
new EthereumNode(this, 'Example');
}
}
```
The equivalent Python code is as follows:
```python
from aws_cdk import Stack
from cdklabs.cdk_ethereum_node import EthereumNode
class MyStack(Stack):
def __init__(self, scope, id, **kwargs):
super().__init__(scope, id, **kwargs)
EthereumNode(self, 'Example')
```
The following is a more complex instantiation illustrating some of the node configuration options available.
```typescript
new EthereumNode(this, 'Example', {
network: Network.ROPSTEN,
availabilityZone: 'us-east-1b',
instanceType: InstanceType.BURSTABLE3_LARGE,
});
```
See the [API Documentation](API.md) for details on all available input and output parameters.
## References
* [AWS CDK](https://docs.aws.amazon.com/cdk/v2/guide/home.html)
* [Amazon Managed Blockchain](https://aws.amazon.com/managed-blockchain/)
* [Ethereum](https://ethereum.org/en/developers/docs/)
## Contributing
Pull requests are welcomed. Please review the [Contributing Guidelines](CONTRIBUTING.md)
and the [Code of Conduct](CODE_OF_CONDUCT.md).
## Security
See [CONTRIBUTING](CONTRIBUTING.md#security-issue-notifications) for more information.
## Authors
* Trinity Key (trinikey@amazon.com)
* Marc Gozali (gozalim@amazon.com)
## License
This project is licensed under the MIT-0 License. See the [LICENSE](LICENSE) file for details.
# API Reference
## Constructs
### EthereumNode
#### Initializers
```typescript
import { EthereumNode } from '@cdklabs/cdk-ethereum-node'
new EthereumNode(scope: Construct, id: string, props?: EthereumNodeProps)
```
| **Name** | **Type** | **Description** |
| --- | --- | --- |
| scope
| constructs.Construct
| *No description.* |
| id
| string
| *No description.* |
| props
| EthereumNodeProps
| *No description.* |
---
##### `scope`Required
- *Type:* constructs.Construct
---
##### `id`Required
- *Type:* string
---
##### `props`Optional
- *Type:* EthereumNodeProps
---
#### Methods
| **Name** | **Description** |
| --- | --- |
| toString
| Returns a string representation of this construct. |
---
##### `toString`
```typescript
public toString(): string
```
Returns a string representation of this construct.
#### Static Functions
| **Name** | **Description** |
| --- | --- |
| isConstruct
| Checks if `x` is a construct. |
---
##### ~~`isConstruct`~~
```typescript
import { EthereumNode } from '@cdklabs/cdk-ethereum-node'
EthereumNode.isConstruct(x: any)
```
Checks if `x` is a construct.
###### `x`Required
- *Type:* any
Any object.
---
#### Properties
| **Name** | **Type** | **Description** |
| --- | --- | --- |
| node
| constructs.Node
| The tree node. |
| availabilityZone
| string
| The Availability Zone in which the node exists. |
| instanceType
| InstanceType
| The Amazon Managed Blockchain instance type for the node. |
| network
| Network
| Managed Blockchain Ethereum network identifier. |
| region
| string
| The Region in which the node exists. |
---
##### `node`Required
```typescript
public readonly node: Node;
```
- *Type:* constructs.Node
The tree node.
---
##### `availabilityZone`Required
```typescript
public readonly availabilityZone: string;
```
- *Type:* string
The Availability Zone in which the node exists.
---
##### `instanceType`Required
```typescript
public readonly instanceType: InstanceType;
```
- *Type:* InstanceType
The Amazon Managed Blockchain instance type for the node.
---
##### `network`Required
```typescript
public readonly network: Network;
```
- *Type:* Network
Managed Blockchain Ethereum network identifier.
---
##### `region`Required
```typescript
public readonly region: string;
```
- *Type:* string
The Region in which the node exists.
---
## Structs
### EthereumNodeProps
Construct properties for `EthereumNode`.
#### Initializer
```typescript
import { EthereumNodeProps } from '@cdklabs/cdk-ethereum-node'
const ethereumNodeProps: EthereumNodeProps = { ... }
```
#### Properties
| **Name** | **Type** | **Description** |
| --- | --- | --- |
| availabilityZone
| string
| The Availability Zone in which the node will be created. |
| instanceType
| InstanceType
| The Amazon Managed Blockchain instance type for the Ethereum node. |
| network
| Network
| The Ethereum Network in which the node will be created. |
---
##### `availabilityZone`Optional
```typescript
public readonly availabilityZone: string;
```
- *Type:* string
- *Default:* us-east-1a
The Availability Zone in which the node will be created.
---
##### `instanceType`Optional
```typescript
public readonly instanceType: InstanceType;
```
- *Type:* InstanceType
- *Default:* BURSTABLE3_LARGE
The Amazon Managed Blockchain instance type for the Ethereum node.
---
##### `network`Optional
```typescript
public readonly network: Network;
```
- *Type:* Network
- *Default:* The default network selected is Mainnet network
The Ethereum Network in which the node will be created.
---
## Enums
### InstanceType
Supported instance types for Managed Blockchain nodes.
#### Members
| **Name** | **Description** |
| --- | --- |
| BURSTABLE3_LARGE
| *No description.* |
| BURSTABLE3_XLARGE
| *No description.* |
| STANDARD5_LARGE
| *No description.* |
| STANDARD5_XLARGE
| *No description.* |
| STANDARD5_XLARGE2
| *No description.* |
| STANDARD5_XLARGE4
| *No description.* |
| COMPUTE5_XLARGE
| *No description.* |
| COMPUTE5_XLARGE2
| *No description.* |
| COMPUTE5_XLARGE4
| *No description.* |
---
##### `BURSTABLE3_LARGE`
---
##### `BURSTABLE3_XLARGE`
---
##### `STANDARD5_LARGE`
---
##### `STANDARD5_XLARGE`
---
##### `STANDARD5_XLARGE2`
---
##### `STANDARD5_XLARGE4`
---
##### `COMPUTE5_XLARGE`
---
##### `COMPUTE5_XLARGE2`
---
##### `COMPUTE5_XLARGE4`
---
### Network
Supported Ethereum networks for Managed Blockchain nodes.
#### Members
| **Name** | **Description** |
| --- | --- |
| MAINNET
| *No description.* |
| GOERLI
| *No description.* |
| RINKEBY
| *No description.* |
| ROPSTEN
| *No description.* |
---
##### `MAINNET`
---
##### `GOERLI`
---
##### `RINKEBY`
---
##### `ROPSTEN`
---