diff --git a/backend/Application/Api/GraphQL/Import/EventLogs/CisEventTokenAddedUpdate.cs b/backend/Application/Api/GraphQL/Import/EventLogs/CisEventTokenAddedUpdate.cs deleted file mode 100644 index 824af63c6..000000000 --- a/backend/Application/Api/GraphQL/Import/EventLogs/CisEventTokenAddedUpdate.cs +++ /dev/null @@ -1,15 +0,0 @@ -using System.Numerics; - -namespace Application.Api.GraphQL.Import.EventLogs -{ - /// - /// Represents that a Token was Minted. - /// - public class CisEventTokenAddedUpdate : CisEventTokenUpdate - { - /// - /// Amount of Token Minted. - /// - public BigInteger AmountDelta { get; set; } - } -} \ No newline at end of file diff --git a/backend/Application/Api/GraphQL/Import/EventLogs/EventLogHandler.cs b/backend/Application/Api/GraphQL/Import/EventLogs/EventLogHandler.cs index 6c758c99a..3958d8110 100644 --- a/backend/Application/Api/GraphQL/Import/EventLogs/EventLogHandler.cs +++ b/backend/Application/Api/GraphQL/Import/EventLogs/EventLogHandler.cs @@ -43,29 +43,31 @@ public List HandleLogs(TransactionPair[] transactions) //Select Cis Events var cisEvents = events - .Select(e => ParseCisEvent(e.TxId, e.Address, e.ContractEvent.Bytes)) + .Select(e => ParseCisEvent(e.Address, e.ContractEvent.Bytes)) .Where(e => e != null) - .Cast(); + .Cast() + .ToList(); //Handle Smart Contract Cis Events Logs var updates = cisEvents.Select(e => new { TokenUpdate = GetTokenUpdates(e), AccountUpdates = GetAccountUpdates(e) - }); + }).ToList(); - IEnumerable tokenUpdates = updates + var tokenUpdates = updates .Where(u => u.TokenUpdate != null) .Select(u => u.TokenUpdate) - .Cast(); + .Cast() + .ToList(); var accountUpdates = updates.SelectMany(a => a.AccountUpdates).ToList(); - if (tokenUpdates.Count() > 0) + if (tokenUpdates.Any()) { writer.ApplyTokenUpdates(tokenUpdates); } - if (accountUpdates.Count() > 0) + if (accountUpdates.Any()) { writer.ApplyAccountUpdates(accountUpdates); } @@ -85,7 +87,7 @@ private CisAccountUpdate[] GetAccountUpdates(CisEvent log) case CisBurnEvent e: if (e.FromAddress is CisEventAddressAccount accntAddress) { - return new CisAccountUpdate[] { + return new[] { new CisAccountUpdate() { ContractIndex = e.ContractIndex, @@ -128,7 +130,7 @@ private CisAccountUpdate[] GetAccountUpdates(CisEvent log) case CisMintEvent e: if (e.ToAddress is CisEventAddressAccount accntAddress4) { - return new CisAccountUpdate[] {new CisAccountUpdate() + return new[] {new CisAccountUpdate() { ContractIndex = e.ContractIndex, ContractSubIndex = e.ContractSubIndex, @@ -162,7 +164,7 @@ private CisAccountUpdate[] GetAccountUpdates(CisEvent log) AmountDelta = log.TokenAmount * -1 }; case CisMintEvent log: - return new CisEventTokenAddedUpdate() + return new CisEventTokenAmountUpdate() { ContractIndex = log.ContractIndex, ContractSubIndex = log.ContractSubIndex, @@ -190,16 +192,10 @@ private CisAccountUpdate[] GetAccountUpdates(CisEvent log) /// CIS Contract Address /// Input bytes /// - private CisEvent? ParseCisEvent( - long txnId, + private static CisEvent? ParseCisEvent( Concordium.Sdk.Types.ContractAddress address, byte[] bytes) { - if (!CisEvent.IsCisEvent(bytes)) - { - return null; - } - CisEvent cisEvent; if (!CisEvent.TryParse(bytes, address, out cisEvent)) { @@ -209,4 +205,4 @@ private CisAccountUpdate[] GetAccountUpdates(CisEvent log) return cisEvent; } } -} \ No newline at end of file +} diff --git a/backend/Application/Api/GraphQL/Import/EventLogs/EventLogWriter.cs b/backend/Application/Api/GraphQL/Import/EventLogs/EventLogWriter.cs index 9fc74cfe3..b2e39c8e7 100644 --- a/backend/Application/Api/GraphQL/Import/EventLogs/EventLogWriter.cs +++ b/backend/Application/Api/GraphQL/Import/EventLogs/EventLogWriter.cs @@ -53,9 +53,6 @@ public int ApplyTokenUpdates(IEnumerable tokenUpdates) case CisEventTokenAmountUpdate e: batch.BatchCommands.Add(CreateTokenAmountUpdateCmd(cmd, e)); break; - case CisEventTokenAddedUpdate e: - batch.BatchCommands.Add(CreateTokenAddedCmd(cmd, e)); - break; case CisEventTokenMetadataUpdate e: batch.BatchCommands.Add(CreateTokenMetadataUpdatedCmd(cmd, e)); break; @@ -70,39 +67,23 @@ public int ApplyTokenUpdates(IEnumerable tokenUpdates) return updates; } - private DbBatchCommand CreateTokenAmountUpdateCmd(DbBatchCommand cmd, CisEventTokenAmountUpdate e) - { - cmd.CommandText = @" - UPDATE graphql_tokens - SET total_supply = total_supply + @AmountDelta - WHERE contract_index = @ContractIndex - AND contract_sub_index = @ContractSubIndex - AND token_id = @TokenId"; - cmd.Parameters.Add(new NpgsqlParameter("ContractIndex", Convert.ToInt64(e.ContractIndex))); - cmd.Parameters.Add(new NpgsqlParameter("ContractSubIndex", Convert.ToInt64(e.ContractSubIndex))); - cmd.Parameters.Add(new NpgsqlParameter("TokenId", e.TokenId)); - cmd.Parameters.Add(new NpgsqlParameter("AmountDelta", e.AmountDelta)); - - return cmd; - } - - private DbBatchCommand CreateTokenAddedCmd(DbBatchCommand cmd, CisEventTokenAddedUpdate e) + private static DbBatchCommand CreateTokenAmountUpdateCmd(DbBatchCommand cmd, CisEventTokenAmountUpdate e) { cmd.CommandText = @" INSERT INTO graphql_tokens(contract_index, contract_sub_index, token_id, total_supply) - VALUES (@ContractIndex, @ContractSubIndex, @TokenId, @TotalSupply) + VALUES (@ContractIndex, @ContractSubIndex, @TokenId, @AmountDelta) ON CONFLICT ON CONSTRAINT graphql_tokens_pkey - DO NOTHING"; - + DO UPDATE SET total_supply = graphql_tokens.total_supply + @AmountDelta"; + cmd.Parameters.Add(new NpgsqlParameter("ContractIndex", Convert.ToInt64(e.ContractIndex))); cmd.Parameters.Add(new NpgsqlParameter("ContractSubIndex", Convert.ToInt64(e.ContractSubIndex))); cmd.Parameters.Add(new NpgsqlParameter("TokenId", e.TokenId)); - cmd.Parameters.Add(new NpgsqlParameter("TotalSupply", e.AmountDelta)); + cmd.Parameters.Add(new NpgsqlParameter("AmountDelta", e.AmountDelta)); return cmd; } - private DbBatchCommand CreateTokenMetadataUpdatedCmd(DbBatchCommand cmd, CisEventTokenMetadataUpdate e) + private static DbBatchCommand CreateTokenMetadataUpdatedCmd(DbBatchCommand cmd, CisEventTokenMetadataUpdate e) { cmd.CommandText = @" UPDATE graphql_tokens @@ -128,7 +109,7 @@ public int ApplyAccountUpdates(IEnumerable accountUpdates) { IEnumerable accountBaseAddresses = accountUpdates.Select(u => u.Address.GetBaseAddress().ToString()).Distinct(); var accountsMap = this._accountLookup.GetAccountIdsFromBaseAddresses(accountBaseAddresses); - using var counter = _metrics.MeasureDuration(nameof(EventLogWriter), nameof(ApplyTokenUpdates)); + using var counter = _metrics.MeasureDuration(nameof(EventLogWriter), nameof(ApplyAccountUpdates)); using var context = _dbContextFactory.CreateDbContext(); var connection = context.Database.GetDbConnection(); @@ -170,4 +151,4 @@ ON CONFLICT ON CONSTRAINT graphql_account_tokens_pk return updates; } } -} \ No newline at end of file +} diff --git a/backend/Tests/Api/GraphQL/Import/EventLog/EventLogWriterTest.cs b/backend/Tests/Api/GraphQL/Import/EventLog/EventLogWriterTest.cs index abe988b20..05ee5eace 100644 --- a/backend/Tests/Api/GraphQL/Import/EventLog/EventLogWriterTest.cs +++ b/backend/Tests/Api/GraphQL/Import/EventLog/EventLogWriterTest.cs @@ -40,8 +40,8 @@ public EventLogWriterTest(DatabaseFixture dbFixture) public void ShouldHandleTokenUpdates() { var updatesCount = writer.ApplyTokenUpdates(new List() { - new CisEventTokenAddedUpdate() { TokenId = TOKEN_1_ID, AmountDelta = 0, ContractIndex = 1, ContractSubIndex = 0 }, - new CisEventTokenAddedUpdate() { TokenId = TOKEN_2_ID, AmountDelta = 2, ContractIndex = 2, ContractSubIndex = 0 }, + new CisEventTokenAmountUpdate() { TokenId = TOKEN_1_ID, AmountDelta = 0, ContractIndex = 1, ContractSubIndex = 0 }, + new CisEventTokenAmountUpdate() { TokenId = TOKEN_2_ID, AmountDelta = 2, ContractIndex = 2, ContractSubIndex = 0 }, new CisEventTokenAmountUpdate() { TokenId = TOKEN_1_ID, AmountDelta = 1, ContractIndex= 1, ContractSubIndex = 0 }, new CisEventTokenAmountUpdate() { TokenId = TOKEN_2_ID, AmountDelta = -1, ContractIndex= 2, ContractSubIndex = 0 }, new CisEventTokenMetadataUpdate() { @@ -100,4 +100,4 @@ public void ShouldHandleAccountUpdates() accntToken.Balance.Should().Be(2); } } -} \ No newline at end of file +}