From 2d5557c03b2dda482b1d67590e08a099b07fd441 Mon Sep 17 00:00:00 2001 From: Reece Williams Date: Tue, 24 Jun 2025 14:36:58 -0500 Subject: [PATCH 1/6] release: 0.4.0 --- Cargo-component.lock | 6 +- Cargo.lock | 4 +- Cargo.toml | 2 +- components/evm-price-oracle/Cargo.toml | 2 +- components/evm-price-oracle/src/bindings.rs | 645 +++++++++--------- components/golang-evm-price-oracle/Makefile | 2 +- components/golang-evm-price-oracle/go.mod | 2 +- components/golang-evm-price-oracle/go.sum | 4 +- components/js-evm-price-oracle/Makefile | 2 +- components/js-evm-price-oracle/index.ts | 2 +- .../components/blockchain-interactions.mdx | 2 +- docs/handbook/components/network-requests.mdx | 2 +- docs/handbook/template.mdx | 2 +- script/start_all.sh | 2 +- 14 files changed, 339 insertions(+), 340 deletions(-) diff --git a/Cargo-component.lock b/Cargo-component.lock index d792bef9..02fdaeeb 100644 --- a/Cargo-component.lock +++ b/Cargo-component.lock @@ -6,6 +6,6 @@ version = 1 name = "wavs:worker" [[package.version]] -requirement = "^0.4.0-beta.4" -version = "0.4.0-beta.4" -digest = "sha256:daee6b7f83a38ebfe7ed168d17e4c97cf6dc2d1b5af3816d3088c19daf7c5d8c" +requirement = "^0.4.0" +version = "0.4.0" +digest = "sha256:3530635218173131d0af9f114f61d97f08f080b3e25f1daacb15dc6dafa302ec" diff --git a/Cargo.lock b/Cargo.lock index 8b7b3bd7..04acd446 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3431,9 +3431,9 @@ dependencies = [ [[package]] name = "wavs-wasi-utils" -version = "0.4.0-beta.4" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d51bd84a040845cc99a86ab8ac5bab641f5e9560f5b8038de358e12bbc36d7f5" +checksum = "14e8eac2bf7511c34b1efb62175ba84479d5f039b194a64bd1a089cfb65b0381" dependencies = [ "alloy-json-rpc", "alloy-primitives", diff --git a/Cargo.toml b/Cargo.toml index d494498f..1fa9282a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -18,7 +18,7 @@ wit-bindgen-rt ={ version = "0.42.1", features = ["bitflags"]} wit-bindgen = "0.42.1" wstd = "0.5.3" wasi = "0.14.1" -wavs-wasi-utils = "0.4.0-beta.4" +wavs-wasi-utils = "0.4.0" # Other serde = { version = "1.0.219", features = ["derive"] } diff --git a/components/evm-price-oracle/Cargo.toml b/components/evm-price-oracle/Cargo.toml index 5977b9a3..036866a7 100644 --- a/components/evm-price-oracle/Cargo.toml +++ b/components/evm-price-oracle/Cargo.toml @@ -28,4 +28,4 @@ lto = true [package.metadata.component] package = "component:evm-price-oracle" -target = "wavs:worker/layer-trigger-world@0.4.0-beta.4" +target = "wavs:worker/layer-trigger-world@0.4.0" diff --git a/components/evm-price-oracle/src/bindings.rs b/components/evm-price-oracle/src/bindings.rs index 7c4b74f6..d62d859c 100644 --- a/components/evm-price-oracle/src/bindings.rs +++ b/components/evm-price-oracle/src/bindings.rs @@ -16173,11 +16173,11 @@ macro_rules! __export_layer_trigger_world_impl { #[doc(inline)] pub(crate) use __export_layer_trigger_world_impl as export; #[cfg(target_arch = "wasm32")] -#[unsafe(link_section = "component-type:wit-bindgen:0.41.0:wavs:worker@0.4.0-beta.4:layer-trigger-world:encoded world")] +#[unsafe(link_section = "component-type:wit-bindgen:0.41.0:wavs:worker@0.4.0:layer-trigger-world:encoded world")] #[doc(hidden)] #[allow(clippy::octal_escapes)] -pub static __WIT_BINDGEN_COMPONENT_TYPE: [u8; 17462] = *b"\ -\0asm\x0d\0\x01\0\0\x19\x16wit-component-encoding\x04\0\x07\xab\x87\x01\x01A\x02\ +pub static __WIT_BINDGEN_COMPONENT_TYPE: [u8; 17448] = *b"\ +\0asm\x0d\0\x01\0\0\x19\x16wit-component-encoding\x04\0\x07\x9d\x87\x01\x01A\x02\ \x01A^\x01B1\x01r\x01\x05nanosw\x04\0\x09timestamp\x03\0\0\x01r\x02\x0bbech32-ad\ drs\x0aprefix-leny\x04\0\x0ecosmos-address\x03\0\x02\x01o\x02ss\x01p\x04\x01r\x02\ \x02tys\x0aattributes\x05\x04\0\x0ccosmos-event\x03\0\x06\x01ks\x01r\x07\x08chai\ @@ -16204,327 +16204,326 @@ time\x01\x04\0\x11trigger-data-cron\x03\0'\x01q\x05\x12evm-contract-event\x01\"\ \x0b\0\x04\0\x0ctrigger-data\x03\0)\x01r\x02\x06config\x20\x04data*\x04\0\x0etri\ gger-action\x03\0+\x01r\x02\x07payload\x0b\x08ordering\x17\x04\0\x0dwasm-respons\ e\x03\0-\x01q\x05\x05error\0\0\x04warn\0\0\x04info\0\0\x05debug\0\0\x05trace\0\0\ -\x04\0\x09log-level\x03\0/\x03\0$wavs:worker/layer-types@0.4.0-beta.4\x05\0\x02\x03\ -\0\0\x0etrigger-action\x03\0\x0etrigger-action\x03\0\x01\x02\x03\0\0\x0dwasm-res\ -ponse\x03\0\x0dwasm-response\x03\0\x03\x01B\x0a\x04\0\x08pollable\x03\x01\x01h\0\ -\x01@\x01\x04self\x01\0\x7f\x04\0\x16[method]pollable.ready\x01\x02\x01@\x01\x04\ -self\x01\x01\0\x04\0\x16[method]pollable.block\x01\x03\x01p\x01\x01py\x01@\x01\x02\ -in\x04\0\x05\x04\0\x04poll\x01\x06\x03\0\x12wasi:io/poll@0.2.0\x05\x05\x02\x03\0\ -\x01\x08pollable\x01B\x0f\x02\x03\x02\x01\x06\x04\0\x08pollable\x03\0\0\x01w\x04\ -\0\x07instant\x03\0\x02\x01w\x04\0\x08duration\x03\0\x04\x01@\0\0\x03\x04\0\x03n\ -ow\x01\x06\x01@\0\0\x05\x04\0\x0aresolution\x01\x07\x01i\x01\x01@\x01\x04when\x03\ -\0\x08\x04\0\x11subscribe-instant\x01\x09\x01@\x01\x04when\x05\0\x08\x04\0\x12su\ -bscribe-duration\x01\x0a\x03\0!wasi:clocks/monotonic-clock@0.2.0\x05\x07\x01B\x04\ -\x04\0\x05error\x03\x01\x01h\0\x01@\x01\x04self\x01\0s\x04\0\x1d[method]error.to\ --debug-string\x01\x02\x03\0\x13wasi:io/error@0.2.0\x05\x08\x02\x03\0\x03\x05erro\ -r\x01B(\x02\x03\x02\x01\x09\x04\0\x05error\x03\0\0\x02\x03\x02\x01\x06\x04\0\x08\ -pollable\x03\0\x02\x01i\x01\x01q\x02\x15last-operation-failed\x01\x04\0\x06close\ -d\0\0\x04\0\x0cstream-error\x03\0\x05\x04\0\x0cinput-stream\x03\x01\x04\0\x0dout\ -put-stream\x03\x01\x01h\x07\x01p}\x01j\x01\x0a\x01\x06\x01@\x02\x04self\x09\x03l\ -enw\0\x0b\x04\0\x19[method]input-stream.read\x01\x0c\x04\0\"[method]input-stream\ -.blocking-read\x01\x0c\x01j\x01w\x01\x06\x01@\x02\x04self\x09\x03lenw\0\x0d\x04\0\ -\x19[method]input-stream.skip\x01\x0e\x04\0\"[method]input-stream.blocking-skip\x01\ -\x0e\x01i\x03\x01@\x01\x04self\x09\0\x0f\x04\0\x1e[method]input-stream.subscribe\ -\x01\x10\x01h\x08\x01@\x01\x04self\x11\0\x0d\x04\0![method]output-stream.check-w\ -rite\x01\x12\x01j\0\x01\x06\x01@\x02\x04self\x11\x08contents\x0a\0\x13\x04\0\x1b\ -[method]output-stream.write\x01\x14\x04\0.[method]output-stream.blocking-write-a\ -nd-flush\x01\x14\x01@\x01\x04self\x11\0\x13\x04\0\x1b[method]output-stream.flush\ -\x01\x15\x04\0$[method]output-stream.blocking-flush\x01\x15\x01@\x01\x04self\x11\ -\0\x0f\x04\0\x1f[method]output-stream.subscribe\x01\x16\x01@\x02\x04self\x11\x03\ -lenw\0\x13\x04\0\"[method]output-stream.write-zeroes\x01\x17\x04\05[method]outpu\ -t-stream.blocking-write-zeroes-and-flush\x01\x17\x01@\x03\x04self\x11\x03src\x09\ -\x03lenw\0\x0d\x04\0\x1c[method]output-stream.splice\x01\x18\x04\0%[method]outpu\ -t-stream.blocking-splice\x01\x18\x03\0\x15wasi:io/streams@0.2.0\x05\x0a\x02\x03\0\ -\x02\x08duration\x02\x03\0\x04\x0cinput-stream\x02\x03\0\x04\x0doutput-stream\x01\ -B\xc0\x01\x02\x03\x02\x01\x0b\x04\0\x08duration\x03\0\0\x02\x03\x02\x01\x0c\x04\0\ -\x0cinput-stream\x03\0\x02\x02\x03\x02\x01\x0d\x04\0\x0doutput-stream\x03\0\x04\x02\ -\x03\x02\x01\x09\x04\0\x08io-error\x03\0\x06\x02\x03\x02\x01\x06\x04\0\x08pollab\ -le\x03\0\x08\x01q\x0a\x03get\0\0\x04head\0\0\x04post\0\0\x03put\0\0\x06delete\0\0\ -\x07connect\0\0\x07options\0\0\x05trace\0\0\x05patch\0\0\x05other\x01s\0\x04\0\x06\ -method\x03\0\x0a\x01q\x03\x04HTTP\0\0\x05HTTPS\0\0\x05other\x01s\0\x04\0\x06sche\ -me\x03\0\x0c\x01ks\x01k{\x01r\x02\x05rcode\x0e\x09info-code\x0f\x04\0\x11DNS-err\ -or-payload\x03\0\x10\x01k}\x01r\x02\x08alert-id\x12\x0dalert-message\x0e\x04\0\x1a\ -TLS-alert-received-payload\x03\0\x13\x01ky\x01r\x02\x0afield-name\x0e\x0afield-s\ -ize\x15\x04\0\x12field-size-payload\x03\0\x16\x01kw\x01k\x17\x01q'\x0bDNS-timeou\ -t\0\0\x09DNS-error\x01\x11\0\x15destination-not-found\0\0\x17destination-unavail\ -able\0\0\x19destination-IP-prohibited\0\0\x19destination-IP-unroutable\0\0\x12co\ -nnection-refused\0\0\x15connection-terminated\0\0\x12connection-timeout\0\0\x17c\ -onnection-read-timeout\0\0\x18connection-write-timeout\0\0\x18connection-limit-r\ -eached\0\0\x12TLS-protocol-error\0\0\x15TLS-certificate-error\0\0\x12TLS-alert-r\ -eceived\x01\x14\0\x13HTTP-request-denied\0\0\x1cHTTP-request-length-required\0\0\ -\x16HTTP-request-body-size\x01\x18\0\x1bHTTP-request-method-invalid\0\0\x18HTTP-\ -request-URI-invalid\0\0\x19HTTP-request-URI-too-long\0\0\x20HTTP-request-header-\ -section-size\x01\x15\0\x18HTTP-request-header-size\x01\x19\0!HTTP-request-traile\ -r-section-size\x01\x15\0\x19HTTP-request-trailer-size\x01\x17\0\x18HTTP-response\ --incomplete\0\0!HTTP-response-header-section-size\x01\x15\0\x19HTTP-response-hea\ -der-size\x01\x17\0\x17HTTP-response-body-size\x01\x18\0\"HTTP-response-trailer-s\ -ection-size\x01\x15\0\x1aHTTP-response-trailer-size\x01\x17\0\x1dHTTP-response-t\ -ransfer-coding\x01\x0e\0\x1cHTTP-response-content-coding\x01\x0e\0\x15HTTP-respo\ -nse-timeout\0\0\x13HTTP-upgrade-failed\0\0\x13HTTP-protocol-error\0\0\x0dloop-de\ -tected\0\0\x13configuration-error\0\0\x0einternal-error\x01\x0e\0\x04\0\x0aerror\ --code\x03\0\x1a\x01q\x03\x0einvalid-syntax\0\0\x09forbidden\0\0\x09immutable\0\0\ -\x04\0\x0cheader-error\x03\0\x1c\x01s\x04\0\x09field-key\x03\0\x1e\x01p}\x04\0\x0b\ -field-value\x03\0\x20\x04\0\x06fields\x03\x01\x04\0\x07headers\x03\0\"\x04\0\x08\ -trailers\x03\0\"\x04\0\x10incoming-request\x03\x01\x04\0\x10outgoing-request\x03\ -\x01\x04\0\x0frequest-options\x03\x01\x04\0\x11response-outparam\x03\x01\x01{\x04\ -\0\x0bstatus-code\x03\0)\x04\0\x11incoming-response\x03\x01\x04\0\x0dincoming-bo\ -dy\x03\x01\x04\0\x0ffuture-trailers\x03\x01\x04\0\x11outgoing-response\x03\x01\x04\ -\0\x0doutgoing-body\x03\x01\x04\0\x18future-incoming-response\x03\x01\x01i\"\x01\ -@\0\01\x04\0\x13[constructor]fields\x012\x01o\x02\x1f!\x01p3\x01j\x011\x01\x1d\x01\ -@\x01\x07entries4\05\x04\0\x18[static]fields.from-list\x016\x01h\"\x01p!\x01@\x02\ -\x04self7\x04name\x1f\08\x04\0\x12[method]fields.get\x019\x01@\x02\x04self7\x04n\ -ame\x1f\0\x7f\x04\0\x12[method]fields.has\x01:\x01j\0\x01\x1d\x01@\x03\x04self7\x04\ -name\x1f\x05value8\0;\x04\0\x12[method]fields.set\x01<\x01@\x02\x04self7\x04name\ -\x1f\0;\x04\0\x15[method]fields.delete\x01=\x01@\x03\x04self7\x04name\x1f\x05val\ -ue!\0;\x04\0\x15[method]fields.append\x01>\x01@\x01\x04self7\04\x04\0\x16[method\ -]fields.entries\x01?\x01@\x01\x04self7\01\x04\0\x14[method]fields.clone\x01@\x01\ -h%\x01@\x01\x04self\xc1\0\0\x0b\x04\0\x1f[method]incoming-request.method\x01B\x01\ -@\x01\x04self\xc1\0\0\x0e\x04\0([method]incoming-request.path-with-query\x01C\x01\ -k\x0d\x01@\x01\x04self\xc1\0\0\xc4\0\x04\0\x1f[method]incoming-request.scheme\x01\ -E\x04\0\"[method]incoming-request.authority\x01C\x01i#\x01@\x01\x04self\xc1\0\0\xc6\ -\0\x04\0\x20[method]incoming-request.headers\x01G\x01i,\x01j\x01\xc8\0\0\x01@\x01\ -\x04self\xc1\0\0\xc9\0\x04\0\x20[method]incoming-request.consume\x01J\x01i&\x01@\ -\x01\x07headers\xc6\0\0\xcb\0\x04\0\x1d[constructor]outgoing-request\x01L\x01h&\x01\ -i/\x01j\x01\xce\0\0\x01@\x01\x04self\xcd\0\0\xcf\0\x04\0\x1d[method]outgoing-req\ -uest.body\x01P\x01@\x01\x04self\xcd\0\0\x0b\x04\0\x1f[method]outgoing-request.me\ -thod\x01Q\x01j\0\0\x01@\x02\x04self\xcd\0\x06method\x0b\0\xd2\0\x04\0#[method]ou\ -tgoing-request.set-method\x01S\x01@\x01\x04self\xcd\0\0\x0e\x04\0([method]outgoi\ -ng-request.path-with-query\x01T\x01@\x02\x04self\xcd\0\x0fpath-with-query\x0e\0\xd2\ -\0\x04\0,[method]outgoing-request.set-path-with-query\x01U\x01@\x01\x04self\xcd\0\ -\0\xc4\0\x04\0\x1f[method]outgoing-request.scheme\x01V\x01@\x02\x04self\xcd\0\x06\ -scheme\xc4\0\0\xd2\0\x04\0#[method]outgoing-request.set-scheme\x01W\x04\0\"[meth\ -od]outgoing-request.authority\x01T\x01@\x02\x04self\xcd\0\x09authority\x0e\0\xd2\ -\0\x04\0&[method]outgoing-request.set-authority\x01X\x01@\x01\x04self\xcd\0\0\xc6\ -\0\x04\0\x20[method]outgoing-request.headers\x01Y\x01i'\x01@\0\0\xda\0\x04\0\x1c\ -[constructor]request-options\x01[\x01h'\x01k\x01\x01@\x01\x04self\xdc\0\0\xdd\0\x04\ -\0'[method]request-options.connect-timeout\x01^\x01@\x02\x04self\xdc\0\x08durati\ -on\xdd\0\0\xd2\0\x04\0+[method]request-options.set-connect-timeout\x01_\x04\0*[m\ -ethod]request-options.first-byte-timeout\x01^\x04\0.[method]request-options.set-\ -first-byte-timeout\x01_\x04\0-[method]request-options.between-bytes-timeout\x01^\ -\x04\01[method]request-options.set-between-bytes-timeout\x01_\x01i(\x01i.\x01j\x01\ -\xe1\0\x01\x1b\x01@\x02\x05param\xe0\0\x08response\xe2\0\x01\0\x04\0\x1d[static]\ -response-outparam.set\x01c\x01h+\x01@\x01\x04self\xe4\0\0*\x04\0\x20[method]inco\ -ming-response.status\x01e\x01@\x01\x04self\xe4\0\0\xc6\0\x04\0![method]incoming-\ -response.headers\x01f\x01@\x01\x04self\xe4\0\0\xc9\0\x04\0![method]incoming-resp\ -onse.consume\x01g\x01h,\x01i\x03\x01j\x01\xe9\0\0\x01@\x01\x04self\xe8\0\0\xea\0\ -\x04\0\x1c[method]incoming-body.stream\x01k\x01i-\x01@\x01\x04this\xc8\0\0\xec\0\ -\x04\0\x1c[static]incoming-body.finish\x01m\x01h-\x01i\x09\x01@\x01\x04self\xee\0\ -\0\xef\0\x04\0![method]future-trailers.subscribe\x01p\x01i$\x01k\xf1\0\x01j\x01\xf2\ -\0\x01\x1b\x01j\x01\xf3\0\0\x01k\xf4\0\x01@\x01\x04self\xee\0\0\xf5\0\x04\0\x1b[\ -method]future-trailers.get\x01v\x01@\x01\x07headers\xc6\0\0\xe1\0\x04\0\x1e[cons\ -tructor]outgoing-response\x01w\x01h.\x01@\x01\x04self\xf8\0\0*\x04\0%[method]out\ -going-response.status-code\x01y\x01@\x02\x04self\xf8\0\x0bstatus-code*\0\xd2\0\x04\ -\0)[method]outgoing-response.set-status-code\x01z\x01@\x01\x04self\xf8\0\0\xc6\0\ -\x04\0![method]outgoing-response.headers\x01{\x01@\x01\x04self\xf8\0\0\xcf\0\x04\ -\0\x1e[method]outgoing-response.body\x01|\x01h/\x01i\x05\x01j\x01\xfe\0\0\x01@\x01\ -\x04self\xfd\0\0\xff\0\x04\0\x1b[method]outgoing-body.write\x01\x80\x01\x01j\0\x01\ -\x1b\x01@\x02\x04this\xce\0\x08trailers\xf2\0\0\x81\x01\x04\0\x1c[static]outgoin\ -g-body.finish\x01\x82\x01\x01h0\x01@\x01\x04self\x83\x01\0\xef\0\x04\0*[method]f\ -uture-incoming-response.subscribe\x01\x84\x01\x01i+\x01j\x01\x85\x01\x01\x1b\x01\ -j\x01\x86\x01\0\x01k\x87\x01\x01@\x01\x04self\x83\x01\0\x88\x01\x04\0$[method]fu\ -ture-incoming-response.get\x01\x89\x01\x01h\x07\x01k\x1b\x01@\x01\x03err\x8a\x01\ -\0\x8b\x01\x04\0\x0fhttp-error-code\x01\x8c\x01\x03\0\x15wasi:http/types@0.2.0\x05\ -\x0e\x02\x03\0\x05\x10outgoing-request\x02\x03\0\x05\x0frequest-options\x02\x03\0\ -\x05\x18future-incoming-response\x02\x03\0\x05\x0aerror-code\x01B\x0f\x02\x03\x02\ -\x01\x0f\x04\0\x10outgoing-request\x03\0\0\x02\x03\x02\x01\x10\x04\0\x0frequest-\ -options\x03\0\x02\x02\x03\x02\x01\x11\x04\0\x18future-incoming-response\x03\0\x04\ -\x02\x03\x02\x01\x12\x04\0\x0aerror-code\x03\0\x06\x01i\x01\x01i\x03\x01k\x09\x01\ -i\x05\x01j\x01\x0b\x01\x07\x01@\x02\x07request\x08\x07options\x0a\0\x0c\x04\0\x06\ -handle\x01\x0d\x03\0\x20wasi:http/outgoing-handler@0.2.0\x05\x13\x02\x03\0\0\x10\ -evm-chain-config\x02\x03\0\0\x13cosmos-chain-config\x02\x03\0\0\x09log-level\x01\ -B\x11\x02\x03\x02\x01\x14\x04\0\x10evm-chain-config\x03\0\0\x02\x03\x02\x01\x15\x04\ -\0\x13cosmos-chain-config\x03\0\x02\x02\x03\x02\x01\x16\x04\0\x09log-level\x03\0\ -\x04\x01k\x01\x01@\x01\x0achain-names\0\x06\x04\0\x14get-evm-chain-config\x01\x07\ -\x01k\x03\x01@\x01\x0achain-names\0\x08\x04\0\x17get-cosmos-chain-config\x01\x09\ -\x01ks\x01@\x01\x03keys\0\x0a\x04\0\x0aconfig-var\x01\x0b\x01@\x02\x05level\x05\x07\ -messages\x01\0\x04\0\x03log\x01\x0c\x03\0\x04host\x05\x17\x01B\x0a\x01o\x02ss\x01\ -p\0\x01@\0\0\x01\x04\0\x0fget-environment\x01\x02\x01ps\x01@\0\0\x03\x04\0\x0dge\ -t-arguments\x01\x04\x01ks\x01@\0\0\x05\x04\0\x0binitial-cwd\x01\x06\x03\0\x1awas\ -i:cli/environment@0.2.0\x05\x18\x01B\x03\x01j\0\0\x01@\x01\x06status\0\x01\0\x04\ -\0\x04exit\x01\x01\x03\0\x13wasi:cli/exit@0.2.0\x05\x19\x01B\x05\x02\x03\x02\x01\ -\x0c\x04\0\x0cinput-stream\x03\0\0\x01i\x01\x01@\0\0\x02\x04\0\x09get-stdin\x01\x03\ -\x03\0\x14wasi:cli/stdin@0.2.0\x05\x1a\x01B\x05\x02\x03\x02\x01\x0d\x04\0\x0dout\ -put-stream\x03\0\0\x01i\x01\x01@\0\0\x02\x04\0\x0aget-stdout\x01\x03\x03\0\x15wa\ -si:cli/stdout@0.2.0\x05\x1b\x01B\x05\x02\x03\x02\x01\x0d\x04\0\x0doutput-stream\x03\ -\0\0\x01i\x01\x01@\0\0\x02\x04\0\x0aget-stderr\x01\x03\x03\0\x15wasi:cli/stderr@\ -0.2.0\x05\x1c\x01B\x01\x04\0\x0eterminal-input\x03\x01\x03\0\x1dwasi:cli/termina\ -l-input@0.2.0\x05\x1d\x01B\x01\x04\0\x0fterminal-output\x03\x01\x03\0\x1ewasi:cl\ -i/terminal-output@0.2.0\x05\x1e\x02\x03\0\x0d\x0eterminal-input\x01B\x06\x02\x03\ -\x02\x01\x1f\x04\0\x0eterminal-input\x03\0\0\x01i\x01\x01k\x02\x01@\0\0\x03\x04\0\ -\x12get-terminal-stdin\x01\x04\x03\0\x1dwasi:cli/terminal-stdin@0.2.0\x05\x20\x02\ -\x03\0\x0e\x0fterminal-output\x01B\x06\x02\x03\x02\x01!\x04\0\x0fterminal-output\ -\x03\0\0\x01i\x01\x01k\x02\x01@\0\0\x03\x04\0\x13get-terminal-stdout\x01\x04\x03\ -\0\x1ewasi:cli/terminal-stdout@0.2.0\x05\"\x01B\x06\x02\x03\x02\x01!\x04\0\x0fte\ -rminal-output\x03\0\0\x01i\x01\x01k\x02\x01@\0\0\x03\x04\0\x13get-terminal-stder\ -r\x01\x04\x03\0\x1ewasi:cli/terminal-stderr@0.2.0\x05#\x01B\x05\x01r\x02\x07seco\ -ndsw\x0bnanosecondsy\x04\0\x08datetime\x03\0\0\x01@\0\0\x01\x04\0\x03now\x01\x02\ -\x04\0\x0aresolution\x01\x02\x03\0\x1cwasi:clocks/wall-clock@0.2.0\x05$\x02\x03\0\ -\x04\x05error\x02\x03\0\x12\x08datetime\x01Br\x02\x03\x02\x01\x0c\x04\0\x0cinput\ --stream\x03\0\0\x02\x03\x02\x01\x0d\x04\0\x0doutput-stream\x03\0\x02\x02\x03\x02\ -\x01%\x04\0\x05error\x03\0\x04\x02\x03\x02\x01&\x04\0\x08datetime\x03\0\x06\x01w\ -\x04\0\x08filesize\x03\0\x08\x01m\x08\x07unknown\x0cblock-device\x10character-de\ -vice\x09directory\x04fifo\x0dsymbolic-link\x0cregular-file\x06socket\x04\0\x0fde\ -scriptor-type\x03\0\x0a\x01n\x06\x04read\x05write\x13file-integrity-sync\x13data\ --integrity-sync\x14requested-write-sync\x10mutate-directory\x04\0\x10descriptor-\ -flags\x03\0\x0c\x01n\x01\x0esymlink-follow\x04\0\x0apath-flags\x03\0\x0e\x01n\x04\ -\x06create\x09directory\x09exclusive\x08truncate\x04\0\x0aopen-flags\x03\0\x10\x01\ -w\x04\0\x0alink-count\x03\0\x12\x01k\x07\x01r\x06\x04type\x0b\x0alink-count\x13\x04\ -size\x09\x15data-access-timestamp\x14\x1bdata-modification-timestamp\x14\x17stat\ -us-change-timestamp\x14\x04\0\x0fdescriptor-stat\x03\0\x15\x01q\x03\x09no-change\ -\0\0\x03now\0\0\x09timestamp\x01\x07\0\x04\0\x0dnew-timestamp\x03\0\x17\x01r\x02\ -\x04type\x0b\x04names\x04\0\x0fdirectory-entry\x03\0\x19\x01m%\x06access\x0bwoul\ -d-block\x07already\x0ebad-descriptor\x04busy\x08deadlock\x05quota\x05exist\x0efi\ -le-too-large\x15illegal-byte-sequence\x0bin-progress\x0binterrupted\x07invalid\x02\ -io\x0cis-directory\x04loop\x0etoo-many-links\x0cmessage-size\x0dname-too-long\x09\ -no-device\x08no-entry\x07no-lock\x13insufficient-memory\x12insufficient-space\x0d\ -not-directory\x09not-empty\x0fnot-recoverable\x0bunsupported\x06no-tty\x0eno-suc\ -h-device\x08overflow\x0dnot-permitted\x04pipe\x09read-only\x0cinvalid-seek\x0ete\ -xt-file-busy\x0ccross-device\x04\0\x0aerror-code\x03\0\x1b\x01m\x06\x06normal\x0a\ -sequential\x06random\x09will-need\x09dont-need\x08no-reuse\x04\0\x06advice\x03\0\ -\x1d\x01r\x02\x05lowerw\x05upperw\x04\0\x13metadata-hash-value\x03\0\x1f\x04\0\x0a\ -descriptor\x03\x01\x04\0\x16directory-entry-stream\x03\x01\x01h!\x01i\x01\x01j\x01\ -$\x01\x1c\x01@\x02\x04self#\x06offset\x09\0%\x04\0\"[method]descriptor.read-via-\ -stream\x01&\x01i\x03\x01j\x01'\x01\x1c\x01@\x02\x04self#\x06offset\x09\0(\x04\0#\ -[method]descriptor.write-via-stream\x01)\x01@\x01\x04self#\0(\x04\0$[method]desc\ -riptor.append-via-stream\x01*\x01j\0\x01\x1c\x01@\x04\x04self#\x06offset\x09\x06\ -length\x09\x06advice\x1e\0+\x04\0\x19[method]descriptor.advise\x01,\x01@\x01\x04\ -self#\0+\x04\0\x1c[method]descriptor.sync-data\x01-\x01j\x01\x0d\x01\x1c\x01@\x01\ -\x04self#\0.\x04\0\x1c[method]descriptor.get-flags\x01/\x01j\x01\x0b\x01\x1c\x01\ -@\x01\x04self#\00\x04\0\x1b[method]descriptor.get-type\x011\x01@\x02\x04self#\x04\ -size\x09\0+\x04\0\x1b[method]descriptor.set-size\x012\x01@\x03\x04self#\x15data-\ -access-timestamp\x18\x1bdata-modification-timestamp\x18\0+\x04\0\x1c[method]desc\ -riptor.set-times\x013\x01p}\x01o\x024\x7f\x01j\x015\x01\x1c\x01@\x03\x04self#\x06\ -length\x09\x06offset\x09\06\x04\0\x17[method]descriptor.read\x017\x01j\x01\x09\x01\ -\x1c\x01@\x03\x04self#\x06buffer4\x06offset\x09\08\x04\0\x18[method]descriptor.w\ -rite\x019\x01i\"\x01j\x01:\x01\x1c\x01@\x01\x04self#\0;\x04\0![method]descriptor\ -.read-directory\x01<\x04\0\x17[method]descriptor.sync\x01-\x01@\x02\x04self#\x04\ -paths\0+\x04\0&[method]descriptor.create-directory-at\x01=\x01j\x01\x16\x01\x1c\x01\ -@\x01\x04self#\0>\x04\0\x17[method]descriptor.stat\x01?\x01@\x03\x04self#\x0apat\ -h-flags\x0f\x04paths\0>\x04\0\x1a[method]descriptor.stat-at\x01@\x01@\x05\x04sel\ -f#\x0apath-flags\x0f\x04paths\x15data-access-timestamp\x18\x1bdata-modification-\ -timestamp\x18\0+\x04\0\x1f[method]descriptor.set-times-at\x01A\x01@\x05\x04self#\ -\x0eold-path-flags\x0f\x08old-paths\x0enew-descriptor#\x08new-paths\0+\x04\0\x1a\ -[method]descriptor.link-at\x01B\x01i!\x01j\x01\xc3\0\x01\x1c\x01@\x05\x04self#\x0a\ -path-flags\x0f\x04paths\x0aopen-flags\x11\x05flags\x0d\0\xc4\0\x04\0\x1a[method]\ -descriptor.open-at\x01E\x01j\x01s\x01\x1c\x01@\x02\x04self#\x04paths\0\xc6\0\x04\ -\0\x1e[method]descriptor.readlink-at\x01G\x04\0&[method]descriptor.remove-direct\ -ory-at\x01=\x01@\x04\x04self#\x08old-paths\x0enew-descriptor#\x08new-paths\0+\x04\ -\0\x1c[method]descriptor.rename-at\x01H\x01@\x03\x04self#\x08old-paths\x08new-pa\ -ths\0+\x04\0\x1d[method]descriptor.symlink-at\x01I\x04\0![method]descriptor.unli\ -nk-file-at\x01=\x01@\x02\x04self#\x05other#\0\x7f\x04\0![method]descriptor.is-sa\ -me-object\x01J\x01j\x01\x20\x01\x1c\x01@\x01\x04self#\0\xcb\0\x04\0\x20[method]d\ -escriptor.metadata-hash\x01L\x01@\x03\x04self#\x0apath-flags\x0f\x04paths\0\xcb\0\ -\x04\0#[method]descriptor.metadata-hash-at\x01M\x01h\"\x01k\x1a\x01j\x01\xcf\0\x01\ -\x1c\x01@\x01\x04self\xce\0\0\xd0\0\x04\03[method]directory-entry-stream.read-di\ -rectory-entry\x01Q\x01h\x05\x01k\x1c\x01@\x01\x03err\xd2\0\0\xd3\0\x04\0\x15file\ -system-error-code\x01T\x03\0\x1bwasi:filesystem/types@0.2.0\x05'\x02\x03\0\x13\x0a\ -descriptor\x01B\x07\x02\x03\x02\x01(\x04\0\x0adescriptor\x03\0\0\x01i\x01\x01o\x02\ -\x02s\x01p\x03\x01@\0\0\x04\x04\0\x0fget-directories\x01\x05\x03\0\x1ewasi:files\ -ystem/preopens@0.2.0\x05)\x01B\x11\x04\0\x07network\x03\x01\x01m\x15\x07unknown\x0d\ -access-denied\x0dnot-supported\x10invalid-argument\x0dout-of-memory\x07timeout\x14\ -concurrency-conflict\x0fnot-in-progress\x0bwould-block\x0dinvalid-state\x10new-s\ -ocket-limit\x14address-not-bindable\x0eaddress-in-use\x12remote-unreachable\x12c\ -onnection-refused\x10connection-reset\x12connection-aborted\x12datagram-too-larg\ -e\x11name-unresolvable\x1atemporary-resolver-failure\x1apermanent-resolver-failu\ -re\x04\0\x0aerror-code\x03\0\x01\x01m\x02\x04ipv4\x04ipv6\x04\0\x11ip-address-fa\ -mily\x03\0\x03\x01o\x04}}}}\x04\0\x0cipv4-address\x03\0\x05\x01o\x08{{{{{{{{\x04\ -\0\x0cipv6-address\x03\0\x07\x01q\x02\x04ipv4\x01\x06\0\x04ipv6\x01\x08\0\x04\0\x0a\ -ip-address\x03\0\x09\x01r\x02\x04port{\x07address\x06\x04\0\x13ipv4-socket-addre\ -ss\x03\0\x0b\x01r\x04\x04port{\x09flow-infoy\x07address\x08\x08scope-idy\x04\0\x13\ -ipv6-socket-address\x03\0\x0d\x01q\x02\x04ipv4\x01\x0c\0\x04ipv6\x01\x0e\0\x04\0\ -\x11ip-socket-address\x03\0\x0f\x03\0\x1awasi:sockets/network@0.2.0\x05*\x02\x03\ -\0\x15\x07network\x01B\x05\x02\x03\x02\x01+\x04\0\x07network\x03\0\0\x01i\x01\x01\ -@\0\0\x02\x04\0\x10instance-network\x01\x03\x03\0#wasi:sockets/instance-network@\ -0.2.0\x05,\x02\x03\0\x15\x0aerror-code\x02\x03\0\x15\x11ip-socket-address\x02\x03\ -\0\x15\x11ip-address-family\x01BD\x02\x03\x02\x01\x06\x04\0\x08pollable\x03\0\0\x02\ -\x03\x02\x01+\x04\0\x07network\x03\0\x02\x02\x03\x02\x01-\x04\0\x0aerror-code\x03\ -\0\x04\x02\x03\x02\x01.\x04\0\x11ip-socket-address\x03\0\x06\x02\x03\x02\x01/\x04\ -\0\x11ip-address-family\x03\0\x08\x01p}\x01r\x02\x04data\x0a\x0eremote-address\x07\ -\x04\0\x11incoming-datagram\x03\0\x0b\x01k\x07\x01r\x02\x04data\x0a\x0eremote-ad\ -dress\x0d\x04\0\x11outgoing-datagram\x03\0\x0e\x04\0\x0audp-socket\x03\x01\x04\0\ -\x18incoming-datagram-stream\x03\x01\x04\0\x18outgoing-datagram-stream\x03\x01\x01\ -h\x10\x01h\x03\x01j\0\x01\x05\x01@\x03\x04self\x13\x07network\x14\x0dlocal-addre\ -ss\x07\0\x15\x04\0\x1d[method]udp-socket.start-bind\x01\x16\x01@\x01\x04self\x13\ -\0\x15\x04\0\x1e[method]udp-socket.finish-bind\x01\x17\x01i\x11\x01i\x12\x01o\x02\ -\x18\x19\x01j\x01\x1a\x01\x05\x01@\x02\x04self\x13\x0eremote-address\x0d\0\x1b\x04\ -\0\x19[method]udp-socket.stream\x01\x1c\x01j\x01\x07\x01\x05\x01@\x01\x04self\x13\ -\0\x1d\x04\0\x20[method]udp-socket.local-address\x01\x1e\x04\0![method]udp-socke\ -t.remote-address\x01\x1e\x01@\x01\x04self\x13\0\x09\x04\0![method]udp-socket.add\ -ress-family\x01\x1f\x01j\x01}\x01\x05\x01@\x01\x04self\x13\0\x20\x04\0$[method]u\ -dp-socket.unicast-hop-limit\x01!\x01@\x02\x04self\x13\x05value}\0\x15\x04\0([met\ -hod]udp-socket.set-unicast-hop-limit\x01\"\x01j\x01w\x01\x05\x01@\x01\x04self\x13\ -\0#\x04\0&[method]udp-socket.receive-buffer-size\x01$\x01@\x02\x04self\x13\x05va\ -luew\0\x15\x04\0*[method]udp-socket.set-receive-buffer-size\x01%\x04\0#[method]u\ -dp-socket.send-buffer-size\x01$\x04\0'[method]udp-socket.set-send-buffer-size\x01\ -%\x01i\x01\x01@\x01\x04self\x13\0&\x04\0\x1c[method]udp-socket.subscribe\x01'\x01\ -h\x11\x01p\x0c\x01j\x01)\x01\x05\x01@\x02\x04self(\x0bmax-resultsw\0*\x04\0([met\ -hod]incoming-datagram-stream.receive\x01+\x01@\x01\x04self(\0&\x04\0*[method]inc\ -oming-datagram-stream.subscribe\x01,\x01h\x12\x01@\x01\x04self-\0#\x04\0+[method\ -]outgoing-datagram-stream.check-send\x01.\x01p\x0f\x01@\x02\x04self-\x09datagram\ -s/\0#\x04\0%[method]outgoing-datagram-stream.send\x010\x01@\x01\x04self-\0&\x04\0\ -*[method]outgoing-datagram-stream.subscribe\x011\x03\0\x16wasi:sockets/udp@0.2.0\ -\x050\x02\x03\0\x17\x0audp-socket\x01B\x0c\x02\x03\x02\x01+\x04\0\x07network\x03\ -\0\0\x02\x03\x02\x01-\x04\0\x0aerror-code\x03\0\x02\x02\x03\x02\x01/\x04\0\x11ip\ --address-family\x03\0\x04\x02\x03\x02\x011\x04\0\x0audp-socket\x03\0\x06\x01i\x07\ -\x01j\x01\x08\x01\x03\x01@\x01\x0eaddress-family\x05\0\x09\x04\0\x11create-udp-s\ -ocket\x01\x0a\x03\0$wasi:sockets/udp-create-socket@0.2.0\x052\x01BT\x02\x03\x02\x01\ -\x0c\x04\0\x0cinput-stream\x03\0\0\x02\x03\x02\x01\x0d\x04\0\x0doutput-stream\x03\ -\0\x02\x02\x03\x02\x01\x06\x04\0\x08pollable\x03\0\x04\x02\x03\x02\x01\x0b\x04\0\ -\x08duration\x03\0\x06\x02\x03\x02\x01+\x04\0\x07network\x03\0\x08\x02\x03\x02\x01\ --\x04\0\x0aerror-code\x03\0\x0a\x02\x03\x02\x01.\x04\0\x11ip-socket-address\x03\0\ -\x0c\x02\x03\x02\x01/\x04\0\x11ip-address-family\x03\0\x0e\x01m\x03\x07receive\x04\ -send\x04both\x04\0\x0dshutdown-type\x03\0\x10\x04\0\x0atcp-socket\x03\x01\x01h\x12\ -\x01h\x09\x01j\0\x01\x0b\x01@\x03\x04self\x13\x07network\x14\x0dlocal-address\x0d\ -\0\x15\x04\0\x1d[method]tcp-socket.start-bind\x01\x16\x01@\x01\x04self\x13\0\x15\ -\x04\0\x1e[method]tcp-socket.finish-bind\x01\x17\x01@\x03\x04self\x13\x07network\ -\x14\x0eremote-address\x0d\0\x15\x04\0\x20[method]tcp-socket.start-connect\x01\x18\ -\x01i\x01\x01i\x03\x01o\x02\x19\x1a\x01j\x01\x1b\x01\x0b\x01@\x01\x04self\x13\0\x1c\ -\x04\0![method]tcp-socket.finish-connect\x01\x1d\x04\0\x1f[method]tcp-socket.sta\ -rt-listen\x01\x17\x04\0\x20[method]tcp-socket.finish-listen\x01\x17\x01i\x12\x01\ -o\x03\x1e\x19\x1a\x01j\x01\x1f\x01\x0b\x01@\x01\x04self\x13\0\x20\x04\0\x19[meth\ -od]tcp-socket.accept\x01!\x01j\x01\x0d\x01\x0b\x01@\x01\x04self\x13\0\"\x04\0\x20\ -[method]tcp-socket.local-address\x01#\x04\0![method]tcp-socket.remote-address\x01\ -#\x01@\x01\x04self\x13\0\x7f\x04\0\x1f[method]tcp-socket.is-listening\x01$\x01@\x01\ -\x04self\x13\0\x0f\x04\0![method]tcp-socket.address-family\x01%\x01@\x02\x04self\ -\x13\x05valuew\0\x15\x04\0*[method]tcp-socket.set-listen-backlog-size\x01&\x01j\x01\ -\x7f\x01\x0b\x01@\x01\x04self\x13\0'\x04\0%[method]tcp-socket.keep-alive-enabled\ -\x01(\x01@\x02\x04self\x13\x05value\x7f\0\x15\x04\0)[method]tcp-socket.set-keep-\ -alive-enabled\x01)\x01j\x01\x07\x01\x0b\x01@\x01\x04self\x13\0*\x04\0'[method]tc\ -p-socket.keep-alive-idle-time\x01+\x01@\x02\x04self\x13\x05value\x07\0\x15\x04\0\ -+[method]tcp-socket.set-keep-alive-idle-time\x01,\x04\0&[method]tcp-socket.keep-\ -alive-interval\x01+\x04\0*[method]tcp-socket.set-keep-alive-interval\x01,\x01j\x01\ -y\x01\x0b\x01@\x01\x04self\x13\0-\x04\0#[method]tcp-socket.keep-alive-count\x01.\ -\x01@\x02\x04self\x13\x05valuey\0\x15\x04\0'[method]tcp-socket.set-keep-alive-co\ -unt\x01/\x01j\x01}\x01\x0b\x01@\x01\x04self\x13\00\x04\0\x1c[method]tcp-socket.h\ -op-limit\x011\x01@\x02\x04self\x13\x05value}\0\x15\x04\0\x20[method]tcp-socket.s\ -et-hop-limit\x012\x01j\x01w\x01\x0b\x01@\x01\x04self\x13\03\x04\0&[method]tcp-so\ -cket.receive-buffer-size\x014\x04\0*[method]tcp-socket.set-receive-buffer-size\x01\ -&\x04\0#[method]tcp-socket.send-buffer-size\x014\x04\0'[method]tcp-socket.set-se\ -nd-buffer-size\x01&\x01i\x05\x01@\x01\x04self\x13\05\x04\0\x1c[method]tcp-socket\ -.subscribe\x016\x01@\x02\x04self\x13\x0dshutdown-type\x11\0\x15\x04\0\x1b[method\ -]tcp-socket.shutdown\x017\x03\0\x16wasi:sockets/tcp@0.2.0\x053\x02\x03\0\x19\x0a\ -tcp-socket\x01B\x0c\x02\x03\x02\x01+\x04\0\x07network\x03\0\0\x02\x03\x02\x01-\x04\ -\0\x0aerror-code\x03\0\x02\x02\x03\x02\x01/\x04\0\x11ip-address-family\x03\0\x04\ -\x02\x03\x02\x014\x04\0\x0atcp-socket\x03\0\x06\x01i\x07\x01j\x01\x08\x01\x03\x01\ -@\x01\x0eaddress-family\x05\0\x09\x04\0\x11create-tcp-socket\x01\x0a\x03\0$wasi:\ -sockets/tcp-create-socket@0.2.0\x055\x02\x03\0\x15\x0aip-address\x01B\x16\x02\x03\ +\x04\0\x09log-level\x03\0/\x03\0\x1dwavs:worker/layer-types@0.4.0\x05\0\x02\x03\0\ +\0\x0etrigger-action\x03\0\x0etrigger-action\x03\0\x01\x02\x03\0\0\x0dwasm-respo\ +nse\x03\0\x0dwasm-response\x03\0\x03\x01B\x0a\x04\0\x08pollable\x03\x01\x01h\0\x01\ +@\x01\x04self\x01\0\x7f\x04\0\x16[method]pollable.ready\x01\x02\x01@\x01\x04self\ +\x01\x01\0\x04\0\x16[method]pollable.block\x01\x03\x01p\x01\x01py\x01@\x01\x02in\ +\x04\0\x05\x04\0\x04poll\x01\x06\x03\0\x12wasi:io/poll@0.2.0\x05\x05\x02\x03\0\x01\ +\x08pollable\x01B\x0f\x02\x03\x02\x01\x06\x04\0\x08pollable\x03\0\0\x01w\x04\0\x07\ +instant\x03\0\x02\x01w\x04\0\x08duration\x03\0\x04\x01@\0\0\x03\x04\0\x03now\x01\ +\x06\x01@\0\0\x05\x04\0\x0aresolution\x01\x07\x01i\x01\x01@\x01\x04when\x03\0\x08\ +\x04\0\x11subscribe-instant\x01\x09\x01@\x01\x04when\x05\0\x08\x04\0\x12subscrib\ +e-duration\x01\x0a\x03\0!wasi:clocks/monotonic-clock@0.2.0\x05\x07\x01B\x04\x04\0\ +\x05error\x03\x01\x01h\0\x01@\x01\x04self\x01\0s\x04\0\x1d[method]error.to-debug\ +-string\x01\x02\x03\0\x13wasi:io/error@0.2.0\x05\x08\x02\x03\0\x03\x05error\x01B\ +(\x02\x03\x02\x01\x09\x04\0\x05error\x03\0\0\x02\x03\x02\x01\x06\x04\0\x08pollab\ +le\x03\0\x02\x01i\x01\x01q\x02\x15last-operation-failed\x01\x04\0\x06closed\0\0\x04\ +\0\x0cstream-error\x03\0\x05\x04\0\x0cinput-stream\x03\x01\x04\0\x0doutput-strea\ +m\x03\x01\x01h\x07\x01p}\x01j\x01\x0a\x01\x06\x01@\x02\x04self\x09\x03lenw\0\x0b\ +\x04\0\x19[method]input-stream.read\x01\x0c\x04\0\"[method]input-stream.blocking\ +-read\x01\x0c\x01j\x01w\x01\x06\x01@\x02\x04self\x09\x03lenw\0\x0d\x04\0\x19[met\ +hod]input-stream.skip\x01\x0e\x04\0\"[method]input-stream.blocking-skip\x01\x0e\x01\ +i\x03\x01@\x01\x04self\x09\0\x0f\x04\0\x1e[method]input-stream.subscribe\x01\x10\ +\x01h\x08\x01@\x01\x04self\x11\0\x0d\x04\0![method]output-stream.check-write\x01\ +\x12\x01j\0\x01\x06\x01@\x02\x04self\x11\x08contents\x0a\0\x13\x04\0\x1b[method]\ +output-stream.write\x01\x14\x04\0.[method]output-stream.blocking-write-and-flush\ +\x01\x14\x01@\x01\x04self\x11\0\x13\x04\0\x1b[method]output-stream.flush\x01\x15\ +\x04\0$[method]output-stream.blocking-flush\x01\x15\x01@\x01\x04self\x11\0\x0f\x04\ +\0\x1f[method]output-stream.subscribe\x01\x16\x01@\x02\x04self\x11\x03lenw\0\x13\ +\x04\0\"[method]output-stream.write-zeroes\x01\x17\x04\05[method]output-stream.b\ +locking-write-zeroes-and-flush\x01\x17\x01@\x03\x04self\x11\x03src\x09\x03lenw\0\ +\x0d\x04\0\x1c[method]output-stream.splice\x01\x18\x04\0%[method]output-stream.b\ +locking-splice\x01\x18\x03\0\x15wasi:io/streams@0.2.0\x05\x0a\x02\x03\0\x02\x08d\ +uration\x02\x03\0\x04\x0cinput-stream\x02\x03\0\x04\x0doutput-stream\x01B\xc0\x01\ +\x02\x03\x02\x01\x0b\x04\0\x08duration\x03\0\0\x02\x03\x02\x01\x0c\x04\0\x0cinpu\ +t-stream\x03\0\x02\x02\x03\x02\x01\x0d\x04\0\x0doutput-stream\x03\0\x04\x02\x03\x02\ +\x01\x09\x04\0\x08io-error\x03\0\x06\x02\x03\x02\x01\x06\x04\0\x08pollable\x03\0\ +\x08\x01q\x0a\x03get\0\0\x04head\0\0\x04post\0\0\x03put\0\0\x06delete\0\0\x07con\ +nect\0\0\x07options\0\0\x05trace\0\0\x05patch\0\0\x05other\x01s\0\x04\0\x06metho\ +d\x03\0\x0a\x01q\x03\x04HTTP\0\0\x05HTTPS\0\0\x05other\x01s\0\x04\0\x06scheme\x03\ +\0\x0c\x01ks\x01k{\x01r\x02\x05rcode\x0e\x09info-code\x0f\x04\0\x11DNS-error-pay\ +load\x03\0\x10\x01k}\x01r\x02\x08alert-id\x12\x0dalert-message\x0e\x04\0\x1aTLS-\ +alert-received-payload\x03\0\x13\x01ky\x01r\x02\x0afield-name\x0e\x0afield-size\x15\ +\x04\0\x12field-size-payload\x03\0\x16\x01kw\x01k\x17\x01q'\x0bDNS-timeout\0\0\x09\ +DNS-error\x01\x11\0\x15destination-not-found\0\0\x17destination-unavailable\0\0\x19\ +destination-IP-prohibited\0\0\x19destination-IP-unroutable\0\0\x12connection-ref\ +used\0\0\x15connection-terminated\0\0\x12connection-timeout\0\0\x17connection-re\ +ad-timeout\0\0\x18connection-write-timeout\0\0\x18connection-limit-reached\0\0\x12\ +TLS-protocol-error\0\0\x15TLS-certificate-error\0\0\x12TLS-alert-received\x01\x14\ +\0\x13HTTP-request-denied\0\0\x1cHTTP-request-length-required\0\0\x16HTTP-reques\ +t-body-size\x01\x18\0\x1bHTTP-request-method-invalid\0\0\x18HTTP-request-URI-inv\ +alid\0\0\x19HTTP-request-URI-too-long\0\0\x20HTTP-request-header-section-size\x01\ +\x15\0\x18HTTP-request-header-size\x01\x19\0!HTTP-request-trailer-section-size\x01\ +\x15\0\x19HTTP-request-trailer-size\x01\x17\0\x18HTTP-response-incomplete\0\0!HT\ +TP-response-header-section-size\x01\x15\0\x19HTTP-response-header-size\x01\x17\0\ +\x17HTTP-response-body-size\x01\x18\0\"HTTP-response-trailer-section-size\x01\x15\ +\0\x1aHTTP-response-trailer-size\x01\x17\0\x1dHTTP-response-transfer-coding\x01\x0e\ +\0\x1cHTTP-response-content-coding\x01\x0e\0\x15HTTP-response-timeout\0\0\x13HTT\ +P-upgrade-failed\0\0\x13HTTP-protocol-error\0\0\x0dloop-detected\0\0\x13configur\ +ation-error\0\0\x0einternal-error\x01\x0e\0\x04\0\x0aerror-code\x03\0\x1a\x01q\x03\ +\x0einvalid-syntax\0\0\x09forbidden\0\0\x09immutable\0\0\x04\0\x0cheader-error\x03\ +\0\x1c\x01s\x04\0\x09field-key\x03\0\x1e\x01p}\x04\0\x0bfield-value\x03\0\x20\x04\ +\0\x06fields\x03\x01\x04\0\x07headers\x03\0\"\x04\0\x08trailers\x03\0\"\x04\0\x10\ +incoming-request\x03\x01\x04\0\x10outgoing-request\x03\x01\x04\0\x0frequest-opti\ +ons\x03\x01\x04\0\x11response-outparam\x03\x01\x01{\x04\0\x0bstatus-code\x03\0)\x04\ +\0\x11incoming-response\x03\x01\x04\0\x0dincoming-body\x03\x01\x04\0\x0ffuture-t\ +railers\x03\x01\x04\0\x11outgoing-response\x03\x01\x04\0\x0doutgoing-body\x03\x01\ +\x04\0\x18future-incoming-response\x03\x01\x01i\"\x01@\0\01\x04\0\x13[constructo\ +r]fields\x012\x01o\x02\x1f!\x01p3\x01j\x011\x01\x1d\x01@\x01\x07entries4\05\x04\0\ +\x18[static]fields.from-list\x016\x01h\"\x01p!\x01@\x02\x04self7\x04name\x1f\08\x04\ +\0\x12[method]fields.get\x019\x01@\x02\x04self7\x04name\x1f\0\x7f\x04\0\x12[meth\ +od]fields.has\x01:\x01j\0\x01\x1d\x01@\x03\x04self7\x04name\x1f\x05value8\0;\x04\ +\0\x12[method]fields.set\x01<\x01@\x02\x04self7\x04name\x1f\0;\x04\0\x15[method]\ +fields.delete\x01=\x01@\x03\x04self7\x04name\x1f\x05value!\0;\x04\0\x15[method]f\ +ields.append\x01>\x01@\x01\x04self7\04\x04\0\x16[method]fields.entries\x01?\x01@\ +\x01\x04self7\01\x04\0\x14[method]fields.clone\x01@\x01h%\x01@\x01\x04self\xc1\0\ +\0\x0b\x04\0\x1f[method]incoming-request.method\x01B\x01@\x01\x04self\xc1\0\0\x0e\ +\x04\0([method]incoming-request.path-with-query\x01C\x01k\x0d\x01@\x01\x04self\xc1\ +\0\0\xc4\0\x04\0\x1f[method]incoming-request.scheme\x01E\x04\0\"[method]incoming\ +-request.authority\x01C\x01i#\x01@\x01\x04self\xc1\0\0\xc6\0\x04\0\x20[method]in\ +coming-request.headers\x01G\x01i,\x01j\x01\xc8\0\0\x01@\x01\x04self\xc1\0\0\xc9\0\ +\x04\0\x20[method]incoming-request.consume\x01J\x01i&\x01@\x01\x07headers\xc6\0\0\ +\xcb\0\x04\0\x1d[constructor]outgoing-request\x01L\x01h&\x01i/\x01j\x01\xce\0\0\x01\ +@\x01\x04self\xcd\0\0\xcf\0\x04\0\x1d[method]outgoing-request.body\x01P\x01@\x01\ +\x04self\xcd\0\0\x0b\x04\0\x1f[method]outgoing-request.method\x01Q\x01j\0\0\x01@\ +\x02\x04self\xcd\0\x06method\x0b\0\xd2\0\x04\0#[method]outgoing-request.set-meth\ +od\x01S\x01@\x01\x04self\xcd\0\0\x0e\x04\0([method]outgoing-request.path-with-qu\ +ery\x01T\x01@\x02\x04self\xcd\0\x0fpath-with-query\x0e\0\xd2\0\x04\0,[method]out\ +going-request.set-path-with-query\x01U\x01@\x01\x04self\xcd\0\0\xc4\0\x04\0\x1f[\ +method]outgoing-request.scheme\x01V\x01@\x02\x04self\xcd\0\x06scheme\xc4\0\0\xd2\ +\0\x04\0#[method]outgoing-request.set-scheme\x01W\x04\0\"[method]outgoing-reques\ +t.authority\x01T\x01@\x02\x04self\xcd\0\x09authority\x0e\0\xd2\0\x04\0&[method]o\ +utgoing-request.set-authority\x01X\x01@\x01\x04self\xcd\0\0\xc6\0\x04\0\x20[meth\ +od]outgoing-request.headers\x01Y\x01i'\x01@\0\0\xda\0\x04\0\x1c[constructor]requ\ +est-options\x01[\x01h'\x01k\x01\x01@\x01\x04self\xdc\0\0\xdd\0\x04\0'[method]req\ +uest-options.connect-timeout\x01^\x01@\x02\x04self\xdc\0\x08duration\xdd\0\0\xd2\ +\0\x04\0+[method]request-options.set-connect-timeout\x01_\x04\0*[method]request-\ +options.first-byte-timeout\x01^\x04\0.[method]request-options.set-first-byte-tim\ +eout\x01_\x04\0-[method]request-options.between-bytes-timeout\x01^\x04\01[method\ +]request-options.set-between-bytes-timeout\x01_\x01i(\x01i.\x01j\x01\xe1\0\x01\x1b\ +\x01@\x02\x05param\xe0\0\x08response\xe2\0\x01\0\x04\0\x1d[static]response-outpa\ +ram.set\x01c\x01h+\x01@\x01\x04self\xe4\0\0*\x04\0\x20[method]incoming-response.\ +status\x01e\x01@\x01\x04self\xe4\0\0\xc6\0\x04\0![method]incoming-response.heade\ +rs\x01f\x01@\x01\x04self\xe4\0\0\xc9\0\x04\0![method]incoming-response.consume\x01\ +g\x01h,\x01i\x03\x01j\x01\xe9\0\0\x01@\x01\x04self\xe8\0\0\xea\0\x04\0\x1c[metho\ +d]incoming-body.stream\x01k\x01i-\x01@\x01\x04this\xc8\0\0\xec\0\x04\0\x1c[stati\ +c]incoming-body.finish\x01m\x01h-\x01i\x09\x01@\x01\x04self\xee\0\0\xef\0\x04\0!\ +[method]future-trailers.subscribe\x01p\x01i$\x01k\xf1\0\x01j\x01\xf2\0\x01\x1b\x01\ +j\x01\xf3\0\0\x01k\xf4\0\x01@\x01\x04self\xee\0\0\xf5\0\x04\0\x1b[method]future-\ +trailers.get\x01v\x01@\x01\x07headers\xc6\0\0\xe1\0\x04\0\x1e[constructor]outgoi\ +ng-response\x01w\x01h.\x01@\x01\x04self\xf8\0\0*\x04\0%[method]outgoing-response\ +.status-code\x01y\x01@\x02\x04self\xf8\0\x0bstatus-code*\0\xd2\0\x04\0)[method]o\ +utgoing-response.set-status-code\x01z\x01@\x01\x04self\xf8\0\0\xc6\0\x04\0![meth\ +od]outgoing-response.headers\x01{\x01@\x01\x04self\xf8\0\0\xcf\0\x04\0\x1e[metho\ +d]outgoing-response.body\x01|\x01h/\x01i\x05\x01j\x01\xfe\0\0\x01@\x01\x04self\xfd\ +\0\0\xff\0\x04\0\x1b[method]outgoing-body.write\x01\x80\x01\x01j\0\x01\x1b\x01@\x02\ +\x04this\xce\0\x08trailers\xf2\0\0\x81\x01\x04\0\x1c[static]outgoing-body.finish\ +\x01\x82\x01\x01h0\x01@\x01\x04self\x83\x01\0\xef\0\x04\0*[method]future-incomin\ +g-response.subscribe\x01\x84\x01\x01i+\x01j\x01\x85\x01\x01\x1b\x01j\x01\x86\x01\ +\0\x01k\x87\x01\x01@\x01\x04self\x83\x01\0\x88\x01\x04\0$[method]future-incoming\ +-response.get\x01\x89\x01\x01h\x07\x01k\x1b\x01@\x01\x03err\x8a\x01\0\x8b\x01\x04\ +\0\x0fhttp-error-code\x01\x8c\x01\x03\0\x15wasi:http/types@0.2.0\x05\x0e\x02\x03\ +\0\x05\x10outgoing-request\x02\x03\0\x05\x0frequest-options\x02\x03\0\x05\x18fut\ +ure-incoming-response\x02\x03\0\x05\x0aerror-code\x01B\x0f\x02\x03\x02\x01\x0f\x04\ +\0\x10outgoing-request\x03\0\0\x02\x03\x02\x01\x10\x04\0\x0frequest-options\x03\0\ +\x02\x02\x03\x02\x01\x11\x04\0\x18future-incoming-response\x03\0\x04\x02\x03\x02\ +\x01\x12\x04\0\x0aerror-code\x03\0\x06\x01i\x01\x01i\x03\x01k\x09\x01i\x05\x01j\x01\ +\x0b\x01\x07\x01@\x02\x07request\x08\x07options\x0a\0\x0c\x04\0\x06handle\x01\x0d\ +\x03\0\x20wasi:http/outgoing-handler@0.2.0\x05\x13\x02\x03\0\0\x10evm-chain-conf\ +ig\x02\x03\0\0\x13cosmos-chain-config\x02\x03\0\0\x09log-level\x01B\x11\x02\x03\x02\ +\x01\x14\x04\0\x10evm-chain-config\x03\0\0\x02\x03\x02\x01\x15\x04\0\x13cosmos-c\ +hain-config\x03\0\x02\x02\x03\x02\x01\x16\x04\0\x09log-level\x03\0\x04\x01k\x01\x01\ +@\x01\x0achain-names\0\x06\x04\0\x14get-evm-chain-config\x01\x07\x01k\x03\x01@\x01\ +\x0achain-names\0\x08\x04\0\x17get-cosmos-chain-config\x01\x09\x01ks\x01@\x01\x03\ +keys\0\x0a\x04\0\x0aconfig-var\x01\x0b\x01@\x02\x05level\x05\x07messages\x01\0\x04\ +\0\x03log\x01\x0c\x03\0\x04host\x05\x17\x01B\x0a\x01o\x02ss\x01p\0\x01@\0\0\x01\x04\ +\0\x0fget-environment\x01\x02\x01ps\x01@\0\0\x03\x04\0\x0dget-arguments\x01\x04\x01\ +ks\x01@\0\0\x05\x04\0\x0binitial-cwd\x01\x06\x03\0\x1awasi:cli/environment@0.2.0\ +\x05\x18\x01B\x03\x01j\0\0\x01@\x01\x06status\0\x01\0\x04\0\x04exit\x01\x01\x03\0\ +\x13wasi:cli/exit@0.2.0\x05\x19\x01B\x05\x02\x03\x02\x01\x0c\x04\0\x0cinput-stre\ +am\x03\0\0\x01i\x01\x01@\0\0\x02\x04\0\x09get-stdin\x01\x03\x03\0\x14wasi:cli/st\ +din@0.2.0\x05\x1a\x01B\x05\x02\x03\x02\x01\x0d\x04\0\x0doutput-stream\x03\0\0\x01\ +i\x01\x01@\0\0\x02\x04\0\x0aget-stdout\x01\x03\x03\0\x15wasi:cli/stdout@0.2.0\x05\ +\x1b\x01B\x05\x02\x03\x02\x01\x0d\x04\0\x0doutput-stream\x03\0\0\x01i\x01\x01@\0\ +\0\x02\x04\0\x0aget-stderr\x01\x03\x03\0\x15wasi:cli/stderr@0.2.0\x05\x1c\x01B\x01\ +\x04\0\x0eterminal-input\x03\x01\x03\0\x1dwasi:cli/terminal-input@0.2.0\x05\x1d\x01\ +B\x01\x04\0\x0fterminal-output\x03\x01\x03\0\x1ewasi:cli/terminal-output@0.2.0\x05\ +\x1e\x02\x03\0\x0d\x0eterminal-input\x01B\x06\x02\x03\x02\x01\x1f\x04\0\x0etermi\ +nal-input\x03\0\0\x01i\x01\x01k\x02\x01@\0\0\x03\x04\0\x12get-terminal-stdin\x01\ +\x04\x03\0\x1dwasi:cli/terminal-stdin@0.2.0\x05\x20\x02\x03\0\x0e\x0fterminal-ou\ +tput\x01B\x06\x02\x03\x02\x01!\x04\0\x0fterminal-output\x03\0\0\x01i\x01\x01k\x02\ +\x01@\0\0\x03\x04\0\x13get-terminal-stdout\x01\x04\x03\0\x1ewasi:cli/terminal-st\ +dout@0.2.0\x05\"\x01B\x06\x02\x03\x02\x01!\x04\0\x0fterminal-output\x03\0\0\x01i\ +\x01\x01k\x02\x01@\0\0\x03\x04\0\x13get-terminal-stderr\x01\x04\x03\0\x1ewasi:cl\ +i/terminal-stderr@0.2.0\x05#\x01B\x05\x01r\x02\x07secondsw\x0bnanosecondsy\x04\0\ +\x08datetime\x03\0\0\x01@\0\0\x01\x04\0\x03now\x01\x02\x04\0\x0aresolution\x01\x02\ +\x03\0\x1cwasi:clocks/wall-clock@0.2.0\x05$\x02\x03\0\x04\x05error\x02\x03\0\x12\ +\x08datetime\x01Br\x02\x03\x02\x01\x0c\x04\0\x0cinput-stream\x03\0\0\x02\x03\x02\ +\x01\x0d\x04\0\x0doutput-stream\x03\0\x02\x02\x03\x02\x01%\x04\0\x05error\x03\0\x04\ +\x02\x03\x02\x01&\x04\0\x08datetime\x03\0\x06\x01w\x04\0\x08filesize\x03\0\x08\x01\ +m\x08\x07unknown\x0cblock-device\x10character-device\x09directory\x04fifo\x0dsym\ +bolic-link\x0cregular-file\x06socket\x04\0\x0fdescriptor-type\x03\0\x0a\x01n\x06\ +\x04read\x05write\x13file-integrity-sync\x13data-integrity-sync\x14requested-wri\ +te-sync\x10mutate-directory\x04\0\x10descriptor-flags\x03\0\x0c\x01n\x01\x0esyml\ +ink-follow\x04\0\x0apath-flags\x03\0\x0e\x01n\x04\x06create\x09directory\x09excl\ +usive\x08truncate\x04\0\x0aopen-flags\x03\0\x10\x01w\x04\0\x0alink-count\x03\0\x12\ +\x01k\x07\x01r\x06\x04type\x0b\x0alink-count\x13\x04size\x09\x15data-access-time\ +stamp\x14\x1bdata-modification-timestamp\x14\x17status-change-timestamp\x14\x04\0\ +\x0fdescriptor-stat\x03\0\x15\x01q\x03\x09no-change\0\0\x03now\0\0\x09timestamp\x01\ +\x07\0\x04\0\x0dnew-timestamp\x03\0\x17\x01r\x02\x04type\x0b\x04names\x04\0\x0fd\ +irectory-entry\x03\0\x19\x01m%\x06access\x0bwould-block\x07already\x0ebad-descri\ +ptor\x04busy\x08deadlock\x05quota\x05exist\x0efile-too-large\x15illegal-byte-seq\ +uence\x0bin-progress\x0binterrupted\x07invalid\x02io\x0cis-directory\x04loop\x0e\ +too-many-links\x0cmessage-size\x0dname-too-long\x09no-device\x08no-entry\x07no-l\ +ock\x13insufficient-memory\x12insufficient-space\x0dnot-directory\x09not-empty\x0f\ +not-recoverable\x0bunsupported\x06no-tty\x0eno-such-device\x08overflow\x0dnot-pe\ +rmitted\x04pipe\x09read-only\x0cinvalid-seek\x0etext-file-busy\x0ccross-device\x04\ +\0\x0aerror-code\x03\0\x1b\x01m\x06\x06normal\x0asequential\x06random\x09will-ne\ +ed\x09dont-need\x08no-reuse\x04\0\x06advice\x03\0\x1d\x01r\x02\x05lowerw\x05uppe\ +rw\x04\0\x13metadata-hash-value\x03\0\x1f\x04\0\x0adescriptor\x03\x01\x04\0\x16d\ +irectory-entry-stream\x03\x01\x01h!\x01i\x01\x01j\x01$\x01\x1c\x01@\x02\x04self#\ +\x06offset\x09\0%\x04\0\"[method]descriptor.read-via-stream\x01&\x01i\x03\x01j\x01\ +'\x01\x1c\x01@\x02\x04self#\x06offset\x09\0(\x04\0#[method]descriptor.write-via-\ +stream\x01)\x01@\x01\x04self#\0(\x04\0$[method]descriptor.append-via-stream\x01*\ +\x01j\0\x01\x1c\x01@\x04\x04self#\x06offset\x09\x06length\x09\x06advice\x1e\0+\x04\ +\0\x19[method]descriptor.advise\x01,\x01@\x01\x04self#\0+\x04\0\x1c[method]descr\ +iptor.sync-data\x01-\x01j\x01\x0d\x01\x1c\x01@\x01\x04self#\0.\x04\0\x1c[method]\ +descriptor.get-flags\x01/\x01j\x01\x0b\x01\x1c\x01@\x01\x04self#\00\x04\0\x1b[me\ +thod]descriptor.get-type\x011\x01@\x02\x04self#\x04size\x09\0+\x04\0\x1b[method]\ +descriptor.set-size\x012\x01@\x03\x04self#\x15data-access-timestamp\x18\x1bdata-\ +modification-timestamp\x18\0+\x04\0\x1c[method]descriptor.set-times\x013\x01p}\x01\ +o\x024\x7f\x01j\x015\x01\x1c\x01@\x03\x04self#\x06length\x09\x06offset\x09\06\x04\ +\0\x17[method]descriptor.read\x017\x01j\x01\x09\x01\x1c\x01@\x03\x04self#\x06buf\ +fer4\x06offset\x09\08\x04\0\x18[method]descriptor.write\x019\x01i\"\x01j\x01:\x01\ +\x1c\x01@\x01\x04self#\0;\x04\0![method]descriptor.read-directory\x01<\x04\0\x17\ +[method]descriptor.sync\x01-\x01@\x02\x04self#\x04paths\0+\x04\0&[method]descrip\ +tor.create-directory-at\x01=\x01j\x01\x16\x01\x1c\x01@\x01\x04self#\0>\x04\0\x17\ +[method]descriptor.stat\x01?\x01@\x03\x04self#\x0apath-flags\x0f\x04paths\0>\x04\ +\0\x1a[method]descriptor.stat-at\x01@\x01@\x05\x04self#\x0apath-flags\x0f\x04pat\ +hs\x15data-access-timestamp\x18\x1bdata-modification-timestamp\x18\0+\x04\0\x1f[\ +method]descriptor.set-times-at\x01A\x01@\x05\x04self#\x0eold-path-flags\x0f\x08o\ +ld-paths\x0enew-descriptor#\x08new-paths\0+\x04\0\x1a[method]descriptor.link-at\x01\ +B\x01i!\x01j\x01\xc3\0\x01\x1c\x01@\x05\x04self#\x0apath-flags\x0f\x04paths\x0ao\ +pen-flags\x11\x05flags\x0d\0\xc4\0\x04\0\x1a[method]descriptor.open-at\x01E\x01j\ +\x01s\x01\x1c\x01@\x02\x04self#\x04paths\0\xc6\0\x04\0\x1e[method]descriptor.rea\ +dlink-at\x01G\x04\0&[method]descriptor.remove-directory-at\x01=\x01@\x04\x04self\ +#\x08old-paths\x0enew-descriptor#\x08new-paths\0+\x04\0\x1c[method]descriptor.re\ +name-at\x01H\x01@\x03\x04self#\x08old-paths\x08new-paths\0+\x04\0\x1d[method]des\ +criptor.symlink-at\x01I\x04\0![method]descriptor.unlink-file-at\x01=\x01@\x02\x04\ +self#\x05other#\0\x7f\x04\0![method]descriptor.is-same-object\x01J\x01j\x01\x20\x01\ +\x1c\x01@\x01\x04self#\0\xcb\0\x04\0\x20[method]descriptor.metadata-hash\x01L\x01\ +@\x03\x04self#\x0apath-flags\x0f\x04paths\0\xcb\0\x04\0#[method]descriptor.metad\ +ata-hash-at\x01M\x01h\"\x01k\x1a\x01j\x01\xcf\0\x01\x1c\x01@\x01\x04self\xce\0\0\ +\xd0\0\x04\03[method]directory-entry-stream.read-directory-entry\x01Q\x01h\x05\x01\ +k\x1c\x01@\x01\x03err\xd2\0\0\xd3\0\x04\0\x15filesystem-error-code\x01T\x03\0\x1b\ +wasi:filesystem/types@0.2.0\x05'\x02\x03\0\x13\x0adescriptor\x01B\x07\x02\x03\x02\ +\x01(\x04\0\x0adescriptor\x03\0\0\x01i\x01\x01o\x02\x02s\x01p\x03\x01@\0\0\x04\x04\ +\0\x0fget-directories\x01\x05\x03\0\x1ewasi:filesystem/preopens@0.2.0\x05)\x01B\x11\ +\x04\0\x07network\x03\x01\x01m\x15\x07unknown\x0daccess-denied\x0dnot-supported\x10\ +invalid-argument\x0dout-of-memory\x07timeout\x14concurrency-conflict\x0fnot-in-p\ +rogress\x0bwould-block\x0dinvalid-state\x10new-socket-limit\x14address-not-binda\ +ble\x0eaddress-in-use\x12remote-unreachable\x12connection-refused\x10connection-\ +reset\x12connection-aborted\x12datagram-too-large\x11name-unresolvable\x1atempor\ +ary-resolver-failure\x1apermanent-resolver-failure\x04\0\x0aerror-code\x03\0\x01\ +\x01m\x02\x04ipv4\x04ipv6\x04\0\x11ip-address-family\x03\0\x03\x01o\x04}}}}\x04\0\ +\x0cipv4-address\x03\0\x05\x01o\x08{{{{{{{{\x04\0\x0cipv6-address\x03\0\x07\x01q\ +\x02\x04ipv4\x01\x06\0\x04ipv6\x01\x08\0\x04\0\x0aip-address\x03\0\x09\x01r\x02\x04\ +port{\x07address\x06\x04\0\x13ipv4-socket-address\x03\0\x0b\x01r\x04\x04port{\x09\ +flow-infoy\x07address\x08\x08scope-idy\x04\0\x13ipv6-socket-address\x03\0\x0d\x01\ +q\x02\x04ipv4\x01\x0c\0\x04ipv6\x01\x0e\0\x04\0\x11ip-socket-address\x03\0\x0f\x03\ +\0\x1awasi:sockets/network@0.2.0\x05*\x02\x03\0\x15\x07network\x01B\x05\x02\x03\x02\ +\x01+\x04\0\x07network\x03\0\0\x01i\x01\x01@\0\0\x02\x04\0\x10instance-network\x01\ +\x03\x03\0#wasi:sockets/instance-network@0.2.0\x05,\x02\x03\0\x15\x0aerror-code\x02\ +\x03\0\x15\x11ip-socket-address\x02\x03\0\x15\x11ip-address-family\x01BD\x02\x03\ \x02\x01\x06\x04\0\x08pollable\x03\0\0\x02\x03\x02\x01+\x04\0\x07network\x03\0\x02\ -\x02\x03\x02\x01-\x04\0\x0aerror-code\x03\0\x04\x02\x03\x02\x016\x04\0\x0aip-add\ -ress\x03\0\x06\x04\0\x16resolve-address-stream\x03\x01\x01h\x08\x01k\x07\x01j\x01\ -\x0a\x01\x05\x01@\x01\x04self\x09\0\x0b\x04\03[method]resolve-address-stream.res\ -olve-next-address\x01\x0c\x01i\x01\x01@\x01\x04self\x09\0\x0d\x04\0([method]reso\ -lve-address-stream.subscribe\x01\x0e\x01h\x03\x01i\x08\x01j\x01\x10\x01\x05\x01@\ -\x02\x07network\x0f\x04names\0\x11\x04\0\x11resolve-addresses\x01\x12\x03\0!wasi\ -:sockets/ip-name-lookup@0.2.0\x057\x01B\x05\x01p}\x01@\x01\x03lenw\0\0\x04\0\x10\ -get-random-bytes\x01\x01\x01@\0\0w\x04\0\x0eget-random-u64\x01\x02\x03\0\x18wasi\ -:random/random@0.2.0\x058\x01B\x05\x01p}\x01@\x01\x03lenw\0\0\x04\0\x19get-insec\ -ure-random-bytes\x01\x01\x01@\0\0w\x04\0\x17get-insecure-random-u64\x01\x02\x03\0\ -\x1awasi:random/insecure@0.2.0\x059\x01B\x03\x01o\x02ww\x01@\0\0\0\x04\0\x0dinse\ -cure-seed\x01\x01\x03\0\x1fwasi:random/insecure-seed@0.2.0\x05:\x01k\x04\x01j\x01\ -;\x01s\x01@\x01\x0etrigger-action\x02\0<\x04\0\x03run\x01=\x04\0,wavs:worker/lay\ -er-trigger-world@0.4.0-beta.4\x04\0\x0b\x19\x01\0\x13layer-trigger-world\x03\0\0\ -\0G\x09producers\x01\x0cprocessed-by\x02\x0dwit-component\x070.227.1\x10wit-bind\ -gen-rust\x060.41.0"; +\x02\x03\x02\x01-\x04\0\x0aerror-code\x03\0\x04\x02\x03\x02\x01.\x04\0\x11ip-soc\ +ket-address\x03\0\x06\x02\x03\x02\x01/\x04\0\x11ip-address-family\x03\0\x08\x01p\ +}\x01r\x02\x04data\x0a\x0eremote-address\x07\x04\0\x11incoming-datagram\x03\0\x0b\ +\x01k\x07\x01r\x02\x04data\x0a\x0eremote-address\x0d\x04\0\x11outgoing-datagram\x03\ +\0\x0e\x04\0\x0audp-socket\x03\x01\x04\0\x18incoming-datagram-stream\x03\x01\x04\ +\0\x18outgoing-datagram-stream\x03\x01\x01h\x10\x01h\x03\x01j\0\x01\x05\x01@\x03\ +\x04self\x13\x07network\x14\x0dlocal-address\x07\0\x15\x04\0\x1d[method]udp-sock\ +et.start-bind\x01\x16\x01@\x01\x04self\x13\0\x15\x04\0\x1e[method]udp-socket.fin\ +ish-bind\x01\x17\x01i\x11\x01i\x12\x01o\x02\x18\x19\x01j\x01\x1a\x01\x05\x01@\x02\ +\x04self\x13\x0eremote-address\x0d\0\x1b\x04\0\x19[method]udp-socket.stream\x01\x1c\ +\x01j\x01\x07\x01\x05\x01@\x01\x04self\x13\0\x1d\x04\0\x20[method]udp-socket.loc\ +al-address\x01\x1e\x04\0![method]udp-socket.remote-address\x01\x1e\x01@\x01\x04s\ +elf\x13\0\x09\x04\0![method]udp-socket.address-family\x01\x1f\x01j\x01}\x01\x05\x01\ +@\x01\x04self\x13\0\x20\x04\0$[method]udp-socket.unicast-hop-limit\x01!\x01@\x02\ +\x04self\x13\x05value}\0\x15\x04\0([method]udp-socket.set-unicast-hop-limit\x01\"\ +\x01j\x01w\x01\x05\x01@\x01\x04self\x13\0#\x04\0&[method]udp-socket.receive-buff\ +er-size\x01$\x01@\x02\x04self\x13\x05valuew\0\x15\x04\0*[method]udp-socket.set-r\ +eceive-buffer-size\x01%\x04\0#[method]udp-socket.send-buffer-size\x01$\x04\0'[me\ +thod]udp-socket.set-send-buffer-size\x01%\x01i\x01\x01@\x01\x04self\x13\0&\x04\0\ +\x1c[method]udp-socket.subscribe\x01'\x01h\x11\x01p\x0c\x01j\x01)\x01\x05\x01@\x02\ +\x04self(\x0bmax-resultsw\0*\x04\0([method]incoming-datagram-stream.receive\x01+\ +\x01@\x01\x04self(\0&\x04\0*[method]incoming-datagram-stream.subscribe\x01,\x01h\ +\x12\x01@\x01\x04self-\0#\x04\0+[method]outgoing-datagram-stream.check-send\x01.\ +\x01p\x0f\x01@\x02\x04self-\x09datagrams/\0#\x04\0%[method]outgoing-datagram-str\ +eam.send\x010\x01@\x01\x04self-\0&\x04\0*[method]outgoing-datagram-stream.subscr\ +ibe\x011\x03\0\x16wasi:sockets/udp@0.2.0\x050\x02\x03\0\x17\x0audp-socket\x01B\x0c\ +\x02\x03\x02\x01+\x04\0\x07network\x03\0\0\x02\x03\x02\x01-\x04\0\x0aerror-code\x03\ +\0\x02\x02\x03\x02\x01/\x04\0\x11ip-address-family\x03\0\x04\x02\x03\x02\x011\x04\ +\0\x0audp-socket\x03\0\x06\x01i\x07\x01j\x01\x08\x01\x03\x01@\x01\x0eaddress-fam\ +ily\x05\0\x09\x04\0\x11create-udp-socket\x01\x0a\x03\0$wasi:sockets/udp-create-s\ +ocket@0.2.0\x052\x01BT\x02\x03\x02\x01\x0c\x04\0\x0cinput-stream\x03\0\0\x02\x03\ +\x02\x01\x0d\x04\0\x0doutput-stream\x03\0\x02\x02\x03\x02\x01\x06\x04\0\x08polla\ +ble\x03\0\x04\x02\x03\x02\x01\x0b\x04\0\x08duration\x03\0\x06\x02\x03\x02\x01+\x04\ +\0\x07network\x03\0\x08\x02\x03\x02\x01-\x04\0\x0aerror-code\x03\0\x0a\x02\x03\x02\ +\x01.\x04\0\x11ip-socket-address\x03\0\x0c\x02\x03\x02\x01/\x04\0\x11ip-address-\ +family\x03\0\x0e\x01m\x03\x07receive\x04send\x04both\x04\0\x0dshutdown-type\x03\0\ +\x10\x04\0\x0atcp-socket\x03\x01\x01h\x12\x01h\x09\x01j\0\x01\x0b\x01@\x03\x04se\ +lf\x13\x07network\x14\x0dlocal-address\x0d\0\x15\x04\0\x1d[method]tcp-socket.sta\ +rt-bind\x01\x16\x01@\x01\x04self\x13\0\x15\x04\0\x1e[method]tcp-socket.finish-bi\ +nd\x01\x17\x01@\x03\x04self\x13\x07network\x14\x0eremote-address\x0d\0\x15\x04\0\ +\x20[method]tcp-socket.start-connect\x01\x18\x01i\x01\x01i\x03\x01o\x02\x19\x1a\x01\ +j\x01\x1b\x01\x0b\x01@\x01\x04self\x13\0\x1c\x04\0![method]tcp-socket.finish-con\ +nect\x01\x1d\x04\0\x1f[method]tcp-socket.start-listen\x01\x17\x04\0\x20[method]t\ +cp-socket.finish-listen\x01\x17\x01i\x12\x01o\x03\x1e\x19\x1a\x01j\x01\x1f\x01\x0b\ +\x01@\x01\x04self\x13\0\x20\x04\0\x19[method]tcp-socket.accept\x01!\x01j\x01\x0d\ +\x01\x0b\x01@\x01\x04self\x13\0\"\x04\0\x20[method]tcp-socket.local-address\x01#\ +\x04\0![method]tcp-socket.remote-address\x01#\x01@\x01\x04self\x13\0\x7f\x04\0\x1f\ +[method]tcp-socket.is-listening\x01$\x01@\x01\x04self\x13\0\x0f\x04\0![method]tc\ +p-socket.address-family\x01%\x01@\x02\x04self\x13\x05valuew\0\x15\x04\0*[method]\ +tcp-socket.set-listen-backlog-size\x01&\x01j\x01\x7f\x01\x0b\x01@\x01\x04self\x13\ +\0'\x04\0%[method]tcp-socket.keep-alive-enabled\x01(\x01@\x02\x04self\x13\x05val\ +ue\x7f\0\x15\x04\0)[method]tcp-socket.set-keep-alive-enabled\x01)\x01j\x01\x07\x01\ +\x0b\x01@\x01\x04self\x13\0*\x04\0'[method]tcp-socket.keep-alive-idle-time\x01+\x01\ +@\x02\x04self\x13\x05value\x07\0\x15\x04\0+[method]tcp-socket.set-keep-alive-idl\ +e-time\x01,\x04\0&[method]tcp-socket.keep-alive-interval\x01+\x04\0*[method]tcp-\ +socket.set-keep-alive-interval\x01,\x01j\x01y\x01\x0b\x01@\x01\x04self\x13\0-\x04\ +\0#[method]tcp-socket.keep-alive-count\x01.\x01@\x02\x04self\x13\x05valuey\0\x15\ +\x04\0'[method]tcp-socket.set-keep-alive-count\x01/\x01j\x01}\x01\x0b\x01@\x01\x04\ +self\x13\00\x04\0\x1c[method]tcp-socket.hop-limit\x011\x01@\x02\x04self\x13\x05v\ +alue}\0\x15\x04\0\x20[method]tcp-socket.set-hop-limit\x012\x01j\x01w\x01\x0b\x01\ +@\x01\x04self\x13\03\x04\0&[method]tcp-socket.receive-buffer-size\x014\x04\0*[me\ +thod]tcp-socket.set-receive-buffer-size\x01&\x04\0#[method]tcp-socket.send-buffe\ +r-size\x014\x04\0'[method]tcp-socket.set-send-buffer-size\x01&\x01i\x05\x01@\x01\ +\x04self\x13\05\x04\0\x1c[method]tcp-socket.subscribe\x016\x01@\x02\x04self\x13\x0d\ +shutdown-type\x11\0\x15\x04\0\x1b[method]tcp-socket.shutdown\x017\x03\0\x16wasi:\ +sockets/tcp@0.2.0\x053\x02\x03\0\x19\x0atcp-socket\x01B\x0c\x02\x03\x02\x01+\x04\ +\0\x07network\x03\0\0\x02\x03\x02\x01-\x04\0\x0aerror-code\x03\0\x02\x02\x03\x02\ +\x01/\x04\0\x11ip-address-family\x03\0\x04\x02\x03\x02\x014\x04\0\x0atcp-socket\x03\ +\0\x06\x01i\x07\x01j\x01\x08\x01\x03\x01@\x01\x0eaddress-family\x05\0\x09\x04\0\x11\ +create-tcp-socket\x01\x0a\x03\0$wasi:sockets/tcp-create-socket@0.2.0\x055\x02\x03\ +\0\x15\x0aip-address\x01B\x16\x02\x03\x02\x01\x06\x04\0\x08pollable\x03\0\0\x02\x03\ +\x02\x01+\x04\0\x07network\x03\0\x02\x02\x03\x02\x01-\x04\0\x0aerror-code\x03\0\x04\ +\x02\x03\x02\x016\x04\0\x0aip-address\x03\0\x06\x04\0\x16resolve-address-stream\x03\ +\x01\x01h\x08\x01k\x07\x01j\x01\x0a\x01\x05\x01@\x01\x04self\x09\0\x0b\x04\03[me\ +thod]resolve-address-stream.resolve-next-address\x01\x0c\x01i\x01\x01@\x01\x04se\ +lf\x09\0\x0d\x04\0([method]resolve-address-stream.subscribe\x01\x0e\x01h\x03\x01\ +i\x08\x01j\x01\x10\x01\x05\x01@\x02\x07network\x0f\x04names\0\x11\x04\0\x11resol\ +ve-addresses\x01\x12\x03\0!wasi:sockets/ip-name-lookup@0.2.0\x057\x01B\x05\x01p}\ +\x01@\x01\x03lenw\0\0\x04\0\x10get-random-bytes\x01\x01\x01@\0\0w\x04\0\x0eget-r\ +andom-u64\x01\x02\x03\0\x18wasi:random/random@0.2.0\x058\x01B\x05\x01p}\x01@\x01\ +\x03lenw\0\0\x04\0\x19get-insecure-random-bytes\x01\x01\x01@\0\0w\x04\0\x17get-i\ +nsecure-random-u64\x01\x02\x03\0\x1awasi:random/insecure@0.2.0\x059\x01B\x03\x01\ +o\x02ww\x01@\0\0\0\x04\0\x0dinsecure-seed\x01\x01\x03\0\x1fwasi:random/insecure-\ +seed@0.2.0\x05:\x01k\x04\x01j\x01;\x01s\x01@\x01\x0etrigger-action\x02\0<\x04\0\x03\ +run\x01=\x04\0%wavs:worker/layer-trigger-world@0.4.0\x04\0\x0b\x19\x01\0\x13laye\ +r-trigger-world\x03\0\0\0G\x09producers\x01\x0cprocessed-by\x02\x0dwit-component\ +\x070.227.1\x10wit-bindgen-rust\x060.41.0"; #[inline(never)] #[doc(hidden)] pub fn __link_custom_section_describing_imports() { diff --git a/components/golang-evm-price-oracle/Makefile b/components/golang-evm-price-oracle/Makefile index 1944ffee..d981b359 100644 --- a/components/golang-evm-price-oracle/Makefile +++ b/components/golang-evm-price-oracle/Makefile @@ -1,4 +1,4 @@ -WAVS_PACKAGE=wavs:worker@0.4.0-beta.4 +WAVS_PACKAGE=wavs:worker@0.4.0 WAVS_WIT_WORLD=wavs:worker/layer-trigger-world # get the first line of the go.mod and get the last element after the last /, then replace - with _ GO_MOD_NAME?=$(shell head -n 1 go.mod | cut -d' ' -f2 | rev | cut -d'/' -f1 | rev | tr '-' '_') diff --git a/components/golang-evm-price-oracle/go.mod b/components/golang-evm-price-oracle/go.mod index 77e4332f..29fddb4a 100644 --- a/components/golang-evm-price-oracle/go.mod +++ b/components/golang-evm-price-oracle/go.mod @@ -12,7 +12,7 @@ replace ( ) require ( - github.com/Lay3rLabs/wavs-wasi/go v0.4.0-beta.4 + github.com/Lay3rLabs/wavs-wasi/go v0.4.0 github.com/dev-wasm/dev-wasm-go/lib v0.0.0-20240907000152-b653306ed695 go.bytecodealliance.org/cm v0.2.2 ) diff --git a/components/golang-evm-price-oracle/go.sum b/components/golang-evm-price-oracle/go.sum index 49aa43d0..3d259d89 100644 --- a/components/golang-evm-price-oracle/go.sum +++ b/components/golang-evm-price-oracle/go.sum @@ -1,5 +1,5 @@ -github.com/Lay3rLabs/wavs-wasi/go v0.4.0-beta.4 h1:gAdI6IOn3OtVnR0226XlarZXYSSeNRRJ51o8eGyGOeA= -github.com/Lay3rLabs/wavs-wasi/go v0.4.0-beta.4/go.mod h1:+YuQa+Asl1vAeeXewN3ZAnLaP19aQMGrQU0bWWmvSpw= +github.com/Lay3rLabs/wavs-wasi/go v0.4.0 h1:2GFt3coPnonCY7fa5nY5kErZIBKZ725zlXnoH1NVIik= +github.com/Lay3rLabs/wavs-wasi/go v0.4.0/go.mod h1:+YuQa+Asl1vAeeXewN3ZAnLaP19aQMGrQU0bWWmvSpw= github.com/Reecepbcups/dev-wasm-go/lib v1.0.0 h1:wehTQiW+QP71bX24iVZB5xxZdpbg9qcVb81zYvrvf4Y= github.com/Reecepbcups/dev-wasm-go/lib v1.0.0/go.mod h1:IAZDQaELmHlCjhQkmfnFesp2pAymqgvlPak5JEdNu4c= github.com/Reecepbcups/go-eth v0.7.1 h1:dH1E85arpYZAG33m1FPvFsEClgwPF3qXzWQW3oCmV1I= diff --git a/components/js-evm-price-oracle/Makefile b/components/js-evm-price-oracle/Makefile index 1db52df0..c404e077 100644 --- a/components/js-evm-price-oracle/Makefile +++ b/components/js-evm-price-oracle/Makefile @@ -1,4 +1,4 @@ -WAVS_PACKAGE=wavs:worker@0.4.0-beta.4 +WAVS_PACKAGE=wavs:worker@0.4.0 WAVS_WIT_WORLD=wavs:worker/layer-trigger-world OUTPUT_DIR?=../../compiled diff --git a/components/js-evm-price-oracle/index.ts b/components/js-evm-price-oracle/index.ts index b219b42f..e594f55e 100644 --- a/components/js-evm-price-oracle/index.ts +++ b/components/js-evm-price-oracle/index.ts @@ -1,4 +1,4 @@ -import { TriggerAction, WasmResponse } from "./out/wavs:worker@0.4.0-beta.4"; +import { TriggerAction, WasmResponse } from "./out/wavs:worker@0.4.0"; import { decodeTriggerEvent, encodeOutput, Destination } from "./trigger"; async function run(triggerAction: TriggerAction): Promise { diff --git a/docs/handbook/components/blockchain-interactions.mdx b/docs/handbook/components/blockchain-interactions.mdx index 76e77331..3c5a68f2 100644 --- a/docs/handbook/components/blockchain-interactions.mdx +++ b/docs/handbook/components/blockchain-interactions.mdx @@ -25,7 +25,7 @@ The following dependencies are commonly required in your component's `Cargo.toml [dependencies] # Core WAVS blockchain functionality wit-bindgen-rt = { workspace = true, features = ["bitflags"] } # Required for WASI bindings -wavs-wasi-utils = "0.4.0-beta.4" # Blockchain interaction utilities +wavs-wasi-utils = "0.4.0" # Blockchain interaction utilities wstd = "0.5.3" # WASI standard library # Alloy crates for Ethereum interaction diff --git a/docs/handbook/components/network-requests.mdx b/docs/handbook/components/network-requests.mdx index f1aaa48f..8176182a 100644 --- a/docs/handbook/components/network-requests.mdx +++ b/docs/handbook/components/network-requests.mdx @@ -17,7 +17,7 @@ The following dependencies are required for making HTTP requests from a componen ```toml Cargo.toml [dependencies] -wavs-wasi-utils = "0.4.0-beta.4" # HTTP utilities +wavs-wasi-utils = "0.4.0" # HTTP utilities wstd = "0.5.3" # Runtime utilities (includes block_on) serde = { version = "1.0.219", features = ["derive"] } # Serialization serde_json = "1.0.140" # JSON handling diff --git a/docs/handbook/template.mdx b/docs/handbook/template.mdx index 13c8f367..fa7c53b3 100644 --- a/docs/handbook/template.mdx +++ b/docs/handbook/template.mdx @@ -91,7 +91,7 @@ lto = true [package.metadata.component] package = "component:evm-price-oracle" -target = "wavs:worker/layer-trigger-world@0.4.0-beta.4" +target = "wavs:worker/layer-trigger-world@0.4.0" ``` diff --git a/script/start_all.sh b/script/start_all.sh index a46fb370..b4d076c3 100644 --- a/script/start_all.sh +++ b/script/start_all.sh @@ -11,7 +11,7 @@ else fi PORT=8545 -MIDDLEWARE_IMAGE=ghcr.io/lay3rlabs/wavs-middleware:0.4.0-beta.6 +MIDDLEWARE_IMAGE=ghcr.io/lay3rlabs/wavs-middleware:0.4.0 FORK_RPC_URL=${FORK_RPC_URL:-"${TESTNET_RPC_URL}"} DEPLOY_ENV=$(sh ./script/get-deploy-status.sh) From e588cc72220ea23967def47db79556d886313c77 Mon Sep 17 00:00:00 2001 From: Reece Williams Date: Wed, 25 Jun 2025 11:55:24 -0500 Subject: [PATCH 2/6] wavs-middleware 0.4.1 --- Makefile | 2 +- README.md | 2 +- docs/tutorial/6-run-service.mdx | 2 +- package-lock.json | 8 ++++---- package.json | 2 +- script/deploy-contracts.sh | 7 +++++++ script/deploy-script.sh | 9 ++++++++- src/contracts/WavsSubmit.sol | 29 +++++++++++++++++++++++------ 8 files changed, 46 insertions(+), 15 deletions(-) diff --git a/Makefile b/Makefile index de951f30..c0ee1052 100644 --- a/Makefile +++ b/Makefile @@ -9,7 +9,7 @@ COIN_MARKET_CAP_ID?=1 COMPONENT_FILENAME?=evm_price_oracle.wasm CREDENTIAL?="" DOCKER_IMAGE?=ghcr.io/lay3rlabs/wavs:35c96a4 -MIDDLEWARE_DOCKER_IMAGE?=ghcr.io/lay3rlabs/wavs-middleware:79dffa2 +MIDDLEWARE_DOCKER_IMAGE?=ghcr.io/lay3rlabs/wavs-middleware:0.4.1 IPFS_ENDPOINT?=http://127.0.0.1:5001 RPC_URL?=http://127.0.0.1:8545 SERVICE_FILE?=.docker/service.json diff --git a/README.md b/README.md index 84e599bc..07fb900b 100644 --- a/README.md +++ b/README.md @@ -130,7 +130,7 @@ warg key new ```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 +forge init --template Lay3rLabs/wavs-foundry-template my-wavs --branch 0.4 ``` > \[!TIP] diff --git a/docs/tutorial/6-run-service.mdx b/docs/tutorial/6-run-service.mdx index a07c310c..15546f2d 100644 --- a/docs/tutorial/6-run-service.mdx +++ b/docs/tutorial/6-run-service.mdx @@ -129,7 +129,7 @@ export WAVS_SERVICE_MANAGER_ADDRESS=$(jq -r .addresses.WavsServiceManager ./.nod COMMAND="register ${OPERATOR_PRIVATE_KEY} ${AVS_SIGNING_ADDRESS} 0.001ether" make wavs-middleware # Verify registration -COMMAND="list_operator" PAST_BLOCKS=500 make wavs-middleware +COMMAND="list_operators" PAST_BLOCKS=500 make wavs-middleware ``` ## Trigger the service diff --git a/package-lock.json b/package-lock.json index 120cda65..b0bdd192 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,7 +13,7 @@ "@commitlint/config-conventional": "19.2.2", "@defi-wonderland/natspec-smells": "1.1.6", "@openzeppelin/contracts": "^5.2.0", - "@wavs/solidity": "0.4.0-rc", + "@wavs/solidity": "0.4.0", "forge-std": "github:foundry-rs/forge-std#v1.9.6", "lint-staged": ">=10", "solhint-community": "4.0.0", @@ -394,9 +394,9 @@ } }, "node_modules/@wavs/solidity": { - "version": "0.4.0-rc", - "resolved": "https://registry.npmjs.org/@wavs/solidity/-/solidity-0.4.0-rc.tgz", - "integrity": "sha512-M0QHhiVMCRcv+FLNyTsVlK89w9nEs7dbGOTG554D88wiWDkDKmJ0piZ75BRO4F8rzz6TR3sxTREMKglzXqfdoA==", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@wavs/solidity/-/solidity-0.4.0.tgz", + "integrity": "sha512-IZMxK/hShGORmQE0Eb5gxsMRLEQo16L2cMDvb0IwB3YvNIM02CsOyB4TDFSSqE3KpyR5ZT7vUo1iuVqlkaHoCQ==", "license": "MIT" }, "node_modules/abitype": { diff --git a/package.json b/package.json index bf53ede6..bcc9bd92 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "@defi-wonderland/natspec-smells": "1.1.6", "@openzeppelin/contracts": "^5.2.0", "forge-std": "github:foundry-rs/forge-std#v1.9.6", - "@wavs/solidity": "0.4.0-rc", + "@wavs/solidity": "0.4.0", "lint-staged": ">=10", "solhint-community": "4.0.0", "sort-package-json": "2.10.0" diff --git a/script/deploy-contracts.sh b/script/deploy-contracts.sh index 18728a1a..13e41939 100644 --- a/script/deploy-contracts.sh +++ b/script/deploy-contracts.sh @@ -10,6 +10,13 @@ if [ -z "$WAVS_SERVICE_MANAGER_ADDRESS" ]; then fi fi +forge build +if [ $? -ne 0 ]; then + echo "Forge build failed. Running 'npm install' and deleting the 'out/' and 'cache/' directory." + npm install + rm -rf out/ cache/ + forge build +fi export DEPLOYER_PK=$(cat .nodes/deployer) diff --git a/script/deploy-script.sh b/script/deploy-script.sh index 3d121405..5375f943 100644 --- a/script/deploy-script.sh +++ b/script/deploy-script.sh @@ -1,6 +1,11 @@ #!/bin/bash # set -e +if [ ! -d compiled/ ] || [ -z "$(find compiled/ -name '*.wasm')" ]; then + echo "No WASM files found in compiled/. Building components." + make wasi-build +fi + if git status --porcelain | grep -q "^.* components/"; then echo "Found pending changes in components/*, building" WASI_BUILD_DIR=components/evm-price-oracle make wasi-build @@ -103,6 +108,8 @@ sleep 5 WAVS_ENDPOINT=http://127.0.0.1:8000 SERVICE_URL=${IPFS_URI} IPFS_GATEWAY=${IPFS_GATEWAY} make deploy-service ### === Register service specific operator === + +# OPERATOR_PRIVATE_KEY, AVS_SIGNING_ADDRESS SERVICE_INDEX=0 source ./script/avs-signing-key.sh # TODO: move this check into the middleware (?) @@ -124,6 +131,6 @@ export WAVS_SERVICE_MANAGER_ADDRESS=$(jq -r .addresses.WavsServiceManager ./.nod COMMAND="register ${OPERATOR_PRIVATE_KEY} ${AVS_SIGNING_ADDRESS} 0.001ether" make wavs-middleware # Verify registration -COMMAND="list_operator" PAST_BLOCKS=500 make wavs-middleware +COMMAND="list_operators" PAST_BLOCKS=500 make wavs-middleware echo "✅ Deployment complete!" diff --git a/src/contracts/WavsSubmit.sol b/src/contracts/WavsSubmit.sol index 84ec7f4a..d17b4506 100644 --- a/src/contracts/WavsSubmit.sol +++ b/src/contracts/WavsSubmit.sol @@ -11,7 +11,8 @@ contract SimpleSubmit is ITypes, IWavsServiceHandler { /// @notice Mapping of trigger data mapping(TriggerId _triggerId => bytes _data) internal _datas; /// @notice Mapping of trigger signatures - mapping(TriggerId _triggerId => SignatureData _signature) internal _signatures; + mapping(TriggerId _triggerId => SignatureData _signature) + internal _signatures; /// @notice Service manager instance IWavsServiceManager private _serviceManager; @@ -25,25 +26,41 @@ contract SimpleSubmit is ITypes, IWavsServiceHandler { } /// @inheritdoc IWavsServiceHandler - function handleSignedEnvelope(Envelope calldata envelope, SignatureData calldata signatureData) external { + function handleSignedEnvelope( + Envelope calldata envelope, + SignatureData calldata signatureData + ) external { _serviceManager.validate(envelope, signatureData); - DataWithId memory dataWithId = abi.decode(envelope.payload, (DataWithId)); + DataWithId memory dataWithId = abi.decode( + envelope.payload, + (DataWithId) + ); _signatures[dataWithId.triggerId] = signatureData; _datas[dataWithId.triggerId] = dataWithId.data; _validTriggers[dataWithId.triggerId] = true; } - function isValidTriggerId(TriggerId _triggerId) external view returns (bool _isValid) { + function isValidTriggerId( + TriggerId _triggerId + ) external view returns (bool _isValid) { _isValid = _validTriggers[_triggerId]; } - function getSignature(TriggerId _triggerId) external view returns (SignatureData memory _signature) { + function getSignature( + TriggerId _triggerId + ) external view returns (SignatureData memory _signature) { _signature = _signatures[_triggerId]; } - function getData(TriggerId _triggerId) external view returns (bytes memory _data) { + function getData( + TriggerId _triggerId + ) external view returns (bytes memory _data) { _data = _datas[_triggerId]; } + + function getServiceManager() external view override returns (address) { + return address(_serviceManager); + } } From b6502778948686f494341111b27c15bfc09d0220 Mon Sep 17 00:00:00 2001 From: Reece Williams Date: Wed, 25 Jun 2025 11:57:59 -0500 Subject: [PATCH 3/6] docs --- docs/tutorial/6-run-service.mdx | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/docs/tutorial/6-run-service.mdx b/docs/tutorial/6-run-service.mdx index 15546f2d..22bb8444 100644 --- a/docs/tutorial/6-run-service.mdx +++ b/docs/tutorial/6-run-service.mdx @@ -29,6 +29,20 @@ You can stop the services with `ctrl+c`. Some MacOS terminals require pressing t + + +You can skip all the setup steps below and just run a single command to deploy and run the entire service setup + +```bash +export RPC_URL=`bash ./script/get-rpc.sh` +export AGGREGATOR_URL=http://127.0.0.1:8001 + +bash ./script/deploy-script.sh +``` + +This performs all the below steps (with the exception of actually triggering the contract). + + With the chain running, you can deploy and run your service. From 8bbe495000ccd25b9701c8a56387265e09f50284 Mon Sep 17 00:00:00 2001 From: Reece Williams Date: Wed, 25 Jun 2025 12:00:29 -0500 Subject: [PATCH 4/6] fix: remove override --- src/contracts/WavsSubmit.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/contracts/WavsSubmit.sol b/src/contracts/WavsSubmit.sol index d17b4506..95bb1999 100644 --- a/src/contracts/WavsSubmit.sol +++ b/src/contracts/WavsSubmit.sol @@ -60,7 +60,7 @@ contract SimpleSubmit is ITypes, IWavsServiceHandler { _data = _datas[_triggerId]; } - function getServiceManager() external view override returns (address) { + function getServiceManager() external view returns (address) { return address(_serviceManager); } } From 8f6e11c947b15bbcbe522bc09e3d85af16417835 Mon Sep 17 00:00:00 2001 From: Reece Williams Date: Wed, 25 Jun 2025 12:03:48 -0500 Subject: [PATCH 5/6] add wsl ref to keyring-backend of warg config --- README.md | 2 ++ docs/tutorial/2-setup.mdx | 2 ++ docs/tutorial/5-build.mdx | 2 ++ 3 files changed, 6 insertions(+) diff --git a/README.md b/README.md index 07fb900b..076a2065 100644 --- a/README.md +++ b/README.md @@ -120,6 +120,8 @@ cargo binstall cargo-component wasm-tools warg-cli wkg --locked --no-confirm --f wkg config --default-registry wa.dev # Allow publishing to a registry +# +# if WSL: `warg config --keyring-backend linux-keyutils` warg key new ``` diff --git a/docs/tutorial/2-setup.mdx b/docs/tutorial/2-setup.mdx index 850d7854..304ff7d7 100644 --- a/docs/tutorial/2-setup.mdx +++ b/docs/tutorial/2-setup.mdx @@ -83,6 +83,8 @@ cargo binstall cargo-component wasm-tools warg-cli wkg --locked --no-confirm --f wkg config --default-registry wa.dev # Allow publishing to a registry +# +# if WSL: `warg config --keyring-backend linux-keyutils` warg key new ``` diff --git a/docs/tutorial/5-build.mdx b/docs/tutorial/5-build.mdx index e61eadbc..262f883c 100644 --- a/docs/tutorial/5-build.mdx +++ b/docs/tutorial/5-build.mdx @@ -23,6 +23,8 @@ cargo binstall cargo-component wasm-tools warg-cli wkg --locked --no-confirm --f wkg config --default-registry wa.dev # Allow publishing to a registry +# +# if WSL: `warg config --keyring-backend linux-keyutils` warg key new ``` From 4aa774b6fbb0c702053856fd188b9c2c04284c69 Mon Sep 17 00:00:00 2001 From: Reece Williams Date: Wed, 25 Jun 2025 12:15:50 -0500 Subject: [PATCH 6/6] show error with curl --- script/deploy-script.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/script/deploy-script.sh b/script/deploy-script.sh index 5375f943..87395b3b 100644 --- a/script/deploy-script.sh +++ b/script/deploy-script.sh @@ -78,7 +78,7 @@ IPFS_URL="${IPFS_GATEWAY}${ipfs_cid}" echo "IPFS_URL=${IPFS_URL}" echo "Querying to verify IPFS upload... (120 second timeout)" -curl ${IPFS_URL} --connect-timeout 120 --max-time 120 +curl ${IPFS_URL} --connect-timeout 120 --max-time 120 --show-error --fail if [ "$DEPLOYER_PK" ]; then echo ""