From 49e29b6e009467864c09b2a980c4678fd78a879e Mon Sep 17 00:00:00 2001 From: Davit Mandzikyan Date: Tue, 18 Nov 2025 20:19:44 +0400 Subject: [PATCH] Create htlc lock for solana native contract. --- .../Workflow.Solana/Helpers/EventDecoder.cs | 2 +- .../Helpers/SolanaTransactionBuilder.cs | 83 ++++++++++++------- .../Programs/HTLCProgram/HTLCProgram.cs | 68 ++++++++++++--- .../HTLCProgram/HtlcInstructionDataBuilder.cs | 22 ++--- .../HTLCProgram/HtlcInstructionKeyProvider.cs | 43 ++++++++-- .../HTLCProgram/Models/HTLCLockRequest.cs | 33 -------- .../HTLCProgram/Models/HTLCPdaResponse.cs | 12 --- .../HTLCProgram/Models/HTLCSolLockRequest.cs | 31 +++++++ .../HTLCProgram/Models/HTLCSolPdaResponse.cs | 8 ++ .../HTLCProgram/Models/HTLCSplLockRequest.cs | 8 ++ .../HTLCProgram/Models/HTLCSplPdaResponse.cs | 10 +++ 11 files changed, 216 insertions(+), 104 deletions(-) delete mode 100644 csharp/src/Workflow.Solana/Programs/HTLCProgram/Models/HTLCLockRequest.cs delete mode 100644 csharp/src/Workflow.Solana/Programs/HTLCProgram/Models/HTLCPdaResponse.cs create mode 100644 csharp/src/Workflow.Solana/Programs/HTLCProgram/Models/HTLCSolLockRequest.cs create mode 100644 csharp/src/Workflow.Solana/Programs/HTLCProgram/Models/HTLCSolPdaResponse.cs create mode 100644 csharp/src/Workflow.Solana/Programs/HTLCProgram/Models/HTLCSplLockRequest.cs create mode 100644 csharp/src/Workflow.Solana/Programs/HTLCProgram/Models/HTLCSplPdaResponse.cs diff --git a/csharp/src/Workflow.Solana/Helpers/EventDecoder.cs b/csharp/src/Workflow.Solana/Helpers/EventDecoder.cs index a6fdf5b5..c6f5fbdc 100644 --- a/csharp/src/Workflow.Solana/Helpers/EventDecoder.cs +++ b/csharp/src/Workflow.Solana/Helpers/EventDecoder.cs @@ -5,9 +5,9 @@ using System.Numerics; using Train.Solver.Blockchain.Solana.Extensions; using Train.Solver.Blockchain.Solana.Models; -using Train.Solver.Blockchain.Solana.Programs.HTLCProgram; using Train.Solver.Infrastructure.Abstractions.Models; using Train.Solver.Workflow.Abstractions.Models; +using Train.Solver.Workflow.Solana.Programs.HTLCProgram; namespace Train.Solver.Blockchain.Solana.Helpers; diff --git a/csharp/src/Workflow.Solana/Helpers/SolanaTransactionBuilder.cs b/csharp/src/Workflow.Solana/Helpers/SolanaTransactionBuilder.cs index 050fee74..2a639d4d 100644 --- a/csharp/src/Workflow.Solana/Helpers/SolanaTransactionBuilder.cs +++ b/csharp/src/Workflow.Solana/Helpers/SolanaTransactionBuilder.cs @@ -8,12 +8,12 @@ using Solnet.Rpc.Builders; using Solnet.Wallet; using System.Numerics; -using Train.Solver.Blockchain.Solana.Programs.HTLCProgram; using Train.Solver.Blockchain.Solana.Programs.HTLCProgram.Models; using Train.Solver.Common.Extensions; -using Train.Solver.Data.Abstractions.Entities; using Train.Solver.Infrastructure.Abstractions.Models; using Train.Solver.Workflow.Abstractions.Models; +using Train.Solver.Workflow.Solana.Programs.HTLCProgram; +using Train.Solver.Workflow.Solana.Programs.HTLCProgram.Models; namespace Train.Solver.Workflow.Solana.Helpers; @@ -66,30 +66,53 @@ await GetOrCreateAssociatedTokenAccount( new PublicKey(solverAccount), new PublicKey(solverAccount)); - builder.SetLockTransactionInstruction( - new PublicKey(htlcContractAddress), - new HTLCLockRequest - { - Hashlock = request.Hashlock.HexToByteArray(), - Id = request.CommitId.HexToByteArray(), - SignerPublicKey = new PublicKey(solverAccount), - ReceiverPublicKey = new PublicKey(request.Receiver), - Amount = request.Amount, - Timelock = new BigInteger(request.Timelock), - SourceAsset = currency.Symbol, - DestinationNetwork = request.DestinationNetwork, - SourceAddress = request.DestinationAddress, - DestinationAsset = request.DestinationAsset, - SourceTokenPublicKey = new PublicKey(currency.Contract), - Reward = request.Reward, - RewardTimelock = new BigInteger(request.RewardTimelock), - }); + if (isNative) + { + builder.SetSolLockTransactionInstruction( + new PublicKey(htlcContractAddress), + new HTLCSplLockRequest + { + Id = request.CommitId.HexToByteArray(), + Hashlock = request.Hashlock.HexToByteArray(), + Timelock = new BigInteger(request.Timelock), + Amount = request.Amount, + DestinationNetwork = request.DestinationNetwork, + DestinationAsset = request.DestinationAsset, + SourceAsset = currency.Symbol, + SignerPublicKey = new PublicKey(solverAccount), + ReceiverPublicKey = new PublicKey(request.Receiver), + DestinationAddress = request.DestinationAddress, + Reward = request.Reward, + RewardTimelock = new BigInteger(request.RewardTimelock), + }); + } + else + { + builder.SetSplLockTransactionInstruction( + new PublicKey(htlcContractAddress), + new HTLCSplLockRequest + { + Id = request.CommitId.HexToByteArray(), + Hashlock = request.Hashlock.HexToByteArray(), + Timelock = new BigInteger(request.Timelock), + Amount = request.Amount, + DestinationNetwork = request.DestinationNetwork, + DestinationAsset = request.DestinationAsset, + SourceAsset = currency.Symbol, + SignerPublicKey = new PublicKey(solverAccount), + ReceiverPublicKey = new PublicKey(request.Receiver), + DestinationAddress = request.DestinationAddress, + SourceTokenPublicKey = new PublicKey(currency.Contract), + Reward = request.Reward, + RewardTimelock = new BigInteger(request.RewardTimelock), + }); + } var latestBlockResult = await rpcClient.GetLatestBlockHashAsync(); if (!latestBlockResult.WasSuccessful) { - throw new ($"Failed to get last valid block"); + throw new($"Failed to get last valid block"); } builder.SetRecentBlockHash(latestBlockResult.Result.Value.Blockhash); @@ -133,7 +156,7 @@ public static async Task BuildHTLCRedeemTransactionAsync( { throw new ArgumentNullException(nameof(request.SenderAddress), "Sender address is required"); } - + var currency = network.Tokens.SingleOrDefault(x => x.Symbol.ToUpper() == request.Asset.ToUpper()); if (currency is null) @@ -160,12 +183,12 @@ public static async Task BuildHTLCRedeemTransactionAsync( var builder = new TransactionBuilder() .SetFeePayer(new PublicKey(solverAccount)); - await GetOrCreateAssociatedTokenAccount( - rpcClient, - builder, - currency, - new PublicKey(solverAccount), - new PublicKey(solverAccount)); + await GetOrCreateAssociatedTokenAccount( + rpcClient, + builder, + currency, + new PublicKey(solverAccount), + new PublicKey(solverAccount)); builder.SetRedeemTransactionInstruction( new PublicKey(htlcContractAddress), @@ -177,7 +200,7 @@ await GetOrCreateAssociatedTokenAccount( SignerPublicKey = new PublicKey(solverAccount), ReceiverPublicKey = new PublicKey(request.DestinationAddress), SenderPublicKey = new PublicKey(request.SenderAddress), - RewardPublicKey = request.DestinationAddress == solverAccount? + RewardPublicKey = request.DestinationAddress == solverAccount ? new PublicKey(request.DestinationAddress) : new PublicKey(request.SenderAddress), }); @@ -535,5 +558,5 @@ private static async Task GetOrCreateAssociatedTokenAccount( { throw new Exception("Failed to load token wallet", ex); } - } + } } diff --git a/csharp/src/Workflow.Solana/Programs/HTLCProgram/HTLCProgram.cs b/csharp/src/Workflow.Solana/Programs/HTLCProgram/HTLCProgram.cs index 42eca084..58dafed8 100644 --- a/csharp/src/Workflow.Solana/Programs/HTLCProgram/HTLCProgram.cs +++ b/csharp/src/Workflow.Solana/Programs/HTLCProgram/HTLCProgram.cs @@ -1,18 +1,21 @@ using System.Text; using Solnet.Rpc.Builders; using Solnet.Wallet; +using Train.Solver.Blockchain.Solana.Programs; +using Train.Solver.Blockchain.Solana.Programs.HTLCProgram; using Train.Solver.Blockchain.Solana.Programs.HTLCProgram.Models; +using Train.Solver.Workflow.Solana.Programs.HTLCProgram.Models; -namespace Train.Solver.Blockchain.Solana.Programs.HTLCProgram; +namespace Train.Solver.Workflow.Solana.Programs.HTLCProgram; public static class HTLCProgram { - public static TransactionBuilder SetLockTransactionInstruction( + public static TransactionBuilder SetSplLockTransactionInstruction( this TransactionBuilder builder, PublicKey htlcProgramIdKey, - HTLCLockRequest htlcLockRequest) + HTLCSplLockRequest htlcLockRequest) { - var htlcPdaParams = GetHtlcPdaParams(htlcLockRequest.Id, htlcProgramIdKey); + var htlcPdaParams = GetSPLHtlcPdaParams(htlcLockRequest.Id, htlcProgramIdKey); var lockData = new HtlcInstructionDataBuilder().CreateLockData(htlcLockRequest); var lockRewardData = new HtlcInstructionDataBuilder().CreateLockRewardData(htlcLockRequest); @@ -21,7 +24,7 @@ public static TransactionBuilder SetLockTransactionInstruction( builder.AddInstruction(new() { ProgramId = htlcProgramIdKey, - Keys = HtlcInstructionKeyProvider.CreateLockAccountKeys(htlcLockRequest, htlcPdaParams), + Keys = HtlcInstructionKeyProvider.CreateSplLockAccountKeys(htlcLockRequest, htlcPdaParams), Data = lockData }); @@ -36,12 +39,38 @@ public static TransactionBuilder SetLockTransactionInstruction( return builder; } + public static TransactionBuilder SetSolLockTransactionInstruction( + this TransactionBuilder builder, + PublicKey htlcProgramIdKey, + HTLCSolLockRequest htlcLockRequest) + { + var pdaParams = GetSolHtlcParams(htlcLockRequest.Id, htlcProgramIdKey); + + var lockData = new HtlcInstructionDataBuilder().CreateLockData(htlcLockRequest); + var lockRewardData = new HtlcInstructionDataBuilder().CreateLockRewardData(htlcLockRequest); + + builder.AddInstruction(new() + { + ProgramId = htlcProgramIdKey, + Keys = HtlcInstructionKeyProvider.CreateSolLockAccountKeys(htlcLockRequest, pdaParams), + Data = lockData + }); + + builder.AddInstruction(new() + { + ProgramId = htlcProgramIdKey, + Keys = HtlcInstructionKeyProvider.CreateSolLockRewardAccountKeys(htlcLockRequest, pdaParams), + Data = lockRewardData + }); + return builder; + } + public static TransactionBuilder SetRedeemTransactionInstruction( this TransactionBuilder builder, PublicKey htlcProgramIdKey, HTLCRedeemRequest redeemRequest) { - var pdaParams = GetHtlcPdaParams(redeemRequest.Id, htlcProgramIdKey); + var pdaParams = GetSPLHtlcPdaParams(redeemRequest.Id, htlcProgramIdKey); var redeemData = new HtlcInstructionDataBuilder().CreateRedeemData(redeemRequest, pdaParams); @@ -60,7 +89,7 @@ public static TransactionBuilder SetRefundTransactionInstruction( PublicKey htlcProgramIdKey, HTLCRefundRequest htlcRefundRequest) { - var pdaParams = GetHtlcPdaParams(htlcRefundRequest.Id, htlcProgramIdKey); + var pdaParams = GetSPLHtlcPdaParams(htlcRefundRequest.Id, htlcProgramIdKey); var refundData = new HtlcInstructionDataBuilder().CreateRefundData(htlcRefundRequest, pdaParams); @@ -79,7 +108,7 @@ public static TransactionBuilder SetAddLockSigInstruction( PublicKey htlcProgramIdKey, HTLCAddlocksigRequest htlcAddlocksigRequest) { - var pdaParams = GetHtlcPdaParams(htlcAddlocksigRequest.AddLockSigMessageRequest.Id, htlcProgramIdKey); + var pdaParams = GetSPLHtlcPdaParams(htlcAddlocksigRequest.AddLockSigMessageRequest.Id, htlcProgramIdKey); var message = Ed25519Program.CreateAddLockSigMessage(htlcAddlocksigRequest.AddLockSigMessageRequest); var addLockSigData = new HtlcInstructionDataBuilder().CreateAddLockSigData(htlcAddlocksigRequest, pdaParams); @@ -103,7 +132,7 @@ public static TransactionBuilder SetGetDetailsInstruction( PublicKey htlcProgramIdKey, byte[] id) { - var pdaParams = GetHtlcPdaParams(id, htlcProgramIdKey); + var pdaParams = GetSPLHtlcPdaParams(id, htlcProgramIdKey); var getDetailsData = new HtlcInstructionDataBuilder().CreateGetDetailsData(pdaParams, id); @@ -117,7 +146,7 @@ public static TransactionBuilder SetGetDetailsInstruction( return builder; } - private static HTLCPdaResponse GetHtlcPdaParams( + private static HTLCSplPdaResponse GetSPLHtlcPdaParams( byte[] Id, PublicKey htlcProgramIdKey) { @@ -147,4 +176,23 @@ private static HTLCPdaResponse GetHtlcPdaParams( HtlcBump = htlcBump }; } + + private static HTLCSolPdaResponse GetSolHtlcParams( + byte[] Id, + PublicKey htlcProgramIdKey) + { + var htlc = PublicKey.TryFindProgramAddress( + new List() + { + Id + }, + htlcProgramIdKey, + out PublicKey htlcPubKey, + out _); + + return new() + { + HtlcPublicKey = htlcPubKey + }; + } } diff --git a/csharp/src/Workflow.Solana/Programs/HTLCProgram/HtlcInstructionDataBuilder.cs b/csharp/src/Workflow.Solana/Programs/HTLCProgram/HtlcInstructionDataBuilder.cs index bcc61755..4e93a791 100644 --- a/csharp/src/Workflow.Solana/Programs/HTLCProgram/HtlcInstructionDataBuilder.cs +++ b/csharp/src/Workflow.Solana/Programs/HTLCProgram/HtlcInstructionDataBuilder.cs @@ -4,6 +4,7 @@ using System.Text; using Train.Solver.Blockchain.Solana.Helpers; using Train.Solver.Blockchain.Solana.Programs.HTLCProgram.Models; +using Train.Solver.Workflow.Solana.Programs.HTLCProgram.Models; namespace Train.Solver.Blockchain.Solana.Programs.HTLCProgram; @@ -19,13 +20,13 @@ private void SetFieldData(string property, int span, Action Span = span, EncoderFunc = encoderFunc }); - } + } public byte[] CreateLockData( - HTLCLockRequest lockRequest) + HTLCSolLockRequest lockRequest) { var destinationAssetData = Encoding.UTF8.GetBytes(lockRequest.DestinationAsset); - var sourceAddressData = Encoding.UTF8.GetBytes(lockRequest.SourceAddress); + var destionationAddressData = Encoding.UTF8.GetBytes(lockRequest.DestinationAddress); var destinationNetworkData = Encoding.UTF8.GetBytes(lockRequest.DestinationNetwork); var sourceAssetData = Encoding.UTF8.GetBytes(lockRequest.SourceAsset); @@ -33,7 +34,7 @@ public byte[] CreateLockData( SetFieldData("hashlock", lockRequest.Hashlock.Length, (v, buf, off) => FieldEncoder.EncodeByteArray((byte[])v, buf, ref off)); SetFieldData("timelock", 8, (v, buf, off) => buf.WriteBigInt((BigInteger)v, off, 8, isUnsigned: true, isBigEndian: false)); SetFieldData("destinationNetwork", destinationNetworkData.Length + 4, (v, buf, off) => FieldEncoder.EncodeByteArrayWithLength((byte[])v, buf, ref off)); - SetFieldData("sourceAddress", sourceAddressData.Length + 4, (v, buf, off) => FieldEncoder.EncodeByteArrayWithLength((byte[])v, buf, ref off)); + SetFieldData("destinationAddress", destionationAddressData.Length + 4, (v, buf, off) => FieldEncoder.EncodeByteArrayWithLength((byte[])v, buf, ref off)); SetFieldData("destinationAsset", destinationAssetData.Length + 4, (v, buf, off) => FieldEncoder.EncodeByteArrayWithLength((byte[])v, buf, ref off)); SetFieldData("sourceAsset", sourceAssetData.Length + 4, (v, buf, off) => FieldEncoder.EncodeByteArrayWithLength((byte[])v, buf, ref off)); SetFieldData("receiver", 32, (v, buf, off) => buf.WritePubKey((PublicKey)v, off)); @@ -45,7 +46,7 @@ public byte[] CreateLockData( { "hashlock", lockRequest.Hashlock}, { "timelock", lockRequest.Timelock}, { "destinationNetwork", destinationNetworkData }, - { "sourceAddress", sourceAddressData }, + { "destinationAddress", destionationAddressData }, { "destinationAsset", destinationAssetData }, { "sourceAsset", sourceAssetData }, { "receiver", lockRequest.ReceiverPublicKey }, @@ -58,7 +59,7 @@ public byte[] CreateLockData( } public byte[] CreateLockRewardData( - HTLCLockRequest lockRequest) + HTLCSolLockRequest lockRequest) { SetFieldData("id", lockRequest.Id.Length, (v, buf, off) => FieldEncoder.EncodeByteArray((byte[])v, buf, ref off)); SetFieldData("rewardTimelock", 8, (v, buf, off) => buf.WriteBigInt((BigInteger)v, off, 8, isUnsigned: true, isBigEndian: false)); @@ -78,7 +79,7 @@ public byte[] CreateLockRewardData( public byte[] CreateRedeemData( HTLCRedeemRequest redeemRequest, - HTLCPdaResponse htlcPdaResponse) + HTLCSplPdaResponse htlcPdaResponse) { SetFieldData("id", redeemRequest.Id.Length, (v, buf, off) => FieldEncoder.EncodeByteArray((byte[])v, buf, ref off)); SetFieldData("secret", redeemRequest.Secret.Length, (v, buf, off) => FieldEncoder.EncodeByteArray((byte[])v, buf, ref off)); @@ -99,7 +100,7 @@ public byte[] CreateRedeemData( public byte[] CreateRefundData( HTLCRefundRequest refundRequest, - HTLCPdaResponse htlcPdaResponse) + HTLCSplPdaResponse htlcPdaResponse) { SetFieldData("id", refundRequest.Id.Length, (v, buf, off) => FieldEncoder.EncodeByteArray((byte[])v, buf, ref off)); SetFieldData("htlcBump", 1, (v, buf, off) => buf.WriteU8((byte)v, off)); @@ -116,7 +117,7 @@ public byte[] CreateRefundData( } public byte[] CreateGetDetailsData( - HTLCPdaResponse hTLCPdaResponse, + HTLCSplPdaResponse hTLCPdaResponse, byte[] id) { SetFieldData("id", id.Length, (v, buf, off) => FieldEncoder.EncodeByteArray((byte[])v, buf, ref off)); @@ -135,7 +136,7 @@ public byte[] CreateGetDetailsData( public byte[] CreateAddLockSigData( HTLCAddlocksigRequest addLockSigRequest, - HTLCPdaResponse htlcPdaResponse) + HTLCSplPdaResponse htlcPdaResponse) { SetFieldData("id", addLockSigRequest.AddLockSigMessageRequest.Id.Length, (v, buf, off) => FieldEncoder.EncodeByteArray((byte[])v, buf, ref off)); SetFieldData("hashlock", addLockSigRequest.AddLockSigMessageRequest.Hashlock.Length, (v, buf, off) => FieldEncoder.EncodeByteArray((byte[])v, buf, ref off)); @@ -155,7 +156,6 @@ public byte[] CreateAddLockSigData( FieldEncoder.Sighash(SolanaConstants.AddLockSigSighash)); } - private byte[] BuildInstructionData(Dictionary instructionExecutionOrder, byte[] descriminator) { return FieldEncoder.Encode(Fields, instructionExecutionOrder, descriminator); diff --git a/csharp/src/Workflow.Solana/Programs/HTLCProgram/HtlcInstructionKeyProvider.cs b/csharp/src/Workflow.Solana/Programs/HTLCProgram/HtlcInstructionKeyProvider.cs index a6865014..87c1fa31 100644 --- a/csharp/src/Workflow.Solana/Programs/HTLCProgram/HtlcInstructionKeyProvider.cs +++ b/csharp/src/Workflow.Solana/Programs/HTLCProgram/HtlcInstructionKeyProvider.cs @@ -3,14 +3,15 @@ using Solnet.Wallet; using Train.Solver.Blockchain.Solana.Helpers; using Train.Solver.Blockchain.Solana.Programs.HTLCProgram.Models; +using Train.Solver.Workflow.Solana.Programs.HTLCProgram.Models; namespace Train.Solver.Blockchain.Solana.Programs.HTLCProgram; public static class HtlcInstructionKeyProvider { - public static List CreateLockAccountKeys( - HTLCLockRequest htlcLockRequest, - HTLCPdaResponse htlcPdaResponse) + public static List CreateSplLockAccountKeys( + HTLCSplLockRequest htlcLockRequest, + HTLCSplPdaResponse htlcPdaResponse) { var keys = new List() { @@ -27,7 +28,22 @@ public static List CreateLockAccountKeys( return keys; } - public static IList CreateLockRewardAccountKeys(HTLCLockRequest htlcLockRequest, HTLCPdaResponse htlcPdaResponse) + public static List CreateSolLockAccountKeys( + HTLCSolLockRequest htlcLockRequest, + HTLCSolPdaResponse htlcPdaResponse) + { + var keys = new List() + { + AccountMeta.Writable(publicKey: htlcLockRequest.SignerPublicKey, isSigner: true), + AccountMeta.Writable(publicKey: htlcPdaResponse.HtlcPublicKey, isSigner: false), + AccountMeta.ReadOnly(publicKey: SystemProgram.ProgramIdKey, isSigner: false), + AccountMeta.ReadOnly(publicKey: SysVars.RentKey, isSigner: false) + }; + + return keys; + } + + public static IList CreateLockRewardAccountKeys(HTLCSplLockRequest htlcLockRequest, HTLCSplPdaResponse htlcPdaResponse) { var keys = new List() { @@ -44,9 +60,22 @@ public static IList CreateLockRewardAccountKeys(HTLCLockRequest htl return keys; } + public static IList CreateSolLockRewardAccountKeys(HTLCSolLockRequest htlcLockRequest, HTLCSolPdaResponse htlcPdaResponse) + { + var keys = new List() + { + AccountMeta.Writable(publicKey: htlcLockRequest.SignerPublicKey, isSigner: true), + AccountMeta.Writable(publicKey: htlcPdaResponse.HtlcPublicKey, isSigner: false), + AccountMeta.ReadOnly(publicKey: SystemProgram.ProgramIdKey, isSigner: false), + AccountMeta.ReadOnly(publicKey: SysVars.RentKey, isSigner: false) + }; + + return keys; + } + public static List SetRefundAccountKeys( HTLCRefundRequest refundRequest, - HTLCPdaResponse htlcPdaResponse) + HTLCSplPdaResponse htlcPdaResponse) { var keys = new List() { @@ -66,7 +95,7 @@ public static List SetRefundAccountKeys( public static List CreateRedeemAccountKeys( HTLCRedeemRequest htlcRedeemRequest, - HTLCPdaResponse htlcPdaResponse) + HTLCSplPdaResponse htlcPdaResponse) { var keys = new List() { @@ -100,7 +129,7 @@ public static List CreateGetDetailsAccountKeys(PublicKey htlcPubKey public static List CreateAddLockSigAccountKeys( HTLCAddlocksigRequest hTLCAddlocksigRequest, - HTLCPdaResponse htlcPdaResponse) + HTLCSplPdaResponse htlcPdaResponse) { var keys = new List { diff --git a/csharp/src/Workflow.Solana/Programs/HTLCProgram/Models/HTLCLockRequest.cs b/csharp/src/Workflow.Solana/Programs/HTLCProgram/Models/HTLCLockRequest.cs deleted file mode 100644 index abc1235c..00000000 --- a/csharp/src/Workflow.Solana/Programs/HTLCProgram/Models/HTLCLockRequest.cs +++ /dev/null @@ -1,33 +0,0 @@ -using System.Numerics; -using Solnet.Wallet; - -namespace Train.Solver.Blockchain.Solana.Programs.HTLCProgram.Models; - -public class HTLCLockRequest -{ - public byte[] Hashlock { get; set; } = null!; - - public BigInteger Timelock { get; set; } - - public string DestinationNetwork { get; set; } = null!; - - public string SourceAddress { get; set; } = null!; - - public string DestinationAsset { get; set; } = null!; - - public string SourceAsset { get; set; } = null!; - - public byte[] Id { get; set; } = null!; - - public PublicKey SignerPublicKey { get; set; } = null!; - - public PublicKey ReceiverPublicKey { get; set; } = null!; - - public PublicKey SourceTokenPublicKey { get; set; } = null!; - - public BigInteger Amount { get; set; } - - public BigInteger Reward { get; set; } - - public BigInteger RewardTimelock { get; set; } -} diff --git a/csharp/src/Workflow.Solana/Programs/HTLCProgram/Models/HTLCPdaResponse.cs b/csharp/src/Workflow.Solana/Programs/HTLCProgram/Models/HTLCPdaResponse.cs deleted file mode 100644 index 3e52827e..00000000 --- a/csharp/src/Workflow.Solana/Programs/HTLCProgram/Models/HTLCPdaResponse.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Solnet.Wallet; - -namespace Train.Solver.Blockchain.Solana.Programs.HTLCProgram.Models; - -public class HTLCPdaResponse -{ - public PublicKey HtlcPublicKey { get; set; } = null!; - - public PublicKey HtlcTokenAccount { get; set; } = null!; - - public byte HtlcBump { get; set; } -} diff --git a/csharp/src/Workflow.Solana/Programs/HTLCProgram/Models/HTLCSolLockRequest.cs b/csharp/src/Workflow.Solana/Programs/HTLCProgram/Models/HTLCSolLockRequest.cs new file mode 100644 index 00000000..3173ec29 --- /dev/null +++ b/csharp/src/Workflow.Solana/Programs/HTLCProgram/Models/HTLCSolLockRequest.cs @@ -0,0 +1,31 @@ +using Solnet.Wallet; +using System.Numerics; + +namespace Train.Solver.Workflow.Solana.Programs.HTLCProgram.Models; + +public class HTLCSolLockRequest +{ + public required byte[] Id { get; set; } = null!; + + public required byte[] Hashlock { get; set; } = null!; + + public required BigInteger Timelock { get; set; } + + public required BigInteger Amount { get; set; } + + public required string DestinationNetwork { get; set; } = null!; + + public required string DestinationAddress { get; set; } = null!; + + public required string DestinationAsset { get; set; } = null!; + + public required string SourceAsset { get; set; } = null!; + + public required PublicKey SignerPublicKey { get; set; } = null!; + + public required PublicKey ReceiverPublicKey { get; set; } = null!; + + public required BigInteger Reward { get; set; } + + public required BigInteger RewardTimelock { get; set; } +} diff --git a/csharp/src/Workflow.Solana/Programs/HTLCProgram/Models/HTLCSolPdaResponse.cs b/csharp/src/Workflow.Solana/Programs/HTLCProgram/Models/HTLCSolPdaResponse.cs new file mode 100644 index 00000000..2a698235 --- /dev/null +++ b/csharp/src/Workflow.Solana/Programs/HTLCProgram/Models/HTLCSolPdaResponse.cs @@ -0,0 +1,8 @@ +using Solnet.Wallet; + +namespace Train.Solver.Workflow.Solana.Programs.HTLCProgram.Models; + +public class HTLCSolPdaResponse +{ + public required PublicKey HtlcPublicKey { get; set; } = null!; +} diff --git a/csharp/src/Workflow.Solana/Programs/HTLCProgram/Models/HTLCSplLockRequest.cs b/csharp/src/Workflow.Solana/Programs/HTLCProgram/Models/HTLCSplLockRequest.cs new file mode 100644 index 00000000..9927a698 --- /dev/null +++ b/csharp/src/Workflow.Solana/Programs/HTLCProgram/Models/HTLCSplLockRequest.cs @@ -0,0 +1,8 @@ +using Solnet.Wallet; + +namespace Train.Solver.Workflow.Solana.Programs.HTLCProgram.Models; + +public class HTLCSplLockRequest : HTLCSolLockRequest +{ + public PublicKey SourceTokenPublicKey { get; set; } = null!; +} diff --git a/csharp/src/Workflow.Solana/Programs/HTLCProgram/Models/HTLCSplPdaResponse.cs b/csharp/src/Workflow.Solana/Programs/HTLCProgram/Models/HTLCSplPdaResponse.cs new file mode 100644 index 00000000..86d0c75e --- /dev/null +++ b/csharp/src/Workflow.Solana/Programs/HTLCProgram/Models/HTLCSplPdaResponse.cs @@ -0,0 +1,10 @@ +using Solnet.Wallet; + +namespace Train.Solver.Workflow.Solana.Programs.HTLCProgram.Models; + +public class HTLCSplPdaResponse : HTLCSolPdaResponse +{ + public PublicKey HtlcTokenAccount { get; set; } = null!; + + public byte HtlcBump { get; set; } +}