mirror of
https://github.com/tornadocash/tornado-subgraph.git
synced 2024-12-22 17:33:17 +01:00
init: sub graph for bsc
This commit is contained in:
commit
f770855c0a
21
abis/Echoer.json
Normal file
21
abis/Echoer.json
Normal file
@ -0,0 +1,21 @@
|
||||
[
|
||||
{
|
||||
"anonymous": false,
|
||||
"inputs": [
|
||||
{
|
||||
"indexed": true,
|
||||
"internalType": "address",
|
||||
"name": "who",
|
||||
"type": "address"
|
||||
},
|
||||
{
|
||||
"indexed": false,
|
||||
"internalType": "bytes",
|
||||
"name": "data",
|
||||
"type": "bytes"
|
||||
}
|
||||
],
|
||||
"name": "Echo",
|
||||
"type": "event"
|
||||
}
|
||||
]
|
58
abis/Instance.json
Normal file
58
abis/Instance.json
Normal file
@ -0,0 +1,58 @@
|
||||
[
|
||||
{
|
||||
"anonymous": false,
|
||||
"inputs": [
|
||||
{
|
||||
"indexed": true,
|
||||
"internalType": "bytes32",
|
||||
"name": "commitment",
|
||||
"type": "bytes32"
|
||||
},
|
||||
{
|
||||
"indexed": false,
|
||||
"internalType": "uint32",
|
||||
"name": "leafIndex",
|
||||
"type": "uint32"
|
||||
},
|
||||
{
|
||||
"indexed": false,
|
||||
"internalType": "uint256",
|
||||
"name": "timestamp",
|
||||
"type": "uint256"
|
||||
}
|
||||
],
|
||||
"name": "Deposit",
|
||||
"type": "event"
|
||||
},
|
||||
{
|
||||
"anonymous": false,
|
||||
"inputs": [
|
||||
{
|
||||
"indexed": false,
|
||||
"internalType": "address",
|
||||
"name": "to",
|
||||
"type": "address"
|
||||
},
|
||||
{
|
||||
"indexed": false,
|
||||
"internalType": "bytes32",
|
||||
"name": "nullifierHash",
|
||||
"type": "bytes32"
|
||||
},
|
||||
{
|
||||
"indexed": true,
|
||||
"internalType": "address",
|
||||
"name": "relayer",
|
||||
"type": "address"
|
||||
},
|
||||
{
|
||||
"indexed": false,
|
||||
"internalType": "uint256",
|
||||
"name": "fee",
|
||||
"type": "uint256"
|
||||
}
|
||||
],
|
||||
"name": "Withdrawal",
|
||||
"type": "event"
|
||||
}
|
||||
]
|
21
abis/Proxy.json
Normal file
21
abis/Proxy.json
Normal file
@ -0,0 +1,21 @@
|
||||
[
|
||||
{
|
||||
"anonymous": false,
|
||||
"inputs": [
|
||||
{
|
||||
"indexed": true,
|
||||
"internalType": "address",
|
||||
"name": "sender",
|
||||
"type": "address"
|
||||
},
|
||||
{
|
||||
"indexed": false,
|
||||
"internalType": "bytes",
|
||||
"name": "encryptedNote",
|
||||
"type": "bytes"
|
||||
}
|
||||
],
|
||||
"name": "EncryptedNote",
|
||||
"type": "event"
|
||||
}
|
||||
]
|
BIN
build/Echoer/Echoer.wasm
Normal file
BIN
build/Echoer/Echoer.wasm
Normal file
Binary file not shown.
21
build/Echoer/abis/Echoer.json
Normal file
21
build/Echoer/abis/Echoer.json
Normal file
@ -0,0 +1,21 @@
|
||||
[
|
||||
{
|
||||
"anonymous": false,
|
||||
"inputs": [
|
||||
{
|
||||
"indexed": true,
|
||||
"internalType": "address",
|
||||
"name": "who",
|
||||
"type": "address"
|
||||
},
|
||||
{
|
||||
"indexed": false,
|
||||
"internalType": "bytes",
|
||||
"name": "data",
|
||||
"type": "bytes"
|
||||
}
|
||||
],
|
||||
"name": "Echo",
|
||||
"type": "event"
|
||||
}
|
||||
]
|
BIN
build/Instance/Instance.wasm
Normal file
BIN
build/Instance/Instance.wasm
Normal file
Binary file not shown.
58
build/Instance/abis/Instance.json
Normal file
58
build/Instance/abis/Instance.json
Normal file
@ -0,0 +1,58 @@
|
||||
[
|
||||
{
|
||||
"anonymous": false,
|
||||
"inputs": [
|
||||
{
|
||||
"indexed": true,
|
||||
"internalType": "bytes32",
|
||||
"name": "commitment",
|
||||
"type": "bytes32"
|
||||
},
|
||||
{
|
||||
"indexed": false,
|
||||
"internalType": "uint32",
|
||||
"name": "leafIndex",
|
||||
"type": "uint32"
|
||||
},
|
||||
{
|
||||
"indexed": false,
|
||||
"internalType": "uint256",
|
||||
"name": "timestamp",
|
||||
"type": "uint256"
|
||||
}
|
||||
],
|
||||
"name": "Deposit",
|
||||
"type": "event"
|
||||
},
|
||||
{
|
||||
"anonymous": false,
|
||||
"inputs": [
|
||||
{
|
||||
"indexed": false,
|
||||
"internalType": "address",
|
||||
"name": "to",
|
||||
"type": "address"
|
||||
},
|
||||
{
|
||||
"indexed": false,
|
||||
"internalType": "bytes32",
|
||||
"name": "nullifierHash",
|
||||
"type": "bytes32"
|
||||
},
|
||||
{
|
||||
"indexed": true,
|
||||
"internalType": "address",
|
||||
"name": "relayer",
|
||||
"type": "address"
|
||||
},
|
||||
{
|
||||
"indexed": false,
|
||||
"internalType": "uint256",
|
||||
"name": "fee",
|
||||
"type": "uint256"
|
||||
}
|
||||
],
|
||||
"name": "Withdrawal",
|
||||
"type": "event"
|
||||
}
|
||||
]
|
BIN
build/Proxy/Proxy.wasm
Normal file
BIN
build/Proxy/Proxy.wasm
Normal file
Binary file not shown.
21
build/Proxy/abis/Proxy.json
Normal file
21
build/Proxy/abis/Proxy.json
Normal file
@ -0,0 +1,21 @@
|
||||
[
|
||||
{
|
||||
"anonymous": false,
|
||||
"inputs": [
|
||||
{
|
||||
"indexed": true,
|
||||
"internalType": "address",
|
||||
"name": "sender",
|
||||
"type": "address"
|
||||
},
|
||||
{
|
||||
"indexed": false,
|
||||
"internalType": "bytes",
|
||||
"name": "encryptedNote",
|
||||
"type": "bytes"
|
||||
}
|
||||
],
|
||||
"name": "EncryptedNote",
|
||||
"type": "event"
|
||||
}
|
||||
]
|
38
build/schema.graphql
Normal file
38
build/schema.graphql
Normal file
@ -0,0 +1,38 @@
|
||||
type Deposit @entity {
|
||||
id: ID!
|
||||
index: BigInt!
|
||||
amount: String!
|
||||
currency: String!
|
||||
commitment: Bytes!
|
||||
timestamp: BigInt!
|
||||
blockNumber: BigInt!
|
||||
transactionHash: Bytes!
|
||||
}
|
||||
|
||||
type Withdrawal @entity {
|
||||
id: ID!
|
||||
to: Bytes!
|
||||
fee: BigInt!
|
||||
index: BigInt!
|
||||
amount: String!
|
||||
currency: String!
|
||||
nullifier: Bytes!
|
||||
timestamp: BigInt!
|
||||
blockNumber: BigInt!
|
||||
transactionHash: Bytes!
|
||||
}
|
||||
|
||||
type EncryptedNote @entity {
|
||||
id: ID!
|
||||
index: BigInt!
|
||||
blockNumber: BigInt!
|
||||
encryptedNote: Bytes!
|
||||
transactionHash: Bytes!
|
||||
}
|
||||
|
||||
type NoteAccount @entity {
|
||||
id: ID!
|
||||
index: BigInt!
|
||||
address: Bytes!
|
||||
encryptedAccount: Bytes!
|
||||
}
|
67
build/subgraph.yaml
Normal file
67
build/subgraph.yaml
Normal file
@ -0,0 +1,67 @@
|
||||
specVersion: 0.0.2
|
||||
schema:
|
||||
file: schema.graphql
|
||||
dataSources:
|
||||
- kind: ethereum/contract
|
||||
name: Proxy
|
||||
network: bsc
|
||||
source:
|
||||
address: "0x5D595DB16eb6d074E0e7E7f0bE37E7e75f23BEc7"
|
||||
abi: Proxy
|
||||
startBlock: 7941563
|
||||
mapping:
|
||||
kind: ethereum/events
|
||||
apiVersion: 0.0.4
|
||||
language: wasm/assemblyscript
|
||||
entities:
|
||||
- EncryptedNote
|
||||
abis:
|
||||
- name: Proxy
|
||||
file: Proxy/abis/Proxy.json
|
||||
eventHandlers:
|
||||
- event: EncryptedNote(indexed address,bytes)
|
||||
handler: handleEncryptedNote
|
||||
file: Proxy/Proxy.wasm
|
||||
- kind: ethereum/contract
|
||||
name: Echoer
|
||||
network: bsc
|
||||
source:
|
||||
address: "0x60eaCBd5535ADB86955A0154E44Aded78F161643"
|
||||
abi: Echoer
|
||||
startBlock: 7941563
|
||||
mapping:
|
||||
kind: ethereum/events
|
||||
apiVersion: 0.0.4
|
||||
language: wasm/assemblyscript
|
||||
entities:
|
||||
- NoteAccount
|
||||
abis:
|
||||
- name: Echoer
|
||||
file: Echoer/abis/Echoer.json
|
||||
eventHandlers:
|
||||
- event: Echo(indexed address,bytes)
|
||||
handler: handleEcho
|
||||
file: Echoer/Echoer.wasm
|
||||
- kind: ethereum/contract
|
||||
name: Instance
|
||||
network: bsc
|
||||
source:
|
||||
address: "0x0Ce22770451A8acAD1220D9d1678656b4fAe4a1d"
|
||||
abi: Instance
|
||||
startBlock: 7941563
|
||||
mapping:
|
||||
kind: ethereum/events
|
||||
apiVersion: 0.0.4
|
||||
language: wasm/assemblyscript
|
||||
entities:
|
||||
- Deposit
|
||||
- Withdrawal
|
||||
abis:
|
||||
- name: Instance
|
||||
file: Instance/abis/Instance.json
|
||||
eventHandlers:
|
||||
- event: Deposit(indexed bytes32,uint32,uint256)
|
||||
handler: handleDeposit
|
||||
- event: Withdrawal(address,bytes32,indexed address,uint256)
|
||||
handler: handleWithdrawal
|
||||
file: Instance/Instance.wasm
|
39
generated/Echoer/Echoer.ts
Normal file
39
generated/Echoer/Echoer.ts
Normal file
@ -0,0 +1,39 @@
|
||||
// THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
|
||||
|
||||
import {
|
||||
ethereum,
|
||||
JSONValue,
|
||||
TypedMap,
|
||||
Entity,
|
||||
Bytes,
|
||||
Address,
|
||||
BigInt
|
||||
} from "@graphprotocol/graph-ts";
|
||||
|
||||
export class Echo extends ethereum.Event {
|
||||
get params(): Echo__Params {
|
||||
return new Echo__Params(this);
|
||||
}
|
||||
}
|
||||
|
||||
export class Echo__Params {
|
||||
_event: Echo;
|
||||
|
||||
constructor(event: Echo) {
|
||||
this._event = event;
|
||||
}
|
||||
|
||||
get who(): Address {
|
||||
return this._event.parameters[0].value.toAddress();
|
||||
}
|
||||
|
||||
get data(): Bytes {
|
||||
return this._event.parameters[1].value.toBytes();
|
||||
}
|
||||
}
|
||||
|
||||
export class Echoer extends ethereum.SmartContract {
|
||||
static bind(address: Address): Echoer {
|
||||
return new Echoer("Echoer", address);
|
||||
}
|
||||
}
|
73
generated/Instance/Instance.ts
Normal file
73
generated/Instance/Instance.ts
Normal file
@ -0,0 +1,73 @@
|
||||
// THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
|
||||
|
||||
import {
|
||||
ethereum,
|
||||
JSONValue,
|
||||
TypedMap,
|
||||
Entity,
|
||||
Bytes,
|
||||
Address,
|
||||
BigInt
|
||||
} from "@graphprotocol/graph-ts";
|
||||
|
||||
export class Deposit extends ethereum.Event {
|
||||
get params(): Deposit__Params {
|
||||
return new Deposit__Params(this);
|
||||
}
|
||||
}
|
||||
|
||||
export class Deposit__Params {
|
||||
_event: Deposit;
|
||||
|
||||
constructor(event: Deposit) {
|
||||
this._event = event;
|
||||
}
|
||||
|
||||
get commitment(): Bytes {
|
||||
return this._event.parameters[0].value.toBytes();
|
||||
}
|
||||
|
||||
get leafIndex(): BigInt {
|
||||
return this._event.parameters[1].value.toBigInt();
|
||||
}
|
||||
|
||||
get timestamp(): BigInt {
|
||||
return this._event.parameters[2].value.toBigInt();
|
||||
}
|
||||
}
|
||||
|
||||
export class Withdrawal extends ethereum.Event {
|
||||
get params(): Withdrawal__Params {
|
||||
return new Withdrawal__Params(this);
|
||||
}
|
||||
}
|
||||
|
||||
export class Withdrawal__Params {
|
||||
_event: Withdrawal;
|
||||
|
||||
constructor(event: Withdrawal) {
|
||||
this._event = event;
|
||||
}
|
||||
|
||||
get to(): Address {
|
||||
return this._event.parameters[0].value.toAddress();
|
||||
}
|
||||
|
||||
get nullifierHash(): Bytes {
|
||||
return this._event.parameters[1].value.toBytes();
|
||||
}
|
||||
|
||||
get relayer(): Address {
|
||||
return this._event.parameters[2].value.toAddress();
|
||||
}
|
||||
|
||||
get fee(): BigInt {
|
||||
return this._event.parameters[3].value.toBigInt();
|
||||
}
|
||||
}
|
||||
|
||||
export class Instance extends ethereum.SmartContract {
|
||||
static bind(address: Address): Instance {
|
||||
return new Instance("Instance", address);
|
||||
}
|
||||
}
|
39
generated/Proxy/Proxy.ts
Normal file
39
generated/Proxy/Proxy.ts
Normal file
@ -0,0 +1,39 @@
|
||||
// THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
|
||||
|
||||
import {
|
||||
ethereum,
|
||||
JSONValue,
|
||||
TypedMap,
|
||||
Entity,
|
||||
Bytes,
|
||||
Address,
|
||||
BigInt
|
||||
} from "@graphprotocol/graph-ts";
|
||||
|
||||
export class EncryptedNote extends ethereum.Event {
|
||||
get params(): EncryptedNote__Params {
|
||||
return new EncryptedNote__Params(this);
|
||||
}
|
||||
}
|
||||
|
||||
export class EncryptedNote__Params {
|
||||
_event: EncryptedNote;
|
||||
|
||||
constructor(event: EncryptedNote) {
|
||||
this._event = event;
|
||||
}
|
||||
|
||||
get sender(): Address {
|
||||
return this._event.parameters[0].value.toAddress();
|
||||
}
|
||||
|
||||
get encryptedNote(): Bytes {
|
||||
return this._event.parameters[1].value.toBytes();
|
||||
}
|
||||
}
|
||||
|
||||
export class Proxy extends ethereum.SmartContract {
|
||||
static bind(address: Address): Proxy {
|
||||
return new Proxy("Proxy", address);
|
||||
}
|
||||
}
|
3
generated/index.ts
Normal file
3
generated/index.ts
Normal file
@ -0,0 +1,3 @@
|
||||
export * from './Proxy/Proxy'
|
||||
export * from './Echoer/Echoer'
|
||||
export * from './Instance/Instance'
|
344
generated/schema.ts
Normal file
344
generated/schema.ts
Normal file
@ -0,0 +1,344 @@
|
||||
// THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
|
||||
|
||||
import {
|
||||
TypedMap,
|
||||
Entity,
|
||||
Value,
|
||||
ValueKind,
|
||||
store,
|
||||
Address,
|
||||
Bytes,
|
||||
BigInt,
|
||||
BigDecimal
|
||||
} from "@graphprotocol/graph-ts";
|
||||
|
||||
export class Deposit extends Entity {
|
||||
constructor(id: string) {
|
||||
super();
|
||||
this.set("id", Value.fromString(id));
|
||||
}
|
||||
|
||||
save(): void {
|
||||
let id = this.get("id");
|
||||
assert(id !== null, "Cannot save Deposit entity without an ID");
|
||||
assert(
|
||||
id.kind == ValueKind.STRING,
|
||||
"Cannot save Deposit entity with non-string ID. " +
|
||||
'Considering using .toHex() to convert the "id" to a string.'
|
||||
);
|
||||
store.set("Deposit", id.toString(), this);
|
||||
}
|
||||
|
||||
static load(id: string): Deposit | null {
|
||||
return store.get("Deposit", id) as Deposit | null;
|
||||
}
|
||||
|
||||
get id(): string {
|
||||
let value = this.get("id");
|
||||
return value.toString();
|
||||
}
|
||||
|
||||
set id(value: string) {
|
||||
this.set("id", Value.fromString(value));
|
||||
}
|
||||
|
||||
get index(): BigInt {
|
||||
let value = this.get("index");
|
||||
return value.toBigInt();
|
||||
}
|
||||
|
||||
set index(value: BigInt) {
|
||||
this.set("index", Value.fromBigInt(value));
|
||||
}
|
||||
|
||||
get amount(): string {
|
||||
let value = this.get("amount");
|
||||
return value.toString();
|
||||
}
|
||||
|
||||
set amount(value: string) {
|
||||
this.set("amount", Value.fromString(value));
|
||||
}
|
||||
|
||||
get currency(): string {
|
||||
let value = this.get("currency");
|
||||
return value.toString();
|
||||
}
|
||||
|
||||
set currency(value: string) {
|
||||
this.set("currency", Value.fromString(value));
|
||||
}
|
||||
|
||||
get commitment(): Bytes {
|
||||
let value = this.get("commitment");
|
||||
return value.toBytes();
|
||||
}
|
||||
|
||||
set commitment(value: Bytes) {
|
||||
this.set("commitment", Value.fromBytes(value));
|
||||
}
|
||||
|
||||
get timestamp(): BigInt {
|
||||
let value = this.get("timestamp");
|
||||
return value.toBigInt();
|
||||
}
|
||||
|
||||
set timestamp(value: BigInt) {
|
||||
this.set("timestamp", Value.fromBigInt(value));
|
||||
}
|
||||
|
||||
get blockNumber(): BigInt {
|
||||
let value = this.get("blockNumber");
|
||||
return value.toBigInt();
|
||||
}
|
||||
|
||||
set blockNumber(value: BigInt) {
|
||||
this.set("blockNumber", Value.fromBigInt(value));
|
||||
}
|
||||
|
||||
get transactionHash(): Bytes {
|
||||
let value = this.get("transactionHash");
|
||||
return value.toBytes();
|
||||
}
|
||||
|
||||
set transactionHash(value: Bytes) {
|
||||
this.set("transactionHash", Value.fromBytes(value));
|
||||
}
|
||||
}
|
||||
|
||||
export class Withdrawal extends Entity {
|
||||
constructor(id: string) {
|
||||
super();
|
||||
this.set("id", Value.fromString(id));
|
||||
}
|
||||
|
||||
save(): void {
|
||||
let id = this.get("id");
|
||||
assert(id !== null, "Cannot save Withdrawal entity without an ID");
|
||||
assert(
|
||||
id.kind == ValueKind.STRING,
|
||||
"Cannot save Withdrawal entity with non-string ID. " +
|
||||
'Considering using .toHex() to convert the "id" to a string.'
|
||||
);
|
||||
store.set("Withdrawal", id.toString(), this);
|
||||
}
|
||||
|
||||
static load(id: string): Withdrawal | null {
|
||||
return store.get("Withdrawal", id) as Withdrawal | null;
|
||||
}
|
||||
|
||||
get id(): string {
|
||||
let value = this.get("id");
|
||||
return value.toString();
|
||||
}
|
||||
|
||||
set id(value: string) {
|
||||
this.set("id", Value.fromString(value));
|
||||
}
|
||||
|
||||
get to(): Bytes {
|
||||
let value = this.get("to");
|
||||
return value.toBytes();
|
||||
}
|
||||
|
||||
set to(value: Bytes) {
|
||||
this.set("to", Value.fromBytes(value));
|
||||
}
|
||||
|
||||
get fee(): BigInt {
|
||||
let value = this.get("fee");
|
||||
return value.toBigInt();
|
||||
}
|
||||
|
||||
set fee(value: BigInt) {
|
||||
this.set("fee", Value.fromBigInt(value));
|
||||
}
|
||||
|
||||
get index(): BigInt {
|
||||
let value = this.get("index");
|
||||
return value.toBigInt();
|
||||
}
|
||||
|
||||
set index(value: BigInt) {
|
||||
this.set("index", Value.fromBigInt(value));
|
||||
}
|
||||
|
||||
get amount(): string {
|
||||
let value = this.get("amount");
|
||||
return value.toString();
|
||||
}
|
||||
|
||||
set amount(value: string) {
|
||||
this.set("amount", Value.fromString(value));
|
||||
}
|
||||
|
||||
get currency(): string {
|
||||
let value = this.get("currency");
|
||||
return value.toString();
|
||||
}
|
||||
|
||||
set currency(value: string) {
|
||||
this.set("currency", Value.fromString(value));
|
||||
}
|
||||
|
||||
get nullifier(): Bytes {
|
||||
let value = this.get("nullifier");
|
||||
return value.toBytes();
|
||||
}
|
||||
|
||||
set nullifier(value: Bytes) {
|
||||
this.set("nullifier", Value.fromBytes(value));
|
||||
}
|
||||
|
||||
get timestamp(): BigInt {
|
||||
let value = this.get("timestamp");
|
||||
return value.toBigInt();
|
||||
}
|
||||
|
||||
set timestamp(value: BigInt) {
|
||||
this.set("timestamp", Value.fromBigInt(value));
|
||||
}
|
||||
|
||||
get blockNumber(): BigInt {
|
||||
let value = this.get("blockNumber");
|
||||
return value.toBigInt();
|
||||
}
|
||||
|
||||
set blockNumber(value: BigInt) {
|
||||
this.set("blockNumber", Value.fromBigInt(value));
|
||||
}
|
||||
|
||||
get transactionHash(): Bytes {
|
||||
let value = this.get("transactionHash");
|
||||
return value.toBytes();
|
||||
}
|
||||
|
||||
set transactionHash(value: Bytes) {
|
||||
this.set("transactionHash", Value.fromBytes(value));
|
||||
}
|
||||
}
|
||||
|
||||
export class EncryptedNote extends Entity {
|
||||
constructor(id: string) {
|
||||
super();
|
||||
this.set("id", Value.fromString(id));
|
||||
}
|
||||
|
||||
save(): void {
|
||||
let id = this.get("id");
|
||||
assert(id !== null, "Cannot save EncryptedNote entity without an ID");
|
||||
assert(
|
||||
id.kind == ValueKind.STRING,
|
||||
"Cannot save EncryptedNote entity with non-string ID. " +
|
||||
'Considering using .toHex() to convert the "id" to a string.'
|
||||
);
|
||||
store.set("EncryptedNote", id.toString(), this);
|
||||
}
|
||||
|
||||
static load(id: string): EncryptedNote | null {
|
||||
return store.get("EncryptedNote", id) as EncryptedNote | null;
|
||||
}
|
||||
|
||||
get id(): string {
|
||||
let value = this.get("id");
|
||||
return value.toString();
|
||||
}
|
||||
|
||||
set id(value: string) {
|
||||
this.set("id", Value.fromString(value));
|
||||
}
|
||||
|
||||
get index(): BigInt {
|
||||
let value = this.get("index");
|
||||
return value.toBigInt();
|
||||
}
|
||||
|
||||
set index(value: BigInt) {
|
||||
this.set("index", Value.fromBigInt(value));
|
||||
}
|
||||
|
||||
get blockNumber(): BigInt {
|
||||
let value = this.get("blockNumber");
|
||||
return value.toBigInt();
|
||||
}
|
||||
|
||||
set blockNumber(value: BigInt) {
|
||||
this.set("blockNumber", Value.fromBigInt(value));
|
||||
}
|
||||
|
||||
get encryptedNote(): Bytes {
|
||||
let value = this.get("encryptedNote");
|
||||
return value.toBytes();
|
||||
}
|
||||
|
||||
set encryptedNote(value: Bytes) {
|
||||
this.set("encryptedNote", Value.fromBytes(value));
|
||||
}
|
||||
|
||||
get transactionHash(): Bytes {
|
||||
let value = this.get("transactionHash");
|
||||
return value.toBytes();
|
||||
}
|
||||
|
||||
set transactionHash(value: Bytes) {
|
||||
this.set("transactionHash", Value.fromBytes(value));
|
||||
}
|
||||
}
|
||||
|
||||
export class NoteAccount extends Entity {
|
||||
constructor(id: string) {
|
||||
super();
|
||||
this.set("id", Value.fromString(id));
|
||||
}
|
||||
|
||||
save(): void {
|
||||
let id = this.get("id");
|
||||
assert(id !== null, "Cannot save NoteAccount entity without an ID");
|
||||
assert(
|
||||
id.kind == ValueKind.STRING,
|
||||
"Cannot save NoteAccount entity with non-string ID. " +
|
||||
'Considering using .toHex() to convert the "id" to a string.'
|
||||
);
|
||||
store.set("NoteAccount", id.toString(), this);
|
||||
}
|
||||
|
||||
static load(id: string): NoteAccount | null {
|
||||
return store.get("NoteAccount", id) as NoteAccount | null;
|
||||
}
|
||||
|
||||
get id(): string {
|
||||
let value = this.get("id");
|
||||
return value.toString();
|
||||
}
|
||||
|
||||
set id(value: string) {
|
||||
this.set("id", Value.fromString(value));
|
||||
}
|
||||
|
||||
get index(): BigInt {
|
||||
let value = this.get("index");
|
||||
return value.toBigInt();
|
||||
}
|
||||
|
||||
set index(value: BigInt) {
|
||||
this.set("index", Value.fromBigInt(value));
|
||||
}
|
||||
|
||||
get address(): Bytes {
|
||||
let value = this.get("address");
|
||||
return value.toBytes();
|
||||
}
|
||||
|
||||
set address(value: Bytes) {
|
||||
this.set("address", Value.fromBytes(value));
|
||||
}
|
||||
|
||||
get encryptedAccount(): Bytes {
|
||||
let value = this.get("encryptedAccount");
|
||||
return value.toBytes();
|
||||
}
|
||||
|
||||
set encryptedAccount(value: Bytes) {
|
||||
this.set("encryptedAccount", Value.fromBytes(value));
|
||||
}
|
||||
}
|
13
package.json
Normal file
13
package.json
Normal file
@ -0,0 +1,13 @@
|
||||
{
|
||||
"name": "sub-graph-proxy",
|
||||
"license": "UNLICENSED",
|
||||
"scripts": {
|
||||
"codegen": "graph codegen",
|
||||
"build": "graph build",
|
||||
"deploy": "graph deploy --node https://api.thegraph.com/deploy/ --ipfs https://api.thegraph.com/ipfs/ tornadocash/bsc-tornado-subgraph"
|
||||
},
|
||||
"dependencies": {
|
||||
"@graphprotocol/graph-cli": "0.20.0",
|
||||
"@graphprotocol/graph-ts": "0.20.0"
|
||||
}
|
||||
}
|
38
schema.graphql
Normal file
38
schema.graphql
Normal file
@ -0,0 +1,38 @@
|
||||
type Deposit @entity {
|
||||
id: ID!
|
||||
index: BigInt!
|
||||
amount: String!
|
||||
currency: String!
|
||||
commitment: Bytes!
|
||||
timestamp: BigInt!
|
||||
blockNumber: BigInt!
|
||||
transactionHash: Bytes!
|
||||
}
|
||||
|
||||
type Withdrawal @entity {
|
||||
id: ID!
|
||||
to: Bytes!
|
||||
fee: BigInt!
|
||||
index: BigInt!
|
||||
amount: String!
|
||||
currency: String!
|
||||
nullifier: Bytes!
|
||||
timestamp: BigInt!
|
||||
blockNumber: BigInt!
|
||||
transactionHash: Bytes!
|
||||
}
|
||||
|
||||
type EncryptedNote @entity {
|
||||
id: ID!
|
||||
index: BigInt!
|
||||
blockNumber: BigInt!
|
||||
encryptedNote: Bytes!
|
||||
transactionHash: Bytes!
|
||||
}
|
||||
|
||||
type NoteAccount @entity {
|
||||
id: ID!
|
||||
index: BigInt!
|
||||
address: Bytes!
|
||||
encryptedAccount: Bytes!
|
||||
}
|
4
src/contractsData.ts
Normal file
4
src/contractsData.ts
Normal file
@ -0,0 +1,4 @@
|
||||
|
||||
export let contractMaps = new Map<string, string>();
|
||||
|
||||
contractMaps.set('0x0ce22770451a8acad1220d9d1678656b4fae4a1d', 'bnb-0.1');
|
12
src/mapping-echo-account.ts
Normal file
12
src/mapping-echo-account.ts
Normal file
@ -0,0 +1,12 @@
|
||||
import { Echo } from '../generated'
|
||||
import { NoteAccount as NoteAccountEntity } from '../generated/schema'
|
||||
|
||||
export function handleEcho(event: Echo): void {
|
||||
let entity = new NoteAccountEntity(event.transaction.hash.toHex() + '-' + event.logIndex.toString());
|
||||
|
||||
entity.index = event.logIndex;
|
||||
entity.address = event.params.who;
|
||||
entity.encryptedAccount = event.params.data;
|
||||
|
||||
entity.save();
|
||||
}
|
15
src/mapping-encrypted-note.ts
Normal file
15
src/mapping-encrypted-note.ts
Normal file
@ -0,0 +1,15 @@
|
||||
import { EncryptedNote } from '../generated'
|
||||
import { EncryptedNote as EncryptedNoteEntity } from '../generated/schema'
|
||||
|
||||
export function handleEncryptedNote(event: EncryptedNote): void {
|
||||
let entity = new EncryptedNoteEntity(event.transaction.hash.toHex() + '-' + event.logIndex.toString());
|
||||
|
||||
entity.index = event.logIndex;
|
||||
entity.blockNumber = event.block.number;
|
||||
entity.transactionHash = event.transaction.hash;
|
||||
entity.encryptedNote = event.params.encryptedNote;
|
||||
|
||||
if (event.params.encryptedNote.toHexString() != '0x') {
|
||||
entity.save();
|
||||
}
|
||||
}
|
40
src/mapping-instance.ts
Normal file
40
src/mapping-instance.ts
Normal file
@ -0,0 +1,40 @@
|
||||
import { Withdrawal, Deposit } from '../generated'
|
||||
import { Withdrawal as WithdrawalEntity, Deposit as DepositEntity } from '../generated/schema'
|
||||
|
||||
import { contractMaps } from './contractsData'
|
||||
|
||||
export function handleWithdrawal(event: Withdrawal): void {
|
||||
let entity = new WithdrawalEntity(event.transaction.hash.toHex() + '-' + event.logIndex.toString());
|
||||
|
||||
let result = contractMaps.get(event.address.toHexString()).split('-');
|
||||
|
||||
entity.amount = result[1];
|
||||
entity.currency = result[0];
|
||||
|
||||
entity.to = event.params.to;
|
||||
entity.fee = event.params.fee;
|
||||
entity.index = event.logIndex;
|
||||
entity.blockNumber = event.block.number;
|
||||
entity.timestamp = event.block.timestamp;
|
||||
entity.nullifier = event.params.nullifierHash;
|
||||
entity.transactionHash = event.transaction.hash;
|
||||
|
||||
entity.save();
|
||||
}
|
||||
|
||||
export function handleDeposit(event: Deposit): void {
|
||||
let entity = new DepositEntity(event.transaction.hash.toHex() + '-' + event.logIndex.toString())
|
||||
|
||||
let result = contractMaps.get(event.address.toHexString()).split('-');
|
||||
|
||||
entity.amount = result[1];
|
||||
entity.currency = result[0];
|
||||
|
||||
entity.index = event.params.leafIndex;
|
||||
entity.blockNumber = event.block.number;
|
||||
entity.timestamp = event.block.timestamp;
|
||||
entity.commitment = event.params.commitment;
|
||||
entity.transactionHash = event.transaction.hash;
|
||||
|
||||
entity.save()
|
||||
}
|
67
subgraph.yaml
Normal file
67
subgraph.yaml
Normal file
@ -0,0 +1,67 @@
|
||||
specVersion: 0.0.2
|
||||
schema:
|
||||
file: ./schema.graphql
|
||||
dataSources:
|
||||
- kind: ethereum/contract
|
||||
name: Proxy
|
||||
network: bsc
|
||||
source:
|
||||
address: "0x5D595DB16eb6d074E0e7E7f0bE37E7e75f23BEc7"
|
||||
abi: Proxy
|
||||
startBlock: 7941563
|
||||
mapping:
|
||||
kind: ethereum/events
|
||||
apiVersion: 0.0.4
|
||||
language: wasm/assemblyscript
|
||||
entities:
|
||||
- EncryptedNote
|
||||
abis:
|
||||
- name: Proxy
|
||||
file: ./abis/Proxy.json
|
||||
eventHandlers:
|
||||
- event: EncryptedNote(indexed address,bytes)
|
||||
handler: handleEncryptedNote
|
||||
file: ./src/mapping-encrypted-note.ts
|
||||
- kind: ethereum/contract
|
||||
name: Echoer
|
||||
network: bsc
|
||||
source:
|
||||
address: "0x60eaCBd5535ADB86955A0154E44Aded78F161643"
|
||||
abi: Echoer
|
||||
startBlock: 7941563
|
||||
mapping:
|
||||
kind: ethereum/events
|
||||
apiVersion: 0.0.4
|
||||
language: wasm/assemblyscript
|
||||
entities:
|
||||
- NoteAccount
|
||||
abis:
|
||||
- name: Echoer
|
||||
file: ./abis/Echoer.json
|
||||
eventHandlers:
|
||||
- event: Echo(indexed address,bytes)
|
||||
handler: handleEcho
|
||||
file: ./src/mapping-echo-account.ts
|
||||
- kind: ethereum/contract
|
||||
name: Instance
|
||||
network: bsc
|
||||
source:
|
||||
address: "0x0Ce22770451A8acAD1220D9d1678656b4fAe4a1d"
|
||||
abi: Instance
|
||||
startBlock: 7941563
|
||||
mapping:
|
||||
kind: ethereum/events
|
||||
apiVersion: 0.0.4
|
||||
language: wasm/assemblyscript
|
||||
entities:
|
||||
- Deposit
|
||||
- Withdrawal
|
||||
abis:
|
||||
- name: Instance
|
||||
file: ./abis/Instance.json
|
||||
eventHandlers:
|
||||
- event: Deposit(indexed bytes32,uint32,uint256)
|
||||
handler: handleDeposit
|
||||
- event: Withdrawal(address,bytes32,indexed address,uint256)
|
||||
handler: handleWithdrawal
|
||||
file: ./src/mapping-instance.ts
|
Loading…
Reference in New Issue
Block a user