-
Notifications
You must be signed in to change notification settings - Fork 734
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'main' into joel/add-slashing-params-vaa
- Loading branch information
Showing
93 changed files
with
10,221 additions
and
2,078 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
# There's nothing special about this version, it is simply the `latest` as of | ||
# the creation date of this file. | ||
FROM alpine:3.20.3@sha256:1e42bbe2508154c9126d48c2b8a75420c3544343bf86fd041fb7527e017a4b4a | ||
|
||
RUN apk add --no-cache inotify-tools | ||
|
||
COPY monitor.sh /monitor.sh | ||
RUN chmod +x /monitor.sh | ||
|
||
CMD ["/monitor.sh"] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
# These versions are pinned to match the Dockerfile in the `ethereum/` | ||
# directory. Otherwise, there is nothing special about them and they can be | ||
# updated alongside the other Dockerfile. | ||
FROM --platform=linux/amd64 ghcr.io/foundry-rs/foundry:nightly-55bf41564f605cae3ca4c95ac5d468b1f14447f9@sha256:8c15d322da81a6deaf827222e173f3f81c653136a3518d5eeb41250a0f2e17ea as foundry | ||
# node is required to install Foundry | ||
FROM node:19.6.1-slim@sha256:a1ba21bf0c92931d02a8416f0a54daad66cb36a85d2b73af9d73b044f5f57cfc | ||
|
||
COPY --from=foundry /usr/local/bin/cast /bin/cast | ||
|
||
COPY transfer-verifier-test.sh /transfer-verifier-test.sh | ||
RUN chmod +x /transfer-verifier-test.sh | ||
|
||
CMD ["/transfer-verifier-test.sh"] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,64 @@ | ||
# Transfer Verifier -- Integration Tests | ||
|
||
## EVM Integration Tests | ||
|
||
### Overview | ||
|
||
The Transfer Verifier tests involve interacting with the local ethereum devnet defined by the Tilt set-up in this repository. | ||
|
||
The basic idea is as follows: | ||
* Interact with the local Ethereum testnet. This should already have important pieces such as the Token Bridge and Core Bridge deployed. | ||
* Use `cast` from the foundry tool set to simulate malicious interactions with the Token Bridge. | ||
* Transfer Verifier detects the malicious messages and emits errors about what went wrong. | ||
* The error messages are logged to a file | ||
* A "monitor" script is used to detect the expected error message, waiting until the file is written to | ||
* If the monitor script sees the expected error message in the error log, it terminates | ||
|
||
## Components | ||
|
||
### Scripts | ||
|
||
#### transfer-verifier-test.sh | ||
|
||
Contains the `cast` commands that simulate malicious interactions with the Token Bridge and Core Bridge. It is able to broadcast | ||
transactions to the `anvil` instance that powers the Ethereum testnet while being able to impersonate arbitrary senders. | ||
|
||
This lets us perform actions that otherwise should be impossible, like causing a Publish Message event to be emitted from the Core Bridge | ||
without a corresponding deposit or transfer into the Token Bridge. | ||
|
||
#### monitor.sh | ||
|
||
A bash script that monitors the error log file for a specific error pattern. It runs in an infinite loop so it will | ||
not exit until the error pattern is detected. | ||
|
||
The error pattern is defined in `wormhole/devnet/tx-verifier.yaml` and matches an error string in the Transfer Verifier package. | ||
|
||
Once the pattern is detected, a success message is logged to a status file. Currently this is unused but this set-up | ||
could be modified to detect that this script has written the success message to figure out whether the whole test completed successfully. | ||
|
||
### Pods | ||
|
||
The files detailed below each have a primary role and are responsible for running one of the main pieces of the test functionality: | ||
|
||
* The Transfer Verifier binary which monitors the state of the local Ethereum network | ||
* The integration test script that generates activity that the Transfer Verifier classifies as malicious | ||
* The monitor script which ensures that the Transfer Verifier successfully | ||
detected the error we expected, and signals to Tilt that the overall test has | ||
succeeded | ||
|
||
#### devnet/tx-verifier.yaml | ||
|
||
Runs the Transfer Verifier binary and redirects its STDERR to the error log file. This allows the output of the binary | ||
to be monitored by `monitor.sh`. | ||
|
||
#### devnet/tx-verifier-test.yaml | ||
|
||
Runs the `transfer-verifier-test.sh` script which simulates malicious Token Bridge activity. Defines the RPC URL used | ||
by that bash script, which corresponds to the `anvil` instance created in the Ethereum devnet. | ||
|
||
#### devnet/tx-verifier-monitor.yaml | ||
|
||
Defines the expected error string that should be emitted by the Transfer Verifier code assuming that it successfully recognizes | ||
the malicious Token Bridge activity simulated by the `cast` commands in `transfer-verifier-test.sh`. | ||
|
||
It also defines a path to the log file that contains this string. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
#!/bin/sh | ||
|
||
log_file="${ERROR_LOG_PATH:-/logs/error.log}" | ||
error_pattern="${ERROR_PATTERN:-ERROR}" | ||
status_file="/logs/status" | ||
|
||
# Wait for log file to exist and be non-empty | ||
while [ ! -s "${log_file}" ]; do | ||
echo "Waiting for ${log_file} to be created and contain data..." | ||
sleep 5 | ||
done | ||
|
||
# Initialize status | ||
echo "RUNNING" > "$status_file" | ||
echo "Monitoring file '${log_file}' for error pattern: '${error_pattern}'" | ||
|
||
# Watch for changes in the log file. If we find the error pattern that means we have | ||
# succeeded. (Transfer verifier should correctly detect errors. | ||
inotifywait -m -e modify "${log_file}" | while read -r directory events filename; do | ||
if grep -q "$error_pattern" "$log_file"; then | ||
echo "SUCCESS" > "$status_file" | ||
echo "Found error pattern. Exiting." | ||
exit 0 | ||
fi | ||
done |
Oops, something went wrong.