diff --git a/neo.UnitTests/Oracle/UT_OracleService.cs b/neo.UnitTests/Oracle/UT_OracleService.cs
index a159c5693d..61aed3b091 100644
--- a/neo.UnitTests/Oracle/UT_OracleService.cs
+++ b/neo.UnitTests/Oracle/UT_OracleService.cs
@@ -349,7 +349,8 @@ private OracleExecutionCache ExecuteHTTP1Tx(OracleHTTPRequest request)
using (var snapshot = store.GetSnapshot())
{
- var service = new OracleService() { TimeOut = TimeSpan.FromSeconds(2) };
+ var service = new OracleService();
+ service.Policy.Timeout = TimeSpan.FromSeconds(2);
return service.Process(snapshot, null, tx, true);
}
}
diff --git a/neo/Oracle/OraclePolicy.cs b/neo/Oracle/OraclePolicy.cs
new file mode 100644
index 0000000000..5f7679ccbd
--- /dev/null
+++ b/neo/Oracle/OraclePolicy.cs
@@ -0,0 +1,12 @@
+using System;
+
+namespace Neo.Oracle
+{
+ public class OraclePolicy
+ {
+ ///
+ /// Timeout for serve one request
+ ///
+ public TimeSpan Timeout { get; set; } = TimeSpan.FromSeconds(3);
+ }
+}
diff --git a/neo/Oracle/OracleService.cs b/neo/Oracle/OracleService.cs
index daf246ec0c..3f3f80e6a3 100644
--- a/neo/Oracle/OracleService.cs
+++ b/neo/Oracle/OracleService.cs
@@ -3,7 +3,6 @@
using Neo.Oracle.Protocols.HTTP;
using Neo.Persistence;
using Neo.SmartContract;
-using System;
namespace Neo.Oracle
{
@@ -19,9 +18,9 @@ public class OracleService
#endregion
///
- /// Timeout
+ /// Policy
///
- public TimeSpan TimeOut { get; set; } = TimeSpan.FromSeconds(3);
+ public OraclePolicy Policy { get; set; } = new OraclePolicy();
///
/// Process transaction
@@ -66,7 +65,7 @@ private OracleResult ExecuteRequest(UInt256 txHash, OracleRequest request)
{
return request switch
{
- OracleHTTPRequest http => HTTP.Process(txHash, http, TimeOut),
+ OracleHTTPRequest http => HTTP.Process(txHash, http, Policy),
_ => OracleResult.CreateError(txHash, request.Hash, OracleResultError.ServerError),
};
}
diff --git a/neo/Oracle/Protocols/HTTP/OracleHTTPProtocol.cs b/neo/Oracle/Protocols/HTTP/OracleHTTPProtocol.cs
index 1bcf74ee22..c7db71fc20 100644
--- a/neo/Oracle/Protocols/HTTP/OracleHTTPProtocol.cs
+++ b/neo/Oracle/Protocols/HTTP/OracleHTTPProtocol.cs
@@ -10,9 +10,9 @@ public class OracleHTTPProtocol : IOracleProtocol
///
/// Transaction Hash
/// Request
- /// Timeout
+ /// Policy
/// Oracle result
- public OracleResult Process(UInt256 txHash, OracleRequest request, TimeSpan timeout)
+ public OracleResult Process(UInt256 txHash, OracleRequest request, OraclePolicy policy)
{
if (!(request is OracleHTTPRequest httpRequest))
{
@@ -51,7 +51,7 @@ public OracleResult Process(UInt256 txHash, OracleRequest request, TimeSpan time
var result = client.SendAsync(req);
- if (!result.Wait(timeout) || result.IsFaulted)
+ if (!result.Wait(policy.Timeout) || result.IsFaulted)
{
return OracleResult.CreateError(txHash, request.Hash, OracleResultError.Timeout);
}
@@ -63,7 +63,7 @@ public OracleResult Process(UInt256 txHash, OracleRequest request, TimeSpan time
var ret = result.Result.Content.ReadAsStringAsync();
- if (!ret.Wait(timeout) || ret.IsFaulted)
+ if (!ret.Wait(policy.Timeout) || ret.IsFaulted)
{
return OracleResult.CreateError(txHash, request.Hash, OracleResultError.Timeout);
}
diff --git a/neo/Oracle/Protocols/IOracleProtocol.cs b/neo/Oracle/Protocols/IOracleProtocol.cs
index cb711a278f..66c9bd218b 100644
--- a/neo/Oracle/Protocols/IOracleProtocol.cs
+++ b/neo/Oracle/Protocols/IOracleProtocol.cs
@@ -1,9 +1,7 @@
-using System;
-
namespace Neo.Oracle.Protocols
{
public interface IOracleProtocol
{
- OracleResult Process(UInt256 txHash, OracleRequest request, TimeSpan timeout);
+ OracleResult Process(UInt256 txHash, OracleRequest request, OraclePolicy policy);
}
}
diff --git a/neo/Wallets/Wallet.cs b/neo/Wallets/Wallet.cs
index cdb6d54d8b..1f14ea7f04 100644
--- a/neo/Wallets/Wallet.cs
+++ b/neo/Wallets/Wallet.cs
@@ -346,7 +346,8 @@ private Transaction MakeTransaction(Snapshot snapshot, byte[] script, Transactio
}
case OracleExecutionType.SecureOracle:
{
- var service = new OracleService() { TimeOut = TimeSpan.FromSeconds(2) };
+ var service = new OracleService();
+ service.Policy.Timeout = TimeSpan.FromSeconds(2);
oracle = service.CreateExecutionCache(tx.Hash);
break;
}