本文整理汇总了C#中Transaction.Clone方法的典型用法代码示例。如果您正苦于以下问题:C# Transaction.Clone方法的具体用法?C# Transaction.Clone怎么用?C# Transaction.Clone使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Transaction
的用法示例。
在下文中一共展示了Transaction.Clone方法的7个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: CanSignTransaction
public void CanSignTransaction()
{
var key = new Key();
var scriptPubKey = PayToPubkeyHashTemplate.Instance.GenerateScriptPubKey(key.PubKey);
Transaction tx = new Transaction();
tx.AddInput(new TxIn(new OutPoint(tx.GetHash(), 0))
{
ScriptSig = scriptPubKey
});
tx.AddInput(new TxIn(new OutPoint(tx.GetHash(), 1))
{
ScriptSig = scriptPubKey
});
tx.AddOutput(new TxOut("21", key.PubKey.Hash));
var clone = tx.Clone();
tx.Sign(key, false);
AssertCorrectlySigned(tx, scriptPubKey);
clone.Sign(key, true);
AssertCorrectlySigned(clone, scriptPubKey.Hash.ScriptPubKey);
}
示例2: CheckWithFlag
void CheckWithFlag(Transaction output, Transaction input, ScriptVerify flags, bool success)
{
Transaction inputi = input.Clone();
ScriptEvaluationContext ctx = new ScriptEvaluationContext();
ctx.ScriptVerify = flags;
bool ret = ctx.VerifyScript(inputi.Inputs[0].ScriptSig, output.Outputs[0].ScriptPubKey, new TransactionChecker(inputi, 0, output.Outputs[0].Value));
Assert.True(ret == success);
}
示例3: CreateCreditAndSpend
void CreateCreditAndSpend(CKeyStore keystore, Script outscript, ref Transaction output, ref Transaction input, bool success = true)
{
Transaction outputm = new Transaction();
outputm.Version = 1;
outputm.Inputs.Add(new TxIn());
outputm.Inputs[0].PrevOut = new OutPoint();
outputm.Inputs[0].ScriptSig = Script.Empty;
outputm.Inputs[0].WitScript = new WitScript();
outputm.Outputs.Add(new TxOut());
outputm.Outputs[0].Value = Money.Satoshis(1);
outputm.Outputs[0].ScriptPubKey = outscript;
output = outputm.Clone();
Assert.True(output.Inputs.Count == 1);
Assert.True(output.Inputs[0].ToBytes().SequenceEqual(outputm.Inputs[0].ToBytes()));
Assert.True(output.Outputs.Count == 1);
Assert.True(output.Inputs[0].ToBytes().SequenceEqual(outputm.Inputs[0].ToBytes()));
Assert.True(!output.HasWitness);
Transaction inputm = new Transaction();
inputm.Version = 1;
inputm.Inputs.Add(new TxIn());
inputm.Inputs[0].PrevOut.Hash = output.GetHash();
inputm.Inputs[0].PrevOut.N = 0;
inputm.Inputs[0].WitScript = new WitScript();
inputm.Outputs.Add(new TxOut());
inputm.Outputs[0].Value = Money.Satoshis(1);
inputm.Outputs[0].ScriptPubKey = Script.Empty;
bool ret = SignSignature(keystore, output, inputm, 0);
Assert.True(ret == success);
input = inputm.Clone();
Assert.True(input.Inputs.Count == 1);
Assert.True(input.Inputs[0].ToBytes().SequenceEqual(inputm.Inputs[0].ToBytes()));
Assert.True(input.Outputs.Count == 1);
Assert.True(input.Outputs[0].ToBytes().SequenceEqual(inputm.Outputs[0].ToBytes()));
if(!inputm.HasWitness)
{
Assert.True(!input.HasWitness);
}
else
{
Assert.True(input.HasWitness);
Assert.True(input.Inputs[0].WitScript.ToBytes().SequenceEqual(inputm.Inputs[0].WitScript.ToBytes()));
}
}
示例4: CanUseLockTime
public void CanUseLockTime()
{
var tx = new Transaction();
tx.LockTime = new LockTime(4);
var clone = tx.Clone();
Assert.Equal(tx.LockTime, clone.LockTime);
Assert.Equal("Height : 0", new LockTime().ToString());
Assert.Equal(3, (int)new LockTime(3));
Assert.Equal((uint)3, (uint)new LockTime(3));
Assert.Throws<InvalidOperationException>(() => (DateTimeOffset)new LockTime(3));
var now = DateTimeOffset.UtcNow;
Assert.Equal("Date : " + now, new LockTime(now).ToString());
Assert.Equal((int)Utils.DateTimeToUnixTime(now), (int)new LockTime(now));
Assert.Equal(Utils.DateTimeToUnixTime(now), (uint)new LockTime(now));
Assert.Equal(now.ToString(), ((DateTimeOffset)new LockTime(now)).ToString());
}
示例5: CanPartiallySignTransaction
//https://gist.github.com/gavinandresen/3966071
public void CanPartiallySignTransaction()
{
var privKeys = new[]{"5JaTXbAUmfPYZFRwrYaALK48fN6sFJp4rHqq2QSXs8ucfpE4yQU",
"5Jb7fCeh1Wtm4yBBg3q3XbT6B525i17kVhy3vMC9AqfR6FH2qGk",
"5JFjmGo5Fww9p8gvx48qBYDJNAzR9pmH5S389axMtDyPT8ddqmw"}
.Select(k => new BitcoinSecret(k).PrivateKey).ToArray();
//First: combine the three keys into a multisig address
var redeem = PayToMultiSigTemplate.Instance.GenerateScriptPubKey(2, privKeys.Select(k => k.PubKey).ToArray());
var scriptAddress = redeem.Hash.GetAddress(Network.Main);
Assert.Equal("3QJmV3qfvL9SuYo34YihAf3sRCW3qSinyC", scriptAddress.ToString());
// Next, create a transaction to send funds into that multisig. Transaction d6f72... is
// an unspent transaction in my wallet (which I got from the 'listunspent' RPC call):
// Taken from example
var fundingTransaction = Transaction.Parse("010000000189632848f99722915727c5c75da8db2dbf194342a0429828f66ff88fab2af7d6000000008b483045022100abbc8a73fe2054480bda3f3281da2d0c51e2841391abd4c09f4f908a2034c18d02205bc9e4d68eafb918f3e9662338647a4419c0de1a650ab8983f1d216e2a31d8e30141046f55d7adeff6011c7eac294fe540c57830be80e9355c83869c9260a4b8bf4767a66bacbd70b804dc63d5beeb14180292ad7f3b083372b1d02d7a37dd97ff5c9effffffff0140420f000000000017a914f815b036d9bbbce5e9f2a00abd1bf3dc91e955108700000000");
// Create the spend-from-multisig transaction. Since the fund-the-multisig transaction
// hasn't been sent yet, I need to give txid, scriptPubKey and redeemScript:
var spendTransaction = new Transaction();
spendTransaction.Inputs.Add(new TxIn()
{
PrevOut = new OutPoint(fundingTransaction.GetHash(), 0),
});
spendTransaction.Outputs.Add(new TxOut()
{
Value = "0.01000000",
ScriptPubKey = new Script("OP_DUP OP_HASH160 ae56b4db13554d321c402db3961187aed1bbed5b OP_EQUALVERIFY OP_CHECKSIG")
});
spendTransaction.Inputs[0].ScriptSig = redeem; //The redeem should be in the scriptSig before signing
var partiallySigned = spendTransaction.Clone();
//... Now I can partially sign it using one private key:
partiallySigned.Sign(privKeys[0], true);
//the other private keys (note the "hex" result getting longer):
partiallySigned.Sign(privKeys[1], true);
AssertCorrectlySigned(partiallySigned, fundingTransaction.Outputs[0].ScriptPubKey, allowHighS);
//Verify the transaction from the gist is also correctly signed
var gistTransaction = Transaction.Parse("0100000001aca7f3b45654c230e0886a57fb988c3044ef5e8f7f39726d305c61d5e818903c00000000fd5d010048304502200187af928e9d155c4b1ac9c1c9118153239aba76774f775d7c1f9c3e106ff33c0221008822b0f658edec22274d0b6ae9de10ebf2da06b1bbdaaba4e50eb078f39e3d78014730440220795f0f4f5941a77ae032ecb9e33753788d7eb5cb0c78d805575d6b00a1d9bfed02203e1f4ad9332d1416ae01e27038e945bc9db59c732728a383a6f1ed2fb99da7a4014cc952410491bba2510912a5bd37da1fb5b1673010e43d2c6d812c514e91bfa9f2eb129e1c183329db55bd868e209aac2fbc02cb33d98fe74bf23f0c235d6126b1d8334f864104865c40293a680cb9c020e7b1e106d8c1916d3cef99aa431a56d253e69256dac09ef122b1a986818a7cb624532f062c1d1f8722084861c5c3291ccffef4ec687441048d2455d2403e08708fc1f556002f1b6cd83f992d085097f9974ab08a28838f07896fbab08f39495e15fa6fad6edbfb1e754e35fa1c7844c41f322a1863d4621353aeffffffff0140420f00000000001976a914ae56b4db13554d321c402db3961187aed1bbed5b88ac00000000");
AssertCorrectlySigned(gistTransaction, fundingTransaction.Outputs[0].ScriptPubKey, allowHighS); //One sig in the hard code tx is high
//Can sign out of order
partiallySigned = spendTransaction.Clone();
partiallySigned.Sign(privKeys[2], true);
partiallySigned.Sign(privKeys[0], true);
AssertCorrectlySigned(partiallySigned, fundingTransaction.Outputs[0].ScriptPubKey);
//Can sign multiple inputs
partiallySigned = spendTransaction.Clone();
partiallySigned.Inputs.Add(new TxIn()
{
PrevOut = new OutPoint(fundingTransaction.GetHash(), 1),
});
partiallySigned.Inputs[1].ScriptSig = redeem; //The redeem should be in the scriptSig before signing
partiallySigned.Sign(privKeys[2], true);
partiallySigned.Sign(privKeys[0], true);
}
示例6: AssertClone
private Transaction AssertClone(Transaction before)
{
Transaction after = before.Clone();
Transaction after2 = null;
MemoryStream ms = new MemoryStream();
BitcoinStream stream = new BitcoinStream(ms, true);
stream.TransactionOptions = TransactionOptions.None;
stream.ReadWrite(before);
ms.Position = 0;
stream = new BitcoinStream(ms, false);
stream.TransactionOptions = TransactionOptions.Witness;
stream.ReadWrite(ref after2);
Assert.Equal(after2.GetHash(), after.GetHash());
Assert.Equal(before.GetHash(), after.GetHash());
return after;
}
示例7: TryProhibitedOperations
private static void TryProhibitedOperations(Transaction tx, Guid expectedPromoterType)
{
// First make sure that we can do a simple clone. This should be allowed.
tx.Clone();
try
{
Trace("Attempting TransactionInterop.GetDtcTransaction");
TransactionInterop.GetDtcTransaction(tx);
throw new Exception("TransactionInterop.GetDtcTransaction unexpectedly succeeded.");
}
catch (TransactionPromotionException ex)
{
if (TxPromoterType(tx) != expectedPromoterType)
{
Trace(string.Format("Exception {0} occurred, but transaction has an unexpected PromoterType of {1}", ex.ToString(), TxPromoterType(tx)));
throw new Exception(string.Format("Exception {0} occurred, but transaction has an unexpected PromoterType of {1}", ex.ToString(), TxPromoterType(tx)));
}
}
try
{
Trace("Attempting TransactionInterop.GetExportCookie");
byte[] dummyWhereabouts = new byte[1];
TransactionInterop.GetExportCookie(tx, dummyWhereabouts);
throw new Exception("TransactionInterop.GetExportCookie unexpectedly succeeded.");
}
catch (TransactionPromotionException ex)
{
if (TxPromoterType(tx) != expectedPromoterType)
{
Trace(string.Format("Exception {0} occurred, but transaction has an unexpected PromoterType of {1}", ex.ToString(), TxPromoterType(tx)));
throw new Exception(string.Format("Exception {0} occurred, but transaction has an unexpected PromoterType of {1}", ex.ToString(), TxPromoterType(tx)));
}
}
try
{
Trace("Attempting TransactionInterop.GetTransmitterPropagationToken");
byte[] dummyWhereabouts = new byte[1];
TransactionInterop.GetTransmitterPropagationToken(tx);
throw new Exception("TransactionInterop.GetTransmitterPropagationToken unexpectedly succeeded.");
}
catch (TransactionPromotionException ex)
{
if (TxPromoterType(tx) != expectedPromoterType)
{
Trace(string.Format("Exception {0} occurred, but transaction has an unexpected PromoterType of {1}", ex.ToString(), TxPromoterType(tx)));
throw new Exception(string.Format("Exception {0} occurred, but transaction has an unexpected PromoterType of {1}", ex.ToString(), TxPromoterType(tx)));
}
}
try
{
Trace("Attempting EnlistDurable");
DummyDurableEnlistment enlistment = new DummyDurableEnlistment();
tx.EnlistDurable(new Guid("611653C3-8536-4158-A990-00A8EE08B195"), enlistment, EnlistmentOptions.None);
throw new Exception("EnlistDurable unexpectedly succeeded.");
}
catch (TransactionPromotionException ex)
{
if (TxPromoterType(tx) != expectedPromoterType)
{
Trace(string.Format("Exception {0} occurred, but transaction has an unexpected PromoterType of {1}", ex.ToString(), TxPromoterType(tx)));
throw new Exception(string.Format("Exception {0} occurred, but transaction has an unexpected PromoterType of {1}", ex.ToString(), TxPromoterType(tx)));
}
}
try
{
Trace("Attempting EnlistDurableSPC");
DummyDurableEnlistmentSPC enlistment = new DummyDurableEnlistmentSPC();
tx.EnlistDurable(new Guid("611653C3-8536-4158-A990-00A8EE08B195"), enlistment, EnlistmentOptions.None);
throw new Exception("EnlistDurableSPC unexpectedly succeeded.");
}
catch (TransactionPromotionException ex)
{
if (TxPromoterType(tx) != expectedPromoterType)
{
Trace(string.Format("Exception {0} occurred, but transaction has an unexpected PromoterType of {1}", ex.ToString(), TxPromoterType(tx)));
throw new Exception(string.Format("Exception {0} occurred, but transaction has an unexpected PromoterType of {1}", ex.ToString(), TxPromoterType(tx)));
}
}
// TODO #9582: Uncomment once IFormatter and BinaryFormatter are available in .NET Core
//try
//{
// MemoryStream txStream = new MemoryStream();
// IFormatter formatter = new BinaryFormatter();
// formatter.Serialize(txStream, tx);
// throw new Exception("Serialize of transaction unexpectedly succeeded.");
//}
//catch (TransactionPromotionException ex)
//{
// if (TxPromoterType(tx) != expectedPromoterType)
// {
// Trace(string.Format("Exception {0} occurred, but transaction has an unexpected PromoterType of {1}", ex.ToString(), TxPromoterType(tx)));
// throw new Exception(string.Format("Exception {0} occurred, but transaction has an unexpected PromoterType of {1}", ex.ToString(), TxPromoterType(tx)));
// }
//}
//.........这里部分代码省略.........