+ Important Note
+
+In the example above, we use access keys & secrets to authenticate the user. This is not recommended for production use. There are a lot of ways to authenticate users in AWS and the "Best Practices & alternatives" page below will tell you the best way to authenticate. Since we're only covering access key & secret, we'll ignore these other methods. The AWS documentation is very good and you can find more information on the best practices & alternatives [here](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html).
+
+
+
+
+7. Skip the description page
+
+![user-perms.png](img/user-perms.png)
+
+8. Click on `Create access key`
+
+![Create Access Key](img/create-acces-key.png)
+
+Note down the `Access key ID` and `Secret access key` as you will need these to configure the signer.
+
+### Create a KMS Key
+1. Sign in to the AWS Management Console and open the KMS console at https://console.aws.amazon.com/kms.
+
+![KMS Key](img/kms-1.png)
+
+2. Choose `Create key` and fill in the following options:
+
+![Create Key](img/kms-2.png)
+
+- Key Type: `Asymmetric`: Since ethereum uses [ECDSA](https://en.wikipedia.org/wiki/Elliptic_Curve_Digital_Signature_Algorithm) keys, we need to use an asymmetric key.
+- Key Usage: `Sign and verify`: We will be using the key to sign transactions so we select this option.
+- Key Spec: `ECC_SECG_P256K1`: Ethereum uses the [`secp256k1`](https://en.bitcoin.it/wiki/Secp256k1) curve for transacting keys.
+
+Note: The advanced options are not required for this setup. You can leave them as default:
+
+![Advanced Options](img/kms-advanced.png)
+
+3. Choose `Next` and fill in the following options:
+
+![KMS Creation Step 2](img/kms-labels.png)
+
+- Alias: This is an alias that will be used to reference the key in the signer. The field is required but the value doesn't matter.
+- Description: This is a description that will be used to describe the key in the signer. This is only optional and only for your reference.
+- Tags: These are tags that will be used to describe the key in the signer. These are optional and only for your reference.
+
+4. Choose `Next` and define your key admin permissions. These are *not* required by the signer itself but are required to manage the key. You can use whatever you like here.
+
+![KMS Permissions](img/kms-permissons.png)
+
+5. Choose `Next` and define your user permissions. Here you should set your user as a user.
+
+![KMS User Permissions](img/kms-user-permissions.png)
+
+6. Choose `Next` and review your key settings. If everything looks good, choose `Finish`.
+
+![Review](img/review.png)
+
+7. Your key will be created and you will be redirected to the key details page. Note down the `Key ID` as you will need this to configure the signer.
+
+8. You will be redirected to the key details page. Click on the key alias to view the key details.
+
+![Key Details](img/key-details.png)
+
+9. Using Your Key (AWS)
+
+Now that you have your key and user setup, you can use the key to sign transactions. Since the `signerconfig` is used across multiple services, I'll be doing a generic example that just prints out the key.
+
+Note: this is a very basic example and you should not use this in production. You should store your key in a secure location and use it securely.
+
+
+`signer.yml`:
+```yaml
+signer_config:
+ type: "aws"
+ file: "/path/to/aws.yaml"
+```
+
+`aws.yaml`:
+```yaml
+region: us-east-1
+access_key: YOUR_ACCESS_KEY
+access_secret: YOUR_ACCESS_SECRET
+key_id: f15fa759-7c13-44eb-a868-e7388aa1387b # this will be the id from above.
+```
+
+This is obviously used in multiple services, so we've put together an example service that will print out the address of your key.
+
+You can run this locally by running:
+
+```bash
+brew install go # if on mac
+git clone https://github.com/synapsecns/sanguine --recurse-submodules
+cd sanguine/ethergo/examples/signer
+go run main.go --config=/path/to/signer.yml
+```
+
+We also have this available as a docker container for your convenience here:
+
+`ghcr.io/synapsecns/sanguine/signer-example:latest`
+
+## Setup with GCP CloudKMS
+
+This section is still in progress, please see [here](https://pkg.go.dev/github.com/synapsecns/sanguine/ethergo@v0.9.0/signer/signer#section-readme) for details.
+
+## Setup with a Local Signer
+
This section is still in progress, please see [here](https://pkg.go.dev/github.com/synapsecns/sanguine/ethergo@v0.9.0/signer/signer#section-readme) for details.
diff --git a/docs/bridge/docs/Services/img/create-acces-key.png b/docs/bridge/docs/Services/img/create-acces-key.png
new file mode 100644
index 0000000000..ba7754950d
Binary files /dev/null and b/docs/bridge/docs/Services/img/create-acces-key.png differ
diff --git a/docs/bridge/docs/Services/img/create-access-key.png b/docs/bridge/docs/Services/img/create-access-key.png
new file mode 100644
index 0000000000..f4cc9144fb
Binary files /dev/null and b/docs/bridge/docs/Services/img/create-access-key.png differ
diff --git a/docs/bridge/docs/Services/img/iam-dash.png b/docs/bridge/docs/Services/img/iam-dash.png
new file mode 100644
index 0000000000..63e5244286
Binary files /dev/null and b/docs/bridge/docs/Services/img/iam-dash.png differ
diff --git a/docs/bridge/docs/Services/img/iam-preview-user.png b/docs/bridge/docs/Services/img/iam-preview-user.png
new file mode 100644
index 0000000000..4ab2183357
Binary files /dev/null and b/docs/bridge/docs/Services/img/iam-preview-user.png differ
diff --git a/docs/bridge/docs/Services/img/key-details.png b/docs/bridge/docs/Services/img/key-details.png
new file mode 100644
index 0000000000..8e76871998
Binary files /dev/null and b/docs/bridge/docs/Services/img/key-details.png differ
diff --git a/docs/bridge/docs/Services/img/kms-1.png b/docs/bridge/docs/Services/img/kms-1.png
new file mode 100644
index 0000000000..542887787f
Binary files /dev/null and b/docs/bridge/docs/Services/img/kms-1.png differ
diff --git a/docs/bridge/docs/Services/img/kms-2.png b/docs/bridge/docs/Services/img/kms-2.png
new file mode 100644
index 0000000000..7944a8bf05
Binary files /dev/null and b/docs/bridge/docs/Services/img/kms-2.png differ
diff --git a/docs/bridge/docs/Services/img/kms-advanced.png b/docs/bridge/docs/Services/img/kms-advanced.png
new file mode 100644
index 0000000000..ec963d87a7
Binary files /dev/null and b/docs/bridge/docs/Services/img/kms-advanced.png differ
diff --git a/docs/bridge/docs/Services/img/kms-labels.png b/docs/bridge/docs/Services/img/kms-labels.png
new file mode 100644
index 0000000000..5ea8b503ef
Binary files /dev/null and b/docs/bridge/docs/Services/img/kms-labels.png differ
diff --git a/docs/bridge/docs/Services/img/kms-permissons.png b/docs/bridge/docs/Services/img/kms-permissons.png
new file mode 100644
index 0000000000..350aec1a42
Binary files /dev/null and b/docs/bridge/docs/Services/img/kms-permissons.png differ
diff --git a/docs/bridge/docs/Services/img/kms-user-permissions.png b/docs/bridge/docs/Services/img/kms-user-permissions.png
new file mode 100644
index 0000000000..6518b3531a
Binary files /dev/null and b/docs/bridge/docs/Services/img/kms-user-permissions.png differ
diff --git a/docs/bridge/docs/Services/img/kms-user.png b/docs/bridge/docs/Services/img/kms-user.png
new file mode 100644
index 0000000000..e64369d722
Binary files /dev/null and b/docs/bridge/docs/Services/img/kms-user.png differ
diff --git a/docs/bridge/docs/Services/img/perms.png b/docs/bridge/docs/Services/img/perms.png
new file mode 100644
index 0000000000..9396d92bed
Binary files /dev/null and b/docs/bridge/docs/Services/img/perms.png differ
diff --git a/docs/bridge/docs/Services/img/review.png b/docs/bridge/docs/Services/img/review.png
new file mode 100644
index 0000000000..21049856fe
Binary files /dev/null and b/docs/bridge/docs/Services/img/review.png differ
diff --git a/docs/bridge/docs/Services/img/user-list.png b/docs/bridge/docs/Services/img/user-list.png
new file mode 100644
index 0000000000..180071ec6b
Binary files /dev/null and b/docs/bridge/docs/Services/img/user-list.png differ
diff --git a/docs/bridge/docs/Services/img/user-perms.png b/docs/bridge/docs/Services/img/user-perms.png
new file mode 100644
index 0000000000..ca133aa275
Binary files /dev/null and b/docs/bridge/docs/Services/img/user-perms.png differ
diff --git a/ethergo/.goreleaser.yml b/ethergo/.goreleaser.yml
index 6e7dc9ea5f..984e592e77 100644
--- a/ethergo/.goreleaser.yml
+++ b/ethergo/.goreleaser.yml
@@ -5,7 +5,46 @@ monorepo:
dir: ethergo/
builds:
- - skip: true
+ # Linux AMD64
+ - id: signer-example
+ binary: api
+ ldflags:
+ # We need to build a static binary because we are building in a glibc based system and running in a musl container
+ - -s -w -extldflags '-static'
+ # required workaround for https://github.com/Shopify/sarama/issues/2206
+ # See: https://github.com/golang/go/issues/35067#issuecomment-544805311 because we're statically compiling,
+ # without forcing netgo, we use the cgo resolver which will not work for .local (a canonical tld in kubernetes)
+ # the other way to resolve this would be to modify the nsswitch.conf in the container, but that's a bit less clean.
+ # osusergo was included as a recommendation here: https://github.com/kubernetes/kubernetes/pull/114225#issuecomment-1348920040
+ tags:
+ - netgo
+ - osusergo
+ env:
+ - CC=gcc
+ - CXX=g++
+ main: examples/signer-example/main.go
+ goos:
+ - linux
+ goarch:
+ - amd64
+
+dockers:
+ # Docker AMD64
+ - goos: linux
+ goarch: amd64
+ image_templates:
+ - 'ghcr.io/synapsecns/sanguine/signer-example:latest'
+ - 'ghcr.io/synapsecns/sanguine/signer-example:{{ .FullCommit }}'
+ - 'ghcr.io/synapsecns/sanguine/signer-example:{{ .Tag }}'
+ build_flag_templates:
+ - '--label=org.opencontainers.image.created={{.Date}}'
+ - '--label=org.opencontainers.image.name={{.ProjectName}}'
+ - '--label=org.opencontainers.image.revision={{.FullCommit}}'
+ - '--label=org.opencontainers.image.version={{.Version}}'
+ - '--label=org.opencontainers.image.source={{.GitURL}}'
+ dockerfile: ../docker/signer-example.Dockerfile
+ ids:
+ - signer-example
# add a source archive at release time
source:
diff --git a/ethergo/README.md b/ethergo/README.md
index 02cfa8a70b..1545e86832 100644
--- a/ethergo/README.md
+++ b/ethergo/README.md
@@ -16,7 +16,7 @@ Some key components of Ethergo include:
- **Manager**: The manager is responsible for handling contract deployments.
- **Signer**: Ethergo offers signing and transaction submission utilities, with various adapters for signing transactions and handling race conditions with nonces. It also includes a wallet interface capable of importing keys from seed phrases, private keys, and mnemonics.
- To see a working example of Ethergo in action, refer to the [`example`](./example) folder, which provides a complete demonstration of how to use the deployer and manager components. Please note that the APIs are subject to change.
+ To see a working example of Ethergo in action, refer to the [`example`](./examples) folder, which provides a complete demonstration of how to use the deployer and manager components. Please note that the APIs are subject to change.
## Directory Structure
@@ -36,7 +36,7 @@ root
│ ├──