Self-hosted Arweave bundler for agentsystems-notary. Receives signed ANS-104 DataItems from SDK clients, batches them via SQS, and submits multi-item bundles as L1 Arweave transactions.
Client (SDK) → API Gateway → Lambda (verify) → SQS → Lambda (bundle + submit)
↓ (on repeated failure)
DLQ
- AWS account
- GitHub account
Create a deployer IAM user:
- Go to IAM > Users > Create user. Name it
notary-arweave-bundler-deployer. Click through to create the user. - Open the user, go to Permissions > Add permissions > Create inline policy. Switch to the JSON tab, paste the contents of
iam-policy.jsonfrom this repo, and name itdeployer. - Go to Security credentials > Create access key. Select Application running outside AWS. Note the access key ID and secret.
Create a KMS signing key:
- Go to KMS > Customer managed keys > Create key.
- Key type: Asymmetric. Key usage: Sign and verify. Key spec: RSA_4096. Click through to create.
- Note the key ARN (e.g.
arn:aws:kms:us-east-1:123456789012:key/abcd-1234-...).
Create an API key (optional):
- To require clients to authenticate with an
x-api-keyheader, go to Secrets Manager > Store a new secret. Select Other type of secret and enter a random API key string. Note the ARN. Skip this step to leave the endpoint open.
- Fork this repo on GitHub.
- In your fork, go to Settings > Secrets and variables > Actions.
- Under the Secrets tab, add these repository secrets:
| Secret | Value |
|---|---|
AWS_ACCESS_KEY_ID |
From step 1.3 |
AWS_SECRET_ACCESS_KEY |
From step 1.3 |
- Under the Variables tab, add these repository variables:
| Variable | Value |
|---|---|
KMS_KEY_ARN |
From step 1.6 |
API_KEY_SECRET_ARN |
From step 1.7 (optional — requires clients to pass an x-api-key header; without it the endpoint is open to anyone) |
RATE_LIMIT_PER_HOUR |
Max items per hour (optional — caps total submissions across all users; useful for public demo instances to limit abuse) |
- Go to Actions > Release > Run workflow.
- Enter a version (e.g.
0.1.0) and click Run workflow. - The workflow builds the image, pushes to GHCR + ECR, runs
sam deployto create the full stack, and creates a GitHub release. - When the release completes, open the workflow run. Your API Gateway endpoint URL and Arweave address are in the Summary tab under Deploy Summary.
Send AR to the Arweave address shown in the workflow summary.
Configure the agentsystems-notary SDK (>= 0.2.0) to use your bundler:
from agentsystems_notary import NotaryCore
notary = NotaryCore(
bundler_url="https://XXXXXXXXXX.execute-api.us-east-1.amazonaws.com",
bundler_api_key="...", # omit if no API key
)