# Highly engaged - protocol usage ## Identify people who are highly engaged in the governance of selected token ``` with tolower($address) as add match (w:Wallet)-[r:VOTED]->(p:Proposal)-[:HAS_PROPOSAL]-(e:Entity)-[:HAS_STRATEGY]-(t:Token {address: add}) with w, count(distinct(r)) as votes, add with apoc.agg.percentiles(votes, [.8])[0] as threshold, add match (w:Wallet)-[r:VOTED]->(p:Proposal)-[:HAS_PROPOSAL]-(e:Entity)-[:HAS_STRATEGY]-(t:Token {address: add}) with w, count(distinct(p)) as votes, threshold, add where votes > threshold match (w) match (e:_Element:_Token {address: $add}) with w,e merge (w)-[:HIGHLY_ENGAGED]->(e) return count(distinct(w)) as count ``` ## Identify close associates ### Voters ``` with tolower($address) as add match (w:Wallet)-[:HIGHLY_ENGAGED]->(element:_Element:_Token {$address: add}) match (w)-[:VOTED]->(p:Proposal)-[:VOTED]-(x:Wallet) where not (x)-[:HIGHLY_ENGAGED]->(element) and not (p)-[:HAS_PROPOSAL]-(e:TooBig) with w, element merge (w)-[r:HIGHLY_ENGAGED]->(element) set r.type = 'Voting' return count(distinct(r)) ``` ### Grants ``` with tolower($address) as add match (w:Wallet)-[:HIGHLY_ENGAGED]->(element:_Element:_Token {$address: add}) match (w:Wallet)-[:DONATION]->(y:Grant)-[]-(x:Wallet)-[:_HAS_CONTEXT]-(context) where not y:TooBig and not (x)-[:HIGHLY_ENGAGED]->(element) where not context:_IncentiveFarming and not y:TooBig merge (x)-[r:HIGHLY_ENGAGED]->(elements) set r.type = "Grants" return count(distinct(r)) ``` ### Tokens ``` with tolower($address) as add match (w:Wallet)-[:HIGHLY_ENGAGED]->(element:_Element:_Token {$address: add}) match (w:Wallet)-[r:HOLDS]->(token:Token:ArtisanToken)<-[:HOLDS]-(x:Wallet) where not y:TooBig and not (x)-[:HIGHLY_ENGAGED]->(element) where not context:_IncentiveFarming with x, element merge (x)-[r:HIGHLY_ENGAGED]->(element) set r.type = "Tokens" ``` ## Delete outside of scope ``` call apoc.periodic.commit(' with tolower($address) as add match (w:Wallet)-[mem:HIGHLY_ENGAGED]->(element:_Element:_Token {$address: add}) where (w:Wallet)-[r:_HAS_CONTEXT]->(:_IncentiveFarming) with mem limit 5000 return count(*) ') ``` ### Incentive Farmers ``` call apoc.periodic.commit(' with tolower($address) as add match (w:Wallet)-[mem:HIGHLY_ENGAGED]->(element:_Element:_Token {$address: add}) match (w)-[:_HAS_CONTEXT]->(:_IncentiveFarming) with mem limit 5000 delete mem return count(*) ``` ### People who don't have at least one of the filters ``` call apoc.periodic.commit(' match (c:_Context) where [x in labels(c) in $personas] with c, tolower($address) as add match (w:Wallet)-[mem:HIGHLY_ENGAGED]->(element:_Element:_Token {$address: add}) where not (w)-[:_HAS_CONTEXT]->(c) with w, mem limit 5000 delete mem return count(*) ``` ## Add others ### Topics // make sure to lowercase `$address` ``` CALL db.index.fulltext.queryNodes("wicDiversity", "$query", {limit:100000}) YIELD node, score with node, score unwind node as nn order by score desc limit 2500 match (:_Context)-[]-(w:Wallet)-[]-(nn) match (e:_Element {address:$address}) optional match (wallet)-[]-(:Nft)-[:HAS_NFT]-(nn) optional match (wallet)-[:HAS_ALIAS]-(:Alias)-[:HAS_ALIAS]-(t:Twitter)-[:REFERENCES]-(nn) where not (w)-[:HIGHLY_ENGAGED]->(element) and not (w)-[:_HAS_CONTEXT]->(:_IncentiveFarming) with w, element merge (w)-[r:HIGHLY_ENGAGED]->(element) return count(*) ``` ### Co-signers that aren't trash `lower case address` ``` match (w:Wallet)-[r:HIGHLY_ENGAGED]->(element:_Element {address: $address}) match (:_Context)-[:_HAS_CONTEXT]-(x:Wallet)-[:_IS_SIGNER]-(m:MultiSig)-[:_IS_SIGNER]-(w) where not (x)-[:HIGHLY_ENGAGED]->(element) with x, element merge (x)-[r:HIGHLY_ENGAGED]->(element) set r.type = "Multisig-Cosigners" return count(r) ``` ## Todo ### Twitter ### Mirror ### Github