Compare commits

...

16 Commits

Author SHA1 Message Date
Helen Grachtz
edc218f6c1
Merge 14226dbddc into 7ad3f717b4 2025-02-12 12:59:14 +03:00
0g-peterzhb
7ad3f717b4
refactor submit pora loop (#325)
Some checks failed
abi-consistent-check / build-and-compare (push) Has been cancelled
code-coverage / unittest-cov (push) Has been cancelled
rust / check (push) Has been cancelled
rust / test (push) Has been cancelled
rust / lints (push) Has been cancelled
functional-test / test (push) Has been cancelled
2025-02-11 18:23:19 +08:00
Helen Grachtz
26cc19b92d
Fix code comments and bug report errors (#319)
fix typos
2025-02-11 16:56:40 +08:00
Brawn
a3335eed82
fix: Fix incorrect -in-place='' syntax Update update_config.sh (#320)
Fix incorrect -in-place='' syntax in sed command
2025-02-11 16:55:18 +08:00
Dmitry
2272b5dbfd
fix: Fix path handling in script execution (#318) 2025-02-11 16:53:28 +08:00
witty
760d4b4a53
docs: Fix imperative mood in documentation instructions Update onebox-test.md (#316) 2025-02-11 16:50:39 +08:00
Ocenka
91680f2e33
Fix spelling errors (#314)
* fix spelling lib.rs

* fix spelling error environment.rs
2025-02-11 16:48:24 +08:00
Radovenchyk
c9bca86add
Update README.md (#312) 2025-02-11 16:46:40 +08:00
udhaykumarbala
93f587c407
replaced broken links (#311) 2025-02-11 16:46:00 +08:00
Akaonetwo
1f71aadeec
Typo fixed in: Update README.md (#310)
fix typos
2025-02-11 16:43:32 +08:00
dashangcun
656a092cf8
chore: fix some comments (#313)
Signed-off-by: dashangcun <907225865@qq.com>
2025-02-11 16:40:55 +08:00
crStiv
8014f51b6d
Update introduction.md (#309) 2025-02-11 16:40:31 +08:00
Dmitry
b0a9a415f7
docs: Fixing Documentation Typos (#308)
* docs: typo fix Update transaction-processing.md

* docs: typo fix Update run.md

* docs: typo fix Update onebox-test.md
2025-02-11 16:37:33 +08:00
Maxim Evtush
bc6bcf857c
Update LICENSE (#321) 2025-02-11 16:36:50 +08:00
peilun-conflux
d15ef5ba3d
Add tokio console for debug. (#317)
It requires `tokio_unstable` in rust flags, so a `tokio-console`
features is added to be compatible with the default config.
To compile with the tokio console enabled, compile with
``RUSTFLAGS="--cfg tokio_unstable" cargo build --release --features tokio-console``
The usage of the tokio console can be found in https://github.com/tokio-rs/console.
2025-02-11 16:36:08 +08:00
0g-peterzhb
9ce215b919
add dynamic gas price adjustment when submitting pora (#324) 2025-02-11 16:34:58 +08:00
22 changed files with 514 additions and 87 deletions

389
Cargo.lock generated
View File

@ -453,6 +453,28 @@ dependencies = [
"trust-dns-resolver",
]
[[package]]
name = "async-stream"
version = "0.3.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0b5a71a6f37880a80d1d7f19efd781e4b5de42c88f0722cc13bcb6cc2cfe8476"
dependencies = [
"async-stream-impl",
"futures-core",
"pin-project-lite 0.2.14",
]
[[package]]
name = "async-stream-impl"
version = "0.3.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.68",
]
[[package]]
name = "async-task"
version = "4.7.1"
@ -506,7 +528,7 @@ version = "0.16.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fdb8867f378f33f78a811a8eb9bf108ad99430d7aad43315dd9319c827ef6247"
dependencies = [
"http",
"http 0.2.12",
"log",
"url",
"wildmatch",
@ -529,6 +551,53 @@ version = "1.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0"
[[package]]
name = "axum"
version = "0.7.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3a6c9af12842a67734c9a2e355436e5d03b22383ed60cf13cd0c18fbfe3dcbcf"
dependencies = [
"async-trait",
"axum-core",
"bytes",
"futures-util",
"http 1.2.0",
"http-body 1.0.1",
"http-body-util",
"itoa",
"matchit",
"memchr",
"mime",
"percent-encoding",
"pin-project-lite 0.2.14",
"rustversion",
"serde",
"sync_wrapper 1.0.2",
"tower",
"tower-layer",
"tower-service",
]
[[package]]
name = "axum-core"
version = "0.4.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "09f2bd6146b97ae3359fa0cc6d6b376d9539582c7b4220f041a33ec24c226199"
dependencies = [
"async-trait",
"bytes",
"futures-util",
"http 1.2.0",
"http-body 1.0.1",
"http-body-util",
"mime",
"pin-project-lite 0.2.14",
"rustversion",
"sync_wrapper 1.0.2",
"tower-layer",
"tower-service",
]
[[package]]
name = "backtrace"
version = "0.3.73"
@ -568,6 +637,12 @@ version = "0.21.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567"
[[package]]
name = "base64"
version = "0.22.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6"
[[package]]
name = "base64ct"
version = "1.6.0"
@ -1104,6 +1179,45 @@ dependencies = [
"yaml-rust",
]
[[package]]
name = "console-api"
version = "0.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8030735ecb0d128428b64cd379809817e620a40e5001c54465b99ec5feec2857"
dependencies = [
"futures-core",
"prost 0.13.4",
"prost-types 0.13.4",
"tonic",
"tracing-core",
]
[[package]]
name = "console-subscriber"
version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6539aa9c6a4cd31f4b1c040f860a1eac9aa80e7df6b05d506a6e7179936d6a01"
dependencies = [
"console-api",
"crossbeam-channel",
"crossbeam-utils",
"futures-task",
"hdrhistogram",
"humantime",
"hyper-util",
"prost 0.13.4",
"prost-types 0.13.4",
"serde",
"serde_json",
"thread_local",
"tokio",
"tokio-stream",
"tonic",
"tracing",
"tracing-core",
"tracing-subscriber",
]
[[package]]
name = "const-hex"
version = "1.12.0"
@ -2286,7 +2400,7 @@ dependencies = [
"futures-timer",
"futures-util",
"hashers",
"http",
"http 0.2.12",
"instant",
"jsonwebtoken",
"once_cell",
@ -2905,7 +3019,26 @@ dependencies = [
"futures-core",
"futures-sink",
"futures-util",
"http",
"http 0.2.12",
"indexmap 2.2.6",
"slab",
"tokio",
"tokio-util 0.7.11",
"tracing",
]
[[package]]
name = "h2"
version = "0.4.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ccae279728d634d083c00f6099cb58f01cc99c145b84b8be2f6c74618d79922e"
dependencies = [
"atomic-waker",
"bytes",
"fnv",
"futures-core",
"futures-sink",
"http 1.2.0",
"indexmap 2.2.6",
"slab",
"tokio",
@ -3004,6 +3137,19 @@ dependencies = [
"tokio-util 0.6.10",
]
[[package]]
name = "hdrhistogram"
version = "7.5.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "765c9198f173dd59ce26ff9f95ef0aafd0a0fe01fb9d72841bc5066a4c06511d"
dependencies = [
"base64 0.21.7",
"byteorder",
"flate2",
"nom",
"num-traits",
]
[[package]]
name = "heck"
version = "0.3.3"
@ -3125,6 +3271,17 @@ dependencies = [
"itoa",
]
[[package]]
name = "http"
version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f16ca2af56261c99fba8bac40a10251ce8188205a4c448fbb745a2e4daa76fea"
dependencies = [
"bytes",
"fnv",
"itoa",
]
[[package]]
name = "http-body"
version = "0.4.6"
@ -3132,7 +3289,30 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2"
dependencies = [
"bytes",
"http",
"http 0.2.12",
"pin-project-lite 0.2.14",
]
[[package]]
name = "http-body"
version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184"
dependencies = [
"bytes",
"http 1.2.0",
]
[[package]]
name = "http-body-util"
version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f"
dependencies = [
"bytes",
"futures-util",
"http 1.2.0",
"http-body 1.0.1",
"pin-project-lite 0.2.14",
]
@ -3164,9 +3344,9 @@ dependencies = [
"futures-channel",
"futures-core",
"futures-util",
"h2",
"http",
"http-body",
"h2 0.3.26",
"http 0.2.12",
"http-body 0.4.6",
"httparse",
"httpdate",
"itoa",
@ -3178,14 +3358,35 @@ dependencies = [
"want",
]
[[package]]
name = "hyper"
version = "1.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "256fb8d4bd6413123cc9d91832d78325c48ff41677595be797d90f42969beae0"
dependencies = [
"bytes",
"futures-channel",
"futures-util",
"h2 0.4.7",
"http 1.2.0",
"http-body 1.0.1",
"httparse",
"httpdate",
"itoa",
"pin-project-lite 0.2.14",
"smallvec",
"tokio",
"want",
]
[[package]]
name = "hyper-rustls"
version = "0.23.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1788965e61b367cd03a62950836d5cd41560c3577d90e40e0819373194d1661c"
dependencies = [
"http",
"hyper",
"http 0.2.12",
"hyper 0.14.29",
"log",
"rustls 0.20.9",
"rustls-native-certs",
@ -3201,8 +3402,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590"
dependencies = [
"futures-util",
"http",
"hyper",
"http 0.2.12",
"hyper 0.14.29",
"rustls 0.21.12",
"tokio",
"tokio-rustls 0.24.1",
@ -3216,12 +3417,25 @@ checksum = "6eea26c5d0b6ab9d72219f65000af310f042a740926f7b2fa3553e774036e2e7"
dependencies = [
"derive_builder",
"dns-lookup",
"hyper",
"hyper 0.14.29",
"tokio",
"tower-service",
"tracing",
]
[[package]]
name = "hyper-timeout"
version = "0.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2b90d566bffbce6a75bd8b09a05aa8c2cb1fabb6cb348f8840c9e4c90a0d83b0"
dependencies = [
"hyper 1.5.2",
"hyper-util",
"pin-project-lite 0.2.14",
"tokio",
"tower-service",
]
[[package]]
name = "hyper-tls"
version = "0.5.0"
@ -3229,12 +3443,31 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905"
dependencies = [
"bytes",
"hyper",
"hyper 0.14.29",
"native-tls",
"tokio",
"tokio-native-tls",
]
[[package]]
name = "hyper-util"
version = "0.1.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "df2dcfbe0677734ab2f3ffa7fa7bfd4706bfdc1ef393f2ee30184aed67e631b4"
dependencies = [
"bytes",
"futures-channel",
"futures-util",
"http 1.2.0",
"http-body 1.0.1",
"hyper 1.5.2",
"pin-project-lite 0.2.14",
"socket2 0.5.7",
"tokio",
"tower-service",
"tracing",
]
[[package]]
name = "iana-time-zone"
version = "0.1.60"
@ -3586,7 +3819,7 @@ dependencies = [
"futures-timer",
"futures-util",
"gloo-net",
"http",
"http 0.2.12",
"jsonrpsee-core",
"jsonrpsee-types",
"pin-project 1.1.5",
@ -3615,7 +3848,7 @@ dependencies = [
"futures-timer",
"futures-util",
"globset",
"hyper",
"hyper 0.14.29",
"jsonrpsee-types",
"lazy_static",
"parking_lot 0.12.3",
@ -3638,7 +3871,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5fc1d8c0e4f455c47df21f8a29f4bbbcb75eb71bfee919b92e92502b48358392"
dependencies = [
"async-trait",
"hyper",
"hyper 0.14.29",
"hyper-rustls 0.23.2",
"jsonrpsee-core",
"jsonrpsee-types",
@ -3658,7 +3891,7 @@ checksum = "bdd69efeb3ce2cba767f126872f4eeb4624038a29098e75d77608b2b4345ad03"
dependencies = [
"futures-channel",
"futures-util",
"hyper",
"hyper 0.14.29",
"jsonrpsee-core",
"jsonrpsee-types",
"serde",
@ -4713,6 +4946,12 @@ version = "0.1.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5"
[[package]]
name = "matchit"
version = "0.7.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94"
[[package]]
name = "md-5"
version = "0.10.6"
@ -6025,6 +6264,16 @@ dependencies = [
"prost-derive 0.10.1",
]
[[package]]
name = "prost"
version = "0.13.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2c0fef6c4230e4ccf618a35c59d7ede15dea37de8427500f50aff708806e42ec"
dependencies = [
"bytes",
"prost-derive 0.13.4",
]
[[package]]
name = "prost-build"
version = "0.9.0"
@ -6106,6 +6355,19 @@ dependencies = [
"syn 1.0.109",
]
[[package]]
name = "prost-derive"
version = "0.13.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "157c5a9d7ea5c2ed2d9fb8f495b64759f7816c7eaea54ba3978f0d63000162e3"
dependencies = [
"anyhow",
"itertools 0.13.0",
"proc-macro2",
"quote",
"syn 2.0.68",
]
[[package]]
name = "prost-types"
version = "0.9.0"
@ -6126,6 +6388,15 @@ dependencies = [
"prost 0.10.4",
]
[[package]]
name = "prost-types"
version = "0.13.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cc2f1e56baa61e93533aebc21af4d2134b70f66275e0fcdf3cbe43d77ff7e8fc"
dependencies = [
"prost 0.13.4",
]
[[package]]
name = "protobuf"
version = "2.28.0"
@ -6159,8 +6430,8 @@ dependencies = [
"dns-lookup",
"futures-core",
"futures-util",
"http",
"hyper",
"http 0.2.12",
"hyper 0.14.29",
"hyper-system-resolver",
"pin-project-lite 0.2.14",
"thiserror",
@ -6403,10 +6674,10 @@ dependencies = [
"encoding_rs",
"futures-core",
"futures-util",
"h2",
"http",
"http-body",
"hyper",
"h2 0.3.26",
"http 0.2.12",
"http-body 0.4.6",
"hyper 0.14.29",
"hyper-rustls 0.24.2",
"hyper-tls",
"ipnet",
@ -6422,7 +6693,7 @@ dependencies = [
"serde",
"serde_json",
"serde_urlencoded",
"sync_wrapper",
"sync_wrapper 0.1.2",
"system-configuration",
"tokio",
"tokio-native-tls",
@ -7497,6 +7768,12 @@ version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160"
[[package]]
name = "sync_wrapper"
version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263"
[[package]]
name = "synstructure"
version = "0.12.6"
@ -7729,6 +8006,7 @@ dependencies = [
"signal-hook-registry",
"socket2 0.5.7",
"tokio-macros",
"tracing",
"windows-sys 0.48.0",
]
@ -7786,9 +8064,9 @@ dependencies = [
[[package]]
name = "tokio-stream"
version = "0.1.15"
version = "0.1.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "267ac89e0bec6e691e5813911606935d77c476ff49024f98abcea3e7b15e37af"
checksum = "eca58d7bba4a75707817a2c44174253f9236b2d5fbd055602e9d5c07c139a047"
dependencies = [
"futures-core",
"pin-project-lite 0.2.14",
@ -7895,6 +8173,62 @@ dependencies = [
"winnow 0.6.13",
]
[[package]]
name = "tonic"
version = "0.12.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "877c5b330756d856ffcc4553ab34a5684481ade925ecc54bcd1bf02b1d0d4d52"
dependencies = [
"async-stream",
"async-trait",
"axum",
"base64 0.22.1",
"bytes",
"h2 0.4.7",
"http 1.2.0",
"http-body 1.0.1",
"http-body-util",
"hyper 1.5.2",
"hyper-timeout",
"hyper-util",
"percent-encoding",
"pin-project 1.1.5",
"prost 0.13.4",
"socket2 0.5.7",
"tokio",
"tokio-stream",
"tower",
"tower-layer",
"tower-service",
"tracing",
]
[[package]]
name = "tower"
version = "0.4.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c"
dependencies = [
"futures-core",
"futures-util",
"indexmap 1.9.3",
"pin-project 1.1.5",
"pin-project-lite 0.2.14",
"rand 0.8.5",
"slab",
"tokio",
"tokio-util 0.7.11",
"tower-layer",
"tower-service",
"tracing",
]
[[package]]
name = "tower-layer"
version = "0.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e"
[[package]]
name = "tower-service"
version = "0.3.2"
@ -8124,7 +8458,7 @@ dependencies = [
"byteorder",
"bytes",
"data-encoding",
"http",
"http 0.2.12",
"httparse",
"log",
"rand 0.8.5",
@ -8922,6 +9256,7 @@ dependencies = [
"chunk_pool",
"clap",
"config",
"console-subscriber",
"ctrlc",
"duration-str",
"error-chain",

View File

@ -16,7 +16,7 @@ Across the two lanes, 0G Storage supports the following features:
* **General Purpose Design**: Supports atomic transactions, mutable key-value stores, and archive log systems, enabling a wide range of applications with various data types.
* **Validated Incentivization**: Utilizes the PoRA (Proof of Random Access) mining algorithm to mitigate the data outsourcing issue and to ensure rewards are distributed to nodes who contribute to the storage network.
For in-depth technical details about 0G Storage, please read our [Intro to 0G Storage](https://docs.0g.ai/og-storage).
For in-depth technical details about 0G Storage, please read our [Intro to 0G Storage](https://docs.0g.ai/0g-storage).
## Documentation

View File

@ -7,7 +7,7 @@
//! block processing time).
//! - `IntCounter`: used to represent an ideally ever-growing, never-shrinking integer (e.g.,
//! number of block processing requests).
//! - `IntGauge`: used to represent an varying integer (e.g., number of attestations per block).
//! - `IntGauge`: used to represent a varying integer (e.g., number of attestations per block).
//!
//! ## Important
//!

View File

@ -10,7 +10,7 @@
## Integration
We provide a [SDK](https://github.com/0glabs/0g-js-storage-sdk) for users to easily integrate 0G Storage in their applications with the following features:
We provide a [SDK](https://github.com/0glabs/0g-ts-sdk) for users to easily integrate 0G Storage in their applications with the following features:
* File Merkle Tree Class
* Flow Contract Types
@ -22,7 +22,7 @@ We provide a [SDK](https://github.com/0glabs/0g-js-storage-sdk) for users to eas
## Deployment
Please refer to [Deployment](../0G%20Storage/doc/install.md) page for detailed steps to compile and start a 0G Storage node.
Please refer to [Deployment](run.md) page for detailed steps to compile and start a 0G Storage node.
## Test

View File

@ -5,7 +5,7 @@
## Prerequisites
- Requires python version: 3.8, 3.9 or 3.10, higher version is not guaranteed (e.g. failed to install `pysha3`).
- Installs dependencies under root folder: `pip3 install -r requirements.txt`
- Install dependencies under root folder: `pip3 install -r requirements.txt`
## Install Blockchain Nodes
@ -19,7 +19,7 @@ The blockchain node binaries will be compiled or downloaded from github to `test
## Run Tests
Changes to the `tests` folder and run the following command to run all tests:
Change to the `tests` folder and run the following command to run all tests:
```
python test_all.py

View File

@ -4,7 +4,7 @@
### Setup Environment
Install dependencies Node.js, yarn, hardhat.
Install the dependencies Node.js, yarn, hardhat.
- Linux

View File

@ -12,4 +12,4 @@ When an application server with the key-value runtime encounters the commit reco
## Concurrent Assumption
This transaction model assumes that the transaction participants are collaborative and will honestly compose the commit record with the correct content. Although this assumption in a decentralized environment is too strong, it is still achievable for specific applications. For example, for an application like Google Docs, a user normally shares the access to others who can be trusted. In case this assumption cannot hold, the code of the transaction can be stored in the ZeroGravity log and some mechanism of verifiable computation like zero-knowledge proof or hardware with trust execution environment (TEE) can be employed by the transaction executors to detect the validity of the commit record.
This transaction model assumes that the transaction participants are collaborative and will honestly compose the commit record with the correct content. Although this assumption in a decentralized environment is too strong, it is still achievable for specific applications. For example, for an application like Google Docs, a user normally shares the access to others who can be trusted. In case this assumption cannot hold, the code of the transaction can be stored in the ZeroGravity log and some mechanism of verifiable computation like zero-knowledge proof or hardware with trusted execution environment (TEE) can be employed by the transaction executors to detect the validity of the commit record.

View File

@ -42,8 +42,12 @@ metrics = { workspace = true }
rust-log = { package = "log", version = "0.4.22" }
tracing-core = "0.1.32"
tracing-log = "0.2.0"
console-subscriber = { version = "0.4.1", optional = true }
[dependencies.libp2p]
version = "0.45.1"
default-features = true
features = ["websocket", "identify", "mplex", "yamux", "noise", "gossipsub", "dns-tokio", "tcp-tokio", "plaintext", "secp256k1"]
[features]
tokio-console = ["console-subscriber"]

View File

@ -1,9 +1,10 @@
use contract_interface::PoraAnswer;
use contract_interface::{PoraMine, ZgsFlow};
use ethereum_types::U256;
use ethers::abi::Detokenize;
use ethers::contract::ContractCall;
use ethers::prelude::{Http, Provider, RetryClient};
use ethers::providers::PendingTransaction;
use ethers::providers::{Middleware, ProviderError};
use hex::ToHex;
use shared_types::FlowRangeProof;
use std::sync::Arc;
@ -20,6 +21,7 @@ use crate::watcher::MineContextMessage;
use zgs_spec::{BYTES_PER_SEAL, SECTORS_PER_SEAL};
const SUBMISSION_RETRIES: usize = 15;
const ADJUST_GAS_RETRIES: usize = 20;
pub struct Submitter {
mine_answer_receiver: mpsc::UnboundedReceiver<AnswerWithoutProof>,
@ -28,6 +30,13 @@ pub struct Submitter {
flow_contract: ZgsFlow<Provider<RetryClient<Http>>>,
default_gas_limit: Option<U256>,
store: Arc<Store>,
provider: Arc<Provider<RetryClient<Http>>>,
}
enum SubmissionAction {
Retry,
Success,
Error(String),
}
impl Submitter {
@ -41,7 +50,7 @@ impl Submitter {
config: &MinerConfig,
) {
let mine_contract = PoraMine::new(config.mine_address, signing_provider);
let flow_contract = ZgsFlow::new(config.flow_address, provider);
let flow_contract = ZgsFlow::new(config.flow_address, provider.clone());
let default_gas_limit = config.submission_gas;
let submitter = Submitter {
@ -51,6 +60,7 @@ impl Submitter {
flow_contract,
store,
default_gas_limit,
provider,
};
executor.spawn(
async move { Box::pin(submitter.start()).await },
@ -153,29 +163,96 @@ impl Submitter {
submission_call.estimate_gas().await
);
let pending_transaction: PendingTransaction<'_, _> = submission_call
.send()
self.submit_with_retry(submission_call).await
}
async fn submit_with_retry<M: Middleware, T: Detokenize>(
&self,
mut submission_call: ContractCall<M, T>,
) -> Result<(), String> {
let mut gas_price = self
.provider
.get_gas_price()
.await
.map_err(|e| format!("Fail to send PoRA submission transaction: {:?}", e))?;
.map_err(|e| format!("Failed to get current gas price {:?}", e))?;
let mut n_retry = 0;
while n_retry < ADJUST_GAS_RETRIES {
n_retry += 1;
submission_call = submission_call.gas_price(gas_price);
match self.submit_once(submission_call.clone()).await {
SubmissionAction::Retry => {
gas_price = next_gas_price(gas_price);
}
SubmissionAction::Success => {
return Ok(());
}
SubmissionAction::Error(e) => {
return Err(e);
}
}
}
Err("Submission failed after retries".to_string())
}
async fn submit_once<M: Middleware, T: Detokenize>(
&self,
submission_call: ContractCall<M, T>,
) -> SubmissionAction {
let pending_transaction = match submission_call.send().await {
Ok(tx) => tx,
Err(e) => {
if e.to_string().contains("insufficient funds")
|| e.to_string().contains("out of gas")
{
return SubmissionAction::Error(format!(
"Fail to execute PoRA submission transaction: {:?}",
e
));
}
// Log the error and increase gas.
debug!("Error sending transaction: {:?}", e);
return SubmissionAction::Retry;
}
};
debug!(
"Signed submission transaction hash: {:?}",
pending_transaction.tx_hash()
);
let receipt = pending_transaction
let receipt_result = pending_transaction
.retries(SUBMISSION_RETRIES)
.interval(Duration::from_secs(2))
.await
.map_err(|e| format!("Fail to execute PoRA submission transaction: {:?}", e))?
.ok_or(format!(
"PoRA submission transaction dropped after {} retries",
SUBMISSION_RETRIES
))?;
.await;
info!("Submit PoRA success, receipt: {:?}", receipt);
Ok(())
match receipt_result {
Ok(Some(receipt)) => {
// Successfully executed the transaction.
info!("Submit PoRA success, receipt: {:?}", receipt);
SubmissionAction::Success
}
Ok(None) => {
// The transaction did not complete within the specified waiting time.
debug!(
"Transaction dropped after {} retries; increasing gas and retrying",
SUBMISSION_RETRIES
);
SubmissionAction::Retry
}
Err(ProviderError::HTTPError(e)) => {
// For HTTP errors, increase gas and retry.
debug!("HTTP error retrieving receipt: {:?}", e);
SubmissionAction::Retry
}
Err(e) => {
// For all other errors, return immediately.
SubmissionAction::Error(format!(
"Fail to execute PoRA submission transaction: {:?}",
e
))
}
}
}
}
@ -186,3 +263,7 @@ fn flow_proof_to_pora_merkle_proof(flow_proof: FlowRangeProof) -> Vec<[u8; 32]>
// Exclude `item`, the nodes in the sealed data subtree, and `root`.
full_proof[depth_in_sealed_data + 1..full_proof.len() - 1].to_vec()
}
fn next_gas_price(current_gas_price: U256) -> U256 {
current_gas_price * U256::from(11) / U256::from(10)
}

View File

@ -740,7 +740,7 @@ where
&error,
ConnectionDirection::Outgoing,
);
// inform failures of requests comming outside the behaviour
// inform failures of requests coming outside the behaviour
if let RequestId::Application(id) = id {
self.add_event(BehaviourEvent::RPCFailed { peer_id, id });
}

View File

@ -54,7 +54,7 @@ impl Service {
struct Ev(PeerManagerEvent);
impl From<void::Void> for Ev {
fn from(_: void::Void) -> Self {
unreachable!("No events are emmited")
unreachable!("No events are emitted")
}
}
impl From<PeerManagerEvent> for Ev {

View File

@ -1,4 +1,4 @@
//! This crate aims to provide a common set of tools that can be used to create a "environment" to
//! This crate aims to provide a common set of tools that can be used to create an "environment" to
//! run Zgs services. This allows for the unification of creating tokio runtimes, etc.
//!
//! The idea is that the main thread creates an `Environment`, which is then used to spawn a

View File

@ -1,7 +1,8 @@
use task_executor::TaskExecutor;
use tracing::Level;
use tracing_log::AsLog;
use tracing_subscriber::EnvFilter;
use tracing_subscriber::layer::SubscriberExt;
use tracing_subscriber::util::SubscriberInitExt;
use tracing_subscriber::{EnvFilter, Layer};
const LOG_RELOAD_PERIOD_SEC: u64 = 30;
@ -15,19 +16,26 @@ pub fn configure(log_level_file: &str, log_directory: &str, executor: TaskExecut
.unwrap_or_default()
.trim_end()
.to_string();
let filter = EnvFilter::try_new(config.clone()).expect("invalid log level");
let (filter, reload_handle) = tracing_subscriber::reload::Layer::new(filter);
let builder = tracing_subscriber::fmt()
.with_max_level(Level::TRACE)
.with_env_filter(EnvFilter::try_new(config.clone()).expect("invalid log level"))
let fmt_layer = tracing_subscriber::fmt::layer()
.with_writer(non_blocking)
.with_ansi(false)
// .with_file(true)
// .with_line_number(true)
// .with_thread_names(true)
.with_filter_reloading();
let handle = builder.reload_handle();
builder.init();
.compact()
.with_filter(filter);
// .with_file(true)
// .with_line_number(true)
// .with_thread_names(true)
let subscriber = tracing_subscriber::registry().with(fmt_layer);
#[cfg(feature = "tokio-console")]
{
subscriber.with(console_subscriber::spawn()).init();
}
#[cfg(not(feature = "tokio-console"))]
{
subscriber.init();
}
// periodically check for config changes
executor.spawn(
@ -57,7 +65,7 @@ pub fn configure(log_level_file: &str, log_directory: &str, executor: TaskExecut
println!("Updating log config to {:?}", new_config);
match handle.reload(&new_config) {
match reload_handle.reload(&new_config) {
Ok(()) => {
rust_log::set_max_level(tracing_core::LevelFilter::current().as_log());
config = new_config

View File

@ -238,7 +238,7 @@ auto_sync_enabled = true
# Enable to start a file sync via RPC (e.g. `admin_startSyncFile`).
# sync_file_by_rpc_enabled = true
# Maximum number of continous failures to terminate a file sync.
# Maximum number of continuous failures to terminate a file sync.
# max_request_failures = 3
# Timeout to dial peers.

View File

@ -250,7 +250,7 @@ auto_sync_enabled = true
# Enable to start a file sync via RPC (e.g. `admin_startSyncFile`).
# sync_file_by_rpc_enabled = true
# Maximum number of continous failures to terminate a file sync.
# Maximum number of continuous failures to terminate a file sync.
# max_request_failures = 3
# Timeout to dial peers.

View File

@ -252,7 +252,7 @@
# Enable to start a file sync via RPC (e.g. `admin_startSyncFile`).
# sync_file_by_rpc_enabled = true
# Maximum number of continous failures to terminate a file sync.
# Maximum number of continuous failures to terminate a file sync.
# max_request_failures = 3
# Timeout to dial peers.

View File

@ -1,12 +1,11 @@
set -e
artifacts_path="$1"
check_abis() {
for contract_name in "$@"; do
diff $(./scripts/search_abi.sh "$artifacts_path" "$contract_name.json") "storage-contracts-abis/$contract_name.json"
diff "$(./scripts/search_abi.sh "$artifacts_path" "$contract_name.json")" "storage-contracts-abis/$contract_name.json"
done
}
check_abis DummyMarket DummyReward Flow PoraMine PoraMineTest FixedPrice ChunkLinearReward FixedPriceFlow
check_abis DummyMarket DummyReward Flow PoraMine PoraMineTest FixedPrice ChunkLinearReward FixedPriceFlow

View File

@ -10,22 +10,22 @@ PUBLIC_IP=$(curl -s https://ipinfo.io/ip)
FILE=run/config.toml
# enable sync
sed -in-place='' 's/# \[sync\]/\[sync\]/g' $FILE
sed -i 's/# \[sync\]/\[sync\]/g' $FILE
# enable auto_sync
sed -in-place='' 's/# auto_sync_enabled = false/auto_sync_enabled = true/g' $FILE
sed -i 's/# auto_sync_enabled = false/auto_sync_enabled = true/g' $FILE
# reduce timeout for finding peers
sed -in-place='' 's/# find_peer_timeout = .*/find_peer_timeout = "10s"/g' $FILE
sed -i 's/# find_peer_timeout = .*/find_peer_timeout = "10s"/g' $FILE
# set public ip
sed -in-place='' "s/# network_enr_address = .*/network_enr_address = \"$PUBLIC_IP\"/g" $FILE
sed -i "s/# network_enr_address = .*/network_enr_address = \"$PUBLIC_IP\"/g" $FILE
# set miner key
sed -in-place='' "s/miner_key = \"\"/miner_key = \"$MINER_KEY\"/g" $FILE
sed -i "s/miner_key = \"\"/miner_key = \"$MINER_KEY\"/g" $FILE
# set miner contract address
sed -in-place='' "s/mine_contract_address = .*/mine_contract_address = \"$MINE_CONTRACT\"/g" $FILE
sed -i "s/mine_contract_address = .*/mine_contract_address = \"$MINE_CONTRACT\"/g" $FILE
# set blockchain rpc endpoint
sed -in-place='' "s|blockchain_rpc_endpoint = .*|blockchain_rpc_endpoint = \"$BLOCKCHAIN_RPC\"|g" $FILE
sed -i "s|blockchain_rpc_endpoint = .*|blockchain_rpc_endpoint = \"$BLOCKCHAIN_RPC\"|g" $FILE
# set flow contract address
sed -in-place='' "s/log_contract_address = .*/log_contract_address = \"$FLOW_CONTRACT\"/g" $FILE
sed -i "s/log_contract_address = .*/log_contract_address = \"$FLOW_CONTRACT\"/g" $FILE
# set contract deployed block number
sed -in-place='' "s/log_sync_start_block_number = .*/log_sync_start_block_number = $BLOCK_NUMBER/g" $FILE
sed -i "s/log_sync_start_block_number = .*/log_sync_start_block_number = $BLOCK_NUMBER/g" $FILE
# update the boot node ids
sed -in-place='' 's|network_boot_nodes = .*|network_boot_nodes = ["/ip4/54.219.26.22/udp/1234/p2p/16Uiu2HAmTVDGNhkHD98zDnJxQWu3i1FL1aFYeh9wiQTNu4pDCgps","/ip4/52.52.127.117/udp/1234/p2p/16Uiu2HAkzRjxK2gorngB1Xq84qDrT4hSVznYDHj6BkbaE4SGx9oS","/ip4/18.167.69.68/udp/1234/p2p/16Uiu2HAm2k6ua2mGgvZ8rTMV8GhpW71aVzkQWy7D37TTDuLCpgmX"]|g' $FILE
sed -i 's|network_boot_nodes = .*|network_boot_nodes = ["/ip4/54.219.26.22/udp/1234/p2p/16Uiu2HAmTVDGNhkHD98zDnJxQWu3i1FL1aFYeh9wiQTNu4pDCgps","/ip4/52.52.127.117/udp/1234/p2p/16Uiu2HAkzRjxK2gorngB1Xq84qDrT4hSVznYDHj6BkbaE4SGx9oS","/ip4/18.167.69.68/udp/1234/p2p/16Uiu2HAm2k6ua2mGgvZ8rTMV8GhpW71aVzkQWy7D37TTDuLCpgmX"]|g' $FILE

View File

@ -20,12 +20,12 @@ This is a rust implementation of the [Discovery v5](https://github.com/ethereum/
peer discovery protocol.
Discovery v5 is a protocol designed for encrypted peer discovery and topic advertisement. Each peer/node
on the network is identified via it's `ENR` ([Ethereum Node
on the network is identified via its `ENR` ([Ethereum Node
Record](https://eips.ethereum.org/EIPS/eip-778)), which is essentially a signed key-value store
containing the node's public key and optionally IP address and port.
Discv5 employs a kademlia-like routing table to store and manage discovered peers and topics. The
protocol allows for external IP discovery in NAT environments through regular PING/PONG's with
protocol allows for external IP discovery in NAT environments through regular PING/PONGs with
discovered nodes. Nodes return the external IP address that they have received and a simple
majority is chosen as our external IP address. If an external IP address is updated, this is
produced as an event to notify the swarm (if one is used for this behaviour).

View File

@ -736,7 +736,7 @@ enum ClosestBucketsIterState {
/// The starting state of the iterator yields the first bucket index and
/// then transitions to `ZoomIn`.
Start(BucketIndex),
/// The iterator "zooms in" to to yield the next bucket containing nodes that
/// The iterator "zooms in" to yield the next bucket containing nodes that
/// are incrementally closer to the local node but further from the `target`.
/// These buckets are identified by a `1` in the corresponding bit position
/// of the distance bit string. When bucket `0` is reached, the iterator

View File

@ -1,6 +1,6 @@
MIT License
Copyright (c) 2020 Age Manning
Copyright (c) 2025 Age Manning
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal

View File

@ -406,7 +406,7 @@ impl_for_vec!(SmallVec<[T; 8]>, Some(8));
/// Decodes `bytes` as if it were a list of variable-length items.
///
/// The `ssz::SszDecoder` can also perform this functionality, however it it significantly faster
/// The `ssz::SszDecoder` can also perform this functionality, however it is significantly faster
/// as it is optimized to read same-typed items whilst `ssz::SszDecoder` supports reading items of
/// differing types.
pub fn decode_list_of_variable_length_items<T: Decode>(