private UInt256 GetOriginalTxid(ApplicationEngine engine) { Transaction tx = (Transaction)engine.ScriptContainer; OracleResponse response = tx.GetAttribute <OracleResponse>(); if (response is null) { return(tx.Hash); } OracleRequest request = GetRequest(engine.Snapshot, response.Id); return(request.OriginalTxid); }
private ContractTask Finish(ApplicationEngine engine) { Transaction tx = (Transaction)engine.ScriptContainer; OracleResponse response = tx.GetAttribute <OracleResponse>(); if (response == null) { throw new ArgumentException("Oracle response was not found"); } OracleRequest request = GetRequest(engine.Snapshot, response.Id); if (request == null) { throw new ArgumentException("Oracle request was not found"); } engine.SendNotification(Hash, "OracleResponse", new VM.Types.Array { response.Id, request.OriginalTxid.ToArray() }); StackItem userData = BinarySerializer.Deserialize(request.UserData, engine.Limits.MaxStackSize, engine.ReferenceCounter); return(engine.CallFromNativeContract(Hash, request.CallbackContract, request.CallbackMethod, request.Url, userData, (int)response.Code, response.Result)); }