Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[CSDK-195] Update Message key parsing #86

Merged
merged 5 commits into from
Dec 18, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 13 additions & 13 deletions Casper.Network.SDK.Test/GlobalStateKeyTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -539,18 +539,18 @@ public void BalanceHoldKeyTest()
[Test]
public void MessageTopicKeyTest()
{
var entityKeyStr = "entity-contract-55d4a6915291da12afded37fa5bc01f0803a2f0faf6acb7ec4c7ca6ab76f3330";
var hashAddr = "55d4a6915291da12afded37fa5bc01f0803a2f0faf6acb7ec4c7ca6ab76f3330";
var topicStr = "5721a6d9d7a9afe5dfdb35276fb823bed0f825350e4d865a5ec0110c380de4e1";
var msgKeyStr = $"message-topic-{entityKeyStr}-{topicStr}";
var msgKeyStr = $"message-topic-{hashAddr}-{topicStr}";

var key = GlobalStateKey.FromString(msgKeyStr);
Assert.IsNotNull(key);
Assert.AreEqual(KeyIdentifier.Message, key.KeyIdentifier);

var messageKey = key as MessageKey;
Assert.IsNotNull(messageKey);
Assert.IsNotNull(messageKey.AddressableEntity);
Assert.AreEqual(entityKeyStr, messageKey.AddressableEntity.ToString().ToLower());
Assert.IsNotNull(messageKey.HashAddr);
Assert.AreEqual(hashAddr, messageKey.HashAddr);
Assert.AreEqual(topicStr, messageKey.TopicHash);
Assert.IsFalse(messageKey.Index.HasValue);
Assert.AreEqual(msgKeyStr, messageKey.ToString().ToLower());
Expand All @@ -560,19 +560,19 @@ public void MessageTopicKeyTest()
[Test]
public void MessageIndexKeyTest()
{
var entityKeyStr = "entity-contract-55d4a6915291da12afded37fa5bc01f0803a2f0faf6acb7ec4c7ca6ab76f3330";
var hashAddr = "55d4a6915291da12afded37fa5bc01f0803a2f0faf6acb7ec4c7ca6ab76f3330";
var topicStr = "5721a6d9d7a9afe5dfdb35276fb823bed0f825350e4d865a5ec0110c380de4e1";
var indexStr = "f";
var msgKeyStr = $"message-{entityKeyStr}-{topicStr}-{indexStr}";
var msgKeyStr = $"message-{hashAddr}-{topicStr}-{indexStr}";

var key = GlobalStateKey.FromString(msgKeyStr);
Assert.IsNotNull(key);
Assert.AreEqual(KeyIdentifier.Message, key.KeyIdentifier);

var messageKey = key as MessageKey;
Assert.IsNotNull(messageKey);
Assert.IsNotNull(messageKey.AddressableEntity);
Assert.AreEqual(entityKeyStr, messageKey.AddressableEntity.ToString().ToLower());
Assert.IsNotNull(messageKey.HashAddr);
Assert.AreEqual(hashAddr, messageKey.HashAddr);
Assert.AreEqual(topicStr, messageKey.TopicHash);
Assert.IsTrue(messageKey.Index.HasValue);
Assert.AreEqual(15, messageKey.Index.Value);
Expand All @@ -592,7 +592,7 @@ public void BidAddrKeyTest()
var bidAddrKey = key as BidAddrKey;
Assert.AreEqual(BidAddrTag.Unified, bidAddrKey.Tag);
Assert.AreEqual("account-hash-2f3fb80d362ad0a922f446915a259c9aaec9ba99292b3e50ff2359c458007309", bidAddrKey.Unified.ToString().ToLower());
Assert.IsNull(bidAddrKey.Delegator);
Assert.IsNull(bidAddrKey.DelegatorAccount);
Assert.AreEqual(0, bidAddrKey.EraId);

}
Expand All @@ -605,7 +605,7 @@ public void BidAddrKeyTest()
var bidAddrKey = key as BidAddrKey;
Assert.AreEqual(BidAddrTag.Validator, bidAddrKey.Tag);
Assert.AreEqual("account-hash-2f3fb80d362ad0a922f446915a259c9aaec9ba99292b3e50ff2359c458007309", bidAddrKey.Validator.ToString().ToLower());
Assert.IsNull(bidAddrKey.Delegator);
Assert.IsNull(bidAddrKey.DelegatorAccount);
Assert.AreEqual(0, bidAddrKey.EraId);
}
{
Expand All @@ -615,9 +615,9 @@ public void BidAddrKeyTest()
Assert.AreEqual(KeyIdentifier.BidAddr, key.KeyIdentifier);

var bidAddrKey = key as BidAddrKey;
Assert.AreEqual(BidAddrTag.Delegator, bidAddrKey.Tag);
Assert.AreEqual(BidAddrTag.DelegatedAccount, bidAddrKey.Tag);
Assert.AreEqual("account-hash-2f3fb80d362ad0a922f446915a259c9aaec9ba99292b3e50ff2359c458007309", bidAddrKey.Validator.ToString().ToLower());
Assert.AreEqual("account-hash-9fa1fc0808d3a5b9ea9f3af4ca7c8c3655568fdf378d8afdf8a7e56e58abbfd4", bidAddrKey.Delegator.ToString().ToLower());
Assert.AreEqual("account-hash-9fa1fc0808d3a5b9ea9f3af4ca7c8c3655568fdf378d8afdf8a7e56e58abbfd4", bidAddrKey.DelegatorAccount.ToString().ToLower());
Assert.AreEqual(0, bidAddrKey.EraId);

}
Expand All @@ -631,7 +631,7 @@ public void BidAddrKeyTest()
var bidAddrKey = key as BidAddrKey;
Assert.AreEqual(BidAddrTag.Credit, bidAddrKey.Tag);
Assert.AreEqual("account-hash-520037cd249ccbcfeb0b9feae07d8d4f7d922cf88adc4f3e8691f9d34ccc8d09", bidAddrKey.Validator.ToString().ToLower());
Assert.IsNull(bidAddrKey.Delegator);
Assert.IsNull(bidAddrKey.DelegatorAccount);
Assert.AreEqual(127, bidAddrKey.EraId);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,7 @@
"deployment": 1,
"upgrade_management": 1,
"key_management": 1
},
"message_topics": []
}
},
"named_keys": [],
"entry_points": []
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,7 @@
"deployment": 1,
"upgrade_management": 1,
"key_management": 1
},
"message_topics": [
{
"topic_name": "events",
"topic_name_hash": "5721a6d9d7a9afe5dfdb35276fb823bed0f825350e4d865a5ec0110c380de4e1"
}
]
}
},
"named_keys": [
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -889,17 +889,7 @@
"deployment": 1,
"upgrade_management": 1,
"key_management": 1
},
"message_topics": [
{
"topic_name": "errors",
"topic_name_hash": "b38b3a8f7a7cb169b9869f1b660e328df63941f4f078d284a0058140375ec7fc"
},
{
"topic_name": "events",
"topic_name_hash": "5721a6d9d7a9afe5dfdb35276fb823bed0f825350e4d865a5ec0110c380de4e1"
}
]
}
}
}
}
Expand Down
2 changes: 1 addition & 1 deletion Casper.Network.SDK.Test/TestData/legacy_transfer_v200.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"api_version": "2.0.0",
"block_header": null,
"stored_value": {
"LegacyTransfer": {
"Transfer": {
"deploy_hash": "cd91f138e82ddce5dfbb99c6bbf3f47caca439b81d7f43702cbebfa99bacbfd0",
"from": "account-hash-87516c22bca9a14179ebbbe646c8f911153fe53626126c1ba24293517c2e04a2",
"to": "account-hash-1265caa7cd80f31f882ab6f5623d89741c77cf3a36a309b54ed55fdc0be227c9",
Expand Down
6 changes: 0 additions & 6 deletions Casper.Network.SDK/Types/AddressableEntity.cs
Original file line number Diff line number Diff line change
Expand Up @@ -167,11 +167,5 @@ public class AddressableEntity
/// </summary>
[JsonPropertyName("action_thresholds")]
public ActionThresholds ActionThresholds { get; init; }

/// <summary>
/// Message topic list for this entity
/// </summary>
[JsonPropertyName("message_topics")]
public List<MessageTopic> MessageTopics { get; init; }
}
}
39 changes: 22 additions & 17 deletions Casper.Network.SDK/Types/GlobalStateKey/MessageKey.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ public class MessageKey : GlobalStateKey
private const string KEY_PREFIX = "message-";
private const string TOPIC_PREFIX = "topic-";

public AddressableEntityKey AddressableEntity { get; init; }
public string HashAddr { get; init; }

public string TopicHash { get; init; }

Expand All @@ -28,24 +28,28 @@ public MessageKey(string key) : base(key)
{
key = key.Substring(TOPIC_PREFIX.Length);
var parts = key.Split('-');
if (parts.Length != 4)
throw new Exception("Key not valid. It should have an entity address and a topic hash.");

AddressableEntity = new AddressableEntityKey($"{parts[0]}-{parts[1]}-{parts[2]}");
TopicHash = parts[3];
if(parts.Length == 2)
{
HashAddr = parts[0];
TopicHash = parts[1];
}
else
throw new Exception("Key not valid. It should have a hash address and a topic hash.");
}
else
{
var parts = key.Split('-');
if (parts.Length != 5)
throw new Exception("Key not valid. It should have an entity address, a topic hash, and a message index.");

AddressableEntity = new AddressableEntityKey($"{parts[0]}-{parts[1]}-{parts[2]}");
TopicHash = parts[3];

if(parts[4].Length == 0)
throw new Exception("Key not valid. Expected a non-empty message index.");
Index = Convert.ToUInt32(parts[4], 16);
if (parts.Length == 3)
{
HashAddr = parts[0];
TopicHash = parts[1];

if(parts[2].Length == 0)
throw new Exception("Key not valid. Expected a non-empty message index.");
Index = Convert.ToUInt32(parts[2], 16);
}
else
throw new Exception("Key not valid. It should have a hash address, a topic hash, and a message index.");
}
}

Expand All @@ -56,7 +60,8 @@ public MessageKey(byte[] key) : base(null)
var ms = new MemoryStream(key);
var reader = new BinaryReader(ms);

AddressableEntity = new AddressableEntityKey(reader);
var hash = reader.ReadBytes(32);
HashAddr = Hex.ToHexString(hash);

var topic = reader.ReadBytes(32);
TopicHash = Hex.ToHexString(topic);
Expand All @@ -67,7 +72,7 @@ public MessageKey(byte[] key) : base(null)

Key = KEY_PREFIX +
(Index.HasValue ? "" : TOPIC_PREFIX) +
AddressableEntity.ToString() + "-" +
HashAddr + "-" +
TopicHash +
(Index.HasValue ? "-" + Index.Value.ToString("x") : "");
}
Expand Down