Skip to content

Commit a8185ed

Browse files
authored
Merge pull request #138 from Abidoyesimze/feature/event-indexing-and-indexer
Event indexing: on-chain topics, new indexer service, optimized storage, filtering API, archiving, and query performance monitoring
2 parents ace052a + 9b69a47 commit a8185ed

20 files changed

Lines changed: 2239 additions & 112 deletions

File tree

Cargo.lock

Lines changed: 1537 additions & 104 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ members = [
2424
"contracts/third-party",
2525
"contracts/staking",
2626
"contracts/governance",
27+
"indexer",
2728
]
2829
resolver = "2"
2930

Dockerfile.indexer

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
FROM rust:1.76 as builder
2+
WORKDIR /app
3+
COPY Cargo.toml ./
4+
COPY indexer/Cargo.toml indexer/Cargo.toml
5+
RUN mkdir -p contracts && mkdir -p security-audit && mkdir -p contracts/lib && mkdir -p contracts/traits && mkdir -p contracts/proxy && mkdir -p contracts/escrow && mkdir -p contracts/ipfs-metadata && mkdir -p contracts/oracle && mkdir -p contracts/bridge && mkdir -p contracts/property-token && mkdir -p contracts/insurance && mkdir -p contracts/analytics && mkdir -p contracts/fees && mkdir -p contracts/compliance_registry && mkdir -p contracts/fractional && mkdir -p contracts/prediction-market && mkdir -p contracts/metadata && mkdir -p contracts/database && mkdir -p contracts/third-party && mkdir -p contracts/staking && mkdir -p contracts/governance
6+
# Create empty Cargo.toml for workspace members to allow cargo to resolve workspace (avoid building them)
7+
RUN bash -lc 'for d in contracts/* security-audit; do echo -e "[package]\nname=\"dummy-${d//\//-}\"\nversion=\"0.0.0\"\nedition=\"2021\"\n[lib]\npath=\"lib.rs\"\n" > $d/Cargo.toml && echo "" > $d/lib.rs; done'
8+
COPY indexer /app/indexer
9+
RUN cargo build -p propchain-indexer --release --features ingest
10+
11+
FROM gcr.io/distroless/cc-debian12
12+
WORKDIR /app
13+
COPY --from=builder /app/target/release/propchain-indexer /usr/local/bin/propchain-indexer
14+
ENV RUST_LOG=info
15+
EXPOSE 8088
16+
ENTRYPOINT ["/usr/local/bin/propchain-indexer"]
17+

cobertura.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
<?xml version="1.0"?><coverage lines-covered="145" lines-valid="262" line-rate="0.5534351145038168" branches-covered="0" branches-valid="0" branch-rate="0" complexity="0" version="1.9" timestamp="1774716234"><sources><source>/home/simze/web3-project/PropChain-contract</source></sources><packages><package name="contracts/third-party/src" line-rate="0" branch-rate="0" complexity="0"><classes></classes></package><package name="contracts/bridge/src" line-rate="0" branch-rate="0" complexity="0"><classes></classes></package><package name="contracts/analytics/src" line-rate="0" branch-rate="0" complexity="0"><classes></classes></package><package name="contracts/database/src" line-rate="0" branch-rate="0" complexity="0"><classes></classes></package><package name="contracts/metadata/src" line-rate="0" branch-rate="0" complexity="0"><classes></classes></package><package name="contracts/ai-valuation/src" line-rate="0" branch-rate="0" complexity="0"><classes></classes></package><package name="contracts/prediction-market/src" line-rate="0" branch-rate="0" complexity="0"><classes></classes></package><package name="contracts/fractional/src" line-rate="0" branch-rate="0" complexity="0"><classes><class name="lib" filename="contracts/fractional/src/lib.rs" line-rate="0" branch-rate="0" complexity="0"><methods/><lines><line number="62" hits="0"/><line number="77" hits="0"/><line number="82" hits="0"/><line number="87" hits="0"/><line number="107" hits="0"/></lines></class></classes></package><package name="contracts/fees/src" line-rate="0" branch-rate="0" complexity="0"><classes></classes></package><package name="contracts/escrow/src" line-rate="0" branch-rate="0" complexity="0"><classes></classes></package><package name="contracts/staking/src" line-rate="0.88" branch-rate="0" complexity="0"><classes><class name="lib" filename="contracts/staking/src/lib.rs" line-rate="0.88" branch-rate="0" complexity="0"><methods/><lines><line number="112" hits="4"/><line number="122" hits="1"/><line number="231" hits="0"/><line number="233" hits="0"/><line number="257" hits="0"/><line number="263" hits="0"/><line number="264" hits="3"/><line number="269" hits="0"/><line number="270" hits="1"/><line number="275" hits="0"/><line number="276" hits="2"/><line number="281" hits="2"/><line number="282" hits="1"/><line number="283" hits="1"/><line number="291" hits="2"/><line number="297" hits="0"/><line number="298" hits="1"/><line number="305" hits="5"/><line number="308" hits="1"/><line number="311" hits="1"/><line number="314" hits="3"/><line number="318" hits="2"/><line number="327" hits="4"/><line number="331" hits="4"/><line number="332" hits="4"/><line number="333" hits="4"/><line number="336" hits="4"/><line number="337" hits="4"/><line number="338" hits="4"/><line number="352" hits="2"/><line number="354" hits="4"/><line number="356" hits="1"/><line number="357" hits="1"/><line number="364" hits="1"/><line number="366" hits="1"/><line number="367" hits="2"/><line number="370" hits="1"/><line number="384" hits="2"/><line number="386" hits="4"/><line number="388" hits="1"/><line number="389" hits="1"/><line number="390" hits="0"/><line number="392" hits="1"/><line number="393" hits="0"/><line number="396" hits="1"/><line number="397" hits="1"/><line number="398" hits="1"/><line number="405" hits="1"/><line number="410" hits="2"/><line number="412" hits="4"/><line number="414" hits="3"/><line number="419" hits="1"/><line number="422" hits="1"/><line number="423" hits="1"/><line number="428" hits="2"/><line number="430" hits="1"/><line number="440" hits="2"/><line number="441" hits="1"/><line number="443" hits="1"/><line number="447" hits="1"/><line number="459" hits="2"/><line number="464" hits="2"/><line number="466" hits="1"/><line number="470" hits="1"/><line number="471" hits="1"/><line number="490" hits="1"/><line number="491" hits="1"/><line number="493" hits="1"/><line number="499" hits="2"/><line number="501" hits="1"/><line number="507" hits="1"/><line number="510" hits="1"/><line number="512" hits="1"/><line number="513" hits="2"/><line number="514" hits="2"/></lines></class></classes></package><package name="contracts/traits/src" line-rate="0" branch-rate="0" complexity="0"><classes><class name="errors" filename="contracts/traits/src/errors.rs" line-rate="0" branch-rate="0" complexity="0"><methods/><lines><line number="30" hits="0"/><line number="31" hits="0"/><line number="32" hits="0"/><line number="33" hits="0"/><line number="34" hits="0"/><line number="35" hits="0"/><line number="36" hits="0"/><line number="37" hits="0"/><line number="38" hits="0"/><line number="39" hits="0"/><line number="40" hits="0"/><line number="41" hits="0"/></lines></class></classes></package><package name="tests" line-rate="0" branch-rate="0" complexity="0"><classes><class name="test_utils" filename="tests/test_utils.rs" line-rate="0" branch-rate="0" complexity="0"><methods/><lines><line number="169" hits="0"/><line number="170" hits="0"/><line number="171" hits="0"/><line number="172" hits="0"/><line number="174" hits="0"/><line number="180" hits="0"/><line number="181" hits="0"/><line number="236" hits="0"/><line number="237" hits="0"/><line number="238" hits="0"/><line number="239" hits="0"/><line number="247" hits="0"/><line number="248" hits="0"/><line number="249" hits="0"/><line number="250" hits="0"/></lines></class></classes></package><package name="contracts/lib/src" line-rate="0" branch-rate="0" complexity="0"><classes><class name="error_handling" filename="contracts/lib/src/error_handling.rs" line-rate="0" branch-rate="0" complexity="0"><methods/><lines><line number="76" hits="0"/><line number="77" hits="0"/><line number="80" hits="0"/><line number="81" hits="0"/><line number="87" hits="0"/><line number="88" hits="0"/><line number="89" hits="0"/><line number="99" hits="0"/><line number="100" hits="0"/><line number="101" hits="0"/><line number="299" hits="0"/><line number="300" hits="0"/><line number="301" hits="0"/><line number="302" hits="0"/><line number="304" hits="0"/><line number="308" hits="0"/><line number="310" hits="0"/><line number="311" hits="0"/><line number="312" hits="0"/><line number="313" hits="0"/><line number="325" hits="0"/><line number="326" hits="0"/><line number="327" hits="0"/><line number="328" hits="0"/><line number="330" hits="0"/><line number="340" hits="0"/><line number="341" hits="0"/><line number="342" hits="0"/><line number="343" hits="0"/><line number="345" hits="0"/><line number="356" hits="0"/><line number="357" hits="0"/><line number="358" hits="0"/><line number="359" hits="0"/><line number="361" hits="0"/><line number="374" hits="0"/><line number="375" hits="0"/><line number="376" hits="0"/><line number="377" hits="0"/><line number="379" hits="0"/><line number="380" hits="0"/><line number="392" hits="0"/><line number="393" hits="0"/><line number="394" hits="0"/><line number="395" hits="0"/><line number="396" hits="0"/><line number="397" hits="0"/><line number="399" hits="0"/><line number="400" hits="0"/><line number="412" hits="0"/><line number="413" hits="0"/><line number="414" hits="0"/><line number="415" hits="0"/><line number="416" hits="0"/><line number="417" hits="0"/><line number="419" hits="0"/><line number="420" hits="0"/><line number="422" hits="0"/><line number="423" hits="0"/><line number="426" hits="0"/><line number="437" hits="0"/><line number="438" hits="0"/><line number="439" hits="0"/><line number="440" hits="0"/><line number="441" hits="0"/><line number="442" hits="0"/></lines></class></classes></package><package name="contracts/zk-compliance" line-rate="0" branch-rate="0" complexity="0"><classes></classes></package><package name="contracts/governance/src" line-rate="0" branch-rate="0" complexity="0"><classes></classes></package><package name="contracts/insurance/src" line-rate="0" branch-rate="0" complexity="0"><classes></classes></package><package name="contracts/compliance_registry" line-rate="0.8876404494382022" branch-rate="0" complexity="0"><classes><class name="lib" filename="contracts/compliance_registry/lib.rs" line-rate="0.8876404494382022" branch-rate="0" complexity="0"><methods/><lines><line number="489" hits="6"/><line number="492" hits="3"/><line number="512" hits="1"/><line number="593" hits="3"/><line number="603" hits="2"/><line number="605" hits="1"/><line number="610" hits="2"/><line number="618" hits="1"/><line number="623" hits="2"/><line number="624" hits="1"/><line number="625" hits="2"/><line number="656" hits="1"/><line number="677" hits="1"/><line number="687" hits="2"/><line number="691" hits="1"/><line number="692" hits="0"/><line number="693" hits="0"/><line number="697" hits="1"/><line number="698" hits="1"/><line number="699" hits="1"/><line number="708" hits="2"/><line number="709" hits="4"/><line number="710" hits="5"/><line number="712" hits="5"/><line number="715" hits="5"/><line number="718" hits="2"/><line number="726" hits="3"/><line number="727" hits="1"/><line number="731" hits="1"/><line number="734" hits="1"/><line number="748" hits="4"/><line number="754" hits="2"/><line number="756" hits="2"/><line number="757" hits="2"/><line number="758" hits="2"/><line number="766" hits="2"/><line number="767" hits="1"/><line number="769" hits="2"/><line number="771" hits="2"/><line number="778" hits="2"/><line number="788" hits="5"/><line number="794" hits="2"/><line number="796" hits="2"/><line number="797" hits="3"/><line number="798" hits="3"/><line number="799" hits="3"/><line number="800" hits="0"/><line number="806" hits="3"/><line number="837" hits="6"/><line number="840" hits="6"/><line number="844" hits="3"/><line number="845" hits="3"/><line number="846" hits="3"/><line number="856" hits="3"/><line number="971" hits="2"/><line number="980" hits="1"/><line number="981" hits="0"/><line number="983" hits="0"/><line number="988" hits="1"/><line number="989" hits="1"/><line number="1002" hits="1"/><line number="1004" hits="1"/><line number="1011" hits="1"/><line number="1194" hits="2"/><line number="1199" hits="1"/><line number="1202" hits="1"/><line number="1204" hits="1"/><line number="1206" hits="1"/><line number="1208" hits="1"/><line number="1212" hits="1"/><line number="1218" hits="3"/><line number="1229" hits="1"/><line number="1242" hits="2"/><line number="1243" hits="1"/><line number="1244" hits="1"/><line number="1245" hits="1"/><line number="1247" hits="1"/><line number="1248" hits="0"/><line number="1253" hits="2"/><line number="1270" hits="2"/><line number="1271" hits="1"/><line number="1283" hits="0"/><line number="1303" hits="0"/><line number="1304" hits="0"/><line number="1338" hits="2"/><line number="1339" hits="1"/><line number="1346" hits="2"/><line number="1347" hits="1"/><line number="1401" hits="0"/></lines></class></classes></package><package name="indexer/src" line-rate="0" branch-rate="0" complexity="0"><classes></classes></package><package name="contracts/property-token/src" line-rate="0" branch-rate="0" complexity="0"><classes></classes></package><package name="contracts/proxy/src" line-rate="0" branch-rate="0" complexity="0"><classes></classes></package><package name="security-audit/src" line-rate="0" branch-rate="0" complexity="0"><classes></classes></package><package name="contracts/oracle/src" line-rate="0" branch-rate="0" complexity="0"><classes></classes></package><package name="contracts/property-management/src" line-rate="0" branch-rate="0" complexity="0"><classes></classes></package><package name="contracts/ipfs-metadata/src" line-rate="0" branch-rate="0" complexity="0"><classes></classes></package></packages></coverage>

contracts/compliance_registry/lib.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -536,6 +536,12 @@ mod compliance_registry {
536536
pub lists_checked: Vec<u8>,
537537
}
538538

539+
impl Default for ComplianceRegistry {
540+
fn default() -> Self {
541+
Self::new()
542+
}
543+
}
544+
539545
impl ComplianceRegistry {
540546
/// Constructor
541547
#[ink(constructor)]

contracts/database/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -275,6 +275,7 @@ mod propchain_database {
275275

276276
/// Records an analytics snapshot on-chain for later verification
277277
#[ink(message)]
278+
#[allow(clippy::too_many_arguments)]
278279
pub fn record_analytics_snapshot(
279280
&mut self,
280281
total_properties: u64,
@@ -573,7 +574,6 @@ mod propchain_database {
573574
// UNIT TESTS
574575
// ========================================================================
575576

576-
577577
// Unit tests extracted to tests.rs (Issue #101)
578578
include!("tests.rs");
579579
}

contracts/fractional/src/lib.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,15 @@ mod fractional {
6464
last_prices: Mapping::default(),
6565
}
6666
}
67+
}
6768

69+
impl Default for Fractional {
70+
fn default() -> Self {
71+
Self::new()
72+
}
73+
}
74+
75+
impl Fractional {
6876
#[ink(message)]
6977
pub fn set_last_price(&mut self, token_id: u64, price_per_share: u128) {
7078
self.last_prices.insert(token_id, &price_per_share);

contracts/property-token/src/lib.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -328,6 +328,12 @@ mod property_token {
328328
pub token_id: TokenId,
329329
}
330330

331+
impl Default for PropertyToken {
332+
fn default() -> Self {
333+
Self::new()
334+
}
335+
}
336+
331337
impl PropertyToken {
332338
/// Creates a new PropertyToken contract
333339
#[ink(constructor)]

contracts/proxy/src/lib.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -784,7 +784,6 @@ mod propchain_proxy {
784784
}
785785
}
786786

787-
788787
// Unit tests extracted to tests.rs (Issue #101)
789788
include!("tests.rs");
790789
}

contracts/staking/src/lib.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,9 @@ mod staking {
5454

5555
#[ink(event)]
5656
pub struct StakingConfigUpdated {
57+
#[ink(topic)]
5758
pub min_stake: u128,
59+
#[ink(topic)]
5860
pub reward_rate_bps: u128,
5961
}
6062

0 commit comments

Comments
 (0)