Skip to content

Commit

Permalink
Merge pull request #66 from moreal/revert-fix-index
Browse files Browse the repository at this point in the history
Revert "Merge pull request #65 from moreal/fix-index"
  • Loading branch information
moreal authored May 17, 2024
2 parents 217d576 + 3db9c3b commit 087a211
Show file tree
Hide file tree
Showing 14 changed files with 82 additions and 194 deletions.
9 changes: 2 additions & 7 deletions Mimir.Worker/Initializer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -32,13 +32,8 @@ public Initializer(
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
var started = DateTime.UtcNow;
var latestBlockIndex = await _stateService.GetLatestIndex();

await _tableSheetScrapper.ExecuteAsync(latestBlockIndex, stoppingToken);
await _arenaScrapper.ExecuteAsync(latestBlockIndex, stoppingToken);

await _store.UpdateLatestBlockIndex(latestBlockIndex);

await _tableSheetScrapper.ExecuteAsync(stoppingToken);
await _arenaScrapper.ExecuteAsync(stoppingToken);
_logger.LogInformation(
"Finished Initializer background service. Elapsed {TotalElapsedMinutes} minutes",
DateTime.UtcNow.Subtract(started).Minutes);
Expand Down
4 changes: 2 additions & 2 deletions Mimir.Worker/Queries.graphql
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ query GetTip {
}
}

query GetState($accountAddress: Address! $address: Address!, $index: Long) {
state(accountAddress: $accountAddress, address: $address, index: $index)
query GetState($accountAddress: Address! $address: Address!) {
state(accountAddress: $accountAddress, address: $address)
}

query GetBattleArenaTransactions($blockIndex: Long!) {
Expand Down
9 changes: 6 additions & 3 deletions Mimir.Worker/Scrapper/ArenaScrapper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,11 @@ public class ArenaScrapper(ILogger<ArenaScrapper> logger, IStateService service,
private readonly IStateService _stateService = service;
private readonly MongoDbStore _store = store;

public async Task ExecuteAsync(long blockIndex, CancellationToken cancellationToken)
public async Task ExecuteAsync(CancellationToken cancellationToken)
{
var stateGetter = _stateService.At(blockIndex);
var roundData = await stateGetter.GetArenaRoundData(blockIndex);
var latestBlockIndex = await service.GetLatestIndex();
var stateGetter = _stateService.At();
var roundData = await stateGetter.GetArenaRoundData(latestBlockIndex);
var arenaParticipants = await stateGetter.GetArenaParticipantsState(roundData.ChampionshipId, roundData.Round);

var buffer = new List<(Address AvatarAddress, ArenaData Arena, AvatarData Avatar)>();
Expand All @@ -30,6 +31,8 @@ async Task FlushBufferAsync()

buffer.Clear();
}

await _store.UpdateLatestBlockIndex(latestBlockIndex);

foreach (var avatarAddress in arenaParticipants.AvatarAddresses)
{
Expand Down
26 changes: 12 additions & 14 deletions Mimir.Worker/Scrapper/StateGetter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,19 +16,17 @@ public class StateGetter
{
private readonly ILogger<StateGetter> _logger;
private readonly IStateService _service;
private readonly long? _index;

public StateGetter(IStateService service, long? index=null)
public StateGetter(IStateService service)
{
_logger = LoggerFactory.Create(builder => builder.AddConsole()).CreateLogger<StateGetter>();
_service = service;
_index = index;
}

public async Task<T> GetSheet<T>()
where T : ISheet, new()
{
var sheetState = await _service.GetState(Addresses.TableSheet.Derive(typeof(T).Name), _index);
var sheetState = await _service.GetState(Addresses.TableSheet.Derive(typeof(T).Name));
if (sheetState is not Text sheetValue)
{
throw new ArgumentException(nameof(T));
Expand All @@ -43,7 +41,7 @@ public async Task<ArenaParticipants> GetArenaParticipantsState(int championshipI
{
var arenaParticipantsAddress =
ArenaParticipants.DeriveAddress(championshipId, roundId);
var state = await _service.GetState(arenaParticipantsAddress, _index);
var state = await _service.GetState(arenaParticipantsAddress);
return state switch
{
List list => new ArenaParticipants(list),
Expand All @@ -55,7 +53,7 @@ public async Task<ArenaScore> GetArenaScoreState(Address avatarAddress, int cham
{
var arenaScoreAddress =
ArenaScore.DeriveAddress(avatarAddress, championshipId, roundId);
var state = await _service.GetState(arenaScoreAddress, _index);
var state = await _service.GetState(arenaScoreAddress);
return state switch
{
List list => new ArenaScore(list),
Expand All @@ -67,7 +65,7 @@ public async Task<ArenaInformation> GetArenaInfoState(Address avatarAddress, int
{
var arenaInfoAddress =
ArenaInformation.DeriveAddress(avatarAddress, championshipId, roundId);
var state = await _service.GetState(arenaInfoAddress, _index);
var state = await _service.GetState(arenaInfoAddress);
return state switch
{
List list => new ArenaInformation(list),
Expand Down Expand Up @@ -131,7 +129,7 @@ public async Task<Inventory> GetInventoryState(Address avatarAddress)
public async Task<ItemSlotState> GetItemSlotState(Address avatarAddress)
{
var state = await _service.GetState(
ItemSlotState.DeriveAddress(avatarAddress, BattleType.Arena), _index);
ItemSlotState.DeriveAddress(avatarAddress, BattleType.Arena));
return state switch
{
List list => new ItemSlotState(list),
Expand All @@ -143,7 +141,7 @@ public async Task<ItemSlotState> GetItemSlotState(Address avatarAddress)
public async Task<List<RuneState>> GetRuneStates(Address avatarAddress)
{
var state = await _service.GetState(
RuneSlotState.DeriveAddress(avatarAddress, BattleType.Arena), _index);
RuneSlotState.DeriveAddress(avatarAddress, BattleType.Arena));
var runeSlotState = state switch
{
List list => new RuneSlotState(list),
Expand All @@ -154,7 +152,7 @@ public async Task<List<RuneState>> GetRuneStates(Address avatarAddress)
var runes = new List<RuneState>();
foreach (var runeStateAddress in runeSlotState.GetEquippedRuneSlotInfos().Select(info => RuneState.DeriveAddress(avatarAddress, info.RuneId)))
{
if (await _service.GetState(runeStateAddress, _index) is List list)
if (await _service.GetState(runeStateAddress) is List list)
{
runes.Add(new RuneState(list));
}
Expand All @@ -165,22 +163,22 @@ public async Task<List<RuneState>> GetRuneStates(Address avatarAddress)

public async Task<IValue?> GetStateWithLegacyAccount(Address address, Address accountAddress)
{
var state = await _service.GetState(address, accountAddress, _index);
var state = await _service.GetState(address, accountAddress);

if (state == null)
{
state = await _service.GetState(address, _index);
state = await _service.GetState(address);
}
return state;
}

public async Task<IValue?> GetAvatarStateWithLegacyAccount(Address avatarAddress, Address accountAddress, Address legacyAddress)
{
var state = await _service.GetState(avatarAddress, accountAddress, _index);
var state = await _service.GetState(avatarAddress, accountAddress);

if (state == null)
{
state = await _service.GetState(legacyAddress, _index);
state = await _service.GetState(legacyAddress);
}
return state;
}
Expand Down
7 changes: 4 additions & 3 deletions Mimir.Worker/Scrapper/TableSheetScrapper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,10 @@ MongoDbStore store
private readonly IStateService _stateService = service;
private readonly MongoDbStore _store = store;

public async Task ExecuteAsync(long blockIndex, CancellationToken cancellationToken)
public async Task ExecuteAsync(CancellationToken cancellationToken)
{
var stateGetter = _stateService.At(blockIndex);
var latestBlockIndex = await service.GetLatestIndex();
var stateGetter = _stateService.At();

var sheetTypes = typeof(ISheet)
.Assembly.GetTypes()
Expand All @@ -48,7 +49,7 @@ type.Namespace is { } @namespace
}

var sheetAddress = Addresses.TableSheet.Derive(sheetType.Name);
var sheetState = await _stateService.GetState(sheetAddress, blockIndex);
var sheetState = await _stateService.GetState(sheetAddress);
if (sheetState is not Text sheetValue)
{
throw new ArgumentException(nameof(sheetType));
Expand Down
16 changes: 8 additions & 8 deletions Mimir.Worker/Services/HeadlessStateService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,24 +16,24 @@ public class HeadlessStateService(IHeadlessGQLClient client) : IStateService

public long TipIndex => TipInfo.Item1;

public Task<IValue?[]> GetStates(Address[] addresses, long? index)
public Task<IValue?[]> GetStates(Address[] addresses)
{
return Task.WhenAll(addresses.Select(addr => GetState(addr, index)));
return Task.WhenAll(addresses.Select(GetState));
}

public Task<IValue?[]> GetStates(Address[] addresses, Address accountAddress, long? index)
public Task<IValue?[]> GetStates(Address[] addresses, Address accountAddress)
{
return Task.WhenAll(addresses.Select(addr => GetState(addr, accountAddress, index)));
return Task.WhenAll(addresses.Select(addr => GetState(addr, accountAddress)));
}

public async Task<IValue?> GetState(Address address, long? index)
public async Task<IValue?> GetState(Address address)
{
return await GetState(address, ReservedAddresses.LegacyAccount, index);
return await GetState(address, ReservedAddresses.LegacyAccount);
}

public async Task<IValue?> GetState(Address address, Address accountAddress, long? index)
public async Task<IValue?> GetState(Address address, Address accountAddress)
{
var result = await client.GetState.ExecuteAsync(accountAddress.ToString(), address.ToString(), index);
var result = await client.GetState.ExecuteAsync(accountAddress.ToString(), address.ToString());
result.EnsureNoErrors();

if (result.Data?.State is null)
Expand Down
8 changes: 4 additions & 4 deletions Mimir.Worker/Services/IStateService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@ namespace Mimir.Worker.Services;
public interface IStateService
{
Task<int> GetLatestIndex();
Task<IValue?> GetState(Address address, long? index);
Task<IValue?> GetState(Address address, Address accountAddress, long? index);
Task<IValue?[]> GetStates(Address[] addresses, long? index);
Task<IValue?[]> GetStates(Address[] addresses, Address accountAddress, long? index);
Task<IValue?> GetState(Address address);
Task<IValue?> GetState(Address address, Address accountAddress);
Task<IValue?[]> GetStates(Address[] addresses);
Task<IValue?[]> GetStates(Address[] addresses, Address accountAddress);
}
4 changes: 2 additions & 2 deletions Mimir.Worker/Services/StateServiceExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ namespace Mimir.Worker.Services;

public static class StateServiceExtensions
{
public static StateGetter At(this IStateService service, long index)
public static StateGetter At(this IStateService service)
{
return new StateGetter(service, index);
return new StateGetter(service);
}
}
72 changes: 9 additions & 63 deletions Mimir.Worker/schema.graphql
Original file line number Diff line number Diff line change
Expand Up @@ -8,17 +8,11 @@ type StandaloneQuery {
stateQuery(
# Offset block hash for query.
hash: ByteString

# Offset block index for query.
index: Long
): StateQuery!
state(
# The hash of the block used to fetch state from chain.
hash: ByteString

# The index of the block used to fetch state from chain.
index: Long

# The address of account to fetch from the chain.
accountAddress: Address!

Expand All @@ -29,7 +23,7 @@ type StandaloneQuery {
blockHash: ByteString!
recipient: Address
): [TransferNCGHistoryType!]!
keyStore: KeyStoreType
keyWorker: KeyWorkerType
@deprecated(
reason: "Use `planet key` command instead. https://www.npmjs.com/package/@planetarium/cli"
)
Expand Down Expand Up @@ -1147,7 +1141,7 @@ type TransferNCGHistoryType {
memo: String
}

type KeyStoreType {
type KeyWorkerType {
protectedPrivateKeys: [ProtectedPrivateKeyType!]!
decryptedPrivateKey(address: Address!, passphrase: String!): ByteString!

Expand Down Expand Up @@ -1254,24 +1248,14 @@ type ExplorerQuery {
stateQuery: LibplanetStateQuery
nodeState: NodeState!
helperQuery: HelperQuery
rawStateQuery: RawStateQuery
}

type BlockQuery {
blocks(
# Whether to query blocks in descending order or not.
desc: Boolean! = false

# The offset of the first queried block.
offset: Int! = 0

# The maximum number of blocks to return. This limits the offset index range to query, not the result, i.e. excluded blocks due to a block being empty or not matching the miner (if specified in other arguments) are still counted.
desc: Boolean = false
offset: Int = 0
limit: Int

# Whether to include empty blocks with no transactions or not. Default is set to false, i.e. to return empty blocks.
excludeEmptyTxs: Boolean! = false

# If not null, returns blocks only by mined by the address given. Default is set to null.
excludeEmptyTxs: Boolean = false
miner: Address
): [Block!]!
block(hash: ID, index: ID): Block
Expand Down Expand Up @@ -1523,9 +1507,6 @@ type WorldState {
# The legacy flag of the world state.
legacy: Boolean!

# The version of the bakcing data model.
version: Int!

# Gets the account associated with given address.
account(
# The address of an account to retrieve.
Expand Down Expand Up @@ -1617,8 +1598,8 @@ type Validator {

type NodeState {
preloaded: Boolean!
peers: [BoundPeer!]!
validators: [BoundPeer!]!
peers: [BoundPeer!]
validators: [BoundPeer!]
}

type BoundPeer {
Expand All @@ -1645,33 +1626,6 @@ type HelperQuery {
# The byte array in hex representation to decode.
hex: String!
): IValue!

# Converts string to key hex representation
keyHex(
# The string value to convert to key hex.
value: String!
): KeyBytes!
}

scalar KeyBytes

type RawStateQuery {
# Retrieves trie from given state root hash.
trie(stateRootHash: HashDigest_SHA256): Trie!
}

type Trie {
# Gets the value stored at given key.
value(
# The key to search.
key: KeyBytes!
): IValue

# Gets the values stored at given multiple keys.
values(
# The list of keys to search.
keys: [KeyBytes!]!
): IValue
}

type ValidationQuery {
Expand Down Expand Up @@ -2165,10 +2119,6 @@ type ActionQuery {
# Memo to attach to this action.
memo: String
): ByteString!
retrieveAvatarAssets(
# Avatar address to retrieve assets
avatarAddress: Address!
): ByteString!

# Query to craft/enhance items/foods
craftQuery: CraftQuery!
Expand Down Expand Up @@ -2572,10 +2522,6 @@ type ActionTxQuery {
# Memo to attach to this action.
memo: String
): ByteString!
retrieveAvatarAssets(
# Avatar address to retrieve assets
avatarAddress: Address!
): ByteString!

# Query to craft/enhance items/foods
craftQuery: CraftQuery!
Expand Down Expand Up @@ -2626,7 +2572,7 @@ type AddressQuery {
}

type StandaloneMutation {
keyStore: KeyStoreMutation
keyWorker: KeyWorkerMutation
@deprecated(
reason: "Use `planet key` command instead. https://www.npmjs.com/package/@planetarium/cli"
)
Expand Down Expand Up @@ -2676,7 +2622,7 @@ type StandaloneMutation {
): TxId!
}

type KeyStoreMutation {
type KeyWorkerMutation {
createPrivateKey(passphrase: String!, privateKey: ByteString): PrivateKeyType!
revokePrivateKey(address: Address!): ProtectedPrivateKeyType!
}
Expand Down
Loading

0 comments on commit 087a211

Please sign in to comment.