Skip to content

Commit 22eceb6

Browse files
Merge pull request #103 from threefoldtech/rework
feat: improvements for 3.10
2 parents f45a58d + dce2666 commit 22eceb6

14 files changed

+5497
-5732
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
module.exports = class remove_balances1680092893466 {
2+
name = 'remove_balances1680092893466'
3+
4+
async up(db) {
5+
await db.query(`DROP TABLE "historical_balance"`)
6+
await db.query(`DROP TABLE "account"`)
7+
await db.query(`DROP TABLE "transfer"`)
8+
}
9+
10+
async down(db) {
11+
await db.query(`CREATE TABLE "historical_balance" ("id" character varying NOT NULL, "balance" numeric NOT NULL, "timestamp" numeric NOT NULL, "account_id" character varying NOT NULL, CONSTRAINT "PK_74ac29ad0bdffb6d1281a1e17e8" PRIMARY KEY ("id"))`)
12+
await db.query(`CREATE INDEX "IDX_383ff006e4b59db91d32cb891e" ON "historical_balance" ("account_id") `)
13+
await db.query(`CREATE TABLE "account" ("id" character varying NOT NULL, "wallet" text NOT NULL, "balance" numeric NOT NULL, CONSTRAINT "PK_54115ee388cdb6d86bb4bf5b2ea" PRIMARY KEY ("id"))`)
14+
await db.query(`CREATE TABLE "transfer" ("id" character varying NOT NULL, "from" text NOT NULL, "to" text NOT NULL, "amount" numeric NOT NULL, "timestamp" numeric NOT NULL, CONSTRAINT "PK_fd9ddbdd49a17afcbe014401295" PRIMARY KEY ("id"))`)
15+
}
16+
}

processor-chart/templates/processor-deployment.yaml

+2-2
Original file line numberDiff line numberDiff line change
@@ -101,8 +101,8 @@ spec:
101101
- sh
102102
- -c
103103
- npm run api
104-
image: "{{ .Values.image.processor.repository }}:{{ .Values.image.processor.tag | default .Chart.AppVersion }}"
105-
imagePullPolicy: {{ .Values.image.processor.pullPolicy }}
104+
image: "{{ .Values.image.query-node.repository }}:{{ .Values.image.query-node.tag | default .Chart.AppVersion }}"
105+
imagePullPolicy: {{ .Values.image.query-node.pullPolicy }}
106106
name: query-node
107107
ports:
108108
- containerPort: 4000

processor-chart/values.yaml

+5-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,11 @@ replicaCount: 1
66

77
image:
88
processor:
9-
repository: tfchainprocessor
9+
repository: ghcr.io/threefoldtech/tfchain_graphql_processor
10+
pullPolicy: IfNotPresent
11+
tag: ""
12+
query-node:
13+
repository: ghcr.io/threefoldtech/tfchain_graphql_query-node
1014
pullPolicy: IfNotPresent
1115
tag: ""
1216

schema.graphql

-23
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,3 @@
1-
type Account @entity {
2-
"Account address"
3-
id: ID!
4-
wallet: String!
5-
balance: BigInt!
6-
historicalBalances: [HistoricalBalance!] @derivedFrom(field: "account")
7-
}
8-
9-
type HistoricalBalance @entity {
10-
id: ID!
11-
account: Account!
12-
balance: BigInt!
13-
timestamp: BigInt!
14-
}
15-
16-
type Transfer @entity {
17-
id: ID!
18-
from: String!
19-
to: String!
20-
amount: BigInt!
21-
timestamp: BigInt!
22-
}
23-
241
type Entity @entity {
252
gridVersion: Int!
263
entityID: Int!

src/mappings/balances.ts

-78
This file was deleted.

src/mappings/contracts.ts

+21-15
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { Store } from '@subsquid/typeorm-store'
22
import { Ctx } from '../processor'
33
import { EventItem } from '@subsquid/substrate-processor/lib/interfaces/dataSelection'
4+
import { In } from 'typeorm'
45

56
import {
67
ContractState, PublicIp, NameContract,
@@ -89,20 +90,29 @@ export async function contractCreated(
8990
newNodeContract.solutionProviderID = Number(contractEvent.solutionProviderId) || 0
9091
}
9192

92-
const ipPromises = contract.publicIpsList.map(async ip => {
93-
if (ip.ip.toString().indexOf('\x00') >= 0) {
94-
return
95-
}
96-
const savedIp = await ctx.store.get(PublicIp, { where: { ip: ip.ip.toString() }, relations: { farm: true } })
93+
// Gather IPS and update them
94+
let touchedIps: PublicIp[] = await ctx.store.find(PublicIp, {
95+
where: {
96+
ip: In([...new Set(contract.publicIpsList.map(ip => ip.ip.toString())).keys()])
97+
}, relations: { farm: true }
98+
})
9799

98-
if (savedIp) {
99-
savedIp.contractId = newNodeContract.contractID
100-
return ctx.store.save<PublicIp>(savedIp)
101-
}
100+
touchedIps = touchedIps.map(ip => {
101+
ip.contractId = newNodeContract.contractID
102+
return ip
102103
})
103104

104-
await Promise.all(ipPromises)
105+
if (contract.publicIps > 0 && touchedIps.length == 0) {
106+
console.log(`something went wrong with contract ${contractEvent.contractId}`)
107+
console.log(`ips: ${contract.publicIpsList}`)
108+
}
109+
110+
if (newNodeContract.contractID === BigInt(17661)) {
111+
console.log('contract found')
112+
console.log(touchedIps)
113+
}
105114

115+
await ctx.store.save(touchedIps)
106116
await ctx.store.save<NodeContract>(newNodeContract)
107117
} else if (contractEvent.contractType.__kind === "RentContract") {
108118
let newRentContract = new RentContract()
@@ -230,16 +240,12 @@ export async function nodeContractCanceled(
230240
if (contractID === BigInt(0)) return
231241

232242
const savedContract = await ctx.store.get(NodeContract, { where: { contractID } })
233-
234243
if (!savedContract) return
235244

236245
savedContract.state = ContractState.Deleted
237246
await ctx.store.save<NodeContract>(savedContract)
238247

239-
const savedNode = await ctx.store.get(Node, { where: { nodeID: savedContract.nodeID } })
240-
if (!savedNode) return
241-
242-
const savedPublicIP = await ctx.store.get(PublicIp, { where: { contractId: savedContract.contractID }, relations: { farm: true } })
248+
const savedPublicIP = await ctx.store.get(PublicIp, { where: { contractId: contractID }, relations: { farm: true } })
243249
if (savedPublicIP) {
244250
savedPublicIP.contractId = BigInt(0)
245251
await ctx.store.save<PublicIp>(savedPublicIP)

src/mappings/farms.ts

+8-9
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,6 @@ export async function farmUpdated(
129129
// ip is already there in storage, don't save it again
130130
if (savedIP) {
131131
savedIP.ip = ip.ip.toString()
132-
savedIP.contractId = ip.contractId
133132
savedIP.gateway = ip.gateway.toString()
134133
await ctx.store.save<PublicIp>(savedIP)
135134
} else {
@@ -166,15 +165,15 @@ export async function farmUpdated(
166165
}
167166

168167
export async function farmDeleted(
169-
ctx: Ctx,
168+
ctx: Ctx,
170169
item: EventItem<'TfgridModule.FarmDeleted', { event: { args: true } }>
171170
) {
172171
const farmID = new TfgridModuleFarmDeletedEvent(ctx, item.event).asV49
173172

174173
const savedFarm = await ctx.store.get(Farm, { where: { farmID: farmID } })
175174

176175
if (savedFarm) {
177-
ctx.store.remove(savedFarm)
176+
await ctx.store.remove(savedFarm)
178177
}
179178
}
180179

@@ -230,7 +229,7 @@ export async function farmCreateOrUpdateOrDelete(ctx: Ctx): Promise<[Farm[], Far
230229
let publicIPs: FarmWithIPs[] = []
231230

232231
for (let block of ctx.blocks) {
233-
for (let item of block.items) {
232+
for (let item of block.items) {
234233
if (item.name === "TfgridModule.FarmStored") {
235234
const farmStoredEvent = new TfgridModuleFarmStoredEvent(ctx, item.event)
236235
let farmStoredEventParsed
@@ -319,12 +318,12 @@ export async function farmCreateOrUpdateOrDelete(ctx: Ctx): Promise<[Farm[], Far
319318
savedFarm.pricingPolicyID = farmUpdatedEventParsed.pricingPolicyId
320319
// const pubIps = updatePublicIPs(ctx, farmUpdatedEventParsed.publicIps, eventID, savedFarm)
321320
newFarms[foundInNewListIndex] = savedFarm
322-
321+
323322
publicIPs = getPublicIPs(ctx, savedFarm, publicIPs, farmUpdatedEventParsed.publicIps, eventID)
324-
323+
325324
continue
326325
}
327-
326+
328327
const foundInUpdatedListIndex: number = updatedFarms.findIndex(t => t.farmID == farmUpdatedEventParsed.id)
329328
if (foundInUpdatedListIndex != -1) {
330329
let savedFarm: Farm = updatedFarms[foundInUpdatedListIndex]
@@ -337,7 +336,7 @@ export async function farmCreateOrUpdateOrDelete(ctx: Ctx): Promise<[Farm[], Far
337336
publicIPs = getPublicIPs(ctx, savedFarm, publicIPs, farmUpdatedEventParsed.publicIps, eventID)
338337

339338
continue
340-
}
339+
}
341340

342341
const savedFarm = await ctx.store.get(Farm, { where: { farmID: farmUpdatedEventParsed.id } })
343342
if (!savedFarm) continue
@@ -353,7 +352,7 @@ export async function farmCreateOrUpdateOrDelete(ctx: Ctx): Promise<[Farm[], Far
353352

354353
updatedFarms.push(savedFarm)
355354
}
356-
if (item.name === "TfgridModule.FarmDeleted") {
355+
if (item.name === "TfgridModule.FarmDeleted") {
357356
const farmID = new TfgridModuleFarmDeletedEvent(ctx, item.event).asV49
358357
const savedFarm = await ctx.store.get(Farm, { where: { farmID: farmID } })
359358
if (savedFarm) {

src/mappings/twins.ts

+28-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import { TfgridModuleTwinStoredEvent, TfgridModuleTwinDeletedEvent, TfgridModule
88

99
export async function twinStored(
1010
ctx: Ctx,
11-
block: SubstrateBlock,
1211
item: EventItem<'TfgridModule.TwinStored', { event: { args: true } }>
1312
) {
1413
const twin = getTwinCreate(ctx, item)
@@ -25,6 +24,34 @@ export async function twinStored(
2524
await ctx.store.save<Twin>(newTwin)
2625
}
2726

27+
export async function twinUpdated(
28+
ctx: Ctx,
29+
item: EventItem<'TfgridModule.TwinUpdated', { event: { args: true } }>
30+
) {
31+
const twin = getTwinUpdate(ctx, item)
32+
33+
const savedTwin: any = await ctx.store.get(Twin, { where: { twinID: twin.twinID } })
34+
if (!savedTwin) return
35+
36+
savedTwin.relay = twin.relay
37+
savedTwin.publicKey = twin.pk
38+
savedTwin.gridVersion = twin.version
39+
40+
await ctx.store.save<Twin>(savedTwin)
41+
}
42+
43+
export async function twinDeleted(
44+
ctx: Ctx,
45+
item: EventItem<'TfgridModule.TwinDeleted', { event: { args: true } }>
46+
) {
47+
const twinDeletedEvent = new TfgridModuleTwinDeletedEvent(ctx, item.event).asV49
48+
49+
const savedTwin: any = await ctx.store.get(Twin, { where: { twinID: twinDeletedEvent } })
50+
if (!savedTwin) return
51+
52+
await ctx.store.remove<Twin>(savedTwin)
53+
}
54+
2855
export async function twinCreateOrUpdateOrDelete(ctx: Ctx): Promise<[Twin[], Twin[], Twin[]]> {
2956
let newTwins = []
3057
let updatedTwins = []

src/model/generated/account.model.ts

-25
This file was deleted.

src/model/generated/historicalBalance.model.ts

-23
This file was deleted.

src/model/generated/index.ts

-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,3 @@
1-
export * from "./account.model"
2-
export * from "./historicalBalance.model"
3-
export * from "./transfer.model"
41
export * from "./entity.model"
52
export * from "./twin.model"
63
export * from "./entityProof.model"

0 commit comments

Comments
 (0)