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
+}