Skip to content
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
143 changes: 143 additions & 0 deletions Casper.Network.SDK.Test/TransactionBuilder/ProtocolVersionMajor.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,143 @@
using System.Collections.Generic;
using System.Text.Json;
using Casper.Network.SDK.Types;
using NUnit.Framework;

namespace NetCasperTest.TransactionBuilder
{
public class ProtocolVersionMajor
{
[Test]
public void ByPackageHashNoVersionTest()
{
var testKey = KeyPair.CreateNew(KeyAlgo.SECP256K1);
var runtimeArgs = new List<NamedArg>();

var transaction = new Transaction.ContractCallBuilder()
.From(testKey.PublicKey)
.Payment(2_500_000_000, 2)
.ChainName("chain_name")
.ByPackageHash("0101010101010101010101010101010101010101010101010101010101010101")
.EntryPoint("counter_inc")
.RuntimeArgs(runtimeArgs)
.Build();

var txv1 = (TransactionV1)transaction;
var target = txv1.Payload.Target as StoredTransactionV1Target;
var invocationTarget = target.Id as ByPackageHashInvocationTarget;
Assert.AreEqual("0101010101010101010101010101010101010101010101010101010101010101", invocationTarget.Hash);
Assert.AreEqual(null, invocationTarget.Version);
Assert.AreEqual(null, invocationTarget.ProtocolVersionMajor);
}

[Test]
public void ByPackageHashWithVersionTest()
{
var testKey = KeyPair.CreateNew(KeyAlgo.SECP256K1);
var runtimeArgs = new List<NamedArg>();

var transaction = new Transaction.ContractCallBuilder()
.From(testKey.PublicKey)
.Payment(2_500_000_000, 2)
.ChainName("chain_name")
.ByPackageHash("0101010101010101010101010101010101010101010101010101010101010101", null, 2)
// .ByPackageName("counter_package_name", 1, 1)
.EntryPoint("counter_inc")
.RuntimeArgs(runtimeArgs)
.Build();

var txv1 = (TransactionV1)transaction;
var target = txv1.Payload.Target as StoredTransactionV1Target;
var invocationTarget = target.Id as ByPackageHashInvocationTarget;
Assert.AreEqual("0101010101010101010101010101010101010101010101010101010101010101", invocationTarget.Hash);
Assert.AreEqual(null, invocationTarget.Version);
Assert.AreEqual(2, invocationTarget.ProtocolVersionMajor);
}

[Test]
public void ByPackageNameNoVersionTest()
{
var testKey = KeyPair.CreateNew(KeyAlgo.SECP256K1);
var runtimeArgs = new List<NamedArg>();

var transaction = new Transaction.ContractCallBuilder()
.From(testKey.PublicKey)
.Payment(2_500_000_000, 2)
.ChainName("chain_name")
.ByPackageName("counter_package_name")
.EntryPoint("counter_inc")
.RuntimeArgs(runtimeArgs)
.Build();

var txv1 = (TransactionV1)transaction;
var target = txv1.Payload.Target as StoredTransactionV1Target;
var invocationTarget = target.Id as ByPackageNameInvocationTarget;
Assert.AreEqual("counter_package_name", invocationTarget.Name);
Assert.AreEqual(null, invocationTarget.Version);
Assert.AreEqual(null, invocationTarget.ProtocolVersionMajor);
}

[Test]
public void ByPackageNameWithVersionTest()
{
var testKey = KeyPair.CreateNew(KeyAlgo.SECP256K1);
var runtimeArgs = new List<NamedArg>();

var transaction = new Transaction.ContractCallBuilder()
.From(testKey.PublicKey)
.Payment(2_500_000_000, 2)
.ChainName("chain_name")
.ByPackageName("counter_package_name", 1, 2)
.EntryPoint("counter_inc")
.RuntimeArgs(runtimeArgs)
.Build();

var txv1 = (TransactionV1)transaction;
var target = txv1.Payload.Target as StoredTransactionV1Target;
var invocationTarget = target.Id as ByPackageNameInvocationTarget;
Assert.AreEqual("counter_package_name", invocationTarget.Name);
Assert.AreEqual(1, invocationTarget.Version);
Assert.AreEqual(2, invocationTarget.ProtocolVersionMajor);
}

[Test]
public void ByPackageNameNoVersionJsonTest()
{
var testKey = KeyPair.CreateNew(KeyAlgo.SECP256K1);
var runtimeArgs = new List<NamedArg>();

var transaction = new Transaction.ContractCallBuilder()
.From(testKey.PublicKey)
.Payment(2_500_000_000, 2)
.ChainName("chain_name")
.ByPackageName("counter_package_name")
.EntryPoint("counter_inc")
.RuntimeArgs(runtimeArgs)
.Build();

var json = JsonSerializer.Serialize(transaction);
Assert.IsNotNull(json);
Assert.IsFalse(json.Contains("protocol_version_major"));
}

[Test]
public void ByPackageNameWithVersionJsonTest()
{
var testKey = KeyPair.CreateNew(KeyAlgo.SECP256K1);
var runtimeArgs = new List<NamedArg>();

var transaction = new Transaction.ContractCallBuilder()
.From(testKey.PublicKey)
.Payment(2_500_000_000, 2)
.ChainName("chain_name")
.ByPackageName("counter_package_name", 1, 2)
.EntryPoint("counter_inc")
.RuntimeArgs(runtimeArgs)
.Build();

var json = JsonSerializer.Serialize(transaction);
Assert.IsNotNull(json);
Assert.IsTrue(json.Contains("\"protocol_version_major\":2"));
}
}
}
8 changes: 4 additions & 4 deletions Casper.Network.SDK/Types/TransactionBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -581,15 +581,15 @@ public ContractCallBuilder ByName(string name)
return this;
}

public ContractCallBuilder ByPackageHash(string contractHash, UInt32? version = null)
public ContractCallBuilder ByPackageHash(string contractPackageHash, UInt32? version = null, UInt32? protocolVersionMajor = null)
{
_invocationTarget = TransactionV1Target.StoredByPackageHash(contractHash, version);
_invocationTarget = TransactionV1Target.StoredByPackageHash(contractPackageHash, version, protocolVersionMajor);
return this;
}

public ContractCallBuilder ByPackageName(string name, UInt32? version = null)
public ContractCallBuilder ByPackageName(string packageName, UInt32? version = null, UInt32? protocolVersionMajor = null)
{
_invocationTarget = TransactionV1Target.StoredByPackageName(name, version);
_invocationTarget = TransactionV1Target.StoredByPackageName(packageName, version, protocolVersionMajor);
return this;
}

Expand Down
39 changes: 30 additions & 9 deletions Casper.Network.SDK/Types/TransactionV1Target.cs
Original file line number Diff line number Diff line change
Expand Up @@ -55,21 +55,31 @@ public class ByPackageHashInvocationTarget : IInvocationTarget
[JsonPropertyName("addr")] public string Hash { get; init; }

[JsonPropertyName("version")] public UInt32? Version { get; init; }

[JsonPropertyName("protocol_version_major")]
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
public UInt32? ProtocolVersionMajor { get; init; }

const ushort TAG_FIELD_INDEX = 0;
const byte BY_PACKAGE_HASH_VARIANT = 2;
const ushort BY_PACKAGE_HASH_ADDR_INDEX = 1;
const ushort BY_PACKAGE_HASH_VERSION_INDEX = 2;
const ushort BY_PACKAGE_HASH_PROTOCOL_VERSION_MAJOR_INDEX = 3;

public byte[] ToBytes()
{
return new CalltableSerialization()
var calltable = new CalltableSerialization()
.AddField(TAG_FIELD_INDEX, new byte[] { BY_PACKAGE_HASH_VARIANT })
.AddField(BY_PACKAGE_HASH_ADDR_INDEX, Hex.Decode(Hash))
.AddField(BY_PACKAGE_HASH_VERSION_INDEX, Version.HasValue
? CLValue.Option(CLValue.U32(Version.Value))
: CLValue.OptionNone(CLType.U32))
.GetBytes();
: CLValue.OptionNone(CLType.U32));

if (ProtocolVersionMajor.HasValue)
calltable.AddField(BY_PACKAGE_HASH_PROTOCOL_VERSION_MAJOR_INDEX,
CLValue.U32(ProtocolVersionMajor.Value));

return calltable.GetBytes();
}
}

Expand All @@ -78,20 +88,31 @@ public class ByPackageNameInvocationTarget : IInvocationTarget
[JsonPropertyName("name")] public string Name { get; init; }

[JsonPropertyName("version")] public UInt32? Version { get; init; }

[JsonPropertyName("protocol_version_major")]
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
public UInt32? ProtocolVersionMajor { get; init; }

const ushort TAG_FIELD_INDEX = 0;
const byte BY_PACKAGE_NAME_VARIANT = 3;
const ushort BY_PACKAGE_NAME_NAME_INDEX = 1;
const ushort BY_PACKAGE_NAME_VERSION_INDEX = 2;
const ushort BY_PACKAGE_HASH_PROTOCOL_VERSION_MAJOR_INDEX = 3;

public byte[] ToBytes()
{
return new CalltableSerialization()
var calltable = new CalltableSerialization()
.AddField(TAG_FIELD_INDEX, new byte[] { BY_PACKAGE_NAME_VARIANT })
.AddField(BY_PACKAGE_NAME_NAME_INDEX, CLValue.String(Name))
.AddField(BY_PACKAGE_NAME_VERSION_INDEX, Version.HasValue
? CLValue.Option(CLValue.U32(Version.Value))
: CLValue.OptionNone(CLType.U32)).GetBytes();
: CLValue.OptionNone(CLType.U32));

if (ProtocolVersionMajor.HasValue)
calltable.AddField(BY_PACKAGE_HASH_PROTOCOL_VERSION_MAJOR_INDEX,
CLValue.U32(ProtocolVersionMajor.Value));

return calltable.GetBytes();
}
}

Expand Down Expand Up @@ -353,19 +374,19 @@ public static StoredTransactionV1Target StoredByName(string name)
};
}

public static StoredTransactionV1Target StoredByPackageHash(string packageHash, UInt32? version = null)
public static StoredTransactionV1Target StoredByPackageHash(string packageHash, UInt32? version = null, UInt32? protocolVersionMajor = null)
{
return new StoredTransactionV1Target()
{
Id = new ByPackageHashInvocationTarget { Hash = packageHash, Version = version },
Id = new ByPackageHashInvocationTarget { Hash = packageHash, Version = version, ProtocolVersionMajor = protocolVersionMajor },
};
}

public static StoredTransactionV1Target StoredByPackageName(string name, UInt32? version = null)
public static StoredTransactionV1Target StoredByPackageName(string name, UInt32? version = null, UInt32? protocolVersionMajor = null)
{
return new StoredTransactionV1Target()
{
Id = new ByPackageNameInvocationTarget() { Name = name, Version = version },
Id = new ByPackageNameInvocationTarget() { Name = name, Version = version, ProtocolVersionMajor = protocolVersionMajor },
};
}

Expand Down
Loading