Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import time
- from web3 import Web3
- from web3.logs import STRICT, IGNORE, DISCARD, WARN
- CONTRACT_ADDRESS = '0x5100bd31b822371108a0f63dcfb6594b9919eaf4'
- ABI = """
- [{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},
- {"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"questTypeId","type":"uint256"},{"indexed":true,"internalType":"address","name":"questAddress","type":"address"},{"components":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"contract IQuest","name":"quest","type":"address"},{"internalType":"uint8","name":"status","type":"uint8"},{"internalType":"uint8","name":"minHeroes","type":"uint8"},{"internalType":"uint8","name":"maxHeroes","type":"uint8"},{"internalType":"uint16","name":"requiredStamina","type":"uint16"},{"internalType":"uint256","name":"level","type":"uint256"},{"internalType":"uint8","name":"maxAttempts","type":"uint8"}],"indexed":false,"internalType":"struct IQuestTypes.QuestType","name":"questType","type":"tuple"}],"name":"QuestAdded","type":"event"},
- {"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"questId","type":"uint256"},{"indexed":true,"internalType":"address","name":"player","type":"address"},{"indexed":true,"internalType":"uint256","name":"heroId","type":"uint256"},{"components":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"contract IQuest","name":"quest","type":"address"},{"internalType":"uint256[]","name":"heroes","type":"uint256[]"},{"internalType":"address","name":"player","type":"address"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"startBlock","type":"uint256"},{"internalType":"uint256","name":"completeAtTime","type":"uint256"},{"internalType":"uint8","name":"attempts","type":"uint8"},{"internalType":"uint8","name":"status","type":"uint8"}],"indexed":false,"internalType":"struct IQuestTypes.Quest","name":"quest","type":"tuple"}],"name":"QuestCanceled","type":"event"},
- {"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"questId","type":"uint256"},{"indexed":true,"internalType":"address","name":"player","type":"address"},{"indexed":true,"internalType":"uint256","name":"heroId","type":"uint256"},{"components":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"contract IQuest","name":"quest","type":"address"},{"internalType":"uint256[]","name":"heroes","type":"uint256[]"},{"internalType":"address","name":"player","type":"address"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"startBlock","type":"uint256"},{"internalType":"uint256","name":"completeAtTime","type":"uint256"},{"internalType":"uint8","name":"attempts","type":"uint8"},{"internalType":"uint8","name":"status","type":"uint8"}],"indexed":false,"internalType":"struct IQuestTypes.Quest","name":"quest","type":"tuple"}],"name":"QuestCompleted","type":"event"},
- {"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"questId","type":"uint256"},{"indexed":true,"internalType":"address","name":"player","type":"address"},{"indexed":false,"internalType":"uint256","name":"heroId","type":"uint256"},{"indexed":false,"internalType":"address","name":"rewardItem","type":"address"},{"indexed":false,"internalType":"uint256","name":"itemQuantity","type":"uint256"}],"name":"QuestReward","type":"event"},
- {"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"questId","type":"uint256"},{"indexed":true,"internalType":"address","name":"player","type":"address"},{"indexed":false,"internalType":"uint256","name":"heroId","type":"uint256"},{"indexed":false,"internalType":"uint8","name":"profession","type":"uint8"},{"indexed":false,"internalType":"uint16","name":"skillUp","type":"uint16"}],"name":"QuestSkillUp","type":"event"},
- {"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"questId","type":"uint256"},{"indexed":true,"internalType":"address","name":"player","type":"address"},{"indexed":false,"internalType":"uint256","name":"heroId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"staminaFullAt","type":"uint256"},{"indexed":false,"internalType":"uint16","name":"staminaSpent","type":"uint16"}],"name":"QuestStaminaSpent","type":"event"},
- {"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"questId","type":"uint256"},{"indexed":true,"internalType":"address","name":"player","type":"address"},{"indexed":true,"internalType":"uint256","name":"heroId","type":"uint256"},{"components":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"contract IQuest","name":"quest","type":"address"},{"internalType":"uint256[]","name":"heroes","type":"uint256[]"},{"internalType":"address","name":"player","type":"address"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"startBlock","type":"uint256"},{"internalType":"uint256","name":"completeAtTime","type":"uint256"},{"internalType":"uint8","name":"attempts","type":"uint8"},{"internalType":"uint8","name":"status","type":"uint8"}],"indexed":false,"internalType":"struct IQuestTypes.Quest","name":"quest","type":"tuple"}],"name":"QuestStarted","type":"event"},
- {"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"questTypeId","type":"uint256"},{"indexed":true,"internalType":"address","name":"questAddress","type":"address"},{"components":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"contract IQuest","name":"quest","type":"address"},{"internalType":"uint8","name":"status","type":"uint8"},{"internalType":"uint8","name":"minHeroes","type":"uint8"},{"internalType":"uint8","name":"maxHeroes","type":"uint8"},{"internalType":"uint16","name":"requiredStamina","type":"uint16"},{"internalType":"uint256","name":"level","type":"uint256"},{"internalType":"uint8","name":"maxAttempts","type":"uint8"}],"indexed":false,"internalType":"struct IQuestTypes.QuestType","name":"questType","type":"tuple"}],"name":"QuestUpdated","type":"event"},
- {"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"questId","type":"uint256"},{"indexed":true,"internalType":"address","name":"player","type":"address"},{"indexed":false,"internalType":"uint256","name":"heroId","type":"uint256"},{"indexed":false,"internalType":"uint64","name":"xpEarned","type":"uint64"}],"name":"QuestXP","type":"event"},
- {"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},
- {"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},
- {"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},
- {"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},
- {"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},
- {"inputs":[],"name":"MODERATOR_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},
- {"inputs":[{"internalType":"address","name":"_questAddress","type":"address"}],"name":"addQuestType","outputs":[],"stateMutability":"nonpayable","type":"function"},
- {"inputs":[{"internalType":"uint256","name":"_heroId","type":"uint256"}],"name":"cancelQuest","outputs":[],"stateMutability":"nonpayable","type":"function"},
- {"inputs":[{"internalType":"uint256","name":"_heroId","type":"uint256"}],"name":"completeQuest","outputs":[],"stateMutability":"nonpayable","type":"function"},
- {"inputs":[{"internalType":"uint256","name":"randomNumber","type":"uint256"},{"internalType":"uint256","name":"digits","type":"uint256"},{"internalType":"uint256","name":"offset","type":"uint256"}],"name":"extractNumber","outputs":[{"internalType":"uint256","name":"result","type":"uint256"}],"stateMutability":"pure","type":"function"},
- {"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"getActiveQuests","outputs":[{"components":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"contract IQuest","name":"quest","type":"address"},{"internalType":"uint256[]","name":"heroes","type":"uint256[]"},{"internalType":"address","name":"player","type":"address"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"startBlock","type":"uint256"},{"internalType":"uint256","name":"completeAtTime","type":"uint256"},{"internalType":"uint8","name":"attempts","type":"uint8"},{"internalType":"uint8","name":"status","type":"uint8"}],"internalType":"struct IQuestTypes.Quest[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},
- {"inputs":[{"internalType":"uint256","name":"_heroId","type":"uint256"}],"name":"getCurrentStamina","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},
- {"inputs":[{"internalType":"uint256","name":"_genes","type":"uint256"},{"internalType":"uint8","name":"_pos","type":"uint8"},{"internalType":"uint8","name":"_val","type":"uint8"}],"name":"getGeneBonus","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"nonpayable","type":"function"},
- {"inputs":[{"internalType":"uint256","name":"_heroId","type":"uint256"}],"name":"getHeroQuest","outputs":[{"components":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"contract IQuest","name":"quest","type":"address"},{"internalType":"uint256[]","name":"heroes","type":"uint256[]"},{"internalType":"address","name":"player","type":"address"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"startBlock","type":"uint256"},{"internalType":"uint256","name":"completeAtTime","type":"uint256"},{"internalType":"uint8","name":"attempts","type":"uint8"},{"internalType":"uint8","name":"status","type":"uint8"}],"internalType":"struct IQuestTypes.Quest","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},
- {"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"getQuest","outputs":[{"components":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"contract IQuest","name":"quest","type":"address"},{"internalType":"uint256[]","name":"heroes","type":"uint256[]"},{"internalType":"address","name":"player","type":"address"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"startBlock","type":"uint256"},{"internalType":"uint256","name":"completeAtTime","type":"uint256"},{"internalType":"uint8","name":"attempts","type":"uint8"},{"internalType":"uint8","name":"status","type":"uint8"}],"internalType":"struct IQuestTypes.Quest","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},
- {"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},
- {"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},
- {"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},
- {"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"heroToQuest","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},
- {"inputs":[{"internalType":"address","name":"_heroCoreAddress","type":"address"},{"internalType":"address","name":"_statScienceAddress","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},
- {"inputs":[{"components":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"contract IQuest","name":"quest","type":"address"},{"internalType":"uint256[]","name":"heroes","type":"uint256[]"},{"internalType":"address","name":"player","type":"address"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"startBlock","type":"uint256"},{"internalType":"uint256","name":"completeAtTime","type":"uint256"},{"internalType":"uint8","name":"attempts","type":"uint8"},{"internalType":"uint8","name":"status","type":"uint8"}],"internalType":"struct IQuestTypes.Quest","name":"_quest","type":"tuple"},{"internalType":"uint256","name":"_heroId","type":"uint256"},{"components":[{"internalType":"contract IInventoryItem","name":"item","type":"address"},{"internalType":"int64","name":"expBonus","type":"int64"},{"internalType":"int64","name":"skillUpChance","type":"int64"},{"internalType":"int64","name":"smallSkillUpMod","type":"int64"},{"internalType":"int64","name":"mediumSkillUpMod","type":"int64"},{"internalType":"int64","name":"largeSkillUpMod","type":"int64"},{"internalType":"int64","name":"baseChance","type":"int64"},{"internalType":"int64","name":"skillMod","type":"int64"},{"internalType":"int64","name":"statMod","type":"int64"},{"internalType":"int64","name":"luckMod","type":"int64"}],"internalType":"struct IQuestTypes.RewardItem","name":"_reward","type":"tuple"},{"internalType":"uint256","name":"_quantity","type":"uint256"}],"name":"logReward","outputs":[],"stateMutability":"nonpayable","type":"function"},
- {"inputs":[{"components":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"contract IQuest","name":"quest","type":"address"},{"internalType":"uint256[]","name":"heroes","type":"uint256[]"},{"internalType":"address","name":"player","type":"address"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"startBlock","type":"uint256"},{"internalType":"uint256","name":"completeAtTime","type":"uint256"},{"internalType":"uint8","name":"attempts","type":"uint8"},{"internalType":"uint8","name":"status","type":"uint8"}],"internalType":"struct IQuestTypes.Quest","name":"_quest","type":"tuple"},{"internalType":"uint256","name":"_heroId","type":"uint256"},{"internalType":"uint8","name":"_profession","type":"uint8"},{"internalType":"uint16","name":"_skillUp","type":"uint16"}],"name":"logSkillUp","outputs":[],"stateMutability":"nonpayable","type":"function"},
- {"inputs":[{"components":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"contract IQuest","name":"quest","type":"address"},{"internalType":"uint256[]","name":"heroes","type":"uint256[]"},{"internalType":"address","name":"player","type":"address"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"startBlock","type":"uint256"},{"internalType":"uint256","name":"completeAtTime","type":"uint256"},{"internalType":"uint8","name":"attempts","type":"uint8"},{"internalType":"uint8","name":"status","type":"uint8"}],"internalType":"struct IQuestTypes.Quest","name":"_quest","type":"tuple"},{"internalType":"uint256","name":"_heroId","type":"uint256"},{"internalType":"uint64","name":"_xpEarned","type":"uint64"}],"name":"logXp","outputs":[],"stateMutability":"nonpayable","type":"function"},
- {"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},
- {"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},
- {"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"profileActiveQuests","outputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"contract IQuest","name":"quest","type":"address"},{"internalType":"address","name":"player","type":"address"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"startBlock","type":"uint256"},{"internalType":"uint256","name":"completeAtTime","type":"uint256"},{"internalType":"uint8","name":"attempts","type":"uint8"},{"internalType":"uint8","name":"status","type":"uint8"}],"stateMutability":"view","type":"function"},
- {"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"questAddressToType","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},
- {"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},
- {"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},
- {"inputs":[{"internalType":"uint256","name":"_timePerStamina","type":"uint256"}],"name":"setTimePerStamina","outputs":[],"stateMutability":"nonpayable","type":"function"},
- {"inputs":[{"internalType":"uint256[]","name":"_heroIds","type":"uint256[]"},{"internalType":"address","name":"_questAddress","type":"address"},{"internalType":"uint8","name":"_attempts","type":"uint8"}],"name":"startQuest","outputs":[],"stateMutability":"nonpayable","type":"function"},
- {"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},
- {"inputs":[],"name":"timePerStamina","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},
- {"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},
- {"inputs":[{"components":[{"internalType":"uint256","name":"id","type":"uint256"},{"components":[{"internalType":"uint256","name":"summonedTime","type":"uint256"},{"internalType":"uint256","name":"nextSummonTime","type":"uint256"},{"internalType":"uint256","name":"summonerId","type":"uint256"},{"internalType":"uint256","name":"assistantId","type":"uint256"},{"internalType":"uint32","name":"summons","type":"uint32"},{"internalType":"uint32","name":"maxSummons","type":"uint32"}],"internalType":"struct IHeroTypes.SummoningInfo","name":"summoningInfo","type":"tuple"},{"components":[{"internalType":"uint256","name":"statGenes","type":"uint256"},{"internalType":"uint256","name":"visualGenes","type":"uint256"},{"internalType":"enum IHeroTypes.Rarity","name":"rarity","type":"uint8"},{"internalType":"bool","name":"shiny","type":"bool"},{"internalType":"uint16","name":"generation","type":"uint16"},{"internalType":"uint32","name":"firstName","type":"uint32"},{"internalType":"uint32","name":"lastName","type":"uint32"},{"internalType":"uint8","name":"shinyStyle","type":"uint8"},{"internalType":"uint8","name":"class","type":"uint8"},{"internalType":"uint8","name":"subClass","type":"uint8"}],"internalType":"struct IHeroTypes.HeroInfo","name":"info","type":"tuple"},{"components":[{"internalType":"uint256","name":"staminaFullAt","type":"uint256"},{"internalType":"uint256","name":"hpFullAt","type":"uint256"},{"internalType":"uint256","name":"mpFullAt","type":"uint256"},{"internalType":"uint16","name":"level","type":"uint16"},{"internalType":"uint64","name":"xp","type":"uint64"},{"internalType":"address","name":"currentQuest","type":"address"},{"internalType":"uint8","name":"sp","type":"uint8"},{"internalType":"enum IHeroTypes.HeroStatus","name":"status","type":"uint8"}],"internalType":"struct IHeroTypes.HeroState","name":"state","type":"tuple"},{"components":[{"internalType":"uint16","name":"strength","type":"uint16"},{"internalType":"uint16","name":"intelligence","type":"uint16"},{"internalType":"uint16","name":"wisdom","type":"uint16"},{"internalType":"uint16","name":"luck","type":"uint16"},{"internalType":"uint16","name":"agility","type":"uint16"},{"internalType":"uint16","name":"vitality","type":"uint16"},{"internalType":"uint16","name":"endurance","type":"uint16"},{"internalType":"uint16","name":"dexterity","type":"uint16"},{"internalType":"uint16","name":"hp","type":"uint16"},{"internalType":"uint16","name":"mp","type":"uint16"},{"internalType":"uint16","name":"stamina","type":"uint16"}],"internalType":"struct IHeroTypes.HeroStats","name":"stats","type":"tuple"},{"components":[{"internalType":"uint16","name":"strength","type":"uint16"},{"internalType":"uint16","name":"intelligence","type":"uint16"},{"internalType":"uint16","name":"wisdom","type":"uint16"},{"internalType":"uint16","name":"luck","type":"uint16"},{"internalType":"uint16","name":"agility","type":"uint16"},{"internalType":"uint16","name":"vitality","type":"uint16"},{"internalType":"uint16","name":"endurance","type":"uint16"},{"internalType":"uint16","name":"dexterity","type":"uint16"},{"internalType":"uint16","name":"hpSm","type":"uint16"},{"internalType":"uint16","name":"hpRg","type":"uint16"},{"internalType":"uint16","name":"hpLg","type":"uint16"},{"internalType":"uint16","name":"mpSm","type":"uint16"},{"internalType":"uint16","name":"mpRg","type":"uint16"},{"internalType":"uint16","name":"mpLg","type":"uint16"}],"internalType":"struct IHeroTypes.HeroStatGrowth","name":"primaryStatGrowth","type":"tuple"},{"components":[{"internalType":"uint16","name":"strength","type":"uint16"},{"internalType":"uint16","name":"intelligence","type":"uint16"},{"internalType":"uint16","name":"wisdom","type":"uint16"},{"internalType":"uint16","name":"luck","type":"uint16"},{"internalType":"uint16","name":"agility","type":"uint16"},{"internalType":"uint16","name":"vitality","type":"uint16"},{"internalType":"uint16","name":"endurance","type":"uint16"},{"internalType":"uint16","name":"dexterity","type":"uint16"},{"internalType":"uint16","name":"hpSm","type":"uint16"},{"internalType":"uint16","name":"hpRg","type":"uint16"},{"internalType":"uint16","name":"hpLg","type":"uint16"},{"internalType":"uint16","name":"mpSm","type":"uint16"},{"internalType":"uint16","name":"mpRg","type":"uint16"},{"internalType":"uint16","name":"mpLg","type":"uint16"}],"internalType":"struct IHeroTypes.HeroStatGrowth","name":"secondaryStatGrowth","type":"tuple"},{"components":[{"internalType":"uint16","name":"mining","type":"uint16"},{"internalType":"uint16","name":"gardening","type":"uint16"},{"internalType":"uint16","name":"foraging","type":"uint16"},{"internalType":"uint16","name":"fishing","type":"uint16"}],"internalType":"struct IHeroTypes.HeroProfessions","name":"professions","type":"tuple"}],"internalType":"struct IHeroTypes.Hero","name":"_hero","type":"tuple"}],"name":"updateHero","outputs":[],"stateMutability":"nonpayable","type":"function"},
- {"inputs":[{"internalType":"address","name":"_questAddress","type":"address"},{"internalType":"uint8","name":"_status","type":"uint8"}],"name":"updateQuestType","outputs":[],"stateMutability":"nonpayable","type":"function"},
- {"inputs":[{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"vrf","outputs":[{"internalType":"bytes32","name":"result","type":"bytes32"}],"stateMutability":"view","type":"function"}]
- """
- PROFESSION_BY_ADDRESS = {
- "0xE259e8386d38467f0E7fFEdB69c3c9C935dfaeFc":"fishing", "0x3132c76acF2217646fB8391918D28a16bD8A8Ef4":"foraging", "0x0548214A0760a897aF53656F4b69DbAD688D8f29":"wishing_well"
- }
- PROFESSION = {
- "fishing":"0xE259e8386d38467f0E7fFEdB69c3c9C935dfaeFc", "foraging":"0x3132c76acF2217646fB8391918D28a16bD8A8Ef4", "mining":None,
- "gardening":None, "wishing_well":"0x0548214A0760a897aF53656F4b69DbAD688D8f29"
- }
- FISHING = "0xE259e8386d38467f0E7fFEdB69c3c9C935dfaeFc"
- FORAGING = "0x3132c76acF2217646fB8391918D28a16bD8A8Ef4"
- GARDENING = None
- MINING = None
- WISHING_WELL = '0x0548214A0760a897aF53656F4b69DbAD688D8f29'
- ITEMS = {
- '0x6e1bC01Cc52D165B357c42042cF608159A2B81c1':'AMBERTAFFY',
- '0x78aED65A2Cc40C7D8B0dF1554Da60b38AD351432':'BLOATER',
- '0x68EA4640C5ce6cC0c9A1F17B7b882cB1cBEACcd7':'DARKWEED',
- '0x24eA0D436d3c2602fbfEfBe6a16bBc304C963D04':'GAIASTEARS',
- '0x600541aD6Ce0a8b5dae68f086D46361534D20E80':'GOLDVEIN',
- '0xe4Cfee5bF05CeF3418DA74CFB89727D8E4fEE9FA':'IRONSCALE',
- '0x8Bf4A0888451C6b5412bCaD3D9dA3DCf5c6CA7BE':'LANTERNEYE',
- '0x9678518e04Fe02FB30b55e2D0e554E26306d0892':'PET_EGG_BLUE',
- '0x95d02C1Dc58F05A015275eB49E107137D9Ee81Dc':'PET_EGG_GREY',
- '0x043F9bd9Bb17dFc90dE3D416422695Dd8fa44486':'RAGWEED',
- '0xc5891912718ccFFcC9732D1942cCD98d5934C2e1':'REDGILL',
- '0x094243DfABfBB3E6F71814618ace53f07362a84c':'REDLEAF',
- '0x6B10Ad6E3b99090De20bF9f95F960addC35eF3E2':'ROCKROOT',
- '0xb80A07e13240C31ec6dc0B5D72Af79d461dA3A70':'SAILFISH',
- '0x372CaF681353758f985597A35266f7b330a2A44D':'SHIMMERSCALE',
- '0x66F5BfD910cd83d3766c4B39d13730C911b2D286':'SHVAS_RUNE',
- '0x2493cfDAcc0f9c07240B5B1C4BE08c62b8eEff69':'SILVERFIN',
- '0xCdfFe898E687E941b124dfB7d24983266492eF1d':'SWIFT_THISTLE'
- }
- PROFESSION_NUMBER = {1:'???', 2:'???', 3:'???', 4:'fishing', 5:'???', 6:'foraging'}
- def start_quest(hero_ids, attempts, _questname, _questAddress, private_key, nonce, gas_price_gwei, tx_timeout_seconds, rpc_address, logger, maxGasUsed):
- w3 = Web3(Web3.HTTPProvider(rpc_address))
- account = w3.eth.account.privateKeyToAccount(private_key)
- w3.eth.default_account = account.address
- contract_address = Web3.toChecksumAddress(CONTRACT_ADDRESS)
- contract = w3.eth.contract(contract_address, abi=ABI)
- quest_address = Web3.toChecksumAddress(_questAddress)
- logger.info(f'Starting {_questname} quest with heroes {str(hero_id)}')
- tx = contract.functions.startQuest(hero_ids, quest_address, attempts).buildTransaction(
- {'gasPrice': w3.toWei(gas_price_gwei, 'gwei'), 'nonce': nonce, 'gas': maxGasUsed})
- input = tx["data"]
- func_obj, func_params = contract.decode_function_input(input)
- logger.info("Signing transaction")
- signed_tx = w3.eth.account.sign_transaction(tx, private_key=private_key)
- prettier_tx = extension.Pretty_tx(tx, w3)
- logger.info("Sending transaction " + str(prettier_tx))
- ret = w3.eth.send_raw_transaction(signed_tx.rawTransaction)
- logger.info("Transaction successfully sent !")
- logger.info(
- "Waiting for transaction https://explorer.harmony.one/tx/" + str(signed_tx.hash.hex()) + " to be mined")
- tx_receipt = w3.eth.wait_for_transaction_receipt(transaction_hash=signed_tx.hash, timeout=tx_timeout_seconds,
- poll_latency=3)
- logger.info("Transaction mined !")
- Pretty_tx_receipt = extension.Pretty_tx_receipt(tx_receipt, w3)
- logger.info(str(Pretty_tx_receipt))
- # return Pretty_tx_receipt
- return tx_receipt
- def complete_quest(hero_id, private_key, nonce, gas_price_gwei, tx_timeout_seconds, rpc_address, logger, maxGasUsed):
- w3 = Web3(Web3.HTTPProvider(rpc_address))
- account = w3.eth.account.privateKeyToAccount(private_key)
- w3.eth.default_account = account.address
- contract_address = Web3.toChecksumAddress(CONTRACT_ADDRESS)
- contract = w3.eth.contract(contract_address, abi=ABI)
- logger.info("Completing quest with hero id " + str(hero_id))
- tx = contract.functions.completeQuest(hero_id).buildTransaction(
- {'gasPrice': w3.toWei(gas_price_gwei, 'gwei'), 'nonce': nonce, 'gas': maxGasUsed})
- # {'gasPrice': w3.toWei(gas_price_gwei, 'gwei'), 'nonce': nonce})
- logger.info("Signing transaction")
- signed_tx = w3.eth.account.sign_transaction(tx, private_key=private_key)
- prettier_tx = extension.Pretty_tx(tx, w3)
- logger.info("Sending transaction " + str(prettier_tx))
- ret = w3.eth.send_raw_transaction(signed_tx.rawTransaction)
- logger.info("Transaction successfully sent !")
- logger.info(
- "Waiting for transaction https://explorer.harmony.one/tx/" + str(signed_tx.hash.hex()) + " to be mined")
- tx_receipt = w3.eth.wait_for_transaction_receipt(transaction_hash=signed_tx.hash, timeout=tx_timeout_seconds,
- poll_latency=3)
- logger.info("Transaction mined !")
- return tx_receipt
- def get_current_stamina(hero_id, rpc_address):
- w3 = Web3(Web3.HTTPProvider(rpc_address))
- contract_address = Web3.toChecksumAddress(CONTRACT_ADDRESS)
- contract = w3.eth.contract(contract_address, abi=ABI)
- result = contract.functions.getCurrentStamina(hero_id).call()
- return result
- def parse_quest_Started(tx_receipt, rpc_address):
- w3 = Web3(Web3.HTTPProvider(rpc_address))
- contract_address = Web3.toChecksumAddress(CONTRACT_ADDRESS)
- contract = w3.eth.contract(contract_address, abi=ABI)
- #func_obj, func_params = contract.decode_function_input(tx_receipt)
- quest_result = {}
- tuple_index = 0
- result = contract.events.QuestAdded().processReceipt(tx_receipt)
- quest_result["questId"] = result[tuple_index][0]
- quest_result["player"] = result[tuple_index][1]
- quest_result["heroId"] = result[tuple_index][1]
- tuple_index = tuple_index + 1
- quest_info ={}
- quest_info["id"] = result[tuple_index][0]
- quest_info["quest"] = result[tuple_index][1]
- quest_info["heroes"] = result[tuple_index][2]
- quest_info["player"] = result[tuple_index][3]
- quest_info["startTime"] = result[tuple_index][4]
- quest_info["startBlock"] = result[tuple_index][5]
- quest_info["completeAtTime"] = result[tuple_index][6]
- quest_info["attempts"] = result[tuple_index][7]
- quest_info["status"] = result[tuple_index][8]
- quest_result["quest_info"] = quest_info
- return quest_result
- def parse_complete_quest_receipt(tx_receipt, rpc_address):
- w3 = Web3(Web3.HTTPProvider(rpc_address))
- contract_address = Web3.toChecksumAddress(CONTRACT_ADDRESS)
- contract = w3.eth.contract(contract_address, abi=ABI)
- quest_result = {"ITEMS":{}, "XP":{}, "SkillUp":{}, "Stamina":{}}
- quest_reward = contract.events.QuestReward().processReceipt(tx_receipt, errors=DISCARD)
- for rezult in quest_reward:
- if ITEMS.__contains__(str(rezult.args.rewardItem)):
- item = ITEMS[rezult.args.rewardItem]
- quest_result["ITEMS"][item] = quest_result["ITEMS"].get(item, 0) + rezult.args.itemQuantity
- quest_xp = contract.events.QuestXP().processReceipt(tx_receipt, errors=DISCARD)
- for result in quest_xp:
- quest_result["XP"][result.args.heroId] = quest_result["XP"].get(result.args.heroId, 0) + result.args.xpEarned
- quest_skillup = contract.events.QuestSkillUp().processReceipt(tx_receipt, errors=DISCARD)
- for result in quest_skillup:
- questId = result.args.questId
- player = result.args.player
- heroId = result.args.heroId
- profession = result.args.profession
- profession = PROFESSION_NUMBER[profession]
- skillUp = result.args.skillUp
- skillUp = skillUp / 10
- quest_result["SkillUp"][(heroId)] = {}
- quest_result["SkillUp"][(heroId)]["questId"] = questId
- quest_result["SkillUp"][(heroId)]["profession"] = profession
- quest_result["SkillUp"][(heroId)]["skillUp"] = skillUp
- quest_staminaspent = contract.events.QuestStaminaSpent().processReceipt(tx_receipt, errors=DISCARD)
- for result in quest_staminaspent:
- questId = result.args.questId
- player = result.args.player
- heroId = result.args.heroId
- staminaFullAt = result.args.staminaFullAt
- staminaSpent = result.args.staminaSpent
- quest_result["Stamina"][(heroId)] = quest_result["Stamina"].get((heroId), {})
- quest_result["Stamina"][(heroId)]["staminaFullAt"] = staminaFullAt
- quest_result["Stamina"][(heroId)]["staminaSpent"] = staminaSpent
- return quest_result
- def getActiveQuests(account_address, rpc_address):
- w3 = Web3(Web3.HTTPProvider(rpc_address))
- contract_address = Web3.toChecksumAddress(CONTRACT_ADDRESS)
- contract = w3.eth.contract(contract_address, abi=ABI)
- result = contract.functions.getActiveQuests(account_address).call()
- quest_result = {}
- if len(result) > 0:
- for quest in result: # 0 : questID, 1: QuestNameAddress, 2: Heroes list on quest, 3: Player wallet, 4: Quest start Time, 5: StartBlok, 6:Quest Complete Time, 7: Attempts, 8:Quest Status
- questId = quest[0]
- QuestName = PROFESSION_BY_HASH[quest[1]]
- heroes = quest[2]
- QuestStarted = quest[4]
- QuestFinish = quest[6]
- Attempts = quest[7]
- QuestStatus = quest[8]
- quest_result[questId]= {}
- quest_result[questId]["QuestName"] = QuestName
- quest_result[questId]["heroes"] = heroes
- quest_result[questId]["QuestStarted"] = QuestStarted
- quest_result[questId]["QuestFinish"] = QuestFinish
- quest_result[questId]["Attempts"] = Attempts
- quest_result[questId]["QuestStatus"] = QuestStatus
- return quest_result
Add Comment
Please, Sign In to add comment