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; }