# Associate tokens ## Pull relevant tokens (Protocol Usage) ``` with $selectedCommunityId as selectedCommunity, $tokenAddresses as tokenAddresses match (t:Token)-[:_HAS_MEMBERSHIP_REQUIREMENT]-(e:_Element {_communityId: selectedCommunity}) match (w:Wallet)-[:HOLDS|HAS_BALANCE]->(t:Token) where t.address in tokenAddresses with t.name as name, t.symbol as symbol, t.name + " (" + t.symbol + ") " as nameSymbol, t.address as address, "https://etherscan.com/token/" + t.address as etherscanLink, count(distinct(w)) as holders with collect(distinct({ tokenName: name, tokenSymbol: symbol, displayName: nameSymbol, etherscanLink: etherscanLink, holders: holders })) as data return { token_data: data } ``` ## Add objective ``` with tolower($tokenAddress) as address, $selectedObjective as selectedObjective, $selectedCommunity as selectedCommunity match (t:Token {address: address})-[:_HAS_MEMBERSHIP_REQUIREMENT]-(e:_Element) with e, selectedObjective create (obj:_ElementObjective:selectedObjective:_Unsaved) set e._communityId = selectedCommunity, e._chainverseId = apoc.create.uuid(), e._displayName = selectedObjective with e, obj merge (e)-[r:_HAS_OBJECTIVE]->(obj) return count(distinct(r)) as objectiveCount ``` ## Add token ``` with tolower($tokenAddress) as token, $selectedCommmunityId as selectedCommunity // create element create (e:_Element:_Unsaved {address: token}) set e.createdDt = set e.lastUpdateDt = set e._communityId = selectedCommunity with e match (c:_Community {_chainverseId: selectedCommunity}) with c, e merge (c)-[r:_HAS_ELEMENT]->(e) match (t:Token {address:token}) with t,e merge (e)-[rr:_HAS_MEMBERSHIP_TOKEN]->(t) return count(distinct(rr)) ``` ## remove unsaved ``` with $selectedCommunity as selectedCommunity match (t:_Unsaved) where ((t:_Element) or (t:_ElementObjective)) and t._communityId = selectedCommunity remove t:_Unsaved return count(distinct(t)) as saved ```