Skip to content

Commit 92dc3a5

Browse files
committed
chore: events for GraphTallyCollector and PaymentsEscrow contracts
1 parent 47d4fbe commit 92dc3a5

12 files changed

+1927
-0
lines changed

abis/GraphTallyCollector.json

Lines changed: 891 additions & 0 deletions
Large diffs are not rendered by default.

abis/PaymentsEscrow.json

Lines changed: 671 additions & 0 deletions
Large diffs are not rendered by default.

config/addresses.template.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ export class Addresses {
2323
ethereumDIDRegistry: string
2424
subgraphService: string
2525
graphPayments: string
26+
paymentsEscrow: string
27+
graphTallyCollector: string
2628
isL1: boolean
2729
}
2830

@@ -51,5 +53,7 @@ export let addresses: Addresses = {
5153
ethereumDIDRegistry: '{{ethereumDIDRegistry}}',
5254
subgraphService: '{{subgraphService}}',
5355
graphPayments: '{{graphPayments}}',
56+
paymentsEscrow: '{{paymentsEscrow}}',
57+
graphTallyCollector: '{{graphTallyCollector}}',
5458
isL1: {{isL1}},
5559
}

config/arbitrumSepoliaAddressScript.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ export let addresses: Addresses = {
3232
ethereumDIDRegistry: '{{arbsep.EthereumDIDRegistry.address}}',
3333
subgraphService: '{{arbsep.SubgraphService.address}}',
3434
graphPayments: '{{arbsep.GraphPayments.address}}',
35+
paymentsEscrow: '{{arbsep.PaymentsEscrow.address}}',
36+
graphTallyCollector: '{{arbsep.GraphTallyCollector.address}}',
3537
isL1: false,
3638
}
3739

@@ -58,6 +60,12 @@ const main = (): void => {
5860
if(output.horizonDisputeManager == '') {
5961
output.horizonDisputeManager = '0x0000000000000000000000000000000000000000' // to avoid crashes due to bad config
6062
}
63+
if(output.paymentsEscrow == '') {
64+
output.paymentsEscrow = '0x0000000000000000000000000000000000000000' // to avoid crashes due to bad config
65+
}
66+
if(output.graphTallyCollector == '') {
67+
output.graphTallyCollector = '0x0000000000000000000000000000000000000000' // to avoid crashes due to bad config
68+
}
6169
fs.writeFileSync(__dirname + '/generatedAddresses.json', JSON.stringify(output, null, 2))
6270
} catch (e) {
6371
console.log(`Error saving artifacts: ${e.message}`)

config/localNetworkAddressScript.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ export let addresses: Addresses = {
3636
ethereumDIDRegistry: '{{horizon.EthereumDIDRegistry.address}}',
3737
subgraphService: '{{subgraphService.SubgraphService.address}}',
3838
graphPayments: '{{horizon.GraphPayments.address}}',
39+
paymentsEscrow: '{{horizon.PaymentsEscrow.address}}',
40+
graphTallyCollector: '{{horizon.GraphTallyCollector.address}}',
3941
isL1: false,
4042
}
4143

@@ -55,6 +57,12 @@ const main = (): void => {
5557
if(output.disputeManager == '') {
5658
output.disputeManager = '0x0000000000000000000000000000000000000000' // to avoid crashes due to bad config
5759
}
60+
if(output.paymentsEscrow == '') {
61+
output.paymentsEscrow = '0x0000000000000000000000000000000000000000' // to avoid crashes due to bad config
62+
}
63+
if(output.graphTallyCollector == '') {
64+
output.graphTallyCollector = '0x0000000000000000000000000000000000000000' // to avoid crashes due to bad config
65+
}
5866
fs.writeFileSync(__dirname + '/generatedAddresses.json', JSON.stringify(output, null, 2))
5967
} catch (e) {
6068
console.log(`Error saving artifacts: ${e.message}`)

config/mainnetArbitrumAddressScript.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ export let addresses: Addresses = {
3232
ethereumDIDRegistry: '{{arbitrum.IEthereumDIDRegistry.address}}',
3333
subgraphService: '{{arbitrum.SubgraphService.address}}',
3434
graphPayments: '{{arbitrum.GraphPayments.address}}',
35+
paymentsEscrow: '{{arbitrum.PaymentsEscrow.address}}',
36+
graphTallyCollector: '{{arbitrum.GraphTallyCollector.address}}',
3537
isL1: false,
3638
}
3739

@@ -59,6 +61,12 @@ const main = (): void => {
5961
if(output.horizonDisputeManager == '') {
6062
output.horizonDisputeManager = '0x0000000000000000000000000000000000000000' // to avoid crashes due to bad config
6163
}
64+
if(output.paymentsEscrow == '') {
65+
output.paymentsEscrow = '0x0000000000000000000000000000000000000000' // to avoid crashes due to bad config
66+
}
67+
if(output.graphTallyCollector == '') {
68+
output.graphTallyCollector = '0x0000000000000000000000000000000000000000' // to avoid crashes due to bad config
69+
}
6270
fs.writeFileSync(__dirname + '/generatedAddresses.json', JSON.stringify(output, null, 2))
6371
} catch (e) {
6472
console.log(`Error saving artifacts: ${e.message}`)

config/testAddressesL1.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ export let addresses: Addresses = {
3232
ethereumDIDRegistry: '0x0000000000000000000000000000000000000000',
3333
subgraphService: '0x0000000000000000000000000000000000000000',
3434
graphPayments: '0x0000000000000000000000000000000000000000',
35+
paymentsEscrow: '0x0000000000000000000000000000000000000000',
36+
graphTallyCollector: '0x0000000000000000000000000000000000000000',
3537
isL1: true,
3638
}
3739

config/testAddressesL2.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ export let addresses: Addresses = {
3232
ethereumDIDRegistry: '0x0000000000000000000000000000000000000000',
3333
subgraphService: '0x0000000000000000000000000000000000000000',
3434
graphPayments: '0x0000000000000000000000000000000000000000',
35+
paymentsEscrow: '0x0000000000000000000000000000000000000000',
36+
graphTallyCollector: '0x0000000000000000000000000000000000000000',
3537
isL1: false,
3638
}
3739

schema.graphql

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1779,3 +1779,91 @@ type _Schema_
17791779
algorithm: rank
17801780
include: [{ entity: "Delegator", fields: [{ name: "defaultDisplayName" }, { name: "id" }] }]
17811781
)
1782+
1783+
"""
1784+
Revelant data for a PaymentsEscrow accounts
1785+
"""
1786+
type PaymentsEscrowAccount @entity(immutable: false) {
1787+
"The payer, collector and receiver concatenated"
1788+
id: ID!
1789+
"The payer address of the account"
1790+
payer: Payer!
1791+
"The collector address of the account"
1792+
collector: Bytes!
1793+
"The receiver address of the account"
1794+
receiver: Receiver!
1795+
"The balance of the account"
1796+
balance: BigInt!
1797+
"The amount of tokens thawing on the account"
1798+
totalAmountThawing: BigInt!
1799+
"The thaw end timestamp"
1800+
thawEndTimestamp: BigInt!
1801+
"The transactions for the escrow account"
1802+
transactions: [PaymentsEscrowTransaction!]! @derivedFrom(field: "escrowAccount")
1803+
}
1804+
1805+
"""
1806+
Payer of a PaymentsEscrow account
1807+
"""
1808+
type Payer @entity(immutable: false) {
1809+
"The address of the payer"
1810+
id: ID!
1811+
"The account of the payer"
1812+
escrowAccounts: [PaymentsEscrowAccount!]! @derivedFrom(field: "payer")
1813+
"The transactions for the payer"
1814+
transactions: [PaymentsEscrowTransaction!]! @derivedFrom(field: "payer")
1815+
"The signers for the payer"
1816+
signers: [Signer!]! @derivedFrom(field: "payer")
1817+
}
1818+
1819+
"""
1820+
Receiver of a PaymentsEscrow account
1821+
"""
1822+
type Receiver @entity(immutable: false) {
1823+
"The address of the receiver"
1824+
id: ID!
1825+
"The account of the receiver"
1826+
escrowAccounts: [PaymentsEscrowAccount!]! @derivedFrom(field: "receiver")
1827+
"The transactions for the receiver"
1828+
transactions: [PaymentsEscrowTransaction!]! @derivedFrom(field: "receiver")
1829+
}
1830+
1831+
"""
1832+
Transactions for a PaymentsEscrow account
1833+
"""
1834+
type PaymentsEscrowTransaction @entity(immutable: false) {
1835+
"The transaction hash concatenated with event log index"
1836+
id: ID!
1837+
"The transaction group id"
1838+
transactionGroupId: Bytes
1839+
"The transaction type"
1840+
type: String!
1841+
"The payer"
1842+
payer: Payer!
1843+
"The collector"
1844+
collector: Bytes!
1845+
"The receiver"
1846+
receiver: Receiver!
1847+
"The allocation id"
1848+
allocationId: Bytes
1849+
"The amount of tokens"
1850+
amount: BigInt!
1851+
"The escrow account"
1852+
escrowAccount: PaymentsEscrowAccount!
1853+
"The transaction timestamp"
1854+
timestamp: BigInt!
1855+
}
1856+
1857+
"""
1858+
The signer of a PaymentsEscrow account
1859+
"""
1860+
type Signer @entity(immutable: false) {
1861+
"The address of the signer"
1862+
id: ID!
1863+
"Whether the signer is authorized"
1864+
isAuthorized: Boolean!
1865+
"The payer that authorized the signer"
1866+
payer: Payer!
1867+
"The thaw end timestamp for revoking the signer"
1868+
thawEndTimestamp: BigInt!
1869+
}

src/mappings/graphTallyCollector.ts

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
import { Address, BigInt } from '@graphprotocol/graph-ts'
2+
import { PaymentsEscrowTransaction, Signer } from '../types/schema'
3+
import {
4+
SignerAuthorized,
5+
SignerThawing,
6+
SignerThawCanceled,
7+
SignerRevoked,
8+
PaymentCollected
9+
} from '../types/GraphTallyCollector/GraphTallyCollector'
10+
import { createOrLoadEscrowAccount, createOrLoadPayer, createOrLoadReceiver } from './paymentsEscrow'
11+
12+
const BIGINT_ZERO = BigInt.fromI32(0)
13+
const ADDRESS_ZERO = Address.fromString('0x0000000000000000000000000000000000000000')
14+
15+
export function handleSignerAuthorized(event: SignerAuthorized): void {
16+
let signer = createOrLoadSigner(event.params.signer)
17+
signer.isAuthorized = true
18+
signer.payer = event.params.authorizer
19+
signer.save()
20+
}
21+
22+
export function handleSignerThawing(event: SignerThawing): void {
23+
let signer = createOrLoadSigner(event.params.signer)
24+
signer.payer = event.params.authorizer
25+
signer.isAuthorized = true
26+
signer.thawEndTimestamp = event.params.thawEndTimestamp
27+
signer.save()
28+
}
29+
30+
export function handleSignerThawCanceled(event: SignerThawCanceled): void {
31+
let signer = createOrLoadSigner(event.params.signer)
32+
signer.payer = event.params.authorizer
33+
signer.isAuthorized = true
34+
signer.thawEndTimestamp = BIGINT_ZERO
35+
signer.save()
36+
}
37+
38+
export function handleSignerRevoked(event: SignerRevoked): void {
39+
let signer = createOrLoadSigner(event.params.signer)
40+
signer.payer = event.params.authorizer
41+
signer.isAuthorized = false
42+
signer.thawEndTimestamp = BIGINT_ZERO
43+
signer.save()
44+
}
45+
46+
export function handlePaymentCollected(event: PaymentCollected): void {
47+
let index = event.logIndex.toI32()
48+
let transactionId = event.transaction.hash.concatI32(index)
49+
let transaction = new PaymentsEscrowTransaction(transactionId)
50+
51+
let payer = createOrLoadPayer(event.params.payer)
52+
let receiver = createOrLoadReceiver(event.params.receiver)
53+
let escrow = createOrLoadEscrowAccount(event.params.payer, event.params.dataService, event.params.receiver)
54+
escrow.balance = escrow.balance.minus(event.params.tokens)
55+
56+
transaction.type = 'redeem'
57+
transaction.payer = payer.id
58+
transaction.collector = event.params.dataService
59+
transaction.receiver = receiver.id
60+
transaction.allocationId = Address.fromBytes(event.params.collectionId)
61+
transaction.amount = event.params.tokens
62+
transaction.escrowAccount = escrow.id
63+
transaction.transactionGroupId = event.transaction.hash
64+
transaction.timestamp = event.block.timestamp
65+
66+
transaction.save()
67+
escrow.save()
68+
}
69+
70+
export function createOrLoadSigner(address: Address): Signer {
71+
let signer = Signer.load(address)
72+
if(signer == null) {
73+
signer = new Signer(address)
74+
signer.isAuthorized = false
75+
signer.payer = ADDRESS_ZERO
76+
signer.thawEndTimestamp = BIGINT_ZERO
77+
signer.save()
78+
}
79+
return signer
80+
}

src/mappings/paymentsEscrow.ts

Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
import { Address, BigInt } from '@graphprotocol/graph-ts'
2+
import { PaymentsEscrowAccount, Payer, Receiver, PaymentsEscrowTransaction } from '../types/schema'
3+
import {
4+
Deposit,
5+
Withdraw,
6+
Thaw,
7+
CancelThaw,
8+
} from '../types/PaymentsEscrow/PaymentsEscrow'
9+
10+
const BIGINT_ZERO = BigInt.fromI32(0)
11+
12+
export function handleDeposit(event: Deposit): void {
13+
let index = event.logIndex.toI32()
14+
let transactionId = event.transaction.hash.concatI32(index)
15+
let transaction = new PaymentsEscrowTransaction(transactionId)
16+
let payer = createOrLoadPayer(event.params.payer)
17+
let receiver = createOrLoadReceiver(event.params.receiver)
18+
let escrow = createOrLoadEscrowAccount(event.params.payer, event.params.collector, event.params.receiver)
19+
20+
escrow.balance = escrow.balance.plus(event.params.tokens)
21+
22+
transaction.type = 'deposit'
23+
transaction.payer = payer.id
24+
transaction.collector = event.params.collector
25+
transaction.receiver = receiver.id
26+
transaction.amount = event.params.tokens
27+
transaction.escrowAccount = escrow.id
28+
transaction.transactionGroupId = event.transaction.hash
29+
transaction.timestamp = event.block.timestamp
30+
31+
transaction.save()
32+
escrow.save()
33+
}
34+
35+
export function handleWithdraw(event: Withdraw): void {
36+
let index = event.logIndex.toI32()
37+
let transactionId = event.transaction.hash.concatI32(index)
38+
let transaction = new PaymentsEscrowTransaction(transactionId)
39+
let payer = createOrLoadPayer(event.params.payer)
40+
let receiver = createOrLoadReceiver(event.params.receiver)
41+
let escrow = createOrLoadEscrowAccount(event.params.payer, event.params.collector, event.params.receiver)
42+
43+
escrow.balance = escrow.balance.minus(event.params.tokens)
44+
escrow.totalAmountThawing = BIGINT_ZERO
45+
escrow.thawEndTimestamp = BIGINT_ZERO
46+
47+
transaction.type = 'withdraw'
48+
transaction.payer = payer.id
49+
transaction.collector = event.params.collector
50+
transaction.receiver = receiver.id
51+
transaction.amount = event.params.tokens
52+
transaction.escrowAccount = escrow.id
53+
transaction.transactionGroupId = event.transaction.hash
54+
transaction.timestamp = event.block.timestamp
55+
56+
transaction.save()
57+
escrow.save()
58+
}
59+
60+
export function handleThaw(event: Thaw): void {
61+
let escrow = createOrLoadEscrowAccount(event.params.payer, event.params.collector, event.params.receiver)
62+
63+
escrow.totalAmountThawing = event.params.tokens
64+
escrow.thawEndTimestamp = event.params.thawEndTimestamp
65+
escrow.save()
66+
}
67+
68+
export function handleCancelThaw(event: CancelThaw): void {
69+
let escrow = createOrLoadEscrowAccount(event.params.payer, event.params.collector, event.params.receiver)
70+
escrow.totalAmountThawing = BIGINT_ZERO
71+
escrow.thawEndTimestamp = BIGINT_ZERO
72+
escrow.save()
73+
}
74+
75+
export function createOrLoadPayer(address: Address): Payer {
76+
let payer = Payer.load(address)
77+
if(payer == null) {
78+
payer = new Payer(address)
79+
payer.save()
80+
}
81+
return payer
82+
}
83+
84+
export function createOrLoadReceiver(address: Address): Receiver {
85+
let receiver = Receiver.load(address)
86+
if(receiver == null) {
87+
receiver = new Receiver(address)
88+
receiver.save()
89+
}
90+
return receiver
91+
}
92+
93+
export function createOrLoadEscrowAccount(payer: Address, collector: Address, receiver: Address): PaymentsEscrowAccount {
94+
let sender_receiver = payer.concat(collector).concat(receiver)
95+
let escrow = PaymentsEscrowAccount.load(sender_receiver)
96+
if(escrow == null) {
97+
escrow = new PaymentsEscrowAccount(sender_receiver)
98+
escrow.balance = BIGINT_ZERO
99+
escrow.thawEndTimestamp = BIGINT_ZERO
100+
escrow.totalAmountThawing = BIGINT_ZERO
101+
escrow.payer = payer
102+
escrow.collector = collector
103+
escrow.receiver = receiver
104+
escrow.save()
105+
}
106+
return escrow
107+
}

0 commit comments

Comments
 (0)