-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathschema.graphql
141 lines (124 loc) · 2.74 KB
/
schema.graphql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
enum ContractStandard {
ERC20
ERC721
ERC1155
}
enum TransferType {
TRANSFER
MINT
BURN
}
enum TransferDirection {
From
To
}
type Account @entity {
id: ID!
ftTransfers: [AccountFtTransfer] @derivedFrom(field: "account")
nftTransfers: [AccountNftTransfer] @derivedFrom(field: "account")
ownedTokens: [NfToken] @derivedFrom(field: "currentOwner")
balancesFToken: [AccountFTokenBalance]! @derivedFrom(field: "account")
}
type AccountFTokenBalance @entity {
id: ID! # <account_id>-<token_id>
account: Account!
token: FToken!
amount: BigInt!
updatedAtBlock: BigInt!
updatedAt: DateTime!
}
type Collection @entity {
id: ID! # Contract address
collectionType: ContractStandard! @index
nfts: [NfToken] @derivedFrom(field: "collection")
createdAtBlock: BigInt!
createdAt: DateTime!
}
interface Token {
id: ID!
name: String
symbol: String
}
# ERC721 / ERC1155 tokens (Non-Fungible Token)
type NfToken implements Token @entity {
id: ID! # <token_contract_address>-<token_id>
nativeId: String!
name: String @index
symbol: String @index
collection: Collection!
uri: String
uriUpdateActions: [UriUpdateAction]! @derivedFrom(field: "token")
currentOwner: Account! # "to" account in transfer
amount: BigInt! @index
isBurned: Boolean! @index
}
type UriUpdateAction @entity {
id: ID!
token: NfToken!
newValue: String
oldValue: String
blockNumber: BigInt!
timestamp: DateTime!
txnHash: String!
}
# ERC20 tokens (Fungible Token)
type FToken implements Token @entity {
id: ID! # Token contract address
name: String @index
symbol: String @index
decimals: Int
}
interface Transfer {
id: ID!
blockNumber: BigInt!
timestamp: DateTime!
eventIndex: Int!
txnHash: String!
from: Account!
to: Account!
amount: BigInt
transferType: TransferType
}
# Fungible token transfers
type FtTransfer implements Transfer @entity {
id: ID!
callId: String
blockNumber: BigInt! @index
timestamp: DateTime!
eventIndex: Int!
txnHash: String!
from: Account!
to: Account!
amount: BigInt @index
transferType: TransferType @index
token: FToken!
}
# Non-Fungible token transfers
type NftTransfer implements Transfer @entity {
id: ID!
blockNumber: BigInt! @index
timestamp: DateTime!
eventIndex: Int!
txnHash: String!
from: Account!
to: Account!
operator: Account
amount: BigInt! @index
transferType: TransferType @index
token: NfToken!
isBatch: Boolean!
}
# entity for linking account and NFT transfer
type AccountNftTransfer @entity {
id: ID!
transfer: NftTransfer
account: Account!
direction: TransferDirection
}
# entity for linking account and FT transfer
type AccountFtTransfer @entity {
id: ID!
transfer: FtTransfer
account: Account!
direction: TransferDirection
}