Skip to content

Commit

Permalink
Merge pull request #39 from ATOR-Development/37-set-relay-families-vi…
Browse files Browse the repository at this point in the history
…a-addremove-batch-interfaces

Update interfaces for setting relay families with add/remove
  • Loading branch information
jim-toth committed Jul 31, 2024
2 parents 03c488a + 5330dda commit 6712ec9
Show file tree
Hide file tree
Showing 5 changed files with 45 additions and 18 deletions.
28 changes: 20 additions & 8 deletions src/distribution/distribution.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -510,14 +510,16 @@ export class DistributionService {
}

// NB: Only update relay families that need to be updated
const families = await this.getFamilies()
const currentFamilies = await this.getFamilies()
const relaysWithFamilyUpdates: ValidatedRelay[] = []
for (const relay of relays) {
const incomingFamilyHash = (relay.family || [])
.slice()
.sort()
.join('')
const contractFamilyHash = (families[relay.fingerprint] || [])
const contractFamilyHash = (
currentFamilies[relay.fingerprint] || []
)
.slice()
.sort()
.join('')
Expand All @@ -527,16 +529,29 @@ export class DistributionService {
} else {
results.push({
relay,
result: 'AlreadyVerified' // TODO -> 'AlreadySetFamily' ?
result: 'AlreadySetFamily'
})
}
}

if (this.isLive === 'true') {
try {
if (relaysWithFamilyUpdates.length > 0) {
const addRemoveFamilies = relaysWithFamilyUpdates.map(
({ fingerprint, family }) => ({
fingerprint,
add: _.difference(
family,
currentFamilies[fingerprint]
),
remove: _.difference(
currentFamilies[fingerprint],
family
)
})
)
const familyBatches = _.chunk(
relaysWithFamilyUpdates,
addRemoveFamilies,
DistributionService.familiesPerBatch
)

Expand All @@ -548,10 +563,7 @@ export class DistributionService {
const response = await this.distributionContract
.writeInteraction<SetFamilies>({
function: 'setFamilies',
families: familyBatch.map(
({ fingerprint, family }) =>
({ fingerprint, family })
)
families: familyBatch
})

this.logger.log(
Expand Down
3 changes: 2 additions & 1 deletion src/distribution/interfaces/distribution.ts
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,8 @@ export interface SetFamilies extends ContractFunctionInput {
function: 'setFamilies'
families: {
fingerprint: Fingerprint
family: Fingerprint[]
add?: Fingerprint[]
remove?: Fingerprint[]
}[]
}

Expand Down
1 change: 1 addition & 0 deletions src/verification/dto/relay-verification-result.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,4 @@ export type RelayVerificationResult =
| 'AlreadyRegistered'
| 'HardwareProofFailed'
| 'Failed'
| 'AlreadySetFamily'
3 changes: 2 additions & 1 deletion src/verification/interfaces/relay-registry.ts
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,8 @@ export interface SetFamilies extends ContractFunctionInput {
function: 'setFamilies'
families: {
fingerprint: Fingerprint
family: Fingerprint[]
add?: Fingerprint[]
remove?: Fingerprint[]
}[]
}

Expand Down
28 changes: 20 additions & 8 deletions src/verification/verification.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -572,14 +572,16 @@ export class VerificationService {
}

// NB: Only update relay families that need to be updated
const families = await this.getFamilies()
const currentFamilies = await this.getFamilies()
const relaysWithFamilyUpdates: ValidatedRelay[] = []
for (const relay of relays) {
const incomingFamilyHash = (relay.family || [])
.slice()
.sort()
.join('')
const contractFamilyHash = (families[relay.fingerprint] || [])
const contractFamilyHash = (
currentFamilies[relay.fingerprint] || []
)
.slice()
.sort()
.join('')
Expand All @@ -589,16 +591,29 @@ export class VerificationService {
} else {
results.push({
relay,
result: 'AlreadyVerified' // TODO -> 'AlreadySetFamily' ?
result: 'AlreadySetFamily'
})
}
}

if (this.isLive === 'true') {
try {
if (relaysWithFamilyUpdates.length > 0) {
const addRemoveFamilies = relaysWithFamilyUpdates.map(
({ fingerprint, family }) => ({
fingerprint,
add: _.difference(
family,
currentFamilies[fingerprint]
),
remove: _.difference(
currentFamilies[fingerprint],
family
)
})
)
const familyBatches = _.chunk(
relaysWithFamilyUpdates,
addRemoveFamilies,
VerificationService.familiesPerBatch
)

Expand All @@ -610,10 +625,7 @@ export class VerificationService {
const response = await this.relayRegistryContract
.writeInteraction<SetFamilies>({
function: 'setFamilies',
families: familyBatch.map(
({ fingerprint, family }) =>
({ fingerprint, family })
)
families: familyBatch
})

this.logger.log(
Expand Down

0 comments on commit 6712ec9

Please sign in to comment.