diff --git a/.docker/service-cid b/.docker/service-cid
new file mode 100644
index 00000000..71ff62dd
--- /dev/null
+++ b/.docker/service-cid
@@ -0,0 +1 @@
+QmZUK6LA31b6vH66YbbxNBTeLmnogxRhRK6vkMkeRKuK1C
\ No newline at end of file
diff --git a/.env.example b/.env.example
index 1a4de5b5..cc03e7b3 100644
--- a/.env.example
+++ b/.env.example
@@ -1,9 +1,8 @@
DEPLOY_ENV=LOCAL
CHAIN_ID=31337 # 31337 for local, 11155111 for Sepolia
-LOCAL_ETHEREUM_RPC_URL=http://localhost:8545
-# RPC_URL=https://ethereum-sepolia-rpc.publicnode.com/
-# TESTNET_RPC_URL=https://ethereum-sepolia-rpc.publicnode.com/
+RPC_URL=http://localhost:8545
+# RPC_URL=https://ethereum-sepolia-rpc.publicnode.com/ # Sepolia testnet
# this key requires funds. used as the admin / deployer of contracts and core contracts.
FUNDED_KEY=0x323ef3a895cad9fcb625aa859953bba2812a64b39f2fd0b857f4757f0e896858
diff --git a/.github/workflows/contracts.yml b/.github/workflows/contracts.yml
index 43489876..18d81258 100644
--- a/.github/workflows/contracts.yml
+++ b/.github/workflows/contracts.yml
@@ -18,6 +18,9 @@ jobs:
with:
node-version: 21
+ - uses: pnpm/action-setup@v4
+ name: Install pnpm
+
- name: Install deps
run: make setup
diff --git a/.gitignore b/.gitignore
index 83ac1842..6fdcf67c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -20,3 +20,4 @@ infra/*
# Tools
**/.claude/settings.local.json
+.task/remote/
diff --git a/.taskrc.yml b/.taskrc.yml
new file mode 100644
index 00000000..ecaa20d6
--- /dev/null
+++ b/.taskrc.yml
@@ -0,0 +1,7 @@
+concurrency: 4
+
+remote:
+ insecure: true
+
+experiments:
+ REMOTE_TASKFILES: 1
diff --git a/Cargo.lock b/Cargo.lock
index 7a17c268..4b99abb9 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -17,6 +17,20 @@ version = "2.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627"
+[[package]]
+name = "aggregator"
+version = "1.0.0"
+dependencies = [
+ "alloy-network",
+ "alloy-primitives",
+ "alloy-provider",
+ "serde",
+ "serde_json",
+ "wavs-wasi-utils",
+ "wit-bindgen-rt 0.44.0",
+ "wstd",
+]
+
[[package]]
name = "allocator-api2"
version = "0.2.21"
@@ -239,6 +253,7 @@ dependencies = [
"alloy-network-primitives",
"alloy-primitives",
"alloy-rpc-client",
+ "alloy-rpc-types",
"alloy-rpc-types-eth",
"alloy-signer",
"alloy-sol-types",
@@ -309,6 +324,17 @@ dependencies = [
"wasmtimer",
]
+[[package]]
+name = "alloy-rpc-types"
+version = "1.0.37"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e9e131624d08a25cfc40557041e7dc42e1182fa1153e7592d120f769a1edce56"
+dependencies = [
+ "alloy-primitives",
+ "alloy-serde",
+ "serde",
+]
+
[[package]]
name = "alloy-rpc-types-any"
version = "1.0.37"
diff --git a/Cargo.toml b/Cargo.toml
index 5f19d4aa..0d8b5a26 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -1,5 +1,5 @@
[workspace]
-members = ["components/evm-price-oracle"]
+members = ["components/evm-price-oracle", "components/aggregator"]
resolver = "2"
[workspace.package]
diff --git a/Makefile b/Makefile
index 619e71af..00f563b5 100644
--- a/Makefile
+++ b/Makefile
@@ -8,7 +8,7 @@ CARGO=cargo
INPUT_DATA?=``
COMPONENT_FILENAME?=evm_price_oracle.wasm
CREDENTIAL?=""
-DOCKER_IMAGE?=ghcr.io/lay3rlabs/wavs:1.4.1
+DOCKER_IMAGE?=ghcr.io/lay3rlabs/wavs:1.5.1
MIDDLEWARE_DOCKER_IMAGE?=ghcr.io/lay3rlabs/wavs-middleware:0.5.0-beta.10
IPFS_ENDPOINT?=http://127.0.0.1:5001
RPC_URL?=http://127.0.0.1:8545
@@ -91,7 +91,7 @@ setup: check-requirements
@echo " âĸ Installing Forge dependencies..."
@forge install > /dev/null 2>&1
@echo " âĸ Installing npm dependencies..."
- @npm install > /dev/null 2>&1
+ @pnpm install > /dev/null 2>&1
@echo "â
Dependencies installed"
## start-all-local: starting anvil and core services (like IPFS for example)
diff --git a/README.md b/README.md
index ec23dde9..3515da2d 100644
--- a/README.md
+++ b/README.md
@@ -9,143 +9,24 @@ A template for developing WebAssembly AVS applications using Rust and Solidity,
* [Go](./components/golang-evm-price-oracle/README.md)
* [JS / TS](./components/js-evm-price-oracle/README.md)
-## System Requirements
+## Usage
-
-Core (Docker, Compose, Make, JQ, Node v21+, Foundry)
+### 1. System setup
-## Ubuntu Base
-- **Linux**: `sudo apt update && sudo apt install build-essential`
+Follow the instructions in [README_SETUP.md](./README_SETUP.md) to ensure your system is set up with the necessary tools and dependencies.
-### Docker
-
-If prompted, remove container with `sudo apt remove containerd.io`.
-
-- **MacOS**: `brew install --cask docker`
-- **Linux**: `sudo apt -y install docker.io`
-- **Windows WSL**: [docker desktop wsl](https://docs.docker.com/desktop/wsl/#turn-on-docker-desktop-wsl-2) & `sudo chmod 666 /var/run/docker.sock`
-- [Docker Documentation](https://docs.docker.com/get-started/get-docker/)
-
-> **Note:** `sudo` is only used for Docker-related commands in this project. If you prefer not to use sudo with Docker, you can add your user to the Docker group with:
-> ```bash
-> sudo groupadd docker && sudo usermod -aG docker $USER
-> ```
-> After adding yourself to the group, log out and back in for changes to take effect.
-
-### Docker Compose
-- **MacOS**: Already installed with Docker installer
-> `sudo apt remove docker-compose-plugin` may be required if you get a `dpkg` error
-- **Linux + Windows WSL**: `sudo apt-get install docker-compose-v2`
-- [Compose Documentation](https://docs.docker.com/compose/)
-
-### Make
-- **MacOS**: `brew install make`
-- **Linux + Windows WSL**: `sudo apt -y install make`
-- [Make Documentation](https://www.gnu.org/software/make/manual/make.html)
-
-### JQ
-- **MacOS**: `brew install jq`
-- **Linux + Windows WSL**: `sudo apt -y install jq`
-- [JQ Documentation](https://jqlang.org/download/)
-
-### Node.js
-- **Required Version**: v21+
-- [Installation via NVM](https://github.com/nvm-sh/nvm?tab=readme-ov-file#installing-and-updating)
+Then install dependencies:
```bash
-curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash
-nvm install --lts
-```
-
-### Foundry
-```bash docci-ignore
-curl -L https://foundry.paradigm.xyz | bash && $HOME/.foundry/bin/foundryup
+# Install packages (pnpm & forge submodules)
+task -y setup
```
-
-
-
-
-Rust v1.85+
+### 2. Solidity
-### Rust Installation
-
-```bash docci-ignore
-curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
-
-rustup toolchain install stable
-rustup target add wasm32-wasip2
-```
+This project supports [pnpm packages](./package.json), you can add git submodules if you need.
-### Upgrade Rust
-
-```bash docci-ignore
-# Remove old targets if present
-rustup target remove wasm32-wasi || true
-rustup target remove wasm32-wasip1 || true
-
-# Update and add required target
-rustup update stable
-rustup target add wasm32-wasip2
-```
-
-
-
-
-Cargo Components
-
-### Install Cargo Components
-
-On Ubuntu LTS, if you later encounter errors like:
-
-```bash
-wkg: /lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.38' not found (required by wkg)
-wkg: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.39' not found (required by wkg)
-```
-
-If GLIB is out of date. Consider updating your system using:
```bash
-sudo do-release-upgrade
-```
-
-
-```bash docci-ignore
-# Install required cargo components
-# https://github.com/bytecodealliance/cargo-component#installation
-cargo install cargo-binstall
-cargo binstall cargo-component wasm-tools warg-cli wkg --locked --no-confirm --force
-
-# Configure default registry
-# Found at: $HOME/.config/wasm-pkg/config.toml
-wkg config --default-registry wa.dev
-
-# Allow publishing to a registry
-#
-# if WSL: `warg config --keyring-backend linux-keyutils`
-warg key new
-```
-
-
-
-## Create Project
-
-```bash docci-ignore
-# if foundry is not installed:
-# `curl -L https://foundry.paradigm.xyz | bash && $HOME/.foundry/bin/foundryup`
-forge init --template Lay3rLabs/wavs-foundry-template my-wavs --branch main
-```
-
-> \[!TIP]
-> Run `make help` to see all available commands and environment variable overrides.
-
-### Solidity
-
-Install the required packages to build the Solidity contracts. This project supports [npm packages](./package.json), you can add git submodules if you need.
-
-```bash
-# Install packages (npm & submodules)
-task setup
-
# Build the contracts
task build:forge
@@ -153,9 +34,9 @@ task build:forge
task test
```
-## Build WASI components
+### 3. Build WASI components
-Now build the WASI components into the `compiled` output directory.
+Build the WASI components into the `compiled` output directory.
> \[!WARNING]
> If you get: `error: no registry configured for namespace "wavs"`
@@ -169,21 +50,15 @@ Now build the WASI components into the `compiled` output directory.
```bash
# Remove `WASI_BUILD_DIR` to build all components.
-WASI_BUILD_DIR=components/evm-price-oracle task build:wasi
+WASI_BUILD_DIR=components/evm-price-oracle task -y build:wasi
```
-## Testing the Price Feed Component Locally
+### 4. Test the component locally
-How to test the component locally for business logic validation before on-chain deployment. An ID of 1 for the oracle component is Bitcoin.
+Validate business logic before on-chain deployment. An ID of `1` is Bitcoin.
```bash
-# Rust components
INPUT_DATA="1" COMPONENT_FILENAME=evm_price_oracle.wasm task wasi:exec
-
-
-# Golang & JS (re-added in the future since v1 refactor)
-# INPUT_DATA="1" COMPONENT_FILENAME=js_evm_price_oracle.wasm task wasi:exec
-# INPUT_DATA="1" COMPONENT_FILENAME=golang_evm_price_oracle.wasm task wasi:exec-fixed
```
Expected output:
@@ -202,103 +77,47 @@ Result (utf8): {"symbol":"BTC","timestamp":"2025-10-01T18:12:11","price":116999.
Ordering: 0
```
-## WAVS
+### 5. Start backend services
-> \[!NOTE]
-> If you are running on a Mac with an ARM chip, you will need to do the following:
-> - Set up Rosetta: `softwareupdate --install-rosetta`
-> - Enable Rosetta (Docker Desktop: Settings -> General -> enable "Use Rosetta for x86_64/amd64 emulation on Apple Silicon")
->
-> Configure one of the following networking:
-> - Docker Desktop: Settings -> Resources -> Network -> 'Enable Host Networking'
-> - `brew install chipmk/tap/docker-mac-net-connect && sudo brew services start chipmk/tap/docker-mac-net-connect`
-
-## Start Environment
-
-Start an Ethereum node (anvil), the WAVS service, and deploy [EigenLayer](https://www.eigenlayer.xyz/) contracts to the local network.
-
-### Enable Telemetry (optional)
-
-Set Log Level:
- - Open the `.env` file.
- - Set the `log_level` variable for wavs to debug to ensure detailed logs are captured.
-
-> \[!NOTE]
-To see details on how to access both traces and metrics, please check out [Telemetry Documentation](telemetry/telemetry.md).
-
-### Start the backend
+> [!NOTE]
+> This must remain running in your terminal. Use new terminals to run other commands. You can stop the services with `ctrl+c`. Some terminals require pressing it twice.
```bash docci-background docci-delay-after=5
-# This must remain running in your terminal. Use another terminal to run other commands.
-# You can stop the services with `ctrl+c`. Some MacOS terminals require pressing it twice.
+# Create a .env file from the example
cp .env.example .env
-# update the .env for either LOCAL or TESTNET
-
-# Starts anvil + IPFS, WARG, Jaeger, and prometheus.
-task start-all-local
+# Starts anvil + IPFS and WARG registry.
+task -y start-all-local
```
-## WAVS Deployment Script
+### 6. Deploy and run WAVS
-This script automates the complete WAVS deployment process in a single command:
-
-### What It Does
-
-1. **Build Check**: Rebuilds WebAssembly component if changes detected
-2. **Create Deployer**: Sets up and funds deployer account
-3. **Deploy Eigenlayer**: Deploys service manager contract
-4. **Deploy Contracts**: Creates trigger and submission contracts
-5. **Upload Component**: Publishes WebAssembly component to WASI registry
-6. **Build Service**: Creates service configuration
-7. **Upload to IPFS**: Stores service metadata on IPFS
-8. **Set Service URI**: Registers IPFS URI with service manager
-9. **Start Aggregator**: Launches result aggregation service
-10. **Start WAVS**: Launches operator service with readiness check
-11. **Deploy Service**: Configures WAVS to monitor trigger events
-12. **Generate Keys**: Creates operator signing keys
-13. **Register Operator**: Registers with Eigenlayer AVS (0.001 ETH stake)
-14. **Verify Registration**: Confirms operator registration
-
-### Result
-
-A fully operational WAVS service that monitors blockchain events, executes WebAssembly components, and submits verified results on-chain.
+This script automates the complete WAVS deployment process, including contract deployments, component uploads, and operator registration, in a single command:
```bash
-export RPC_URL=$(task get-rpc)
-export AGGREGATOR_URL=http://127.0.0.1:8001
-
-# deploys contracts & components (( task deploy:full ))
-# If you do not set the PoA operator you will get `ServiceManagerValidateAnyRevert("0x3dda1739")`
-bash ./script/deploy-script.sh && task deploy:single-operator-poa-local
+task deploy-full
```
+### 7. Trigger the service
-## Trigger the Service
-
-Anyone can now call the [trigger contract](./src/contracts/WavsTrigger.sol) which emits the trigger event WAVS is watching for from the previous step. WAVS then calls the service and saves the result on-chain.
+Anyone can now call the [trigger contract](./src/contracts/WavsTrigger.sol) to emit the trigger event WAVS is watching for. WAVS then calls the service and saves the result on-chain.
```bash
-# Get the trigger address from previous Deploy forge script
+# Get the trigger address from the deployment summary
export SERVICE_TRIGGER_ADDR=`jq -r '.evmpriceoracle_trigger.deployedTo' .docker/deployment_summary.json`
-# Execute on the trigger contract, WAVS will pick this up and submit the result
-# on chain via the operators.
export RPC_URL=`task get-rpc`
export FUNDED_KEY=`task config:funded-key`
-# Rust & Typescript - request BTC from CMC
+# Request BTC price from CoinMarketCap (ID=1)
export INPUT_DATA=`cast abi-encode "addTrigger(string)" "1"`
-# Golang uses the raw value (TODO: future)
-# export INPUT_DATA="1"
-
forge script ./src/script/Trigger.s.sol ${SERVICE_TRIGGER_ADDR} ${INPUT_DATA} --sig 'run(string,string)' --rpc-url ${RPC_URL} --broadcast --private-key ${FUNDED_KEY}
```
-## Show the result
+### 8. Show the result
-Query the latest submission contract id from the previous request made.
+Query the latest submission from the previous request.
```bash docci-delay-per-cmd=2 docci-output-contains="1"
RPC_URL=${RPC_URL} forge script ./src/script/ShowResult.s.sol ${SERVICE_TRIGGER_ADDR} --sig 'trigger(string)' --rpc-url ${RPC_URL}
@@ -318,7 +137,7 @@ This template contains rulefiles for building components with Claude Code and Cu
To spin up a sandboxed instance of [Claude Code](https://docs.anthropic.com/en/docs/agents-and-tools/claude-code/overview) in a Docker container that only has access to this project's files, run the following command:
```bash docci-ignore
-npm run claude-code
+pnpm run claude-code
# or with no restrictions (--dangerously-skip-permissions)
-npm run claude-code:unrestricted
+pnpm run claude-code:unrestricted
```
diff --git a/README_SETUP.md b/README_SETUP.md
new file mode 100644
index 00000000..c1c1f600
--- /dev/null
+++ b/README_SETUP.md
@@ -0,0 +1,128 @@
+# System Requirements
+
+### Linux
+
+If on Linux (e.g. Ubuntu), install the essentials:
+
+```bash
+sudo apt update && sudo apt install build-essential
+```
+
+## Docker
+
+If prompted, remove container with `sudo apt remove containerd.io`.
+
+- **MacOS**: `brew install --cask docker`
+- **Linux**: `sudo apt -y install docker.io`
+- **Windows WSL**: [docker desktop wsl](https://docs.docker.com/desktop/wsl/#turn-on-docker-desktop-wsl-2) & `sudo chmod 666 /var/run/docker.sock`
+- [Docker Documentation](https://docs.docker.com/get-started/get-docker/)
+
+> **Note:** `sudo` is only used for Docker-related commands in this project. If you prefer not to use sudo with Docker, you can add your user to the Docker group with:
+>
+> ```bash
+> sudo groupadd docker && sudo usermod -aG docker $USER
+> ```
+>
+> After adding yourself to the group, log out and back in for changes to take effect.
+
+> [!NOTE]
+> If you are running on a Mac with an ARM chip, you will need to do the following:
+>
+> - Set up Rosetta: `softwareupdate --install-rosetta`
+> - Enable Rosetta (Docker Desktop: Settings -> General -> enable "Use Rosetta for x86_64/amd64 emulation on Apple Silicon")
+>
+> Configure one of the following networking:
+>
+> - Docker Desktop: Settings -> Resources -> Network -> 'Enable Host Networking'
+> - `brew install chipmk/tap/docker-mac-net-connect && sudo brew services start chipmk/tap/docker-mac-net-connect`
+
+## Docker Compose
+
+- **MacOS**: Already installed with Docker installer
+ > `sudo apt remove docker-compose-plugin` may be required if you get a `dpkg` error
+- **Linux + Windows WSL**: `sudo apt-get install docker-compose-v2`
+- [Compose Documentation](https://docs.docker.com/compose/)
+
+## Task (Taskfile)
+
+- **MacOS**: `brew install go-task`
+- **Linux + Windows WSL**: `npm install -g @go-task/cli`
+- [Task Documentation](https://taskfile.dev/)
+
+## JQ
+
+- **MacOS**: `brew install jq`
+- **Linux + Windows WSL**: `sudo apt -y install jq`
+- [JQ Documentation](https://jqlang.org/download/)
+
+## Node.js
+
+- **Required Version**: v21+
+- [Installation via NVM](https://github.com/nvm-sh/nvm?tab=readme-ov-file#installing-and-updating)
+
+```bash
+curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash
+nvm install --lts
+```
+
+## pnpm
+
+Install the latest version of pnpm: https://pnpm.io/installation
+
+## Foundry
+
+```bash docci-ignore
+curl -L https://foundry.paradigm.xyz | bash && $HOME/.foundry/bin/foundryup
+```
+
+## Rust v1.85+
+
+```bash docci-ignore
+curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
+
+rustup toolchain install stable
+rustup target add wasm32-wasip2
+```
+
+### Upgrade Rust
+
+```bash docci-ignore
+# Remove old targets if present
+rustup target remove wasm32-wasi || true
+rustup target remove wasm32-wasip1 || true
+
+# Update and add required target
+rustup update stable
+rustup target add wasm32-wasip2
+```
+
+## Cargo Components
+
+```bash docci-ignore
+# Install required cargo components
+# https://github.com/bytecodealliance/cargo-component#installation
+cargo install cargo-binstall
+cargo binstall cargo-component wasm-tools warg-cli wkg --locked --no-confirm --force
+
+# Configure default registry
+# Found at: $HOME/.config/wasm-pkg/config.toml
+wkg config --default-registry wa.dev
+
+# Allow publishing to a registry
+#
+# if WSL: `warg config --keyring-backend linux-keyutils`
+warg key new
+```
+
+On Ubuntu LTS, if you later encounter errors like:
+
+```bash
+wkg: /lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.38' not found (required by wkg)
+wkg: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.39' not found (required by wkg)
+```
+
+If GLIB is out of date. Consider updating your system using:
+
+```bash
+sudo do-release-upgrade
+```
diff --git a/Taskfile.yml b/Taskfile.yml
index 3073a55d..60395ccf 100644
--- a/Taskfile.yml
+++ b/Taskfile.yml
@@ -7,19 +7,25 @@ silent: true
dotenv: [".env"]
includes:
+ # Upstream common taskfiles (from wavs-taskfiles repo)
+ docker: https://raw.githubusercontent.com/Lay3rLabs/wavs-taskfiles/main/base/docker.yml
+ operator: https://raw.githubusercontent.com/Lay3rLabs/wavs-taskfiles/main/base/poa-operator.yml
+ wasi: https://raw.githubusercontent.com/Lay3rLabs/wavs-taskfiles/main/base/wasi.yml
+ core:
+ taskfile: https://raw.githubusercontent.com/Lay3rLabs/wavs-taskfiles/main/base/core.yml
+ flatten: true
+
+ # Project-specific taskfiles (with customizations)
build: ./taskfile/build.yml
- wasi: ./taskfile/wasi.yml
- docker: ./taskfile/docker.yml
deploy: ./taskfile/deploy.yml
services: ./taskfile/services.yml
- operator: ./taskfile/operator.yml
env:
taskfile: ./taskfile/env.yml
flatten: true
vars:
# Docker configuration
- DOCKER_IMAGE: '{{.DOCKER_IMAGE | default "ghcr.io/lay3rlabs/wavs:1.4.1"}}'
+ DOCKER_IMAGE: '{{.DOCKER_IMAGE | default "ghcr.io/lay3rlabs/wavs:1.5.1"}}'
MIDDLEWARE_DOCKER_IMAGE: '{{.MIDDLEWARE_DOCKER_IMAGE | default "ghcr.io/lay3rlabs/wavs-middleware:0.5.0-beta.10"}}'
# Check if user is in docker group to determine if sudo is needed
@@ -29,8 +35,8 @@ vars:
# Default endpoints
RPC_URL: '{{.RPC_URL | default "http://127.0.0.1:8545"}}'
- WAVS_ENDPOINT: '{{.WAVS_ENDPOINT | default "http://127.0.0.1:8000"}}'
- AGGREGATOR_URL: '{{.AGGREGATOR_URL | default "http://localhost:8001"}}'
+ WAVS_ENDPOINT: '{{.WAVS_ENDPOINT | default "http://127.0.0.1:8041"}}'
+ AGGREGATOR_URL: '{{.AGGREGATOR_URL | default "http://127.0.0.1:8040"}}'
IPFS_ENDPOINT: '{{.IPFS_ENDPOINT | default "http://127.0.0.1:5001"}}'
IPFS_GATEWAY: '{{.IPFS_GATEWAY | default "http://127.0.0.1:8080/ipfs/"}}'
@@ -48,8 +54,8 @@ tasks:
desc: "Install initial dependencies"
cmds:
- |
- echo "đĻ Installing npm dependencies..."
- npm install
+ echo "đĻ Installing pnpm dependencies..."
+ pnpm install
echo "đĻ Installing forge dependencies..."
forge install
echo "â
Dependencies installed"
@@ -63,88 +69,14 @@ tasks:
deploy-full:
desc: "Run complete WAVS deployment pipeline"
cmds:
- - |
- export AGGREGATOR_URL={{.AGGREGATOR_URL}}
- bash ./script/deploy-script.sh
-
- clean:
- desc: "Clean up project files"
- cmds:
- - forge clean
- - cargo clean
- - rm -rf cache out broadcast
- - task: docker:clean
-
- test:
- desc: "Run all tests"
- cmds:
- - forge test
-
- fmt:
- desc: "Format Solidity and Rust code"
- cmds:
- - forge fmt
- - cargo fmt
+ - pnpm run deploy:full
lint:check:
desc: "Check linting and formatting"
cmds:
- - npm run lint:check
+ - pnpm run lint:check
lint:fix:
desc: "Fix linting and formatting issues"
cmds:
- - npm run lint:fix
-
- setup-env:
- desc: "Create .env file from example if it doesn't exist"
- cmds:
- - |
- if [ ! -f .env ]; then
- if [ -f .env.example ]; then
- echo "Creating .env file from .env.example..."
- cp .env.example .env
- echo ".env file created successfully!"
- fi
- fi
-
- check-requirements:
- desc: "Verify system requirements are installed"
- cmds:
- - |
- echo "đ Validating system requirements..."
- # Check Node.js
- if ! command -v node >/dev/null 2>&1; then
- echo "â Node.js not found. Install with: curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash && nvm install --lts"
- exit 1
- fi
- NODE_VERSION=$(node --version)
- MAJOR_VERSION=$(echo $NODE_VERSION | sed 's/^v\([0-9]*\)\..*/\1/')
- if [ $MAJOR_VERSION -lt 21 ]; then
- echo "â Node.js version $NODE_VERSION is less than required v21"
- echo "đĄ Upgrade with: nvm install --lts"
- exit 1
- fi
- # Check jq
- if ! command -v jq >/dev/null 2>&1; then
- echo "â jq not found. Install with: brew install jq (macOS) or apt install jq (Linux)"
- exit 1
- fi
- # Check cargo
- if ! command -v cargo >/dev/null 2>&1; then
- echo "â cargo not found. Install with: curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh"
- exit 1
- fi
- # Check docker
- if ! command -v docker >/dev/null 2>&1; then
- echo "â docker not found. Visit: https://docs.docker.com/get-docker/"
- exit 1
- fi
- echo "â
All requirements satisfied"
-
- dos2unix:
- desc: "Convert all script files to Unix line endings"
- cmds:
- - |
- find script/ -type f -name "*.sh" -exec dos2unix {} \;
- find script/ -type f -name "*.env*" -exec dos2unix {} \;
+ - pnpm run lint:fix
diff --git a/components/aggregator/Cargo.toml b/components/aggregator/Cargo.toml
new file mode 100644
index 00000000..105e8197
--- /dev/null
+++ b/components/aggregator/Cargo.toml
@@ -0,0 +1,31 @@
+[package]
+name = "aggregator"
+edition.workspace = true
+version.workspace = true
+authors.workspace = true
+rust-version.workspace = true
+repository.workspace = true
+
+[lib]
+crate-type = ["cdylib"]
+
+[profile.release]
+codegen-units = 1
+opt-level = "s"
+debug = false
+strip = true
+lto = true
+
+[package.metadata.component]
+package = "component:aggregator"
+target = "wavs:aggregator@=1.3.0"
+
+[dependencies]
+alloy-primitives = { workspace = true }
+alloy-network = { workspace = true }
+alloy-provider = { workspace = true }
+wit-bindgen-rt = { workspace = true }
+serde = { workspace = true }
+serde_json = { workspace = true }
+wavs-wasi-utils = { workspace = true }
+wstd = { workspace = true }
diff --git a/components/aggregator/Makefile b/components/aggregator/Makefile
new file mode 100644
index 00000000..0f9edaa3
--- /dev/null
+++ b/components/aggregator/Makefile
@@ -0,0 +1,11 @@
+OUTPUT_DIR?=../../compiled
+
+# WASI_BUILD_DIR=components/aggregator make wasi-build
+
+## wasi-build: build the aggregator WASI component
+wasi-build:
+ @echo "Building component: aggregator"
+ @cargo component build --release; cargo fmt
+ @mkdir -p $(OUTPUT_DIR)
+ @cp ../../target/wasm32-wasip1/release/aggregator.wasm $(OUTPUT_DIR)
+.PHONY: wasi-build
diff --git a/components/aggregator/src/bindings.rs b/components/aggregator/src/bindings.rs
new file mode 100644
index 00000000..ae8379b9
--- /dev/null
+++ b/components/aggregator/src/bindings.rs
@@ -0,0 +1,24703 @@
+// Generated by `wit-bindgen` 0.41.0. DO NOT EDIT!
+// Options used:
+// * runtime_path: "wit_bindgen_rt"
+pub type Packet = wavs::aggregator::aggregator::Packet;
+pub type AggregatorAction = wavs::aggregator::aggregator::AggregatorAction;
+pub type AnyTxHash = wavs::types::chain::AnyTxHash;
+#[doc(hidden)]
+#[allow(non_snake_case)]
+pub unsafe fn _export_process_packet_cabi(arg0: *mut u8) -> *mut u8 {
+ #[cfg(target_arch = "wasm32")] _rt::run_ctors_once();
+ let l0 = *arg0.add(0).cast::<*mut u8>();
+ let l1 = *arg0.add(::core::mem::size_of::<*const u8>()).cast::();
+ let len2 = l1;
+ let bytes2 = _rt::Vec::from_raw_parts(l0.cast(), len2, len2);
+ let l3 = *arg0.add(2 * ::core::mem::size_of::<*const u8>()).cast::<*mut u8>();
+ let l4 = *arg0.add(3 * ::core::mem::size_of::<*const u8>()).cast::();
+ let base160 = l3;
+ let len160 = l4;
+ let mut result160 = _rt::Vec::with_capacity(len160);
+ for i in 0..len160 {
+ let base = base160.add(i * (144 + 42 * ::core::mem::size_of::<*const u8>()));
+ let e160 = {
+ let l5 = *base.add(0).cast::<*mut u8>();
+ let l6 = *base.add(::core::mem::size_of::<*const u8>()).cast::();
+ let len7 = l6;
+ let bytes7 = _rt::Vec::from_raw_parts(l5.cast(), len7, len7);
+ let l8 = i32::from(
+ *base.add(2 * ::core::mem::size_of::<*const u8>()).cast::(),
+ );
+ use wavs::types::service::Trigger as V43;
+ let v43 = match l8 {
+ 0 => {
+ let e43 = {
+ let l9 = *base
+ .add(8 + 2 * ::core::mem::size_of::<*const u8>())
+ .cast::<*mut u8>();
+ let l10 = *base
+ .add(8 + 3 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let len11 = l10;
+ let l12 = *base
+ .add(8 + 4 * ::core::mem::size_of::<*const u8>())
+ .cast::<*mut u8>();
+ let l13 = *base
+ .add(8 + 5 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let len14 = l13;
+ let bytes14 = _rt::Vec::from_raw_parts(l12.cast(), len14, len14);
+ let l15 = *base
+ .add(8 + 6 * ::core::mem::size_of::<*const u8>())
+ .cast::<*mut u8>();
+ let l16 = *base
+ .add(8 + 7 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let len17 = l16;
+ wavs::types::service::TriggerEvmContractEvent {
+ address: wavs::types::chain::EvmAddress {
+ raw_bytes: _rt::Vec::from_raw_parts(l9.cast(), len11, len11),
+ },
+ chain: _rt::string_lift(bytes14),
+ event_hash: _rt::Vec::from_raw_parts(
+ l15.cast(),
+ len17,
+ len17,
+ ),
+ }
+ };
+ V43::EvmContractEvent(e43)
+ }
+ 1 => {
+ let e43 = {
+ let l18 = *base
+ .add(8 + 2 * ::core::mem::size_of::<*const u8>())
+ .cast::<*mut u8>();
+ let l19 = *base
+ .add(8 + 3 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let len20 = l19;
+ let bytes20 = _rt::Vec::from_raw_parts(l18.cast(), len20, len20);
+ let l21 = *base
+ .add(8 + 4 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let l22 = *base
+ .add(8 + 5 * ::core::mem::size_of::<*const u8>())
+ .cast::<*mut u8>();
+ let l23 = *base
+ .add(8 + 6 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let len24 = l23;
+ let bytes24 = _rt::Vec::from_raw_parts(l22.cast(), len24, len24);
+ let l25 = *base
+ .add(8 + 7 * ::core::mem::size_of::<*const u8>())
+ .cast::<*mut u8>();
+ let l26 = *base
+ .add(8 + 8 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let len27 = l26;
+ let bytes27 = _rt::Vec::from_raw_parts(l25.cast(), len27, len27);
+ wavs::types::service::TriggerCosmosContractEvent {
+ address: wavs::types::chain::CosmosAddress {
+ bech32_addr: _rt::string_lift(bytes20),
+ prefix_len: l21 as u32,
+ },
+ chain: _rt::string_lift(bytes24),
+ event_type: _rt::string_lift(bytes27),
+ }
+ };
+ V43::CosmosContractEvent(e43)
+ }
+ 2 => {
+ let e43 = {
+ let l28 = *base
+ .add(8 + 2 * ::core::mem::size_of::<*const u8>())
+ .cast::<*mut u8>();
+ let l29 = *base
+ .add(8 + 3 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let len30 = l29;
+ let bytes30 = _rt::Vec::from_raw_parts(l28.cast(), len30, len30);
+ let l31 = *base
+ .add(8 + 4 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let l32 = i32::from(
+ *base
+ .add(16 + 4 * ::core::mem::size_of::<*const u8>())
+ .cast::(),
+ );
+ let l34 = i32::from(
+ *base
+ .add(32 + 4 * ::core::mem::size_of::<*const u8>())
+ .cast::(),
+ );
+ wavs::types::service::TriggerBlockInterval {
+ chain: _rt::string_lift(bytes30),
+ n_blocks: l31 as u32,
+ start_block: match l32 {
+ 0 => None,
+ 1 => {
+ let e = {
+ let l33 = *base
+ .add(24 + 4 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ l33 as u64
+ };
+ Some(e)
+ }
+ _ => _rt::invalid_enum_discriminant(),
+ },
+ end_block: match l34 {
+ 0 => None,
+ 1 => {
+ let e = {
+ let l35 = *base
+ .add(40 + 4 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ l35 as u64
+ };
+ Some(e)
+ }
+ _ => _rt::invalid_enum_discriminant(),
+ },
+ }
+ };
+ V43::BlockInterval(e43)
+ }
+ 3 => {
+ let e43 = {
+ let l36 = *base
+ .add(8 + 2 * ::core::mem::size_of::<*const u8>())
+ .cast::<*mut u8>();
+ let l37 = *base
+ .add(8 + 3 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let len38 = l37;
+ let bytes38 = _rt::Vec::from_raw_parts(l36.cast(), len38, len38);
+ let l39 = i32::from(
+ *base
+ .add(8 + 4 * ::core::mem::size_of::<*const u8>())
+ .cast::(),
+ );
+ let l41 = i32::from(
+ *base
+ .add(24 + 4 * ::core::mem::size_of::<*const u8>())
+ .cast::(),
+ );
+ wavs::types::service::TriggerCron {
+ schedule: _rt::string_lift(bytes38),
+ start_time: match l39 {
+ 0 => None,
+ 1 => {
+ let e = {
+ let l40 = *base
+ .add(16 + 4 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ wavs::types::core::Timestamp {
+ nanos: l40 as u64,
+ }
+ };
+ Some(e)
+ }
+ _ => _rt::invalid_enum_discriminant(),
+ },
+ end_time: match l41 {
+ 0 => None,
+ 1 => {
+ let e = {
+ let l42 = *base
+ .add(32 + 4 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ wavs::types::core::Timestamp {
+ nanos: l42 as u64,
+ }
+ };
+ Some(e)
+ }
+ _ => _rt::invalid_enum_discriminant(),
+ },
+ }
+ };
+ V43::Cron(e43)
+ }
+ n => {
+ debug_assert_eq!(n, 4, "invalid enum discriminant");
+ V43::Manual
+ }
+ };
+ let l44 = i32::from(
+ *base.add(48 + 4 * ::core::mem::size_of::<*const u8>()).cast::(),
+ );
+ use wavs::types::service::ComponentSource as V68;
+ let v68 = match l44 {
+ 0 => {
+ let e68 = {
+ let l45 = *base
+ .add(48 + 5 * ::core::mem::size_of::<*const u8>())
+ .cast::<*mut u8>();
+ let l46 = *base
+ .add(48 + 6 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let len47 = l46;
+ let bytes47 = _rt::Vec::from_raw_parts(l45.cast(), len47, len47);
+ let l48 = *base
+ .add(48 + 7 * ::core::mem::size_of::<*const u8>())
+ .cast::<*mut u8>();
+ let l49 = *base
+ .add(48 + 8 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let len50 = l49;
+ let bytes50 = _rt::Vec::from_raw_parts(l48.cast(), len50, len50);
+ wavs::types::service::ComponentSourceDownload {
+ uri: _rt::string_lift(bytes47),
+ digest: _rt::string_lift(bytes50),
+ }
+ };
+ V68::Download(e68)
+ }
+ 1 => {
+ let e68 = {
+ let l51 = *base
+ .add(48 + 5 * ::core::mem::size_of::<*const u8>())
+ .cast::<*mut u8>();
+ let l52 = *base
+ .add(48 + 6 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let len53 = l52;
+ let bytes53 = _rt::Vec::from_raw_parts(l51.cast(), len53, len53);
+ let l54 = i32::from(
+ *base
+ .add(48 + 7 * ::core::mem::size_of::<*const u8>())
+ .cast::(),
+ );
+ let l58 = i32::from(
+ *base
+ .add(48 + 10 * ::core::mem::size_of::<*const u8>())
+ .cast::(),
+ );
+ let l62 = *base
+ .add(48 + 13 * ::core::mem::size_of::<*const u8>())
+ .cast::<*mut u8>();
+ let l63 = *base
+ .add(48 + 14 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let len64 = l63;
+ let bytes64 = _rt::Vec::from_raw_parts(l62.cast(), len64, len64);
+ wavs::types::service::Registry {
+ digest: _rt::string_lift(bytes53),
+ domain: match l54 {
+ 0 => None,
+ 1 => {
+ let e = {
+ let l55 = *base
+ .add(48 + 8 * ::core::mem::size_of::<*const u8>())
+ .cast::<*mut u8>();
+ let l56 = *base
+ .add(48 + 9 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let len57 = l56;
+ let bytes57 = _rt::Vec::from_raw_parts(
+ l55.cast(),
+ len57,
+ len57,
+ );
+ _rt::string_lift(bytes57)
+ };
+ Some(e)
+ }
+ _ => _rt::invalid_enum_discriminant(),
+ },
+ version: match l58 {
+ 0 => None,
+ 1 => {
+ let e = {
+ let l59 = *base
+ .add(48 + 11 * ::core::mem::size_of::<*const u8>())
+ .cast::<*mut u8>();
+ let l60 = *base
+ .add(48 + 12 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let len61 = l60;
+ let bytes61 = _rt::Vec::from_raw_parts(
+ l59.cast(),
+ len61,
+ len61,
+ );
+ _rt::string_lift(bytes61)
+ };
+ Some(e)
+ }
+ _ => _rt::invalid_enum_discriminant(),
+ },
+ pkg: _rt::string_lift(bytes64),
+ }
+ };
+ V68::Registry(e68)
+ }
+ n => {
+ debug_assert_eq!(n, 2, "invalid enum discriminant");
+ let e68 = {
+ let l65 = *base
+ .add(48 + 5 * ::core::mem::size_of::<*const u8>())
+ .cast::<*mut u8>();
+ let l66 = *base
+ .add(48 + 6 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let len67 = l66;
+ let bytes67 = _rt::Vec::from_raw_parts(l65.cast(), len67, len67);
+ _rt::string_lift(bytes67)
+ };
+ V68::Digest(e68)
+ }
+ };
+ let l69 = i32::from(
+ *base.add(48 + 15 * ::core::mem::size_of::<*const u8>()).cast::(),
+ );
+ use wavs::types::service::AllowedHostPermission as V76;
+ let v76 = match l69 {
+ 0 => V76::All,
+ 1 => {
+ let e76 = {
+ let l70 = *base
+ .add(48 + 16 * ::core::mem::size_of::<*const u8>())
+ .cast::<*mut u8>();
+ let l71 = *base
+ .add(48 + 17 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let base75 = l70;
+ let len75 = l71;
+ let mut result75 = _rt::Vec::with_capacity(len75);
+ for i in 0..len75 {
+ let base = base75
+ .add(i * (2 * ::core::mem::size_of::<*const u8>()));
+ let e75 = {
+ let l72 = *base.add(0).cast::<*mut u8>();
+ let l73 = *base
+ .add(::core::mem::size_of::<*const u8>())
+ .cast::();
+ let len74 = l73;
+ let bytes74 = _rt::Vec::from_raw_parts(
+ l72.cast(),
+ len74,
+ len74,
+ );
+ _rt::string_lift(bytes74)
+ };
+ result75.push(e75);
+ }
+ _rt::cabi_dealloc(
+ base75,
+ len75 * (2 * ::core::mem::size_of::<*const u8>()),
+ ::core::mem::size_of::<*const u8>(),
+ );
+ result75
+ };
+ V76::Only(e76)
+ }
+ n => {
+ debug_assert_eq!(n, 2, "invalid enum discriminant");
+ V76::None
+ }
+ };
+ let l77 = i32::from(
+ *base.add(48 + 18 * ::core::mem::size_of::<*const u8>()).cast::(),
+ );
+ let l78 = i32::from(
+ *base.add(56 + 18 * ::core::mem::size_of::<*const u8>()).cast::(),
+ );
+ let l80 = i32::from(
+ *base.add(72 + 18 * ::core::mem::size_of::<*const u8>()).cast::(),
+ );
+ let l82 = *base
+ .add(88 + 18 * ::core::mem::size_of::<*const u8>())
+ .cast::<*mut u8>();
+ let l83 = *base
+ .add(88 + 19 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let base90 = l82;
+ let len90 = l83;
+ let mut result90 = _rt::Vec::with_capacity(len90);
+ for i in 0..len90 {
+ let base = base90.add(i * (4 * ::core::mem::size_of::<*const u8>()));
+ let e90 = {
+ let l84 = *base.add(0).cast::<*mut u8>();
+ let l85 = *base
+ .add(::core::mem::size_of::<*const u8>())
+ .cast::();
+ let len86 = l85;
+ let bytes86 = _rt::Vec::from_raw_parts(l84.cast(), len86, len86);
+ let l87 = *base
+ .add(2 * ::core::mem::size_of::<*const u8>())
+ .cast::<*mut u8>();
+ let l88 = *base
+ .add(3 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let len89 = l88;
+ let bytes89 = _rt::Vec::from_raw_parts(l87.cast(), len89, len89);
+ (_rt::string_lift(bytes86), _rt::string_lift(bytes89))
+ };
+ result90.push(e90);
+ }
+ _rt::cabi_dealloc(
+ base90,
+ len90 * (4 * ::core::mem::size_of::<*const u8>()),
+ ::core::mem::size_of::<*const u8>(),
+ );
+ let l91 = *base
+ .add(88 + 20 * ::core::mem::size_of::<*const u8>())
+ .cast::<*mut u8>();
+ let l92 = *base
+ .add(88 + 21 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let base96 = l91;
+ let len96 = l92;
+ let mut result96 = _rt::Vec::with_capacity(len96);
+ for i in 0..len96 {
+ let base = base96.add(i * (2 * ::core::mem::size_of::<*const u8>()));
+ let e96 = {
+ let l93 = *base.add(0).cast::<*mut u8>();
+ let l94 = *base
+ .add(::core::mem::size_of::<*const u8>())
+ .cast::();
+ let len95 = l94;
+ let bytes95 = _rt::Vec::from_raw_parts(l93.cast(), len95, len95);
+ _rt::string_lift(bytes95)
+ };
+ result96.push(e96);
+ }
+ _rt::cabi_dealloc(
+ base96,
+ len96 * (2 * ::core::mem::size_of::<*const u8>()),
+ ::core::mem::size_of::<*const u8>(),
+ );
+ let l97 = i32::from(
+ *base.add(88 + 22 * ::core::mem::size_of::<*const u8>()).cast::(),
+ );
+ use wavs::types::service::Submit as V159;
+ let v159 = match l97 {
+ 0 => V159::None,
+ n => {
+ debug_assert_eq!(n, 1, "invalid enum discriminant");
+ let e159 = {
+ let l98 = *base
+ .add(96 + 22 * ::core::mem::size_of::<*const u8>())
+ .cast::<*mut u8>();
+ let l99 = *base
+ .add(96 + 23 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let len100 = l99;
+ let bytes100 = _rt::Vec::from_raw_parts(
+ l98.cast(),
+ len100,
+ len100,
+ );
+ let l101 = i32::from(
+ *base
+ .add(96 + 24 * ::core::mem::size_of::<*const u8>())
+ .cast::(),
+ );
+ use wavs::types::service::ComponentSource as V125;
+ let v125 = match l101 {
+ 0 => {
+ let e125 = {
+ let l102 = *base
+ .add(96 + 25 * ::core::mem::size_of::<*const u8>())
+ .cast::<*mut u8>();
+ let l103 = *base
+ .add(96 + 26 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let len104 = l103;
+ let bytes104 = _rt::Vec::from_raw_parts(
+ l102.cast(),
+ len104,
+ len104,
+ );
+ let l105 = *base
+ .add(96 + 27 * ::core::mem::size_of::<*const u8>())
+ .cast::<*mut u8>();
+ let l106 = *base
+ .add(96 + 28 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let len107 = l106;
+ let bytes107 = _rt::Vec::from_raw_parts(
+ l105.cast(),
+ len107,
+ len107,
+ );
+ wavs::types::service::ComponentSourceDownload {
+ uri: _rt::string_lift(bytes104),
+ digest: _rt::string_lift(bytes107),
+ }
+ };
+ V125::Download(e125)
+ }
+ 1 => {
+ let e125 = {
+ let l108 = *base
+ .add(96 + 25 * ::core::mem::size_of::<*const u8>())
+ .cast::<*mut u8>();
+ let l109 = *base
+ .add(96 + 26 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let len110 = l109;
+ let bytes110 = _rt::Vec::from_raw_parts(
+ l108.cast(),
+ len110,
+ len110,
+ );
+ let l111 = i32::from(
+ *base
+ .add(96 + 27 * ::core::mem::size_of::<*const u8>())
+ .cast::(),
+ );
+ let l115 = i32::from(
+ *base
+ .add(96 + 30 * ::core::mem::size_of::<*const u8>())
+ .cast::(),
+ );
+ let l119 = *base
+ .add(96 + 33 * ::core::mem::size_of::<*const u8>())
+ .cast::<*mut u8>();
+ let l120 = *base
+ .add(96 + 34 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let len121 = l120;
+ let bytes121 = _rt::Vec::from_raw_parts(
+ l119.cast(),
+ len121,
+ len121,
+ );
+ wavs::types::service::Registry {
+ digest: _rt::string_lift(bytes110),
+ domain: match l111 {
+ 0 => None,
+ 1 => {
+ let e = {
+ let l112 = *base
+ .add(96 + 28 * ::core::mem::size_of::<*const u8>())
+ .cast::<*mut u8>();
+ let l113 = *base
+ .add(96 + 29 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let len114 = l113;
+ let bytes114 = _rt::Vec::from_raw_parts(
+ l112.cast(),
+ len114,
+ len114,
+ );
+ _rt::string_lift(bytes114)
+ };
+ Some(e)
+ }
+ _ => _rt::invalid_enum_discriminant(),
+ },
+ version: match l115 {
+ 0 => None,
+ 1 => {
+ let e = {
+ let l116 = *base
+ .add(96 + 31 * ::core::mem::size_of::<*const u8>())
+ .cast::<*mut u8>();
+ let l117 = *base
+ .add(96 + 32 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let len118 = l117;
+ let bytes118 = _rt::Vec::from_raw_parts(
+ l116.cast(),
+ len118,
+ len118,
+ );
+ _rt::string_lift(bytes118)
+ };
+ Some(e)
+ }
+ _ => _rt::invalid_enum_discriminant(),
+ },
+ pkg: _rt::string_lift(bytes121),
+ }
+ };
+ V125::Registry(e125)
+ }
+ n => {
+ debug_assert_eq!(n, 2, "invalid enum discriminant");
+ let e125 = {
+ let l122 = *base
+ .add(96 + 25 * ::core::mem::size_of::<*const u8>())
+ .cast::<*mut u8>();
+ let l123 = *base
+ .add(96 + 26 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let len124 = l123;
+ let bytes124 = _rt::Vec::from_raw_parts(
+ l122.cast(),
+ len124,
+ len124,
+ );
+ _rt::string_lift(bytes124)
+ };
+ V125::Digest(e125)
+ }
+ };
+ let l126 = i32::from(
+ *base
+ .add(96 + 35 * ::core::mem::size_of::<*const u8>())
+ .cast::(),
+ );
+ use wavs::types::service::AllowedHostPermission as V133;
+ let v133 = match l126 {
+ 0 => V133::All,
+ 1 => {
+ let e133 = {
+ let l127 = *base
+ .add(96 + 36 * ::core::mem::size_of::<*const u8>())
+ .cast::<*mut u8>();
+ let l128 = *base
+ .add(96 + 37 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let base132 = l127;
+ let len132 = l128;
+ let mut result132 = _rt::Vec::with_capacity(len132);
+ for i in 0..len132 {
+ let base = base132
+ .add(i * (2 * ::core::mem::size_of::<*const u8>()));
+ let e132 = {
+ let l129 = *base.add(0).cast::<*mut u8>();
+ let l130 = *base
+ .add(::core::mem::size_of::<*const u8>())
+ .cast::();
+ let len131 = l130;
+ let bytes131 = _rt::Vec::from_raw_parts(
+ l129.cast(),
+ len131,
+ len131,
+ );
+ _rt::string_lift(bytes131)
+ };
+ result132.push(e132);
+ }
+ _rt::cabi_dealloc(
+ base132,
+ len132 * (2 * ::core::mem::size_of::<*const u8>()),
+ ::core::mem::size_of::<*const u8>(),
+ );
+ result132
+ };
+ V133::Only(e133)
+ }
+ n => {
+ debug_assert_eq!(n, 2, "invalid enum discriminant");
+ V133::None
+ }
+ };
+ let l134 = i32::from(
+ *base
+ .add(96 + 38 * ::core::mem::size_of::<*const u8>())
+ .cast::(),
+ );
+ let l135 = i32::from(
+ *base
+ .add(104 + 38 * ::core::mem::size_of::<*const u8>())
+ .cast::(),
+ );
+ let l137 = i32::from(
+ *base
+ .add(120 + 38 * ::core::mem::size_of::<*const u8>())
+ .cast::(),
+ );
+ let l139 = *base
+ .add(136 + 38 * ::core::mem::size_of::<*const u8>())
+ .cast::<*mut u8>();
+ let l140 = *base
+ .add(136 + 39 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let base147 = l139;
+ let len147 = l140;
+ let mut result147 = _rt::Vec::with_capacity(len147);
+ for i in 0..len147 {
+ let base = base147
+ .add(i * (4 * ::core::mem::size_of::<*const u8>()));
+ let e147 = {
+ let l141 = *base.add(0).cast::<*mut u8>();
+ let l142 = *base
+ .add(::core::mem::size_of::<*const u8>())
+ .cast::();
+ let len143 = l142;
+ let bytes143 = _rt::Vec::from_raw_parts(
+ l141.cast(),
+ len143,
+ len143,
+ );
+ let l144 = *base
+ .add(2 * ::core::mem::size_of::<*const u8>())
+ .cast::<*mut u8>();
+ let l145 = *base
+ .add(3 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let len146 = l145;
+ let bytes146 = _rt::Vec::from_raw_parts(
+ l144.cast(),
+ len146,
+ len146,
+ );
+ (_rt::string_lift(bytes143), _rt::string_lift(bytes146))
+ };
+ result147.push(e147);
+ }
+ _rt::cabi_dealloc(
+ base147,
+ len147 * (4 * ::core::mem::size_of::<*const u8>()),
+ ::core::mem::size_of::<*const u8>(),
+ );
+ let l148 = *base
+ .add(136 + 40 * ::core::mem::size_of::<*const u8>())
+ .cast::<*mut u8>();
+ let l149 = *base
+ .add(136 + 41 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let base153 = l148;
+ let len153 = l149;
+ let mut result153 = _rt::Vec::with_capacity(len153);
+ for i in 0..len153 {
+ let base = base153
+ .add(i * (2 * ::core::mem::size_of::<*const u8>()));
+ let e153 = {
+ let l150 = *base.add(0).cast::<*mut u8>();
+ let l151 = *base
+ .add(::core::mem::size_of::<*const u8>())
+ .cast::();
+ let len152 = l151;
+ let bytes152 = _rt::Vec::from_raw_parts(
+ l150.cast(),
+ len152,
+ len152,
+ );
+ _rt::string_lift(bytes152)
+ };
+ result153.push(e153);
+ }
+ _rt::cabi_dealloc(
+ base153,
+ len153 * (2 * ::core::mem::size_of::<*const u8>()),
+ ::core::mem::size_of::<*const u8>(),
+ );
+ let l154 = i32::from(
+ *base
+ .add(136 + 42 * ::core::mem::size_of::<*const u8>())
+ .cast::(),
+ );
+ use wavs::types::service::SignatureAlgorithm as V155;
+ let v155 = match l154 {
+ n => {
+ debug_assert_eq!(n, 0, "invalid enum discriminant");
+ V155::Secp256k1
+ }
+ };
+ let l156 = i32::from(
+ *base
+ .add(137 + 42 * ::core::mem::size_of::<*const u8>())
+ .cast::(),
+ );
+ wavs::types::service::AggregatorSubmit {
+ url: _rt::string_lift(bytes100),
+ component: wavs::types::service::Component {
+ source: v125,
+ permissions: wavs::types::service::Permissions {
+ allowed_http_hosts: v133,
+ file_system: _rt::bool_lift(l134 as u8),
+ },
+ fuel_limit: match l135 {
+ 0 => None,
+ 1 => {
+ let e = {
+ let l136 = *base
+ .add(112 + 38 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ l136 as u64
+ };
+ Some(e)
+ }
+ _ => _rt::invalid_enum_discriminant(),
+ },
+ time_limit_seconds: match l137 {
+ 0 => None,
+ 1 => {
+ let e = {
+ let l138 = *base
+ .add(128 + 38 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ l138 as u64
+ };
+ Some(e)
+ }
+ _ => _rt::invalid_enum_discriminant(),
+ },
+ config: result147,
+ env_keys: result153,
+ },
+ signature_kind: wavs::types::service::SignatureKind {
+ algorithm: v155,
+ prefix: match l156 {
+ 0 => None,
+ 1 => {
+ let e = {
+ let l157 = i32::from(
+ *base
+ .add(138 + 42 * ::core::mem::size_of::<*const u8>())
+ .cast::(),
+ );
+ use wavs::types::service::SignaturePrefix as V158;
+ let v158 = match l157 {
+ n => {
+ debug_assert_eq!(n, 0, "invalid enum discriminant");
+ V158::Eip191
+ }
+ };
+ v158
+ };
+ Some(e)
+ }
+ _ => _rt::invalid_enum_discriminant(),
+ },
+ },
+ }
+ };
+ V159::Aggregator(e159)
+ }
+ };
+ (
+ _rt::string_lift(bytes7),
+ wavs::types::service::Workflow {
+ trigger: v43,
+ component: wavs::types::service::Component {
+ source: v68,
+ permissions: wavs::types::service::Permissions {
+ allowed_http_hosts: v76,
+ file_system: _rt::bool_lift(l77 as u8),
+ },
+ fuel_limit: match l78 {
+ 0 => None,
+ 1 => {
+ let e = {
+ let l79 = *base
+ .add(64 + 18 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ l79 as u64
+ };
+ Some(e)
+ }
+ _ => _rt::invalid_enum_discriminant(),
+ },
+ time_limit_seconds: match l80 {
+ 0 => None,
+ 1 => {
+ let e = {
+ let l81 = *base
+ .add(80 + 18 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ l81 as u64
+ };
+ Some(e)
+ }
+ _ => _rt::invalid_enum_discriminant(),
+ },
+ config: result90,
+ env_keys: result96,
+ },
+ submit: v159,
+ },
+ )
+ };
+ result160.push(e160);
+ }
+ _rt::cabi_dealloc(
+ base160,
+ len160 * (144 + 42 * ::core::mem::size_of::<*const u8>()),
+ 8,
+ );
+ let l161 = i32::from(
+ *arg0.add(4 * ::core::mem::size_of::<*const u8>()).cast::(),
+ );
+ use wavs::types::service::ServiceStatus as V162;
+ let v162 = match l161 {
+ 0 => V162::Active,
+ n => {
+ debug_assert_eq!(n, 1, "invalid enum discriminant");
+ V162::Paused
+ }
+ };
+ let l163 = i32::from(
+ *arg0.add(5 * ::core::mem::size_of::<*const u8>()).cast::(),
+ );
+ use wavs::types::service::ServiceManager as V170;
+ let v170 = match l163 {
+ n => {
+ debug_assert_eq!(n, 0, "invalid enum discriminant");
+ let e170 = {
+ let l164 = *arg0
+ .add(6 * ::core::mem::size_of::<*const u8>())
+ .cast::<*mut u8>();
+ let l165 = *arg0
+ .add(7 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let len166 = l165;
+ let bytes166 = _rt::Vec::from_raw_parts(l164.cast(), len166, len166);
+ let l167 = *arg0
+ .add(8 * ::core::mem::size_of::<*const u8>())
+ .cast::<*mut u8>();
+ let l168 = *arg0
+ .add(9 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let len169 = l168;
+ wavs::types::service::EvmManager {
+ chain: _rt::string_lift(bytes166),
+ address: wavs::types::chain::EvmAddress {
+ raw_bytes: _rt::Vec::from_raw_parts(l167.cast(), len169, len169),
+ },
+ }
+ };
+ V170::Evm(e170)
+ }
+ };
+ let l171 = *arg0.add(10 * ::core::mem::size_of::<*const u8>()).cast::<*mut u8>();
+ let l172 = *arg0.add(11 * ::core::mem::size_of::<*const u8>()).cast::();
+ let len173 = l172;
+ let bytes173 = _rt::Vec::from_raw_parts(l171.cast(), len173, len173);
+ let l174 = *arg0.add(12 * ::core::mem::size_of::<*const u8>()).cast::<*mut u8>();
+ let l175 = *arg0.add(13 * ::core::mem::size_of::<*const u8>()).cast::();
+ let len176 = l175;
+ let l177 = *arg0.add(14 * ::core::mem::size_of::<*const u8>()).cast::<*mut u8>();
+ let l178 = *arg0.add(15 * ::core::mem::size_of::<*const u8>()).cast::();
+ let len179 = l178;
+ let l180 = *arg0.add(16 * ::core::mem::size_of::<*const u8>()).cast::<*mut u8>();
+ let l181 = *arg0.add(17 * ::core::mem::size_of::<*const u8>()).cast::();
+ let len182 = l181;
+ let l183 = *arg0.add(18 * ::core::mem::size_of::<*const u8>()).cast::<*mut u8>();
+ let l184 = *arg0.add(19 * ::core::mem::size_of::<*const u8>()).cast::();
+ let len185 = l184;
+ let l186 = i32::from(
+ *arg0.add(20 * ::core::mem::size_of::<*const u8>()).cast::(),
+ );
+ use wavs::types::service::SignatureAlgorithm as V187;
+ let v187 = match l186 {
+ n => {
+ debug_assert_eq!(n, 0, "invalid enum discriminant");
+ V187::Secp256k1
+ }
+ };
+ let l188 = i32::from(
+ *arg0.add(1 + 20 * ::core::mem::size_of::<*const u8>()).cast::(),
+ );
+ let l191 = i32::from(
+ *arg0.add(8 + 20 * ::core::mem::size_of::<*const u8>()).cast::(),
+ );
+ use wavs::types::events::TriggerData as V247;
+ let v247 = match l191 {
+ 0 => {
+ let e247 = {
+ let l192 = *arg0
+ .add(16 + 20 * ::core::mem::size_of::<*const u8>())
+ .cast::<*mut u8>();
+ let l193 = *arg0
+ .add(16 + 21 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let len194 = l193;
+ let bytes194 = _rt::Vec::from_raw_parts(l192.cast(), len194, len194);
+ let l195 = *arg0
+ .add(16 + 22 * ::core::mem::size_of::<*const u8>())
+ .cast::<*mut u8>();
+ let l196 = *arg0
+ .add(16 + 23 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let len197 = l196;
+ let l198 = *arg0
+ .add(16 + 24 * ::core::mem::size_of::<*const u8>())
+ .cast::<*mut u8>();
+ let l199 = *arg0
+ .add(16 + 25 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let base203 = l198;
+ let len203 = l199;
+ let mut result203 = _rt::Vec::with_capacity(len203);
+ for i in 0..len203 {
+ let base = base203
+ .add(i * (2 * ::core::mem::size_of::<*const u8>()));
+ let e203 = {
+ let l200 = *base.add(0).cast::<*mut u8>();
+ let l201 = *base
+ .add(::core::mem::size_of::<*const u8>())
+ .cast::();
+ let len202 = l201;
+ _rt::Vec::from_raw_parts(l200.cast(), len202, len202)
+ };
+ result203.push(e203);
+ }
+ _rt::cabi_dealloc(
+ base203,
+ len203 * (2 * ::core::mem::size_of::<*const u8>()),
+ ::core::mem::size_of::<*const u8>(),
+ );
+ let l204 = *arg0
+ .add(16 + 26 * ::core::mem::size_of::<*const u8>())
+ .cast::<*mut u8>();
+ let l205 = *arg0
+ .add(16 + 27 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let len206 = l205;
+ let l207 = *arg0
+ .add(16 + 28 * ::core::mem::size_of::<*const u8>())
+ .cast::<*mut u8>();
+ let l208 = *arg0
+ .add(16 + 29 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let len209 = l208;
+ let l210 = *arg0
+ .add(16 + 30 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let l211 = *arg0
+ .add(24 + 30 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let l212 = *arg0
+ .add(32 + 30 * ::core::mem::size_of::<*const u8>())
+ .cast::<*mut u8>();
+ let l213 = *arg0
+ .add(32 + 31 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let len214 = l213;
+ let l215 = i32::from(
+ *arg0.add(32 + 32 * ::core::mem::size_of::<*const u8>()).cast::(),
+ );
+ let l217 = *arg0
+ .add(48 + 32 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ wavs::types::events::TriggerDataEvmContractEvent {
+ chain: _rt::string_lift(bytes194),
+ log: wavs::types::chain::EvmEventLog {
+ address: wavs::types::chain::EvmAddress {
+ raw_bytes: _rt::Vec::from_raw_parts(
+ l195.cast(),
+ len197,
+ len197,
+ ),
+ },
+ data: wavs::types::chain::EvmEventLogData {
+ topics: result203,
+ data: _rt::Vec::from_raw_parts(l204.cast(), len206, len206),
+ },
+ tx_hash: _rt::Vec::from_raw_parts(l207.cast(), len209, len209),
+ block_number: l210 as u64,
+ log_index: l211 as u64,
+ block_hash: _rt::Vec::from_raw_parts(
+ l212.cast(),
+ len214,
+ len214,
+ ),
+ block_timestamp: match l215 {
+ 0 => None,
+ 1 => {
+ let e = {
+ let l216 = *arg0
+ .add(40 + 32 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ l216 as u64
+ };
+ Some(e)
+ }
+ _ => _rt::invalid_enum_discriminant(),
+ },
+ tx_index: l217 as u64,
+ },
+ }
+ };
+ V247::EvmContractEvent(e247)
+ }
+ 1 => {
+ let e247 = {
+ let l218 = *arg0
+ .add(16 + 20 * ::core::mem::size_of::<*const u8>())
+ .cast::<*mut u8>();
+ let l219 = *arg0
+ .add(16 + 21 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let len220 = l219;
+ let bytes220 = _rt::Vec::from_raw_parts(l218.cast(), len220, len220);
+ let l221 = *arg0
+ .add(16 + 22 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let l222 = *arg0
+ .add(16 + 23 * ::core::mem::size_of::<*const u8>())
+ .cast::<*mut u8>();
+ let l223 = *arg0
+ .add(16 + 24 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let len224 = l223;
+ let bytes224 = _rt::Vec::from_raw_parts(l222.cast(), len224, len224);
+ let l225 = *arg0
+ .add(16 + 25 * ::core::mem::size_of::<*const u8>())
+ .cast::<*mut u8>();
+ let l226 = *arg0
+ .add(16 + 26 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let len227 = l226;
+ let bytes227 = _rt::Vec::from_raw_parts(l225.cast(), len227, len227);
+ let l228 = *arg0
+ .add(16 + 27 * ::core::mem::size_of::<*const u8>())
+ .cast::<*mut u8>();
+ let l229 = *arg0
+ .add(16 + 28 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let base236 = l228;
+ let len236 = l229;
+ let mut result236 = _rt::Vec::with_capacity(len236);
+ for i in 0..len236 {
+ let base = base236
+ .add(i * (4 * ::core::mem::size_of::<*const u8>()));
+ let e236 = {
+ let l230 = *base.add(0).cast::<*mut u8>();
+ let l231 = *base
+ .add(::core::mem::size_of::<*const u8>())
+ .cast::();
+ let len232 = l231;
+ let bytes232 = _rt::Vec::from_raw_parts(
+ l230.cast(),
+ len232,
+ len232,
+ );
+ let l233 = *base
+ .add(2 * ::core::mem::size_of::<*const u8>())
+ .cast::<*mut u8>();
+ let l234 = *base
+ .add(3 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let len235 = l234;
+ let bytes235 = _rt::Vec::from_raw_parts(
+ l233.cast(),
+ len235,
+ len235,
+ );
+ (_rt::string_lift(bytes232), _rt::string_lift(bytes235))
+ };
+ result236.push(e236);
+ }
+ _rt::cabi_dealloc(
+ base236,
+ len236 * (4 * ::core::mem::size_of::<*const u8>()),
+ ::core::mem::size_of::<*const u8>(),
+ );
+ let l237 = *arg0
+ .add(24 + 28 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let l238 = *arg0
+ .add(32 + 28 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ wavs::types::events::TriggerDataCosmosContractEvent {
+ contract_address: wavs::types::chain::CosmosAddress {
+ bech32_addr: _rt::string_lift(bytes220),
+ prefix_len: l221 as u32,
+ },
+ chain: _rt::string_lift(bytes224),
+ event: wavs::types::chain::CosmosEvent {
+ ty: _rt::string_lift(bytes227),
+ attributes: result236,
+ },
+ event_index: l237 as u64,
+ block_height: l238 as u64,
+ }
+ };
+ V247::CosmosContractEvent(e247)
+ }
+ 2 => {
+ let e247 = {
+ let l239 = *arg0
+ .add(16 + 20 * ::core::mem::size_of::<*const u8>())
+ .cast::<*mut u8>();
+ let l240 = *arg0
+ .add(16 + 21 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let len241 = l240;
+ let bytes241 = _rt::Vec::from_raw_parts(l239.cast(), len241, len241);
+ let l242 = *arg0
+ .add(16 + 22 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ wavs::types::events::TriggerDataBlockInterval {
+ chain: _rt::string_lift(bytes241),
+ block_height: l242 as u64,
+ }
+ };
+ V247::BlockInterval(e247)
+ }
+ 3 => {
+ let e247 = {
+ let l243 = *arg0
+ .add(16 + 20 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ wavs::types::events::TriggerDataCron {
+ trigger_time: wavs::types::core::Timestamp {
+ nanos: l243 as u64,
+ },
+ }
+ };
+ V247::Cron(e247)
+ }
+ n => {
+ debug_assert_eq!(n, 4, "invalid enum discriminant");
+ let e247 = {
+ let l244 = *arg0
+ .add(16 + 20 * ::core::mem::size_of::<*const u8>())
+ .cast::<*mut u8>();
+ let l245 = *arg0
+ .add(16 + 21 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let len246 = l245;
+ _rt::Vec::from_raw_parts(l244.cast(), len246, len246)
+ };
+ V247::Raw(e247)
+ }
+ };
+ let result248 = T::process_packet(wavs::aggregator::aggregator::Packet {
+ service: wavs::types::service::Service {
+ name: _rt::string_lift(bytes2),
+ workflows: result160,
+ status: v162,
+ manager: v170,
+ },
+ workflow_id: _rt::string_lift(bytes173),
+ envelope: wavs::aggregator::aggregator::Envelope {
+ event_id: _rt::Vec::from_raw_parts(l174.cast(), len176, len176),
+ ordering: _rt::Vec::from_raw_parts(l177.cast(), len179, len179),
+ payload: _rt::Vec::from_raw_parts(l180.cast(), len182, len182),
+ },
+ signature: wavs::aggregator::aggregator::EnvelopeSignature {
+ data: _rt::Vec::from_raw_parts(l183.cast(), len185, len185),
+ kind: wavs::types::service::SignatureKind {
+ algorithm: v187,
+ prefix: match l188 {
+ 0 => None,
+ 1 => {
+ let e = {
+ let l189 = i32::from(
+ *arg0
+ .add(2 + 20 * ::core::mem::size_of::<*const u8>())
+ .cast::(),
+ );
+ use wavs::types::service::SignaturePrefix as V190;
+ let v190 = match l189 {
+ n => {
+ debug_assert_eq!(n, 0, "invalid enum discriminant");
+ V190::Eip191
+ }
+ };
+ v190
+ };
+ Some(e)
+ }
+ _ => _rt::invalid_enum_discriminant(),
+ },
+ },
+ },
+ trigger_data: v247,
+ });
+ _rt::cabi_dealloc(arg0, 56 + 32 * ::core::mem::size_of::<*const u8>(), 8);
+ let ptr249 = (&raw mut _RET_AREA.0).cast::();
+ match result248 {
+ Ok(e) => {
+ *ptr249.add(0).cast::() = (0i32) as u8;
+ let vec259 = e;
+ let len259 = vec259.len();
+ let layout259 = _rt::alloc::Layout::from_size_align_unchecked(
+ vec259.len() * (32 + 4 * ::core::mem::size_of::<*const u8>()),
+ 8,
+ );
+ let result259 = if layout259.size() != 0 {
+ let ptr = _rt::alloc::alloc(layout259).cast::();
+ if ptr.is_null() {
+ _rt::alloc::handle_alloc_error(layout259);
+ }
+ ptr
+ } else {
+ ::core::ptr::null_mut()
+ };
+ for (i, e) in vec259.into_iter().enumerate() {
+ let base = result259
+ .add(i * (32 + 4 * ::core::mem::size_of::<*const u8>()));
+ {
+ use wavs::aggregator::aggregator::AggregatorAction as V258;
+ match e {
+ V258::Timer(e) => {
+ *base.add(0).cast::() = (0i32) as u8;
+ let wavs::aggregator::aggregator::TimerAction {
+ delay: delay250,
+ } = e;
+ let wavs::types::core::Duration { secs: secs251 } = delay250;
+ *base.add(8).cast::() = _rt::as_i64(secs251);
+ }
+ V258::Submit(e) => {
+ *base.add(0).cast::() = (1i32) as u8;
+ let wavs::aggregator::aggregator::SubmitAction {
+ chain: chain252,
+ contract_address: contract_address252,
+ gas_price: gas_price252,
+ } = e;
+ let vec253 = (chain252.into_bytes()).into_boxed_slice();
+ let ptr253 = vec253.as_ptr().cast::();
+ let len253 = vec253.len();
+ ::core::mem::forget(vec253);
+ *base
+ .add(8 + 1 * ::core::mem::size_of::<*const u8>())
+ .cast::() = len253;
+ *base.add(8).cast::<*mut u8>() = ptr253.cast_mut();
+ let wavs::types::chain::EvmAddress {
+ raw_bytes: raw_bytes254,
+ } = contract_address252;
+ let vec255 = (raw_bytes254).into_boxed_slice();
+ let ptr255 = vec255.as_ptr().cast::();
+ let len255 = vec255.len();
+ ::core::mem::forget(vec255);
+ *base
+ .add(8 + 3 * ::core::mem::size_of::<*const u8>())
+ .cast::() = len255;
+ *base
+ .add(8 + 2 * ::core::mem::size_of::<*const u8>())
+ .cast::<*mut u8>() = ptr255.cast_mut();
+ match gas_price252 {
+ Some(e) => {
+ *base
+ .add(8 + 4 * ::core::mem::size_of::<*const u8>())
+ .cast::() = (1i32) as u8;
+ let wavs::types::core::U128 { value: value256 } = e;
+ let (t257_0, t257_1) = value256;
+ *base
+ .add(16 + 4 * ::core::mem::size_of::<*const u8>())
+ .cast::() = _rt::as_i64(t257_0);
+ *base
+ .add(24 + 4 * ::core::mem::size_of::<*const u8>())
+ .cast::() = _rt::as_i64(t257_1);
+ }
+ None => {
+ *base
+ .add(8 + 4 * ::core::mem::size_of::<*const u8>())
+ .cast::() = (0i32) as u8;
+ }
+ };
+ }
+ }
+ }
+ }
+ *ptr249.add(2 * ::core::mem::size_of::<*const u8>()).cast::() = len259;
+ *ptr249.add(::core::mem::size_of::<*const u8>()).cast::<*mut u8>() = result259;
+ }
+ Err(e) => {
+ *ptr249.add(0).cast::() = (1i32) as u8;
+ let vec260 = (e.into_bytes()).into_boxed_slice();
+ let ptr260 = vec260.as_ptr().cast::();
+ let len260 = vec260.len();
+ ::core::mem::forget(vec260);
+ *ptr249.add(2 * ::core::mem::size_of::<*const u8>()).cast::() = len260;
+ *ptr249.add(::core::mem::size_of::<*const u8>()).cast::<*mut u8>() = ptr260
+ .cast_mut();
+ }
+ };
+ ptr249
+}
+#[doc(hidden)]
+#[allow(non_snake_case)]
+pub unsafe fn __post_return_process_packet(arg0: *mut u8) {
+ let l0 = i32::from(*arg0.add(0).cast::());
+ match l0 {
+ 0 => {
+ let l1 = *arg0.add(::core::mem::size_of::<*const u8>()).cast::<*mut u8>();
+ let l2 = *arg0.add(2 * ::core::mem::size_of::<*const u8>()).cast::();
+ let base9 = l1;
+ let len9 = l2;
+ for i in 0..len9 {
+ let base = base9.add(i * (32 + 4 * ::core::mem::size_of::<*const u8>()));
+ {
+ let l3 = i32::from(*base.add(0).cast::());
+ match l3 {
+ 0 => {}
+ _ => {
+ let l4 = *base.add(8).cast::<*mut u8>();
+ let l5 = *base
+ .add(8 + 1 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ _rt::cabi_dealloc(l4, l5, 1);
+ let l6 = *base
+ .add(8 + 2 * ::core::mem::size_of::<*const u8>())
+ .cast::<*mut u8>();
+ let l7 = *base
+ .add(8 + 3 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let base8 = l6;
+ let len8 = l7;
+ _rt::cabi_dealloc(base8, len8 * 1, 1);
+ }
+ }
+ }
+ }
+ _rt::cabi_dealloc(
+ base9,
+ len9 * (32 + 4 * ::core::mem::size_of::<*const u8>()),
+ 8,
+ );
+ }
+ _ => {
+ let l10 = *arg0.add(::core::mem::size_of::<*const u8>()).cast::<*mut u8>();
+ let l11 = *arg0.add(2 * ::core::mem::size_of::<*const u8>()).cast::();
+ _rt::cabi_dealloc(l10, l11, 1);
+ }
+ }
+}
+#[doc(hidden)]
+#[allow(non_snake_case)]
+pub unsafe fn _export_handle_timer_callback_cabi(arg0: *mut u8) -> *mut u8 {
+ #[cfg(target_arch = "wasm32")] _rt::run_ctors_once();
+ let l0 = *arg0.add(0).cast::<*mut u8>();
+ let l1 = *arg0.add(::core::mem::size_of::<*const u8>()).cast::();
+ let len2 = l1;
+ let bytes2 = _rt::Vec::from_raw_parts(l0.cast(), len2, len2);
+ let l3 = *arg0.add(2 * ::core::mem::size_of::<*const u8>()).cast::<*mut u8>();
+ let l4 = *arg0.add(3 * ::core::mem::size_of::<*const u8>()).cast::();
+ let base160 = l3;
+ let len160 = l4;
+ let mut result160 = _rt::Vec::with_capacity(len160);
+ for i in 0..len160 {
+ let base = base160.add(i * (144 + 42 * ::core::mem::size_of::<*const u8>()));
+ let e160 = {
+ let l5 = *base.add(0).cast::<*mut u8>();
+ let l6 = *base.add(::core::mem::size_of::<*const u8>()).cast::();
+ let len7 = l6;
+ let bytes7 = _rt::Vec::from_raw_parts(l5.cast(), len7, len7);
+ let l8 = i32::from(
+ *base.add(2 * ::core::mem::size_of::<*const u8>()).cast::(),
+ );
+ use wavs::types::service::Trigger as V43;
+ let v43 = match l8 {
+ 0 => {
+ let e43 = {
+ let l9 = *base
+ .add(8 + 2 * ::core::mem::size_of::<*const u8>())
+ .cast::<*mut u8>();
+ let l10 = *base
+ .add(8 + 3 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let len11 = l10;
+ let l12 = *base
+ .add(8 + 4 * ::core::mem::size_of::<*const u8>())
+ .cast::<*mut u8>();
+ let l13 = *base
+ .add(8 + 5 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let len14 = l13;
+ let bytes14 = _rt::Vec::from_raw_parts(l12.cast(), len14, len14);
+ let l15 = *base
+ .add(8 + 6 * ::core::mem::size_of::<*const u8>())
+ .cast::<*mut u8>();
+ let l16 = *base
+ .add(8 + 7 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let len17 = l16;
+ wavs::types::service::TriggerEvmContractEvent {
+ address: wavs::types::chain::EvmAddress {
+ raw_bytes: _rt::Vec::from_raw_parts(l9.cast(), len11, len11),
+ },
+ chain: _rt::string_lift(bytes14),
+ event_hash: _rt::Vec::from_raw_parts(
+ l15.cast(),
+ len17,
+ len17,
+ ),
+ }
+ };
+ V43::EvmContractEvent(e43)
+ }
+ 1 => {
+ let e43 = {
+ let l18 = *base
+ .add(8 + 2 * ::core::mem::size_of::<*const u8>())
+ .cast::<*mut u8>();
+ let l19 = *base
+ .add(8 + 3 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let len20 = l19;
+ let bytes20 = _rt::Vec::from_raw_parts(l18.cast(), len20, len20);
+ let l21 = *base
+ .add(8 + 4 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let l22 = *base
+ .add(8 + 5 * ::core::mem::size_of::<*const u8>())
+ .cast::<*mut u8>();
+ let l23 = *base
+ .add(8 + 6 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let len24 = l23;
+ let bytes24 = _rt::Vec::from_raw_parts(l22.cast(), len24, len24);
+ let l25 = *base
+ .add(8 + 7 * ::core::mem::size_of::<*const u8>())
+ .cast::<*mut u8>();
+ let l26 = *base
+ .add(8 + 8 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let len27 = l26;
+ let bytes27 = _rt::Vec::from_raw_parts(l25.cast(), len27, len27);
+ wavs::types::service::TriggerCosmosContractEvent {
+ address: wavs::types::chain::CosmosAddress {
+ bech32_addr: _rt::string_lift(bytes20),
+ prefix_len: l21 as u32,
+ },
+ chain: _rt::string_lift(bytes24),
+ event_type: _rt::string_lift(bytes27),
+ }
+ };
+ V43::CosmosContractEvent(e43)
+ }
+ 2 => {
+ let e43 = {
+ let l28 = *base
+ .add(8 + 2 * ::core::mem::size_of::<*const u8>())
+ .cast::<*mut u8>();
+ let l29 = *base
+ .add(8 + 3 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let len30 = l29;
+ let bytes30 = _rt::Vec::from_raw_parts(l28.cast(), len30, len30);
+ let l31 = *base
+ .add(8 + 4 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let l32 = i32::from(
+ *base
+ .add(16 + 4 * ::core::mem::size_of::<*const u8>())
+ .cast::(),
+ );
+ let l34 = i32::from(
+ *base
+ .add(32 + 4 * ::core::mem::size_of::<*const u8>())
+ .cast::(),
+ );
+ wavs::types::service::TriggerBlockInterval {
+ chain: _rt::string_lift(bytes30),
+ n_blocks: l31 as u32,
+ start_block: match l32 {
+ 0 => None,
+ 1 => {
+ let e = {
+ let l33 = *base
+ .add(24 + 4 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ l33 as u64
+ };
+ Some(e)
+ }
+ _ => _rt::invalid_enum_discriminant(),
+ },
+ end_block: match l34 {
+ 0 => None,
+ 1 => {
+ let e = {
+ let l35 = *base
+ .add(40 + 4 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ l35 as u64
+ };
+ Some(e)
+ }
+ _ => _rt::invalid_enum_discriminant(),
+ },
+ }
+ };
+ V43::BlockInterval(e43)
+ }
+ 3 => {
+ let e43 = {
+ let l36 = *base
+ .add(8 + 2 * ::core::mem::size_of::<*const u8>())
+ .cast::<*mut u8>();
+ let l37 = *base
+ .add(8 + 3 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let len38 = l37;
+ let bytes38 = _rt::Vec::from_raw_parts(l36.cast(), len38, len38);
+ let l39 = i32::from(
+ *base
+ .add(8 + 4 * ::core::mem::size_of::<*const u8>())
+ .cast::(),
+ );
+ let l41 = i32::from(
+ *base
+ .add(24 + 4 * ::core::mem::size_of::<*const u8>())
+ .cast::(),
+ );
+ wavs::types::service::TriggerCron {
+ schedule: _rt::string_lift(bytes38),
+ start_time: match l39 {
+ 0 => None,
+ 1 => {
+ let e = {
+ let l40 = *base
+ .add(16 + 4 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ wavs::types::core::Timestamp {
+ nanos: l40 as u64,
+ }
+ };
+ Some(e)
+ }
+ _ => _rt::invalid_enum_discriminant(),
+ },
+ end_time: match l41 {
+ 0 => None,
+ 1 => {
+ let e = {
+ let l42 = *base
+ .add(32 + 4 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ wavs::types::core::Timestamp {
+ nanos: l42 as u64,
+ }
+ };
+ Some(e)
+ }
+ _ => _rt::invalid_enum_discriminant(),
+ },
+ }
+ };
+ V43::Cron(e43)
+ }
+ n => {
+ debug_assert_eq!(n, 4, "invalid enum discriminant");
+ V43::Manual
+ }
+ };
+ let l44 = i32::from(
+ *base.add(48 + 4 * ::core::mem::size_of::<*const u8>()).cast::(),
+ );
+ use wavs::types::service::ComponentSource as V68;
+ let v68 = match l44 {
+ 0 => {
+ let e68 = {
+ let l45 = *base
+ .add(48 + 5 * ::core::mem::size_of::<*const u8>())
+ .cast::<*mut u8>();
+ let l46 = *base
+ .add(48 + 6 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let len47 = l46;
+ let bytes47 = _rt::Vec::from_raw_parts(l45.cast(), len47, len47);
+ let l48 = *base
+ .add(48 + 7 * ::core::mem::size_of::<*const u8>())
+ .cast::<*mut u8>();
+ let l49 = *base
+ .add(48 + 8 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let len50 = l49;
+ let bytes50 = _rt::Vec::from_raw_parts(l48.cast(), len50, len50);
+ wavs::types::service::ComponentSourceDownload {
+ uri: _rt::string_lift(bytes47),
+ digest: _rt::string_lift(bytes50),
+ }
+ };
+ V68::Download(e68)
+ }
+ 1 => {
+ let e68 = {
+ let l51 = *base
+ .add(48 + 5 * ::core::mem::size_of::<*const u8>())
+ .cast::<*mut u8>();
+ let l52 = *base
+ .add(48 + 6 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let len53 = l52;
+ let bytes53 = _rt::Vec::from_raw_parts(l51.cast(), len53, len53);
+ let l54 = i32::from(
+ *base
+ .add(48 + 7 * ::core::mem::size_of::<*const u8>())
+ .cast::(),
+ );
+ let l58 = i32::from(
+ *base
+ .add(48 + 10 * ::core::mem::size_of::<*const u8>())
+ .cast::(),
+ );
+ let l62 = *base
+ .add(48 + 13 * ::core::mem::size_of::<*const u8>())
+ .cast::<*mut u8>();
+ let l63 = *base
+ .add(48 + 14 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let len64 = l63;
+ let bytes64 = _rt::Vec::from_raw_parts(l62.cast(), len64, len64);
+ wavs::types::service::Registry {
+ digest: _rt::string_lift(bytes53),
+ domain: match l54 {
+ 0 => None,
+ 1 => {
+ let e = {
+ let l55 = *base
+ .add(48 + 8 * ::core::mem::size_of::<*const u8>())
+ .cast::<*mut u8>();
+ let l56 = *base
+ .add(48 + 9 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let len57 = l56;
+ let bytes57 = _rt::Vec::from_raw_parts(
+ l55.cast(),
+ len57,
+ len57,
+ );
+ _rt::string_lift(bytes57)
+ };
+ Some(e)
+ }
+ _ => _rt::invalid_enum_discriminant(),
+ },
+ version: match l58 {
+ 0 => None,
+ 1 => {
+ let e = {
+ let l59 = *base
+ .add(48 + 11 * ::core::mem::size_of::<*const u8>())
+ .cast::<*mut u8>();
+ let l60 = *base
+ .add(48 + 12 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let len61 = l60;
+ let bytes61 = _rt::Vec::from_raw_parts(
+ l59.cast(),
+ len61,
+ len61,
+ );
+ _rt::string_lift(bytes61)
+ };
+ Some(e)
+ }
+ _ => _rt::invalid_enum_discriminant(),
+ },
+ pkg: _rt::string_lift(bytes64),
+ }
+ };
+ V68::Registry(e68)
+ }
+ n => {
+ debug_assert_eq!(n, 2, "invalid enum discriminant");
+ let e68 = {
+ let l65 = *base
+ .add(48 + 5 * ::core::mem::size_of::<*const u8>())
+ .cast::<*mut u8>();
+ let l66 = *base
+ .add(48 + 6 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let len67 = l66;
+ let bytes67 = _rt::Vec::from_raw_parts(l65.cast(), len67, len67);
+ _rt::string_lift(bytes67)
+ };
+ V68::Digest(e68)
+ }
+ };
+ let l69 = i32::from(
+ *base.add(48 + 15 * ::core::mem::size_of::<*const u8>()).cast::(),
+ );
+ use wavs::types::service::AllowedHostPermission as V76;
+ let v76 = match l69 {
+ 0 => V76::All,
+ 1 => {
+ let e76 = {
+ let l70 = *base
+ .add(48 + 16 * ::core::mem::size_of::<*const u8>())
+ .cast::<*mut u8>();
+ let l71 = *base
+ .add(48 + 17 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let base75 = l70;
+ let len75 = l71;
+ let mut result75 = _rt::Vec::with_capacity(len75);
+ for i in 0..len75 {
+ let base = base75
+ .add(i * (2 * ::core::mem::size_of::<*const u8>()));
+ let e75 = {
+ let l72 = *base.add(0).cast::<*mut u8>();
+ let l73 = *base
+ .add(::core::mem::size_of::<*const u8>())
+ .cast::();
+ let len74 = l73;
+ let bytes74 = _rt::Vec::from_raw_parts(
+ l72.cast(),
+ len74,
+ len74,
+ );
+ _rt::string_lift(bytes74)
+ };
+ result75.push(e75);
+ }
+ _rt::cabi_dealloc(
+ base75,
+ len75 * (2 * ::core::mem::size_of::<*const u8>()),
+ ::core::mem::size_of::<*const u8>(),
+ );
+ result75
+ };
+ V76::Only(e76)
+ }
+ n => {
+ debug_assert_eq!(n, 2, "invalid enum discriminant");
+ V76::None
+ }
+ };
+ let l77 = i32::from(
+ *base.add(48 + 18 * ::core::mem::size_of::<*const u8>()).cast::(),
+ );
+ let l78 = i32::from(
+ *base.add(56 + 18 * ::core::mem::size_of::<*const u8>()).cast::(),
+ );
+ let l80 = i32::from(
+ *base.add(72 + 18 * ::core::mem::size_of::<*const u8>()).cast::(),
+ );
+ let l82 = *base
+ .add(88 + 18 * ::core::mem::size_of::<*const u8>())
+ .cast::<*mut u8>();
+ let l83 = *base
+ .add(88 + 19 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let base90 = l82;
+ let len90 = l83;
+ let mut result90 = _rt::Vec::with_capacity(len90);
+ for i in 0..len90 {
+ let base = base90.add(i * (4 * ::core::mem::size_of::<*const u8>()));
+ let e90 = {
+ let l84 = *base.add(0).cast::<*mut u8>();
+ let l85 = *base
+ .add(::core::mem::size_of::<*const u8>())
+ .cast::();
+ let len86 = l85;
+ let bytes86 = _rt::Vec::from_raw_parts(l84.cast(), len86, len86);
+ let l87 = *base
+ .add(2 * ::core::mem::size_of::<*const u8>())
+ .cast::<*mut u8>();
+ let l88 = *base
+ .add(3 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let len89 = l88;
+ let bytes89 = _rt::Vec::from_raw_parts(l87.cast(), len89, len89);
+ (_rt::string_lift(bytes86), _rt::string_lift(bytes89))
+ };
+ result90.push(e90);
+ }
+ _rt::cabi_dealloc(
+ base90,
+ len90 * (4 * ::core::mem::size_of::<*const u8>()),
+ ::core::mem::size_of::<*const u8>(),
+ );
+ let l91 = *base
+ .add(88 + 20 * ::core::mem::size_of::<*const u8>())
+ .cast::<*mut u8>();
+ let l92 = *base
+ .add(88 + 21 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let base96 = l91;
+ let len96 = l92;
+ let mut result96 = _rt::Vec::with_capacity(len96);
+ for i in 0..len96 {
+ let base = base96.add(i * (2 * ::core::mem::size_of::<*const u8>()));
+ let e96 = {
+ let l93 = *base.add(0).cast::<*mut u8>();
+ let l94 = *base
+ .add(::core::mem::size_of::<*const u8>())
+ .cast::();
+ let len95 = l94;
+ let bytes95 = _rt::Vec::from_raw_parts(l93.cast(), len95, len95);
+ _rt::string_lift(bytes95)
+ };
+ result96.push(e96);
+ }
+ _rt::cabi_dealloc(
+ base96,
+ len96 * (2 * ::core::mem::size_of::<*const u8>()),
+ ::core::mem::size_of::<*const u8>(),
+ );
+ let l97 = i32::from(
+ *base.add(88 + 22 * ::core::mem::size_of::<*const u8>()).cast::(),
+ );
+ use wavs::types::service::Submit as V159;
+ let v159 = match l97 {
+ 0 => V159::None,
+ n => {
+ debug_assert_eq!(n, 1, "invalid enum discriminant");
+ let e159 = {
+ let l98 = *base
+ .add(96 + 22 * ::core::mem::size_of::<*const u8>())
+ .cast::<*mut u8>();
+ let l99 = *base
+ .add(96 + 23 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let len100 = l99;
+ let bytes100 = _rt::Vec::from_raw_parts(
+ l98.cast(),
+ len100,
+ len100,
+ );
+ let l101 = i32::from(
+ *base
+ .add(96 + 24 * ::core::mem::size_of::<*const u8>())
+ .cast::(),
+ );
+ use wavs::types::service::ComponentSource as V125;
+ let v125 = match l101 {
+ 0 => {
+ let e125 = {
+ let l102 = *base
+ .add(96 + 25 * ::core::mem::size_of::<*const u8>())
+ .cast::<*mut u8>();
+ let l103 = *base
+ .add(96 + 26 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let len104 = l103;
+ let bytes104 = _rt::Vec::from_raw_parts(
+ l102.cast(),
+ len104,
+ len104,
+ );
+ let l105 = *base
+ .add(96 + 27 * ::core::mem::size_of::<*const u8>())
+ .cast::<*mut u8>();
+ let l106 = *base
+ .add(96 + 28 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let len107 = l106;
+ let bytes107 = _rt::Vec::from_raw_parts(
+ l105.cast(),
+ len107,
+ len107,
+ );
+ wavs::types::service::ComponentSourceDownload {
+ uri: _rt::string_lift(bytes104),
+ digest: _rt::string_lift(bytes107),
+ }
+ };
+ V125::Download(e125)
+ }
+ 1 => {
+ let e125 = {
+ let l108 = *base
+ .add(96 + 25 * ::core::mem::size_of::<*const u8>())
+ .cast::<*mut u8>();
+ let l109 = *base
+ .add(96 + 26 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let len110 = l109;
+ let bytes110 = _rt::Vec::from_raw_parts(
+ l108.cast(),
+ len110,
+ len110,
+ );
+ let l111 = i32::from(
+ *base
+ .add(96 + 27 * ::core::mem::size_of::<*const u8>())
+ .cast::(),
+ );
+ let l115 = i32::from(
+ *base
+ .add(96 + 30 * ::core::mem::size_of::<*const u8>())
+ .cast::(),
+ );
+ let l119 = *base
+ .add(96 + 33 * ::core::mem::size_of::<*const u8>())
+ .cast::<*mut u8>();
+ let l120 = *base
+ .add(96 + 34 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let len121 = l120;
+ let bytes121 = _rt::Vec::from_raw_parts(
+ l119.cast(),
+ len121,
+ len121,
+ );
+ wavs::types::service::Registry {
+ digest: _rt::string_lift(bytes110),
+ domain: match l111 {
+ 0 => None,
+ 1 => {
+ let e = {
+ let l112 = *base
+ .add(96 + 28 * ::core::mem::size_of::<*const u8>())
+ .cast::<*mut u8>();
+ let l113 = *base
+ .add(96 + 29 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let len114 = l113;
+ let bytes114 = _rt::Vec::from_raw_parts(
+ l112.cast(),
+ len114,
+ len114,
+ );
+ _rt::string_lift(bytes114)
+ };
+ Some(e)
+ }
+ _ => _rt::invalid_enum_discriminant(),
+ },
+ version: match l115 {
+ 0 => None,
+ 1 => {
+ let e = {
+ let l116 = *base
+ .add(96 + 31 * ::core::mem::size_of::<*const u8>())
+ .cast::<*mut u8>();
+ let l117 = *base
+ .add(96 + 32 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let len118 = l117;
+ let bytes118 = _rt::Vec::from_raw_parts(
+ l116.cast(),
+ len118,
+ len118,
+ );
+ _rt::string_lift(bytes118)
+ };
+ Some(e)
+ }
+ _ => _rt::invalid_enum_discriminant(),
+ },
+ pkg: _rt::string_lift(bytes121),
+ }
+ };
+ V125::Registry(e125)
+ }
+ n => {
+ debug_assert_eq!(n, 2, "invalid enum discriminant");
+ let e125 = {
+ let l122 = *base
+ .add(96 + 25 * ::core::mem::size_of::<*const u8>())
+ .cast::<*mut u8>();
+ let l123 = *base
+ .add(96 + 26 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let len124 = l123;
+ let bytes124 = _rt::Vec::from_raw_parts(
+ l122.cast(),
+ len124,
+ len124,
+ );
+ _rt::string_lift(bytes124)
+ };
+ V125::Digest(e125)
+ }
+ };
+ let l126 = i32::from(
+ *base
+ .add(96 + 35 * ::core::mem::size_of::<*const u8>())
+ .cast::(),
+ );
+ use wavs::types::service::AllowedHostPermission as V133;
+ let v133 = match l126 {
+ 0 => V133::All,
+ 1 => {
+ let e133 = {
+ let l127 = *base
+ .add(96 + 36 * ::core::mem::size_of::<*const u8>())
+ .cast::<*mut u8>();
+ let l128 = *base
+ .add(96 + 37 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let base132 = l127;
+ let len132 = l128;
+ let mut result132 = _rt::Vec::with_capacity(len132);
+ for i in 0..len132 {
+ let base = base132
+ .add(i * (2 * ::core::mem::size_of::<*const u8>()));
+ let e132 = {
+ let l129 = *base.add(0).cast::<*mut u8>();
+ let l130 = *base
+ .add(::core::mem::size_of::<*const u8>())
+ .cast::();
+ let len131 = l130;
+ let bytes131 = _rt::Vec::from_raw_parts(
+ l129.cast(),
+ len131,
+ len131,
+ );
+ _rt::string_lift(bytes131)
+ };
+ result132.push(e132);
+ }
+ _rt::cabi_dealloc(
+ base132,
+ len132 * (2 * ::core::mem::size_of::<*const u8>()),
+ ::core::mem::size_of::<*const u8>(),
+ );
+ result132
+ };
+ V133::Only(e133)
+ }
+ n => {
+ debug_assert_eq!(n, 2, "invalid enum discriminant");
+ V133::None
+ }
+ };
+ let l134 = i32::from(
+ *base
+ .add(96 + 38 * ::core::mem::size_of::<*const u8>())
+ .cast::(),
+ );
+ let l135 = i32::from(
+ *base
+ .add(104 + 38 * ::core::mem::size_of::<*const u8>())
+ .cast::(),
+ );
+ let l137 = i32::from(
+ *base
+ .add(120 + 38 * ::core::mem::size_of::<*const u8>())
+ .cast::(),
+ );
+ let l139 = *base
+ .add(136 + 38 * ::core::mem::size_of::<*const u8>())
+ .cast::<*mut u8>();
+ let l140 = *base
+ .add(136 + 39 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let base147 = l139;
+ let len147 = l140;
+ let mut result147 = _rt::Vec::with_capacity(len147);
+ for i in 0..len147 {
+ let base = base147
+ .add(i * (4 * ::core::mem::size_of::<*const u8>()));
+ let e147 = {
+ let l141 = *base.add(0).cast::<*mut u8>();
+ let l142 = *base
+ .add(::core::mem::size_of::<*const u8>())
+ .cast::();
+ let len143 = l142;
+ let bytes143 = _rt::Vec::from_raw_parts(
+ l141.cast(),
+ len143,
+ len143,
+ );
+ let l144 = *base
+ .add(2 * ::core::mem::size_of::<*const u8>())
+ .cast::<*mut u8>();
+ let l145 = *base
+ .add(3 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let len146 = l145;
+ let bytes146 = _rt::Vec::from_raw_parts(
+ l144.cast(),
+ len146,
+ len146,
+ );
+ (_rt::string_lift(bytes143), _rt::string_lift(bytes146))
+ };
+ result147.push(e147);
+ }
+ _rt::cabi_dealloc(
+ base147,
+ len147 * (4 * ::core::mem::size_of::<*const u8>()),
+ ::core::mem::size_of::<*const u8>(),
+ );
+ let l148 = *base
+ .add(136 + 40 * ::core::mem::size_of::<*const u8>())
+ .cast::<*mut u8>();
+ let l149 = *base
+ .add(136 + 41 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let base153 = l148;
+ let len153 = l149;
+ let mut result153 = _rt::Vec::with_capacity(len153);
+ for i in 0..len153 {
+ let base = base153
+ .add(i * (2 * ::core::mem::size_of::<*const u8>()));
+ let e153 = {
+ let l150 = *base.add(0).cast::<*mut u8>();
+ let l151 = *base
+ .add(::core::mem::size_of::<*const u8>())
+ .cast::();
+ let len152 = l151;
+ let bytes152 = _rt::Vec::from_raw_parts(
+ l150.cast(),
+ len152,
+ len152,
+ );
+ _rt::string_lift(bytes152)
+ };
+ result153.push(e153);
+ }
+ _rt::cabi_dealloc(
+ base153,
+ len153 * (2 * ::core::mem::size_of::<*const u8>()),
+ ::core::mem::size_of::<*const u8>(),
+ );
+ let l154 = i32::from(
+ *base
+ .add(136 + 42 * ::core::mem::size_of::<*const u8>())
+ .cast::(),
+ );
+ use wavs::types::service::SignatureAlgorithm as V155;
+ let v155 = match l154 {
+ n => {
+ debug_assert_eq!(n, 0, "invalid enum discriminant");
+ V155::Secp256k1
+ }
+ };
+ let l156 = i32::from(
+ *base
+ .add(137 + 42 * ::core::mem::size_of::<*const u8>())
+ .cast::(),
+ );
+ wavs::types::service::AggregatorSubmit {
+ url: _rt::string_lift(bytes100),
+ component: wavs::types::service::Component {
+ source: v125,
+ permissions: wavs::types::service::Permissions {
+ allowed_http_hosts: v133,
+ file_system: _rt::bool_lift(l134 as u8),
+ },
+ fuel_limit: match l135 {
+ 0 => None,
+ 1 => {
+ let e = {
+ let l136 = *base
+ .add(112 + 38 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ l136 as u64
+ };
+ Some(e)
+ }
+ _ => _rt::invalid_enum_discriminant(),
+ },
+ time_limit_seconds: match l137 {
+ 0 => None,
+ 1 => {
+ let e = {
+ let l138 = *base
+ .add(128 + 38 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ l138 as u64
+ };
+ Some(e)
+ }
+ _ => _rt::invalid_enum_discriminant(),
+ },
+ config: result147,
+ env_keys: result153,
+ },
+ signature_kind: wavs::types::service::SignatureKind {
+ algorithm: v155,
+ prefix: match l156 {
+ 0 => None,
+ 1 => {
+ let e = {
+ let l157 = i32::from(
+ *base
+ .add(138 + 42 * ::core::mem::size_of::<*const u8>())
+ .cast::(),
+ );
+ use wavs::types::service::SignaturePrefix as V158;
+ let v158 = match l157 {
+ n => {
+ debug_assert_eq!(n, 0, "invalid enum discriminant");
+ V158::Eip191
+ }
+ };
+ v158
+ };
+ Some(e)
+ }
+ _ => _rt::invalid_enum_discriminant(),
+ },
+ },
+ }
+ };
+ V159::Aggregator(e159)
+ }
+ };
+ (
+ _rt::string_lift(bytes7),
+ wavs::types::service::Workflow {
+ trigger: v43,
+ component: wavs::types::service::Component {
+ source: v68,
+ permissions: wavs::types::service::Permissions {
+ allowed_http_hosts: v76,
+ file_system: _rt::bool_lift(l77 as u8),
+ },
+ fuel_limit: match l78 {
+ 0 => None,
+ 1 => {
+ let e = {
+ let l79 = *base
+ .add(64 + 18 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ l79 as u64
+ };
+ Some(e)
+ }
+ _ => _rt::invalid_enum_discriminant(),
+ },
+ time_limit_seconds: match l80 {
+ 0 => None,
+ 1 => {
+ let e = {
+ let l81 = *base
+ .add(80 + 18 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ l81 as u64
+ };
+ Some(e)
+ }
+ _ => _rt::invalid_enum_discriminant(),
+ },
+ config: result90,
+ env_keys: result96,
+ },
+ submit: v159,
+ },
+ )
+ };
+ result160.push(e160);
+ }
+ _rt::cabi_dealloc(
+ base160,
+ len160 * (144 + 42 * ::core::mem::size_of::<*const u8>()),
+ 8,
+ );
+ let l161 = i32::from(
+ *arg0.add(4 * ::core::mem::size_of::<*const u8>()).cast::(),
+ );
+ use wavs::types::service::ServiceStatus as V162;
+ let v162 = match l161 {
+ 0 => V162::Active,
+ n => {
+ debug_assert_eq!(n, 1, "invalid enum discriminant");
+ V162::Paused
+ }
+ };
+ let l163 = i32::from(
+ *arg0.add(5 * ::core::mem::size_of::<*const u8>()).cast::(),
+ );
+ use wavs::types::service::ServiceManager as V170;
+ let v170 = match l163 {
+ n => {
+ debug_assert_eq!(n, 0, "invalid enum discriminant");
+ let e170 = {
+ let l164 = *arg0
+ .add(6 * ::core::mem::size_of::<*const u8>())
+ .cast::<*mut u8>();
+ let l165 = *arg0
+ .add(7 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let len166 = l165;
+ let bytes166 = _rt::Vec::from_raw_parts(l164.cast(), len166, len166);
+ let l167 = *arg0
+ .add(8 * ::core::mem::size_of::<*const u8>())
+ .cast::<*mut u8>();
+ let l168 = *arg0
+ .add(9 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let len169 = l168;
+ wavs::types::service::EvmManager {
+ chain: _rt::string_lift(bytes166),
+ address: wavs::types::chain::EvmAddress {
+ raw_bytes: _rt::Vec::from_raw_parts(l167.cast(), len169, len169),
+ },
+ }
+ };
+ V170::Evm(e170)
+ }
+ };
+ let l171 = *arg0.add(10 * ::core::mem::size_of::<*const u8>()).cast::<*mut u8>();
+ let l172 = *arg0.add(11 * ::core::mem::size_of::<*const u8>()).cast::();
+ let len173 = l172;
+ let bytes173 = _rt::Vec::from_raw_parts(l171.cast(), len173, len173);
+ let l174 = *arg0.add(12 * ::core::mem::size_of::<*const u8>()).cast::<*mut u8>();
+ let l175 = *arg0.add(13 * ::core::mem::size_of::<*const u8>()).cast::();
+ let len176 = l175;
+ let l177 = *arg0.add(14 * ::core::mem::size_of::<*const u8>()).cast::<*mut u8>();
+ let l178 = *arg0.add(15 * ::core::mem::size_of::<*const u8>()).cast::();
+ let len179 = l178;
+ let l180 = *arg0.add(16 * ::core::mem::size_of::<*const u8>()).cast::<*mut u8>();
+ let l181 = *arg0.add(17 * ::core::mem::size_of::<*const u8>()).cast::();
+ let len182 = l181;
+ let l183 = *arg0.add(18 * ::core::mem::size_of::<*const u8>()).cast::<*mut u8>();
+ let l184 = *arg0.add(19 * ::core::mem::size_of::<*const u8>()).cast::();
+ let len185 = l184;
+ let l186 = i32::from(
+ *arg0.add(20 * ::core::mem::size_of::<*const u8>()).cast::(),
+ );
+ use wavs::types::service::SignatureAlgorithm as V187;
+ let v187 = match l186 {
+ n => {
+ debug_assert_eq!(n, 0, "invalid enum discriminant");
+ V187::Secp256k1
+ }
+ };
+ let l188 = i32::from(
+ *arg0.add(1 + 20 * ::core::mem::size_of::<*const u8>()).cast::(),
+ );
+ let l191 = i32::from(
+ *arg0.add(8 + 20 * ::core::mem::size_of::<*const u8>()).cast::(),
+ );
+ use wavs::types::events::TriggerData as V247;
+ let v247 = match l191 {
+ 0 => {
+ let e247 = {
+ let l192 = *arg0
+ .add(16 + 20 * ::core::mem::size_of::<*const u8>())
+ .cast::<*mut u8>();
+ let l193 = *arg0
+ .add(16 + 21 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let len194 = l193;
+ let bytes194 = _rt::Vec::from_raw_parts(l192.cast(), len194, len194);
+ let l195 = *arg0
+ .add(16 + 22 * ::core::mem::size_of::<*const u8>())
+ .cast::<*mut u8>();
+ let l196 = *arg0
+ .add(16 + 23 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let len197 = l196;
+ let l198 = *arg0
+ .add(16 + 24 * ::core::mem::size_of::<*const u8>())
+ .cast::<*mut u8>();
+ let l199 = *arg0
+ .add(16 + 25 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let base203 = l198;
+ let len203 = l199;
+ let mut result203 = _rt::Vec::with_capacity(len203);
+ for i in 0..len203 {
+ let base = base203
+ .add(i * (2 * ::core::mem::size_of::<*const u8>()));
+ let e203 = {
+ let l200 = *base.add(0).cast::<*mut u8>();
+ let l201 = *base
+ .add(::core::mem::size_of::<*const u8>())
+ .cast::();
+ let len202 = l201;
+ _rt::Vec::from_raw_parts(l200.cast(), len202, len202)
+ };
+ result203.push(e203);
+ }
+ _rt::cabi_dealloc(
+ base203,
+ len203 * (2 * ::core::mem::size_of::<*const u8>()),
+ ::core::mem::size_of::<*const u8>(),
+ );
+ let l204 = *arg0
+ .add(16 + 26 * ::core::mem::size_of::<*const u8>())
+ .cast::<*mut u8>();
+ let l205 = *arg0
+ .add(16 + 27 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let len206 = l205;
+ let l207 = *arg0
+ .add(16 + 28 * ::core::mem::size_of::<*const u8>())
+ .cast::<*mut u8>();
+ let l208 = *arg0
+ .add(16 + 29 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let len209 = l208;
+ let l210 = *arg0
+ .add(16 + 30 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let l211 = *arg0
+ .add(24 + 30 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let l212 = *arg0
+ .add(32 + 30 * ::core::mem::size_of::<*const u8>())
+ .cast::<*mut u8>();
+ let l213 = *arg0
+ .add(32 + 31 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let len214 = l213;
+ let l215 = i32::from(
+ *arg0.add(32 + 32 * ::core::mem::size_of::<*const u8>()).cast::(),
+ );
+ let l217 = *arg0
+ .add(48 + 32 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ wavs::types::events::TriggerDataEvmContractEvent {
+ chain: _rt::string_lift(bytes194),
+ log: wavs::types::chain::EvmEventLog {
+ address: wavs::types::chain::EvmAddress {
+ raw_bytes: _rt::Vec::from_raw_parts(
+ l195.cast(),
+ len197,
+ len197,
+ ),
+ },
+ data: wavs::types::chain::EvmEventLogData {
+ topics: result203,
+ data: _rt::Vec::from_raw_parts(l204.cast(), len206, len206),
+ },
+ tx_hash: _rt::Vec::from_raw_parts(l207.cast(), len209, len209),
+ block_number: l210 as u64,
+ log_index: l211 as u64,
+ block_hash: _rt::Vec::from_raw_parts(
+ l212.cast(),
+ len214,
+ len214,
+ ),
+ block_timestamp: match l215 {
+ 0 => None,
+ 1 => {
+ let e = {
+ let l216 = *arg0
+ .add(40 + 32 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ l216 as u64
+ };
+ Some(e)
+ }
+ _ => _rt::invalid_enum_discriminant(),
+ },
+ tx_index: l217 as u64,
+ },
+ }
+ };
+ V247::EvmContractEvent(e247)
+ }
+ 1 => {
+ let e247 = {
+ let l218 = *arg0
+ .add(16 + 20 * ::core::mem::size_of::<*const u8>())
+ .cast::<*mut u8>();
+ let l219 = *arg0
+ .add(16 + 21 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let len220 = l219;
+ let bytes220 = _rt::Vec::from_raw_parts(l218.cast(), len220, len220);
+ let l221 = *arg0
+ .add(16 + 22 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let l222 = *arg0
+ .add(16 + 23 * ::core::mem::size_of::<*const u8>())
+ .cast::<*mut u8>();
+ let l223 = *arg0
+ .add(16 + 24 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let len224 = l223;
+ let bytes224 = _rt::Vec::from_raw_parts(l222.cast(), len224, len224);
+ let l225 = *arg0
+ .add(16 + 25 * ::core::mem::size_of::<*const u8>())
+ .cast::<*mut u8>();
+ let l226 = *arg0
+ .add(16 + 26 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let len227 = l226;
+ let bytes227 = _rt::Vec::from_raw_parts(l225.cast(), len227, len227);
+ let l228 = *arg0
+ .add(16 + 27 * ::core::mem::size_of::<*const u8>())
+ .cast::<*mut u8>();
+ let l229 = *arg0
+ .add(16 + 28 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let base236 = l228;
+ let len236 = l229;
+ let mut result236 = _rt::Vec::with_capacity(len236);
+ for i in 0..len236 {
+ let base = base236
+ .add(i * (4 * ::core::mem::size_of::<*const u8>()));
+ let e236 = {
+ let l230 = *base.add(0).cast::<*mut u8>();
+ let l231 = *base
+ .add(::core::mem::size_of::<*const u8>())
+ .cast::();
+ let len232 = l231;
+ let bytes232 = _rt::Vec::from_raw_parts(
+ l230.cast(),
+ len232,
+ len232,
+ );
+ let l233 = *base
+ .add(2 * ::core::mem::size_of::<*const u8>())
+ .cast::<*mut u8>();
+ let l234 = *base
+ .add(3 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let len235 = l234;
+ let bytes235 = _rt::Vec::from_raw_parts(
+ l233.cast(),
+ len235,
+ len235,
+ );
+ (_rt::string_lift(bytes232), _rt::string_lift(bytes235))
+ };
+ result236.push(e236);
+ }
+ _rt::cabi_dealloc(
+ base236,
+ len236 * (4 * ::core::mem::size_of::<*const u8>()),
+ ::core::mem::size_of::<*const u8>(),
+ );
+ let l237 = *arg0
+ .add(24 + 28 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let l238 = *arg0
+ .add(32 + 28 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ wavs::types::events::TriggerDataCosmosContractEvent {
+ contract_address: wavs::types::chain::CosmosAddress {
+ bech32_addr: _rt::string_lift(bytes220),
+ prefix_len: l221 as u32,
+ },
+ chain: _rt::string_lift(bytes224),
+ event: wavs::types::chain::CosmosEvent {
+ ty: _rt::string_lift(bytes227),
+ attributes: result236,
+ },
+ event_index: l237 as u64,
+ block_height: l238 as u64,
+ }
+ };
+ V247::CosmosContractEvent(e247)
+ }
+ 2 => {
+ let e247 = {
+ let l239 = *arg0
+ .add(16 + 20 * ::core::mem::size_of::<*const u8>())
+ .cast::<*mut u8>();
+ let l240 = *arg0
+ .add(16 + 21 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let len241 = l240;
+ let bytes241 = _rt::Vec::from_raw_parts(l239.cast(), len241, len241);
+ let l242 = *arg0
+ .add(16 + 22 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ wavs::types::events::TriggerDataBlockInterval {
+ chain: _rt::string_lift(bytes241),
+ block_height: l242 as u64,
+ }
+ };
+ V247::BlockInterval(e247)
+ }
+ 3 => {
+ let e247 = {
+ let l243 = *arg0
+ .add(16 + 20 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ wavs::types::events::TriggerDataCron {
+ trigger_time: wavs::types::core::Timestamp {
+ nanos: l243 as u64,
+ },
+ }
+ };
+ V247::Cron(e247)
+ }
+ n => {
+ debug_assert_eq!(n, 4, "invalid enum discriminant");
+ let e247 = {
+ let l244 = *arg0
+ .add(16 + 20 * ::core::mem::size_of::<*const u8>())
+ .cast::<*mut u8>();
+ let l245 = *arg0
+ .add(16 + 21 * ::core::mem::size_of::<*const u8>())
+ .cast::();
+ let len246 = l245;
+ _rt::Vec::from_raw_parts(l244.cast(), len246, len246)
+ };
+ V247::Raw(e247)
+ }
+ };
+ let result248 = T::handle_timer_callback(wavs::aggregator::aggregator::Packet {
+ service: wavs::types::service::Service {
+ name: _rt::string_lift(bytes2),
+ workflows: result160,
+ status: v162,
+ manager: v170,
+ },
+ workflow_id: _rt::string_lift(bytes173),
+ envelope: wavs::aggregator::aggregator::Envelope {
+ event_id: _rt::Vec::from_raw_parts(l174.cast(), len176, len176),
+ ordering: _rt::Vec::from_raw_parts(l177.cast(), len179, len179),
+ payload: _rt::Vec::from_raw_parts(l180.cast(), len182, len182),
+ },
+ signature: wavs::aggregator::aggregator::EnvelopeSignature {
+ data: _rt::Vec::from_raw_parts(l183.cast(), len185, len185),
+ kind: wavs::types::service::SignatureKind {
+ algorithm: v187,
+ prefix: match l188 {
+ 0 => None,
+ 1 => {
+ let e = {
+ let l189 = i32::from(
+ *arg0
+ .add(2 + 20 * ::core::mem::size_of::<*const u8>())
+ .cast::(),
+ );
+ use wavs::types::service::SignaturePrefix as V190;
+ let v190 = match l189 {
+ n => {
+ debug_assert_eq!(n, 0, "invalid enum discriminant");
+ V190::Eip191
+ }
+ };
+ v190
+ };
+ Some(e)
+ }
+ _ => _rt::invalid_enum_discriminant(),
+ },
+ },
+ },
+ trigger_data: v247,
+ });
+ _rt::cabi_dealloc(arg0, 56 + 32 * ::core::mem::size_of::<*const u8>(), 8);
+ let ptr249 = (&raw mut _RET_AREA.0).cast::();
+ match result248 {
+ Ok(e) => {
+ *ptr249.add(0).cast::() = (0i32) as u8;
+ let vec259 = e;
+ let len259 = vec259.len();
+ let layout259 = _rt::alloc::Layout::from_size_align_unchecked(
+ vec259.len() * (32 + 4 * ::core::mem::size_of::<*const u8>()),
+ 8,
+ );
+ let result259 = if layout259.size() != 0 {
+ let ptr = _rt::alloc::alloc(layout259).cast::();
+ if ptr.is_null() {
+ _rt::alloc::handle_alloc_error(layout259);
+ }
+ ptr
+ } else {
+ ::core::ptr::null_mut()
+ };
+ for (i, e) in vec259.into_iter().enumerate() {
+ let base = result259
+ .add(i * (32 + 4 * ::core::mem::size_of::<*const u8>()));
+ {
+ use wavs::aggregator::aggregator::AggregatorAction as V258;
+ match e {
+ V258::Timer(e) => {
+ *base.add(0).cast::() = (0i32) as u8;
+ let wavs::aggregator::aggregator::TimerAction {
+ delay: delay250,
+ } = e;
+ let wavs::types::core::Duration { secs: secs251 } = delay250;
+ *base.add(8).cast::() = _rt::as_i64(secs251);
+ }
+ V258::Submit(e) => {
+ *base.add(0).cast::