#built #commonware #blockchain #validation #ec2

bin+lib alto-chain

A minimal blockchain built with the Commonware Library

1 unstable release

new 0.0.2 Mar 9, 2025

#14 in Magic Beans

MIT/Apache

150KB
3K SLoC

alto-chain

Crates.io Docs.rs

A minimal blockchain built with the Commonware Library.

Status

alto-chain is ALPHA software and is not yet recommended for production use. Developers should expect breaking changes and occasional instability.

Setup

To run this example, you must first install Rust and Docker.

Install commonware-deployer

cargo install commonware-deployer

Create Deployer Artifacts

cargo run --bin setup -- --peers 10 --bootstrappers 2 --regions us-west-1,us-east-1,eu-west-1,ap-northeast-1,eu-north-1,ap-south-1,sa-east-1,eu-central-1,ap-northeast-2,ap-southeast-2 --instance-type c7g.xlarge --storage-size 10 --storage-class gp3 --worker-threads 4 --message-backlog 16384 --mailbox-size 16384 --dashboard dashboard.json --output assets

Build Validator Binary

Build Cross-Platform Compiler

docker build -t validator-builder .

Compile Binary for ARM64

docker run -it -v ${PWD}/..:/alto validator-builder

Emitted binary validator is placed in assets.

Deploy Validator Binary

cd assets
deployer ec2 create --config config.yaml

Monitor Performance on Grafana

Visit http://<monitoring-ip>:3000/d/chain

This dashboard is only accessible from the IP used to deploy the infrastructure.

[Optional] Update Validator Binary

Re-Compile Binary for ARM64

docker run -it -v ${PWD}/..:/alto validator-builder

Restart Validator Binary on EC2 Instances

deployer ec2 update --config config.yaml

Destroy Infrastructure

deployer ec2 destroy --config config.yaml

Debugging

Missing AWS Credentials

If commonware-deployer can't detect your AWS credentials, you'll see a "Request has expired." error:

2025-03-05T01:36:47.550105Z  INFO deployer::ec2::create: created EC2 client region="eu-west-1"
2025-03-05T01:36:48.268330Z ERROR deployer: failed to create EC2 deployment error=AwsEc2(Unhandled(Unhandled { source: ErrorMetadata { code: Some("RequestExpired"), message: Some("Request has expired."), extras: Some({"aws_request_id": "006f6b92-4965-470d-8eac-7c9644744bdf"}) }, meta: ErrorMetadata { code: Some("RequestExpired"), message: Some("Request has expired."), extras: Some({"aws_request_id": "006f6b92-4965-470d-8eac-7c9644744bdf"}) } }))

EC2 Throttling

EC2 instances may throttle network traffic if a workload exceeds the allocation for a particular instance type. To check if an instance is throttled, SSH into the instance and run:

ethtool -S ens5 | grep "allowance"

If throttled, you'll see a non-zero value for some "allowance" item:

bw_in_allowance_exceeded: 0
bw_out_allowance_exceeded: 14368
pps_allowance_exceeded: 0
conntrack_allowance_exceeded: 0
linklocal_allowance_exceeded: 0

Dependencies

~102MB
~1.5M SLoC