diff --git a/neo3-gui/neo3-gui/ClientApp/src/components/Chain/assetdetail.js b/neo3-gui/neo3-gui/ClientApp/src/components/Chain/assetdetail.js
index af7411d..d4dee51 100644
--- a/neo3-gui/neo3-gui/ClientApp/src/components/Chain/assetdetail.js
+++ b/neo3-gui/neo3-gui/ClientApp/src/components/Chain/assetdetail.js
@@ -112,7 +112,7 @@ class Assetdetail extends React.Component {
{t("blockchain.precision")}:
- {assetdetail.decimals ? assetdetail.decimals : "--"}
+ {assetdetail.decimals ? assetdetail.decimals : "0"}
diff --git a/neo3-gui/neo3-gui/Common/Scanners/ExecuteResultScanner.cs b/neo3-gui/neo3-gui/Common/Scanners/ExecuteResultScanner.cs
index 6a37dd0..cbaed04 100644
--- a/neo3-gui/neo3-gui/Common/Scanners/ExecuteResultScanner.cs
+++ b/neo3-gui/neo3-gui/Common/Scanners/ExecuteResultScanner.cs
@@ -25,16 +25,28 @@ public class ExecuteResultScanner
private bool _running = true;
private uint _scanHeight = 0;
+ private uint _lastHeight = 0;
+ private DateTime _lastTime;
+
public async Task Start()
{
_running = true;
_scanHeight = _db.GetMaxSyncIndex() ?? 0;
+ _lastHeight = _scanHeight;
+ _lastTime = DateTime.Now;
while (_running)
{
try
{
if (await Sync(_scanHeight))
{
+ if (_scanHeight - _lastHeight >= 500)
+ {
+ var span = DateTime.Now - _lastTime;
+ Console.WriteLine($"Sync[{_lastHeight}-{_scanHeight}],cost:{span.TotalSeconds}");
+ _lastTime=DateTime.Now;
+ _lastHeight = _scanHeight;
+ }
_scanHeight++;
}
if (_scanHeight > this.GetCurrentHeight())
diff --git a/neo3-gui/neo3-gui/Common/Storage/TrackDB.cs b/neo3-gui/neo3-gui/Common/Storage/TrackDB.cs
index c5907e2..5393bdd 100644
--- a/neo3-gui/neo3-gui/Common/Storage/TrackDB.cs
+++ b/neo3-gui/neo3-gui/Common/Storage/TrackDB.cs
@@ -255,6 +255,11 @@ public PageList QueryTransactions(TransactionFilter filter, boo
var contracts = filter.Contracts.Select(a => a.ToBigEndianHex()).Distinct().ToList();
query = query.Where(tx => tx.InvokeContracts.Any(c => contracts.Contains(c.Contract.Hash) && c.Contract.DeleteTxId == null));
}
+ if (filter.Assets.NotEmpty())
+ {
+ var assets = filter.Assets.Select(a => a.ToBigEndianHex()).Distinct().ToList();
+ query = query.Where(tx => tx.Transfers.Any(c => assets.Contains(c.Asset.Hash) && c.Asset.DeleteTxId == null));
+ }
var pageList = new PageList();
var pageIndex = filter.PageIndex <= 0 ? 0 : filter.PageIndex - 1;
pageList.TotalCount = query.Count();
diff --git a/neo3-gui/neo3-gui/Common/Storage/TransferFilter.cs b/neo3-gui/neo3-gui/Common/Storage/TransferFilter.cs
index 7f3a635..5727131 100644
--- a/neo3-gui/neo3-gui/Common/Storage/TransferFilter.cs
+++ b/neo3-gui/neo3-gui/Common/Storage/TransferFilter.cs
@@ -40,6 +40,11 @@ public class TransactionFilter
///
public List Contracts { get; set; }
+ ///
+ /// Relate asset contracts hash
+ ///
+ public List Assets { get; set; }
+
///
/// start from 1,paged result only if this is not null
///
diff --git a/neo3-gui/neo3-gui/Models/JStackItem.cs b/neo3-gui/neo3-gui/Models/JStackItem.cs
index f5ff110..8770b6c 100644
--- a/neo3-gui/neo3-gui/Models/JStackItem.cs
+++ b/neo3-gui/neo3-gui/Models/JStackItem.cs
@@ -33,7 +33,7 @@ public static JStackItem FromJson(JObject json)
TypeCode = json["type"].TryGetEnum(),
Type = json["type"].AsString(),
};
- if (parameter.Type == "ByteString")
+ if (parameter.Type == "ByteString" || parameter.Type == "Buffer")
{
parameter.TypeCode = ContractParameterType.ByteArray;
}
diff --git a/neo3-gui/neo3-gui/Services/ApiServices/BlockApiService.cs b/neo3-gui/neo3-gui/Services/ApiServices/BlockApiService.cs
index 3f0f5e3..a2b9230 100644
--- a/neo3-gui/neo3-gui/Services/ApiServices/BlockApiService.cs
+++ b/neo3-gui/neo3-gui/Services/ApiServices/BlockApiService.cs
@@ -116,7 +116,7 @@ public async Task