X-Git-Url: https://git.novaco.in/?a=blobdiff_plain;f=Novacoin%2FCTransaction.cs;h=a061c70769885cb029fbfb4dc621ff56b232c64c;hb=624ac1021490395614a0cbee619c79860c22061a;hp=fb865a46167d7eaf25d771e8c4c79a4e5d70775c;hpb=1dcac5faa2b1477034f82466ffb16170fa2e9bb6;p=NovacoinLibrary.git diff --git a/Novacoin/CTransaction.cs b/Novacoin/CTransaction.cs index fb865a4..a061c70 100644 --- a/Novacoin/CTransaction.cs +++ b/Novacoin/CTransaction.cs @@ -20,6 +20,8 @@ using System; using System.Text; using System.Collections.Generic; using System.IO; +using System.Diagnostics.Contracts; +using System.Numerics; namespace Novacoin { @@ -47,6 +49,11 @@ namespace Novacoin public class CTransaction { /// + /// One cent = 10000 satoshis. + /// + public const ulong nCent = 10000; + + /// /// One coin = 1000000 satoshis. /// public const ulong nCoin = 1000000; @@ -137,15 +144,15 @@ namespace Novacoin return true; } - CTransaction txPrev = null; + TxOutItem txOutCursor = null; for (int i = 0; i < vin.Length; i++) { var outpoint = vin[i].prevout; - if (!CBlockStore.Instance.GetTransaction(outpoint.hash, ref txPrev)) + if (!CBlockStore.Instance.GetTxOutCursor(outpoint, ref txOutCursor)) return false; - if (!ScriptCode.VerifyScript(vin[i].scriptSig, txPrev.vout[outpoint.n].scriptPubKey, this, i, (int)scriptflag.SCRIPT_VERIFY_P2SH, 0)) + if (!ScriptCode.VerifyScript(vin[i].scriptSig, txOutCursor.scriptPubKey, this, i, (int)scriptflag.SCRIPT_VERIFY_P2SH, 0)) return false; } @@ -250,9 +257,9 @@ namespace Novacoin } if (nBlockTime == 0) { - nBlockTime = NetUtils.GetAdjustedTime(); + nBlockTime = NetInfo.GetAdjustedTime(); } - if (nLockTime < (nLockTime < NetUtils.nLockTimeThreshold ? nBlockHeight : nBlockTime)) + if (nLockTime < (nLockTime < NetInfo.nLockTimeThreshold ? nBlockHeight : nBlockTime)) { return true; } @@ -404,6 +411,23 @@ namespace Novacoin } /// + /// Amount of novacoins spent by this transaction. + /// + public ulong nValueOut + { + get + { + ulong nValueOut = 0; + foreach (var txout in vout) + { + nValueOut += txout.nValue; + Contract.Assert(MoneyRange(txout.nValue) && MoneyRange(nValueOut)); + } + return nValueOut; + } + } + + /// /// A sequence of bytes, which corresponds to the current state of CTransaction. /// public static implicit operator byte[] (CTransaction tx) @@ -456,5 +480,15 @@ namespace Novacoin } public static bool MoneyRange(ulong nValue) { return (nValue <= nMaxMoney); } + + internal uint GetP2SHSigOpCount(Dictionary inputs) + { + throw new NotImplementedException(); + } + + internal ulong GetValueIn(Dictionary inputs) + { + throw new NotImplementedException(); + } } }