Better API structure, update deps
This commit is contained in:
parent
0fb1565d76
commit
5437fe2771
17 changed files with 266 additions and 256 deletions
199
Cargo.lock
generated
199
Cargo.lock
generated
|
@ -143,6 +143,17 @@ dependencies = [
|
||||||
"digest 0.10.6",
|
"digest 0.10.6",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "blake2b_simd"
|
||||||
|
version = "1.0.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "3c2f0dc9a68c6317d884f97cc36cf5a3d20ba14ce404227df55e1af708ab04bc"
|
||||||
|
dependencies = [
|
||||||
|
"arrayref",
|
||||||
|
"arrayvec 0.7.2",
|
||||||
|
"constant_time_eq",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "block-buffer"
|
name = "block-buffer"
|
||||||
version = "0.7.3"
|
version = "0.7.3"
|
||||||
|
@ -161,7 +172,7 @@ version = "0.9.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4"
|
checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"generic-array 0.14.6",
|
"generic-array 0.14.7",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -170,7 +181,7 @@ version = "0.10.4"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
|
checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"generic-array 0.14.6",
|
"generic-array 0.14.7",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -267,6 +278,12 @@ dependencies = [
|
||||||
"unicode-width",
|
"unicode-width",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "constant_time_eq"
|
||||||
|
version = "0.2.5"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "13418e745008f7349ec7e449155f419a61b92b58a99cc3616942b926825ec76b"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "core-foundation-sys"
|
name = "core-foundation-sys"
|
||||||
version = "0.8.3"
|
version = "0.8.3"
|
||||||
|
@ -454,7 +471,7 @@ version = "0.1.6"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
|
checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"generic-array 0.14.6",
|
"generic-array 0.14.7",
|
||||||
"typenum",
|
"typenum",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -464,7 +481,7 @@ version = "0.11.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "b1d1a86f49236c215f271d40892d5fc950490551400b02ef360692c29815c714"
|
checksum = "b1d1a86f49236c215f271d40892d5fc950490551400b02ef360692c29815c714"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"generic-array 0.14.6",
|
"generic-array 0.14.7",
|
||||||
"subtle",
|
"subtle",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -542,7 +559,7 @@ dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
"scratch",
|
"scratch",
|
||||||
"syn 2.0.10",
|
"syn 2.0.12",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -559,7 +576,7 @@ checksum = "2345488264226bf682893e25de0769f3360aac9957980ec49361b083ddaa5bc5"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
"syn 2.0.10",
|
"syn 2.0.12",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -601,7 +618,7 @@ version = "0.9.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066"
|
checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"generic-array 0.14.6",
|
"generic-array 0.14.7",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -719,6 +736,17 @@ dependencies = [
|
||||||
"winapi",
|
"winapi",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "errno"
|
||||||
|
version = "0.3.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "50d6a0976c999d473fe89ad888d5a284e55366d9dc9038b1ba2aa15128c4afa0"
|
||||||
|
dependencies = [
|
||||||
|
"errno-dragonfly",
|
||||||
|
"libc",
|
||||||
|
"windows-sys 0.45.0",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "errno-dragonfly"
|
name = "errno-dragonfly"
|
||||||
version = "0.1.2"
|
version = "0.1.2"
|
||||||
|
@ -795,9 +823,9 @@ checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "futures"
|
name = "futures"
|
||||||
version = "0.3.27"
|
version = "0.3.28"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "531ac96c6ff5fd7c62263c5e3c67a603af4fcaee2e1a0ae5565ba3a11e69e549"
|
checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"futures-channel",
|
"futures-channel",
|
||||||
"futures-core",
|
"futures-core",
|
||||||
|
@ -810,9 +838,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "futures-channel"
|
name = "futures-channel"
|
||||||
version = "0.3.27"
|
version = "0.3.28"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "164713a5a0dcc3e7b4b1ed7d3b433cabc18025386f9339346e8daf15963cf7ac"
|
checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"futures-core",
|
"futures-core",
|
||||||
"futures-sink",
|
"futures-sink",
|
||||||
|
@ -820,15 +848,15 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "futures-core"
|
name = "futures-core"
|
||||||
version = "0.3.27"
|
version = "0.3.28"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "86d7a0c1aa76363dac491de0ee99faf6941128376f1cf96f07db7603b7de69dd"
|
checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "futures-executor"
|
name = "futures-executor"
|
||||||
version = "0.3.27"
|
version = "0.3.28"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "1997dd9df74cdac935c76252744c1ed5794fac083242ea4fe77ef3ed60ba0f83"
|
checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"futures-core",
|
"futures-core",
|
||||||
"futures-task",
|
"futures-task",
|
||||||
|
@ -838,38 +866,38 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "futures-io"
|
name = "futures-io"
|
||||||
version = "0.3.27"
|
version = "0.3.28"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "89d422fa3cbe3b40dca574ab087abb5bc98258ea57eea3fd6f1fa7162c778b91"
|
checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "futures-macro"
|
name = "futures-macro"
|
||||||
version = "0.3.27"
|
version = "0.3.28"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "3eb14ed937631bd8b8b8977f2c198443447a8355b6e3ca599f38c975e5a963b6"
|
checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
"syn 1.0.109",
|
"syn 2.0.12",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "futures-sink"
|
name = "futures-sink"
|
||||||
version = "0.3.27"
|
version = "0.3.28"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "ec93083a4aecafb2a80a885c9de1f0ccae9dbd32c2bb54b0c3a65690e0b8d2f2"
|
checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "futures-task"
|
name = "futures-task"
|
||||||
version = "0.3.27"
|
version = "0.3.28"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "fd65540d33b37b16542a0438c12e6aeead10d4ac5d05bd3f805b8f35ab592879"
|
checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "futures-util"
|
name = "futures-util"
|
||||||
version = "0.3.27"
|
version = "0.3.28"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "3ef6b17e481503ec85211fed8f39d1970f128935ca1f814cd32ac4a6842e84ab"
|
checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"futures-channel",
|
"futures-channel",
|
||||||
"futures-core",
|
"futures-core",
|
||||||
|
@ -903,9 +931,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "generic-array"
|
name = "generic-array"
|
||||||
version = "0.14.6"
|
version = "0.14.7"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9"
|
checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"typenum",
|
"typenum",
|
||||||
"version_check",
|
"version_check",
|
||||||
|
@ -946,9 +974,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "hash-db"
|
name = "hash-db"
|
||||||
version = "0.15.2"
|
version = "0.16.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "d23bd4e7b5eda0d0f3a307e8b381fdc8ba9000f26fbe912250c0a4cc3956364a"
|
checksum = "8e7d7786361d7425ae2fe4f9e407eb0efaa0840f5212d109cc018c40c35c6ab4"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "hash256-std-hasher"
|
name = "hash256-std-hasher"
|
||||||
|
@ -1101,13 +1129,13 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "is-terminal"
|
name = "is-terminal"
|
||||||
version = "0.4.5"
|
version = "0.4.6"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "8687c819457e979cc940d09cb16e42a1bf70aa6b60a549de6d3a62a0ee90c69e"
|
checksum = "256017f749ab3117e93acb91063009e1f1bb56d03965b14c2c8df4eb02c524d8"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"hermit-abi 0.3.1",
|
"hermit-abi 0.3.1",
|
||||||
"io-lifetimes",
|
"io-lifetimes",
|
||||||
"rustix",
|
"rustix 0.37.6",
|
||||||
"windows-sys 0.45.0",
|
"windows-sys 0.45.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -1232,6 +1260,12 @@ version = "0.1.4"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4"
|
checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "linux-raw-sys"
|
||||||
|
version = "0.3.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "d59d8c75012853d2e872fb56bc8a2e53718e2cafe1a4c823143141c6d90c322f"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "lock_api"
|
name = "lock_api"
|
||||||
version = "0.4.9"
|
version = "0.4.9"
|
||||||
|
@ -1277,11 +1311,11 @@ checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "memfd"
|
name = "memfd"
|
||||||
version = "0.6.2"
|
version = "0.6.3"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "b20a59d985586e4a5aef64564ac77299f8586d8be6cf9106a5a40207e8908efb"
|
checksum = "ffc89ccdc6e10d6907450f753537ebc5c5d3460d2e4e62ea74bd571db62c0f9e"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"rustix",
|
"rustix 0.37.6",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -1708,7 +1742,7 @@ checksum = "8d2275aab483050ab2a7364c1a46604865ee7d6906684e08db0f090acf74f9e7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
"syn 2.0.10",
|
"syn 2.0.12",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -1754,7 +1788,6 @@ name = "runtime"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cultivar-common",
|
"cultivar-common",
|
||||||
"cultivar-runtime-interface",
|
|
||||||
"parity-scale-codec",
|
"parity-scale-codec",
|
||||||
"wee_alloc",
|
"wee_alloc",
|
||||||
]
|
]
|
||||||
|
@ -1784,10 +1817,24 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "db4165c9963ab29e422d6c26fbc1d37f15bace6b2810221f9d925023480fcf0e"
|
checksum = "db4165c9963ab29e422d6c26fbc1d37f15bace6b2810221f9d925023480fcf0e"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bitflags",
|
"bitflags",
|
||||||
"errno",
|
"errno 0.2.8",
|
||||||
"io-lifetimes",
|
"io-lifetimes",
|
||||||
"libc",
|
"libc",
|
||||||
"linux-raw-sys",
|
"linux-raw-sys 0.1.4",
|
||||||
|
"windows-sys 0.45.0",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "rustix"
|
||||||
|
version = "0.37.6"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "d097081ed288dfe45699b72f5b5d648e5f15d64d900c7080273baa20c16a6849"
|
||||||
|
dependencies = [
|
||||||
|
"bitflags",
|
||||||
|
"errno 0.3.0",
|
||||||
|
"io-lifetimes",
|
||||||
|
"libc",
|
||||||
|
"linux-raw-sys 0.3.1",
|
||||||
"windows-sys 0.45.0",
|
"windows-sys 0.45.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -1799,9 +1846,9 @@ checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "sc-allocator"
|
name = "sc-allocator"
|
||||||
version = "14.0.0"
|
version = "15.0.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "5aa8784b53aa48736a4df4c351162a63b17e7c28c77b6a2e92dfb9bc49709107"
|
checksum = "55d800c7dae2e3f85f2e9dabc8d34a1ca90dd4060a99bd7eac7ad6a72970de3f"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"log",
|
"log",
|
||||||
"sp-core",
|
"sp-core",
|
||||||
|
@ -1811,9 +1858,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "sc-executor-common"
|
name = "sc-executor-common"
|
||||||
version = "0.20.0"
|
version = "0.21.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "0eff0b3bb1d41ca34481215297090496c35e91c6d66a71e3a26960c8fce917ea"
|
checksum = "4ee5b6752bb44c88e42582ae7c888932c424873c901533bb890491899df88c2d"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"sc-allocator",
|
"sc-allocator",
|
||||||
"sp-maybe-compressed-blob",
|
"sp-maybe-compressed-blob",
|
||||||
|
@ -1825,16 +1872,16 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "sc-executor-wasmtime"
|
name = "sc-executor-wasmtime"
|
||||||
version = "0.20.0"
|
version = "0.21.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "7df03fdc79767bbc993cfcde07a8a09040e60fed1ca7341e3d17fc4c461e8457"
|
checksum = "7c021d59d365f2728e31e8340370b1a1a4cef0f1827a3484cd491c5595d0daf2"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"cfg-if 1.0.0",
|
"cfg-if 1.0.0",
|
||||||
"libc",
|
"libc",
|
||||||
"log",
|
"log",
|
||||||
"once_cell",
|
"once_cell",
|
||||||
"rustix",
|
"rustix 0.36.11",
|
||||||
"sc-allocator",
|
"sc-allocator",
|
||||||
"sc-executor-common",
|
"sc-executor-common",
|
||||||
"sp-runtime-interface",
|
"sp-runtime-interface",
|
||||||
|
@ -1844,9 +1891,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "scale-info"
|
name = "scale-info"
|
||||||
version = "2.4.0"
|
version = "2.5.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "61471dff9096de1d8b2319efed7162081e96793f5ebb147e50db10d50d648a4d"
|
checksum = "0cfdffd972d76b22f3d7f81c8be34b2296afd3a25e0a547bd9abe340a4dbbe97"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bitvec",
|
"bitvec",
|
||||||
"cfg-if 1.0.0",
|
"cfg-if 1.0.0",
|
||||||
|
@ -1857,9 +1904,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "scale-info-derive"
|
name = "scale-info-derive"
|
||||||
version = "2.4.0"
|
version = "2.5.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "219580e803a66b3f05761fd06f1f879a872444e49ce23f73694d26e5a954c7e6"
|
checksum = "61fa974aea2d63dd18a4ec3a49d59af9f34178c73a4f56d2f18205628d00681e"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro-crate",
|
"proc-macro-crate",
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
|
@ -1926,29 +1973,29 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde"
|
name = "serde"
|
||||||
version = "1.0.158"
|
version = "1.0.159"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "771d4d9c4163ee138805e12c710dd365e4f44be8be0503cb1bb9eb989425d9c9"
|
checksum = "3c04e8343c3daeec41f58990b9d77068df31209f2af111e059e9fe9646693065"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"serde_derive",
|
"serde_derive",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde_derive"
|
name = "serde_derive"
|
||||||
version = "1.0.158"
|
version = "1.0.159"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "e801c1712f48475582b7696ac71e0ca34ebb30e09338425384269d9717c62cad"
|
checksum = "4c614d17805b093df4b147b51339e7e44bf05ef59fba1e45d83500bcfb4d8585"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
"syn 2.0.10",
|
"syn 2.0.12",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde_json"
|
name = "serde_json"
|
||||||
version = "1.0.94"
|
version = "1.0.95"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "1c533a59c9d8a93a09c6ab31f0fd5e5f4dd1b8fc9434804029839884765d04ea"
|
checksum = "d721eca97ac802aa7777b701877c8004d950fc142651367300d21c1cc0194744"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"itoa",
|
"itoa",
|
||||||
"ryu",
|
"ryu",
|
||||||
|
@ -2033,9 +2080,9 @@ checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "sp-core"
|
name = "sp-core"
|
||||||
version = "18.0.0"
|
version = "19.0.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "4ea27a1d8de728306d17502ba13127a1b1149c66e0ef348f67dafad630b50c1d"
|
checksum = "0fb48120830bdc61a014827dbb10b6b3a6040f619e2e6aacdf57d3bac381ab06"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"array-bytes",
|
"array-bytes",
|
||||||
"base58",
|
"base58",
|
||||||
|
@ -2077,11 +2124,11 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "sp-core-hashing"
|
name = "sp-core-hashing"
|
||||||
version = "7.0.0"
|
version = "8.0.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "d607f7209b1b9571177fc3722a03312df03606bb65f89317ba686d5fa59d438f"
|
checksum = "27449abdfbe41b473e625bce8113745e81d65777dd1d5a8462cf24137930dad8"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"blake2",
|
"blake2b_simd",
|
||||||
"byteorder",
|
"byteorder",
|
||||||
"digest 0.10.6",
|
"digest 0.10.6",
|
||||||
"sha2 0.10.6",
|
"sha2 0.10.6",
|
||||||
|
@ -2125,9 +2172,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "sp-runtime-interface"
|
name = "sp-runtime-interface"
|
||||||
version = "15.0.0"
|
version = "16.0.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "2446ea08a1ae6dac4218b26e01c7aad6dbf47eb506f4f2b1efa821aa418a07d2"
|
checksum = "ca5d0cd80200bf85b8b064238b2508b69b6146b13adf36066ec5d924825af737"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bytes",
|
"bytes",
|
||||||
"impl-trait-for-tuples",
|
"impl-trait-for-tuples",
|
||||||
|
@ -2190,9 +2237,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "sp-wasm-interface"
|
name = "sp-wasm-interface"
|
||||||
version = "12.0.0"
|
version = "13.0.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "510bdd9ade55508e5aa05b99ab79aaa4b74a1f7476351b6ce0f3aab3b1cb2524"
|
checksum = "153b7374179439e2aa783c66ed439bd86920c67bbc95d34c76390561972bc02f"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"impl-trait-for-tuples",
|
"impl-trait-for-tuples",
|
||||||
|
@ -2262,9 +2309,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "syn"
|
name = "syn"
|
||||||
version = "2.0.10"
|
version = "2.0.12"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "5aad1363ed6d37b84299588d62d3a7d95b5a5c2d9aad5c85609fda12afaa1f40"
|
checksum = "79d9531f94112cfc3e4c8f5f02cb2b58f72c97b7efd85f70203cc6d8efda5927"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
|
@ -2309,7 +2356,7 @@ checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
"syn 2.0.10",
|
"syn 2.0.12",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -2699,7 +2746,7 @@ dependencies = [
|
||||||
"directories-next",
|
"directories-next",
|
||||||
"file-per-thread-logger",
|
"file-per-thread-logger",
|
||||||
"log",
|
"log",
|
||||||
"rustix",
|
"rustix 0.36.11",
|
||||||
"serde",
|
"serde",
|
||||||
"sha2 0.10.6",
|
"sha2 0.10.6",
|
||||||
"toml",
|
"toml",
|
||||||
|
@ -2779,7 +2826,7 @@ checksum = "d0245e8a9347017c7185a72e215218a802ff561545c242953c11ba00fccc930f"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"object",
|
"object",
|
||||||
"once_cell",
|
"once_cell",
|
||||||
"rustix",
|
"rustix 0.36.11",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -2810,7 +2857,7 @@ dependencies = [
|
||||||
"memoffset 0.6.5",
|
"memoffset 0.6.5",
|
||||||
"paste",
|
"paste",
|
||||||
"rand 0.8.5",
|
"rand 0.8.5",
|
||||||
"rustix",
|
"rustix 0.36.11",
|
||||||
"wasmtime-asm-macros",
|
"wasmtime-asm-macros",
|
||||||
"wasmtime-environ",
|
"wasmtime-environ",
|
||||||
"wasmtime-jit-debug",
|
"wasmtime-jit-debug",
|
||||||
|
@ -2991,13 +3038,13 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "zeroize_derive"
|
name = "zeroize_derive"
|
||||||
version = "1.4.0"
|
version = "1.4.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "57090580b8b26d9fd2288c4ac982b3b3c6446cd8e91112bcf672d5ddb2f17441"
|
checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
"syn 2.0.10",
|
"syn 2.0.12",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
|
28
README.md
28
README.md
|
@ -1,3 +1,9 @@
|
||||||
|
# Cultivar
|
||||||
|
|
||||||
|
**Early development**: this is not even a prototype yet. R&D ongoing ;)
|
||||||
|
|
||||||
|
Game where you program the behaviour of the entities. Player's program is executed in a WASM environment.
|
||||||
|
|
||||||
## Idées
|
## Idées
|
||||||
|
|
||||||
Idées pour un jeu comme [LeekWars](https://leekwars.com) :
|
Idées pour un jeu comme [LeekWars](https://leekwars.com) :
|
||||||
|
@ -6,28 +12,6 @@ Idées pour un jeu comme [LeekWars](https://leekwars.com) :
|
||||||
* Ferris
|
* Ferris
|
||||||
* autres mascottes de langages
|
* autres mascottes de langages
|
||||||
|
|
||||||
Nom : Cultivar ou Cultivars
|
|
||||||
|
|
||||||
## Problèmes
|
|
||||||
|
|
||||||
* passer des objets contenant des références ou pointeurs
|
|
||||||
* sandbox sûre
|
|
||||||
* limitation de mémoire et de temps d'exécution (watchdog ?)
|
|
||||||
* isoler les instances d'IA
|
|
||||||
* comment exposer des fonctions de l'hôte avec sc-executor ?
|
|
||||||
* ne pas exposer de fonctions, seulement tout donner en argument et récupérer une liste d'actions ensuite
|
|
||||||
mais c'est gênant pour les fonctions non-déterministes du point de vue du WASM, et il faut que le WASM maintienne l'état du jeu à jour
|
|
||||||
* comment le WASM peut-il appeler des méthodes sur une struct de l'hôte ?
|
|
||||||
* forker sc-executor-wasmtime pour que `create_runtime` prenne `&mut impl HostFunctions` et non juste son type. Mais alors si on veut exposer des méthodes `&self` il faut le refléter dans `#[runtime_interface]` or le WASM ne connaît pas le pointeur vers le `HostFunctions`.
|
|
||||||
* Un wrapper de `HostFunctions` ?
|
|
||||||
* créer une variante de `#[runtime_interface]` qui ajoute qqchose comme `&mut Context` dans les fonctions côté hôte
|
|
||||||
|
|
||||||
* https://github.com/demille/wasm-ffi
|
|
||||||
* https://demille.github.io/wasm-ffi/docs/rust/
|
|
||||||
* http://jakegoulding.com/rust-ffi-omnibus/
|
|
||||||
* refaire wasm-bindgen sans JS ?
|
|
||||||
* sp-runtime-interface mais virer les trucs inutiles
|
|
||||||
|
|
||||||
## Build
|
## Build
|
||||||
|
|
||||||
### Runtime (AI)
|
### Runtime (AI)
|
||||||
|
|
|
@ -6,7 +6,7 @@ edition = "2021"
|
||||||
[dependencies]
|
[dependencies]
|
||||||
num-traits = { version = "0.2.15", default-features = false }
|
num-traits = { version = "0.2.15", default-features = false }
|
||||||
parity-scale-codec = "3.4.0"
|
parity-scale-codec = "3.4.0"
|
||||||
sp-runtime-interface = { version = "15.0.0", default-features = false }
|
sp-runtime-interface = { version = "16.0.0", default-features = false }
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
std = ["sp-runtime-interface/std"]
|
std = ["sp-runtime-interface/std"]
|
||||||
|
|
|
@ -1,5 +0,0 @@
|
||||||
use crate::board::*;
|
|
||||||
|
|
||||||
pub trait Ai {
|
|
||||||
fn run(board: &mut Board);
|
|
||||||
}
|
|
|
@ -1,17 +1,16 @@
|
||||||
|
use crate::prelude::*;
|
||||||
use sp_runtime_interface::runtime_interface;
|
use sp_runtime_interface::runtime_interface;
|
||||||
|
|
||||||
#[runtime_interface]
|
#[runtime_interface]
|
||||||
pub trait Api {
|
pub trait Api {
|
||||||
/*fn print_hello(nb: u32) -> u32 {
|
fn say(msg: &str) {
|
||||||
println!("hello {nb}");
|
unreachable!()
|
||||||
nb + 42
|
|
||||||
}
|
}
|
||||||
|
fn walk(
|
||||||
fn walk(sim_id: SimId, entity_id: EntityId, direction: Direction) {
|
sim_id: SimId,
|
||||||
if let Some(sim) = sims.read().get_mut(&sim_id) {
|
entity_id: EntityId,
|
||||||
if let Some(entity) = sim.entities.get_mut(&entity_id) {
|
direction: Direction,
|
||||||
entity.walk(direction)
|
) -> Result<Result<Position, (Position, WalkError)>, SimError> {
|
||||||
|
unreachable!()
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}*/
|
|
||||||
}
|
}
|
|
@ -1,12 +1,15 @@
|
||||||
use num_traits::{One, Signed, Zero};
|
use num_traits::{One, Signed, Zero};
|
||||||
use parity_scale_codec::{Encode, Decode};
|
use parity_scale_codec::{Decode, Encode};
|
||||||
|
|
||||||
|
pub type Position = (i32, i32);
|
||||||
|
|
||||||
#[derive(Debug, Default)]
|
#[derive(Debug, Default)]
|
||||||
pub struct Board {
|
pub struct Board {
|
||||||
pub size: (usize, usize),
|
pub origin: (i32, i32),
|
||||||
|
pub size: (i32, i32),
|
||||||
}
|
}
|
||||||
|
|
||||||
pub trait Position {
|
pub trait HasPosition {
|
||||||
fn get_position(&self) -> (i32, i32);
|
fn get_position(&self) -> (i32, i32);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
|
pub mod ferris;
|
||||||
|
|
||||||
use crate::prelude::*;
|
use crate::prelude::*;
|
||||||
use crate::std_bis::*;
|
use crate::std_bis::*;
|
||||||
|
|
||||||
pub mod ferris;
|
use parity_scale_codec::{Decode, Encode};
|
||||||
|
|
||||||
pub mod traits {
|
pub mod traits {
|
||||||
use super::*;
|
use super::*;
|
||||||
|
@ -9,14 +11,24 @@ pub mod traits {
|
||||||
pub trait Entity {}
|
pub trait Entity {}
|
||||||
|
|
||||||
pub trait Walker {
|
pub trait Walker {
|
||||||
fn walk(&mut self, board: &Board, direction: Direction);
|
fn walk(
|
||||||
|
&mut self,
|
||||||
|
board: &Board,
|
||||||
|
direction: Direction,
|
||||||
|
) -> Result<Position, (Position, WalkError)>;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
pub enum Entity {
|
pub enum Entity {
|
||||||
Ferris(Box<ferris::Ferris>),
|
Ferris(Box<ferris::Ferris>),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Clone, Debug, Decode, Encode, Eq, PartialEq)]
|
||||||
pub enum WalkError {
|
pub enum WalkError {
|
||||||
OutOfBoard,
|
OutOfBoard,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl sp_runtime_interface::pass_by::PassBy for WalkError {
|
||||||
|
type PassBy = sp_runtime_interface::pass_by::Codec<Self>;
|
||||||
|
}
|
||||||
|
|
|
@ -1,22 +1,38 @@
|
||||||
use super::traits::*;
|
use super::{traits::*, WalkError};
|
||||||
use crate::board::*;
|
use crate::board::*;
|
||||||
|
|
||||||
|
#[derive(Clone, Debug)]
|
||||||
pub struct Ferris {
|
pub struct Ferris {
|
||||||
position: (i32, i32),
|
pub position: (i32, i32),
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Entity for Ferris {}
|
impl Entity for Ferris {}
|
||||||
|
|
||||||
impl Position for Ferris {
|
impl HasPosition for Ferris {
|
||||||
fn get_position(&self) -> (i32, i32) {
|
fn get_position(&self) -> (i32, i32) {
|
||||||
self.position
|
self.position
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Walker for Ferris {
|
impl Walker for Ferris {
|
||||||
fn walk(&mut self, board: &Board, direction: Direction) {
|
fn walk(
|
||||||
|
&mut self,
|
||||||
|
board: &Board,
|
||||||
|
direction: Direction,
|
||||||
|
) -> Result<Position, (Position, WalkError)> {
|
||||||
let dpos = direction.to_position::<i32>();
|
let dpos = direction.to_position::<i32>();
|
||||||
self.position.0 += dpos.0;
|
let new_x = self.position.0.saturating_add(dpos.0);
|
||||||
self.position.1 += dpos.1;
|
let new_y = self.position.1.saturating_add(dpos.1);
|
||||||
|
if new_x >= board.origin.0
|
||||||
|
&& new_x < board.origin.0 + board.size.0
|
||||||
|
&& new_y >= board.origin.1
|
||||||
|
&& new_y < board.origin.1 + board.size.1
|
||||||
|
{
|
||||||
|
self.position.0 = new_x;
|
||||||
|
self.position.1 = new_y;
|
||||||
|
Ok(self.position)
|
||||||
|
} else {
|
||||||
|
Err((self.position, WalkError::OutOfBoard))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
#![cfg_attr(not(feature = "std"), no_std)]
|
#![cfg_attr(not(feature = "std"), no_std)]
|
||||||
|
|
||||||
pub mod ai;
|
|
||||||
#[cfg(not(feature = "std"))]
|
#[cfg(not(feature = "std"))]
|
||||||
pub mod api;
|
pub mod api;
|
||||||
pub mod board;
|
pub mod board;
|
||||||
|
@ -14,35 +13,24 @@ use std_bis::*;
|
||||||
|
|
||||||
pub mod std_bis {
|
pub mod std_bis {
|
||||||
#[cfg(not(feature = "std"))]
|
#[cfg(not(feature = "std"))]
|
||||||
pub use alloc::{boxed::Box, vec, vec::Vec};
|
pub use alloc::{boxed::Box, format, vec, vec::Vec};
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(feature = "std")]
|
#[cfg(feature = "std")]
|
||||||
pub mod prelude {
|
pub mod prelude {
|
||||||
pub use crate::{
|
pub use crate::{
|
||||||
ai::Ai,
|
board::{Board, Direction, Position},
|
||||||
//api::Api,
|
entities::{ferris::Ferris, traits::Walker, Entity, WalkError},
|
||||||
board::{Board, Direction},
|
sim::{EntityId, Sim, SimError, SimId},
|
||||||
entities::{WalkError, Entity, traits::Walker},
|
|
||||||
sim::{Sim, SimId, EntityId},
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(not(feature = "std"))]
|
#[cfg(not(feature = "std"))]
|
||||||
pub mod prelude {
|
pub mod prelude {
|
||||||
pub use crate::{
|
pub use crate::{
|
||||||
ai::Ai,
|
api::api::*,
|
||||||
//api::Api,
|
board::{Board, Direction, Position},
|
||||||
board::{Board, Direction},
|
|
||||||
entities::WalkError,
|
entities::WalkError,
|
||||||
sim::{SimId, EntityId},
|
sim::{EntityId, SimError, SimId},
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
/*#[runtime_interface]
|
|
||||||
pub trait Api {
|
|
||||||
fn foo(a: i32) -> i32 {
|
|
||||||
1.0f32.cos();
|
|
||||||
a.wrapping_add(42)
|
|
||||||
}
|
|
||||||
}*/
|
|
||||||
|
|
|
@ -8,20 +8,45 @@ use std::collections::BTreeMap;
|
||||||
#[derive(Clone, Copy, Debug, Decode, Encode, Eq, Hash, Ord, PartialEq, PartialOrd)]
|
#[derive(Clone, Copy, Debug, Decode, Encode, Eq, Hash, Ord, PartialEq, PartialOrd)]
|
||||||
pub struct SimId(pub [u8; 16]);
|
pub struct SimId(pub [u8; 16]);
|
||||||
|
|
||||||
#[derive(Clone, Copy, Debug, Decode, Encode, Eq, Hash, Ord, PartialEq, PartialOrd)]
|
|
||||||
pub struct EntityId(pub u32);
|
|
||||||
|
|
||||||
impl sp_runtime_interface::pass_by::PassBy for SimId {
|
impl sp_runtime_interface::pass_by::PassBy for SimId {
|
||||||
type PassBy = sp_runtime_interface::pass_by::Codec<Self>;
|
type PassBy = sp_runtime_interface::pass_by::Codec<Self>;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Clone, Copy, Debug, Decode, Encode, Eq, Hash, Ord, PartialEq, PartialOrd)]
|
||||||
|
pub struct EntityId(pub u32);
|
||||||
|
|
||||||
impl sp_runtime_interface::pass_by::PassBy for EntityId {
|
impl sp_runtime_interface::pass_by::PassBy for EntityId {
|
||||||
type PassBy = sp_runtime_interface::pass_by::Codec<Self>;
|
type PassBy = sp_runtime_interface::pass_by::Codec<Self>;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Clone, Debug, Decode, Encode, Eq, PartialEq)]
|
||||||
|
pub enum SimError {
|
||||||
|
EntityNotFound,
|
||||||
|
SimNotFound,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl sp_runtime_interface::pass_by::PassBy for SimError {
|
||||||
|
type PassBy = sp_runtime_interface::pass_by::Codec<Self>;
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(feature = "std")]
|
#[cfg(feature = "std")]
|
||||||
pub struct Sim {
|
pub use sim::*;
|
||||||
|
|
||||||
|
#[cfg(feature = "std")]
|
||||||
|
mod sim {
|
||||||
|
use super::*;
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
pub struct Sim {
|
||||||
pub board: board::Board,
|
pub board: board::Board,
|
||||||
pub entities: BTreeMap<EntityId, entities::Entity>,
|
pub entities: BTreeMap<EntityId, entities::Entity>,
|
||||||
pub entity_counter: u32,
|
pub entity_counter: u32,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Sim {
|
||||||
|
pub fn add_entity(&mut self, entity: entities::Entity) {
|
||||||
|
self.entities.insert(EntityId(self.entity_counter), entity);
|
||||||
|
self.entity_counter += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,10 +9,10 @@ cultivar-common = { path = "../common", features = ["std"] }
|
||||||
once_cell = "1.17.1"
|
once_cell = "1.17.1"
|
||||||
parity-scale-codec = "3.4.0"
|
parity-scale-codec = "3.4.0"
|
||||||
parking_lot = "0.12.1"
|
parking_lot = "0.12.1"
|
||||||
sc-executor-common = "0.20.0"
|
sc-executor-common = "0.21.0"
|
||||||
sc-executor-wasmtime = "0.20.0"
|
sc-executor-wasmtime = "0.21.0"
|
||||||
sp-runtime-interface = { version = "15.0.0", default-features = false, features = ["std"] }
|
sp-runtime-interface = { version = "16.0.0", default-features = false, features = ["std"] }
|
||||||
sp-wasm-interface = "12.0.0"
|
sp-wasm-interface = "13.0.0"
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
default = ["std"]
|
default = ["std"]
|
||||||
|
|
|
@ -1,23 +1,31 @@
|
||||||
use crate::{sims};
|
use crate::SIMS;
|
||||||
use cultivar_common::prelude::*;
|
use cultivar_common::prelude::*;
|
||||||
|
|
||||||
use sp_runtime_interface::runtime_interface;
|
use sp_runtime_interface::runtime_interface;
|
||||||
|
|
||||||
|
#[allow(dead_code)]
|
||||||
#[runtime_interface]
|
#[runtime_interface]
|
||||||
pub trait Api {
|
pub trait Api {
|
||||||
fn print_hello(nb: u32) -> u32 {
|
fn say(msg: &str) {
|
||||||
println!("hello {nb}");
|
println!("{msg}");
|
||||||
nb + 42
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn walk(sim_id: SimId, entity_id: EntityId, direction: Direction) {
|
fn walk(
|
||||||
if let Some(mut sim) = (*sims.write()).sims.get_mut(&sim_id) {
|
sim_id: SimId,
|
||||||
|
entity_id: EntityId,
|
||||||
|
direction: Direction,
|
||||||
|
) -> Result<Result<Position, (Position, WalkError)>, SimError> {
|
||||||
|
if let Some(mut sim) = SIMS.write().sims.get_mut(&sim_id) {
|
||||||
let sim = sim.value_mut();
|
let sim = sim.value_mut();
|
||||||
if let Some(entity) = sim.entities.get_mut(&entity_id) {
|
if let Some(entity) = sim.entities.get_mut(&entity_id) {
|
||||||
match entity {
|
match entity {
|
||||||
Entity::Ferris(entity) => entity.walk(&sim.board, direction)
|
Entity::Ferris(entity) => Ok(entity.walk(&sim.board, direction)),
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
Err(SimError::EntityNotFound)
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
Err(SimError::SimNotFound)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -7,84 +7,25 @@ use once_cell::sync::Lazy;
|
||||||
use parity_scale_codec::Encode;
|
use parity_scale_codec::Encode;
|
||||||
use parking_lot::RwLock;
|
use parking_lot::RwLock;
|
||||||
use sc_executor_common::wasm_runtime::WasmModule;
|
use sc_executor_common::wasm_runtime::WasmModule;
|
||||||
use sp_wasm_interface::{Function, FunctionContext, HostFunctions, Signature};
|
|
||||||
use std::cell::Cell;
|
|
||||||
|
|
||||||
static sims: Lazy<RwLock<sim::Sims>> = Lazy::new(|| RwLock::new(sim::Sims::new()));
|
static SIMS: Lazy<RwLock<sim::Sims>> = Lazy::new(|| RwLock::new(sim::Sims::new()));
|
||||||
|
|
||||||
/*use sp_runtime_interface::runtime_interface;
|
|
||||||
|
|
||||||
#[runtime_interface]
|
|
||||||
pub trait Api {
|
|
||||||
/*fn print_hello(nb: u32) -> u32 {
|
|
||||||
println!("hello {nb}");
|
|
||||||
nb + 42
|
|
||||||
}
|
|
||||||
|
|
||||||
fn walk(sim_id: SimId, entity_id: EntityId, direction: Direction) {
|
|
||||||
if let Some(sim) = sims.read().get_mut(&sim_id) {
|
|
||||||
if let Some(entity) = sim.entities.get_mut(&entity_id) {
|
|
||||||
entity.walk(direction)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}*/
|
|
||||||
}*/
|
|
||||||
|
|
||||||
/*struct FungiHostFunctions;
|
|
||||||
|
|
||||||
impl HostFunctions for FungiHostFunctions {
|
|
||||||
fn host_functions() -> Vec<&'static dyn Function> {
|
|
||||||
vec![
|
|
||||||
&FooFunction
|
|
||||||
]
|
|
||||||
}
|
|
||||||
fn register_static<T>(registry: &mut T) -> Result<(), T::Error>
|
|
||||||
where T: HostFunctionRegistry {
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
struct FooFunction;
|
|
||||||
|
|
||||||
impl Function for FooFunction {
|
|
||||||
fn name(&self) -> &str {
|
|
||||||
"foo"
|
|
||||||
}
|
|
||||||
|
|
||||||
fn signature(&self) -> Signature {
|
|
||||||
Signature {
|
|
||||||
args: std::borrow::Cow::from(&vec![]),
|
|
||||||
return_value: Some(sp_wasm_interface::ValueType::I32)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn execute(&self, context: &mut dyn FunctionContext,args: &mut dyn Iterator<Item = sp_wasm_interface::Value>
|
|
||||||
) -> sp_wasm_interface::Result<Option<sp_wasm_interface::Value>> {
|
|
||||||
Ok(None)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn foo() -> u8 {
|
|
||||||
44
|
|
||||||
}*/
|
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let sim_id = {
|
let mut sim = Sim {
|
||||||
sims.read().new_sim(Sim {
|
|
||||||
board: Board {
|
board: Board {
|
||||||
size: (4, 4)
|
origin: (0, 0),
|
||||||
|
size: (4, 4),
|
||||||
},
|
},
|
||||||
entities: Default::default(),
|
entities: Default::default(),
|
||||||
entity_counter: 0,
|
entity_counter: 0,
|
||||||
})
|
|
||||||
};
|
};
|
||||||
|
sim.add_entity(Entity::Ferris(Box::new(Ferris { position: (0, 0) })));
|
||||||
|
let sim_id = SIMS.read().new_sim(sim);
|
||||||
|
|
||||||
let ai_code = std::fs::read("target/wasm32-unknown-unknown/release/runtime.wasm")
|
let ai_code = std::fs::read("target/wasm32-unknown-unknown/release/runtime.wasm")
|
||||||
.expect("Cannot read runtime file");
|
.expect("Cannot read runtime file");
|
||||||
|
|
||||||
/*let runtime = sc_executor_wasmtime::create_runtime::<
|
let runtime = sc_executor_wasmtime::create_runtime::<api::api::HostFunctions>(
|
||||||
api::api::ApiHostFunctions,
|
|
||||||
>(
|
|
||||||
sc_executor_common::runtime_blob::RuntimeBlob::new(&ai_code).unwrap(),
|
sc_executor_common::runtime_blob::RuntimeBlob::new(&ai_code).unwrap(),
|
||||||
sc_executor_wasmtime::Config {
|
sc_executor_wasmtime::Config {
|
||||||
allow_missing_func_imports: false,
|
allow_missing_func_imports: false,
|
||||||
|
@ -108,9 +49,9 @@ fn main() {
|
||||||
|
|
||||||
let mut instance = runtime.new_instance().unwrap();
|
let mut instance = runtime.new_instance().unwrap();
|
||||||
|
|
||||||
dbg!(instance
|
dbg!(instance.call_export("run", &sim_id.encode()).unwrap());
|
||||||
.call_export("run", &sim_id.encode())
|
|
||||||
.unwrap());*/
|
dbg!(SIMS.read().sims.remove(&sim_id));
|
||||||
|
|
||||||
/*let mut state = ();
|
/*let mut state = ();
|
||||||
let mut env = sp_sandbox::EnvironmentDefinitionBuilder::new();
|
let mut env = sp_sandbox::EnvironmentDefinitionBuilder::new();
|
||||||
|
|
|
@ -7,5 +7,5 @@ edition = "2021"
|
||||||
proc-macro = true
|
proc-macro = true
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
quote = "1.0.23"
|
quote = "1.0.26"
|
||||||
syn = { version = "1.0.109", features = [ "full" ] }
|
syn = { version = "1.0.109", features = [ "full" ] }
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
//#![feature(core_intrinsics)]
|
//#![feature(core_intrinsics)]
|
||||||
//#![feature(alloc_error_handler)]
|
//#![feature(alloc_error_handler)]
|
||||||
|
|
||||||
use fungi_common::prelude::*;
|
use cultivar_common::prelude::*;
|
||||||
|
|
||||||
/*#[panic_handler]
|
/*#[panic_handler]
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
|
|
|
@ -13,6 +13,6 @@ crate-type = ["cdylib", "staticlib"]
|
||||||
[dependencies]
|
[dependencies]
|
||||||
#dlmalloc = { version = "0.2.4", features = ["global"] }
|
#dlmalloc = { version = "0.2.4", features = ["global"] }
|
||||||
cultivar-common = { path = "../common" }
|
cultivar-common = { path = "../common" }
|
||||||
cultivar-runtime-interface = { path = "../runtime-interface" }
|
#cultivar-runtime-interface = { path = "../runtime-interface" }
|
||||||
parity-scale-codec = "3.4.0"
|
parity-scale-codec = "3.4.0"
|
||||||
wee_alloc = "0.4.5"
|
wee_alloc = "0.4.5"
|
||||||
|
|
|
@ -1,27 +1,19 @@
|
||||||
#![feature(vec_into_raw_parts)]
|
#![feature(vec_into_raw_parts)]
|
||||||
#![no_std]
|
#![no_std]
|
||||||
|
|
||||||
use core::alloc::GlobalAlloc;
|
use cultivar_common::{prelude::*, std_bis::*};
|
||||||
use fungi_common::{prelude::*, std_bis::*};
|
//use cultivar_runtime_interface::prelude::*;
|
||||||
use fungi_runtime_interface::prelude::*;
|
|
||||||
use parity_scale_codec::Decode;
|
use parity_scale_codec::Decode;
|
||||||
//use fungi_runtime_interface::*;
|
|
||||||
|
|
||||||
#[global_allocator]
|
#[global_allocator]
|
||||||
static ALLOC: wee_alloc::WeeAlloc = wee_alloc::WeeAlloc::INIT;
|
static ALLOC: wee_alloc::WeeAlloc = wee_alloc::WeeAlloc::INIT;
|
||||||
//static ALLOC: dlmalloc::GlobalDlmalloc = dlmalloc::GlobalDlmalloc;
|
//static ALLOC: dlmalloc::GlobalDlmalloc = dlmalloc::GlobalDlmalloc;
|
||||||
|
|
||||||
struct MyAi {}
|
|
||||||
|
|
||||||
/*impl Ai for MyAi {
|
|
||||||
fn run(_board: &mut Board) {}
|
|
||||||
}*/
|
|
||||||
|
|
||||||
/// # Safety
|
/// # Safety
|
||||||
/// The pointer given in argument must be valid, or undefined data will be read.
|
/// The pointer given in argument must be valid, or undefined data will be read.
|
||||||
#[export_name = "run"]
|
#[export_name = "run"]
|
||||||
pub unsafe fn run(ptr: *mut u8, len: usize) -> u64 {
|
pub unsafe fn run(ptr: *mut u8, len: usize) -> u64 {
|
||||||
let mut data = unsafe { Vec::from_raw_parts(ptr, len, len) };
|
let data = unsafe { Vec::from_raw_parts(ptr, len, len) };
|
||||||
|
|
||||||
let sim_id = SimId::decode(&mut &data[..]).unwrap();
|
let sim_id = SimId::decode(&mut &data[..]).unwrap();
|
||||||
|
|
||||||
|
@ -32,5 +24,5 @@ pub unsafe fn run(ptr: *mut u8, len: usize) -> u64 {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn run_inner(sim_id: SimId) {
|
fn run_inner(sim_id: SimId) {
|
||||||
fungi_common::api::walk(sim_id, EntityId(0), Direction::East);
|
say(&format!("{:?}", walk(sim_id, EntityId(0), Direction::East)));
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue