Xvadrom

defi kingodms profession quest

Dec 4th, 2021
387
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 33.94 KB | None | 0 0
  1. import time
  2. from web3 import Web3
  3. from web3.logs import STRICT, IGNORE, DISCARD, WARN
  4.  
  5.  
  6.  
  7. CONTRACT_ADDRESS = '0x5100bd31b822371108a0f63dcfb6594b9919eaf4'
  8.  
  9. ABI =  """
  10.        [{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},
  11.        {"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"},
  12.        {"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"},
  13.        {"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"},
  14.        {"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"},
  15.        {"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"},
  16.        {"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"},
  17.        {"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"},
  18.        {"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"},
  19.        {"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"},
  20.        {"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"},
  21.        {"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"},
  22.        {"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"},
  23.        {"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},
  24.        {"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},
  25.        {"inputs":[],"name":"MODERATOR_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},
  26.        {"inputs":[{"internalType":"address","name":"_questAddress","type":"address"}],"name":"addQuestType","outputs":[],"stateMutability":"nonpayable","type":"function"},
  27.        {"inputs":[{"internalType":"uint256","name":"_heroId","type":"uint256"}],"name":"cancelQuest","outputs":[],"stateMutability":"nonpayable","type":"function"},
  28.        {"inputs":[{"internalType":"uint256","name":"_heroId","type":"uint256"}],"name":"completeQuest","outputs":[],"stateMutability":"nonpayable","type":"function"},
  29.        {"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"},
  30.        {"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"},
  31.        {"inputs":[{"internalType":"uint256","name":"_heroId","type":"uint256"}],"name":"getCurrentStamina","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},
  32.        {"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"},
  33.        {"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"},
  34.        {"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"},
  35.        {"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},
  36.        {"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},
  37.        {"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"},
  38.        {"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"heroToQuest","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},
  39.        {"inputs":[{"internalType":"address","name":"_heroCoreAddress","type":"address"},{"internalType":"address","name":"_statScienceAddress","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},
  40.        {"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"},
  41.        {"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"},
  42.        {"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"},
  43.        {"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},
  44.        {"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},
  45.        {"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"},
  46.        {"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"questAddressToType","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},
  47.        {"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},
  48.        {"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},
  49.        {"inputs":[{"internalType":"uint256","name":"_timePerStamina","type":"uint256"}],"name":"setTimePerStamina","outputs":[],"stateMutability":"nonpayable","type":"function"},
  50.        {"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"},
  51.        {"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},
  52.        {"inputs":[],"name":"timePerStamina","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},
  53.        {"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},
  54.        {"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"},
  55.        {"inputs":[{"internalType":"address","name":"_questAddress","type":"address"},{"internalType":"uint8","name":"_status","type":"uint8"}],"name":"updateQuestType","outputs":[],"stateMutability":"nonpayable","type":"function"},
  56.        {"inputs":[{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"vrf","outputs":[{"internalType":"bytes32","name":"result","type":"bytes32"}],"stateMutability":"view","type":"function"}]
  57.  
  58.  
  59.  
  60.  
  61.        """
  62. PROFESSION_BY_ADDRESS =  {
  63.     "0xE259e8386d38467f0E7fFEdB69c3c9C935dfaeFc":"fishing", "0x3132c76acF2217646fB8391918D28a16bD8A8Ef4":"foraging", "0x0548214A0760a897aF53656F4b69DbAD688D8f29":"wishing_well"
  64.               }
  65. PROFESSION = {
  66.     "fishing":"0xE259e8386d38467f0E7fFEdB69c3c9C935dfaeFc", "foraging":"0x3132c76acF2217646fB8391918D28a16bD8A8Ef4", "mining":None,
  67.     "gardening":None, "wishing_well":"0x0548214A0760a897aF53656F4b69DbAD688D8f29"
  68.               }
  69. FISHING = "0xE259e8386d38467f0E7fFEdB69c3c9C935dfaeFc"
  70. FORAGING = "0x3132c76acF2217646fB8391918D28a16bD8A8Ef4"
  71. GARDENING = None
  72. MINING = None
  73. WISHING_WELL = '0x0548214A0760a897aF53656F4b69DbAD688D8f29'
  74.  
  75.  
  76. ITEMS = {
  77.     '0x6e1bC01Cc52D165B357c42042cF608159A2B81c1':'AMBERTAFFY',
  78.     '0x78aED65A2Cc40C7D8B0dF1554Da60b38AD351432':'BLOATER',
  79.     '0x68EA4640C5ce6cC0c9A1F17B7b882cB1cBEACcd7':'DARKWEED',
  80.     '0x24eA0D436d3c2602fbfEfBe6a16bBc304C963D04':'GAIASTEARS',
  81.     '0x600541aD6Ce0a8b5dae68f086D46361534D20E80':'GOLDVEIN',
  82.     '0xe4Cfee5bF05CeF3418DA74CFB89727D8E4fEE9FA':'IRONSCALE',
  83.     '0x8Bf4A0888451C6b5412bCaD3D9dA3DCf5c6CA7BE':'LANTERNEYE',
  84.     '0x9678518e04Fe02FB30b55e2D0e554E26306d0892':'PET_EGG_BLUE',
  85.     '0x95d02C1Dc58F05A015275eB49E107137D9Ee81Dc':'PET_EGG_GREY',
  86.     '0x043F9bd9Bb17dFc90dE3D416422695Dd8fa44486':'RAGWEED',
  87.     '0xc5891912718ccFFcC9732D1942cCD98d5934C2e1':'REDGILL',
  88.     '0x094243DfABfBB3E6F71814618ace53f07362a84c':'REDLEAF',
  89.     '0x6B10Ad6E3b99090De20bF9f95F960addC35eF3E2':'ROCKROOT',
  90.     '0xb80A07e13240C31ec6dc0B5D72Af79d461dA3A70':'SAILFISH',
  91.     '0x372CaF681353758f985597A35266f7b330a2A44D':'SHIMMERSCALE',
  92.     '0x66F5BfD910cd83d3766c4B39d13730C911b2D286':'SHVAS_RUNE',
  93.     '0x2493cfDAcc0f9c07240B5B1C4BE08c62b8eEff69':'SILVERFIN',
  94.     '0xCdfFe898E687E941b124dfB7d24983266492eF1d':'SWIFT_THISTLE'
  95.     }
  96. PROFESSION_NUMBER = {1:'???', 2:'???', 3:'???', 4:'fishing', 5:'???', 6:'foraging'}
  97. def start_quest(hero_ids, attempts, _questname, _questAddress, private_key, nonce, gas_price_gwei, tx_timeout_seconds, rpc_address, logger, maxGasUsed):
  98.  
  99.         w3 = Web3(Web3.HTTPProvider(rpc_address))
  100.         account = w3.eth.account.privateKeyToAccount(private_key)
  101.         w3.eth.default_account = account.address
  102.  
  103.         contract_address = Web3.toChecksumAddress(CONTRACT_ADDRESS)
  104.         contract = w3.eth.contract(contract_address, abi=ABI)        
  105.         quest_address = Web3.toChecksumAddress(_questAddress)
  106.         logger.info(f'Starting {_questname} quest with heroes {str(hero_id)}')
  107.          
  108.         tx = contract.functions.startQuest(hero_ids, quest_address, attempts).buildTransaction(
  109.             {'gasPrice': w3.toWei(gas_price_gwei, 'gwei'), 'nonce': nonce, 'gas': maxGasUsed})
  110.         input = tx["data"]
  111.         func_obj, func_params = contract.decode_function_input(input)
  112.        
  113.         logger.info("Signing transaction")
  114.         signed_tx = w3.eth.account.sign_transaction(tx, private_key=private_key)        
  115.         prettier_tx = extension.Pretty_tx(tx, w3)
  116.    
  117.         logger.info("Sending transaction " + str(prettier_tx))
  118.         ret = w3.eth.send_raw_transaction(signed_tx.rawTransaction)
  119.         logger.info("Transaction successfully sent !")
  120.         logger.info(
  121.             "Waiting for transaction https://explorer.harmony.one/tx/" + str(signed_tx.hash.hex()) + " to be mined")
  122.  
  123.         tx_receipt = w3.eth.wait_for_transaction_receipt(transaction_hash=signed_tx.hash, timeout=tx_timeout_seconds,
  124.                                                          poll_latency=3)
  125.        
  126.         logger.info("Transaction mined !")
  127.        
  128.         Pretty_tx_receipt = extension.Pretty_tx_receipt(tx_receipt, w3)
  129.         logger.info(str(Pretty_tx_receipt))
  130.         # return Pretty_tx_receipt
  131.         return tx_receipt
  132. def complete_quest(hero_id, private_key, nonce, gas_price_gwei, tx_timeout_seconds, rpc_address, logger, maxGasUsed):  
  133.         w3 = Web3(Web3.HTTPProvider(rpc_address))
  134.         account = w3.eth.account.privateKeyToAccount(private_key)
  135.         w3.eth.default_account = account.address
  136.  
  137.         contract_address = Web3.toChecksumAddress(CONTRACT_ADDRESS)
  138.         contract = w3.eth.contract(contract_address, abi=ABI)
  139.  
  140.         logger.info("Completing quest with hero id " + str(hero_id))
  141.         tx = contract.functions.completeQuest(hero_id).buildTransaction(
  142.             {'gasPrice': w3.toWei(gas_price_gwei, 'gwei'), 'nonce': nonce, 'gas': maxGasUsed})
  143.         #    {'gasPrice': w3.toWei(gas_price_gwei, 'gwei'), 'nonce': nonce})
  144.  
  145.         logger.info("Signing transaction")
  146.         signed_tx = w3.eth.account.sign_transaction(tx, private_key=private_key)
  147.         prettier_tx = extension.Pretty_tx(tx, w3)
  148.         logger.info("Sending transaction " + str(prettier_tx))
  149.         ret = w3.eth.send_raw_transaction(signed_tx.rawTransaction)
  150.         logger.info("Transaction successfully sent !")
  151.         logger.info(
  152.             "Waiting for transaction https://explorer.harmony.one/tx/" + str(signed_tx.hash.hex()) + " to be mined")
  153.         tx_receipt = w3.eth.wait_for_transaction_receipt(transaction_hash=signed_tx.hash, timeout=tx_timeout_seconds,
  154.                                                          poll_latency=3)
  155.    
  156.         logger.info("Transaction mined !")        
  157.         return tx_receipt
  158.  
  159. def get_current_stamina(hero_id, rpc_address):
  160.     w3 = Web3(Web3.HTTPProvider(rpc_address))
  161.  
  162.     contract_address = Web3.toChecksumAddress(CONTRACT_ADDRESS)
  163.     contract = w3.eth.contract(contract_address, abi=ABI)
  164.     result = contract.functions.getCurrentStamina(hero_id).call()
  165.  
  166.     return result
  167. def parse_quest_Started(tx_receipt, rpc_address):
  168.     w3 = Web3(Web3.HTTPProvider(rpc_address))
  169.  
  170.     contract_address = Web3.toChecksumAddress(CONTRACT_ADDRESS)
  171.     contract = w3.eth.contract(contract_address, abi=ABI)
  172.     #func_obj, func_params = contract.decode_function_input(tx_receipt)
  173.     quest_result = {}
  174.     tuple_index = 0
  175.     result = contract.events.QuestAdded().processReceipt(tx_receipt)
  176.     quest_result["questId"] = result[tuple_index][0]
  177.     quest_result["player"] = result[tuple_index][1]
  178.     quest_result["heroId"] = result[tuple_index][1]
  179.     tuple_index = tuple_index + 1
  180.     quest_info ={}
  181.     quest_info["id"] = result[tuple_index][0]
  182.     quest_info["quest"] = result[tuple_index][1]
  183.     quest_info["heroes"] = result[tuple_index][2]
  184.     quest_info["player"] = result[tuple_index][3]
  185.     quest_info["startTime"] = result[tuple_index][4]
  186.     quest_info["startBlock"] = result[tuple_index][5]
  187.     quest_info["completeAtTime"] = result[tuple_index][6]
  188.     quest_info["attempts"] = result[tuple_index][7]
  189.     quest_info["status"] = result[tuple_index][8]
  190.  
  191.     quest_result["quest_info"] = quest_info
  192.     return quest_result
  193.  
  194. def parse_complete_quest_receipt(tx_receipt, rpc_address):
  195.     w3 = Web3(Web3.HTTPProvider(rpc_address))
  196.  
  197.     contract_address = Web3.toChecksumAddress(CONTRACT_ADDRESS)
  198.     contract = w3.eth.contract(contract_address, abi=ABI)  
  199.     quest_result = {"ITEMS":{}, "XP":{}, "SkillUp":{}, "Stamina":{}}
  200.    
  201.     quest_reward = contract.events.QuestReward().processReceipt(tx_receipt, errors=DISCARD)
  202.    
  203.     for rezult in quest_reward:  
  204.         if ITEMS.__contains__(str(rezult.args.rewardItem)):
  205.             item = ITEMS[rezult.args.rewardItem]          
  206.             quest_result["ITEMS"][item] = quest_result["ITEMS"].get(item, 0) + rezult.args.itemQuantity          
  207.        
  208.  
  209.     quest_xp = contract.events.QuestXP().processReceipt(tx_receipt, errors=DISCARD)
  210.     for result in quest_xp:        
  211.         quest_result["XP"][result.args.heroId] = quest_result["XP"].get(result.args.heroId, 0) + result.args.xpEarned  
  212.  
  213.  
  214.     quest_skillup = contract.events.QuestSkillUp().processReceipt(tx_receipt, errors=DISCARD)
  215.     for result in quest_skillup:        
  216.         questId = result.args.questId
  217.         player = result.args.player
  218.         heroId = result.args.heroId
  219.         profession = result.args.profession
  220.         profession = PROFESSION_NUMBER[profession]
  221.         skillUp = result.args.skillUp
  222.         skillUp = skillUp / 10      
  223.         quest_result["SkillUp"][(heroId)] = {}
  224.         quest_result["SkillUp"][(heroId)]["questId"] = questId
  225.         quest_result["SkillUp"][(heroId)]["profession"] = profession
  226.         quest_result["SkillUp"][(heroId)]["skillUp"] = skillUp
  227.     quest_staminaspent = contract.events.QuestStaminaSpent().processReceipt(tx_receipt, errors=DISCARD)
  228.     for result in quest_staminaspent:        
  229.             questId = result.args.questId
  230.             player = result.args.player
  231.             heroId = result.args.heroId
  232.             staminaFullAt = result.args.staminaFullAt
  233.             staminaSpent = result.args.staminaSpent
  234.             quest_result["Stamina"][(heroId)] = quest_result["Stamina"].get((heroId), {})
  235.             quest_result["Stamina"][(heroId)]["staminaFullAt"] = staminaFullAt
  236.             quest_result["Stamina"][(heroId)]["staminaSpent"] = staminaSpent
  237.    
  238.     return quest_result
  239.    
  240.    
  241. def getActiveQuests(account_address, rpc_address):
  242.     w3 = Web3(Web3.HTTPProvider(rpc_address))
  243.  
  244.     contract_address = Web3.toChecksumAddress(CONTRACT_ADDRESS)
  245.     contract = w3.eth.contract(contract_address, abi=ABI)
  246.     result = contract.functions.getActiveQuests(account_address).call()
  247.     quest_result = {}
  248.     if len(result) > 0:
  249.         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
  250.             questId = quest[0]
  251.             QuestName = PROFESSION_BY_HASH[quest[1]]
  252.             heroes = quest[2]
  253.             QuestStarted = quest[4]
  254.             QuestFinish = quest[6]
  255.             Attempts = quest[7]
  256.             QuestStatus = quest[8]
  257.             quest_result[questId]= {}
  258.             quest_result[questId]["QuestName"] = QuestName
  259.             quest_result[questId]["heroes"] = heroes
  260.             quest_result[questId]["QuestStarted"] = QuestStarted
  261.             quest_result[questId]["QuestFinish"] = QuestFinish
  262.             quest_result[questId]["Attempts"] = Attempts
  263.             quest_result[questId]["QuestStatus"] = QuestStatus  
  264.     return quest_result
  265.  
  266.  
  267.    
  268.    
Add Comment
Please, Sign In to add comment