mirror of
https://github.com/logos-blockchain/logos-sql-zone.git
synced 2026-06-07 02:09:43 +00:00
updated to work with latest node version
This commit is contained in:
parent
e88dff6f8c
commit
4032725a53
406
Cargo.lock
generated
406
Cargo.lock
generated
@ -115,7 +115,7 @@ version = "1.1.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc"
|
||||
dependencies = [
|
||||
"windows-sys 0.61.2",
|
||||
"windows-sys 0.60.2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -126,7 +126,7 @@ checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d"
|
||||
dependencies = [
|
||||
"anstyle",
|
||||
"once_cell_polyfill",
|
||||
"windows-sys 0.61.2",
|
||||
"windows-sys 0.60.2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -580,19 +580,6 @@ checksum = "86887daca11d02e0b04f37a9cb81888aae881397fb48ff66494e356aea97554a"
|
||||
dependencies = [
|
||||
"itertools 0.10.5",
|
||||
"lazy_static",
|
||||
"rand 0.8.5",
|
||||
"serde",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "async-channel"
|
||||
version = "1.9.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35"
|
||||
dependencies = [
|
||||
"concurrent-queue",
|
||||
"event-listener 2.5.3",
|
||||
"futures-core",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -607,46 +594,6 @@ dependencies = [
|
||||
"pin-project-lite",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "async-executor"
|
||||
version = "1.14.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c96bf972d85afc50bf5ab8fe2d54d1586b4e0b46c97c50a0c9e71e2f7bcd812a"
|
||||
dependencies = [
|
||||
"async-task",
|
||||
"concurrent-queue",
|
||||
"fastrand",
|
||||
"futures-lite",
|
||||
"pin-project-lite",
|
||||
"slab",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "async-fs"
|
||||
version = "2.2.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8034a681df4aed8b8edbd7fbe472401ecf009251c8b40556b304567052e294c5"
|
||||
dependencies = [
|
||||
"async-lock",
|
||||
"blocking",
|
||||
"futures-lite",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "async-global-executor"
|
||||
version = "2.4.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "05b1b633a2115cd122d73b955eadd9916c18c8f510ec9cd1686404c60ad1c29c"
|
||||
dependencies = [
|
||||
"async-channel 2.5.0",
|
||||
"async-executor",
|
||||
"async-io",
|
||||
"async-lock",
|
||||
"blocking",
|
||||
"futures-lite",
|
||||
"once_cell",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "async-io"
|
||||
version = "2.6.0"
|
||||
@ -665,46 +612,6 @@ dependencies = [
|
||||
"windows-sys 0.61.2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "async-lock"
|
||||
version = "3.4.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "290f7f2596bd5b78a9fec8088ccd89180d7f9f55b94b0576823bbbdc72ee8311"
|
||||
dependencies = [
|
||||
"event-listener 5.4.1",
|
||||
"event-listener-strategy",
|
||||
"pin-project-lite",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "async-net"
|
||||
version = "2.0.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b948000fad4873c1c9339d60f2623323a0cfd3816e5181033c6a5cb68b2accf7"
|
||||
dependencies = [
|
||||
"async-io",
|
||||
"blocking",
|
||||
"futures-lite",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "async-process"
|
||||
version = "2.5.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "fc50921ec0055cdd8a16de48773bfeec5c972598674347252c0399676be7da75"
|
||||
dependencies = [
|
||||
"async-channel 2.5.0",
|
||||
"async-io",
|
||||
"async-lock",
|
||||
"async-signal",
|
||||
"async-task",
|
||||
"blocking",
|
||||
"cfg-if",
|
||||
"event-listener 5.4.1",
|
||||
"futures-lite",
|
||||
"rustix 1.1.4",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "async-recursion"
|
||||
version = "1.1.1"
|
||||
@ -716,56 +623,6 @@ dependencies = [
|
||||
"syn 2.0.117",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "async-signal"
|
||||
version = "0.2.13"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "43c070bbf59cd3570b6b2dd54cd772527c7c3620fce8be898406dd3ed6adc64c"
|
||||
dependencies = [
|
||||
"async-io",
|
||||
"async-lock",
|
||||
"atomic-waker",
|
||||
"cfg-if",
|
||||
"futures-core",
|
||||
"futures-io",
|
||||
"rustix 1.1.4",
|
||||
"signal-hook-registry",
|
||||
"slab",
|
||||
"windows-sys 0.61.2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "async-std"
|
||||
version = "1.13.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2c8e079a4ab67ae52b7403632e4618815d6db36d2a010cfe41b02c1b1578f93b"
|
||||
dependencies = [
|
||||
"async-channel 1.9.0",
|
||||
"async-global-executor",
|
||||
"async-io",
|
||||
"async-lock",
|
||||
"crossbeam-utils",
|
||||
"futures-channel",
|
||||
"futures-core",
|
||||
"futures-io",
|
||||
"futures-lite",
|
||||
"gloo-timers",
|
||||
"kv-log-macro",
|
||||
"log",
|
||||
"memchr",
|
||||
"once_cell",
|
||||
"pin-project-lite",
|
||||
"pin-utils",
|
||||
"slab",
|
||||
"wasm-bindgen-futures",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "async-task"
|
||||
version = "4.7.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de"
|
||||
|
||||
[[package]]
|
||||
name = "async-trait"
|
||||
version = "0.1.89"
|
||||
@ -885,7 +742,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "cffb0e931875b666fc4fcb20fee52e9bbd1ef836fd9e9e04ec21555f9f85f7ef"
|
||||
dependencies = [
|
||||
"fastrand",
|
||||
"gloo-timers",
|
||||
"tokio",
|
||||
]
|
||||
|
||||
@ -1022,19 +878,6 @@ dependencies = [
|
||||
"generic-array 0.14.7",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "blocking"
|
||||
version = "1.6.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e83f8d02be6967315521be875afa792a316e28d57b5a2d401897e2a7921b7f21"
|
||||
dependencies = [
|
||||
"async-channel 2.5.0",
|
||||
"async-task",
|
||||
"futures-io",
|
||||
"futures-lite",
|
||||
"piper",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "bs58"
|
||||
version = "0.5.1"
|
||||
@ -1141,17 +984,6 @@ version = "0.2.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724"
|
||||
|
||||
[[package]]
|
||||
name = "cfg_eval"
|
||||
version = "0.1.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "45565fc9416b9896014f5732ac776f810ee53a66730c17e4020c3ec064a8f88f"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 2.0.117",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "chacha20"
|
||||
version = "0.9.1"
|
||||
@ -1348,6 +1180,15 @@ version = "0.4.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2f421161cb492475f1661ddc9815a745a1c894592070661180fdec3d4872e9c3"
|
||||
|
||||
[[package]]
|
||||
name = "convert_case"
|
||||
version = "0.6.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ec182b0ca2f35d8fc196cf3404988fd8b8c739a4d270ff118a398feb0cbec1ca"
|
||||
dependencies = [
|
||||
"unicode-segmentation",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "convert_case"
|
||||
version = "0.8.0"
|
||||
@ -1644,7 +1485,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7ab67060fc6b8ef687992d439ca0fa36e7ed17e9a0b16b25b601e8757df720de"
|
||||
dependencies = [
|
||||
"data-encoding",
|
||||
"syn 2.0.117",
|
||||
"syn 1.0.109",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -1708,6 +1549,7 @@ dependencies = [
|
||||
"chrono",
|
||||
"crypto-common",
|
||||
"directories",
|
||||
"logos-blockchain-core",
|
||||
"logos-blockchain-zone-sdk",
|
||||
"nanosql",
|
||||
"rand 0.9.2",
|
||||
@ -1889,7 +1731,7 @@ dependencies = [
|
||||
"libc",
|
||||
"option-ext",
|
||||
"redox_users",
|
||||
"windows-sys 0.61.2",
|
||||
"windows-sys 0.59.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -2097,7 +1939,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb"
|
||||
dependencies = [
|
||||
"libc",
|
||||
"windows-sys 0.61.2",
|
||||
"windows-sys 0.52.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -2106,12 +1948,6 @@ version = "3.3.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "dea2df4cf52843e0452895c455a1a2cfbb842a1e7329671acf418fdc53ed4c59"
|
||||
|
||||
[[package]]
|
||||
name = "event-listener"
|
||||
version = "2.5.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0"
|
||||
|
||||
[[package]]
|
||||
name = "event-listener"
|
||||
version = "5.4.1"
|
||||
@ -2129,7 +1965,7 @@ version = "0.5.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93"
|
||||
dependencies = [
|
||||
"event-listener 5.4.1",
|
||||
"event-listener",
|
||||
"pin-project-lite",
|
||||
]
|
||||
|
||||
@ -2330,10 +2166,7 @@ version = "2.6.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f78e10609fe0e0b3f4157ffab1876319b5b0db102a2c60dc4626306dc46b44ad"
|
||||
dependencies = [
|
||||
"fastrand",
|
||||
"futures-core",
|
||||
"futures-io",
|
||||
"parking",
|
||||
"pin-project-lite",
|
||||
]
|
||||
|
||||
@ -2479,18 +2312,6 @@ version = "0.3.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280"
|
||||
|
||||
[[package]]
|
||||
name = "gloo-timers"
|
||||
version = "0.3.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "bbb143cf96099802033e0d4f4963b19fd2e0b728bcf076cd9cf7f6634f092994"
|
||||
dependencies = [
|
||||
"futures-channel",
|
||||
"futures-core",
|
||||
"js-sys",
|
||||
"wasm-bindgen",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "group"
|
||||
version = "0.13.0"
|
||||
@ -3010,7 +2831,6 @@ dependencies = [
|
||||
"netlink-proto",
|
||||
"netlink-sys",
|
||||
"rtnetlink",
|
||||
"smol",
|
||||
"system-configuration 0.7.0",
|
||||
"tokio",
|
||||
"windows",
|
||||
@ -3176,7 +2996,7 @@ checksum = "3640c1c38b8e4e43584d8df18be5fc6b0aa314ce6ebf51b53313d4306cca8e46"
|
||||
dependencies = [
|
||||
"hermit-abi",
|
||||
"libc",
|
||||
"windows-sys 0.61.2",
|
||||
"windows-sys 0.52.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -3288,15 +3108,6 @@ dependencies = [
|
||||
"cpufeatures",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "kv-log-macro"
|
||||
version = "1.0.7"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0de8b303297635ad57c9f5059fd9cee7a47f8e8daa09df0fcd07dd39fb22977f"
|
||||
dependencies = [
|
||||
"log",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "lazy_static"
|
||||
version = "1.5.0"
|
||||
@ -3457,7 +3268,7 @@ version = "0.48.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d558548fa3b5a8e9b66392f785921e363c57c05dcadfda4db0d41ae82d313e4a"
|
||||
dependencies = [
|
||||
"async-channel 2.5.0",
|
||||
"async-channel",
|
||||
"asynchronous-codec",
|
||||
"base64",
|
||||
"byteorder",
|
||||
@ -3665,7 +3476,6 @@ version = "0.46.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "803399b4b6f68adb85e63ab573ac568154b193e9a640f03e0f2890eabbcb37f8"
|
||||
dependencies = [
|
||||
"async-std",
|
||||
"either",
|
||||
"fnv",
|
||||
"futures",
|
||||
@ -3719,7 +3529,6 @@ version = "0.43.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "65346fb4d36035b23fec4e7be4c320436ba53537ce9b6be1d1db1f70c905cad0"
|
||||
dependencies = [
|
||||
"async-io",
|
||||
"futures",
|
||||
"futures-timer",
|
||||
"if-watch",
|
||||
@ -3867,9 +3676,6 @@ name = "log"
|
||||
version = "0.4.29"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897"
|
||||
dependencies = [
|
||||
"value-bag",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "logos-blockchain-blend-crypto"
|
||||
@ -3882,7 +3688,7 @@ dependencies = [
|
||||
"logos-blockchain-utils",
|
||||
"num-bigint",
|
||||
"rs-merkle-tree",
|
||||
"thiserror 1.0.69",
|
||||
"thiserror 2.0.18",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -3898,12 +3704,13 @@ dependencies = [
|
||||
"logos-blockchain-core",
|
||||
"logos-blockchain-groth16",
|
||||
"logos-blockchain-key-management-system-keys",
|
||||
"logos-blockchain-log-targets",
|
||||
"logos-blockchain-utils",
|
||||
"serde",
|
||||
"serde-big-array",
|
||||
"serde_with",
|
||||
"test-log",
|
||||
"thiserror 1.0.69",
|
||||
"thiserror 2.0.18",
|
||||
"tracing",
|
||||
"zeroize",
|
||||
]
|
||||
@ -3922,10 +3729,11 @@ dependencies = [
|
||||
"logos-blockchain-key-management-system-keys",
|
||||
"logos-blockchain-pol",
|
||||
"logos-blockchain-poq",
|
||||
"logos-blockchain-poseidon2",
|
||||
"logos-blockchain-utils",
|
||||
"num-bigint",
|
||||
"serde",
|
||||
"thiserror 1.0.69",
|
||||
"thiserror 2.0.18",
|
||||
"zeroize",
|
||||
]
|
||||
|
||||
@ -3950,6 +3758,7 @@ version = "0.2.1"
|
||||
dependencies = [
|
||||
"async-trait",
|
||||
"bytes",
|
||||
"derivative",
|
||||
"futures",
|
||||
"logos-blockchain-chain-broadcast-service",
|
||||
"logos-blockchain-core",
|
||||
@ -3965,14 +3774,14 @@ dependencies = [
|
||||
"logos-blockchain-tracing",
|
||||
"logos-blockchain-utils",
|
||||
"logos-blockchain-utxotree",
|
||||
"num-bigint",
|
||||
"overwatch",
|
||||
"rand 0.8.5",
|
||||
"serde",
|
||||
"serde_with",
|
||||
"strum 0.27.2",
|
||||
"tempfile",
|
||||
"thiserror 1.0.69",
|
||||
"thiserror 2.0.18",
|
||||
"time",
|
||||
"tokio",
|
||||
"tracing",
|
||||
"tracing-futures",
|
||||
@ -4000,6 +3809,7 @@ version = "0.2.1"
|
||||
dependencies = [
|
||||
"futures",
|
||||
"hex",
|
||||
"log",
|
||||
"logos-blockchain-chain-broadcast-service",
|
||||
"logos-blockchain-chain-service",
|
||||
"logos-blockchain-core",
|
||||
@ -4009,7 +3819,8 @@ dependencies = [
|
||||
"reqwest",
|
||||
"serde",
|
||||
"serde_json",
|
||||
"thiserror 1.0.69",
|
||||
"thiserror 2.0.18",
|
||||
"tokio-util",
|
||||
"url",
|
||||
]
|
||||
|
||||
@ -4030,6 +3841,7 @@ dependencies = [
|
||||
"logos-blockchain-cryptarchia-engine",
|
||||
"logos-blockchain-groth16",
|
||||
"logos-blockchain-key-management-system-keys",
|
||||
"logos-blockchain-mmr",
|
||||
"logos-blockchain-poc",
|
||||
"logos-blockchain-pol",
|
||||
"logos-blockchain-poseidon2",
|
||||
@ -4039,10 +3851,12 @@ dependencies = [
|
||||
"nom 8.0.0",
|
||||
"num-bigint",
|
||||
"rand 0.8.5",
|
||||
"rpds",
|
||||
"serde",
|
||||
"serde_json",
|
||||
"strum 0.27.2",
|
||||
"thiserror 1.0.69",
|
||||
"thiserror 2.0.18",
|
||||
"time",
|
||||
"tokio",
|
||||
"tracing",
|
||||
]
|
||||
@ -4051,12 +3865,11 @@ dependencies = [
|
||||
name = "logos-blockchain-cryptarchia-engine"
|
||||
version = "0.2.1"
|
||||
dependencies = [
|
||||
"cfg_eval",
|
||||
"logos-blockchain-pol",
|
||||
"logos-blockchain-utils",
|
||||
"serde",
|
||||
"serde_with",
|
||||
"thiserror 1.0.69",
|
||||
"thiserror 2.0.18",
|
||||
"time",
|
||||
"tokio",
|
||||
"tracing",
|
||||
@ -4076,7 +3889,7 @@ dependencies = [
|
||||
"rand 0.8.5",
|
||||
"serde",
|
||||
"serde_with",
|
||||
"thiserror 1.0.69",
|
||||
"thiserror 2.0.18",
|
||||
"tokio",
|
||||
"tracing",
|
||||
]
|
||||
@ -4130,8 +3943,11 @@ dependencies = [
|
||||
"logos-blockchain-utils",
|
||||
"logos-blockchain-zksign",
|
||||
"num-bigint",
|
||||
"rand 0.8.5",
|
||||
"rand_core 0.6.4",
|
||||
"serde",
|
||||
"serde_json",
|
||||
"serde_yaml",
|
||||
"subtle",
|
||||
"thiserror 2.0.18",
|
||||
"tokio",
|
||||
@ -4196,6 +4012,7 @@ dependencies = [
|
||||
"logos-blockchain-cryptarchia-engine",
|
||||
"logos-blockchain-groth16",
|
||||
"logos-blockchain-key-management-system-keys",
|
||||
"logos-blockchain-mmr",
|
||||
"logos-blockchain-pol",
|
||||
"logos-blockchain-utils",
|
||||
"logos-blockchain-utxotree",
|
||||
@ -4204,7 +4021,7 @@ dependencies = [
|
||||
"rpds",
|
||||
"serde",
|
||||
"serde_arrays",
|
||||
"thiserror 1.0.69",
|
||||
"thiserror 2.0.18",
|
||||
"tracing",
|
||||
]
|
||||
|
||||
@ -4231,13 +4048,43 @@ dependencies = [
|
||||
"serde",
|
||||
"serde_json",
|
||||
"serde_with",
|
||||
"thiserror 1.0.69",
|
||||
"thiserror 2.0.18",
|
||||
"tokio",
|
||||
"tracing",
|
||||
"tracing-subscriber 0.3.23",
|
||||
"zerocopy",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "logos-blockchain-log-targets"
|
||||
version = "0.2.1"
|
||||
dependencies = [
|
||||
"logos-blockchain-log-targets-macros",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "logos-blockchain-log-targets-macros"
|
||||
version = "0.2.1"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 2.0.117",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "logos-blockchain-mmr"
|
||||
version = "0.2.1"
|
||||
dependencies = [
|
||||
"ark-ff 0.4.2",
|
||||
"logos-blockchain-groth16",
|
||||
"logos-blockchain-poseidon2",
|
||||
"proptest",
|
||||
"proptest-macro",
|
||||
"rpds",
|
||||
"serde",
|
||||
"thiserror 2.0.18",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "logos-blockchain-network-service"
|
||||
version = "0.2.1"
|
||||
@ -4268,11 +4115,11 @@ dependencies = [
|
||||
"logos-blockchain-circuits-prover",
|
||||
"logos-blockchain-circuits-utils",
|
||||
"logos-blockchain-groth16",
|
||||
"logos-blockchain-proofs-error",
|
||||
"logos-blockchain-witness-generator",
|
||||
"num-bigint",
|
||||
"serde",
|
||||
"serde_json",
|
||||
"thiserror 2.0.18",
|
||||
"tracing",
|
||||
]
|
||||
|
||||
@ -4284,13 +4131,13 @@ dependencies = [
|
||||
"logos-blockchain-circuits-prover",
|
||||
"logos-blockchain-circuits-utils",
|
||||
"logos-blockchain-groth16",
|
||||
"logos-blockchain-proofs-error",
|
||||
"logos-blockchain-utils",
|
||||
"logos-blockchain-witness-generator",
|
||||
"num-bigint",
|
||||
"num-traits",
|
||||
"serde",
|
||||
"serde_json",
|
||||
"thiserror 2.0.18",
|
||||
"tracing",
|
||||
]
|
||||
|
||||
@ -4302,6 +4149,7 @@ dependencies = [
|
||||
"logos-blockchain-circuits-utils",
|
||||
"logos-blockchain-groth16",
|
||||
"logos-blockchain-pol",
|
||||
"logos-blockchain-proofs-error",
|
||||
"logos-blockchain-utils",
|
||||
"logos-blockchain-witness-generator",
|
||||
"num-bigint",
|
||||
@ -4321,6 +4169,15 @@ dependencies = [
|
||||
"num-bigint",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "logos-blockchain-proofs-error"
|
||||
version = "0.2.1"
|
||||
dependencies = [
|
||||
"logos-blockchain-groth16",
|
||||
"serde_json",
|
||||
"thiserror 2.0.18",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "logos-blockchain-services-utils"
|
||||
version = "0.2.1"
|
||||
@ -4332,7 +4189,7 @@ dependencies = [
|
||||
"overwatch-derive",
|
||||
"serde",
|
||||
"serde_json",
|
||||
"thiserror 1.0.69",
|
||||
"thiserror 2.0.18",
|
||||
"tokio",
|
||||
"tracing",
|
||||
]
|
||||
@ -4351,7 +4208,7 @@ dependencies = [
|
||||
"rocksdb",
|
||||
"serde",
|
||||
"tempfile",
|
||||
"thiserror 1.0.69",
|
||||
"thiserror 2.0.18",
|
||||
"tokio",
|
||||
"tracing",
|
||||
]
|
||||
@ -4361,7 +4218,6 @@ name = "logos-blockchain-time-service"
|
||||
version = "0.2.1"
|
||||
dependencies = [
|
||||
"async-trait",
|
||||
"cfg_eval",
|
||||
"futures",
|
||||
"log",
|
||||
"logos-blockchain-cryptarchia-engine",
|
||||
@ -4382,6 +4238,8 @@ dependencies = [
|
||||
name = "logos-blockchain-tracing"
|
||||
version = "0.2.1"
|
||||
dependencies = [
|
||||
"flate2",
|
||||
"logos-blockchain-log-targets",
|
||||
"opentelemetry",
|
||||
"opentelemetry-appender-tracing",
|
||||
"opentelemetry-http",
|
||||
@ -4391,6 +4249,7 @@ dependencies = [
|
||||
"rand 0.8.5",
|
||||
"serde",
|
||||
"tokio",
|
||||
"tonic",
|
||||
"tracing",
|
||||
"tracing-appender",
|
||||
"tracing-gelf",
|
||||
@ -4417,6 +4276,9 @@ dependencies = [
|
||||
"serde",
|
||||
"serde_json",
|
||||
"serde_with",
|
||||
"serde_yaml",
|
||||
"tempfile",
|
||||
"thiserror 2.0.18",
|
||||
"time",
|
||||
"tokio",
|
||||
]
|
||||
@ -4431,10 +4293,10 @@ dependencies = [
|
||||
"num-bigint",
|
||||
"quickcheck",
|
||||
"quickcheck_macros",
|
||||
"rand 0.9.2",
|
||||
"rand 0.8.5",
|
||||
"rpds",
|
||||
"serde",
|
||||
"thiserror 1.0.69",
|
||||
"thiserror 2.0.18",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -4452,6 +4314,7 @@ dependencies = [
|
||||
"logos-blockchain-circuits-utils",
|
||||
"logos-blockchain-groth16",
|
||||
"logos-blockchain-poseidon2",
|
||||
"logos-blockchain-proofs-error",
|
||||
"logos-blockchain-witness-generator",
|
||||
"num-bigint",
|
||||
"rand 0.8.5",
|
||||
@ -4467,10 +4330,13 @@ version = "0.2.1"
|
||||
dependencies = [
|
||||
"async-trait",
|
||||
"futures",
|
||||
"hex",
|
||||
"logos-blockchain-common-http-client",
|
||||
"logos-blockchain-core",
|
||||
"logos-blockchain-groth16",
|
||||
"logos-blockchain-key-management-system-service",
|
||||
"num-bigint",
|
||||
"rand 0.8.5",
|
||||
"reqwest",
|
||||
"rpds",
|
||||
"serde",
|
||||
@ -4840,7 +4706,6 @@ version = "0.8.8"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "cd6c30ed10fa69cc491d491b85cc971f6bdeb8e7367b7cde2ee6cc878d583fae"
|
||||
dependencies = [
|
||||
"async-io",
|
||||
"bytes",
|
||||
"futures-util",
|
||||
"libc",
|
||||
@ -4933,7 +4798,7 @@ version = "0.50.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5"
|
||||
dependencies = [
|
||||
"windows-sys 0.61.2",
|
||||
"windows-sys 0.59.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -5254,7 +5119,7 @@ name = "overwatch-derive"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/logos-co/Overwatch?rev=448c192#448c192895b8311c742b1726a1bb12ee314ad95c"
|
||||
dependencies = [
|
||||
"convert_case",
|
||||
"convert_case 0.8.0",
|
||||
"proc-macro-error2",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
@ -5349,23 +5214,6 @@ version = "0.2.17"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd"
|
||||
|
||||
[[package]]
|
||||
name = "pin-utils"
|
||||
version = "0.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
|
||||
|
||||
[[package]]
|
||||
name = "piper"
|
||||
version = "0.2.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c835479a4443ded371d6c535cbfd8d31ad92c5d23ae9770a61bc155e4992a3c1"
|
||||
dependencies = [
|
||||
"atomic-waker",
|
||||
"fastrand",
|
||||
"futures-io",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pkcs8"
|
||||
version = "0.10.2"
|
||||
@ -5621,9 +5469,22 @@ dependencies = [
|
||||
"rand 0.9.2",
|
||||
"rand_chacha 0.9.0",
|
||||
"rand_xorshift",
|
||||
"regex-syntax",
|
||||
"unarray",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "proptest-macro"
|
||||
version = "0.2.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c7b009e4051fac51cd34053b7e33a7dbda87a79f1548fdb00f3f35a4b32bac91"
|
||||
dependencies = [
|
||||
"convert_case 0.6.0",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 2.0.117",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "prost"
|
||||
version = "0.13.5"
|
||||
@ -6236,7 +6097,6 @@ version = "0.20.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4b960d5d873a75b5be9761b1e73b146f52dddcd27bac75263f40fba686d4d7b5"
|
||||
dependencies = [
|
||||
"async-global-executor",
|
||||
"futures-channel",
|
||||
"futures-util",
|
||||
"log",
|
||||
@ -6331,7 +6191,7 @@ dependencies = [
|
||||
"errno",
|
||||
"libc",
|
||||
"linux-raw-sys 0.12.1",
|
||||
"windows-sys 0.61.2",
|
||||
"windows-sys 0.52.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -6648,23 +6508,6 @@ version = "1.15.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03"
|
||||
|
||||
[[package]]
|
||||
name = "smol"
|
||||
version = "2.0.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a33bd3e260892199c3ccfc487c88b2da2265080acb316cd920da72fdfd7c599f"
|
||||
dependencies = [
|
||||
"async-channel 2.5.0",
|
||||
"async-executor",
|
||||
"async-fs",
|
||||
"async-io",
|
||||
"async-lock",
|
||||
"async-net",
|
||||
"async-process",
|
||||
"blocking",
|
||||
"futures-lite",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "snap"
|
||||
version = "1.1.1"
|
||||
@ -6698,7 +6541,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e"
|
||||
dependencies = [
|
||||
"libc",
|
||||
"windows-sys 0.61.2",
|
||||
"windows-sys 0.60.2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -6863,6 +6706,12 @@ dependencies = [
|
||||
"symbolic-common",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "symlink"
|
||||
version = "0.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a7973cce6668464ea31f176d85b13c7ab3bba2cb3b77a2ed26abd7801688010a"
|
||||
|
||||
[[package]]
|
||||
name = "syn"
|
||||
version = "1.0.109"
|
||||
@ -6953,7 +6802,7 @@ dependencies = [
|
||||
"getrandom 0.4.2",
|
||||
"once_cell",
|
||||
"rustix 1.1.4",
|
||||
"windows-sys 0.61.2",
|
||||
"windows-sys 0.52.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -7294,11 +7143,12 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "tracing-appender"
|
||||
version = "0.2.4"
|
||||
version = "0.2.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "786d480bce6247ab75f005b14ae1624ad978d3029d9113f0a22fa1ac773faeaf"
|
||||
checksum = "050686193eb999b4bb3bc2acfa891a13da00f79734704c4b8b4ef1a10b368a3c"
|
||||
dependencies = [
|
||||
"crossbeam-channel",
|
||||
"symlink",
|
||||
"thiserror 2.0.18",
|
||||
"time",
|
||||
"tracing-subscriber 0.3.23",
|
||||
@ -7637,12 +7487,6 @@ version = "0.1.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65"
|
||||
|
||||
[[package]]
|
||||
name = "value-bag"
|
||||
version = "1.12.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7ba6f5989077681266825251a52748b8c1d8a4ad098cc37e440103d0ea717fc0"
|
||||
|
||||
[[package]]
|
||||
name = "vcpkg"
|
||||
version = "0.2.15"
|
||||
@ -7875,7 +7719,7 @@ version = "0.1.11"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22"
|
||||
dependencies = [
|
||||
"windows-sys 0.61.2",
|
||||
"windows-sys 0.52.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
||||
87
Cargo.toml
87
Cargo.toml
@ -85,6 +85,10 @@ quote = { default-features = false, version = "1" }
|
||||
syn = { features = ["full"], version = "2" }
|
||||
tonic = { default-features = false, version = "0.14.5" }
|
||||
lb-zone-sdk = { default-features = false, package = "logos-blockchain-zone-sdk", path = "./logos-blockchain/zone-sdk" }
|
||||
lb-config = { default-features = false, package = "logos-blockchain-config", path = "./logos-blockchain/tools/config" }
|
||||
lb-tools = { default-features = false, package = "logos-blockchain-tools", path = "./logos-blockchain/tools/blockchain-tools" }
|
||||
lb-tui-zone = { default-features = false, package = "logos-blockchain-tui-zone", path = "./logos-blockchain/testnet/tui-zone" }
|
||||
lbp-error = { default-features = false, package = "logos-blockchain-proofs-error", path = "./logos-blockchain/zk/proofs/error" }
|
||||
lb_network = { default-features = false, package = "logos-blockchain-network-service", path = "./logos-blockchain/services/network" }
|
||||
testing-framework-core = { default-features = false, git = "https://github.com/logos-blockchain/logos-blockchain-testing.git", rev = "f731791" }
|
||||
testing-framework-runner-compose = { default-features = false, git = "https://github.com/logos-blockchain/logos-blockchain-testing.git", rev = "f731791" }
|
||||
@ -109,7 +113,90 @@ libp2p-stream = { default-features = false, version = "0.3.0-alpha" }
|
||||
log = { default-features = false, version = "0.4" }
|
||||
overwatch = { default-features = false, git = "https://github.com/logos-co/Overwatch", rev = "448c192" }
|
||||
overwatch-derive = { default-features = false, git = "https://github.com/logos-co/Overwatch", rev = "448c192" }
|
||||
anyhow = { default-features = false, version = "1" }
|
||||
ark-bn254 = { default-features = false, version = "0.4" }
|
||||
ark-ec = { default-features = false, version = "0.4" }
|
||||
ark-ff = { default-features = false, version = "0.4" }
|
||||
ark-groth16 = { default-features = false, version = "0.4" }
|
||||
ark-serialize = { default-features = false, version = "0.4.2" }
|
||||
astro-float = { default-features = false, version = "0.9" }
|
||||
async-ctrlc = { default-features = false, version = "1.2" }
|
||||
async-stream = { default-features = false, version = "0.3.6" }
|
||||
axum = { default-features = false, version = "0.7.5" }
|
||||
backon = { default-features = false, version = "1.3.0" }
|
||||
bincode = { default-features = false, version = "1.3" }
|
||||
chrono = { default-features = false, version = "0.4" }
|
||||
cipher = { default-features = false, version = "0.4" }
|
||||
clap = { default-features = false, version = "4" }
|
||||
color-eyre = { default-features = false, version = "0.6.0" }
|
||||
console-subscriber = { default-features = false, version = "0.4" }
|
||||
const-hex = { default-features = false, version = "1" }
|
||||
cucumber = { default-features = false, version = "=0.22.0" }
|
||||
derivative = { default-features = false, version = "2" }
|
||||
dhat = { default-features = false, version = "0.3.3" }
|
||||
dirs = { default-features = false, version = "6.0" }
|
||||
ed25519 = { default-features = false, version = "2.2.3" }
|
||||
either = { default-features = false, version = "1.15.0" }
|
||||
flate2 = { default-features = false, version = "1.1.9" }
|
||||
futures-timer = { default-features = false, version = "3.0.3" }
|
||||
generic-array = { default-features = false, version = "1.2" }
|
||||
hasher = { default-features = false, version = "0.1.4" }
|
||||
http = { default-features = false, version = "1.3" }
|
||||
humantime = { default-features = false, version = "2.1" }
|
||||
hyper = { default-features = false, version = "1.0" }
|
||||
igd-next = { default-features = false, version = "0.16.1" }
|
||||
itertools = { default-features = false, version = "0.14" }
|
||||
jf-poseidon2 = { default-features = false, git = "https://github.com/EspressoSystems/jellyfish.git", rev = "dc166cf0f803c3e5067f9dfcc21e3dade986a447" }
|
||||
libp2p-swarm-test = { default-features = false, version = "0.5" }
|
||||
multiaddr = { default-features = false, version = "0.18" }
|
||||
natpmp = { default-features = false, version = "0.5" }
|
||||
netdev = { default-features = false, version = "0.31" }
|
||||
nistrs = { default-features = false, version = "0.1.2" }
|
||||
nom = { default-features = false, version = "8" }
|
||||
num_enum = { default-features = false, version = "0.7.4" }
|
||||
num-bigint = { default-features = false, version = "0.4" }
|
||||
num-traits = { default-features = false, version = "0.2.19" }
|
||||
opentelemetry = { default-features = false, version = "0.31" }
|
||||
opentelemetry-appender-tracing = { default-features = false, version = "0.31" }
|
||||
opentelemetry-http = { default-features = false, version = "0.31" }
|
||||
opentelemetry-otlp = { default-features = false, version = "0.31" }
|
||||
opentelemetry_sdk = { default-features = false, version = "0.31" }
|
||||
opentelemetry-semantic-conventions = { default-features = false, version = "0.31" }
|
||||
owo-colors = { default-features = false, version = "4.2.3" }
|
||||
pprof = { default-features = false, version = "0.15" }
|
||||
proptest = { default-features = false, version = "1.0" }
|
||||
proptest-macro = { default-features = false, version = "0.2" }
|
||||
quickcheck = { default-features = false, version = "1.0" }
|
||||
quickcheck_macros = { default-features = false, version = "1.0" }
|
||||
rand_chacha = { default-features = false, version = "0.3" }
|
||||
rand_core = { default-features = false, version = "0.6.4" }
|
||||
rand = { default-features = false, version = "0.8" }
|
||||
redb = { default-features = false, version = "2.2" }
|
||||
rocksdb = { default-features = false, version = "0.24" }
|
||||
rpds = { default-features = false, version = "1" }
|
||||
rs-merkle-tree = { default-features = false, version = "0.1" }
|
||||
serde_arrays = { default-features = false, version = "0.2.0" }
|
||||
serde_path_to_error = { default-features = false, version = "0.1" }
|
||||
serde_yml = { default-features = false, version = "0.0.12" }
|
||||
serial_test = { default-features = false, version = "3.1.1" }
|
||||
sntpc = { default-features = false, version = "0.5" }
|
||||
strum = { default-features = false, version = "0.27" }
|
||||
strum_macros = { default-features = false, version = "0.27.2" }
|
||||
sysinfo = { default-features = false, version = "0.37" }
|
||||
test-log = { default-features = false, version = "0.2" }
|
||||
tikv-jemallocator = { default-features = false, version = "0.6" }
|
||||
tokio-util = { default-features = false, version = "0.7" }
|
||||
tower = { default-features = false, version = "0.4" }
|
||||
tower-http = { default-features = false, version = "0.6.8" }
|
||||
tracing-appender = { default-features = false, version = "0.2" }
|
||||
tracing-futures = { default-features = false, version = "0.2" }
|
||||
tracing-gelf = { default-features = false, version = "0.7" }
|
||||
tracing-loki = { default-features = false, version = "0.2.5" }
|
||||
tracing-opentelemetry = { default-features = false, version = "0.32.1" }
|
||||
tracing-subscriber = { default-features = false, version = "0.3" }
|
||||
url = { default-features = false, version = "2" }
|
||||
validator = { default-features = false, version = "0.20.0" }
|
||||
zerocopy = { default-features = false, version = "0.8.26" }
|
||||
reqwest = { default-features = false, version = "0.12" }
|
||||
serde = { default-features = false, version = "1.0" }
|
||||
serde-big-array = { default-features = false, version = "0.5" }
|
||||
|
||||
@ -20,7 +20,8 @@ chacha20poly1305 = { features = ["std"], version = "0.10" }
|
||||
chrono = { features = ["serde"], version = "0.4" }
|
||||
crypto-common = { features = ["std"], version = "0.1.6" }
|
||||
directories = "6.0"
|
||||
logos-blockchain-zone-sdk = { path = "../logos-blockchain/zone-sdk" }
|
||||
lb-core = { workspace = true }
|
||||
lb-zone-sdk = { package = "logos-blockchain-zone-sdk", path = "../logos-blockchain/zone-sdk" }
|
||||
nanosql = { features = ["chrono"], version = "0.10.0" }
|
||||
rand = { version = "0.9" }
|
||||
ratatui = { features = ["serde"], version = "0.29" }
|
||||
|
||||
@ -12,7 +12,7 @@ use argon2::Error as Argon2Error;
|
||||
use block_padding::UnpadError;
|
||||
use chacha20poly1305::Error as XChaCha20Poly1305Error;
|
||||
use crypto_common::InvalidLength;
|
||||
use logos_blockchain_zone_sdk::indexer::Error as ZoneIndexerError;
|
||||
use lb_zone_sdk::indexer::Error as ZoneIndexerError;
|
||||
use nanosql::{Error as SqlError, rusqlite::Error as RusqliteError};
|
||||
use serde_json::Error as JsonError;
|
||||
use thiserror::Error;
|
||||
|
||||
@ -4,4 +4,6 @@ pub mod config;
|
||||
pub mod crypto;
|
||||
pub mod error;
|
||||
pub mod logging;
|
||||
pub mod message;
|
||||
pub mod screen;
|
||||
pub mod state;
|
||||
|
||||
48
common/src/message.rs
Normal file
48
common/src/message.rs
Normal file
@ -0,0 +1,48 @@
|
||||
use lb_core::mantle::ops::channel::MsgId;
|
||||
use serde::{Deserialize, Serialize};
|
||||
use uuid::Uuid;
|
||||
|
||||
/// Application-level message wrapper. `tx_uuid` ensures unique payload to
|
||||
/// avoid mempool deduplication even with same signing keys in decentralized
|
||||
/// scenarios.
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
pub struct AppMessage {
|
||||
pub tx_uuid: Uuid,
|
||||
pub text: String,
|
||||
}
|
||||
|
||||
impl AppMessage {
|
||||
pub fn new(text: String) -> Self {
|
||||
Self {
|
||||
tx_uuid: Uuid::new_v4(),
|
||||
text,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn to_bytes(&self) -> Vec<u8> {
|
||||
serde_json::to_vec(self).expect("AppMessage serialization should not fail")
|
||||
}
|
||||
|
||||
pub fn from_bytes(bytes: &[u8]) -> Option<Self> {
|
||||
serde_json::from_slice(bytes).ok()
|
||||
}
|
||||
}
|
||||
|
||||
/// A single message tracked by the TUI.
|
||||
///
|
||||
/// `msg_id` is SDK-provided lineage anchor; `text` is the app-level text
|
||||
/// extracted from the JSON-encoded payload (falls back to raw UTF-8 for
|
||||
/// payloads that didn't come from this TUI).
|
||||
#[derive(Debug, Clone)]
|
||||
pub struct Msg {
|
||||
pub msg_id: MsgId,
|
||||
pub text: String,
|
||||
}
|
||||
|
||||
impl Msg {
|
||||
pub fn from_payload(msg_id: MsgId, payload: &[u8]) -> Self {
|
||||
let text = AppMessage::from_bytes(payload)
|
||||
.map_or_else(|| String::from_utf8_lossy(payload).into_owned(), |m| m.text);
|
||||
Self { msg_id, text }
|
||||
}
|
||||
}
|
||||
106
common/src/state.rs
Normal file
106
common/src/state.rs
Normal file
@ -0,0 +1,106 @@
|
||||
use lb_core::mantle::ops::channel::MsgId;
|
||||
use lb_zone_sdk::{sequencer::SequencerCheckpoint, state::InscriptionInfo};
|
||||
|
||||
use crate::message::Msg;
|
||||
|
||||
/// Trait for the TUI's view of zone state.
|
||||
///
|
||||
/// The TUI feeds SDK events into this trait; the trait owns persistence.
|
||||
/// `InMemoryZoneState` is the demo implementation. A real sequencer would
|
||||
/// implement it over a DB so `published`/`adopted`/`finalized` survive
|
||||
/// restarts (the SDK's own checkpoint covers tx-level resume separately).
|
||||
///
|
||||
/// Three lists, each ordered by arrival:
|
||||
/// - `published`: our submissions, in submit order, until they finalize or get
|
||||
/// orphaned.
|
||||
/// - `adopted`: others' inscriptions on canonical, deduped by `msg_id` (reorgs
|
||||
/// can re-adopt the same one), in first-sighting order.
|
||||
/// - `finalized`: all inscriptions below LIB, in canonical order — the SDK
|
||||
/// delivers `TxsFinalized`/`FinalizedInscriptions` per block.
|
||||
///
|
||||
/// Replay-idempotent: `on_adopted` and `on_finalized` dedup by `msg_id`, so
|
||||
/// resuming from a persisted state and re-receiving backfill is harmless.
|
||||
pub trait ZoneState: Send {
|
||||
fn on_published(&mut self, info: &InscriptionInfo);
|
||||
fn on_adopted(&mut self, adopted: &[InscriptionInfo]);
|
||||
/// Remove our orphaned entry from `published`. Caller is expected to
|
||||
/// auto-republish via `handle.publish_message`.
|
||||
fn on_orphaned(&mut self, msg_id: &MsgId);
|
||||
fn on_finalized(&mut self, inscriptions: &[InscriptionInfo]);
|
||||
|
||||
fn published(&self) -> &[Msg];
|
||||
fn adopted(&self) -> &[Msg];
|
||||
fn finalized(&self) -> &[Msg];
|
||||
|
||||
fn save_checkpoint(&mut self, checkpoint: SequencerCheckpoint);
|
||||
fn load_checkpoint(&self) -> Option<&SequencerCheckpoint>;
|
||||
}
|
||||
|
||||
/// In-memory implementation of [`ZoneState`].
|
||||
#[derive(Default)]
|
||||
pub struct InMemoryZoneState {
|
||||
published: Vec<Msg>,
|
||||
adopted: Vec<Msg>,
|
||||
finalized: Vec<Msg>,
|
||||
checkpoint: Option<SequencerCheckpoint>,
|
||||
}
|
||||
|
||||
impl ZoneState for InMemoryZoneState {
|
||||
fn on_published(&mut self, info: &InscriptionInfo) {
|
||||
self.published
|
||||
.push(Msg::from_payload(info.this_msg, &info.payload));
|
||||
}
|
||||
|
||||
fn on_adopted(&mut self, adopted: &[InscriptionInfo]) {
|
||||
for info in adopted {
|
||||
if !self.adopted.iter().any(|m| m.msg_id == info.this_msg) {
|
||||
self.adopted
|
||||
.push(Msg::from_payload(info.this_msg, &info.payload));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn on_orphaned(&mut self, msg_id: &MsgId) {
|
||||
if let Some(i) = self.published.iter().position(|m| &m.msg_id == msg_id) {
|
||||
self.published.remove(i);
|
||||
}
|
||||
}
|
||||
|
||||
fn on_finalized(&mut self, inscriptions: &[InscriptionInfo]) {
|
||||
for info in inscriptions {
|
||||
if let Some(i) = self
|
||||
.published
|
||||
.iter()
|
||||
.position(|m| m.msg_id == info.this_msg)
|
||||
{
|
||||
self.published.remove(i);
|
||||
} else if let Some(i) = self.adopted.iter().position(|m| m.msg_id == info.this_msg) {
|
||||
self.adopted.remove(i);
|
||||
}
|
||||
if !self.finalized.iter().any(|m| m.msg_id == info.this_msg) {
|
||||
self.finalized
|
||||
.push(Msg::from_payload(info.this_msg, &info.payload));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn published(&self) -> &[Msg] {
|
||||
&self.published
|
||||
}
|
||||
|
||||
fn adopted(&self) -> &[Msg] {
|
||||
&self.adopted
|
||||
}
|
||||
|
||||
fn finalized(&self) -> &[Msg] {
|
||||
&self.finalized
|
||||
}
|
||||
|
||||
fn save_checkpoint(&mut self, checkpoint: SequencerCheckpoint) {
|
||||
self.checkpoint = Some(checkpoint);
|
||||
}
|
||||
|
||||
fn load_checkpoint(&self) -> Option<&SequencerCheckpoint> {
|
||||
self.checkpoint.as_ref()
|
||||
}
|
||||
}
|
||||
@ -82,11 +82,10 @@ impl Indexer {
|
||||
|
||||
futures::pin_mut!(stream);
|
||||
while let Some(zone_msg) = stream.next().await {
|
||||
let data = match zone_msg {
|
||||
logos_blockchain_zone_sdk::ZoneMessage::Block(block) => block.data,
|
||||
logos_blockchain_zone_sdk::ZoneMessage::Deposit(_) => continue,
|
||||
let logos_blockchain_zone_sdk::ZoneMessage::Block(zone_block) = zone_msg else {
|
||||
continue;
|
||||
};
|
||||
let sql_text = match String::from_utf8(data) {
|
||||
let sql_text = match String::from_utf8(zone_block.data) {
|
||||
Ok(s) => s,
|
||||
Err(e) => {
|
||||
error!("Zone block data is not valid UTF-8: {e}");
|
||||
|
||||
@ -7,45 +7,35 @@ use std::{
|
||||
time::Duration,
|
||||
};
|
||||
|
||||
use demo_sqlite_common::state::{InMemoryZoneState, ZoneState as _};
|
||||
use fs2::FileExt as _;
|
||||
use lb_common_http_client::{BasicAuthCredentials, CommonHttpClient};
|
||||
use lb_core::mantle::ops::channel::ChannelId;
|
||||
use lb_key_management_system_service::keys::{ED25519_SECRET_KEY_SIZE, Ed25519Key};
|
||||
use logos_blockchain_zone_sdk::adapter::NodeHttpClient;
|
||||
use logos_blockchain_zone_sdk::sequencer::{
|
||||
Error as ZoneSequencerError, SequencerHandle, ZoneSequencer, SequencerCheckpoint,
|
||||
use logos_blockchain_zone_sdk::{
|
||||
adapter::NodeHttpClient,
|
||||
sequencer::{Event, SequencerCheckpoint, SequencerHandle, ZoneSequencer},
|
||||
};
|
||||
use nanosql::rusqlite::Error as SqliteError;
|
||||
use reqwest::Url;
|
||||
use thiserror::Error;
|
||||
use tokio::time::sleep;
|
||||
use tracing::{debug, info};
|
||||
use tracing::{debug, error, info};
|
||||
|
||||
#[derive(Debug, Error)]
|
||||
pub enum SequencerError {
|
||||
#[error("Zone sequencer error: {0}")]
|
||||
ZoneSequencer(#[from] ZoneSequencerError),
|
||||
#[error("URL parse error: {0}")]
|
||||
Url(String),
|
||||
#[error("IO error: {0}")]
|
||||
Io(#[from] io::Error),
|
||||
#[error("SQLite error: {0}")]
|
||||
Sqlite(#[from] SqliteError),
|
||||
#[error("Invalid key file: expected {expected} bytes, got {actual}")]
|
||||
InvalidKeyFile { expected: usize, actual: usize },
|
||||
#[error("{0}")]
|
||||
InvalidChannelId(String),
|
||||
#[error("Timeout: {0}")]
|
||||
Timeout(String),
|
||||
}
|
||||
|
||||
pub type Result<T> = std::result::Result<T, SequencerError>;
|
||||
|
||||
/// The sequencer that handles transactions using the Zone SDK.
|
||||
pub struct Sequencer {
|
||||
sequencer: ZoneSequencer<NodeHttpClient>,
|
||||
handle: SequencerHandle<NodeHttpClient>,
|
||||
state: InMemoryZoneState,
|
||||
queue_file: String,
|
||||
pub checkpoint_path: String,
|
||||
checkpoint_path: String,
|
||||
}
|
||||
|
||||
fn save_checkpoint(path: &Path, checkpoint: &SequencerCheckpoint) {
|
||||
@ -61,7 +51,6 @@ fn load_checkpoint(path: &Path) -> Option<SequencerCheckpoint> {
|
||||
Some(serde_json::from_slice(&data).expect("failed to deserialize checkpoint"))
|
||||
}
|
||||
|
||||
/// Load signing key from file or generate a new one if it doesn't exist.
|
||||
fn load_or_create_signing_key(path: &Path) -> Ed25519Key {
|
||||
if path.exists() {
|
||||
let key_bytes = fs::read(path).expect("failed to read key file");
|
||||
@ -103,7 +92,7 @@ impl Sequencer {
|
||||
}
|
||||
}
|
||||
|
||||
let checkpoint = load_checkpoint(Path::new(&checkpoint_path));
|
||||
let checkpoint = load_checkpoint(Path::new(checkpoint_path));
|
||||
if checkpoint.is_some() {
|
||||
println!(" Restored checkpoint from {checkpoint_path}");
|
||||
}
|
||||
@ -114,98 +103,112 @@ impl Sequencer {
|
||||
.expect("failed to write channel id");
|
||||
|
||||
let node = NodeHttpClient::new(CommonHttpClient::new(basic_auth), node_url);
|
||||
let (zone_sequencer, mut handle) =
|
||||
ZoneSequencer::init(channel_id, signing_key, node, checkpoint);
|
||||
|
||||
zone_sequencer.spawn();
|
||||
|
||||
println!("Connecting to node...");
|
||||
handle.wait_ready().await;
|
||||
println!("Sequencer ready.");
|
||||
let (sequencer, handle) = ZoneSequencer::init(channel_id, signing_key, node, checkpoint);
|
||||
|
||||
Ok(Self {
|
||||
sequencer,
|
||||
handle,
|
||||
state: InMemoryZoneState::default(),
|
||||
queue_file: queue_file.to_owned(),
|
||||
checkpoint_path: checkpoint_path.to_owned(),
|
||||
})
|
||||
}
|
||||
|
||||
/// Drain the queue file and return all pending SQL statements.
|
||||
fn queue_drain(&self) -> Result<Vec<String>> {
|
||||
let file = OpenOptions::new()
|
||||
.read(true)
|
||||
.write(true)
|
||||
.open(self.queue_file.clone())?;
|
||||
pub async fn run(self) {
|
||||
let Self { mut sequencer, handle, mut state, queue_file, checkpoint_path } = self;
|
||||
|
||||
file.lock_exclusive()?;
|
||||
|
||||
let reader = BufReader::new(&file);
|
||||
let mut queue_vec = Vec::new();
|
||||
for query in reader.lines() {
|
||||
queue_vec.push(query?.clone());
|
||||
}
|
||||
|
||||
file.set_len(0)?;
|
||||
|
||||
Ok(queue_vec)
|
||||
}
|
||||
|
||||
/// Bundle all pending SQL statements into one inscription and publish it.
|
||||
async fn process_pending_batch(&self) -> Result<()> {
|
||||
let pending = self.queue_drain()?;
|
||||
if pending.is_empty() {
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
let count = pending.len();
|
||||
debug!("Processing batch of {} queries", count);
|
||||
|
||||
let sql_text = pending.join("\n").as_bytes().to_vec();
|
||||
|
||||
match self.handle.publish_message(sql_text).await {
|
||||
Ok(result) => {
|
||||
info!("Submitted batch of {} statement(s)", count);
|
||||
save_checkpoint(Path::new(&self.checkpoint_path), &result.checkpoint);
|
||||
let mut batch_handle = handle.clone();
|
||||
tokio::spawn(async move {
|
||||
batch_handle.wait_ready().await;
|
||||
let mut interval = tokio::time::interval(Duration::from_millis(100));
|
||||
loop {
|
||||
interval.tick().await;
|
||||
if let Err(e) = process_pending_batch(&queue_file, &batch_handle).await {
|
||||
error!("Batch processing failed: {e}");
|
||||
}
|
||||
}
|
||||
Err(e) => {
|
||||
println!(" error: {e}");
|
||||
}
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// Check if the queue file is empty.
|
||||
pub fn queue_is_empty(&self) -> Result<bool> {
|
||||
match fs::metadata(self.queue_file.clone()) {
|
||||
Ok(meta) => Ok(meta.len() == 0),
|
||||
Err(e) if e.kind() == io::ErrorKind::NotFound => Ok(true),
|
||||
Err(e) => Err(e.into()),
|
||||
}
|
||||
}
|
||||
|
||||
/// Background processing loop — call this in a spawned task.
|
||||
pub async fn run_processing_loop(&self) {
|
||||
let poll_interval = Duration::from_millis(100);
|
||||
});
|
||||
|
||||
loop {
|
||||
let is_empty = match self.queue_is_empty() {
|
||||
Ok(empty) => empty,
|
||||
Err(e) => {
|
||||
tracing::error!("Failed to check queue: {}", e);
|
||||
sleep(poll_interval).await;
|
||||
continue;
|
||||
}
|
||||
};
|
||||
|
||||
if is_empty {
|
||||
sleep(poll_interval).await;
|
||||
continue;
|
||||
}
|
||||
|
||||
if let Err(e) = self.process_pending_batch().await {
|
||||
tracing::error!("Batch processing failed: {}", e);
|
||||
}
|
||||
let Some(event) = sequencer.next_event().await else { break; };
|
||||
handle_event(event, &handle, &mut state, &checkpoint_path).await;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
async fn handle_event(
|
||||
event: Event,
|
||||
handle: &SequencerHandle<NodeHttpClient>,
|
||||
state: &mut InMemoryZoneState,
|
||||
checkpoint_path: &str,
|
||||
) {
|
||||
match event {
|
||||
Event::Ready => {
|
||||
info!("Sequencer ready");
|
||||
}
|
||||
Event::ChannelUpdate { orphaned, adopted } => {
|
||||
state.on_adopted(&adopted);
|
||||
for info in &orphaned {
|
||||
state.on_orphaned(&info.this_msg);
|
||||
debug!(msg_id = %hex::encode(info.this_msg.as_ref()), "Auto-republishing orphan");
|
||||
if let Err(e) = handle.publish_message(info.payload.clone()).await {
|
||||
error!("failed to auto-republish: {e}");
|
||||
}
|
||||
}
|
||||
}
|
||||
Event::TxsFinalized { inscriptions, .. } => {
|
||||
state.on_finalized(&inscriptions);
|
||||
}
|
||||
Event::Published { info, checkpoint } => {
|
||||
debug!(msg_id = %hex::encode(info.this_msg.as_ref()), "Published");
|
||||
state.on_published(&info);
|
||||
save_checkpoint(Path::new(checkpoint_path), &checkpoint);
|
||||
state.save_checkpoint(checkpoint);
|
||||
}
|
||||
Event::FinalizedInscriptions { inscriptions } => {
|
||||
state.on_finalized(&inscriptions);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
async fn process_pending_batch(
|
||||
queue_file: &str,
|
||||
handle: &SequencerHandle<NodeHttpClient>,
|
||||
) -> Result<()> {
|
||||
let pending = queue_drain(queue_file)?;
|
||||
if pending.is_empty() {
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
let count = pending.len();
|
||||
debug!("Processing batch of {} queries", count);
|
||||
|
||||
let sql_text = pending.join("\n").as_bytes().to_vec();
|
||||
if let Err(e) = handle.publish_message(sql_text).await {
|
||||
error!("failed to publish batch: {e}");
|
||||
} else {
|
||||
info!("Submitted batch of {} statement(s)", count);
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn queue_drain(queue_file: &str) -> Result<Vec<String>> {
|
||||
let file = match OpenOptions::new().read(true).write(true).open(queue_file) {
|
||||
Ok(f) => f,
|
||||
Err(e) if e.kind() == io::ErrorKind::NotFound => return Ok(Vec::new()),
|
||||
Err(e) => return Err(SequencerError::Io(e)),
|
||||
};
|
||||
|
||||
file.lock_exclusive()?;
|
||||
|
||||
let reader = BufReader::new(&file);
|
||||
let mut queue_vec = Vec::new();
|
||||
for query in reader.lines() {
|
||||
queue_vec.push(query?);
|
||||
}
|
||||
|
||||
file.set_len(0)?;
|
||||
|
||||
Ok(queue_vec)
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user