Skip to content

Commit

Permalink
Merge branch 'master' into coreclr
Browse files Browse the repository at this point in the history
  • Loading branch information
Erik Zhang committed Oct 5, 2016
2 parents 0e0e662 + a4c34b6 commit 3142b66
Show file tree
Hide file tree
Showing 18 changed files with 128 additions and 108 deletions.
13 changes: 9 additions & 4 deletions AntSharesCore/Core/RegisterTransaction.cs
Original file line number Diff line number Diff line change
Expand Up @@ -28,10 +28,6 @@ public class RegisterTransaction : Transaction
/// 发行总量,共有2种模式:
/// 1. 限量模式:当Amount为正数时,表示当前资产的最大总量为Amount,且不可修改(股权在未来可能会支持扩股或增发,会考虑需要公司签名或一定比例的股东签名认可)。
/// 2. 不限量模式:当Amount等于-1时,表示当前资产可以由创建者无限量发行。这种模式的自由度最大,但是公信力最低,不建议使用。
/// 在使用过程中,根据资产类型的不同,能够使用的总量模式也不同,具体规则如下:
/// 1. 对于股权,只能使用限量模式;
/// 2. 对于货币,只能使用不限量模式;
/// 3. 对于点券,可以使用任意模式;
/// </summary>
public Fixed8 Amount;
public byte Precision;
Expand Down Expand Up @@ -132,6 +128,15 @@ public override UInt160[] GetScriptHashesForVerifying()
return base.GetScriptHashesForVerifying().Union(new[] { issuer }).OrderBy(p => p).ToArray();
}

protected override void OnDeserialized()
{
base.OnDeserialized();
if (AssetType == AssetType.AntShare && !Hash.Equals(Blockchain.AntShare.Hash))
throw new FormatException();
if (AssetType == AssetType.AntCoin && !Hash.Equals(Blockchain.AntCoin.Hash))
throw new FormatException();
}

/// <summary>
/// 序列化交易中额外的数据
/// </summary>
Expand Down
1 change: 1 addition & 0 deletions AntSharesCore/Core/Transaction.cs
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,7 @@ void ISerializable.Deserialize(BinaryReader reader)
{
((ISignable)this).DeserializeUnsigned(reader);
Scripts = reader.ReadSerializableArray<Script>();
OnDeserialized();
}

/// <summary>
Expand Down
47 changes: 27 additions & 20 deletions AntSharesCore/Implementations/Wallets/EntityFramework/UserWallet.cs
Original file line number Diff line number Diff line change
Expand Up @@ -306,15 +306,12 @@ private void OnCreateAccount(WalletAccount account)
}
}

protected override void OnProcessNewBlock(Block block, IEnumerable<CoreTransaction> transactions, IEnumerable<WalletCoin> added, IEnumerable<WalletCoin> changed, IEnumerable<WalletCoin> deleted)
protected override void OnProcessNewBlock(Block block, IEnumerable<WalletCoin> added, IEnumerable<WalletCoin> changed, IEnumerable<WalletCoin> deleted)
{
Transaction[] tx_changed;
Transaction[] tx_changed = null;
using (WalletDataContext ctx = new WalletDataContext(DbPath))
{
foreach (Transaction db_tx in ctx.Transactions.Where(p => !p.Height.HasValue))
if (block.Transactions.Any(p => p.Hash == new UInt256(db_tx.Hash)))
db_tx.Height = block.Height;
foreach (CoreTransaction tx in transactions)
foreach (CoreTransaction tx in block.Transactions.Where(p => IsWalletTransaction(p)))
{
Transaction db_tx = ctx.Transactions.FirstOrDefault(p => p.Hash.SequenceEqual(tx.Hash.ToArray()));
if (db_tx == null)
Expand All @@ -333,32 +330,42 @@ protected override void OnProcessNewBlock(Block block, IEnumerable<CoreTransacti
db_tx.Height = block.Height;
}
}
tx_changed = ctx.ChangeTracker.Entries<Transaction>().Where(p => p.State != EntityState.Unchanged).Select(p => p.Entity).ToArray();
OnCoinsChanged(ctx, added, changed, deleted);
ctx.Keys.First(p => p.Name == "Height").Value = BitConverter.GetBytes(WalletHeight);
ctx.SaveChanges();
if (block.Height == Blockchain.Default.Height || ctx.ChangeTracker.Entries().Any())
{
foreach (Transaction db_tx in ctx.Transactions.Where(p => !p.Height.HasValue))
if (block.Transactions.Any(p => p.Hash == new UInt256(db_tx.Hash)))
db_tx.Height = block.Height;
ctx.Keys.First(p => p.Name == "Height").Value = BitConverter.GetBytes(WalletHeight);
tx_changed = ctx.ChangeTracker.Entries<Transaction>().Where(p => p.State != EntityState.Unchanged).Select(p => p.Entity).ToArray();
ctx.SaveChanges();
}
}
if (tx_changed.Length > 0)
if (tx_changed?.Length > 0)
TransactionsChanged?.Invoke(this, GetTransactionInfo(tx_changed));
}

protected override void OnSendTransaction(CoreTransaction tx, IEnumerable<WalletCoin> added, IEnumerable<WalletCoin> changed)
protected override void OnSaveTransaction(CoreTransaction tx, IEnumerable<WalletCoin> added, IEnumerable<WalletCoin> changed)
{
Transaction tx_changed;
Transaction tx_changed = null;
using (WalletDataContext ctx = new WalletDataContext(DbPath))
{
tx_changed = ctx.Transactions.Add(new Transaction
if (IsWalletTransaction(tx))
{
Hash = tx.Hash.ToArray(),
Type = tx.Type,
RawData = tx.ToArray(),
Height = null,
Time = DateTime.Now
}).Entity;
tx_changed = ctx.Transactions.Add(new Transaction
{
Hash = tx.Hash.ToArray(),
Type = tx.Type,
RawData = tx.ToArray(),
Height = null,
Time = DateTime.Now
}).Entity;
}
OnCoinsChanged(ctx, added, changed, Enumerable.Empty<WalletCoin>());
ctx.SaveChanges();
}
TransactionsChanged?.Invoke(this, GetTransactionInfo(new[] { tx_changed }));
if (tx_changed != null)
TransactionsChanged?.Invoke(this, GetTransactionInfo(new[] { tx_changed }));
}

public static UserWallet Open(string path, string password)
Expand Down
1 change: 0 additions & 1 deletion AntSharesCore/Network/LocalNode.cs
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,6 @@ public class LocalNode : IDisposable
public const int DEFAULT_PORT = 10333;
#endif

//TODO: 需要搭建一批种子节点
private static readonly string[] SeedList =
{
"seed1.antshares.org",
Expand Down
36 changes: 19 additions & 17 deletions AntSharesCore/Wallets/Wallet.cs
Original file line number Diff line number Diff line change
Expand Up @@ -480,6 +480,18 @@ public Account Import(string wif)
return account;
}

protected bool IsWalletTransaction(Transaction tx)
{
lock (contracts)
{
if (tx.Outputs.Any(p => contracts.ContainsKey(p.ScriptHash)))
return true;
if (tx.Scripts.Any(p => contracts.ContainsKey(p.RedeemScript.ToScriptHash())))
return true;
}
return false;
}

protected abstract IEnumerable<Account> LoadAccounts();

protected abstract IEnumerable<Coin> LoadCoins();
Expand Down Expand Up @@ -547,8 +559,8 @@ public Account Import(string wif)
return tx;
}

protected abstract void OnProcessNewBlock(Block block, IEnumerable<Transaction> transactions, IEnumerable<Coin> added, IEnumerable<Coin> changed, IEnumerable<Coin> deleted);
protected abstract void OnSendTransaction(Transaction tx, IEnumerable<Coin> added, IEnumerable<Coin> changed);
protected abstract void OnProcessNewBlock(Block block, IEnumerable<Coin> added, IEnumerable<Coin> changed, IEnumerable<Coin> deleted);
protected abstract void OnSaveTransaction(Transaction tx, IEnumerable<Coin> added, IEnumerable<Coin> changed);

private void ProcessBlocks()
{
Expand All @@ -575,7 +587,6 @@ private void ProcessNewBlock(Block block)
lock (contracts)
lock (coins)
{
HashSet<Transaction> transactions = new HashSet<Transaction>();
foreach (Transaction tx in block.Transactions)
{
for (ushort index = 0; index < tx.Outputs.Length; index++)
Expand All @@ -599,7 +610,6 @@ private void ProcessNewBlock(Block block)
ScriptHash = output.ScriptHash,
State = CoinState.Unspent
});
transactions.Add(tx);
}
}
}
Expand All @@ -613,7 +623,6 @@ private void ProcessNewBlock(Block block)
coins[input].State = CoinState.Spent;
else
coins.Remove(input);
transactions.Add(tx);
}
}
}
Expand All @@ -624,17 +633,13 @@ private void ProcessNewBlock(Block block)
if (coins.Contains(claim))
{
coins.Remove(claim);
transactions.Add(tx);
}
}
}
current_height++;
changeset = coins.GetChangeSet();
if (block.Height == Blockchain.Default.Height || changeset.Length > 0)
{
OnProcessNewBlock(block, transactions, changeset.Where(p => ((ITrackable<TransactionInput>)p).TrackState == TrackState.Added), changeset.Where(p => ((ITrackable<TransactionInput>)p).TrackState == TrackState.Changed), changeset.Where(p => ((ITrackable<TransactionInput>)p).TrackState == TrackState.Deleted));
coins.Commit();
}
OnProcessNewBlock(block, changeset.Where(p => ((ITrackable<TransactionInput>)p).TrackState == TrackState.Added), changeset.Where(p => ((ITrackable<TransactionInput>)p).TrackState == TrackState.Changed), changeset.Where(p => ((ITrackable<TransactionInput>)p).TrackState == TrackState.Deleted));
coins.Commit();
}
if (changeset.Length > 0)
BalanceChanged?.Invoke(this, EventArgs.Empty);
Expand All @@ -653,7 +658,7 @@ public virtual void Rebuild()

protected abstract void SaveStoredData(string name, byte[] value);

public bool SendTransaction(Transaction tx)
public bool SaveTransaction(Transaction tx)
{
Coin[] changeset;
lock (contracts)
Expand All @@ -680,11 +685,8 @@ public bool SendTransaction(Transaction tx)
});
}
changeset = coins.GetChangeSet();
if (changeset.Length > 0)
{
OnSendTransaction(tx, changeset.Where(p => ((ITrackable<TransactionInput>)p).TrackState == TrackState.Added), changeset.Where(p => ((ITrackable<TransactionInput>)p).TrackState == TrackState.Changed));
coins.Commit();
}
OnSaveTransaction(tx, changeset.Where(p => ((ITrackable<TransactionInput>)p).TrackState == TrackState.Added), changeset.Where(p => ((ITrackable<TransactionInput>)p).TrackState == TrackState.Changed));
coins.Commit();
}
if (changeset.Length > 0)
BalanceChanged?.Invoke(this, EventArgs.Empty);
Expand Down
2 changes: 1 addition & 1 deletion AntSharesCore/project.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"copyright": "? AntShares Project 2015 Released under the MIT license",
"title": "AntShares",
"version": "0.7.0-*",
"version": "1.0-coreclr",
"buildOptions": { "allowUnsafe": true },

"dependencies": {
Expand Down
8 changes: 4 additions & 4 deletions AntSharesDaemon/Network/RPC/RpcServer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,9 @@ namespace AntShares.Network.RPC
internal class RpcServer : IDisposable
{
#if TESTNET
public const int DEFAULT_PORT = 20332;
private const string DEFAULT_URI_PREFIX = "http://*:20332";
#else
public const int DEFAULT_PORT = 10332;
private const string DEFAULT_URI_PREFIX = "http://*:10332";
#endif

private LocalNode localNode;
Expand Down Expand Up @@ -193,11 +193,11 @@ private JObject ProcessRequest(JObject request)
return response;
}

public void Start(string domain = "*", int port = DEFAULT_PORT)
public void Start(string uriPrefix = DEFAULT_URI_PREFIX)
{
host = new WebHostBuilder()
.UseKestrel()
.UseUrls($"http://{domain}:{port}")
.UseUrls(uriPrefix)
.Configure(app => app.Run(ProcessAsync))
.Build();
host.Start();
Expand Down
4 changes: 2 additions & 2 deletions AntSharesDaemon/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

namespace AntShares
{
public class Program
static class Program
{
// private static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
// {
Expand All @@ -29,7 +29,7 @@ public class Program
//#endif
// }

public static void Main(string[] args)
static void Main(string[] args)
{
//AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
new MainService().Run(args);
Expand Down
4 changes: 2 additions & 2 deletions AntSharesDaemon/project.json
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
{
"copyright": "© AntShares Project 2016 Released under the MIT license",
"title": "AntShares",
"version": "0.7.0-*",
"version": "1.0-coreclr",
"buildOptions": {
"emitEntryPoint": true,
"define": [ "DEBUG" ]
},

"dependencies": {
"AntSharesCore": "0.7.0-*",
"AntSharesCore": "1.0-coreclr",
"Microsoft.AspNetCore.Server.Kestrel": "1.0.0",
"Microsoft.NETCore.App": {
"type": "platform",
Expand Down
6 changes: 3 additions & 3 deletions AntSharesDaemon/project.lock.json
Original file line number Diff line number Diff line change
Expand Up @@ -2835,7 +2835,7 @@
"lib/netstandard1.3/System.Xml.XPath.XmlDocument.dll": {}
}
},
"AntSharesCore/0.7.0": {
"AntSharesCore/1.0.0-coreclr": {
"type": "project",
"framework": ".NETStandard,Version=v1.6",
"dependencies": {
Expand Down Expand Up @@ -8180,15 +8180,15 @@
"ref/xamarinwatchos10/_._"
]
},
"AntSharesCore/0.7.0": {
"AntSharesCore/1.0.0-coreclr": {
"type": "project",
"path": "../AntSharesCore/project.json",
"msbuildProject": "../AntSharesCore/AntSharesCore.xproj"
}
},
"projectFileDependencyGroups": {
"": [
"AntSharesCore >= 0.7.0-*",
"AntSharesCore >= 1.0.0-coreclr",
"Microsoft.AspNetCore.Server.Kestrel >= 1.0.0",
"Microsoft.NETCore.App >= 1.0.1"
],
Expand Down
4 changes: 2 additions & 2 deletions AntSharesUI/AntSharesUI.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@
<PlatformTarget>AnyCPU</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
<Prefer32Bit>true</Prefer32Bit>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|AnyCPU'">
<OutputPath>bin\Release\</OutputPath>
Expand All @@ -53,7 +53,7 @@
<UseVSHostingProcess>false</UseVSHostingProcess>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
<Prefer32Bit>true</Prefer32Bit>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
Expand Down
2 changes: 1 addition & 1 deletion AntSharesUI/Properties/AssemblyInfo.cs
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,6 @@
//
// 可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值,
// 方法是按如下所示使用“*”:
[assembly: AssemblyVersion("0.7.0.*")]
[assembly: AssemblyVersion("1.0.*")]
//[assembly: AssemblyVersion("1.0.0.0")]
//[assembly: AssemblyFileVersion("1.0.0.0")]
2 changes: 1 addition & 1 deletion AntSharesUI/UI/Helper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ public static void SignAndShowInformation(Transaction tx)
if (context.Completed)
{
context.Signable.Scripts = context.GetScripts();
Program.CurrentWallet.SendTransaction(tx);
Program.CurrentWallet.SaveTransaction(tx);
Program.LocalNode.Relay(tx);
InformationBox.Show(tx.Hash.ToString(), Strings.SendTxSucceedMessage, Strings.SendTxSucceedTitle);
}
Expand Down
2 changes: 1 addition & 1 deletion AntSharesUI/UI/TradeForm.cs
Original file line number Diff line number Diff line change
Expand Up @@ -147,7 +147,7 @@ private void button3_Click(object sender, EventArgs e)
{
context.Signable.Scripts = context.GetScripts();
ContractTransaction tx = (ContractTransaction)context.Signable;
Program.CurrentWallet.SendTransaction(tx);
Program.CurrentWallet.SaveTransaction(tx);
Program.LocalNode.Relay(tx);
InformationBox.Show(tx.Hash.ToString(), "交易已发送,这是交易编号(TXID):", "交易成功");
}
Expand Down
Loading

0 comments on commit 3142b66

Please sign in to comment.