# Perilous Journey

## Historical Contracts

{% hint style="danger" %}
These contracts have been deprecated and should not be used. They are listed here for data analysis and tracking purposes only.
{% endhint %}

### Addresses

#### Harmony

| Name                           | Mainnet                                    | Testnet                                    |
| ------------------------------ | ------------------------------------------ | ------------------------------------------ |
| Perilous Journey (Crystalvale) | 0xE92Db3bb6E4B21a8b9123e7FdAdD887133C64bb7 | 0x795F6AF5Aa45Ec351A8fC74705F0874CA5f67F42 |

### Interfaces

```solidity
interface IJourney {

    event HeroClaimed(address indexed player, uint256 heroId, uint256 submissionId, uint256 indexed groupId, bool isGenZero, bool addedSurvivalChance, bool indexed heroSurvived, uint16 heroLevel, uint256 crystalAmount, uint256 jewelAmount);
    event HeroSubmitted(address indexed player, uint256 heroId, uint256 submissionId, uint256 groupId, bool isGenZero, bool submittedWithGenZero);
    event JourneyReward(uint256 indexed heroId, address indexed player, address rewardItem, uint256 itemQuantity);
    event StatUp(address indexed player, uint256 indexed heroId, uint256 stat, uint8 increase, uint8 updateType);
    
    function applySurvivalStatBonus(uint256 _heroId, uint8 stat1, uint8 stat2, uint8 stat3);
    function assistingAuction() view returns (address);
    function cancelSubmission(uint256 _heroId);
    function claimEnd() view returns (uint64);
    function claimHero(uint256 _heroId);
    function claimHeroes(uint256[] _heroes);
    function claimStart() view returns (uint64);
    function crystals(uint256) view returns (address);
    function flagStorage() view returns (address);
    function getHeroSubmission(uint256 _heroId) view returns (tuple(uint256 id, address owner, uint256 groupId, uint256 heroId, uint256 startBlock, bool addedSurvivalChance));
    function getSubmission(uint256 _id) view returns (tuple(uint256 id, address owner, uint256 groupId, uint256 heroId, uint256 startBlock, bool addedSurvivalChance));
    function getUserSubmissions(address _address) view returns (tuple(uint256 id, address owner, uint256 groupId, uint256 heroId, uint256 startBlock, bool addedSurvivalChance)[]);
    function graveyard() view returns (address);
    function heroCore() view returns (address);
    function heroToSubmission(uint256) view returns (uint256);
    function paused() view returns (bool);
    function profileUserSubmissions(address, uint256) view returns (uint256 id, address owner, uint256 groupId, uint256 heroId, uint256 startBlock, bool addedSurvivalChance);
    function questFund() view returns (address);
    function runes(uint256) view returns (address);
    function statBonusEnd() view returns (uint64);
    function stones(uint256) view returns (address);
    function submissionEnd() view returns (uint64);
    function submissionStart() view returns (uint64);
    function submitHeroes(uint256[] _heroIds);
    function submitHeroesWithGenZero(uint256 genZeroId, uint256[] _heroIds);
    
}
```

### ABIs

{% file src="/files/oLar7yocYX4Ycigop39y" %}

## Related Contracts

{% content-ref url="/pages/UPDPwyYapDkXsoTyK4TQ" %}
[Graveyard](/contracts/miscellaneous/graveyard.md)
{% endcontent-ref %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://devs.defikingdoms.com/contracts/events/perilous-journey.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
