Skip to content

Commit

Permalink
Merge pull request #86 from make-software/feat-2-0/csdk-195
Browse files Browse the repository at this point in the history
[CSDK-195] Update Message key parsing
  • Loading branch information
davidatwhiletrue authored Dec 18, 2024
2 parents dfe862c + b2a88a5 commit aeeece5
Show file tree
Hide file tree
Showing 7 changed files with 39 additions and 57 deletions.
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

0 comments on commit aeeece5

Please sign in to comment.