public async Task SendTransferConfirmAsync(string id) { var transaction = await _transactionsRepository.GetAsync(id); if (transaction == null) { throw new NullReferenceException(); } if (transaction.Status != TransactionStatus.TransferDispatched) { return; //todo: handle this case. } if (!_benefeciarySessionsDict.TryGetValue(transaction.SessionId, out var beneficiarySession)) { return; //todo: handle this case. } await beneficiarySession.TransferConfirmAsync( TransferConfirmationMessage.Create( transaction.SessionId, TransferConfirmationMessage.TransferConfirmationMessageCode.TransferConfirmed)); transaction.Status = TransactionStatus.TransferConfirmed; await _transactionsRepository.UpdateAsync(transaction); }
public async Task SendTransferConfirmationMessageAsync(TransferConfirmationMessage message) { await _transportClient.SendAsync(new MessageEnvelope() { Topic = this.CounterPartyTopic, SigningKey = _privateSigningKey, EncryptionType = EncryptionType.Symmetric, EncryptionKey = _sharedSymKeyId }, message); }
public async Task TransferConfirmationMessageReceivedAsync(string sessionId, TransferConfirmationMessage message) { var transaction = _outgoingTransactions.SingleOrDefault(x => x.SessionId == sessionId); if (transaction == null || transaction.Status != TransactionStatus.TransferDispatched) { return; //todo: handle this case. } transaction.Status = TransactionStatus.TransferConfirmed; }
public static ProtoTransferConfirmationMessage MapToProto(TransferConfirmationMessage message) { var proto = new ProtoTransferConfirmationMessage() { Comment = message.Comment, Transfer = Mapper.MapTransferToProto(message.Transfer), Transaction = Mapper.MapTranactionToProto(message.Transaction), Beneficiary = Mapper.MapBeneficiaryToProto(message.Beneficiary), Originator = Mapper.MapOriginatorToProto(message.Originator), Message = Mapper.MapMessageToProto(message.MessageType, message.Message), VaspInfo = Mapper.MapVaspInformationToProto(message.VASP) }; return(proto); }
private void AssertTransferConfirmation(TransferConfirmationMessage response, TransferConfirmationMessage request) { Assert.NotNull(response); Assert.Equal(request.Comment, response.Comment); Assert.Equal(request.Message.SessionId, response.Message.SessionId); Assert.Equal(request.MessageType, response.MessageType); Assert.Equal(request.Message.MessageCode, response.Message.MessageCode); Assert.Equal(request.Message.MessageId, response.Message.MessageId); AssertPlaceOfBirth(request.VASP.PlaceOfBirth, response.VASP.PlaceOfBirth); Assert.Equal(request.VASP.BIC, response.VASP.BIC); Assert.Equal(request.VASP.Name, response.VASP.Name); Assert.Equal(request.VASP.VaspPublickKey, response.VASP.VaspPublickKey); Assert.Equal(request.VASP.VaspIdentity, response.VASP.VaspIdentity); Assert.Equal(request.VASP.PostalAddress.StreetName, response.VASP.PostalAddress.StreetName); Assert.Equal(request.VASP.PostalAddress.AddressLine, response.VASP.PostalAddress.AddressLine); Assert.Equal(request.VASP.PostalAddress.BuildingNumber, response.VASP.PostalAddress.BuildingNumber); Assert.Equal(request.VASP.PostalAddress.Country, response.VASP.PostalAddress.Country); Assert.Equal(request.VASP.PostalAddress.PostCode, response.VASP.PostalAddress.PostCode); Assert.Equal(request.VASP.JuridicalPersonIds.Count(), response.VASP.JuridicalPersonIds.Count()); AssertJuridicalPersonIds(request.VASP.JuridicalPersonIds, response.VASP.JuridicalPersonIds); Assert.Equal(request.VASP.NaturalPersonIds.Count(), response.VASP.NaturalPersonIds.Count()); AssertNaturalPersonIds(request.VASP.NaturalPersonIds, response.VASP.NaturalPersonIds); Assert.Equal(request.Transfer.TransferType, response.Transfer.TransferType); Assert.Equal(request.Transfer.VirtualAssetType, response.Transfer.VirtualAssetType); Assert.Equal(request.Transfer.Amount, response.Transfer.Amount); Assert.Equal(request.Transfer.DestinationAddress, response.Transfer.DestinationAddress); AssertBeneficiary(request.Beneficiary, response.Beneficiary); AssertOriginator(request.Originator, response.Originator); AssertTransaction(request.Transaction, response.Transaction); }
public static TransferConfirmationMessage MapFromProto(ProtoTransferConfirmationMessage message) { var messageIn = new Message( message.Message.MessageId, message.Message.SessionId, message.Message.MessageCode); var originator = Mapper.MapOriginatorFromProto(message.Originator); var beneficiary = Mapper.MapBeneficiaryFromProto(message.Beneficiary); var transfer = Mapper.MapTransferFromProto(message.Transfer); var transaction = Mapper.MapTranactionFromProto(message.Transaction); var vasp = Mapper.MapVaspInformationFromProto(message.VaspInfo); var obj = new TransferConfirmationMessage(messageIn, originator, beneficiary, transfer, transaction, vasp) { Comment = message.Comment, }; return(obj); }
public Task TransferConfirmationMessageHandlerAsync(TransferConfirmationMessage message, OriginatorSession session) { return(_transferConfirm.Invoke(message, session)); }
public async Task CreateSessionBetweenVASPs() { int sessionTerminationCounter = 0; SessionTermination sessionTerminationDelegate = @event => { sessionTerminationCounter++; }; (VaspInformation vaspInfoPerson, VaspContractInfo vaspContractInfoPerson) = await VaspInformationBuilder.CreateForNaturalPersonAsync( NodeClient.EthereumRpc, Settings.VaspSmartContractAddressPerson, Settings.NaturalPersonIds, Settings.PlaceOfBirth); VaspClient originator = VaspClient.Create( vaspInfoPerson, vaspContractInfoPerson, Settings.PersonHandshakePrivateKeyHex, Settings.PersonSignaturePrivateKeyHex, NodeClient.EthereumRpc, NodeClient.WhisperRpc, _fakeEnsProvider, _signService, NodeClient.TransportClient); (VaspInformation vaspInfoJuridical, VaspContractInfo vaspContractInfoJuridical) = await VaspInformationBuilder.CreateForJuridicalPersonAsync( NodeClient.EthereumRpc, Settings.VaspSmartContractAddressJuridical, Settings.JuridicalIds); VaspClient beneficiary = VaspClient.Create( vaspInfoJuridical, vaspContractInfoJuridical, Settings.JuridicalHandshakePrivateKeyHex, Settings.JuridicalSignaturePrivateKeyHex, NodeClient.EthereumRpc, NodeClient.WhisperRpc, _fakeEnsProvider, _signService, NodeClient.TransportClient); var originatorVaan = VirtualAssetssAccountNumber.Create(vaspInfoPerson.GetVaspCode(), "524ee3fb082809"); var beneficiaryVaan = VirtualAssetssAccountNumber.Create(vaspInfoJuridical.GetVaspCode(), "524ee3fb082809"); IVaspMessageHandler messageHandler = new VaspMessageHandlerCallbacks( (vaspInfo) => { return(Task.FromResult(true)); }, (request, currentSession) => { var message = new TransferReplyMessage(currentSession.SessionId, TransferReplyMessage.TransferReplyMessageCode.TransferAccepted, request.Originator, new Beneficiary("Mr. Test", request.Beneficiary.VAAN), new TransferReply( request.Transfer.VirtualAssetType, request.Transfer.TransferType, request.Transfer.Amount, "0x0"), request.VASP); return(Task.FromResult(message)); }, (dispatch, currentSession) => { var message = new TransferConfirmationMessage(currentSession.SessionId, TransferConfirmationMessage.TransferConfirmationMessageCode.TransferConfirmed, dispatch.Originator, dispatch.Beneficiary, dispatch.Transfer, dispatch.Transaction, dispatch.VASP); return(Task.FromResult(message)); }); beneficiary.RunListener(messageHandler); originator.SessionTerminated += sessionTerminationDelegate; beneficiary.SessionTerminated += sessionTerminationDelegate; // change enum to string and add constants //beneficiary.TransferRequest += request => new TransferReply(VirtualAssetType.ETH, TransferType.BlockchainTransfer, "10", "1223"); //beneficiary.TransferDispatch += message => new TransferConfirmationMessage(); var originatorDoc = Originator.CreateOriginatorForNaturalPerson( "Test van der Test", originatorVaan, new PostalAddress( "StreetX", 44, "AddressLineX", "510051", "TownX", Country.List["DE"]), new PlaceOfBirth(DateTime.Today.AddYears(-30), "TownX", Country.List["DE"]), new NaturalPersonId[] { new NaturalPersonId("Id", NaturalIdentificationType.NationalIdentityNumber, Country.List["DE"]), }); var session = await originator.CreateSessionAsync(originatorDoc, beneficiaryVaan); var transferReply = await session.TransferRequestAsync(new TransferInstruction() { VirtualAssetTransfer = new VirtualAssetTransfer() { TransferType = TransferType.BlockchainTransfer, VirtualAssetType = VirtualAssetType.ETH, TransferAmount = "1000000000000000000" } }); var transferConformation = await session.TransferDispatchAsync(transferReply.Transfer, new Transaction("0xtxhash", DateTime.UtcNow, "0x0...a")); Assert.Equal(1, originator.GetActiveSessions().Count); Assert.True(originator.GetActiveSessions().First() is OriginatorSession); Assert.Equal(1, beneficiary.GetActiveSessions().Count); Assert.True(beneficiary.GetActiveSessions().First() is BeneficiarySession); await session.TerminateAsync(TerminationMessage.TerminationMessageCode.SessionClosedTransferOccured); session.Wait(); originator.Dispose(); beneficiary.Dispose(); Assert.Equal(2, sessionTerminationCounter); _testOutputHelper.WriteLine("End of test"); }
private static TransferConfirmationMessage GetTransferConfirmationMessage() { //Should be a contract var vaspKey = EthECKey.GenerateKey(); var message = new Message( Guid.NewGuid().ToByteArray().ToHex(prefix: false), Guid.NewGuid().ToByteArray().ToHex(prefix: false), "1"); var postalAddress = new PostalAddress( "TestingStreet", 61, "Test Address Line", "410000", "TownN", Country.List["DE"] ); var placeOfBirth = new PlaceOfBirth(DateTime.UtcNow, "TownN", Country.List["DE"]); var vaspInformation = new VaspInformation( "Test test", vaspKey.GetPublicAddress(), vaspKey.GetPubKey().ToHex(prefix: false), postalAddress, placeOfBirth, new NaturalPersonId[] { new NaturalPersonId("SomeId2", NaturalIdentificationType.AlienRegistrationNumber, Country.List["DE"]), }, new JuridicalPersonId[] { new JuridicalPersonId("SomeId1", JuridicalIdentificationType.BankPartyIdentification, Country.List["DE"]), }, "DEUTDEFF"); var originator = new Originator("Originator1", "VaaN", postalAddress, placeOfBirth, new NaturalPersonId[] { new NaturalPersonId("SomeId2", NaturalIdentificationType.AlienRegistrationNumber, Country.List["DE"]), }, new JuridicalPersonId[] { new JuridicalPersonId("SomeId1", JuridicalIdentificationType.BankPartyIdentification, Country.List["DE"]), }, "DEUTDEFF"); var beneficiary = new Beneficiary("Ben1", "VaaN"); var transferReply = new TransferReply(VirtualAssetType.ETH, TransferType.BlockchainTransfer, "10000000", "0x0000001"); var transaction = new Transaction("txId", DateTime.UtcNow, "0x0000002"); var request = new TransferConfirmationMessage(message, originator, beneficiary, transferReply, transaction, vaspInformation) { Comment = "This is test message", }; return(request); }
public async Task TransferConfirmAsync(string sessionId, TransferConfirmationMessage message) { await _beneficiarySessions[sessionId].SendTransferConfirmationMessageAsync(message); }