diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 0a43512..af63b06 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -32,7 +32,7 @@ jobs: - name: Check format run: cargo fmt --all -- --check - - name: Make dummpy poc-guest-%.polkavm files + - name: Make dummy poc-guest-%.polkavm files run: make dummy-poc-guests - name: Cargo clippy @@ -62,12 +62,6 @@ jobs: workspaces: poc/guests -> poc/guests/target cache-all-crates: true - - name: Install toolchain targeting RV32E - run: | - curl -sL https://github.com/paritytech/rustc-rv32e-toolchain/releases/download/v1.1.0/rust-rve-nightly-2024-01-05-x86_64-unknown-linux-gnu.tar.zst -o rv32e.tar.zst - tar --zstd -xf rv32e.tar.zst - mv rve-nightly ~/.rustup/toolchains/ - - name: Cargo clippy run: cd poc/guests; cargo clippy -- -D warnings diff --git a/.gitignore b/.gitignore index 5e6458c..f9978ca 100644 --- a/.gitignore +++ b/.gitignore @@ -16,4 +16,6 @@ target/ # MacOS related .DS_Store +# VSCode related +.vscode/ output/ diff --git a/.gitmodules b/.gitmodules index a64e1ce..402436a 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,8 +1,8 @@ [submodule "vendor/polkavm"] path = vendor/polkavm - url = https://github.com/acalanetwork/polkavm + url = https://github.com/paritytech/polkavm [submodule "vendor/polkadot-sdk"] path = vendor/polkadot-sdk url = https://github.com/indirection42/polkadot-sdk - branch = xcq-with-xcm-poc + branch = pvq-with-xcm-poc diff --git a/Cargo.lock b/Cargo.lock index 58badca..bef0e21 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2918,14 +2918,14 @@ dependencies = [ "pallet-transaction-payment-rpc-runtime-api", "parity-scale-codec", "polkadot-sdk-frame", + "pvq-executor", + "pvq-extension", + "pvq-extension-core", + "pvq-extension-fungibles", + "pvq-primitives", "scale-info", "sp-genesis-builder", "substrate-wasm-builder", - "xcq-executor", - "xcq-extension", - "xcq-extension-core", - "xcq-extension-fungibles", - "xcq-primitives", ] [[package]] @@ -2960,18 +2960,18 @@ dependencies = [ [[package]] name = "polkavm" -version = "0.12.0" +version = "0.21.0" dependencies = [ "libc", "log", "polkavm-assembler", - "polkavm-common 0.12.0", + "polkavm-common 0.21.0", "polkavm-linux-raw", ] [[package]] name = "polkavm-assembler" -version = "0.12.0" +version = "0.21.0" dependencies = [ "log", ] @@ -2984,18 +2984,18 @@ checksum = "1d9428a5cfcc85c5d7b9fc4b6a18c4b802d0173d768182a51cc7751640f08b92" [[package]] name = "polkavm-common" -version = "0.12.0" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31ff33982a807d8567645d4784b9b5d7ab87bcb494f534a57cadd9012688e102" + +[[package]] +name = "polkavm-common" +version = "0.21.0" dependencies = [ "log", "polkavm-assembler", ] -[[package]] -name = "polkavm-common" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31ff33982a807d8567645d4784b9b5d7ab87bcb494f534a57cadd9012688e102" - [[package]] name = "polkavm-derive" version = "0.9.1" @@ -3075,7 +3075,7 @@ dependencies = [ [[package]] name = "polkavm-linux-raw" -version = "0.12.0" +version = "0.21.0" [[package]] name = "powerfmt" @@ -3179,6 +3179,113 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "pvq-api" +version = "0.1.0" +dependencies = [ + "pvq-api-procedural", +] + +[[package]] +name = "pvq-api-procedural" +version = "0.1.0" +dependencies = [ + "Inflector", + "parity-scale-codec", + "proc-macro-crate", + "proc-macro2", + "quote", + "scale-info", + "syn 2.0.96", +] + +[[package]] +name = "pvq-executor" +version = "0.1.0" +dependencies = [ + "polkavm", + "pvq-api", + "pvq-primitives", + "tracing", +] + +[[package]] +name = "pvq-extension" +version = "0.1.0" +dependencies = [ + "fortuples", + "parity-scale-codec", + "polkavm", + "pvq-executor", + "pvq-extension-procedural", + "pvq-primitives", + "scale-info", + "tracing", +] + +[[package]] +name = "pvq-extension-core" +version = "0.1.0" +dependencies = [ + "parity-scale-codec", + "pvq-extension", + "scale-info", +] + +[[package]] +name = "pvq-extension-fungibles" +version = "0.1.0" +dependencies = [ + "parity-scale-codec", + "pvq-extension", + "scale-info", +] + +[[package]] +name = "pvq-extension-procedural" +version = "0.1.0" +dependencies = [ + "Inflector", + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 2.0.96", + "twox-hash", +] + +[[package]] +name = "pvq-primitives" +version = "0.1.0" +dependencies = [ + "parity-scale-codec", + "scale-info", +] + +[[package]] +name = "pvq-runtime-api" +version = "0.1.0" +dependencies = [ + "pvq-primitives", + "sp-api 26.0.0", +] + +[[package]] +name = "pvq-test-runner" +version = "0.1.0" +dependencies = [ + "clap", + "parity-scale-codec", + "polkavm", + "pvq-executor", + "pvq-extension", + "pvq-extension-core", + "pvq-extension-fungibles", + "pvq-primitives", + "scale-info", + "tracing", + "tracing-subscriber 0.3.18", +] + [[package]] name = "quote" version = "1.0.38" @@ -5626,113 +5733,6 @@ dependencies = [ "tap", ] -[[package]] -name = "xcq-api" -version = "0.1.0" -dependencies = [ - "xcq-api-procedural", -] - -[[package]] -name = "xcq-api-procedural" -version = "0.1.0" -dependencies = [ - "Inflector", - "parity-scale-codec", - "proc-macro-crate", - "proc-macro2", - "quote", - "scale-info", - "syn 2.0.96", -] - -[[package]] -name = "xcq-executor" -version = "0.1.0" -dependencies = [ - "polkavm", - "tracing", - "xcq-api", - "xcq-primitives", -] - -[[package]] -name = "xcq-extension" -version = "0.1.0" -dependencies = [ - "fortuples", - "parity-scale-codec", - "polkavm", - "scale-info", - "tracing", - "xcq-executor", - "xcq-extension-procedural", - "xcq-primitives", -] - -[[package]] -name = "xcq-extension-core" -version = "0.1.0" -dependencies = [ - "parity-scale-codec", - "scale-info", - "xcq-extension", -] - -[[package]] -name = "xcq-extension-fungibles" -version = "0.1.0" -dependencies = [ - "parity-scale-codec", - "scale-info", - "xcq-extension", -] - -[[package]] -name = "xcq-extension-procedural" -version = "0.1.0" -dependencies = [ - "Inflector", - "proc-macro-crate", - "proc-macro2", - "quote", - "syn 2.0.96", - "twox-hash", -] - -[[package]] -name = "xcq-primitives" -version = "0.1.0" -dependencies = [ - "parity-scale-codec", - "scale-info", -] - -[[package]] -name = "xcq-runtime-api" -version = "0.1.0" -dependencies = [ - "sp-api 26.0.0", - "xcq-primitives", -] - -[[package]] -name = "xcq-test-runner" -version = "0.1.0" -dependencies = [ - "clap", - "parity-scale-codec", - "polkavm", - "scale-info", - "tracing", - "tracing-subscriber 0.3.18", - "xcq-executor", - "xcq-extension", - "xcq-extension-core", - "xcq-extension-fungibles", - "xcq-primitives", -] - [[package]] name = "zerocopy" version = "0.7.34" diff --git a/Cargo.toml b/Cargo.toml index d6d6aa6..7bab53b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,7 +1,7 @@ [workspace.package] authors = ["Acala Developers "] edition = "2021" -repository = "https://github.com/open-web3-stack/XCQ" +repository = "https://github.com/open-web3-stack/PVQ" license = "Apache-2.0" version = "0.1.0" @@ -10,14 +10,14 @@ resolver = "2" members = [ "poc/runtime", - "xcq-api", - "xcq-executor", - "xcq-extension-core", - "xcq-extension-fungibles", - "xcq-extension", - "xcq-primitives", - "xcq-runtime-api", - "xcq-test-runner", + "pvq-api", + "pvq-executor", + "pvq-extension-core", + "pvq-extension-fungibles", + "pvq-extension", + "pvq-primitives", + "pvq-runtime-api", + "pvq-test-runner", "examples/example-fungibles", "examples/example-helloworld", @@ -31,14 +31,14 @@ opt-level = 3 [workspace.dependencies] # local -xcq-api = { path = "xcq-api", default-features = false } -xcq-executor = { path = "xcq-executor", default-features = false } -xcq-extension-core = { path = "xcq-extension-core", default-features = false } -xcq-extension-fungibles = { path = "xcq-extension-fungibles", default-features = false } -xcq-extension = { path = "xcq-extension", default-features = false } -xcq-primitives = { path = "xcq-primitives", default-features = false } -xcq-runtime-api = { path = "xcq-runtime-api", default-features = false } -xcq-test-runner = { path = "xcq-test-runner", default-features = false } +pvq-api = { path = "pvq-api", default-features = false } +pvq-executor = { path = "pvq-executor", default-features = false } +pvq-extension-core = { path = "pvq-extension-core", default-features = false } +pvq-extension-fungibles = { path = "pvq-extension-fungibles", default-features = false } +pvq-extension = { path = "pvq-extension", default-features = false } +pvq-primitives = { path = "pvq-primitives", default-features = false } +pvq-runtime-api = { path = "pvq-runtime-api", default-features = false } +pvq-test-runner = { path = "pvq-test-runner", default-features = false } # polkavm polkavm = { path = "vendor/polkavm/crates/polkavm", default-features = false } diff --git a/Makefile b/Makefile index 22f3369..49a1951 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,3 @@ -GUEST_RUST_FLAGS="-C relocation-model=pie -C link-arg=--emit-relocs -C link-arg=--unique --remap-path-prefix=$(pwd)= --remap-path-prefix=$HOME=~" - run: chainspec bunx @acala-network/chopsticks@latest --config poc/runtime/chopsticks.yml --genesis output/chainspec.json @@ -8,9 +6,9 @@ poc-guests: poc-guest-sum-balance poc-guest-sum-balance-percent poc-guest-total- dummy-poc-guests: dummy-poc-guest-sum-balance dummy-poc-guest-sum-balance-percent dummy-poc-guest-total-supply dummy-poc-guest-transparent-call poc-guest-%: - cd poc/guests; RUSTFLAGS=$(GUEST_RUST_FLAGS) cargo build -q --release --bin poc-guest-$* -p poc-guest-$* + cd poc/guests; RUSTFLAGS="-D warnings" cargo build -q --release -Z build-std=core,alloc --target "../../vendor/polkavm/crates/polkavm-linker/riscv32emac-unknown-none-polkavm.json" --bin poc-guest-$* -p poc-guest-$* mkdir -p output - polkatool link --run-only-if-newer -s poc/guests/target/riscv32ema-unknown-none-elf/release/poc-guest-$* -o output/poc-guest-$*.polkavm + polkatool link --run-only-if-newer -s poc/guests/target/riscv32emac-unknown-none-polkavm/release/poc-guest-$* -o output/poc-guest-$*.polkavm dummy-poc-guest-%: mkdir -p output @@ -28,7 +26,7 @@ fmt: cargo fmt --all check-wasm: - cargo check --no-default-features --target=wasm32-unknown-unknown -p xcq-api -p xcq-executor -p xcq-extension-core -p xcq-extension-fungibles -p xcq-extension -p xcq-primitives -p xcq-runtime-api + cargo check --no-default-features --target=wasm32-unknown-unknown -p pvq-api -p pvq-executor -p pvq-extension-core -p pvq-extension-fungibles -p pvq-extension -p pvq-primitives -p pvq-runtime-api SKIP_WASM_BUILD= cargo check --no-default-features --target=wasm32-unknown-unknown -p poc-runtime check: check-wasm @@ -37,7 +35,7 @@ check: check-wasm clippy: SKIP_WASM_BUILD= cargo clippy -- -D warnings - cd poc/guests; cargo clippy + cd poc/guests; RUSTFLAGS="-D warnings" cargo clippy -Z build-std=core,alloc --target "../../vendor/polkavm/crates/polkavm-linker/riscv32emac-unknown-none-polkavm.json" --all test: SKIP_WASM_BUILD= cargo test diff --git a/README.md b/README.md index b4a9721..21f7d1f 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# XCQ +# PVQ Cross-Consensus Query Language for Polkadot @@ -6,11 +6,11 @@ Cross-Consensus Query Language for Polkadot ### Prerequisites -- Pull vendored PolkaVM repo: `git submodule update --init --recursive` -- Install [Rust toolchain targeting RISC-V RV32E](https://github.com/paritytech/rustc-rv32e-toolchain) -- Install [bun](https://bun.sh) (or npm or yarn) to use [Chopsticks](https://github.com/AcalaNetwork/chopsticks) to run the chain -- Install [jq](https://stedolan.github.io/jq/) -- Install polkatool[^1] (for relinking the standard RV32E ELF to a PolkaVM blob) and chain-spec-builder[^2](for building chainspec from a wasm): `make tools` +- Pull vendored PolkaVM repo: `git submodule update --init --recursive` +- Install [Rust toolchain targeting RISC-V RV32E](https://github.com/paritytech/rustc-rv32e-toolchain) +- Install [bun](https://bun.sh) (or npm or yarn) to use [Chopsticks](https://github.com/AcalaNetwork/chopsticks) to run the chain +- Install [jq](https://stedolan.github.io/jq/) +- Install polkatool[^1] (for relinking the standard RV32E ELF to a PolkaVM blob) and chain-spec-builder[^2](for building chainspec from a wasm): `make tools` ### Run E2E PoC @@ -18,8 +18,8 @@ This End-to-End PoC is to query some accounts' balances (the number of accounts 1. Build PoC guest program[^1]: `make poc-guest-query-balance` 2. Run the PoC runtime: `make run` -3. Call runtime api `XcqApi_execute_query` with [encoded guest program and account_ids](https://github.com/open-web3-stack/XCQ/blob/0fb3a86f9de0c9853681d625680d7479d2d944e0/poc/runtime/src/xcq.rs#L64-L79) via [Polkadot/Substrate Portal](https://polkadot.js.org/apps) -4. [Check the result](https://github.com/open-web3-stack/XCQ/blob/0fb3a86f9de0c9853681d625680d7479d2d944e0/poc/runtime/src/xcq.rs#L80-L89) +3. Call runtime api `PvqApi_execute_query` with [encoded guest program and account_ids](https://github.com/open-web3-stack/PVQ/blob/0fb3a86f9de0c9853681d625680d7479d2d944e0/poc/runtime/src/pvq.rs#L64-L79) via [Polkadot/Substrate Portal](https://polkadot.js.org/apps) +4. [Check the result](https://github.com/open-web3-stack/PVQ/blob/0fb3a86f9de0c9853681d625680d7479d2d944e0/poc/runtime/src/pvq.rs#L80-L89) ## Explanations @@ -35,9 +35,9 @@ Due to the limit of ABI, the signature of the those functions are limited to som In general, we can pass bytes between host and guest via guest's stack or heap. [^4][^5] The stack size of a guest program is 64KB, and the heap size is less than 4GB. -- If we need some space on the stack, it's easy for guest to define local variables on stack, and then pass pointer to host to have the host write data to it. However, it's not trivial to let host write data directly on the guest's stack without the guest's "guidance" because data written to an improper address might be overwritten later. +- If we need some space on the stack, it's easy for guest to define local variables on stack, and then pass pointer to host to have the host write data to it. However, it's not trivial to let host write data directly on the guest's stack without the guest's "guidance" because data written to an improper address might be overwritten later. -- If we need some space on the heap, Polkavm provides a dynamic allocation function both in host and guest through [`polkavm::Instance::sbrk`](https://docs.rs/polkavm/latest/polkavm/struct.Instance.html#method.sbrk) and [`polkavm_derive::sbrk`](https://docs.rs/polkavm-derive/latest/polkavm_derive/fn.sbrk.html) respectively. +- If we need some space on the heap, Polkavm provides a dynamic allocation function both in host and guest through [`polkavm::Instance::sbrk`](https://docs.rs/polkavm/latest/polkavm/struct.Instance.html#method.sbrk) and [`polkavm_derive::sbrk`](https://docs.rs/polkavm-derive/latest/polkavm_derive/fn.sbrk.html) respectively. According to the PolkaVM's doc[^6], memory allocated through `sbrk` can only be freed once the program finishes execution and its whole memory is cleared. @@ -45,14 +45,14 @@ In general, we can pass bytes between host and guest via guest's stack or heap. Specific Usages in Details: -- Pass arguements (at the entrypoint of the host function): +- Pass arguements (at the entrypoint of the host function): Currently we only support passing argumensts via heap memory. Before calling guest function, host calls `sbrk` and [`polkavm::Instance::write_memory`](https://docs.rs/polkavm/latest/polkavm/struct.Instance.html#method.write_memory) to allocate and write memory, then pass ptr as argument to guest via [`polkavm::Instance::call_typed`](https://docs.rs/polkavm/latest/polkavm/struct.Instance.html#method.call_typed). -- Return value from guest to host (at the end of the host function): +- Return value from guest to host (at the end of the host function): In this case, We recommend put the data on heap since put it on stack seems an UB (we are not sure yet). The guest will `sbrk` the proper space for placing the return value, and write to it, then return a `u64` which has the higher 32 bits as ptr and lower 32 bits as size due the limit of the ABI, and then have the host [`read_memory_into_vec`](https://docs.rs/polkavm/latest/polkavm/struct.Instance.html#method.read_memory_into_vec) to get the result. -- Call host function from guest, pass some data and get back some data (during the execution of the host function): +- Call host function from guest, pass some data and get back some data (during the execution of the host function): We construct arguments and returned values on the stack, then we pass the address of them to host to have the host read, process input and write output to the given address. ### How to pass non-primitive data types between guest and host? @@ -65,9 +65,9 @@ Basically, if a data type contains no objects on the heap, then byte-to-byte cop For more details, please refer to [PolkaVM Announcement on Polkadot Forum](https://forum.polkadot.network/t/announcing-polkavm-a-new-risc-v-based-vm-for-smart-contracts-and-possibly-more) -[^1]: https://forum.polkadot.network/t/announcing-polkavm-a-new-risc-v-based-vm-for-smart-contracts-and-possibly-more/3811#the-compilation-pipeline-7 "The compilation pipeline" -[^2]: https://github.com/paritytech/polkadot-sdk/tree/master/substrate/bin/utils/chain-spec-builder "chain-spec-builder" -[^3]: https://forum.polkadot.network/t/announcing-polkavm-a-new-risc-v-based-vm-for-smart-contracts-and-possibly-more/3811#wasm-like-import-export-model-6 "WASM-like import-export model" -[^4]: https://forum.polkadot.network/t/announcing-polkavm-a-new-risc-v-based-vm-for-smart-contracts-and-possibly-more/3811#security-and-sandboxing-4 "Security and sandboxing" -[^5]: https://forum.polkadot.network/t/announcing-polkavm-a-new-risc-v-based-vm-for-smart-contracts-and-possibly-more/3811#guest-program-memory-map-13 "Guest program memory map" -[^6]: https://docs.rs/polkavm-derive/latest/polkavm_derive/fn.sbrk.html "polkavm_derive::sbrk" +[^1]: "The compilation pipeline" +[^2]: "chain-spec-builder" +[^3]: "WASM-like import-export model" +[^4]: "Security and sandboxing" +[^5]: "Guest program memory map" +[^6]: "polkavm_derive::sbrk" diff --git a/poc/guests/.cargo/config.toml b/poc/guests/.cargo/config.toml index 865b37f..dc6aea3 100644 --- a/poc/guests/.cargo/config.toml +++ b/poc/guests/.cargo/config.toml @@ -1,9 +1,5 @@ [build] -target = "riscv32ema-unknown-none-elf" +target = "../../vendor/polkavm/crates/polkavm-linker/riscv32emac-unknown-none-polkavm.json" -[target.riscv32ema-unknown-none-elf] -rustflags = [ - "-C", "relocation-model=pie", - "-C", "link-arg=--emit-relocs", - "-C", "link-arg=--unique", -] +[unstable] +build-std = ["core", "alloc"] diff --git a/poc/guests/Cargo.lock b/poc/guests/Cargo.lock index 74dfa89..c67c570 100644 --- a/poc/guests/Cargo.lock +++ b/poc/guests/Cargo.lock @@ -133,7 +133,7 @@ name = "poc-guest-sum-balance" version = "0.1.0" dependencies = [ "polkavm-derive", - "xcq-api", + "pvq-api", ] [[package]] @@ -141,7 +141,7 @@ name = "poc-guest-sum-balance-percent" version = "0.1.0" dependencies = [ "polkavm-derive", - "xcq-api", + "pvq-api", ] [[package]] @@ -149,7 +149,7 @@ name = "poc-guest-total-supply" version = "0.1.0" dependencies = [ "polkavm-derive", - "xcq-api", + "pvq-api", ] [[package]] @@ -157,23 +157,23 @@ name = "poc-guest-transparent-call" version = "0.1.0" dependencies = [ "polkavm-derive", - "xcq-api", + "pvq-api", ] [[package]] name = "polkavm-common" -version = "0.12.0" +version = "0.21.0" [[package]] name = "polkavm-derive" -version = "0.12.0" +version = "0.21.0" dependencies = [ "polkavm-derive-impl-macro", ] [[package]] name = "polkavm-derive-impl" -version = "0.12.0" +version = "0.21.0" dependencies = [ "polkavm-common", "proc-macro2", @@ -183,7 +183,7 @@ dependencies = [ [[package]] name = "polkavm-derive-impl-macro" -version = "0.12.0" +version = "0.21.0" dependencies = [ "polkavm-derive-impl", "syn 2.0.63", @@ -207,6 +207,26 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "pvq-api" +version = "0.1.0" +dependencies = [ + "pvq-api-procedural", +] + +[[package]] +name = "pvq-api-procedural" +version = "0.1.0" +dependencies = [ + "Inflector", + "parity-scale-codec", + "proc-macro-crate", + "proc-macro2", + "quote", + "scale-info", + "syn 2.0.63", +] + [[package]] name = "quote" version = "1.0.36" @@ -322,23 +342,3 @@ checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" dependencies = [ "memchr", ] - -[[package]] -name = "xcq-api" -version = "0.1.0" -dependencies = [ - "xcq-api-procedural", -] - -[[package]] -name = "xcq-api-procedural" -version = "0.1.0" -dependencies = [ - "Inflector", - "parity-scale-codec", - "proc-macro-crate", - "proc-macro2", - "quote", - "scale-info", - "syn 2.0.63", -] diff --git a/poc/guests/Cargo.toml b/poc/guests/Cargo.toml index dc42014..81e10d4 100644 --- a/poc/guests/Cargo.toml +++ b/poc/guests/Cargo.toml @@ -10,4 +10,4 @@ resolver = "2" [workspace.dependencies] polkavm-derive = { path = "../../vendor/polkavm/crates/polkavm-derive" } -xcq-api = { path = "../../xcq-api", default-features = false } +pvq-api = { path = "../../pvq-api", default-features = false } diff --git a/poc/guests/rust-toolchain.toml b/poc/guests/rust-toolchain.toml index 64b6354..303a7f4 100644 --- a/poc/guests/rust-toolchain.toml +++ b/poc/guests/rust-toolchain.toml @@ -1,2 +1,3 @@ [toolchain] -channel = "rve-nightly" +channel = "nightly-2024-11-01" +components = ["rust-src"] diff --git a/poc/guests/sum-balance-percent/Cargo.toml b/poc/guests/sum-balance-percent/Cargo.toml index 1749879..51f9a7d 100644 --- a/poc/guests/sum-balance-percent/Cargo.toml +++ b/poc/guests/sum-balance-percent/Cargo.toml @@ -6,4 +6,4 @@ publish = false [dependencies] polkavm-derive = { workspace = true } -xcq-api = { workspace = true } +pvq-api = { workspace = true } diff --git a/poc/guests/sum-balance-percent/src/main.rs b/poc/guests/sum-balance-percent/src/main.rs index 2bcf521..eeaa771 100644 --- a/poc/guests/sum-balance-percent/src/main.rs +++ b/poc/guests/sum-balance-percent/src/main.rs @@ -3,14 +3,14 @@ #[global_allocator] static GLOBAL: polkavm_derive::LeakingAllocator = polkavm_derive::LeakingAllocator; use alloc::vec::Vec; -#[xcq_api::program] +#[pvq_api::program] mod sum_balance { - #[xcq::call_def(extension_id = 0x92F353DB95824F9Du64, call_index = 1)] + #[pvq::call_def(extension_id = 4071833530116166512u64, call_index = 1)] fn balance(asset: u32, who: [u8; 32]) -> u64 {} - #[xcq::call_def(extension_id = 0x92F353DB95824F9Du64, call_index = 0)] + #[pvq::call_def(extension_id = 4071833530116166512u64, call_index = 0)] fn total_supply(asset: u32) -> u64 {} - #[xcq::entrypoint] + #[pvq::entrypoint] fn sum_balance(balances: Vec, total_supply: TotalSupplyCall) -> u64 { let mut sum_balance = 0; for call in balances { diff --git a/poc/guests/sum-balance/Cargo.toml b/poc/guests/sum-balance/Cargo.toml index 92f4c7b..2fc3ac9 100644 --- a/poc/guests/sum-balance/Cargo.toml +++ b/poc/guests/sum-balance/Cargo.toml @@ -6,4 +6,4 @@ publish = false [dependencies] polkavm-derive = { workspace = true } -xcq-api = { workspace = true } +pvq-api = { workspace = true } diff --git a/poc/guests/sum-balance/src/main.rs b/poc/guests/sum-balance/src/main.rs index 997379a..b23c378 100644 --- a/poc/guests/sum-balance/src/main.rs +++ b/poc/guests/sum-balance/src/main.rs @@ -3,12 +3,12 @@ #[global_allocator] static GLOBAL: polkavm_derive::LeakingAllocator = polkavm_derive::LeakingAllocator; use alloc::vec::Vec; -// An example instance of xcq program with specific arg types -#[xcq_api::program] +// An example instance of pvq program with specific arg types +#[pvq_api::program] mod sum_balance { - #[xcq::call_def(extension_id = 0x92F353DB95824F9Du64, call_index = 1)] + #[pvq::call_def(extension_id = 4071833530116166512u64, call_index = 1)] fn balance(asset: u32, who: [u8; 32]) -> u64 {} - #[xcq::entrypoint] + #[pvq::entrypoint] fn sum_balance(calls: Vec) -> u64 { let mut sum = 0; for call in calls { diff --git a/poc/guests/total-supply/Cargo.toml b/poc/guests/total-supply/Cargo.toml index cf8dcbe..cad242f 100644 --- a/poc/guests/total-supply/Cargo.toml +++ b/poc/guests/total-supply/Cargo.toml @@ -7,4 +7,4 @@ publish = false [dependencies] polkavm-derive = { workspace = true } -xcq-api = { workspace = true } +pvq-api = { workspace = true } diff --git a/poc/guests/total-supply/src/main.rs b/poc/guests/total-supply/src/main.rs index f327858..4486276 100644 --- a/poc/guests/total-supply/src/main.rs +++ b/poc/guests/total-supply/src/main.rs @@ -2,12 +2,12 @@ #![no_main] #[global_allocator] static GLOBAL: polkavm_derive::LeakingAllocator = polkavm_derive::LeakingAllocator; -#[xcq_api::program] +#[pvq_api::program] mod query_total_supply { - #[xcq::call_def(extension_id = 10588899351449456541u64, call_index = 0)] + #[pvq::call_def(extension_id = 4071833530116166512u64, call_index = 0)] fn total_supply(asset: u32) -> u64 {} - #[xcq::entrypoint] + #[pvq::entrypoint] fn get_total_supply(call: TotalSupplyCall) -> u64 { call.call() } diff --git a/poc/guests/transparent-call/Cargo.toml b/poc/guests/transparent-call/Cargo.toml index 2664683..d03437c 100644 --- a/poc/guests/transparent-call/Cargo.toml +++ b/poc/guests/transparent-call/Cargo.toml @@ -6,4 +6,4 @@ publish = false [dependencies] polkavm-derive = { workspace = true } -xcq-api = { workspace = true } +pvq-api = { workspace = true } diff --git a/poc/runtime/Cargo.toml b/poc/runtime/Cargo.toml index 19b402b..a55e52b 100644 --- a/poc/runtime/Cargo.toml +++ b/poc/runtime/Cargo.toml @@ -23,11 +23,11 @@ pallet-transaction-payment-rpc-runtime-api = { version = "33.0.0", default-featu # genesis builder that allows us to interacto with runtime genesis config sp-genesis-builder = { version = "0.12.0", default-features = false } -xcq-executor = { workspace = true } -xcq-extension = { workspace = true } -xcq-extension-core = { workspace = true } -xcq-extension-fungibles = { workspace = true } -xcq-primitives = { workspace = true } +pvq-executor = { workspace = true } +pvq-extension = { workspace = true } +pvq-extension-core = { workspace = true } +pvq-extension-fungibles = { workspace = true } +pvq-primitives = { workspace = true } [dev-dependencies] hex = "0.4" @@ -52,9 +52,9 @@ std = [ "sp-genesis-builder/std", "substrate-wasm-builder", - "xcq-executor/std", - "xcq-extension/std", - "xcq-primitives/std", - "xcq-extension-core/std", - "xcq-extension-fungibles/std", + "pvq-executor/std", + "pvq-extension/std", + "pvq-primitives/std", + "pvq-extension-core/std", + "pvq-extension-fungibles/std", ] diff --git a/poc/runtime/src/lib.rs b/poc/runtime/src/lib.rs index 3b4a717..251220b 100644 --- a/poc/runtime/src/lib.rs +++ b/poc/runtime/src/lib.rs @@ -4,7 +4,7 @@ #[cfg(feature = "std")] include!(concat!(env!("OUT_DIR"), "/wasm_binary.rs")); -mod xcq; +mod pvq; use frame::{ deps::frame_support::{ @@ -23,8 +23,8 @@ use frame::{ #[runtime_version] pub const VERSION: RuntimeVersion = RuntimeVersion { - spec_name: create_runtime_str!("xcq-poc"), - impl_name: create_runtime_str!("xcq-poc"), + spec_name: create_runtime_str!("pvq-poc"), + impl_name: create_runtime_str!("pvq-poc"), authoring_version: 1, spec_version: 0, impl_version: 1, @@ -225,12 +225,12 @@ impl_runtime_apis! { } } - impl xcq::XcqApi for Runtime { - fn execute_query(query: Vec, input: Vec) -> xcq::XcqResult { - xcq::execute_query(&query, &input) + impl pvq::PvqApi for Runtime { + fn execute_query(query: Vec, input: Vec) -> pvq::PvqResult { + pvq::execute_query(&query, &input) } fn metadata() -> Vec { - xcq::metadata().encode() + pvq::metadata().encode() } } } diff --git a/poc/runtime/src/xcq.rs b/poc/runtime/src/pvq.rs similarity index 77% rename from poc/runtime/src/xcq.rs rename to poc/runtime/src/pvq.rs index 77af990..ad16b97 100644 --- a/poc/runtime/src/xcq.rs +++ b/poc/runtime/src/pvq.rs @@ -3,13 +3,13 @@ use frame::deps::scale_info::prelude::{format, string::String}; use frame::deps::sp_api::decl_runtime_apis; use frame::prelude::*; -use xcq_extension::metadata::Metadata; -pub use xcq_primitives::XcqResult; +use pvq_extension::metadata::Metadata; +pub use pvq_primitives::PvqResult; -use xcq_extension::{impl_extensions, ExtensionsExecutor, InvokeSource}; +use pvq_extension::{impl_extensions, ExtensionsExecutor, InvokeSource}; decl_runtime_apis! { - pub trait XcqApi { - fn execute_query(query: Vec, input: Vec) -> XcqResult; + pub trait PvqApi { + fn execute_query(query: Vec, input: Vec) -> PvqResult; fn metadata() -> Vec; } } @@ -17,39 +17,39 @@ decl_runtime_apis! { // extension_core impls pub struct ExtensionImpl; -impl xcq_extension_core::Config for ExtensionImpl { +impl pvq_extension_core::Config for ExtensionImpl { type ExtensionId = u64; } // extension_fungibles impls -impl xcq_extension_fungibles::Config for ExtensionImpl { +impl pvq_extension_fungibles::Config for ExtensionImpl { type AccountId = [u8; 32]; type Balance = crate::interface::Balance; type AssetId = crate::interface::AssetId; } impl_extensions! { - impl xcq_extension_core::ExtensionCore for ExtensionImpl { + impl pvq_extension_core::ExtensionCore for ExtensionImpl { type Config = ExtensionImpl; - fn has_extension(id: ::ExtensionId) -> bool { - matches!(id, xcq_extension_core::EXTENSION_ID | xcq_extension_fungibles::EXTENSION_ID) + fn has_extension(id: ::ExtensionId) -> bool { + matches!(id, pvq_extension_core::EXTENSION_ID | pvq_extension_fungibles::EXTENSION_ID) } } - impl xcq_extension_fungibles::ExtensionFungibles for ExtensionImpl { + impl pvq_extension_fungibles::ExtensionFungibles for ExtensionImpl { type Config = ExtensionImpl; fn balance( - asset: ::AssetId, - who: ::AccountId, - ) -> ::Balance { + asset: ::AssetId, + who: ::AccountId, + ) -> ::Balance { crate::Assets::balance(asset, crate::interface::AccountId::from(who)) } - fn total_supply(asset: ::AssetId) -> ::Balance { + fn total_supply(asset: ::AssetId) -> ::Balance { crate::Assets::total_supply(asset) } } } -pub fn execute_query(query: &[u8], input: &[u8]) -> XcqResult { +pub fn execute_query(query: &[u8], input: &[u8]) -> PvqResult { let mut executor = ExtensionsExecutor::::new(InvokeSource::RuntimeAPI); executor.execute_method(query, input) } @@ -80,7 +80,7 @@ mod tests { fn call_transparent_data_hex() { let raw_blob = include_bytes!("../../../output/poc-guest-transparent-call.polkavm"); // call fungible extension - let mut data = xcq_extension_fungibles::EXTENSION_ID.encode(); + let mut data = pvq_extension_fungibles::EXTENSION_ID.encode(); let method = FungiblesMethod::TotalSupply { asset: 21 }; data.extend_from_slice(&method.encode()); dbg!(hex::encode((raw_blob.to_vec(), data).encode())); @@ -94,7 +94,7 @@ mod tests { .public(); let alice_account = AccountId::from(alice_public); // query num - let mut data = xcq_extension_fungibles::EXTENSION_ID.encode(); + let mut data = pvq_extension_fungibles::EXTENSION_ID.encode(); data.extend_from_slice(&vec![2u8]); let method1 = FungiblesMethod::Balance { asset: 21, diff --git a/xcq-api/Cargo.toml b/pvq-api/Cargo.toml similarity index 62% rename from xcq-api/Cargo.toml rename to pvq-api/Cargo.toml index 3f61d1c..cd97fad 100644 --- a/xcq-api/Cargo.toml +++ b/pvq-api/Cargo.toml @@ -1,6 +1,6 @@ [package] -name = "xcq-api" -description = "API between XCQ host and guest program" +name = "pvq-api" +description = "API between PVQ host and guest program" authors.workspace = true edition.workspace = true license.workspace = true @@ -8,7 +8,7 @@ repository.workspace = true version.workspace = true [dependencies] -xcq-api-procedural = { path = "procedural" } +pvq-api-procedural = { path = "procedural" } [features] default = ["std"] diff --git a/xcq-api/procedural/Cargo.toml b/pvq-api/procedural/Cargo.toml similarity index 92% rename from xcq-api/procedural/Cargo.toml rename to pvq-api/procedural/Cargo.toml index 03a678b..dc16564 100644 --- a/xcq-api/procedural/Cargo.toml +++ b/pvq-api/procedural/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "xcq-api-procedural" +name = "pvq-api-procedural" version = "0.1.0" edition = "2021" diff --git a/xcq-api/procedural/src/lib.rs b/pvq-api/procedural/src/lib.rs similarity index 79% rename from xcq-api/procedural/src/lib.rs rename to pvq-api/procedural/src/lib.rs index df8b2c4..fd9c5b7 100644 --- a/xcq-api/procedural/src/lib.rs +++ b/pvq-api/procedural/src/lib.rs @@ -1,11 +1,11 @@ -/// Declare the calls used in XCQ program +/// Declare the calls used in PVQ program /// ```ignore -/// #[xcq::program] +/// #[pvq::program] /// mod query_fungibles { -/// #[xcq::call_def(extension_id = 123456, extern_types = [AssetId, AccountId, Balance])] +/// #[pvq::call_def(extension_id = 123456, extern_types = [AssetId, AccountId, Balance])] /// fn balance(asset: AssetId, who: AccountId) -> Balance; /// -/// #[xcq::entrypoint] +/// #[pvq::entrypoint] /// fn sum_balance(calls: Vec) -> u64 { /// let mut sum = 0; /// for call in calls { diff --git a/xcq-api/procedural/src/program/expand/mod.rs b/pvq-api/procedural/src/program/expand/mod.rs similarity index 100% rename from xcq-api/procedural/src/program/expand/mod.rs rename to pvq-api/procedural/src/program/expand/mod.rs diff --git a/xcq-api/procedural/src/program/mod.rs b/pvq-api/procedural/src/program/mod.rs similarity index 100% rename from xcq-api/procedural/src/program/mod.rs rename to pvq-api/procedural/src/program/mod.rs diff --git a/xcq-api/procedural/src/program/parse/call.rs b/pvq-api/procedural/src/program/parse/call.rs similarity index 79% rename from xcq-api/procedural/src/program/parse/call.rs rename to pvq-api/procedural/src/program/parse/call.rs index eef8492..419b776 100644 --- a/xcq-api/procedural/src/program/parse/call.rs +++ b/pvq-api/procedural/src/program/parse/call.rs @@ -23,18 +23,18 @@ impl CallDef { let extension_id = extension_id.ok_or_else(|| { syn::Error::new( span, - "Missing extension_id for xcq::call_def, expected #[xcq::call_def(extension_id = SOME_U64)]", + "Missing extension_id for pvq::call_def, expected #[pvq::call_def(extension_id = SOME_U64)]", ) })?; let item_fn = if let Item::Fn(item_fn) = item { item_fn } else { - return Err(syn::Error::new(item.span(), "Invalid xcq::call_def, expected item fn")); + return Err(syn::Error::new(item.span(), "Invalid pvq::call_def, expected item fn")); }; let call_index = call_index.ok_or_else(|| { syn::Error::new( span, - "Missing call_index for xcq::call_def, expected #[xcq::call_def(call_index = SOME_U32)]", + "Missing call_index for pvq::call_def, expected #[pvq::call_def(call_index = SOME_U32)]", ) })?; Ok(Self { diff --git a/xcq-api/procedural/src/program/parse/entrypoint.rs b/pvq-api/procedural/src/program/parse/entrypoint.rs similarity index 95% rename from xcq-api/procedural/src/program/parse/entrypoint.rs rename to pvq-api/procedural/src/program/parse/entrypoint.rs index a9e5139..b83b035 100644 --- a/xcq-api/procedural/src/program/parse/entrypoint.rs +++ b/pvq-api/procedural/src/program/parse/entrypoint.rs @@ -40,7 +40,7 @@ impl EntrypointDef { } else { return Err(syn::Error::new( input.span(), - "Invalid xcq::entrypoint, expected fn to have typed arguments", + "Invalid pvq::entrypoint, expected fn to have typed arguments", )); } } @@ -51,7 +51,7 @@ impl EntrypointDef { } else { Err(syn::Error::new( item.span(), - "Invalid xcq::entrypoint, expected item fn", + "Invalid pvq::entrypoint, expected item fn", )) } } diff --git a/xcq-api/procedural/src/program/parse/helper.rs b/pvq-api/procedural/src/program/parse/helper.rs similarity index 90% rename from xcq-api/procedural/src/program/parse/helper.rs rename to pvq-api/procedural/src/program/parse/helper.rs index 4956f42..b3f7541 100644 --- a/xcq-api/procedural/src/program/parse/helper.rs +++ b/pvq-api/procedural/src/program/parse/helper.rs @@ -1,8 +1,8 @@ pub trait MutItemAttrs { fn mut_item_attrs(&mut self) -> Option<&mut Vec>; } -/// Take the first item attribute (e.g. attribute like `#[xcq..]`) and decode it to `Attr` -pub(crate) fn take_first_xcq_attr(item: &mut impl MutItemAttrs) -> syn::Result> { +/// Take the first item attribute (e.g. attribute like `#[pvq..]`) and decode it to `Attr` +pub(crate) fn take_first_pvq_attr(item: &mut impl MutItemAttrs) -> syn::Result> { let Some(attrs) = item.mut_item_attrs() else { return Ok(None); }; @@ -11,13 +11,13 @@ pub(crate) fn take_first_xcq_attr(item: &mut impl MutItemAttrs) -> syn::Result Option<&mut Vec> { diff --git a/xcq-api/procedural/src/program/parse/mod.rs b/pvq-api/procedural/src/program/parse/mod.rs similarity index 92% rename from xcq-api/procedural/src/program/parse/mod.rs rename to pvq-api/procedural/src/program/parse/mod.rs index adf6f0e..6dda8bb 100644 --- a/xcq-api/procedural/src/program/parse/mod.rs +++ b/pvq-api/procedural/src/program/parse/mod.rs @@ -18,7 +18,7 @@ impl Def { .content .as_mut() .ok_or_else(|| { - let msg = "No content inside the XCQ program definition"; + let msg = "No content inside the PVQ program definition"; syn::Error::new(mod_span, msg) })? .1; @@ -27,9 +27,9 @@ impl Def { let mut entrypoint = None; for item in items.iter_mut() { - let xcq_attr = helper::take_first_xcq_attr(item)?; + let pvq_attr = helper::take_first_pvq_attr(item)?; - if let Some(attr) = xcq_attr { + if let Some(attr) = pvq_attr { if let Some(last_segment) = attr.path().segments.last() { if last_segment.ident == "call_def" { let mut extern_types = None; @@ -60,7 +60,7 @@ impl Def { } else { return Err(Error::new( item.span(), - "Invalid attribute, expected `#[xcq::call_def]` or `#[xcq::entrypoint]`", + "Invalid attribute, expected `#[pvq::call_def]` or `#[pvq::entrypoint]`", )); } } @@ -76,7 +76,7 @@ impl Def { /// List of additional token to be used for parsing. mod keyword { - syn::custom_keyword!(xcq); + syn::custom_keyword!(pvq); syn::custom_keyword!(call_def); syn::custom_keyword!(extension_id); syn::custom_keyword!(extern_types); diff --git a/xcq-api/src/lib.rs b/pvq-api/src/lib.rs similarity index 53% rename from xcq-api/src/lib.rs rename to pvq-api/src/lib.rs index 414f4b7..b0c9c85 100644 --- a/xcq-api/src/lib.rs +++ b/pvq-api/src/lib.rs @@ -1,2 +1,2 @@ #![cfg_attr(not(feature = "std"), no_std)] -pub use xcq_api_procedural::program; +pub use pvq_api_procedural::program; diff --git a/xcq-executor/Cargo.toml b/pvq-executor/Cargo.toml similarity index 52% rename from xcq-executor/Cargo.toml rename to pvq-executor/Cargo.toml index b465c79..8b77290 100644 --- a/xcq-executor/Cargo.toml +++ b/pvq-executor/Cargo.toml @@ -1,6 +1,6 @@ [package] -name = "xcq-executor" -description = "XCQ program executor" +name = "pvq-executor" +description = "PVQ program executor" authors.workspace = true edition.workspace = true license.workspace = true @@ -12,16 +12,9 @@ tracing = { workspace = true } polkavm = { workspace = true } -xcq-api = { workspace = true } -xcq-primitives = { workspace = true } +pvq-api = { workspace = true } +pvq-primitives = { workspace = true } [features] default = ["std"] -std = [ - "tracing/std", - - "polkavm/std", - - "xcq-api/std", - "xcq-primitives/std", -] +std = ["tracing/std", "polkavm/std", "pvq-api/std", "pvq-primitives/std"] diff --git a/xcq-executor/src/lib.rs b/pvq-executor/src/lib.rs similarity index 83% rename from xcq-executor/src/lib.rs rename to pvq-executor/src/lib.rs index c9510ac..1a31711 100644 --- a/xcq-executor/src/lib.rs +++ b/pvq-executor/src/lib.rs @@ -5,46 +5,46 @@ extern crate alloc; pub use alloc::vec::Vec; pub use polkavm::{Caller, Config, Engine, Linker, Module, ProgramBlob}; -pub trait XcqExecutorContext { +pub trait PvqExecutorContext { type UserData; type UserError; fn register_host_functions(&mut self, linker: &mut Linker); fn data(&mut self) -> &mut Self::UserData; } -pub struct XcqExecutor { +pub struct PvqExecutor { engine: Engine, linker: Linker, context: Ctx, } #[derive(Debug)] -pub enum XcqExecutorError { +pub enum PvqExecutorError { MemoryAllocationError, MemoryAccessError(polkavm::MemoryAccessError), CallError(polkavm::CallError), OtherPVMError(polkavm::Error), } -impl From for XcqExecutorError { +impl From for PvqExecutorError { fn from(err: polkavm::MemoryAccessError) -> Self { Self::MemoryAccessError(err) } } -impl From for XcqExecutorError { +impl From for PvqExecutorError { fn from(err: polkavm::Error) -> Self { Self::OtherPVMError(err) } } -impl From> for XcqExecutorError { +impl From> for PvqExecutorError { fn from(err: polkavm::CallError) -> Self { Self::CallError(err) } } -impl XcqExecutor { +impl PvqExecutor { pub fn new(config: Config, mut context: Ctx) -> Self { let engine = Engine::new(&config).unwrap(); let mut linker = Linker::::new(); @@ -57,7 +57,7 @@ impl XcqExecutor { } } - pub fn execute(&mut self, raw_blob: &[u8], input: &[u8]) -> Result, XcqExecutorError> { + pub fn execute(&mut self, raw_blob: &[u8], input: &[u8]) -> Result, PvqExecutorError> { let blob = ProgramBlob::parse(raw_blob.into()).map_err(polkavm::Error::from)?; let module = Module::from_blob(&self.engine, &Default::default(), blob)?; let instance_pre = self.linker.instantiate_pre(&module)?; @@ -72,8 +72,8 @@ impl XcqExecutor { // Second sbrk call to check the allocation doesn't exceed the heap limit instance .sbrk(input.len() as u32) - .map_err(|_| XcqExecutorError::MemoryAllocationError)? - .ok_or(XcqExecutorError::MemoryAllocationError)?; + .map_err(|_| PvqExecutorError::MemoryAllocationError)? + .ok_or(PvqExecutorError::MemoryAllocationError)?; // Args are passed via guest's heap instance.write_memory(start_ptr, input)?; start_ptr diff --git a/xcq-extension-core/Cargo.toml b/pvq-extension-core/Cargo.toml similarity index 61% rename from xcq-extension-core/Cargo.toml rename to pvq-extension-core/Cargo.toml index 8b40b7d..1b1271b 100644 --- a/xcq-extension-core/Cargo.toml +++ b/pvq-extension-core/Cargo.toml @@ -1,6 +1,6 @@ [package] -name = "xcq-extension-core" -description = "Core extension for XCQ" +name = "pvq-extension-core" +description = "Core extension for PVQ" authors.workspace = true edition.workspace = true license.workspace = true @@ -9,9 +9,9 @@ version.workspace = true [dependencies] parity-scale-codec = { workspace = true } -xcq-extension = { workspace = true } +pvq-extension = { workspace = true } scale-info = { workspace = true } [features] default = ["std"] -std = ["parity-scale-codec/std", "scale-info/std", "xcq-extension/std"] +std = ["parity-scale-codec/std", "scale-info/std", "pvq-extension/std"] diff --git a/xcq-extension-core/src/lib.rs b/pvq-extension-core/src/lib.rs similarity index 94% rename from xcq-extension-core/src/lib.rs rename to pvq-extension-core/src/lib.rs index fb1630d..908fc39 100644 --- a/xcq-extension-core/src/lib.rs +++ b/pvq-extension-core/src/lib.rs @@ -1,6 +1,6 @@ #![cfg_attr(not(feature = "std"), no_std)] use parity_scale_codec::Encode; -use xcq_extension::decl_extensions; +use pvq_extension::decl_extensions; pub trait Config { type ExtensionId: Encode; diff --git a/xcq-extension-fungibles/Cargo.toml b/pvq-extension-fungibles/Cargo.toml similarity index 60% rename from xcq-extension-fungibles/Cargo.toml rename to pvq-extension-fungibles/Cargo.toml index 175658b..c5c4883 100644 --- a/xcq-extension-fungibles/Cargo.toml +++ b/pvq-extension-fungibles/Cargo.toml @@ -1,6 +1,6 @@ [package] -name = "xcq-extension-fungibles" -description = "Fungibles extension for XCQ" +name = "pvq-extension-fungibles" +description = "Fungibles extension for PVQ" authors.workspace = true edition.workspace = true license.workspace = true @@ -9,9 +9,9 @@ version.workspace = true [dependencies] parity-scale-codec = { workspace = true } -xcq-extension = { workspace = true } +pvq-extension = { workspace = true } scale-info = { workspace = true } [features] default = ["std"] -std = ["parity-scale-codec/std", "scale-info/std", "xcq-extension/std"] +std = ["parity-scale-codec/std", "scale-info/std", "pvq-extension/std"] diff --git a/xcq-extension-fungibles/src/lib.rs b/pvq-extension-fungibles/src/lib.rs similarity index 96% rename from xcq-extension-fungibles/src/lib.rs rename to pvq-extension-fungibles/src/lib.rs index c13ed64..bb10148 100644 --- a/xcq-extension-fungibles/src/lib.rs +++ b/pvq-extension-fungibles/src/lib.rs @@ -1,6 +1,6 @@ #![cfg_attr(not(feature = "std"), no_std)] use parity_scale_codec::{Codec, Encode}; -use xcq_extension::decl_extensions; +use pvq_extension::decl_extensions; pub trait Config { type AssetId: Codec; diff --git a/xcq-extension/Cargo.toml b/pvq-extension/Cargo.toml similarity index 65% rename from xcq-extension/Cargo.toml rename to pvq-extension/Cargo.toml index 4fea96c..d87f9a0 100644 --- a/xcq-extension/Cargo.toml +++ b/pvq-extension/Cargo.toml @@ -1,6 +1,6 @@ [package] -name = "xcq-extension" -description = "Extension system for XCQ" +name = "pvq-extension" +description = "Extension system for PVQ" authors.workspace = true edition.workspace = true license.workspace = true @@ -9,20 +9,20 @@ version.workspace = true [dependencies] polkavm = { workspace = true } -xcq-executor = { workspace = true } +pvq-executor = { workspace = true } fortuples = { workspace = true } tracing = { workspace = true } -xcq-extension-procedural = { path = "procedural" } +pvq-extension-procedural = { path = "procedural" } parity-scale-codec = { workspace = true } scale-info = { workspace = true } -xcq-primitives = { workspace = true } +pvq-primitives = { workspace = true } [features] default = ["std"] std = [ "polkavm/std", - "xcq-executor/std", - "xcq-primitives/std", + "pvq-executor/std", + "pvq-primitives/std", "parity-scale-codec/std", "scale-info/std", "tracing/std", diff --git a/xcq-extension/procedural/Cargo.toml b/pvq-extension/procedural/Cargo.toml similarity index 91% rename from xcq-extension/procedural/Cargo.toml rename to pvq-extension/procedural/Cargo.toml index a9ac513..db0e6b2 100644 --- a/xcq-extension/procedural/Cargo.toml +++ b/pvq-extension/procedural/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "xcq-extension-procedural" +name = "pvq-extension-procedural" authors.workspace = true edition.workspace = true repository.workspace = true diff --git a/xcq-extension/procedural/src/decl_extensions.rs b/pvq-extension/procedural/src/decl_extensions.rs similarity index 88% rename from xcq-extension/procedural/src/decl_extensions.rs rename to pvq-extension/procedural/src/decl_extensions.rs index 4beaa31..4034c6a 100644 --- a/xcq-extension/procedural/src/decl_extensions.rs +++ b/pvq-extension/procedural/src/decl_extensions.rs @@ -57,11 +57,11 @@ pub fn decl_extension_inner(item_trait: &ItemTrait) -> Result { } fn add_super_trait(item_trait: &mut ItemTrait) -> Result<()> { - let xcq_extension = generate_crate_access("xcq-extension")?; - // item_trait.supertraits.push(parse_quote!(#xcq_extension::ExtensionId)); + let pvq_extension = generate_crate_access("pvq-extension")?; + // item_trait.supertraits.push(parse_quote!(#pvq_extension::ExtensionId)); item_trait .supertraits - .push(parse_quote!(#xcq_extension::ExtensionImplMetadata)); + .push(parse_quote!(#pvq_extension::ExtensionImplMetadata)); Ok(()) } @@ -105,7 +105,7 @@ fn call_enum_def(trait_ident: &Ident, methods: &[Method]) -> Result { } fn impl_dispatchable(trait_ident: &Ident, methods: &[Method]) -> Result { - let xcq_extension = generate_crate_access("xcq-extension")?; + let pvq_extension = generate_crate_access("pvq-extension")?; let mut pats = Vec::::new(); for method in methods { let name = &method.name; @@ -139,8 +139,8 @@ fn impl_dispatchable(trait_ident: &Ident, methods: &[Method]) -> Result #xcq_extension::Dispatchable for Call { - fn dispatch(self) -> Result, #xcq_extension::DispatchError> { + impl #pvq_extension::Dispatchable for Call { + fn dispatch(self) -> Result, #pvq_extension::DispatchError> { match self { #( #pats => Ok(#method_calls.encode()),)* Self::__Phantom(_) => unreachable!(), @@ -151,26 +151,26 @@ fn impl_dispatchable(trait_ident: &Ident, methods: &[Method]) -> Result Result { - let xcq_extension = generate_crate_access("xcq-extension")?; + let pvq_extension = generate_crate_access("pvq-extension")?; let extension_id = calculate_hash(trait_ident, trait_items); Ok(quote! { // Defining an trait for extension_id is useful for generic usage - impl #xcq_extension::ExtensionId for Call { - const EXTENSION_ID: #xcq_extension::ExtensionIdTy = #extension_id; + impl #pvq_extension::ExtensionId for Call { + const EXTENSION_ID: #pvq_extension::ExtensionIdTy = #extension_id; } // This one is for easier access, since impl doesn't contribute to the extension_id calculation - pub const EXTENSION_ID: #xcq_extension::ExtensionIdTy = #extension_id; + pub const EXTENSION_ID: #pvq_extension::ExtensionIdTy = #extension_id; }) } // Delegate the metadata generation to the trait implementation fn impl_call_metadata(trait_ident: &Ident) -> Result { - let xcq_extension = generate_crate_access("xcq-extension")?; + let pvq_extension = generate_crate_access("pvq-extension")?; Ok(parse_quote! { - impl #xcq_extension::CallMetadata for Call { - fn call_metadata() -> #xcq_extension::metadata::ExtensionMetadata { - Impl::extension_metadata(::EXTENSION_ID) + impl #pvq_extension::CallMetadata for Call { + fn call_metadata() -> #pvq_extension::metadata::ExtensionMetadata { + Impl::extension_metadata(::EXTENSION_ID) } } }) @@ -221,7 +221,7 @@ fn replace_self_to_impl(ty: &Type) -> Result> { fn calculate_hash(trait_ident: &Ident, trait_items: &[TraitItem]) -> u64 { let mut hasher = twox_hash::XxHash64::default(); // reduce the chance of hash collision - "xcq-ext$".hash(&mut hasher); + "pvq-ext$".hash(&mut hasher); trait_ident.hash(&mut hasher); for trait_item in trait_items { if let TraitItem::Fn(method) = trait_item { diff --git a/xcq-extension/procedural/src/impl_extensions.rs b/pvq-extension/procedural/src/impl_extensions.rs similarity index 93% rename from xcq-extension/procedural/src/impl_extensions.rs rename to pvq-extension/procedural/src/impl_extensions.rs index e7f2614..40a86b4 100644 --- a/xcq-extension/procedural/src/impl_extensions.rs +++ b/pvq-extension/procedural/src/impl_extensions.rs @@ -7,17 +7,17 @@ use syn::{ parse_macro_input, parse_quote, ItemImpl, Result, }; pub fn impl_extensions_impl(input: TokenStream) -> TokenStream { - let XcqExtensionImpls { impls } = parse_macro_input!(input as XcqExtensionImpls); + let PvqExtensionImpls { impls } = parse_macro_input!(input as PvqExtensionImpls); impl_extensions_inner(&impls) .unwrap_or_else(|err| err.to_compile_error()) .into() } -struct XcqExtensionImpls { +struct PvqExtensionImpls { impls: Vec, } -impl Parse for XcqExtensionImpls { +impl Parse for PvqExtensionImpls { fn parse(input: ParseStream) -> Result { let mut impls = Vec::new(); while !input.is_empty() { diff --git a/xcq-extension/procedural/src/lib.rs b/pvq-extension/procedural/src/lib.rs similarity index 100% rename from xcq-extension/procedural/src/lib.rs rename to pvq-extension/procedural/src/lib.rs diff --git a/xcq-extension/procedural/src/runtime_metadata.rs b/pvq-extension/procedural/src/runtime_metadata.rs similarity index 91% rename from xcq-extension/procedural/src/runtime_metadata.rs rename to pvq-extension/procedural/src/runtime_metadata.rs index e3e8ca0..5774181 100644 --- a/xcq-extension/procedural/src/runtime_metadata.rs +++ b/pvq-extension/procedural/src/runtime_metadata.rs @@ -13,7 +13,7 @@ use syn::{ /// The metadata is exposed as a generic function on the hidden module /// of the trait generated by the `decl_extensions`. pub fn generate_decl_metadata(decl: &ItemTrait, has_config: bool) -> Result { - let xcq_extension = generate_crate_access("xcq-extension")?; + let pvq_extension = generate_crate_access("pvq-extension")?; let mut methods = Vec::new(); // Convert `::Associated` to `T::Associated` with `T:Config` bound @@ -45,7 +45,7 @@ pub fn generate_decl_metadata(decl: &ItemTrait, has_config: bool) -> Result(), } @@ -69,7 +69,7 @@ pub fn generate_decl_metadata(decl: &ItemTrait, has_config: bool) -> Result Result #xcq_extension::metadata::ExtensionMetadata + pub fn extension_metadata #impl_generics () -> #pvq_extension::metadata::ExtensionMetadata #where_clause { - #xcq_extension::metadata::ExtensionMetadata { + #pvq_extension::metadata::ExtensionMetadata { name: #trait_name, methods: scale_info::prelude::vec![ #( #methods, )* ], } @@ -116,8 +116,8 @@ pub fn generate_decl_metadata(decl: &ItemTrait, has_config: bool) -> Result #xcq_extension::metadata::ExtensionMetadata { - #xcq_extension::metadata::ExtensionMetadata { + pub fn extension_metadata() -> #pvq_extension::metadata::ExtensionMetadata { + #pvq_extension::metadata::ExtensionMetadata { name: #trait_name, methods: scale_info::prelude::vec![ #( #methods, )* ], } @@ -135,7 +135,7 @@ pub fn generate_impl_metadata(impls: &[ItemImpl]) -> Result { return Ok(quote!()); } - let xcq_extension = generate_crate_access("xcq-extension")?; + let pvq_extension = generate_crate_access("pvq-extension")?; // Get the name of the runtime for which the traits are implemented. let extension_impl_name = &impls @@ -149,7 +149,7 @@ pub fn generate_impl_metadata(impls: &[ItemImpl]) -> Result { for impl_ in impls { let mut trait_ = extract_impl_trait(impl_, RequireQualifiedTraitPath::Yes)?.clone(); - // Implementation traits are always references with a path `impl xcq_extension::ExtensionCore ...` + // Implementation traits are always references with a path `impl pvq_extension::ExtensionCore ...` // The trait name is the last segment of this path. let trait_name_ident = trait_ .segments @@ -193,8 +193,8 @@ pub fn generate_impl_metadata(impls: &[ItemImpl]) -> Result { } let query_metadata_by_extension_id = quote! { - impl #xcq_extension::ExtensionImplMetadata for #extension_impl_name { - fn extension_metadata(extension_id: #xcq_extension::ExtensionIdTy) -> #xcq_extension::metadata::ExtensionMetadata { + impl #pvq_extension::ExtensionImplMetadata for #extension_impl_name { + fn extension_metadata(extension_id: #pvq_extension::ExtensionIdTy) -> #pvq_extension::metadata::ExtensionMetadata { let extension_metadata = match extension_id { #(#extension_ids => #extension_metadata_list,)* _ => panic!("Unknown extension id"), @@ -206,8 +206,8 @@ pub fn generate_impl_metadata(impls: &[ItemImpl]) -> Result { let aggregate_metadata = quote! { impl #extension_impl_name { - pub fn metadata() -> #xcq_extension::metadata::Metadata { - #xcq_extension::metadata::Metadata::new( + pub fn metadata() -> #pvq_extension::metadata::Metadata { + #pvq_extension::metadata::Metadata::new( scale_info::prelude::vec![ #( #extension_metadata_list, )* ], ) } diff --git a/xcq-extension/procedural/src/utils.rs b/pvq-extension/procedural/src/utils.rs similarity index 96% rename from xcq-extension/procedural/src/utils.rs rename to pvq-extension/procedural/src/utils.rs index 2edc27d..5a1a694 100644 --- a/xcq-extension/procedural/src/utils.rs +++ b/pvq-extension/procedural/src/utils.rs @@ -25,7 +25,7 @@ pub fn extract_impl_trait(impl_: &ItemImpl, require: RequireQualifiedTraitPath) Err(Error::new( p.span(), "The implemented trait has to be referenced with a path, \ - e.g. `impl xcq_extension_core::ExtensionCore for Runtime`.", + e.g. `impl pvq_extension_core::ExtensionCore for Runtime`.", )) } }) diff --git a/xcq-extension/src/dispatchable.rs b/pvq-extension/src/dispatchable.rs similarity index 100% rename from xcq-extension/src/dispatchable.rs rename to pvq-extension/src/dispatchable.rs diff --git a/xcq-extension/src/error.rs b/pvq-extension/src/error.rs similarity index 100% rename from xcq-extension/src/error.rs rename to pvq-extension/src/error.rs diff --git a/xcq-extension/src/extension_id.rs b/pvq-extension/src/extension_id.rs similarity index 100% rename from xcq-extension/src/extension_id.rs rename to pvq-extension/src/extension_id.rs diff --git a/xcq-extension/src/guest.rs b/pvq-extension/src/guest.rs similarity index 100% rename from xcq-extension/src/guest.rs rename to pvq-extension/src/guest.rs diff --git a/xcq-extension/src/lib.rs b/pvq-extension/src/lib.rs similarity index 91% rename from xcq-extension/src/lib.rs rename to pvq-extension/src/lib.rs index 470cb8b..849e6a0 100644 --- a/xcq-extension/src/lib.rs +++ b/pvq-extension/src/lib.rs @@ -1,9 +1,9 @@ #![cfg_attr(not(feature = "std"), no_std)] use parity_scale_codec::Decode; +use pvq_executor::{Caller, Linker, PvqExecutor, PvqExecutorContext}; use scale_info::prelude::{format, marker::PhantomData, vec::Vec}; -use xcq_executor::{Caller, Linker, XcqExecutor, XcqExecutorContext}; -pub type XcqResponse = Vec; -use xcq_primitives::{XcqError, XcqResult}; +pub type PvqResponse = Vec; +use pvq_primitives::{PvqError, PvqResult}; mod dispatchable; pub use dispatchable::{DispatchError, Dispatchable}; @@ -14,7 +14,7 @@ pub use metadata::{CallMetadata, ExtensionImplMetadata}; mod error; pub use error::ExtensionError; mod macros; -pub use xcq_extension_procedural::{decl_extensions, impl_extensions}; +pub use pvq_extension_procedural::{decl_extensions, impl_extensions}; mod perm_controller; pub use perm_controller::{InvokeSource, PermissionController}; @@ -48,7 +48,7 @@ impl Context { } } -impl XcqExecutorContext for Context { +impl PvqExecutorContext for Context { type UserData = (); type UserError = ExtensionError; fn data(&mut self) -> &mut Self::UserData { @@ -119,20 +119,20 @@ impl XcqExecutorContext for Context { - executor: XcqExecutor>, + executor: PvqExecutor>, } impl ExtensionsExecutor { #[allow(dead_code)] pub fn new(source: InvokeSource) -> Self { let context = Context::::new(source); - let executor = XcqExecutor::new(Default::default(), context); + let executor = PvqExecutor::new(Default::default(), context); Self { executor } } #[allow(dead_code)] - pub fn execute_method(&mut self, query: &[u8], input: &[u8]) -> XcqResult { + pub fn execute_method(&mut self, query: &[u8], input: &[u8]) -> PvqResult { self.executor .execute(query, input) - .map_err(|e| XcqError::Custom(format!("{:?}", e))) + .map_err(|e| PvqError::Custom(format!("{:?}", e))) } } diff --git a/xcq-extension/src/macros.rs b/pvq-extension/src/macros.rs similarity index 100% rename from xcq-extension/src/macros.rs rename to pvq-extension/src/macros.rs diff --git a/xcq-extension/src/metadata.rs b/pvq-extension/src/metadata.rs similarity index 100% rename from xcq-extension/src/metadata.rs rename to pvq-extension/src/metadata.rs diff --git a/xcq-extension/src/perm_controller.rs b/pvq-extension/src/perm_controller.rs similarity index 100% rename from xcq-extension/src/perm_controller.rs rename to pvq-extension/src/perm_controller.rs diff --git a/xcq-extension/tests/with_associated_types_works.rs b/pvq-extension/tests/with_associated_types_works.rs similarity index 98% rename from xcq-extension/tests/with_associated_types_works.rs rename to pvq-extension/tests/with_associated_types_works.rs index a5fa655..96f5269 100644 --- a/xcq-extension/tests/with_associated_types_works.rs +++ b/pvq-extension/tests/with_associated_types_works.rs @@ -1,6 +1,6 @@ use parity_scale_codec::{Codec, Decode, Encode}; -use xcq_extension::metadata::Metadata; -use xcq_extension::{decl_extensions, impl_extensions, ExtensionsExecutor, InvokeSource}; +use pvq_extension::metadata::Metadata; +use pvq_extension::{decl_extensions, impl_extensions, ExtensionsExecutor, InvokeSource}; mod extension_core { use super::*; diff --git a/xcq-primitives/Cargo.toml b/pvq-primitives/Cargo.toml similarity index 84% rename from xcq-primitives/Cargo.toml rename to pvq-primitives/Cargo.toml index 30dcc40..0ec47cf 100644 --- a/xcq-primitives/Cargo.toml +++ b/pvq-primitives/Cargo.toml @@ -1,6 +1,6 @@ [package] -name = "xcq-primitives" -description = "Primitives for XCQ" +name = "pvq-primitives" +description = "Primitives for PVQ" authors.workspace = true edition.workspace = true repository.workspace = true diff --git a/xcq-primitives/src/lib.rs b/pvq-primitives/src/lib.rs similarity index 71% rename from xcq-primitives/src/lib.rs rename to pvq-primitives/src/lib.rs index f0fa12d..6553386 100644 --- a/xcq-primitives/src/lib.rs +++ b/pvq-primitives/src/lib.rs @@ -6,11 +6,11 @@ use alloc::{string::String, vec::Vec}; use parity_scale_codec::{Decode, Encode}; use scale_info::TypeInfo; -pub type XcqResponse = Vec; +pub type PvqResponse = Vec; #[derive(Debug, Clone, PartialEq, Eq, Encode, Decode, TypeInfo)] -pub enum XcqError { +pub enum PvqError { Custom(String), } -pub type XcqResult = Result; +pub type PvqResult = Result; diff --git a/xcq-runtime-api/Cargo.toml b/pvq-runtime-api/Cargo.toml similarity index 60% rename from xcq-runtime-api/Cargo.toml rename to pvq-runtime-api/Cargo.toml index 10f9ca0..28c861b 100644 --- a/xcq-runtime-api/Cargo.toml +++ b/pvq-runtime-api/Cargo.toml @@ -1,6 +1,6 @@ [package] -name = "xcq-runtime-api" -description = "Runtime API for XCQ" +name = "pvq-runtime-api" +description = "Runtime API for PVQ" authors.workspace = true edition.workspace = true license.workspace = true @@ -8,10 +8,10 @@ repository.workspace = true version.workspace = true [dependencies] -xcq-primitives = { workspace = true } +pvq-primitives = { workspace = true } sp-api = { workspace = true } [features] default = ["std"] -std = ["xcq-primitives/std", "sp-api/std"] +std = ["pvq-primitives/std", "sp-api/std"] diff --git a/xcq-runtime-api/src/lib.rs b/pvq-runtime-api/src/lib.rs similarity index 69% rename from xcq-runtime-api/src/lib.rs rename to pvq-runtime-api/src/lib.rs index d4417de..2d7f3b4 100644 --- a/xcq-runtime-api/src/lib.rs +++ b/pvq-runtime-api/src/lib.rs @@ -3,15 +3,15 @@ extern crate alloc; use alloc::vec::Vec; +use pvq_primitives::PvqResult; use sp_api::decl_runtime_apis; -use xcq_primitives::XcqResult; -// The runtime API for the XCQ module. +// The runtime API for the PVQ module. // query: the query to be executed, written in polkavm. i.e. query balance of given accounts and sum them up // input: the input data for the query. i.e. accounts to be queried decl_runtime_apis! { - pub trait XcqApi { - fn execute_query(query: Vec, input: Vec) -> XcqResult; + pub trait PvqApi { + fn execute_query(query: Vec, input: Vec) -> PvqResult; fn metadata() -> Vec; } } diff --git a/xcq-test-runner/Cargo.toml b/pvq-test-runner/Cargo.toml similarity index 53% rename from xcq-test-runner/Cargo.toml rename to pvq-test-runner/Cargo.toml index 740ddda..d6fd4ae 100644 --- a/xcq-test-runner/Cargo.toml +++ b/pvq-test-runner/Cargo.toml @@ -1,6 +1,6 @@ [package] -name = "xcq-test-runner" -description = "XCQ program runner. Only for testing purpose." +name = "pvq-test-runner" +description = "PVQ program runner. Only for testing purpose." authors.workspace = true edition.workspace = true license.workspace = true @@ -14,10 +14,10 @@ tracing-subscriber = { workspace = true } parity-scale-codec = { workspace = true, features = ["std"] } scale-info = { workspace = true, features = ["std"] } -xcq-executor = { workspace = true, features = ["std"] } -xcq-extension = { workspace = true, features = ["std"] } -xcq-extension-core = { workspace = true, features = ["std"] } -xcq-extension-fungibles = { workspace = true, features = ["std"] } -xcq-primitives = { workspace = true, features = ["std"] } +pvq-executor = { workspace = true, features = ["std"] } +pvq-extension = { workspace = true, features = ["std"] } +pvq-extension-core = { workspace = true, features = ["std"] } +pvq-extension-fungibles = { workspace = true, features = ["std"] } +pvq-primitives = { workspace = true, features = ["std"] } polkavm = { workspace = true, features = ["std"] } diff --git a/xcq-test-runner/src/main.rs b/pvq-test-runner/src/main.rs similarity index 74% rename from xcq-test-runner/src/main.rs rename to pvq-test-runner/src/main.rs index 30ad6cf..fc2f7e2 100644 --- a/xcq-test-runner/src/main.rs +++ b/pvq-test-runner/src/main.rs @@ -1,7 +1,7 @@ use clap::Parser; use parity_scale_codec::{Decode, Encode}; +use pvq_extension::{impl_extensions, ExtensionsExecutor, InvokeSource}; use tracing_subscriber::prelude::*; -use xcq_extension::{impl_extensions, ExtensionsExecutor, InvokeSource}; #[derive(Parser, Debug)] #[command(version, about)] @@ -27,7 +27,7 @@ fn main() { let blob = std::fs::read(cli.program).expect("Failed to read program"); let mut executor = ExtensionsExecutor::::new(InvokeSource::RuntimeAPI); - let mut input_data = xcq_extension_fungibles::EXTENSION_ID.encode(); + let mut input_data = pvq_extension_fungibles::EXTENSION_ID.encode(); input_data.extend_from_slice(&[2u8]); let method1 = FungiblesMethod::Balance { asset: 1, @@ -49,35 +49,35 @@ fn main() { pub struct ExtensionImpl; -impl xcq_extension_core::Config for ExtensionImpl { +impl pvq_extension_core::Config for ExtensionImpl { type ExtensionId = u64; } -impl xcq_extension_fungibles::Config for ExtensionImpl { +impl pvq_extension_fungibles::Config for ExtensionImpl { type AssetId = u32; type AccountId = [u8; 32]; type Balance = u64; } impl_extensions! { - impl xcq_extension_core::ExtensionCore for ExtensionImpl { + impl pvq_extension_core::ExtensionCore for ExtensionImpl { type Config = ExtensionImpl; - fn has_extension(id: ::ExtensionId) -> bool { + fn has_extension(id: ::ExtensionId) -> bool { matches!(id, 0 | 1) } } - impl xcq_extension_fungibles::ExtensionFungibles for ExtensionImpl { + impl pvq_extension_fungibles::ExtensionFungibles for ExtensionImpl { type Config = ExtensionImpl; #[allow(unused_variables)] fn balance( - asset: ::AssetId, - who: ::AccountId, - ) -> ::Balance { + asset: ::AssetId, + who: ::AccountId, + ) -> ::Balance { 100 } #[allow(unused_variables)] - fn total_supply(asset: ::AssetId) -> ::Balance { + fn total_supply(asset: ::AssetId) -> ::Balance { 200 } } diff --git a/vendor/polkavm b/vendor/polkavm index ada0db5..3e0c2e6 160000 --- a/vendor/polkavm +++ b/vendor/polkavm @@ -1 +1 @@ -Subproject commit ada0db579f2d0fb40cdbf259dd2f29eb434c1d21 +Subproject commit 3e0c2e6ff67b1876fe08dc0180b86dff3c3f6b2a