Skip to content
This repository has been archived by the owner on May 24, 2024. It is now read-only.

Commit

Permalink
fix: revert support for m-strkeys
Browse files Browse the repository at this point in the history
  • Loading branch information
fracek committed May 23, 2020
1 parent e8c8d27 commit 73c0941
Show file tree
Hide file tree
Showing 10 changed files with 18 additions and 271 deletions.
11 changes: 0 additions & 11 deletions stellar-dotnet-sdk-test/AccountTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -39,17 +39,6 @@ public void TestWithStringArgumentIsKeyPair()
Assert.AreEqual(account.KeyPair.AccountId, keypair.AccountId);
}

[TestMethod]
public void TestWithMuxedAccount()
{
var keypair = KeyPair.Random();
var muxed = new MuxedAccountMed25519(keypair, 10);
var account = new Account(muxed, 7);
Assert.AreNotEqual(account.AccountId, keypair.AccountId);
Assert.AreEqual(account.AccountId, muxed.AccountId);
Assert.AreEqual(account.KeyPair.AccountId, keypair.AccountId);
}

[TestMethod]
public void TestGetIncrementedSequenceNumber()
{
Expand Down
15 changes: 7 additions & 8 deletions stellar-dotnet-sdk-test/FeeBumpTransactionTest.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
using System;
using System.Security.Cryptography;
using dotnetstandard_bip32;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using stellar_dotnet_sdk;

Expand Down Expand Up @@ -120,11 +119,12 @@ public void TestFromEnvelopeXdr()
[TestMethod]
public void TestMuxedAccounts()
{
var muxed = new MuxedAccountMed25519(FeeSource, 0);
var tx = TransactionBuilder.BuildFeeBumpTransaction(muxed, InnerTransaction, 100);
var originalXdr =
"AAAABQAAAQAAAAAAAAAAAOBIkbYY5QzL8f2UfKNhk7DK7LK0fzLTBZqhzn3ov5sSAAAAAAAAAMgAAAACAAAAAHN2/eiOTNYcwPspSheGs/HQYfXy8cpXRl+qkyIRuUbWAAAAZAAAAAAAAAAIAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAABAAAAD0hhcHB5IGJpcnRoZGF5IQAAAAABAAAAAAAAAAEAAAAA4EiRthjlDMvx/ZR8o2GTsMrssrR/MtMFmqHOfei/mxIAAAAAAAAABKgXyAAAAAAAAAAAARG5RtYAAABAr3fcOe3WnFeWx/UHkJifzU8vF5izH4yJX0QZsx1R8Rx0NZTJLIiR3Ml5+OlHl6N1dWn8peiwaY1RD4OsgGXODQAAAAAAAAAA";
var tx = TransactionBuilder.FromEnvelopeXdr(originalXdr);
var xdr = tx.ToUnsignedEnvelopeXdr();
var txMuxed = MuxedAccount.FromXdrMuxedAccount(xdr.FeeBump.Tx.FeeSource);
Assert.AreEqual(muxed.Address, txMuxed.Address);
Assert.IsNotNull(txMuxed.Address);
}

[TestMethod]
Expand All @@ -146,23 +146,22 @@ public void TestTransactionHash()
var innerTx = CreateInnerTransaction(100, network);

Assert.AreEqual(
"95dcf35a43a1a05bcd50f3eb148b31127829a9460dc32a17c4a7f7c4677409d4",
"fa21347ad5eafa4d6ef5355184984b12f2ce8d6762c40f4547f70dcddffb9cb1",
Util.BytesToHex(innerTx.Hash(network)).ToLowerInvariant());

var feeSource = KeyPair.FromAccountId("GDQNY3PBOJOKYZSRMK2S7LHHGWZIUISD4QORETLMXEWXBI7KFZZMKTL3");
var feeBumpTx = TransactionBuilder.BuildFeeBumpTransaction(feeSource, innerTx, 200);

Assert.AreEqual(
"382b1588ee8b315177a34ae96ebcaeb81c0ad3e04fee7c6b5a583b826517e1e4",
"76a83f93acad3aaabfbc5d1739192d7f9b6f3707c9cab5a1254e10aaa81a1272",
Util.BytesToHex(feeBumpTx.Hash(network)).ToLowerInvariant());
}

private Transaction CreateInnerTransaction(uint fee, Network network)
{
var source = KeyPair.FromSecretSeed("SCH27VUZZ6UAKB67BDNF6FA42YMBMQCBKXWGMFD5TZ6S5ZZCZFLRXKHS");
var destination =
MuxedAccountMed25519.FromMuxedAccountId(
"MCAAAAAAAAAAAAB7BQ2L7E5NBWMXDUCMZSIPOBKRDSBYVLMXGSSKF6YNPIB7Y77ITKNOG");
KeyPair.FromAccountId("GCRMOGHI75GRWXBBRPFOBMVZ3HZFSEBAEY6JZ7YWV266VCXQOSEUCIWX");
var account = new Account(source, 2908908335136768L);
var innerTx = new TransactionBuilder(account)
.AddOperation(
Expand Down
19 changes: 0 additions & 19 deletions stellar-dotnet-sdk-test/MuxedAccountTest.cs

This file was deleted.

16 changes: 0 additions & 16 deletions stellar-dotnet-sdk-test/ServerCheckMemoRequiredTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -166,22 +166,6 @@ public async Task TestCheckFeeBumpTransaction()
await _server.CheckMemoRequired(tx);
}

[TestMethod]
public async Task TestSkipCheckIfDestinationIsMuxedAccount()
{
var accountId = "GAYHAAKPAQLMGIJYMIWPDWCGUCQ5LAWY4Q7Q3IKSP57O7GUPD3NEOSEA";

var muxed = MuxedAccountMed25519.FromMuxedAccountId(
"MAAAAAAAAAAAJURAAB2X52XFQP6FBXLGT6LWOOWMEXWHEWBDVRZ7V5WH34Y22MPFBHUHY");

var payment = new PaymentOperation
.Builder(muxed, new AssetTypeNative(), "100.500")
.Build();

var tx = BuildTransaction(accountId, new Operation[] { payment }, Memo.None(), skipDefaultOp: true);
await _server.CheckMemoRequired(tx);
}

private string BuildAccountResponse(string accountId, Dictionary<string, string> data = null)
{
var accountData = data ?? new Dictionary<string, string>();
Expand Down
36 changes: 0 additions & 36 deletions stellar-dotnet-sdk-test/StrKeyTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -32,30 +32,6 @@ public void TestDecodeInvalidSeed()
StrKey.DecodeCheck(StrKey.VersionByte.SEED, seed);
}

[TestMethod]
public void TestDecodeEncodeMuxedAccount()
{
var address = "MAAAAAAAAAAAAAB7BQ2L7E5NBWMXDUCMZSIPOBKRDSBYVLMXGSSKF6YNPIB7Y77ITLVL6";
var (id, key) = StrKey.DecodeStellarMuxedAccount(address);
Assert.IsTrue(StrKey.IsValidMuxedAccount(address));
Assert.AreEqual(0UL, id);
var encodedKey = StrKey.EncodeStellarAccountId(key);
Assert.AreEqual("GA7QYNF7SOWQ3GLR2BGMZEHXAVIRZA4KVWLTJJFC7MGXUA74P7UJVSGZ", encodedKey);
Assert.AreEqual(address, StrKey.EncodeStellarMuxedAccount(key, id));
}

[TestMethod]
public void TestDecodeEncodeMuxedAccountWithLargeId()
{
var address = "MCAAAAAAAAAAAAB7BQ2L7E5NBWMXDUCMZSIPOBKRDSBYVLMXGSSKF6YNPIB7Y77ITKNOG";
var (id, key) = StrKey.DecodeStellarMuxedAccount(address);
Assert.IsTrue(StrKey.IsValidMuxedAccount(address));
Assert.AreEqual(9223372036854775808UL, id);
var encodedKey = StrKey.EncodeStellarAccountId(key);
Assert.AreEqual("GA7QYNF7SOWQ3GLR2BGMZEHXAVIRZA4KVWLTJJFC7MGXUA74P7UJVSGZ", encodedKey);
Assert.AreEqual(address, StrKey.EncodeStellarMuxedAccount(key, id));
}

[TestMethod]
public void IsValidEd25519PublicKey()
{
Expand All @@ -79,18 +55,6 @@ public void IsNotValidEd25519PublicKey(string address)
Assert.IsFalse(result);
}

[TestMethod]
//[DataRow("MCAAAAAAAAAAAAB7BQ2L7E5NBWMXDUCMZSIPOBKRDSBYVLMXGSSKF6YNPIB7Y77ITKNOGA", DisplayName = "Invalid length (congruent to 6 mod 8)")]
[DataRow("MAAAAAAAAAAAAAB7BQ2L7E5NBWMXDUCMZSIPOBKRDSBYVLMXGSSKF6YNPIB7Y77ITIADJPA", DisplayName = "Invalid length (base-32 decoding should yield 43 bytes, not 44)")]
[DataRow("M4AAAAAAAAAAAAB7BQ2L7E5NBWMXDUCMZSIPOBKRDSBYVLMXGSSKF6YNPIB7Y77ITIU2K", DisplayName = "Invalid algorithm (low 3 bits of version byte are 7)")]
//[DataRow("MAAAAAAAAAAAAAB7BQ2L7E5NBWMXDUCMZSIPOBKRDSBYVLMXGSSKF6YNPIB7Y77ITLVL6", DisplayName = "Padding bytes are not allowed")]
[DataRow("MAAAAAAAAAAAAAB7BQ2L7E5NBWMXDUCMZSIPOBKRDSBYVLMXGSSKF6YNPIB7Y77ITLVL4", DisplayName = "Invalid checksum")]
public void IsNotValidMuxedAccount(string address)
{
var result = StrKey.IsValidMuxedAccount(address);
Assert.IsFalse(result);
}

[TestMethod]
public void IsValidEd25519SecretSeed()
{
Expand Down
100 changes: 6 additions & 94 deletions stellar-dotnet-sdk-test/TransactionTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -426,80 +426,15 @@ public void TestFromXdrWithMemoId()
[TestMethod]
public void TestTransactionWithMuxedAccount()
{
var network = new Network("Standalone Network ; February 2017");
var source = KeyPair.FromSecretSeed(network.NetworkId);
var txSource = new MuxedAccountMed25519(source, 0);
var account = new Account(txSource, 7);
var destination = KeyPair.FromAccountId("GDQERENWDDSQZS7R7WKHZI3BSOYMV3FSWR7TFUYFTKQ447PIX6NREOJM");
var amount = "2000";
var asset = new AssetTypeNative();
var tx = new TransactionBuilder(account)
.SetFee(100)
.AddTimeBounds(new TimeBounds(0, 0))
.AddOperation(
new PaymentOperation.Builder(destination, asset, amount).Build())
.AddMemo(new MemoText("Happy birthday!"))
.Build();
var originalXdr =
"AAAAAgAAAQAAAAAAAAAAAHN2/eiOTNYcwPspSheGs/HQYfXy8cpXRl+qkyIRuUbWAAAAZAAAAAAAAAAIAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAABAAAAD0hhcHB5IGJpcnRoZGF5IQAAAAABAAAAAAAAAAEAAAAA4EiRthjlDMvx/ZR8o2GTsMrssrR/MtMFmqHOfei/mxIAAAAAAAAABKgXyAAAAAAAAAAAAA==";
var tx = Transaction.FromEnvelopeXdr(originalXdr);
var xdr = tx.ToUnsignedEnvelopeXdrBase64(TransactionBase.TransactionXdrVersion.V1);
Assert.AreEqual(originalXdr, xdr);
var back = TransactionBuilder.FromEnvelopeXdr(xdr) as Transaction;
Assert.IsNotNull(back);
Assert.AreEqual(txSource.Address, back.SourceAccount.Address);
}

[TestMethod]
public void TestSignatureBaseNoNetwork()
{
var network = new Network("Standalone Network ; February 2017");
var source = KeyPair.FromSecretSeed(network.NetworkId);
var txSource = new MuxedAccountMed25519(source, 0);
var account = new Account(txSource, 7);
var destination = KeyPair.FromAccountId("GDQERENWDDSQZS7R7WKHZI3BSOYMV3FSWR7TFUYFTKQ447PIX6NREOJM");
var amount = "2000";
var asset = new AssetTypeNative();
var tx = new TransactionBuilder(account)
.SetFee(100)
.AddTimeBounds(new TimeBounds(0, 0))
.AddOperation(
new PaymentOperation.Builder(destination, asset, amount).Build())
.AddMemo(new MemoText("Happy birthday!"))
.Build();

try
{
tx.SignatureBase(null);
}
catch (Exception e)
{
Assert.IsNotNull(e);
}
}

[TestMethod]
public void TestToXdrWithMuxedAccount()
{
var network = new Network("Standalone Network ; February 2017");
var source = KeyPair.FromSecretSeed(network.NetworkId);
var txSource = new MuxedAccountMed25519(source, 0);
var account = new Account(txSource, 7);
var destination = KeyPair.FromAccountId("GDQERENWDDSQZS7R7WKHZI3BSOYMV3FSWR7TFUYFTKQ447PIX6NREOJM");
var amount = "2000";
var asset = new AssetTypeNative();
var tx = new TransactionBuilder(account)
.SetFee(100)
.AddTimeBounds(new TimeBounds(0, 0))
.AddOperation(
new PaymentOperation.Builder(destination, asset, amount).Build())
.AddMemo(new MemoText("Happy birthday!"))
.Build();

try
{
tx.ToXdr();
}
catch (Exception e)
{
Assert.AreEqual(e.Message, "TransactionEnvelope V0 expects a KeyPair source account");
}
Assert.AreEqual(tx.SourceAccount.Address, back.SourceAccount.Address);
CollectionAssert.AreEqual(tx.SourceAccount.PublicKey, back.SourceAccount.PublicKey);
}

[TestMethod]
Expand Down Expand Up @@ -531,28 +466,5 @@ public void TestToUnsignedEnvelopeXdrWithSignatures()
Assert.AreEqual(e.Message, "Transaction must not be signed. Use ToEnvelopeXDR.");
}
}

[TestMethod]
public void TestTransactionFeeOverflow()
{
var source = KeyPair.Random();
var txSource = new MuxedAccountMed25519(source, 0);
var account = new Account(txSource, 7);
var destination = KeyPair.FromAccountId("GDQERENWDDSQZS7R7WKHZI3BSOYMV3FSWR7TFUYFTKQ447PIX6NREOJM");
var amount = "2000";
var asset = new AssetTypeNative();
Assert.ThrowsException<OverflowException>(() =>
{
var tx = new TransactionBuilder(account)
.SetFee(UInt32.MaxValue)
.AddTimeBounds(new TimeBounds(0, 0))
.AddOperation(
new PaymentOperation.Builder(destination, asset, amount).Build())
.AddOperation(
new PaymentOperation.Builder(destination, asset, amount).Build())
.Build();

});
}
}
}
23 changes: 0 additions & 23 deletions stellar-dotnet-sdk-test/WebAuthenticationTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -55,29 +55,6 @@ public void TestBuildChallengeTransactionWithOptions()
CheckOperation(back, clientAccountId.Address);
}

[TestMethod]
public void TestBuildChallengeTransactionFailsWithMuxedAccount()
{
var serverKeypair = KeyPair.Random();
var clientAccountId =
MuxedAccountMed25519.FromMuxedAccountId(
"MAAAAAAAAAAAJURAAB2X52XFQP6FBXLGT6LWOOWMEXWHEWBDVRZ7V5WH34Y22MPFBHUHY");
var anchorName = "NET";

var nonce = new byte[48];
Array.Clear(nonce, 0, nonce.Length);

var now = new DateTimeOffset();
var duration = TimeSpan.FromMinutes(10.0);

Assert.ThrowsException<InvalidWebAuthenticationException>(() =>
{
var tx = WebAuthentication
.BuildChallengeTransaction(serverKeypair, clientAccountId.Address, anchorName, nonce, now, duration,
Network.Test());
});
}

[TestMethod]
public void TestVerifyChallengeTransactionReturnsTrueForValidTransaction()
{
Expand Down
4 changes: 2 additions & 2 deletions stellar-dotnet-sdk-test/stellar-dotnet-sdk-test.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -248,8 +248,8 @@
<None Update="testdata\transactionPage.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Update="testdata\transactionFeeBump.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<None Update="testdata\transactionFeeBump.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Update="testdata\transactionTransaction.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
Expand Down
18 changes: 3 additions & 15 deletions stellar-dotnet-sdk/MuxedAccountMed25519.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ public class MuxedAccountMed25519 : IAccountId
/// </summary>
/// <param name="key"></param>
/// <param name="id"></param>
public MuxedAccountMed25519(KeyPair key, ulong id)
internal MuxedAccountMed25519(KeyPair key, ulong id)
{
Id = id;
Key = key ?? throw new ArgumentNullException(nameof(key));
Expand All @@ -26,25 +26,13 @@ public MuxedAccountMed25519(KeyPair key, ulong id)
/// </summary>
/// <param name="muxed"></param>
/// <returns></returns>
public static MuxedAccountMed25519 FromMuxedAccountXdr(xdr.MuxedAccount.MuxedAccountMed25519 muxed)
internal static MuxedAccountMed25519 FromMuxedAccountXdr(xdr.MuxedAccount.MuxedAccountMed25519 muxed)
{
var innerKey = KeyPair.FromPublicKey(muxed.Ed25519.InnerValue);
var id = muxed.Id.InnerValue;
return new MuxedAccountMed25519(innerKey, id);
}

/// <summary>
/// Create a new MuxedAccountMed25519 from an account id in the format "M...".
/// </summary>
/// <param name="muxedAccountId"></param>
/// <returns></returns>
public static MuxedAccountMed25519 FromMuxedAccountId(string muxedAccountId)
{
var (id, data) = StrKey.DecodeStellarMuxedAccount(muxedAccountId);
var key = KeyPair.FromPublicKey(data);
return new MuxedAccountMed25519(key, id);
}

/// <summary>
/// Get the xdr MuxedAccount.
/// </summary>
Expand All @@ -67,7 +55,7 @@ public xdr.MuxedAccount MuxedAccount
/// <summary>
/// Get the MuxedAccount address, starting with M.
/// </summary>
public string Address => StrKey.EncodeStellarMuxedAccount(Key.PublicKey, Id);
public string Address => StrKey.EncodeStellarAccountId(Key.PublicKey);

/// <summary>
/// Get the MuxedAccount account id, starting with M.
Expand Down
Loading

0 comments on commit 73c0941

Please sign in to comment.