Initial commit
This commit is contained in:
commit
7256dccea0
34
.gitignore
vendored
Normal file
34
.gitignore
vendored
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
# Graph CLI generated artifacts
|
||||||
|
build/
|
||||||
|
generated/
|
||||||
|
|
||||||
|
# Dependency directories
|
||||||
|
node_modules/
|
||||||
|
jspm_packages/
|
||||||
|
|
||||||
|
# Logs
|
||||||
|
logs
|
||||||
|
*.log
|
||||||
|
npm-debug.log*
|
||||||
|
yarn-debug.log*
|
||||||
|
yarn-error.log*
|
||||||
|
|
||||||
|
# Optional npm cache directory
|
||||||
|
.npm
|
||||||
|
|
||||||
|
# Optional eslint cache
|
||||||
|
.eslintcache
|
||||||
|
|
||||||
|
# dotenv environment variables file
|
||||||
|
.env
|
||||||
|
|
||||||
|
# Testing
|
||||||
|
coverage
|
||||||
|
coverage.json
|
||||||
|
|
||||||
|
# Typechain
|
||||||
|
typechain
|
||||||
|
typechain-types
|
||||||
|
|
||||||
|
# Hardhat files
|
||||||
|
cache
|
||||||
487
abis/RaidGeld.json
Normal file
487
abis/RaidGeld.json
Normal file
@ -0,0 +1,487 @@
|
|||||||
|
[
|
||||||
|
{ "type": "constructor", "inputs": [], "stateMutability": "nonpayable" },
|
||||||
|
{ "type": "fallback", "stateMutability": "payable" },
|
||||||
|
{ "type": "receive", "stateMutability": "payable" },
|
||||||
|
{
|
||||||
|
"type": "function",
|
||||||
|
"name": "BUY_IN_AMOUNT",
|
||||||
|
"inputs": [],
|
||||||
|
"outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
|
||||||
|
"stateMutability": "view"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "function",
|
||||||
|
"name": "INITIAL_GELD",
|
||||||
|
"inputs": [],
|
||||||
|
"outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
|
||||||
|
"stateMutability": "view"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "function",
|
||||||
|
"name": "MANTISSA",
|
||||||
|
"inputs": [],
|
||||||
|
"outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
|
||||||
|
"stateMutability": "view"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "function",
|
||||||
|
"name": "addUnit",
|
||||||
|
"inputs": [
|
||||||
|
{ "name": "unit", "type": "uint8", "internalType": "uint8" },
|
||||||
|
{ "name": "n_units", "type": "uint16", "internalType": "uint16" }
|
||||||
|
],
|
||||||
|
"outputs": [],
|
||||||
|
"stateMutability": "nonpayable"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "function",
|
||||||
|
"name": "allowance",
|
||||||
|
"inputs": [
|
||||||
|
{ "name": "owner", "type": "address", "internalType": "address" },
|
||||||
|
{ "name": "spender", "type": "address", "internalType": "address" }
|
||||||
|
],
|
||||||
|
"outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
|
||||||
|
"stateMutability": "view"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "function",
|
||||||
|
"name": "approve",
|
||||||
|
"inputs": [
|
||||||
|
{ "name": "spender", "type": "address", "internalType": "address" },
|
||||||
|
{ "name": "value", "type": "uint256", "internalType": "uint256" }
|
||||||
|
],
|
||||||
|
"outputs": [{ "name": "", "type": "bool", "internalType": "bool" }],
|
||||||
|
"stateMutability": "nonpayable"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "function",
|
||||||
|
"name": "balanceOf",
|
||||||
|
"inputs": [
|
||||||
|
{ "name": "account", "type": "address", "internalType": "address" }
|
||||||
|
],
|
||||||
|
"outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
|
||||||
|
"stateMutability": "view"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "function",
|
||||||
|
"name": "decimals",
|
||||||
|
"inputs": [],
|
||||||
|
"outputs": [{ "name": "", "type": "uint8", "internalType": "uint8" }],
|
||||||
|
"stateMutability": "view"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "function",
|
||||||
|
"name": "getArmy",
|
||||||
|
"inputs": [
|
||||||
|
{ "name": "addr", "type": "address", "internalType": "address" }
|
||||||
|
],
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"name": "",
|
||||||
|
"type": "tuple",
|
||||||
|
"internalType": "struct Army",
|
||||||
|
"components": [
|
||||||
|
{
|
||||||
|
"name": "moloch_denier",
|
||||||
|
"type": "tuple",
|
||||||
|
"internalType": "struct Raider",
|
||||||
|
"components": [
|
||||||
|
{ "name": "level", "type": "uint16", "internalType": "uint16" }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "apprentice",
|
||||||
|
"type": "tuple",
|
||||||
|
"internalType": "struct Raider",
|
||||||
|
"components": [
|
||||||
|
{ "name": "level", "type": "uint16", "internalType": "uint16" }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "anointed",
|
||||||
|
"type": "tuple",
|
||||||
|
"internalType": "struct Raider",
|
||||||
|
"components": [
|
||||||
|
{ "name": "level", "type": "uint16", "internalType": "uint16" }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "champion",
|
||||||
|
"type": "tuple",
|
||||||
|
"internalType": "struct Raider",
|
||||||
|
"components": [
|
||||||
|
{ "name": "level", "type": "uint16", "internalType": "uint16" }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "profit_per_second",
|
||||||
|
"type": "uint256",
|
||||||
|
"internalType": "uint256"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"stateMutability": "view"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "function",
|
||||||
|
"name": "getPlayer",
|
||||||
|
"inputs": [
|
||||||
|
{ "name": "addr", "type": "address", "internalType": "address" }
|
||||||
|
],
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"name": "",
|
||||||
|
"type": "tuple",
|
||||||
|
"internalType": "struct Player",
|
||||||
|
"components": [
|
||||||
|
{
|
||||||
|
"name": "total_minted",
|
||||||
|
"type": "uint256",
|
||||||
|
"internalType": "uint256"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "created_at",
|
||||||
|
"type": "uint256",
|
||||||
|
"internalType": "uint256"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "last_raided_at",
|
||||||
|
"type": "uint256",
|
||||||
|
"internalType": "uint256"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"stateMutability": "view"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "function",
|
||||||
|
"name": "isRegistered",
|
||||||
|
"inputs": [
|
||||||
|
{ "name": "addr", "type": "address", "internalType": "address" }
|
||||||
|
],
|
||||||
|
"outputs": [{ "name": "", "type": "bool", "internalType": "bool" }],
|
||||||
|
"stateMutability": "view"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "function",
|
||||||
|
"name": "name",
|
||||||
|
"inputs": [],
|
||||||
|
"outputs": [{ "name": "", "type": "string", "internalType": "string" }],
|
||||||
|
"stateMutability": "view"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "function",
|
||||||
|
"name": "owner",
|
||||||
|
"inputs": [],
|
||||||
|
"outputs": [{ "name": "", "type": "address", "internalType": "address" }],
|
||||||
|
"stateMutability": "view"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "function",
|
||||||
|
"name": "raid",
|
||||||
|
"inputs": [],
|
||||||
|
"outputs": [],
|
||||||
|
"stateMutability": "nonpayable"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "function",
|
||||||
|
"name": "register",
|
||||||
|
"inputs": [],
|
||||||
|
"outputs": [],
|
||||||
|
"stateMutability": "payable"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "function",
|
||||||
|
"name": "renounceOwnership",
|
||||||
|
"inputs": [],
|
||||||
|
"outputs": [],
|
||||||
|
"stateMutability": "nonpayable"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "function",
|
||||||
|
"name": "symbol",
|
||||||
|
"inputs": [],
|
||||||
|
"outputs": [{ "name": "", "type": "string", "internalType": "string" }],
|
||||||
|
"stateMutability": "view"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "function",
|
||||||
|
"name": "totalSupply",
|
||||||
|
"inputs": [],
|
||||||
|
"outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
|
||||||
|
"stateMutability": "view"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "function",
|
||||||
|
"name": "transfer",
|
||||||
|
"inputs": [
|
||||||
|
{ "name": "to", "type": "address", "internalType": "address" },
|
||||||
|
{ "name": "value", "type": "uint256", "internalType": "uint256" }
|
||||||
|
],
|
||||||
|
"outputs": [{ "name": "", "type": "bool", "internalType": "bool" }],
|
||||||
|
"stateMutability": "nonpayable"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "function",
|
||||||
|
"name": "transferFrom",
|
||||||
|
"inputs": [
|
||||||
|
{ "name": "from", "type": "address", "internalType": "address" },
|
||||||
|
{ "name": "to", "type": "address", "internalType": "address" },
|
||||||
|
{ "name": "value", "type": "uint256", "internalType": "uint256" }
|
||||||
|
],
|
||||||
|
"outputs": [{ "name": "", "type": "bool", "internalType": "bool" }],
|
||||||
|
"stateMutability": "nonpayable"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "function",
|
||||||
|
"name": "transferOwnership",
|
||||||
|
"inputs": [
|
||||||
|
{ "name": "newOwner", "type": "address", "internalType": "address" }
|
||||||
|
],
|
||||||
|
"outputs": [],
|
||||||
|
"stateMutability": "nonpayable"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "function",
|
||||||
|
"name": "withdraw",
|
||||||
|
"inputs": [],
|
||||||
|
"outputs": [],
|
||||||
|
"stateMutability": "nonpayable"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "event",
|
||||||
|
"name": "Approval",
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"name": "owner",
|
||||||
|
"type": "address",
|
||||||
|
"indexed": true,
|
||||||
|
"internalType": "address"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "spender",
|
||||||
|
"type": "address",
|
||||||
|
"indexed": true,
|
||||||
|
"internalType": "address"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "value",
|
||||||
|
"type": "uint256",
|
||||||
|
"indexed": false,
|
||||||
|
"internalType": "uint256"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"anonymous": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "event",
|
||||||
|
"name": "OwnershipTransferred",
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"name": "previousOwner",
|
||||||
|
"type": "address",
|
||||||
|
"indexed": true,
|
||||||
|
"internalType": "address"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "newOwner",
|
||||||
|
"type": "address",
|
||||||
|
"indexed": true,
|
||||||
|
"internalType": "address"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"anonymous": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "event",
|
||||||
|
"name": "PlayerRegistered",
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"name": "player",
|
||||||
|
"type": "address",
|
||||||
|
"indexed": true,
|
||||||
|
"internalType": "address"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "initialGeld",
|
||||||
|
"type": "uint256",
|
||||||
|
"indexed": false,
|
||||||
|
"internalType": "uint256"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"anonymous": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "event",
|
||||||
|
"name": "RaidPerformed",
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"name": "player",
|
||||||
|
"type": "address",
|
||||||
|
"indexed": true,
|
||||||
|
"internalType": "address"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "totalMinted",
|
||||||
|
"type": "uint256",
|
||||||
|
"indexed": false,
|
||||||
|
"internalType": "uint256"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "geldBalance",
|
||||||
|
"type": "uint256",
|
||||||
|
"indexed": false,
|
||||||
|
"internalType": "uint256"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"anonymous": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "event",
|
||||||
|
"name": "Transfer",
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"name": "from",
|
||||||
|
"type": "address",
|
||||||
|
"indexed": true,
|
||||||
|
"internalType": "address"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "to",
|
||||||
|
"type": "address",
|
||||||
|
"indexed": true,
|
||||||
|
"internalType": "address"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "value",
|
||||||
|
"type": "uint256",
|
||||||
|
"indexed": false,
|
||||||
|
"internalType": "uint256"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"anonymous": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "event",
|
||||||
|
"name": "UnitAdded",
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"name": "player",
|
||||||
|
"type": "address",
|
||||||
|
"indexed": true,
|
||||||
|
"internalType": "address"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "unitType",
|
||||||
|
"type": "uint8",
|
||||||
|
"indexed": false,
|
||||||
|
"internalType": "uint8"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "nUnits",
|
||||||
|
"type": "uint16",
|
||||||
|
"indexed": false,
|
||||||
|
"internalType": "uint16"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "cost",
|
||||||
|
"type": "uint256",
|
||||||
|
"indexed": false,
|
||||||
|
"internalType": "uint256"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "geldBalance",
|
||||||
|
"type": "uint256",
|
||||||
|
"indexed": false,
|
||||||
|
"internalType": "uint256"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "molochDenierLevel",
|
||||||
|
"type": "uint16",
|
||||||
|
"indexed": false,
|
||||||
|
"internalType": "uint16"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "apprenticeLevel",
|
||||||
|
"type": "uint16",
|
||||||
|
"indexed": false,
|
||||||
|
"internalType": "uint16"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "anointedLevel",
|
||||||
|
"type": "uint16",
|
||||||
|
"indexed": false,
|
||||||
|
"internalType": "uint16"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "championLevel",
|
||||||
|
"type": "uint16",
|
||||||
|
"indexed": false,
|
||||||
|
"internalType": "uint16"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"anonymous": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "error",
|
||||||
|
"name": "ERC20InsufficientAllowance",
|
||||||
|
"inputs": [
|
||||||
|
{ "name": "spender", "type": "address", "internalType": "address" },
|
||||||
|
{ "name": "allowance", "type": "uint256", "internalType": "uint256" },
|
||||||
|
{ "name": "needed", "type": "uint256", "internalType": "uint256" }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "error",
|
||||||
|
"name": "ERC20InsufficientBalance",
|
||||||
|
"inputs": [
|
||||||
|
{ "name": "sender", "type": "address", "internalType": "address" },
|
||||||
|
{ "name": "balance", "type": "uint256", "internalType": "uint256" },
|
||||||
|
{ "name": "needed", "type": "uint256", "internalType": "uint256" }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "error",
|
||||||
|
"name": "ERC20InvalidApprover",
|
||||||
|
"inputs": [
|
||||||
|
{ "name": "approver", "type": "address", "internalType": "address" }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "error",
|
||||||
|
"name": "ERC20InvalidReceiver",
|
||||||
|
"inputs": [
|
||||||
|
{ "name": "receiver", "type": "address", "internalType": "address" }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "error",
|
||||||
|
"name": "ERC20InvalidSender",
|
||||||
|
"inputs": [
|
||||||
|
{ "name": "sender", "type": "address", "internalType": "address" }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "error",
|
||||||
|
"name": "ERC20InvalidSpender",
|
||||||
|
"inputs": [
|
||||||
|
{ "name": "spender", "type": "address", "internalType": "address" }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "error",
|
||||||
|
"name": "OwnableInvalidOwner",
|
||||||
|
"inputs": [
|
||||||
|
{ "name": "owner", "type": "address", "internalType": "address" }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "error",
|
||||||
|
"name": "OwnableUnauthorizedAccount",
|
||||||
|
"inputs": [
|
||||||
|
{ "name": "account", "type": "address", "internalType": "address" }
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
50
docker-compose.yml
Normal file
50
docker-compose.yml
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
version: "3"
|
||||||
|
services:
|
||||||
|
graph-node:
|
||||||
|
image: graphprotocol/graph-node
|
||||||
|
ports:
|
||||||
|
- "8000:8000"
|
||||||
|
- "8001:8001"
|
||||||
|
- "8020:8020"
|
||||||
|
- "8030:8030"
|
||||||
|
- "8040:8040"
|
||||||
|
depends_on:
|
||||||
|
- ipfs
|
||||||
|
- postgres
|
||||||
|
extra_hosts:
|
||||||
|
- host.docker.internal:host-gateway
|
||||||
|
environment:
|
||||||
|
postgres_host: postgres
|
||||||
|
postgres_user: graph-node
|
||||||
|
postgres_pass: let-me-in
|
||||||
|
postgres_db: graph-node
|
||||||
|
ipfs: "ipfs:5001"
|
||||||
|
ethereum: "mainnet:http://host.docker.internal:8545"
|
||||||
|
GRAPH_LOG: info
|
||||||
|
ipfs:
|
||||||
|
image: ipfs/kubo:v0.17.0
|
||||||
|
ports:
|
||||||
|
- "5001:5001"
|
||||||
|
volumes:
|
||||||
|
- ./data/ipfs:/data/ipfs
|
||||||
|
postgres:
|
||||||
|
image: postgres:14
|
||||||
|
ports:
|
||||||
|
- "5432:5432"
|
||||||
|
command:
|
||||||
|
[
|
||||||
|
"postgres",
|
||||||
|
"-cshared_preload_libraries=pg_stat_statements",
|
||||||
|
"-cmax_connections=200",
|
||||||
|
]
|
||||||
|
environment:
|
||||||
|
POSTGRES_USER: graph-node
|
||||||
|
POSTGRES_PASSWORD: let-me-in
|
||||||
|
POSTGRES_DB: graph-node
|
||||||
|
# FIXME: remove this env. var. which we shouldn't need. Introduced by
|
||||||
|
# <https://github.com/graphprotocol/graph-node/pull/3511>, maybe as a
|
||||||
|
# workaround for https://github.com/docker/for-mac/issues/6270?
|
||||||
|
PGDATA: "/var/lib/postgresql/data"
|
||||||
|
POSTGRES_INITDB_ARGS: "-E UTF8 --locale=C"
|
||||||
|
volumes:
|
||||||
|
- ./data/postgres:/var/lib/postgresql/data
|
||||||
8
networks.json
Normal file
8
networks.json
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
"base-sepolia": {
|
||||||
|
"RaidGeld": {
|
||||||
|
"address": "0xC912823B231f5d052eF334a8f8B73F6354909cd0",
|
||||||
|
"startBlock": 17213030
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
18
package.json
Normal file
18
package.json
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
{
|
||||||
|
"name": "slay-the-moloch-base-sepolia",
|
||||||
|
"license": "UNLICENSED",
|
||||||
|
"scripts": {
|
||||||
|
"codegen": "graph codegen",
|
||||||
|
"build": "graph build",
|
||||||
|
"deploy": "graph deploy --node https://api.studio.thegraph.com/deploy/ slay-the-moloch-base-sepolia",
|
||||||
|
"create-local": "graph create --node http://localhost:8020/ slay-the-moloch-base-sepolia",
|
||||||
|
"remove-local": "graph remove --node http://localhost:8020/ slay-the-moloch-base-sepolia",
|
||||||
|
"deploy-local": "graph deploy --node http://localhost:8020/ --ipfs http://localhost:5001 slay-the-moloch-base-sepolia",
|
||||||
|
"test": "graph test"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"@graphprotocol/graph-cli": "0.87.0",
|
||||||
|
"@graphprotocol/graph-ts": "0.32.0"
|
||||||
|
},
|
||||||
|
"devDependencies": { "matchstick-as": "0.5.0" }
|
||||||
|
}
|
||||||
63
schema.graphql
Normal file
63
schema.graphql
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
type Approval @entity(immutable: true) {
|
||||||
|
id: Bytes!
|
||||||
|
owner: Bytes! # address
|
||||||
|
spender: Bytes! # address
|
||||||
|
value: BigInt! # uint256
|
||||||
|
blockNumber: BigInt!
|
||||||
|
blockTimestamp: BigInt!
|
||||||
|
transactionHash: Bytes!
|
||||||
|
}
|
||||||
|
|
||||||
|
type OwnershipTransferred @entity(immutable: true) {
|
||||||
|
id: Bytes!
|
||||||
|
previousOwner: Bytes! # address
|
||||||
|
newOwner: Bytes! # address
|
||||||
|
blockNumber: BigInt!
|
||||||
|
blockTimestamp: BigInt!
|
||||||
|
transactionHash: Bytes!
|
||||||
|
}
|
||||||
|
|
||||||
|
type PlayerRegistered @entity(immutable: true) {
|
||||||
|
id: Bytes!
|
||||||
|
player: Bytes! # address
|
||||||
|
initialGeld: BigInt! # uint256
|
||||||
|
blockNumber: BigInt!
|
||||||
|
blockTimestamp: BigInt!
|
||||||
|
transactionHash: Bytes!
|
||||||
|
}
|
||||||
|
|
||||||
|
type RaidPerformed @entity(immutable: true) {
|
||||||
|
id: Bytes!
|
||||||
|
player: Bytes! # address
|
||||||
|
totalMinted: BigInt! # uint256
|
||||||
|
geldBalance: BigInt! # uint256
|
||||||
|
blockNumber: BigInt!
|
||||||
|
blockTimestamp: BigInt!
|
||||||
|
transactionHash: Bytes!
|
||||||
|
}
|
||||||
|
|
||||||
|
type Transfer @entity(immutable: true) {
|
||||||
|
id: Bytes!
|
||||||
|
from: Bytes! # address
|
||||||
|
to: Bytes! # address
|
||||||
|
value: BigInt! # uint256
|
||||||
|
blockNumber: BigInt!
|
||||||
|
blockTimestamp: BigInt!
|
||||||
|
transactionHash: Bytes!
|
||||||
|
}
|
||||||
|
|
||||||
|
type UnitAdded @entity(immutable: true) {
|
||||||
|
id: Bytes!
|
||||||
|
player: Bytes! # address
|
||||||
|
unitType: Int! # uint8
|
||||||
|
nUnits: Int! # uint16
|
||||||
|
cost: BigInt! # uint256
|
||||||
|
geldBalance: BigInt! # uint256
|
||||||
|
molochDenierLevel: Int! # uint16
|
||||||
|
apprenticeLevel: Int! # uint16
|
||||||
|
anointedLevel: Int! # uint16
|
||||||
|
championLevel: Int! # uint16
|
||||||
|
blockNumber: BigInt!
|
||||||
|
blockTimestamp: BigInt!
|
||||||
|
transactionHash: Bytes!
|
||||||
|
}
|
||||||
112
src/raid-geld.ts
Normal file
112
src/raid-geld.ts
Normal file
@ -0,0 +1,112 @@
|
|||||||
|
import {
|
||||||
|
Approval as ApprovalEvent,
|
||||||
|
OwnershipTransferred as OwnershipTransferredEvent,
|
||||||
|
PlayerRegistered as PlayerRegisteredEvent,
|
||||||
|
RaidPerformed as RaidPerformedEvent,
|
||||||
|
Transfer as TransferEvent,
|
||||||
|
UnitAdded as UnitAddedEvent
|
||||||
|
} from "../generated/RaidGeld/RaidGeld"
|
||||||
|
import {
|
||||||
|
Approval,
|
||||||
|
OwnershipTransferred,
|
||||||
|
PlayerRegistered,
|
||||||
|
RaidPerformed,
|
||||||
|
Transfer,
|
||||||
|
UnitAdded
|
||||||
|
} from "../generated/schema"
|
||||||
|
|
||||||
|
export function handleApproval(event: ApprovalEvent): void {
|
||||||
|
let entity = new Approval(
|
||||||
|
event.transaction.hash.concatI32(event.logIndex.toI32())
|
||||||
|
)
|
||||||
|
entity.owner = event.params.owner
|
||||||
|
entity.spender = event.params.spender
|
||||||
|
entity.value = event.params.value
|
||||||
|
|
||||||
|
entity.blockNumber = event.block.number
|
||||||
|
entity.blockTimestamp = event.block.timestamp
|
||||||
|
entity.transactionHash = event.transaction.hash
|
||||||
|
|
||||||
|
entity.save()
|
||||||
|
}
|
||||||
|
|
||||||
|
export function handleOwnershipTransferred(
|
||||||
|
event: OwnershipTransferredEvent
|
||||||
|
): void {
|
||||||
|
let entity = new OwnershipTransferred(
|
||||||
|
event.transaction.hash.concatI32(event.logIndex.toI32())
|
||||||
|
)
|
||||||
|
entity.previousOwner = event.params.previousOwner
|
||||||
|
entity.newOwner = event.params.newOwner
|
||||||
|
|
||||||
|
entity.blockNumber = event.block.number
|
||||||
|
entity.blockTimestamp = event.block.timestamp
|
||||||
|
entity.transactionHash = event.transaction.hash
|
||||||
|
|
||||||
|
entity.save()
|
||||||
|
}
|
||||||
|
|
||||||
|
export function handlePlayerRegistered(event: PlayerRegisteredEvent): void {
|
||||||
|
let entity = new PlayerRegistered(
|
||||||
|
event.transaction.hash.concatI32(event.logIndex.toI32())
|
||||||
|
)
|
||||||
|
entity.player = event.params.player
|
||||||
|
entity.initialGeld = event.params.initialGeld
|
||||||
|
|
||||||
|
entity.blockNumber = event.block.number
|
||||||
|
entity.blockTimestamp = event.block.timestamp
|
||||||
|
entity.transactionHash = event.transaction.hash
|
||||||
|
|
||||||
|
entity.save()
|
||||||
|
}
|
||||||
|
|
||||||
|
export function handleRaidPerformed(event: RaidPerformedEvent): void {
|
||||||
|
let entity = new RaidPerformed(
|
||||||
|
event.transaction.hash.concatI32(event.logIndex.toI32())
|
||||||
|
)
|
||||||
|
entity.player = event.params.player
|
||||||
|
entity.totalMinted = event.params.totalMinted
|
||||||
|
entity.geldBalance = event.params.geldBalance
|
||||||
|
|
||||||
|
entity.blockNumber = event.block.number
|
||||||
|
entity.blockTimestamp = event.block.timestamp
|
||||||
|
entity.transactionHash = event.transaction.hash
|
||||||
|
|
||||||
|
entity.save()
|
||||||
|
}
|
||||||
|
|
||||||
|
export function handleTransfer(event: TransferEvent): void {
|
||||||
|
let entity = new Transfer(
|
||||||
|
event.transaction.hash.concatI32(event.logIndex.toI32())
|
||||||
|
)
|
||||||
|
entity.from = event.params.from
|
||||||
|
entity.to = event.params.to
|
||||||
|
entity.value = event.params.value
|
||||||
|
|
||||||
|
entity.blockNumber = event.block.number
|
||||||
|
entity.blockTimestamp = event.block.timestamp
|
||||||
|
entity.transactionHash = event.transaction.hash
|
||||||
|
|
||||||
|
entity.save()
|
||||||
|
}
|
||||||
|
|
||||||
|
export function handleUnitAdded(event: UnitAddedEvent): void {
|
||||||
|
let entity = new UnitAdded(
|
||||||
|
event.transaction.hash.concatI32(event.logIndex.toI32())
|
||||||
|
)
|
||||||
|
entity.player = event.params.player
|
||||||
|
entity.unitType = event.params.unitType
|
||||||
|
entity.nUnits = event.params.nUnits
|
||||||
|
entity.cost = event.params.cost
|
||||||
|
entity.geldBalance = event.params.geldBalance
|
||||||
|
entity.molochDenierLevel = event.params.molochDenierLevel
|
||||||
|
entity.apprenticeLevel = event.params.apprenticeLevel
|
||||||
|
entity.anointedLevel = event.params.anointedLevel
|
||||||
|
entity.championLevel = event.params.championLevel
|
||||||
|
|
||||||
|
entity.blockNumber = event.block.number
|
||||||
|
entity.blockTimestamp = event.block.timestamp
|
||||||
|
entity.transactionHash = event.transaction.hash
|
||||||
|
|
||||||
|
entity.save()
|
||||||
|
}
|
||||||
41
subgraph.yaml
Normal file
41
subgraph.yaml
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
specVersion: 1.0.0
|
||||||
|
indexerHints:
|
||||||
|
prune: auto
|
||||||
|
schema:
|
||||||
|
file: ./schema.graphql
|
||||||
|
dataSources:
|
||||||
|
- kind: ethereum
|
||||||
|
name: RaidGeld
|
||||||
|
network: base-sepolia
|
||||||
|
source:
|
||||||
|
address: "0xC912823B231f5d052eF334a8f8B73F6354909cd0"
|
||||||
|
abi: RaidGeld
|
||||||
|
startBlock: 17213030
|
||||||
|
mapping:
|
||||||
|
kind: ethereum/events
|
||||||
|
apiVersion: 0.0.7
|
||||||
|
language: wasm/assemblyscript
|
||||||
|
entities:
|
||||||
|
- Approval
|
||||||
|
- OwnershipTransferred
|
||||||
|
- PlayerRegistered
|
||||||
|
- RaidPerformed
|
||||||
|
- Transfer
|
||||||
|
- UnitAdded
|
||||||
|
abis:
|
||||||
|
- name: RaidGeld
|
||||||
|
file: ./abis/RaidGeld.json
|
||||||
|
eventHandlers:
|
||||||
|
- event: Approval(indexed address,indexed address,uint256)
|
||||||
|
handler: handleApproval
|
||||||
|
- event: OwnershipTransferred(indexed address,indexed address)
|
||||||
|
handler: handleOwnershipTransferred
|
||||||
|
- event: PlayerRegistered(indexed address,uint256)
|
||||||
|
handler: handlePlayerRegistered
|
||||||
|
- event: RaidPerformed(indexed address,uint256,uint256)
|
||||||
|
handler: handleRaidPerformed
|
||||||
|
- event: Transfer(indexed address,indexed address,uint256)
|
||||||
|
handler: handleTransfer
|
||||||
|
- event: UnitAdded(indexed address,uint8,uint16,uint256,uint256,uint16,uint16,uint16,uint16)
|
||||||
|
handler: handleUnitAdded
|
||||||
|
file: ./src/raid-geld.ts
|
||||||
193
tests/raid-geld-utils.ts
Normal file
193
tests/raid-geld-utils.ts
Normal file
@ -0,0 +1,193 @@
|
|||||||
|
import { newMockEvent } from "matchstick-as"
|
||||||
|
import { ethereum, Address, BigInt } from "@graphprotocol/graph-ts"
|
||||||
|
import {
|
||||||
|
Approval,
|
||||||
|
OwnershipTransferred,
|
||||||
|
PlayerRegistered,
|
||||||
|
RaidPerformed,
|
||||||
|
Transfer,
|
||||||
|
UnitAdded
|
||||||
|
} from "../generated/RaidGeld/RaidGeld"
|
||||||
|
|
||||||
|
export function createApprovalEvent(
|
||||||
|
owner: Address,
|
||||||
|
spender: Address,
|
||||||
|
value: BigInt
|
||||||
|
): Approval {
|
||||||
|
let approvalEvent = changetype<Approval>(newMockEvent())
|
||||||
|
|
||||||
|
approvalEvent.parameters = new Array()
|
||||||
|
|
||||||
|
approvalEvent.parameters.push(
|
||||||
|
new ethereum.EventParam("owner", ethereum.Value.fromAddress(owner))
|
||||||
|
)
|
||||||
|
approvalEvent.parameters.push(
|
||||||
|
new ethereum.EventParam("spender", ethereum.Value.fromAddress(spender))
|
||||||
|
)
|
||||||
|
approvalEvent.parameters.push(
|
||||||
|
new ethereum.EventParam("value", ethereum.Value.fromUnsignedBigInt(value))
|
||||||
|
)
|
||||||
|
|
||||||
|
return approvalEvent
|
||||||
|
}
|
||||||
|
|
||||||
|
export function createOwnershipTransferredEvent(
|
||||||
|
previousOwner: Address,
|
||||||
|
newOwner: Address
|
||||||
|
): OwnershipTransferred {
|
||||||
|
let ownershipTransferredEvent = changetype<OwnershipTransferred>(
|
||||||
|
newMockEvent()
|
||||||
|
)
|
||||||
|
|
||||||
|
ownershipTransferredEvent.parameters = new Array()
|
||||||
|
|
||||||
|
ownershipTransferredEvent.parameters.push(
|
||||||
|
new ethereum.EventParam(
|
||||||
|
"previousOwner",
|
||||||
|
ethereum.Value.fromAddress(previousOwner)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
ownershipTransferredEvent.parameters.push(
|
||||||
|
new ethereum.EventParam("newOwner", ethereum.Value.fromAddress(newOwner))
|
||||||
|
)
|
||||||
|
|
||||||
|
return ownershipTransferredEvent
|
||||||
|
}
|
||||||
|
|
||||||
|
export function createPlayerRegisteredEvent(
|
||||||
|
player: Address,
|
||||||
|
initialGeld: BigInt
|
||||||
|
): PlayerRegistered {
|
||||||
|
let playerRegisteredEvent = changetype<PlayerRegistered>(newMockEvent())
|
||||||
|
|
||||||
|
playerRegisteredEvent.parameters = new Array()
|
||||||
|
|
||||||
|
playerRegisteredEvent.parameters.push(
|
||||||
|
new ethereum.EventParam("player", ethereum.Value.fromAddress(player))
|
||||||
|
)
|
||||||
|
playerRegisteredEvent.parameters.push(
|
||||||
|
new ethereum.EventParam(
|
||||||
|
"initialGeld",
|
||||||
|
ethereum.Value.fromUnsignedBigInt(initialGeld)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
return playerRegisteredEvent
|
||||||
|
}
|
||||||
|
|
||||||
|
export function createRaidPerformedEvent(
|
||||||
|
player: Address,
|
||||||
|
totalMinted: BigInt,
|
||||||
|
geldBalance: BigInt
|
||||||
|
): RaidPerformed {
|
||||||
|
let raidPerformedEvent = changetype<RaidPerformed>(newMockEvent())
|
||||||
|
|
||||||
|
raidPerformedEvent.parameters = new Array()
|
||||||
|
|
||||||
|
raidPerformedEvent.parameters.push(
|
||||||
|
new ethereum.EventParam("player", ethereum.Value.fromAddress(player))
|
||||||
|
)
|
||||||
|
raidPerformedEvent.parameters.push(
|
||||||
|
new ethereum.EventParam(
|
||||||
|
"totalMinted",
|
||||||
|
ethereum.Value.fromUnsignedBigInt(totalMinted)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
raidPerformedEvent.parameters.push(
|
||||||
|
new ethereum.EventParam(
|
||||||
|
"geldBalance",
|
||||||
|
ethereum.Value.fromUnsignedBigInt(geldBalance)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
return raidPerformedEvent
|
||||||
|
}
|
||||||
|
|
||||||
|
export function createTransferEvent(
|
||||||
|
from: Address,
|
||||||
|
to: Address,
|
||||||
|
value: BigInt
|
||||||
|
): Transfer {
|
||||||
|
let transferEvent = changetype<Transfer>(newMockEvent())
|
||||||
|
|
||||||
|
transferEvent.parameters = new Array()
|
||||||
|
|
||||||
|
transferEvent.parameters.push(
|
||||||
|
new ethereum.EventParam("from", ethereum.Value.fromAddress(from))
|
||||||
|
)
|
||||||
|
transferEvent.parameters.push(
|
||||||
|
new ethereum.EventParam("to", ethereum.Value.fromAddress(to))
|
||||||
|
)
|
||||||
|
transferEvent.parameters.push(
|
||||||
|
new ethereum.EventParam("value", ethereum.Value.fromUnsignedBigInt(value))
|
||||||
|
)
|
||||||
|
|
||||||
|
return transferEvent
|
||||||
|
}
|
||||||
|
|
||||||
|
export function createUnitAddedEvent(
|
||||||
|
player: Address,
|
||||||
|
unitType: i32,
|
||||||
|
nUnits: i32,
|
||||||
|
cost: BigInt,
|
||||||
|
geldBalance: BigInt,
|
||||||
|
molochDenierLevel: i32,
|
||||||
|
apprenticeLevel: i32,
|
||||||
|
anointedLevel: i32,
|
||||||
|
championLevel: i32
|
||||||
|
): UnitAdded {
|
||||||
|
let unitAddedEvent = changetype<UnitAdded>(newMockEvent())
|
||||||
|
|
||||||
|
unitAddedEvent.parameters = new Array()
|
||||||
|
|
||||||
|
unitAddedEvent.parameters.push(
|
||||||
|
new ethereum.EventParam("player", ethereum.Value.fromAddress(player))
|
||||||
|
)
|
||||||
|
unitAddedEvent.parameters.push(
|
||||||
|
new ethereum.EventParam(
|
||||||
|
"unitType",
|
||||||
|
ethereum.Value.fromUnsignedBigInt(BigInt.fromI32(unitType))
|
||||||
|
)
|
||||||
|
)
|
||||||
|
unitAddedEvent.parameters.push(
|
||||||
|
new ethereum.EventParam(
|
||||||
|
"nUnits",
|
||||||
|
ethereum.Value.fromUnsignedBigInt(BigInt.fromI32(nUnits))
|
||||||
|
)
|
||||||
|
)
|
||||||
|
unitAddedEvent.parameters.push(
|
||||||
|
new ethereum.EventParam("cost", ethereum.Value.fromUnsignedBigInt(cost))
|
||||||
|
)
|
||||||
|
unitAddedEvent.parameters.push(
|
||||||
|
new ethereum.EventParam(
|
||||||
|
"geldBalance",
|
||||||
|
ethereum.Value.fromUnsignedBigInt(geldBalance)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
unitAddedEvent.parameters.push(
|
||||||
|
new ethereum.EventParam(
|
||||||
|
"molochDenierLevel",
|
||||||
|
ethereum.Value.fromUnsignedBigInt(BigInt.fromI32(molochDenierLevel))
|
||||||
|
)
|
||||||
|
)
|
||||||
|
unitAddedEvent.parameters.push(
|
||||||
|
new ethereum.EventParam(
|
||||||
|
"apprenticeLevel",
|
||||||
|
ethereum.Value.fromUnsignedBigInt(BigInt.fromI32(apprenticeLevel))
|
||||||
|
)
|
||||||
|
)
|
||||||
|
unitAddedEvent.parameters.push(
|
||||||
|
new ethereum.EventParam(
|
||||||
|
"anointedLevel",
|
||||||
|
ethereum.Value.fromUnsignedBigInt(BigInt.fromI32(anointedLevel))
|
||||||
|
)
|
||||||
|
)
|
||||||
|
unitAddedEvent.parameters.push(
|
||||||
|
new ethereum.EventParam(
|
||||||
|
"championLevel",
|
||||||
|
ethereum.Value.fromUnsignedBigInt(BigInt.fromI32(championLevel))
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
return unitAddedEvent
|
||||||
|
}
|
||||||
62
tests/raid-geld.test.ts
Normal file
62
tests/raid-geld.test.ts
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
import {
|
||||||
|
assert,
|
||||||
|
describe,
|
||||||
|
test,
|
||||||
|
clearStore,
|
||||||
|
beforeAll,
|
||||||
|
afterAll
|
||||||
|
} from "matchstick-as/assembly/index"
|
||||||
|
import { Address, BigInt } from "@graphprotocol/graph-ts"
|
||||||
|
import { Approval } from "../generated/schema"
|
||||||
|
import { Approval as ApprovalEvent } from "../generated/RaidGeld/RaidGeld"
|
||||||
|
import { handleApproval } from "../src/raid-geld"
|
||||||
|
import { createApprovalEvent } from "./raid-geld-utils"
|
||||||
|
|
||||||
|
// Tests structure (matchstick-as >=0.5.0)
|
||||||
|
// https://thegraph.com/docs/en/developer/matchstick/#tests-structure-0-5-0
|
||||||
|
|
||||||
|
describe("Describe entity assertions", () => {
|
||||||
|
beforeAll(() => {
|
||||||
|
let owner = Address.fromString("0x0000000000000000000000000000000000000001")
|
||||||
|
let spender = Address.fromString(
|
||||||
|
"0x0000000000000000000000000000000000000001"
|
||||||
|
)
|
||||||
|
let value = BigInt.fromI32(234)
|
||||||
|
let newApprovalEvent = createApprovalEvent(owner, spender, value)
|
||||||
|
handleApproval(newApprovalEvent)
|
||||||
|
})
|
||||||
|
|
||||||
|
afterAll(() => {
|
||||||
|
clearStore()
|
||||||
|
})
|
||||||
|
|
||||||
|
// For more test scenarios, see:
|
||||||
|
// https://thegraph.com/docs/en/developer/matchstick/#write-a-unit-test
|
||||||
|
|
||||||
|
test("Approval created and stored", () => {
|
||||||
|
assert.entityCount("Approval", 1)
|
||||||
|
|
||||||
|
// 0xa16081f360e3847006db660bae1c6d1b2e17ec2a is the default address used in newMockEvent() function
|
||||||
|
assert.fieldEquals(
|
||||||
|
"Approval",
|
||||||
|
"0xa16081f360e3847006db660bae1c6d1b2e17ec2a-1",
|
||||||
|
"owner",
|
||||||
|
"0x0000000000000000000000000000000000000001"
|
||||||
|
)
|
||||||
|
assert.fieldEquals(
|
||||||
|
"Approval",
|
||||||
|
"0xa16081f360e3847006db660bae1c6d1b2e17ec2a-1",
|
||||||
|
"spender",
|
||||||
|
"0x0000000000000000000000000000000000000001"
|
||||||
|
)
|
||||||
|
assert.fieldEquals(
|
||||||
|
"Approval",
|
||||||
|
"0xa16081f360e3847006db660bae1c6d1b2e17ec2a-1",
|
||||||
|
"value",
|
||||||
|
"234"
|
||||||
|
)
|
||||||
|
|
||||||
|
// More assert options:
|
||||||
|
// https://thegraph.com/docs/en/developer/matchstick/#asserts
|
||||||
|
})
|
||||||
|
})
|
||||||
4
tsconfig.json
Normal file
4
tsconfig.json
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"extends": "@graphprotocol/graph-ts/types/tsconfig.base.json",
|
||||||
|
"include": ["src", "tests"]
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue
Block a user