diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..d9d1de9 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,37 @@ +name: Release-plz + +permissions: + pull-requests: write + contents: write + +on: + push: + branches: + - main + +jobs: + + release-plz: + name: Release-plz + runs-on: ubuntu-22.04 + steps: + # Generating a GitHub token, so that PRs and tags created by + # the release-plz-action can trigger actions workflows. + - name: Generate GitHub token + uses: tibdex/github-app-token@v1 + id: generate-token + with: + app_id: ${{ secrets.APP_ID }} + private_key: ${{ secrets.APP_PRIVATE_KEY }} + - name: Checkout repository + uses: actions/checkout@v3 + with: + fetch-depth: 0 + token: ${{ steps.generate-token.outputs.token }} + - name: Install Rust toolchain + uses: dtolnay/rust-toolchain@stable + - name: Run release-plz + uses: MarcoIeni/release-plz-action@main + env: + GITHUB_TOKEN: ${{ steps.generate-token.outputs.token }} + CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }} \ No newline at end of file diff --git a/.gitignore b/.gitignore index a3f7ce3..ed6595d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,3 @@ /target/ .soroban -!./.soroban/network/standalone.toml - +!.soroban/network/futurenet/contract_id.json diff --git a/.soroban/network/futurenet/smartdeploy.json b/.soroban/network/futurenet/smartdeploy.json new file mode 100644 index 0000000..1342cb4 --- /dev/null +++ b/.soroban/network/futurenet/smartdeploy.json @@ -0,0 +1 @@ +"CCN3XEQTTYTM3UKOGOTCYSO4647XE3KJHEUSWTMXLFQ5KALGDWX6CBS2" diff --git a/Cargo.lock b/Cargo.lock index 8019947..f3edb51 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -32,6 +32,12 @@ dependencies = [ "memchr", ] +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + [[package]] name = "android_system_properties" version = "0.1.5" @@ -318,20 +324,6 @@ dependencies = [ "thiserror", ] -[[package]] -name = "cargo_metadata" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7daec1a2a2129eeba1644b220b4647ec537b0b5d4bfd6876fcc5a540056b592" -dependencies = [ - "camino", - "cargo-platform", - "semver", - "serde", - "serde_json", - "thiserror", -] - [[package]] name = "cc" version = "1.0.79" @@ -346,18 +338,18 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "chrono" -version = "0.4.24" +version = "0.4.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e3c5919066adf22df73762e50cffcde3a758f2a848b113b586d1f86728b673b" +checksum = "95ed24df0632f708f5f6d8082675bef2596f7084dee3dd55f632290bf35bfe0f" dependencies = [ + "android-tzdata", "iana-time-zone", "js-sys", - "num-integer", "num-traits", "serde", "time 0.1.45", "wasm-bindgen", - "winapi", + "windows-targets", ] [[package]] @@ -371,30 +363,6 @@ dependencies = [ "once_cell", ] -[[package]] -name = "clap-cargo" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25122ca6ebad5f53578c26638afd9f0160426969970dc37ec6c363ff6b082ebd" -dependencies = [ - "cargo_metadata 0.17.0", - "clap", - "doc-comment", -] - -[[package]] -name = "clap-cargo-extra" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e15177069737cf3e20a985f6f6a0171577cba3314b0f7f9d69238d0efcaaee5" -dependencies = [ - "anyhow", - "cargo_metadata 0.17.0", - "clap", - "clap-cargo", - "heck", -] - [[package]] name = "clap_builder" version = "4.3.21" @@ -481,10 +449,9 @@ checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" [[package]] name = "core-riff" -version = "0.0.0" +version = "0.1.0" dependencies = [ "loam-sdk", - "loam-sdk-core-riff", "smartdeploy-sdk", ] @@ -672,10 +639,9 @@ dependencies = [ [[package]] name = "dev-core-riff" -version = "0.0.0" +version = "0.1.0" dependencies = [ "loam-sdk", - "loam-sdk-core-riff", "smartdeploy-sdk", ] @@ -732,6 +698,12 @@ version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" +[[package]] +name = "dotenvy" +version = "0.15.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b" + [[package]] name = "downcast-rs" version = "1.2.0" @@ -1415,18 +1387,20 @@ checksum = "57bcfdad1b858c2db7c38303a6d2ad4dfaf5eb53dfeb0910128b2c26d6158503" [[package]] name = "loam-build" -version = "0.1.0" -source = "git+https://github.com/loambuild/loam-sdk?tag=v0.6.1#ee47f39b270569ce25eaead80da4a9859ee21868" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0a819eeb0fbca07a21806b304de67d6ac68286719d345b28b1babf69e397a56" dependencies = [ - "cargo_metadata 0.15.4", + "cargo_metadata", "thiserror", "topological-sort", ] [[package]] name = "loam-sdk" -version = "0.1.0" -source = "git+https://github.com/loambuild/loam-sdk?tag=v0.6.1#ee47f39b270569ce25eaead80da4a9859ee21868" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f9b522b0721374be2729947c99ff68820289922a4c7e36f9987378f4acd4788" dependencies = [ "loam-sdk-macro", "loam-soroban-sdk", @@ -1434,19 +1408,21 @@ dependencies = [ [[package]] name = "loam-sdk-core-riff" -version = "0.1.0" -source = "git+https://github.com/loambuild/loam-sdk?tag=v0.6.1#ee47f39b270569ce25eaead80da4a9859ee21868" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70fa9f4c95fd389e996c5dc50c2870ed018a1c82c830f3134aa4391428136c82" dependencies = [ "loam-sdk", ] [[package]] name = "loam-sdk-macro" -version = "0.0.1" -source = "git+https://github.com/loambuild/loam-sdk?tag=v0.6.1#ee47f39b270569ce25eaead80da4a9859ee21868" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e71a37bfb7d993d220de0e10b14a67393e6613f4e8c336746eacb345662f8035" dependencies = [ "Inflector", - "cargo_metadata 0.15.4", + "cargo_metadata", "loam-build", "proc-macro2", "quote", @@ -1455,13 +1431,74 @@ dependencies = [ "thiserror", ] +[[package]] +name = "loam-soroban-cli" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd6d9ba7a273bdddfd004f780549ee96b8c84510b4350d12ecea6511bad30af4" +dependencies = [ + "base64 0.13.1", + "cargo_metadata", + "chrono", + "clap", + "clap_complete", + "crate-git-revision 0.0.4", + "csv", + "dirs", + "dotenvy", + "ed25519-dalek", + "ethnum", + "heck", + "hex", + "http", + "hyper", + "hyper-tls", + "itertools", + "jsonrpsee-core", + "jsonrpsee-http-client", + "num-bigint", + "openssl", + "pathdiff", + "rand 0.8.5", + "regex", + "rpassword", + "sep5", + "serde", + "serde-aux", + "serde_derive", + "serde_json", + "sha2 0.10.6", + "shlex", + "soroban-env-host", + "soroban-ledger-snapshot", + "soroban-sdk", + "soroban-spec", + "soroban-spec-json", + "soroban-spec-rust", + "soroban-spec-tools", + "soroban-spec-typescript", + "stellar-strkey", + "strsim", + "termcolor", + "termcolor_output", + "thiserror", + "tokio", + "toml", + "tracing", + "tracing-appender", + "tracing-subscriber", + "wasmparser 0.90.0", + "which", +] + [[package]] name = "loam-soroban-sdk" -version = "0.1.0" -source = "git+https://github.com/loambuild/loam-sdk?tag=v0.6.1#ee47f39b270569ce25eaead80da4a9859ee21868" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d85b25427b0f6d46ca0ea868e5539a3c0b6e602f0f3ede9dcfb0050bc247b686" dependencies = [ "loam-sdk-macro", - "soroban-sdk 0.9.2", + "soroban-sdk", ] [[package]] @@ -2221,7 +2258,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9afe34ccbd1fb6fa0b2fc7cccb037bd3d3f1e484c3befe1b713d7611884f336a" dependencies = [ "slip10", - "stellar-strkey 0.0.7 (registry+https://github.com/rust-lang/crates.io-index)", + "stellar-strkey", "thiserror", "tiny-bip39", ] @@ -2408,7 +2445,7 @@ checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" [[package]] name = "smartdeploy" -version = "0.0.0" +version = "0.1.0" dependencies = [ "core-riff", "loam-sdk", @@ -2417,43 +2454,23 @@ dependencies = [ [[package]] name = "smartdeploy-cli" -version = "0.0.1" +version = "0.1.0" dependencies = [ "assert_cmd", "assert_fs", - "cargo_metadata 0.15.4", "clap", - "clap-cargo-extra", - "clap_complete", - "csv", - "dirs", - "heck", - "itertools", - "pathdiff", + "loam-soroban-cli", "predicates 2.1.5", - "rand 0.8.5", - "serde", - "serde-aux", - "serde_derive", - "serde_json", - "sha2 0.10.6", "shlex", - "soroban-cli", - "strsim", - "termcolor", - "termcolor_output", "thiserror", "tokio", - "toml", ] [[package]] name = "smartdeploy-macros" version = "0.1.0" dependencies = [ - "proc-macro2", "quote", - "syn 2.0.16", ] [[package]] @@ -2483,85 +2500,11 @@ dependencies = [ "windows-sys", ] -[[package]] -name = "soroban-cli" -version = "0.9.4" -source = "git+https://github.com/ahalabs/soroban-tools?rev=2966e7ac9cbcc9f408b80f4aa21c3b76ccf064c6#2966e7ac9cbcc9f408b80f4aa21c3b76ccf064c6" -dependencies = [ - "base64 0.13.1", - "cargo_metadata 0.15.4", - "chrono", - "clap", - "clap_complete", - "crate-git-revision 0.0.4", - "csv", - "dirs", - "ed25519-dalek", - "ethnum", - "heck", - "hex", - "http", - "hyper", - "hyper-tls", - "itertools", - "jsonrpsee-core", - "jsonrpsee-http-client", - "num-bigint", - "openssl", - "pathdiff", - "rand 0.8.5", - "regex", - "rpassword", - "sep5", - "serde", - "serde-aux", - "serde_derive", - "serde_json", - "sha2 0.10.6", - "shlex", - "soroban-env-host 0.0.17 (git+https://github.com/stellar/rs-soroban-env?rev=400d806387140553e4e685d232deb3a807ec0e36)", - "soroban-ledger-snapshot 0.9.1", - "soroban-sdk 0.9.1", - "soroban-spec 0.9.1", - "soroban-spec-json", - "soroban-spec-rust 0.9.1", - "soroban-spec-tools", - "soroban-spec-typescript", - "stellar-strkey 0.0.7 (registry+https://github.com/rust-lang/crates.io-index)", - "strsim", - "termcolor", - "termcolor_output", - "thiserror", - "tokio", - "toml", - "tracing", - "tracing-appender", - "tracing-subscriber", - "wasmparser 0.90.0", - "which", -] - [[package]] name = "soroban-env-common" version = "0.0.17" -source = "git+https://github.com/stellar/rs-soroban-env?rev=400d806387140553e4e685d232deb3a807ec0e36#400d806387140553e4e685d232deb3a807ec0e36" -dependencies = [ - "crate-git-revision 0.0.6", - "ethnum", - "num-derive", - "num-integer", - "num-traits", - "serde", - "soroban-env-macros 0.0.17 (git+https://github.com/stellar/rs-soroban-env?rev=400d806387140553e4e685d232deb3a807ec0e36)", - "soroban-wasmi 0.30.0-soroban (git+https://github.com/stellar/wasmi?rev=3dc639fde3bebf0bf364a9fa4ac2f0efb7ee9995)", - "static_assertions", - "stellar-xdr 0.0.17 (git+https://github.com/stellar/rs-stellar-xdr?rev=0f16673441898162c9996da6117be2280ef8fd84)", -] - -[[package]] -name = "soroban-env-common" -version = "0.0.17" -source = "git+https://github.com/stellar/rs-soroban-env?rev=63cf7fe3d5ffc60db57fba97e9fc9c5778cd559c#63cf7fe3d5ffc60db57fba97e9fc9c5778cd559c" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52e28d297d1172c2a020660728ac24ca3af7118de85ad547d071f96221111dfb" dependencies = [ "arbitrary", "crate-git-revision 0.0.6", @@ -2570,60 +2513,27 @@ dependencies = [ "num-integer", "num-traits", "serde", - "soroban-env-macros 0.0.17 (git+https://github.com/stellar/rs-soroban-env?rev=63cf7fe3d5ffc60db57fba97e9fc9c5778cd559c)", - "soroban-wasmi 0.30.0-soroban (git+https://github.com/stellar/wasmi?rev=284c963ba080703061797e2a3cba0853edee0dd4)", - "static_assertions", - "stellar-xdr 0.0.17 (git+https://github.com/stellar/rs-stellar-xdr?rev=4eaf2388c1de6fc295ed5f7df8174c199923df5b)", -] - -[[package]] -name = "soroban-env-guest" -version = "0.0.17" -source = "git+https://github.com/stellar/rs-soroban-env?rev=400d806387140553e4e685d232deb3a807ec0e36#400d806387140553e4e685d232deb3a807ec0e36" -dependencies = [ - "soroban-env-common 0.0.17 (git+https://github.com/stellar/rs-soroban-env?rev=400d806387140553e4e685d232deb3a807ec0e36)", + "soroban-env-macros", + "soroban-wasmi", "static_assertions", + "stellar-xdr", ] [[package]] name = "soroban-env-guest" version = "0.0.17" -source = "git+https://github.com/stellar/rs-soroban-env?rev=63cf7fe3d5ffc60db57fba97e9fc9c5778cd559c#63cf7fe3d5ffc60db57fba97e9fc9c5778cd559c" -dependencies = [ - "soroban-env-common 0.0.17 (git+https://github.com/stellar/rs-soroban-env?rev=63cf7fe3d5ffc60db57fba97e9fc9c5778cd559c)", - "static_assertions", -] - -[[package]] -name = "soroban-env-host" -version = "0.0.17" -source = "git+https://github.com/stellar/rs-soroban-env?rev=400d806387140553e4e685d232deb3a807ec0e36#400d806387140553e4e685d232deb3a807ec0e36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fbccdce4f74778cfe79e6ca8b6df2d094237d0bedf4aa167a73bfdaa7388fed" dependencies = [ - "backtrace", - "curve25519-dalek", - "ed25519-dalek", - "getrandom 0.2.10", - "hex", - "k256", - "log", - "num-derive", - "num-integer", - "num-traits", - "rand 0.7.3", - "rand_chacha 0.2.2", - "sha2 0.9.9", - "sha3", - "soroban-env-common 0.0.17 (git+https://github.com/stellar/rs-soroban-env?rev=400d806387140553e4e685d232deb3a807ec0e36)", - "soroban-native-sdk-macros 0.0.17 (git+https://github.com/stellar/rs-soroban-env?rev=400d806387140553e4e685d232deb3a807ec0e36)", - "soroban-wasmi 0.30.0-soroban (git+https://github.com/stellar/wasmi?rev=3dc639fde3bebf0bf364a9fa4ac2f0efb7ee9995)", + "soroban-env-common", "static_assertions", - "stellar-strkey 0.0.7 (git+https://github.com/stellar/rs-stellar-strkey?rev=e6ba45c60c16de28c7522586b80ed0150157df73)", ] [[package]] name = "soroban-env-host" version = "0.0.17" -source = "git+https://github.com/stellar/rs-soroban-env?rev=63cf7fe3d5ffc60db57fba97e9fc9c5778cd559c#63cf7fe3d5ffc60db57fba97e9fc9c5778cd559c" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35eef83232686c48fc8c8bfc560ee2e065bdd18ac31da8cb570e93f3fd78fea0" dependencies = [ "backtrace", "curve25519-dalek", @@ -2639,82 +2549,47 @@ dependencies = [ "rand_chacha 0.2.2", "sha2 0.9.9", "sha3", - "soroban-env-common 0.0.17 (git+https://github.com/stellar/rs-soroban-env?rev=63cf7fe3d5ffc60db57fba97e9fc9c5778cd559c)", - "soroban-native-sdk-macros 0.0.17 (git+https://github.com/stellar/rs-soroban-env?rev=63cf7fe3d5ffc60db57fba97e9fc9c5778cd559c)", - "soroban-wasmi 0.30.0-soroban (git+https://github.com/stellar/wasmi?rev=284c963ba080703061797e2a3cba0853edee0dd4)", + "soroban-env-common", + "soroban-native-sdk-macros", + "soroban-wasmi", "static_assertions", - "stellar-strkey 0.0.7 (git+https://github.com/stellar/rs-stellar-strkey?rev=e6ba45c60c16de28c7522586b80ed0150157df73)", -] - -[[package]] -name = "soroban-env-macros" -version = "0.0.17" -source = "git+https://github.com/stellar/rs-soroban-env?rev=400d806387140553e4e685d232deb3a807ec0e36#400d806387140553e4e685d232deb3a807ec0e36" -dependencies = [ - "itertools", - "proc-macro2", - "quote", - "serde", - "serde_json", - "stellar-xdr 0.0.17 (git+https://github.com/stellar/rs-stellar-xdr?rev=0f16673441898162c9996da6117be2280ef8fd84)", - "syn 2.0.16", - "thiserror", + "stellar-strkey", ] [[package]] name = "soroban-env-macros" version = "0.0.17" -source = "git+https://github.com/stellar/rs-soroban-env?rev=63cf7fe3d5ffc60db57fba97e9fc9c5778cd559c#63cf7fe3d5ffc60db57fba97e9fc9c5778cd559c" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97fcab4ca9be166587dd84939576634f2f7bccf213fe9f6aced9561ab4238be1" dependencies = [ "itertools", "proc-macro2", "quote", "serde", "serde_json", - "stellar-xdr 0.0.17 (git+https://github.com/stellar/rs-stellar-xdr?rev=4eaf2388c1de6fc295ed5f7df8174c199923df5b)", + "stellar-xdr", "syn 2.0.16", "thiserror", ] -[[package]] -name = "soroban-ledger-snapshot" -version = "0.9.1" -source = "git+https://github.com/stellar/rs-soroban-sdk?rev=e48a3c435a1c1e1055f03f8e507c63f62a927ef9#e48a3c435a1c1e1055f03f8e507c63f62a927ef9" -dependencies = [ - "serde", - "serde_json", - "soroban-env-common 0.0.17 (git+https://github.com/stellar/rs-soroban-env?rev=400d806387140553e4e685d232deb3a807ec0e36)", - "soroban-env-host 0.0.17 (git+https://github.com/stellar/rs-soroban-env?rev=400d806387140553e4e685d232deb3a807ec0e36)", - "thiserror", -] - [[package]] name = "soroban-ledger-snapshot" version = "0.9.2" -source = "git+https://github.com/stellar/rs-soroban-sdk?rev=b1cec10b79cee3c1ecf63079b1088ce97b32c68a#b1cec10b79cee3c1ecf63079b1088ce97b32c68a" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c379a73e5d14b0b9ba41157161c5362427a2ca75c936d1b737d41bca91ef252f" dependencies = [ "serde", "serde_json", - "soroban-env-common 0.0.17 (git+https://github.com/stellar/rs-soroban-env?rev=63cf7fe3d5ffc60db57fba97e9fc9c5778cd559c)", - "soroban-env-host 0.0.17 (git+https://github.com/stellar/rs-soroban-env?rev=63cf7fe3d5ffc60db57fba97e9fc9c5778cd559c)", + "soroban-env-common", + "soroban-env-host", "thiserror", ] [[package]] name = "soroban-native-sdk-macros" version = "0.0.17" -source = "git+https://github.com/stellar/rs-soroban-env?rev=400d806387140553e4e685d232deb3a807ec0e36#400d806387140553e4e685d232deb3a807ec0e36" -dependencies = [ - "itertools", - "proc-macro2", - "quote", - "syn 2.0.16", -] - -[[package]] -name = "soroban-native-sdk-macros" -version = "0.0.17" -source = "git+https://github.com/stellar/rs-soroban-env?rev=63cf7fe3d5ffc60db57fba97e9fc9c5778cd559c#63cf7fe3d5ffc60db57fba97e9fc9c5778cd559c" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d891b456b0f6897ccbb8b67388ed7ce921fd47d19ff3ae8d8b1edca08339639" dependencies = [ "itertools", "proc-macro2", @@ -2722,60 +2597,29 @@ dependencies = [ "syn 2.0.16", ] -[[package]] -name = "soroban-sdk" -version = "0.9.1" -source = "git+https://github.com/stellar/rs-soroban-sdk?rev=e48a3c435a1c1e1055f03f8e507c63f62a927ef9#e48a3c435a1c1e1055f03f8e507c63f62a927ef9" -dependencies = [ - "bytes-lit", - "rand 0.7.3", - "soroban-env-guest 0.0.17 (git+https://github.com/stellar/rs-soroban-env?rev=400d806387140553e4e685d232deb3a807ec0e36)", - "soroban-env-host 0.0.17 (git+https://github.com/stellar/rs-soroban-env?rev=400d806387140553e4e685d232deb3a807ec0e36)", - "soroban-ledger-snapshot 0.9.1", - "soroban-sdk-macros 0.9.1", - "stellar-strkey 0.0.7 (git+https://github.com/stellar/rs-stellar-strkey?rev=e6ba45c60c16de28c7522586b80ed0150157df73)", -] - [[package]] name = "soroban-sdk" version = "0.9.2" -source = "git+https://github.com/stellar/rs-soroban-sdk?rev=b1cec10b79cee3c1ecf63079b1088ce97b32c68a#b1cec10b79cee3c1ecf63079b1088ce97b32c68a" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1cf449f8c53d905ac41d4c264442f26aa559d4a0ef451569a7739bd4d747595" dependencies = [ "arbitrary", "bytes-lit", "ctor", "ed25519-dalek", "rand 0.7.3", - "soroban-env-guest 0.0.17 (git+https://github.com/stellar/rs-soroban-env?rev=63cf7fe3d5ffc60db57fba97e9fc9c5778cd559c)", - "soroban-env-host 0.0.17 (git+https://github.com/stellar/rs-soroban-env?rev=63cf7fe3d5ffc60db57fba97e9fc9c5778cd559c)", - "soroban-ledger-snapshot 0.9.2", - "soroban-sdk-macros 0.9.2", - "stellar-strkey 0.0.7 (git+https://github.com/stellar/rs-stellar-strkey?rev=e6ba45c60c16de28c7522586b80ed0150157df73)", -] - -[[package]] -name = "soroban-sdk-macros" -version = "0.9.1" -source = "git+https://github.com/stellar/rs-soroban-sdk?rev=e48a3c435a1c1e1055f03f8e507c63f62a927ef9#e48a3c435a1c1e1055f03f8e507c63f62a927ef9" -dependencies = [ - "crate-git-revision 0.0.6", - "darling", - "itertools", - "proc-macro2", - "quote", - "rustc_version", - "sha2 0.9.9", - "soroban-env-common 0.0.17 (git+https://github.com/stellar/rs-soroban-env?rev=400d806387140553e4e685d232deb3a807ec0e36)", - "soroban-spec 0.9.1", - "soroban-spec-rust 0.9.1", - "stellar-xdr 0.0.17 (git+https://github.com/stellar/rs-stellar-xdr?rev=0f16673441898162c9996da6117be2280ef8fd84)", - "syn 2.0.16", + "soroban-env-guest", + "soroban-env-host", + "soroban-ledger-snapshot", + "soroban-sdk-macros", + "stellar-strkey", ] [[package]] name = "soroban-sdk-macros" version = "0.9.2" -source = "git+https://github.com/stellar/rs-soroban-sdk?rev=b1cec10b79cee3c1ecf63079b1088ce97b32c68a#b1cec10b79cee3c1ecf63079b1088ce97b32c68a" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b7ab0a02c265c41a44311e3e6271e0fccd518bda0c8383c7ff8aee478541d3b" dependencies = [ "crate-git-revision 0.0.6", "darling", @@ -2784,31 +2628,21 @@ dependencies = [ "quote", "rustc_version", "sha2 0.9.9", - "soroban-env-common 0.0.17 (git+https://github.com/stellar/rs-soroban-env?rev=63cf7fe3d5ffc60db57fba97e9fc9c5778cd559c)", - "soroban-spec 0.9.2", - "soroban-spec-rust 0.9.2", - "stellar-xdr 0.0.17 (git+https://github.com/stellar/rs-stellar-xdr?rev=4eaf2388c1de6fc295ed5f7df8174c199923df5b)", + "soroban-env-common", + "soroban-spec", + "soroban-spec-rust", + "stellar-xdr", "syn 2.0.16", ] -[[package]] -name = "soroban-spec" -version = "0.9.1" -source = "git+https://github.com/stellar/rs-soroban-sdk?rev=e48a3c435a1c1e1055f03f8e507c63f62a927ef9#e48a3c435a1c1e1055f03f8e507c63f62a927ef9" -dependencies = [ - "base64 0.13.1", - "stellar-xdr 0.0.17 (git+https://github.com/stellar/rs-stellar-xdr?rev=0f16673441898162c9996da6117be2280ef8fd84)", - "thiserror", - "wasmparser 0.88.0", -] - [[package]] name = "soroban-spec" version = "0.9.2" -source = "git+https://github.com/stellar/rs-soroban-sdk?rev=b1cec10b79cee3c1ecf63079b1088ce97b32c68a#b1cec10b79cee3c1ecf63079b1088ce97b32c68a" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adfd732ef1613e5ec919410fddd842d8cb804effb63c43acbf5ec6d77e6d0633" dependencies = [ "base64 0.13.1", - "stellar-xdr 0.0.17 (git+https://github.com/stellar/rs-stellar-xdr?rev=4eaf2388c1de6fc295ed5f7df8174c199923df5b)", + "stellar-xdr", "thiserror", "wasmparser 0.88.0", ] @@ -2816,43 +2650,30 @@ dependencies = [ [[package]] name = "soroban-spec-json" version = "0.9.4" -source = "git+https://github.com/ahalabs/soroban-tools?rev=2966e7ac9cbcc9f408b80f4aa21c3b76ccf064c6#2966e7ac9cbcc9f408b80f4aa21c3b76ccf064c6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c30932660607a7d3905cde2b0a3f79c78bf6c52ac09ee60b03e1a8f52502bde" dependencies = [ "serde", "serde_derive", "serde_json", "sha2 0.9.9", - "soroban-spec 0.9.1", - "stellar-xdr 0.0.17 (git+https://github.com/stellar/rs-stellar-xdr?rev=0f16673441898162c9996da6117be2280ef8fd84)", - "thiserror", -] - -[[package]] -name = "soroban-spec-rust" -version = "0.9.1" -source = "git+https://github.com/stellar/rs-soroban-sdk?rev=e48a3c435a1c1e1055f03f8e507c63f62a927ef9#e48a3c435a1c1e1055f03f8e507c63f62a927ef9" -dependencies = [ - "prettyplease", - "proc-macro2", - "quote", - "sha2 0.9.9", - "soroban-spec 0.9.1", - "stellar-xdr 0.0.17 (git+https://github.com/stellar/rs-stellar-xdr?rev=0f16673441898162c9996da6117be2280ef8fd84)", - "syn 2.0.16", + "soroban-spec", + "stellar-xdr", "thiserror", ] [[package]] name = "soroban-spec-rust" version = "0.9.2" -source = "git+https://github.com/stellar/rs-soroban-sdk?rev=b1cec10b79cee3c1ecf63079b1088ce97b32c68a#b1cec10b79cee3c1ecf63079b1088ce97b32c68a" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fde0592863f1f34c1eff8bdbe35a6557adb6abadfc57804217fe035bec7421ef" dependencies = [ "prettyplease", "proc-macro2", "quote", "sha2 0.9.9", - "soroban-spec 0.9.2", - "stellar-xdr 0.0.17 (git+https://github.com/stellar/rs-stellar-xdr?rev=4eaf2388c1de6fc295ed5f7df8174c199923df5b)", + "soroban-spec", + "stellar-xdr", "syn 2.0.16", "thiserror", ] @@ -2860,16 +2681,17 @@ dependencies = [ [[package]] name = "soroban-spec-tools" version = "0.9.4" -source = "git+https://github.com/ahalabs/soroban-tools?rev=2966e7ac9cbcc9f408b80f4aa21c3b76ccf064c6#2966e7ac9cbcc9f408b80f4aa21c3b76ccf064c6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b06822e221959b6e56e2c8651f8d280c8737c7b34bf70e09548b71ed1a98f65" dependencies = [ "base64 0.13.1", "ethnum", "hex", "itertools", "serde_json", - "soroban-spec 0.9.1", - "stellar-strkey 0.0.7 (registry+https://github.com/rust-lang/crates.io-index)", - "stellar-xdr 0.0.17 (git+https://github.com/stellar/rs-stellar-xdr?rev=0f16673441898162c9996da6117be2280ef8fd84)", + "soroban-spec", + "stellar-strkey", + "stellar-xdr", "thiserror", "wasmparser 0.90.0", ] @@ -2877,7 +2699,8 @@ dependencies = [ [[package]] name = "soroban-spec-typescript" version = "0.9.4" -source = "git+https://github.com/ahalabs/soroban-tools?rev=2966e7ac9cbcc9f408b80f4aa21c3b76ccf064c6#2966e7ac9cbcc9f408b80f4aa21c3b76ccf064c6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6957544d8d94c8b0a3ee06fc0cdbb011084fc37735be44952f2e39e4b23c62ee" dependencies = [ "base64 0.13.1", "heck", @@ -2888,33 +2711,22 @@ dependencies = [ "serde_derive", "serde_json", "sha2 0.9.9", - "soroban-spec 0.9.1", - "stellar-xdr 0.0.17 (git+https://github.com/stellar/rs-stellar-xdr?rev=0f16673441898162c9996da6117be2280ef8fd84)", + "soroban-spec", + "stellar-xdr", "thiserror", ] [[package]] name = "soroban-wasmi" version = "0.30.0-soroban" -source = "git+https://github.com/stellar/wasmi?rev=284c963ba080703061797e2a3cba0853edee0dd4#284c963ba080703061797e2a3cba0853edee0dd4" -dependencies = [ - "smallvec", - "spin 0.9.8", - "wasmi_arena 0.4.0 (git+https://github.com/stellar/wasmi?rev=284c963ba080703061797e2a3cba0853edee0dd4)", - "wasmi_core 0.12.0 (git+https://github.com/stellar/wasmi?rev=284c963ba080703061797e2a3cba0853edee0dd4)", - "wasmparser-nostd", -] - -[[package]] -name = "soroban-wasmi" -version = "0.30.0-soroban" -source = "git+https://github.com/stellar/wasmi?rev=3dc639fde3bebf0bf364a9fa4ac2f0efb7ee9995#3dc639fde3bebf0bf364a9fa4ac2f0efb7ee9995" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c193640a103c4fc81163feca877bbea234dc20150015428ecc4e010f025f82bf" dependencies = [ "intx", "smallvec", "spin 0.9.8", - "wasmi_arena 0.4.0 (git+https://github.com/stellar/wasmi?rev=3dc639fde3bebf0bf364a9fa4ac2f0efb7ee9995)", - "wasmi_core 0.12.0 (git+https://github.com/stellar/wasmi?rev=3dc639fde3bebf0bf364a9fa4ac2f0efb7ee9995)", + "wasmi_arena", + "wasmi_core", "wasmparser-nostd", ] @@ -2956,31 +2768,11 @@ dependencies = [ "thiserror", ] -[[package]] -name = "stellar-strkey" -version = "0.0.7" -source = "git+https://github.com/stellar/rs-stellar-strkey?rev=e6ba45c60c16de28c7522586b80ed0150157df73#e6ba45c60c16de28c7522586b80ed0150157df73" -dependencies = [ - "base32", - "thiserror", -] - -[[package]] -name = "stellar-xdr" -version = "0.0.17" -source = "git+https://github.com/stellar/rs-stellar-xdr?rev=0f16673441898162c9996da6117be2280ef8fd84#0f16673441898162c9996da6117be2280ef8fd84" -dependencies = [ - "base64 0.13.1", - "crate-git-revision 0.0.6", - "hex", - "serde", - "serde_with", -] - [[package]] name = "stellar-xdr" version = "0.0.17" -source = "git+https://github.com/stellar/rs-stellar-xdr?rev=4eaf2388c1de6fc295ed5f7df8174c199923df5b#4eaf2388c1de6fc295ed5f7df8174c199923df5b" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae197b4edde8835ab0ba018f1b5cdab0c47d0f28848f3f75d2951a1c9c7cdb48" dependencies = [ "arbitrary", "base64 0.13.1", @@ -3524,28 +3316,14 @@ checksum = "ed9d5b4305409d1fc9482fee2d7f9bcbf24b3972bf59817ef757e23982242a93" [[package]] name = "wasmi_arena" version = "0.4.0" -source = "git+https://github.com/stellar/wasmi?rev=284c963ba080703061797e2a3cba0853edee0dd4#284c963ba080703061797e2a3cba0853edee0dd4" - -[[package]] -name = "wasmi_arena" -version = "0.4.0" -source = "git+https://github.com/stellar/wasmi?rev=3dc639fde3bebf0bf364a9fa4ac2f0efb7ee9995#3dc639fde3bebf0bf364a9fa4ac2f0efb7ee9995" - -[[package]] -name = "wasmi_core" -version = "0.12.0" -source = "git+https://github.com/stellar/wasmi?rev=284c963ba080703061797e2a3cba0853edee0dd4#284c963ba080703061797e2a3cba0853edee0dd4" -dependencies = [ - "downcast-rs", - "libm", - "num-traits", - "paste", -] +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "401c1f35e413fac1846d4843745589d9ec678977ab35a384db8ae7830525d468" [[package]] name = "wasmi_core" version = "0.12.0" -source = "git+https://github.com/stellar/wasmi?rev=3dc639fde3bebf0bf364a9fa4ac2f0efb7ee9995#3dc639fde3bebf0bf364a9fa4ac2f0efb7ee9995" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "624e6333e861ef49095d2d678b76ebf30b06bf37effca845be7e5b87c90071b7" dependencies = [ "downcast-rs", "libm", diff --git a/Cargo.toml b/Cargo.toml index 6282134..4cd5cb8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -18,9 +18,6 @@ exclude = [ "examples/cross_contract/*", ] -[workspace.package] -version = "0.1.0" - [profile.release-with-logs] inherits = "release" debug-assertions = true @@ -43,11 +40,11 @@ lto = true [workspace.dependencies] smartdeploy-sdk = { path = "./crates/smartdeploy-sdk" } -smartdeploy-macros = { path = "./crates/smartdeploy-macros", version = "0.1.0" } +smartdeploy-macros = { path = "./crates/smartdeploy-macros" } # loam-sdk = { path = "../../loam/crates/loam-sdk" } # loam-sdk-core-riff = { path = "../../loam/crates/loam-core" } -loam-sdk = { git = "https://github.com/loambuild/loam-sdk", tag = "v0.6.1" } -loam-sdk-core-riff = { git = "https://github.com/loambuild/loam-sdk", tag = "v0.6.1" } +loam-sdk = "0.6.4" +loam-sdk-core-riff = "0.6.4" clap = { version = "4.1.8", features = [ "derive", diff --git a/contract_id.txt b/contract_id.txt index 216cefe..0052d76 100644 --- a/contract_id.txt +++ b/contract_id.txt @@ -1 +1 @@ -CAGPGI7FUDIFXMHJD3DQLYG635TH3GKIBEB5KBLIARGQSN6D2IUTLCEY \ No newline at end of file +CCN3XEQTTYTM3UKOGOTCYSO4647XE3KJHEUSWTMXLFQ5KALGDWX6CBS2 \ No newline at end of file diff --git a/contracts/core/Cargo.toml b/contracts/core/Cargo.toml index 33ac7ae..9d2a1ca 100644 --- a/contracts/core/Cargo.toml +++ b/contracts/core/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "core-riff" description = "Smallest Redeployable Contract" -version = "0.0.0" +version = "0.1.0" authors = ["Stellar Development Foundation "] license = "Apache-2.0" edition = "2021" @@ -13,8 +13,7 @@ doctest = false [dependencies] loam-sdk = { workspace = true, features = ["loam-soroban-sdk"] } -loam-sdk-core-riff = { workspace = true } -smartdeploy-sdk = { workspace = true } +smartdeploy-sdk = { path = "../../crates/smartdeploy-sdk", version = "0.1.0" } [dev_dependencies] diff --git a/contracts/dev-core/Cargo.toml b/contracts/dev-core/Cargo.toml index fbaf780..97471c3 100644 --- a/contracts/dev-core/Cargo.toml +++ b/contracts/dev-core/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "dev-core-riff" description = "Smallest Redeployable Contract" -version = "0.0.0" +version = "0.1.0" authors = ["Stellar Development Foundation "] license = "Apache-2.0" edition = "2021" @@ -13,8 +13,7 @@ doctest = false [dependencies] loam-sdk = { workspace = true, features = ["loam-soroban-sdk"] } -loam-sdk-core-riff = { workspace = true } -smartdeploy-sdk = { workspace = true } +smartdeploy-sdk = { path = "../../crates/smartdeploy-sdk", version = "0.1.0" } [dev_dependencies] @@ -22,3 +21,7 @@ loam-sdk = { workspace = true, features = ["soroban-sdk-testutils"] } [package.metadata.loam] contract = true + +[features] +default = [] +core_riff = [] \ No newline at end of file diff --git a/contracts/dev-core/src/lib.rs b/contracts/dev-core/src/lib.rs index 1855f64..ff98618 100644 --- a/contracts/dev-core/src/lib.rs +++ b/contracts/dev-core/src/lib.rs @@ -1,4 +1,6 @@ #![no_std] use loam_sdk::soroban_sdk; + smartdeploy_sdk::dev_deploy!(); +#[cfg(feature = "core_riff")] smartdeploy_sdk::core_riff!(); diff --git a/contracts/smartdeploy/Cargo.toml b/contracts/smartdeploy/Cargo.toml index 5477a58..fee6b96 100644 --- a/contracts/smartdeploy/Cargo.toml +++ b/contracts/smartdeploy/Cargo.toml @@ -2,7 +2,7 @@ name = "smartdeploy" description = "A crate for managing and deploying smart contracts on the Soroban blockchain." documentation = "https://docs.rs/smartdeploy" -version = "0.0.0" +version = "0.1.0" authors = ["Stellar Development Foundation "] license = "Apache-2.0" rust-version = "1.69" @@ -15,7 +15,7 @@ doctest = false [dependencies] loam-sdk = { workspace = true } loam-sdk-core-riff = { workspace = true } -core-riff = { path = "../core" } +core-riff = { path = "../core", version = "0.1.0" } [dev_dependencies] loam-sdk = { workspace = true, features = ["soroban-sdk-testutils"] } diff --git a/contracts/smartdeploy/src/lib.rs b/contracts/smartdeploy/src/lib.rs index 6b54d7d..a44675d 100644 --- a/contracts/smartdeploy/src/lib.rs +++ b/contracts/smartdeploy/src/lib.rs @@ -32,7 +32,7 @@ impl CoreRiff for Contract { type Impl = Owner; } -soroban_contract!(WasmRegistry impl Publishable, Deployable = ContractRegistry, CoreRiff = Owner); +soroban_contract!(); #[cfg(test)] mod test; diff --git a/crates/smartdeploy-cli/Cargo.toml b/crates/smartdeploy-cli/Cargo.toml index 05c06fb..3ba8a0e 100644 --- a/crates/smartdeploy-cli/Cargo.toml +++ b/crates/smartdeploy-cli/Cargo.toml @@ -4,7 +4,7 @@ description = "Smartdeploy CLI" authors = ["Willem Wyndham "] license = "Apache-2.0" readme = "README.md" -version = "0.0.1" +version = "0.1.0" edition = "2021" rust-version = "1.70" autobins = false @@ -25,7 +25,7 @@ path = "src/lib.rs" doctest = false [dependencies] -soroban-cli = { git = "https://github.com/ahalabs/soroban-tools", rev = "2966e7ac9cbcc9f408b80f4aa21c3b76ccf064c6"} +soroban-cli = { package = "loam-soroban-cli", version = "0.9.5" } clap = { version = "4.1.8", features = [ "derive", "env", @@ -33,27 +33,8 @@ clap = { version = "4.1.8", features = [ "string", ] } -clap-cargo-extra = "0.3.0" - thiserror = "1.0.31" -serde = "1.0.82" -serde_derive = "1.0.82" -serde_json = "1.0.82" -serde-aux = "4.1.2" tokio = { version = "1", features = ["full"] } -termcolor = "1.1.3" -termcolor_output = "1.0.1" -clap_complete = "4.1.4" -rand = "0.8.5" -sha2 = "0.10.6" -csv = "1.1.6" -dirs = "4.0.0" -toml = "0.5.9" -itertools = "0.10.5" -strsim = "0.10.0" -heck = "0.4.1" -cargo_metadata = "0.15.4" -pathdiff = "0.2.1" shlex = "1.1.0" [dev-dependencies] diff --git a/crates/smartdeploy-cli/src/bin/main.rs b/crates/smartdeploy-cli/src/bin/main.rs index 84a258d..e9b0571 100644 --- a/crates/smartdeploy-cli/src/bin/main.rs +++ b/crates/smartdeploy-cli/src/bin/main.rs @@ -2,9 +2,12 @@ use clap::{CommandFactory, Parser}; use smartdeploy_cli::Root; +const CONTRACT_ID: &str = include_str!("../../../../.soroban/network/futurenet/smartdeploy.json"); + #[tokio::main] async fn main() { - std::env::set_var("SOROBAN_CONTRACT_ID", "CBEBBQOYOWPVAOZ3BAIVVHPRLJSOB5OICXC7HNKTJNMLTPAWILQHR6SM"); + let contract_id = CONTRACT_ID.trim_end().trim_matches('"'); + std::env::set_var("SOROBAN_CONTRACT_ID", contract_id); std::env::set_var("SOROBAN_NETWORK", "futurenet"); let mut root = Root::try_parse().unwrap_or_else(|e| { let mut cmd = Root::command(); diff --git a/crates/smartdeploy-macros/Cargo.toml b/crates/smartdeploy-macros/Cargo.toml index 5ca62fd..43b45d3 100644 --- a/crates/smartdeploy-macros/Cargo.toml +++ b/crates/smartdeploy-macros/Cargo.toml @@ -3,7 +3,7 @@ name = "smartdeploy-macros" description = "Smartdeploy macros" readme = "../../README.md" license = "Apache-2.0" -version.workspace = true +version = "0.1.0" edition = "2021" rust-version = "1.69" @@ -12,7 +12,4 @@ proc-macro = true doctest = false [dependencies] - -syn = {version="2.0",features=["full"]} quote = "1.0" -proc-macro2 = "1.0" diff --git a/crates/smartdeploy-macros/src/lib.rs b/crates/smartdeploy-macros/src/lib.rs index f84fa6d..0261333 100644 --- a/crates/smartdeploy-macros/src/lib.rs +++ b/crates/smartdeploy-macros/src/lib.rs @@ -45,7 +45,7 @@ pub struct DevDeploy__; #[soroban_sdk::contractimpl] impl DevDeploy__ { - /// Redeploy the contract to the given wasm bytes + /// Redeploy the contract with the given wasm bytes pub fn dev_deploy(env: soroban_sdk::Env, wasm: loam_sdk::soroban_sdk::Bytes) { let wasm_hash = env.deployer().upload_contract_wasm(wasm); env.deployer().update_current_contract_wasm(wasm_hash); diff --git a/crates/smartdeploy-sdk/Cargo.toml b/crates/smartdeploy-sdk/Cargo.toml index da2e5ae..0617720 100644 --- a/crates/smartdeploy-sdk/Cargo.toml +++ b/crates/smartdeploy-sdk/Cargo.toml @@ -1,7 +1,8 @@ [package] name = "smartdeploy-sdk" +description = "SmartDeploy SDK helps ensure soroban contracts can be redeployed" edition = "2021" -version.workspace = true +version = "0.1.0" [lib] crate-type = ["rlib"] @@ -9,4 +10,4 @@ crate-type = ["rlib"] # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -smartdeploy-macros = { workspace = true } \ No newline at end of file +smartdeploy-macros = { path = "../smartdeploy-macros", version = "0.1.0" } \ No newline at end of file diff --git a/deploy.sh b/deploy.sh index 50334f3..cfd1aae 100755 --- a/deploy.sh +++ b/deploy.sh @@ -54,3 +54,6 @@ if test "$FILE_HASH" = ""; then just claim_self fi +if test "$SOROBAN_NETWORK" = "futurenet"; then +just smartdeploy_id > .soroban/network/$SOROBAN_NETWORK/smartdeploy.json +fi \ No newline at end of file diff --git a/justfile b/justfile index 4f8187e..9f1992c 100644 --- a/justfile +++ b/justfile @@ -56,8 +56,10 @@ setup_default: @setup: echo {{ if path_exists(soroban) == "true" { "" } else { `cargo install_soroban_dev` } }} echo {{ if path_exists(loam) == "true" { "" } else { `cargo install_loam` } }} + @just fund_default + +@fund_default: echo {{ if path_exists(env_var('CONFIG_DIR') / 'identity/default.toml') == "true" { "" } else { `just setup_default` } }} - @deploy_self: build @./deploy.sh @@ -72,7 +74,7 @@ setup_default: chmod +x {{ FILE }} -publish_all: deploy_self +publish_all: fund_default deploy_self #!/usr/bin/env bash just install_self; for name in $(loam build --ls) @@ -137,3 +139,5 @@ start_docker: --standalone \ --enable-soroban-rpc \ +smartdeploy_id: + just smartdeploy fetch_contract_id --deployed_name smartdeploy | jq . \ No newline at end of file