Skip to content

Commit 1b48099

Browse files
Filipe Azevedoleoyvens
Filipe Azevedo
andauthored
bump rust version (#4985)
* bump rust version * fix tests * refactor(runtime): Avoid RefCell, remove wasmtime dependency from traits The crux is in the definition of `WasmInstanceContext`, an how it implements both `wasmtime::AsContext` and our `AscHeap`. * restore graph-runtime-wasm as a crate, revert most changes to chain crates * fix(tests): Fix runtime tests * fix(ci): Fix clippy lint * perf: Use `Arc` instead of `Cow` in the entity cache * fix rebase artifacts * refactor: Remove dead dependencies with cargo machete --------- Co-authored-by: Leonardo Yvens <[email protected]>
1 parent 328cfaa commit 1b48099

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

79 files changed

+3349
-2761
lines changed

Diff for: Cargo.lock

+548-328
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Diff for: Cargo.toml

+3
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
[workspace]
2+
resolver = "2"
23
members = [
34
"core",
45
"chain/*",
@@ -26,6 +27,8 @@ prost = "0.11.9"
2627
prost-types = "0.11.9"
2728
tonic = { version = "0.8.3", features = ["tls-roots", "gzip"] }
2829
tonic-build = { version = "0.8.4", features = ["prost"] }
30+
wasmtime = "15.0.1"
31+
wasmparser = "0.118.1"
2932

3033
# Incremental compilation on Rust 1.58 causes an ICE on build. As soon as graph node builds again, these can be removed.
3134
[profile.test]

Diff for: chain/arweave/src/data_source.rs

+6-5
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,13 @@
11
use graph::anyhow::Context;
22
use graph::blockchain::{Block, TriggerWithHandler};
33
use graph::components::store::StoredDynamicDataSource;
4+
use graph::components::subgraph::InstanceDSTemplateInfo;
45
use graph::data::subgraph::DataSourceContext;
56
use graph::prelude::SubgraphManifestValidationError;
67
use graph::{
78
anyhow::{anyhow, Error},
89
blockchain::{self, Blockchain},
9-
prelude::{
10-
async_trait, BlockNumber, CheapClone, DataSourceTemplateInfo, Deserialize, Link,
11-
LinkResolver, Logger,
12-
},
10+
prelude::{async_trait, BlockNumber, CheapClone, Deserialize, Link, LinkResolver, Logger},
1311
semver,
1412
};
1513
use std::collections::HashSet;
@@ -34,7 +32,10 @@ pub struct DataSource {
3432
}
3533

3634
impl blockchain::DataSource<Chain> for DataSource {
37-
fn from_template_info(_info: DataSourceTemplateInfo<Chain>) -> Result<Self, Error> {
35+
fn from_template_info(
36+
_info: InstanceDSTemplateInfo,
37+
_template: &graph::data_source::DataSourceTemplate<Chain>,
38+
) -> Result<Self, Error> {
3839
Err(anyhow!("Arweave subgraphs do not support templates"))
3940
}
4041

Diff for: chain/cosmos/src/data_source.rs

+6-3
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,13 @@ use std::sync::Arc;
33

44
use anyhow::{Context, Error, Result};
55

6+
use graph::components::subgraph::InstanceDSTemplateInfo;
67
use graph::{
78
blockchain::{self, Block, Blockchain, TriggerWithHandler},
89
components::store::StoredDynamicDataSource,
910
data::subgraph::DataSourceContext,
1011
prelude::{
11-
anyhow, async_trait, BlockNumber, CheapClone, DataSourceTemplateInfo, Deserialize, Link,
12-
LinkResolver, Logger,
12+
anyhow, async_trait, BlockNumber, CheapClone, Deserialize, Link, LinkResolver, Logger,
1313
},
1414
};
1515

@@ -41,7 +41,10 @@ pub struct DataSource {
4141
}
4242

4343
impl blockchain::DataSource<Chain> for DataSource {
44-
fn from_template_info(_template_info: DataSourceTemplateInfo<Chain>) -> Result<Self, Error> {
44+
fn from_template_info(
45+
_info: InstanceDSTemplateInfo,
46+
_template: &graph::data_source::DataSourceTemplate<Chain>,
47+
) -> Result<Self, Error> {
4548
Err(anyhow!(TEMPLATE_ERROR))
4649
}
4750

Diff for: chain/cosmos/src/protobuf/mod.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
#[path = "sf.cosmos.r#type.v1.rs"]
33
pub mod pbcodec;
44

5-
pub use graph_runtime_wasm::asc_abi::class::{Array, AscEnum, AscString, Uint8Array};
5+
pub use graph_runtime_wasm::asc_abi::class::{Array, Uint8Array};
66

77
pub use crate::runtime::abi::*;
88
pub use pbcodec::*;

Diff for: chain/ethereum/src/data_source.rs

+17-10
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ use anyhow::{anyhow, Error};
22
use anyhow::{ensure, Context};
33
use graph::blockchain::TriggerWithHandler;
44
use graph::components::store::StoredDynamicDataSource;
5+
use graph::components::subgraph::InstanceDSTemplateInfo;
56
use graph::data_source::CausalityRegion;
67
use graph::prelude::ethabi::ethereum_types::H160;
78
use graph::prelude::ethabi::StateMutability;
@@ -22,8 +23,8 @@ use graph::{
2223
ethabi::{Address, Contract, Event, Function, LogParam, ParamType, RawLog},
2324
serde_json, warn,
2425
web3::types::{Log, Transaction, H256},
25-
BlockNumber, CheapClone, DataSourceTemplateInfo, Deserialize, EthereumCall,
26-
LightEthereumBlock, LightEthereumBlockExt, LinkResolver, Logger, TryStreamExt,
26+
BlockNumber, CheapClone, Deserialize, EthereumCall, LightEthereumBlock,
27+
LightEthereumBlockExt, LinkResolver, Logger, TryStreamExt,
2728
},
2829
};
2930

@@ -59,14 +60,20 @@ pub struct DataSource {
5960
}
6061

6162
impl blockchain::DataSource<Chain> for DataSource {
62-
fn from_template_info(info: DataSourceTemplateInfo<Chain>) -> Result<Self, Error> {
63-
let DataSourceTemplateInfo {
64-
template,
63+
fn from_template_info(
64+
info: InstanceDSTemplateInfo,
65+
ds_template: &graph::data_source::DataSourceTemplate<Chain>,
66+
) -> Result<Self, Error> {
67+
// Note: There clearly is duplication between the data in `ds_template and the `template`
68+
// field here. Both represent a template definition, would be good to unify them.
69+
let InstanceDSTemplateInfo {
70+
template: _,
6571
params,
6672
context,
6773
creation_block,
6874
} = info;
69-
let template = template.into_onchain().ok_or(anyhow!(
75+
76+
let template = ds_template.as_onchain().ok_or(anyhow!(
7077
"Cannot create onchain data source from offchain template"
7178
))?;
7279

@@ -94,14 +101,14 @@ impl blockchain::DataSource<Chain> for DataSource {
94101
.with_context(|| format!("template `{}`", template.name))?;
95102

96103
Ok(DataSource {
97-
kind: template.kind,
98-
network: template.network,
99-
name: template.name,
104+
kind: template.kind.clone(),
105+
network: template.network.clone(),
106+
name: template.name.clone(),
100107
manifest_idx: template.manifest_idx,
101108
address: Some(address),
102109
start_block: creation_block,
103110
end_block: None,
104-
mapping: template.mapping,
111+
mapping: template.mapping.clone(),
105112
context: Arc::new(context),
106113
creation_block: Some(creation_block),
107114
contract_abi,

Diff for: chain/ethereum/src/runtime/runtime_adapter.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ impl blockchain::RuntimeAdapter<Chain> for RuntimeAdapter {
118118
fn ethereum_call(
119119
eth_adapter: &EthereumAdapter,
120120
call_cache: Arc<dyn EthereumCallCache>,
121-
ctx: HostFnCtx<'_>,
121+
ctx: HostFnCtx,
122122
wasm_ptr: u32,
123123
abis: &[Arc<MappingABI>],
124124
eth_call_gas: Option<u32>,

Diff for: chain/ethereum/src/transport.rs

-1
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,6 @@ impl web3::Transport for Transport {
9898
conn_type: graph::endpoint::ConnectionType::Rpc,
9999
};
100100
let out = async move {
101-
let labels = labels;
102101
let out = client.send(id, request).await;
103102
match out {
104103
Ok(_) => metrics.success(&labels),

Diff for: chain/near/src/data_source.rs

+6-5
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,13 @@
11
use graph::anyhow::Context;
22
use graph::blockchain::{Block, TriggerWithHandler};
33
use graph::components::store::StoredDynamicDataSource;
4+
use graph::components::subgraph::InstanceDSTemplateInfo;
45
use graph::data::subgraph::DataSourceContext;
56
use graph::prelude::SubgraphManifestValidationError;
67
use graph::{
78
anyhow::{anyhow, Error},
89
blockchain::{self, Blockchain},
9-
prelude::{
10-
async_trait, BlockNumber, CheapClone, DataSourceTemplateInfo, Deserialize, Link,
11-
LinkResolver, Logger,
12-
},
10+
prelude::{async_trait, BlockNumber, CheapClone, Deserialize, Link, LinkResolver, Logger},
1311
semver,
1412
};
1513
use std::collections::HashSet;
@@ -35,7 +33,10 @@ pub struct DataSource {
3533
}
3634

3735
impl blockchain::DataSource<Chain> for DataSource {
38-
fn from_template_info(_template_info: DataSourceTemplateInfo<Chain>) -> Result<Self, Error> {
36+
fn from_template_info(
37+
_info: InstanceDSTemplateInfo,
38+
_template: &graph::data_source::DataSourceTemplate<Chain>,
39+
) -> Result<Self, Error> {
3940
Err(anyhow!("Near subgraphs do not support templates"))
4041

4142
// How this might be implemented if/when Near gets support for templates:

Diff for: chain/starknet/src/data_source.rs

+9-3
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
use graph::{
22
anyhow::{anyhow, Error},
33
blockchain::{self, Block as BlockchainBlock, TriggerWithHandler},
4-
components::{link_resolver::LinkResolver, store::StoredDynamicDataSource},
4+
components::{
5+
link_resolver::LinkResolver, store::StoredDynamicDataSource,
6+
subgraph::InstanceDSTemplateInfo,
7+
},
58
data::subgraph::{DataSourceContext, SubgraphManifestValidationError},
6-
prelude::{async_trait, BlockNumber, DataSourceTemplateInfo, Deserialize, Link, Logger},
9+
prelude::{async_trait, BlockNumber, Deserialize, Link, Logger},
710
semver,
811
};
912
use sha3::{Digest, Keccak256};
@@ -88,7 +91,10 @@ pub struct DataSourceTemplate;
8891
pub struct UnresolvedDataSourceTemplate;
8992

9093
impl blockchain::DataSource<Chain> for DataSource {
91-
fn from_template_info(_template_info: DataSourceTemplateInfo<Chain>) -> Result<Self, Error> {
94+
fn from_template_info(
95+
_info: InstanceDSTemplateInfo,
96+
_template: &graph::data_source::DataSourceTemplate<Chain>,
97+
) -> Result<Self, Error> {
9298
Err(anyhow!("StarkNet subgraphs do not support templates"))
9399
}
94100

Diff for: chain/substreams/Cargo.toml

-9
Original file line numberDiff line numberDiff line change
@@ -7,25 +7,16 @@ edition.workspace = true
77
tonic-build = { workspace = true }
88

99
[dependencies]
10-
async-stream = "0.3"
11-
envconfig = "0.10.0"
12-
futures = "0.1.21"
13-
http = "0.2.4"
14-
jsonrpc-core = "18.0.0"
1510
graph = { path = "../../graph" }
1611
graph-runtime-wasm = { path = "../../runtime/wasm" }
1712
lazy_static = "1.2.0"
1813
serde = "1.0"
1914
prost = { workspace = true }
2015
prost-types = { workspace = true }
21-
dirs-next = "2.0"
2216
anyhow = "1.0"
23-
tiny-keccak = "1.5.0"
2417
hex = "0.4.3"
2518
semver = "1.0.21"
2619
base64 = "0.20.0"
2720

28-
itertools = "0.12.0"
29-
3021
[dev-dependencies]
3122
tokio = { version = "1", features = ["full"] }

Diff for: chain/substreams/src/data_source.rs

+6-3
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ use anyhow::{anyhow, Context, Error};
44
use graph::{
55
blockchain,
66
cheap_clone::CheapClone,
7-
components::link_resolver::LinkResolver,
8-
prelude::{async_trait, BlockNumber, DataSourceTemplateInfo, Link},
7+
components::{link_resolver::LinkResolver, subgraph::InstanceDSTemplateInfo},
8+
prelude::{async_trait, BlockNumber, Link},
99
slog::Logger,
1010
};
1111

@@ -35,7 +35,10 @@ pub struct DataSource {
3535
}
3636

3737
impl blockchain::DataSource<Chain> for DataSource {
38-
fn from_template_info(_template_info: DataSourceTemplateInfo<Chain>) -> Result<Self, Error> {
38+
fn from_template_info(
39+
_info: InstanceDSTemplateInfo,
40+
_template: &graph::data_source::DataSourceTemplate<Chain>,
41+
) -> Result<Self, Error> {
3942
Err(anyhow!("Substreams does not support templates"))
4043
}
4144

Diff for: chain/substreams/src/trigger.rs

+5-5
Original file line numberDiff line numberDiff line change
@@ -194,19 +194,19 @@ impl<T> graph::prelude::TriggerProcessor<Chain, T> for TriggerProcessor
194194
where
195195
T: RuntimeHostBuilder<Chain>,
196196
{
197-
async fn process_trigger(
198-
&self,
197+
async fn process_trigger<'a>(
198+
&'a self,
199199
logger: &Logger,
200-
_: Box<dyn Iterator<Item = &T::Host> + Send + '_>,
200+
_: Box<dyn Iterator<Item = &T::Host> + Send + 'a>,
201201
block: &Arc<Block>,
202202
_trigger: &data_source::TriggerData<Chain>,
203-
mut state: BlockState<Chain>,
203+
mut state: BlockState,
204204
proof_of_indexing: &SharedProofOfIndexing,
205205
causality_region: &str,
206206
_debug_fork: &Option<Arc<dyn SubgraphFork>>,
207207
_subgraph_metrics: &Arc<graph::prelude::SubgraphInstanceMetrics>,
208208
_instrument: bool,
209-
) -> Result<BlockState<Chain>, MappingError> {
209+
) -> Result<BlockState, MappingError> {
210210
for parsed_change in block.parsed_changes.clone().into_iter() {
211211
match parsed_change {
212212
ParsedChanges::Unset => {

Diff for: core/Cargo.toml

+1-7
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ edition.workspace = true
66
[dependencies]
77
async-trait = "0.1.50"
88
atomic_refcell = "0.1.13"
9-
async-stream = "0.3"
109
bytes = "1.0"
1110
futures01 = { package = "futures", version = "0.1.31" }
1211
futures = { version = "0.3.4", features = ["compat"] }
@@ -19,15 +18,10 @@ graph-chain-near = { path = "../chain/near" }
1918
graph-chain-cosmos = { path = "../chain/cosmos" }
2019
graph-chain-substreams = { path = "../chain/substreams" }
2120
graph-chain-starknet = { path = "../chain/starknet" }
22-
lazy_static = "1.2.0"
23-
lru_time_cache = "0.11"
24-
semver = "1.0.21"
25-
serde = "1.0"
26-
serde_json = "1.0"
21+
graph-runtime-wasm = { path = "../runtime/wasm" }
2722
serde_yaml = "0.9.21"
2823
# Switch to crates.io once tower 0.5 is released
2924
tower = { git = "https://github.com/tower-rs/tower.git", features = ["full"] }
30-
graph-runtime-wasm = { path = "../runtime/wasm" }
3125
cid = "0.11.0"
3226
anyhow = "1.0"
3327

Diff for: core/src/lib.rs

-2
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
pub mod polling_monitor;
22

3-
mod link_resolver;
43
mod subgraph;
54

6-
pub use crate::link_resolver::LinkResolver;
75
pub use crate::subgraph::{
86
SubgraphAssignmentProvider, SubgraphInstanceManager, SubgraphRegistrar, SubgraphRunner,
97
SubgraphTriggerProcessor,

Diff for: core/src/subgraph/context/instance/mod.rs

+3-1
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,9 @@ where
139139
}
140140

141141
let is_onchain = data_source.is_onchain();
142-
let Some(host) = self.new_host(logger.clone(), data_source)? else { return Ok(None) };
142+
let Some(host) = self.new_host(logger.clone(), data_source)? else {
143+
return Ok(None);
144+
};
143145

144146
// Check for duplicates and add the host.
145147
if is_onchain {

Diff for: core/src/subgraph/context/mod.rs

+6-6
Original file line numberDiff line numberDiff line change
@@ -107,13 +107,13 @@ impl<C: Blockchain, T: RuntimeHostBuilder<C>> IndexingContext<C, T> {
107107
logger: &Logger,
108108
block: &Arc<C::Block>,
109109
trigger: &TriggerData<C>,
110-
state: BlockState<C>,
110+
state: BlockState,
111111
proof_of_indexing: &SharedProofOfIndexing,
112112
causality_region: &str,
113113
debug_fork: &Option<Arc<dyn SubgraphFork>>,
114114
subgraph_metrics: &Arc<SubgraphInstanceMetrics>,
115115
instrument: bool,
116-
) -> Result<BlockState<C>, MappingError> {
116+
) -> Result<BlockState, MappingError> {
117117
self.process_trigger_in_hosts(
118118
logger,
119119
self.instance.hosts_for_trigger(trigger),
@@ -136,13 +136,13 @@ impl<C: Blockchain, T: RuntimeHostBuilder<C>> IndexingContext<C, T> {
136136
block_time: BlockTime,
137137
block_data: Box<[u8]>,
138138
handler: String,
139-
mut state: BlockState<C>,
139+
mut state: BlockState,
140140
proof_of_indexing: &SharedProofOfIndexing,
141141
causality_region: &str,
142142
debug_fork: &Option<Arc<dyn SubgraphFork>>,
143143
subgraph_metrics: &Arc<SubgraphInstanceMetrics>,
144144
instrument: bool,
145-
) -> Result<BlockState<C>, MappingError> {
145+
) -> Result<BlockState, MappingError> {
146146
let error_count = state.deterministic_errors.len();
147147

148148
if let Some(proof_of_indexing) = proof_of_indexing {
@@ -195,13 +195,13 @@ impl<C: Blockchain, T: RuntimeHostBuilder<C>> IndexingContext<C, T> {
195195
hosts: Box<dyn Iterator<Item = &T::Host> + Send + '_>,
196196
block: &Arc<C::Block>,
197197
trigger: &TriggerData<C>,
198-
state: BlockState<C>,
198+
state: BlockState,
199199
proof_of_indexing: &SharedProofOfIndexing,
200200
causality_region: &str,
201201
debug_fork: &Option<Arc<dyn SubgraphFork>>,
202202
subgraph_metrics: &Arc<SubgraphInstanceMetrics>,
203203
instrument: bool,
204-
) -> Result<BlockState<C>, MappingError> {
204+
) -> Result<BlockState, MappingError> {
205205
self.trigger_processor
206206
.process_trigger(
207207
logger,

0 commit comments

Comments
 (0)