public ImmuClient(string immudbUrl) { this.channel = GrpcChannel.ForAddress(immudbUrl); this.instance = new ImmuService.ImmuServiceClient(channel); this.rootService = new RootService(this.instance); this.rootService.Init(); }
public ImmuClient(string address, int port = 3322, ILoggerFactory loggerFactory = null) { this.logger = (loggerFactory ?? NullLoggerFactory.Instance).CreateLogger <ImmuClient>(); this.channel = new Channel(address, port, ChannelCredentials.Insecure); this.client = new ImmuService.ImmuServiceClient(this.channel); }
public static SafeGetResponse Call(ImmuService.ImmuServiceClient immuS, RootService rs, SafeGetOptions request) { var root = rs.GetRoot(); var index = new Immudb.Schema.Index { Index_ = root.Index }; var protoReq = new SafeGetOptions(request) { RootIndex = index }; var msg = immuS.SafeGet(protoReq); var verified = Proofs.Verify(msg.Proof, ItemUtils.GetHash(msg.Item), root); if (verified) { var toCache = new Root { Index = msg.Proof.At, Root_ = msg.Proof.Root }; try { rs.SetRoot(toCache); } catch (Exception e) { throw e; } } var i = msg.Item; var timestampBytes = i.Value.Take(8).ToArray(); if (BitConverter.IsLittleEndian) { Array.Reverse(timestampBytes); } return(new SafeGetResponse { Index = i.Index, Key = i.Key, Value = ByteString.CopyFrom(i.Value.Skip(8).ToArray()), Timestamp = BitConverter.ToInt64(timestampBytes), Verified = verified }); }
public RootService(ImmuService.ImmuServiceClient immuC) { this.immuC = immuC; this.cache = new RootCache(); }
public static SafeSetResponse Call(ImmuService.ImmuServiceClient immuS, RootService rs, SafeSetOptions request) { var root = rs.GetRoot(); var index = new Immudb.Schema.Index { Index_ = root.Index }; var valueB = new byte[8 + request.Kv.Value.Length]; var buffTimestamp = BitConverter.GetBytes(DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()); if (BitConverter.IsLittleEndian) { Array.Reverse(buffTimestamp); } buffTimestamp.CopyTo(valueB, 0); request.Kv.Value.CopyTo(valueB, 8); var sso = new SafeSetOptions { Kv = new KeyValue { Key = request.Kv.Key, Value = ByteString.CopyFrom(valueB) }, RootIndex = index }; var msg = immuS.SafeSet(sso); var item = new Item { Key = sso.Kv.Key, Value = sso.Kv.Value, Index = msg.Index }; if (!ItemUtils.GetHash(item).SequenceEqual(msg.Leaf.ToByteArray())) { throw new Exception("Proof does not match the given item."); } bool verified = Proofs.Verify(msg, msg.Leaf.ToByteArray(), root); if (verified) { var toCache = new Root { Index = msg.Index, Root_ = msg.Root }; try { rs.SetRoot(toCache); } catch (Exception e) { throw e; } } return(new SafeSetResponse { Index = msg.Index, Leaf = msg.Leaf, Root = msg.Root, At = msg.At, InclusionPath = msg.InclusionPath, ConsistencyPath = msg.ConsistencyPath, Verified = verified }); }