Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
917 changes: 7 additions & 910 deletions ui/ts/contracts.ts

Large diffs are not rendered by default.

38 changes: 38 additions & 0 deletions ui/ts/contracts/decoders.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
import { isAddress, type Address } from 'viem'

export function requireArrayValue(value: unknown, context: string): readonly unknown[] {
if (Array.isArray(value)) return value
throw new Error(`Unexpected ${context} response`)
}

export function requireTupleValue(value: unknown, length: number, context: string): readonly unknown[] {
const tuple = requireArrayValue(value, context)
if (tuple.length === length) return tuple
throw new Error(`Unexpected ${context} response`)
}

export function requireBigintValue(value: unknown, context: string) {
if (typeof value === 'bigint') return value
throw new Error(`Unexpected ${context} response`)
}

export function requireIntegerLikeValue(value: unknown, context: string) {
if (typeof value === 'bigint') return value
if (typeof value === 'number' && Number.isInteger(value)) return value
throw new Error(`Unexpected ${context} response`)
}

export function requireBooleanValue(value: unknown, context: string) {
if (typeof value === 'boolean') return value
throw new Error(`Unexpected ${context} response`)
}

export function requireAddressValue(value: unknown, context: string): Address {
if (typeof value === 'string' && isAddress(value)) return value
throw new Error(`Unexpected ${context} response`)
}

export function requireObjectValue(value: unknown, context: string): object {
if (typeof value === 'object' && value !== null) return value
throw new Error(`Unexpected ${context} response`)
}
37 changes: 37 additions & 0 deletions ui/ts/contracts/forkData.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
import type { Address } from 'viem'
import { requireAddressValue, requireBigintValue, requireBooleanValue, requireTupleValue } from './decoders.js'

type ForkDataView = {
auctionableRepAtFork: bigint
truthAuctionAddress: Address
truthAuctionStartedAt: bigint
migratedRep: bigint
auctionedSecurityBondAllowance: bigint
escalationElapsedAtFork: bigint
escalationStartBondAtFork: bigint
escalationNonDecisionThresholdAtFork: bigint
forkOwnSecurityPool: boolean
unresolvedEscalationAtFork: boolean
forkOutcomeIndex: bigint
}

export function requireForkDataView(value: unknown): ForkDataView {
const [auctionableRepAtFork, truthAuctionAddress, truthAuctionStartedAt, migratedRep, auctionedSecurityBondAllowance, escalationElapsedAtFork, escalationStartBondAtFork, escalationNonDecisionThresholdAtFork, forkOwnSecurityPool, unresolvedEscalationAtFork, forkOutcomeIndex] = requireTupleValue(
value,
11,
'security pool fork data',
)
return {
auctionableRepAtFork: requireBigintValue(auctionableRepAtFork, 'security pool fork data auctionable REP at fork'),
truthAuctionAddress: requireAddressValue(truthAuctionAddress, 'security pool fork data truth auction address'),
truthAuctionStartedAt: requireBigintValue(truthAuctionStartedAt, 'security pool fork data truth auction start time'),
migratedRep: requireBigintValue(migratedRep, 'security pool fork data migrated REP'),
auctionedSecurityBondAllowance: requireBigintValue(auctionedSecurityBondAllowance, 'security pool fork data auctioned security bond allowance'),
escalationElapsedAtFork: requireBigintValue(escalationElapsedAtFork, 'security pool fork data escalation elapsed at fork'),
escalationStartBondAtFork: requireBigintValue(escalationStartBondAtFork, 'security pool fork data escalation start bond at fork'),
escalationNonDecisionThresholdAtFork: requireBigintValue(escalationNonDecisionThresholdAtFork, 'security pool fork data escalation non-decision threshold at fork'),
forkOwnSecurityPool: requireBooleanValue(forkOwnSecurityPool, 'security pool fork data own-pool flag'),
unresolvedEscalationAtFork: requireBooleanValue(unresolvedEscalationAtFork, 'security pool fork data unresolved escalation flag'),
forkOutcomeIndex: requireBigintValue(forkOutcomeIndex, 'security pool fork data fork outcome index'),
}
}
Loading
Loading