Flag Storage

The Flag Storage contract is used to store supplemental information about Heroes and Wallets that is not contained in other contracts.

The V1 version of this contract, which primarily stored data about the Perilous Journey and CV Gen0 Rerolls, has been deprecated in favor of V2.

Pertinent information that is still stored in the V1 contract will be migrated to the V2 system in the future.

Contracts

Addresses

DFK Chain

Name
Mainnet
Testnet

FlagStorageV2

0x75d8ba2E4725633FcdcC165332dCA04c107915cA

0x49b145D2164B137a398951a76D069118F2EAfe4a

Klaytn

Name
Mainnet
Testnet

FlagStorageV2

0xeb9ff38209dCC4236DBFb3C275c0AAeEBf0B92Cf

0x3f81c3a28c4802E2B1966A5590beEAb895cC01DD

Interfaces

interface IFlagStorageV2 {

    event CraftingGenesStorageSet(uint256 heroId, bool value);
    event DarkSummoningStorageSet(uint256 heroId, tuple(uint32 levelCarryover) values);
    
    // The first reroll that took place on Harmony for the CV release
    event Gen0RerollCVStorageSet(uint256 heroId, tuple(address player, uint32 summonRecord, bool rerolledGameGenes, bool rerolledAppearanceGenes) values);
    // The second reroll that took place on CV for the SD2.0 release
    event Gen0RerollSDStorageSet(uint256 heroId, tuple(address player, uint32 summonRecord, bool rerolledGameGenes, bool rerolledAppearanceGenes) values);
    event PerilousJourneyStorageSet(uint256 heroId, address value);
    event HeroPendingReviewAdded(uint256 heroId);
    event HeroTaintedGeneStorageDeleted(uint256 heroId);
    event HeroTaintedGeneStorageSet(uint256 heroId, tuple(uint256 heroId, uint8[] geneIndex, uint8[] rankType, bool hasTaintedGenes, bool mayHaveTaintedGenes) geneValues);
    event HeroesPendingReviewCleared();
    
    function getCraftingGeneFlag(uint256 _heroId) view returns (bool);
    function getCraftingGeneFlags(uint256[] _heroIds) view returns (uint256[], bool[]);
    function getDarkSummoningStorage(uint256 _heroId) view returns (tuple(uint32 levelCarryover));
    // The first reroll that took place on Harmony for the CV release
    function getGen0RerollCVStorage(uint256 _heroId) view returns (tuple(address player, uint32 summonRecord, bool rerolledGameGenes, bool rerolledAppearanceGenes));
    // The second reroll that took place on CV for the SD2.0 release
    function getGen0RerollSDStorage(uint256 _heroId) view returns (tuple(address player, uint32 summonRecord, bool rerolledGameGenes, bool rerolledAppearanceGenes));
    function getPJStorage(uint256 _heroId) view returns (address);

}

ABIs

Historical Contracts

These contracts have been deprecated and should not be used. They are listed here for data analysis and tracking purposes only.

Addresses

DFK Chain

Name
Mainnet
Testnet

FlagStorageV1

0x659D6F1Ba11c388A55091dc83e77808081201D5D

0xfD892302248D97626bF61Ea5C4308cFaF2b4dA1C

Harmony

Name
Mainnet
Testnet

FlagStorageV1

0x284F756A212Afd072E5a6033Ace9BE0Eed1d8811

0x2e0B652a5BBc6547DD11aA7A25235dd92d2Fde23

Interfaces

interface IFlagStorageV1 {

    event UpdatedHeroStorage(uint256 indexed heroId, uint256 indexed storageId, uint32[] data);
    event UpdatedWalletStorage(address indexed wallet, uint256 indexed storageId, uint32[] data);

    function getHeroStorageData(uint256 _heroId, uint256 _storageId) view returns (uint32[]);
    function getHeroStorageDataAtIndex(uint256 _heroId, uint256 _storageId, uint256 _index) view returns (uint32);
    function getHeroStorageFlag(uint256 _heroId, uint256 _storageId, uint256 _dataIndex, uint8 _bitIndex) view returns (bool);
    function getHeroStorageLower16BitValue(uint256 _heroId, uint256 _storageId, uint256 _index) view returns (uint32);
    function getHeroStorageUpper16BitValue(uint256 _heroId, uint256 _storageId, uint256 _index) view returns (uint32);
    function getHeroStorageWalletAddress(uint256 _heroId, uint256 _storageId, uint256 _startIndex) view returns (address);
    function getWalletStorageData(address _wallet, uint256 _storageId) view returns (uint32[]);
    function getWalletStorageDataAtIndex(address _wallet, uint256 _storageId, uint256 _index) view returns (uint32);
    function getWalletStorageFlag(address _wallet, uint256 _storageId, uint256 _dataIndex, uint8 _bitIndex) view returns (bool);
    function getWalletStorageLower16BitValue(address _wallet, uint256 _storageId, uint256 _index) view returns (uint32);
    function getWalletStorageUpper16BitValue(address _wallet, uint256 _storageId, uint256 _index) view returns (uint32);, uint32 summonRecord, bool rerolledGameGenes, bool rerolledAppearanceGenes));

}

ABIs

FlagStorageV1

The V1 FlagStorage system is constructed from a two layer mapping, where the first layer is indexed by keys that correspond to wallet addresses or Hero IDs. The second layer is indexed by storage IDs and return an array of uint32 values. These uint values can be broken down into their individual bits for boolean storage, or split into lower and upper uint16 values.

To retrieve this data, use getWalletStorageFlag or getHeroStorageFlag for boolean values, and getWallet/HeroStorageLower/Upper16BitValue for uint16 values.

This is not a complete list of Flag Storage data, as the remainder can be retrieved from the Perilous Journey and Gen0 Reroll contracts. All relevant data will eventually be migrated to the V2 contract.

Wallet Storage

Storage ID
Index
Bits
DataType
Data
Network

2

1

0

boolean

Donated to Philippines hurricane relief (2021)

Harmony

2

1

1

boolean

Donated to UNICEF campaign (April 2022)

Harmony DFK Chain

Hero Storage

Storage ID
Index
Bits
DataType
Data
Network

4

0

0

boolean

Perilous Journey Survivor

Harmony

4

0

1

boolean

Gen0 Reroll (CV) Game Genes

Harmony

4

0

2

boolean

Gen0 Reroll (CV) Visual Genes

Harmony

5

0

0

boolean

Hero survived the Perilous Journey

Harmony

5

0

1

boolean

Hero died on the Perilous Journey

Harmony

5

0

2

boolean

Hero is eligible for 3x +5 Stat Ups from the Perilous Journey

Harmony

5

0

3

boolean

Hero received 3x +5 Stat Ups from the Perilous Journey

Harmony

Last updated