From 681842c8aa5de7a5507bb36208ee39315b56cd94 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Pawelec?= Date: Tue, 15 Aug 2023 17:04:02 +0200 Subject: [PATCH] add transaction message --- .../ApiReaders/TransactionStreamReader.cs | 2 ++ .../gateway-api-schema.yaml | 5 ++-- .../Model/CommittedTransactionInfo.cs | 26 +++++++++---------- .../GatewayModelExtensions.cs | 6 ++--- .../PostgresLedgerExtenderService.cs | 1 + .../LedgerExtension/WriteHelper.cs | 6 +++-- ... 20230815125818_InitialCreate.Designer.cs} | 10 +++---- ...ate.cs => 20230815125818_InitialCreate.cs} | 4 +-- .../MigrationsDbContextModelSnapshot.cs | 8 +++--- .../Models/LedgerTransaction.cs | 6 ++--- 10 files changed, 40 insertions(+), 34 deletions(-) rename src/RadixDlt.NetworkGateway.PostgresIntegration/Migrations/{20230814100026_InitialCreate.Designer.cs => 20230815125818_InitialCreate.Designer.cs} (99%) rename src/RadixDlt.NetworkGateway.PostgresIntegration/Migrations/{20230814100026_InitialCreate.cs => 20230815125818_InitialCreate.cs} (99%) diff --git a/src/RadixDlt.NetworkGateway.DataAggregator/NodeServices/ApiReaders/TransactionStreamReader.cs b/src/RadixDlt.NetworkGateway.DataAggregator/NodeServices/ApiReaders/TransactionStreamReader.cs index 664431252..a61ff0933 100644 --- a/src/RadixDlt.NetworkGateway.DataAggregator/NodeServices/ApiReaders/TransactionStreamReader.cs +++ b/src/RadixDlt.NetworkGateway.DataAggregator/NodeServices/ApiReaders/TransactionStreamReader.cs @@ -106,12 +106,14 @@ public TransactionStreamReader(INetworkConfigurationProvider networkConfiguratio RawLedgerTransaction = true, RawNotarizedTransaction = true, RawSystemTransaction = true, + Message = true, }, substateFormatOptions: new CoreModel.SubstateFormatOptions { Hash = false, Raw = false, Typed = true, + Previous = false, }, sborFormatOptions: new CoreModel.SborFormatOptions { diff --git a/src/RadixDlt.NetworkGateway.GatewayApi/gateway-api-schema.yaml b/src/RadixDlt.NetworkGateway.GatewayApi/gateway-api-schema.yaml index 7b1c62100..f65c185f7 100644 --- a/src/RadixDlt.NetworkGateway.GatewayApi/gateway-api-schema.yaml +++ b/src/RadixDlt.NetworkGateway.GatewayApi/gateway-api-schema.yaml @@ -1244,8 +1244,9 @@ components: $ref: "#/components/schemas/HexString" receipt: $ref: "#/components/schemas/TransactionReceipt" - message_hex: - $ref: "#/components/schemas/HexString" + message: + type: object + description: defined in core api specs. TransactionStatus: type: string diff --git a/src/RadixDlt.NetworkGateway.GatewayApiSdk/generated/Model/CommittedTransactionInfo.cs b/src/RadixDlt.NetworkGateway.GatewayApiSdk/generated/Model/CommittedTransactionInfo.cs index b64348b1d..bcd86507a 100644 --- a/src/RadixDlt.NetworkGateway.GatewayApiSdk/generated/Model/CommittedTransactionInfo.cs +++ b/src/RadixDlt.NetworkGateway.GatewayApiSdk/generated/Model/CommittedTransactionInfo.cs @@ -122,8 +122,8 @@ protected CommittedTransactionInfo() { } /// errorMessage. /// Hex-encoded binary blob.. /// receipt. - /// Hex-encoded binary blob.. - public CommittedTransactionInfo(long stateVersion = default(long), long epoch = default(long), long round = default(long), string roundTimestamp = default(string), TransactionStatus transactionStatus = default(TransactionStatus), string payloadHashHex = default(string), string intentHashHex = default(string), string feePaid = default(string), List affectedGlobalEntities = default(List), DateTime? confirmedAt = default(DateTime?), string errorMessage = default(string), string rawHex = default(string), TransactionReceipt receipt = default(TransactionReceipt), string messageHex = default(string)) + /// defined in core api specs.. + public CommittedTransactionInfo(long stateVersion = default(long), long epoch = default(long), long round = default(long), string roundTimestamp = default(string), TransactionStatus transactionStatus = default(TransactionStatus), string payloadHashHex = default(string), string intentHashHex = default(string), string feePaid = default(string), List affectedGlobalEntities = default(List), DateTime? confirmedAt = default(DateTime?), string errorMessage = default(string), string rawHex = default(string), TransactionReceipt receipt = default(TransactionReceipt), Object message = default(Object)) { this.StateVersion = stateVersion; this.Epoch = epoch; @@ -143,7 +143,7 @@ protected CommittedTransactionInfo() { } this.ErrorMessage = errorMessage; this.RawHex = rawHex; this.Receipt = receipt; - this.MessageHex = messageHex; + this.Message = message; } /// @@ -223,11 +223,11 @@ protected CommittedTransactionInfo() { } public TransactionReceipt Receipt { get; set; } /// - /// Hex-encoded binary blob. + /// defined in core api specs. /// - /// Hex-encoded binary blob. - [DataMember(Name = "message_hex", EmitDefaultValue = true)] - public string MessageHex { get; set; } + /// defined in core api specs. + [DataMember(Name = "message", EmitDefaultValue = true)] + public Object Message { get; set; } /// /// Returns the string presentation of the object @@ -250,7 +250,7 @@ public override string ToString() sb.Append(" ErrorMessage: ").Append(ErrorMessage).Append("\n"); sb.Append(" RawHex: ").Append(RawHex).Append("\n"); sb.Append(" Receipt: ").Append(Receipt).Append("\n"); - sb.Append(" MessageHex: ").Append(MessageHex).Append("\n"); + sb.Append(" Message: ").Append(Message).Append("\n"); sb.Append("}\n"); return sb.ToString(); } @@ -349,9 +349,9 @@ public bool Equals(CommittedTransactionInfo input) this.Receipt.Equals(input.Receipt)) ) && ( - this.MessageHex == input.MessageHex || - (this.MessageHex != null && - this.MessageHex.Equals(input.MessageHex)) + this.Message == input.Message || + (this.Message != null && + this.Message.Equals(input.Message)) ); } @@ -404,9 +404,9 @@ public override int GetHashCode() { hashCode = (hashCode * 59) + this.Receipt.GetHashCode(); } - if (this.MessageHex != null) + if (this.Message != null) { - hashCode = (hashCode * 59) + this.MessageHex.GetHashCode(); + hashCode = (hashCode * 59) + this.Message.GetHashCode(); } return hashCode; } diff --git a/src/RadixDlt.NetworkGateway.PostgresIntegration/GatewayModelExtensions.cs b/src/RadixDlt.NetworkGateway.PostgresIntegration/GatewayModelExtensions.cs index 3ce1eba4b..ec7015c09 100644 --- a/src/RadixDlt.NetworkGateway.PostgresIntegration/GatewayModelExtensions.cs +++ b/src/RadixDlt.NetworkGateway.PostgresIntegration/GatewayModelExtensions.cs @@ -125,14 +125,14 @@ public static GatewayModel.CommittedTransactionInfo ToGatewayModel( string? payloadHashHex = null; string? intentHashHex = null; string? rawHex = null; - string? messageHex = null; + JRaw? message = null; if (lt is UserLedgerTransaction ult) { payloadHashHex = ult.PayloadHash.ToHex(); intentHashHex = ult.IntentHash.ToHex(); rawHex = optIns.RawHex ? ult.RawPayload.ToHex() : null; - messageHex = ult.Message?.ToHex(); + message = new JRaw(ult.Message); } var receipt = new GatewayModel.TransactionReceipt @@ -160,7 +160,7 @@ public static GatewayModel.CommittedTransactionInfo ToGatewayModel( errorMessage: lt.EngineReceipt.ErrorMessage, rawHex: rawHex, receipt: receipt, - messageHex: messageHex + message: message ); } diff --git a/src/RadixDlt.NetworkGateway.PostgresIntegration/LedgerExtension/PostgresLedgerExtenderService.cs b/src/RadixDlt.NetworkGateway.PostgresIntegration/LedgerExtension/PostgresLedgerExtenderService.cs index 597fa532a..cf251fc91 100644 --- a/src/RadixDlt.NetworkGateway.PostgresIntegration/LedgerExtension/PostgresLedgerExtenderService.cs +++ b/src/RadixDlt.NetworkGateway.PostgresIntegration/LedgerExtension/PostgresLedgerExtenderService.cs @@ -522,6 +522,7 @@ private async Task ProcessTransactions(ReadWriteDbContext db PayloadHash = ult.NotarizedTransaction.GetHashBytes(), IntentHash = ult.NotarizedTransaction.SignedIntent.Intent.GetHashBytes(), SignedIntentHash = ult.NotarizedTransaction.SignedIntent.GetHashBytes(), + Message = ult.NotarizedTransaction.SignedIntent.Intent.Message?.ToJson(), }, CoreModel.RoundUpdateLedgerTransaction => new RoundUpdateLedgerTransaction(), _ => throw new UnreachableException(), diff --git a/src/RadixDlt.NetworkGateway.PostgresIntegration/LedgerExtension/WriteHelper.cs b/src/RadixDlt.NetworkGateway.PostgresIntegration/LedgerExtension/WriteHelper.cs index 16b801402..7d8b8c077 100644 --- a/src/RadixDlt.NetworkGateway.PostgresIntegration/LedgerExtension/WriteHelper.cs +++ b/src/RadixDlt.NetworkGateway.PostgresIntegration/LedgerExtension/WriteHelper.cs @@ -179,7 +179,7 @@ public async Task CopyLedgerTransaction(ICollection enti return 0; } - await using var writer = await _connection.BeginBinaryImportAsync("COPY ledger_transactions (state_version, message, epoch, round_in_epoch, index_in_epoch, index_in_round, is_end_of_epoch, fee_paid, tip_paid, affected_global_entities, round_timestamp, created_timestamp, normalized_round_timestamp, raw_payload, receipt_state_updates, receipt_status, receipt_fee_summary, receipt_error_message, receipt_output, receipt_next_epoch, receipt_event_sbors, receipt_event_schema_hashes, receipt_event_type_indexes, receipt_event_sbor_type_kinds, discriminator, payload_hash, intent_hash, signed_intent_hash) FROM STDIN (FORMAT BINARY)", token); + await using var writer = await _connection.BeginBinaryImportAsync("COPY ledger_transactions (state_version, epoch, round_in_epoch, index_in_epoch, index_in_round, is_end_of_epoch, fee_paid, tip_paid, affected_global_entities, round_timestamp, created_timestamp, normalized_round_timestamp, raw_payload, receipt_state_updates, receipt_status, receipt_fee_summary, receipt_error_message, receipt_output, receipt_next_epoch, receipt_event_sbors, receipt_event_schema_hashes, receipt_event_type_indexes, receipt_event_sbor_type_kinds, discriminator, payload_hash, intent_hash, signed_intent_hash, message) FROM STDIN (FORMAT BINARY)", token); foreach (var lt in entities) { @@ -187,7 +187,6 @@ public async Task CopyLedgerTransaction(ICollection enti await writer.StartRowAsync(token); await writer.WriteAsync(lt.StateVersion, NpgsqlDbType.Bigint, token); - await writer.WriteNullableAsync(lt.Message, NpgsqlDbType.Bytea, token); await writer.WriteAsync(lt.Epoch, NpgsqlDbType.Bigint, token); await writer.WriteAsync(lt.RoundInEpoch, NpgsqlDbType.Bigint, token); await writer.WriteAsync(lt.IndexInEpoch, NpgsqlDbType.Bigint, token); @@ -219,16 +218,19 @@ public async Task CopyLedgerTransaction(ICollection enti await writer.WriteNullAsync(token); await writer.WriteNullAsync(token); await writer.WriteNullAsync(token); + await writer.WriteNullAsync(token); break; case UserLedgerTransaction ult: await writer.WriteAsync(ult.PayloadHash, NpgsqlDbType.Bytea, token); await writer.WriteAsync(ult.IntentHash, NpgsqlDbType.Bytea, token); await writer.WriteAsync(ult.SignedIntentHash, NpgsqlDbType.Bytea, token); + await writer.WriteAsync(ult.Message, NpgsqlDbType.Jsonb, token); break; case RoundUpdateLedgerTransaction: await writer.WriteNullAsync(token); await writer.WriteNullAsync(token); await writer.WriteNullAsync(token); + await writer.WriteNullAsync(token); break; default: throw new ArgumentOutOfRangeException(nameof(lt), lt, null); diff --git a/src/RadixDlt.NetworkGateway.PostgresIntegration/Migrations/20230814100026_InitialCreate.Designer.cs b/src/RadixDlt.NetworkGateway.PostgresIntegration/Migrations/20230815125818_InitialCreate.Designer.cs similarity index 99% rename from src/RadixDlt.NetworkGateway.PostgresIntegration/Migrations/20230814100026_InitialCreate.Designer.cs rename to src/RadixDlt.NetworkGateway.PostgresIntegration/Migrations/20230815125818_InitialCreate.Designer.cs index 75e0c7b33..25fa9de65 100644 --- a/src/RadixDlt.NetworkGateway.PostgresIntegration/Migrations/20230814100026_InitialCreate.Designer.cs +++ b/src/RadixDlt.NetworkGateway.PostgresIntegration/Migrations/20230815125818_InitialCreate.Designer.cs @@ -81,7 +81,7 @@ namespace RadixDlt.NetworkGateway.PostgresIntegration.Migrations { [DbContext(typeof(MigrationsDbContext))] - [Migration("20230814100026_InitialCreate")] + [Migration("20230815125818_InitialCreate")] partial class InitialCreate { /// @@ -729,10 +729,6 @@ protected override void BuildTargetModel(ModelBuilder modelBuilder) .HasColumnType("boolean") .HasColumnName("is_end_of_epoch"); - b.Property("Message") - .HasColumnType("bytea") - .HasColumnName("message"); - b.Property("NormalizedRoundTimestamp") .HasColumnType("timestamp with time zone") .HasColumnName("normalized_round_timestamp"); @@ -1844,6 +1840,10 @@ protected override void BuildTargetModel(ModelBuilder modelBuilder) .HasColumnType("bytea") .HasColumnName("intent_hash"); + b.Property("Message") + .HasColumnType("jsonb") + .HasColumnName("message"); + b.Property("PayloadHash") .IsRequired() .HasColumnType("bytea") diff --git a/src/RadixDlt.NetworkGateway.PostgresIntegration/Migrations/20230814100026_InitialCreate.cs b/src/RadixDlt.NetworkGateway.PostgresIntegration/Migrations/20230815125818_InitialCreate.cs similarity index 99% rename from src/RadixDlt.NetworkGateway.PostgresIntegration/Migrations/20230814100026_InitialCreate.cs rename to src/RadixDlt.NetworkGateway.PostgresIntegration/Migrations/20230815125818_InitialCreate.cs index 898578960..93b914611 100644 --- a/src/RadixDlt.NetworkGateway.PostgresIntegration/Migrations/20230814100026_InitialCreate.cs +++ b/src/RadixDlt.NetworkGateway.PostgresIntegration/Migrations/20230815125818_InitialCreate.cs @@ -398,7 +398,6 @@ protected override void Up(MigrationBuilder migrationBuilder) columns: table => new { state_version = table.Column(type: "bigint", nullable: false), - message = table.Column(type: "bytea", nullable: true), epoch = table.Column(type: "bigint", nullable: false), round_in_epoch = table.Column(type: "bigint", nullable: false), index_in_epoch = table.Column(type: "bigint", nullable: false), @@ -424,7 +423,8 @@ protected override void Up(MigrationBuilder migrationBuilder) discriminator = table.Column(type: "ledger_transaction_type", nullable: false), payload_hash = table.Column(type: "bytea", nullable: true), intent_hash = table.Column(type: "bytea", nullable: true), - signed_intent_hash = table.Column(type: "bytea", nullable: true) + signed_intent_hash = table.Column(type: "bytea", nullable: true), + message = table.Column(type: "jsonb", nullable: true) }, constraints: table => { diff --git a/src/RadixDlt.NetworkGateway.PostgresIntegration/Migrations/MigrationsDbContextModelSnapshot.cs b/src/RadixDlt.NetworkGateway.PostgresIntegration/Migrations/MigrationsDbContextModelSnapshot.cs index e2f36e99f..643302519 100644 --- a/src/RadixDlt.NetworkGateway.PostgresIntegration/Migrations/MigrationsDbContextModelSnapshot.cs +++ b/src/RadixDlt.NetworkGateway.PostgresIntegration/Migrations/MigrationsDbContextModelSnapshot.cs @@ -726,10 +726,6 @@ protected override void BuildModel(ModelBuilder modelBuilder) .HasColumnType("boolean") .HasColumnName("is_end_of_epoch"); - b.Property("Message") - .HasColumnType("bytea") - .HasColumnName("message"); - b.Property("NormalizedRoundTimestamp") .HasColumnType("timestamp with time zone") .HasColumnName("normalized_round_timestamp"); @@ -1841,6 +1837,10 @@ protected override void BuildModel(ModelBuilder modelBuilder) .HasColumnType("bytea") .HasColumnName("intent_hash"); + b.Property("Message") + .HasColumnType("jsonb") + .HasColumnName("message"); + b.Property("PayloadHash") .IsRequired() .HasColumnType("bytea") diff --git a/src/RadixDlt.NetworkGateway.PostgresIntegration/Models/LedgerTransaction.cs b/src/RadixDlt.NetworkGateway.PostgresIntegration/Models/LedgerTransaction.cs index d61135089..f021a7f9c 100644 --- a/src/RadixDlt.NetworkGateway.PostgresIntegration/Models/LedgerTransaction.cs +++ b/src/RadixDlt.NetworkGateway.PostgresIntegration/Models/LedgerTransaction.cs @@ -83,9 +83,6 @@ internal abstract class LedgerTransaction [Column("state_version")] public long StateVersion { get; set; } - [Column("message")] - public byte[]? Message { get; set; } - [Column("epoch")] public long Epoch { get; set; } @@ -200,6 +197,9 @@ internal class UserLedgerTransaction : LedgerTransaction /// [Column("signed_intent_hash")] public byte[] SignedIntentHash { get; set; } + + [Column("message", TypeName = "jsonb")] + public string? Message { get; set; } } internal class RoundUpdateLedgerTransaction : LedgerTransaction