Merge currency endpoint
This commit is contained in:
		
						commit
						027074a13e
					
				
							
								
								
									
										179
									
								
								Airdrop.fsx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										179
									
								
								Airdrop.fsx
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,179 @@ | ||||
| #load "/home/joe/Development/DegenzGame/.paket/load/net6.0/main.group.fsx";; | ||||
| 
 | ||||
| open System | ||||
| open System.IO | ||||
| open Npgsql.FSharp | ||||
| open dotenv.net | ||||
| open Solnet.Rpc | ||||
| open Solnet.Rpc.Models | ||||
| open Solnet.Rpc.Builders | ||||
| open Solnet.Wallet | ||||
| open Solnet.Programs | ||||
| open Solnet.KeyStore | ||||
| 
 | ||||
| let devEnv = DotEnv.Read(DotEnvOptions(envFilePaths = [ "./.dev.env" ])) | ||||
| 
 | ||||
| let ( _ , devConnStr )= devEnv.TryGetValue("DATABASE_URL") | ||||
| 
 | ||||
| let keystore = SolanaKeyStoreService() | ||||
| let file = File.ReadAllText("/home/joe/.config/solana/devnet.json") | ||||
| let authority = keystore.RestoreKeystore(file) | ||||
| 
 | ||||
| //let rpcClient = ClientFactory.GetClient("https://still-empty-field.solana-mainnet.quiknode.pro/5b1b6b5c913ec79a20bef19d5ba5f63023e470d6/") | ||||
| let rpcClient = ClientFactory.GetClient(Cluster.DevNet) | ||||
| 
 | ||||
| let mintAccount = PublicKey("2iS6gcoB5VhiLC4eNB7NdcaLgEHjLrXHYpz7T2JMGBDw") | ||||
| //let associatedTokenAccountOwner = PublicKey("GutKESfJw8PDMbFVqByxTr4f5TUSHUVmkf5gtsWWWqrU") | ||||
| 
 | ||||
| type AirdropStatus = | ||||
|     | Hold = 0 | ||||
|     | Ready = 1 | ||||
|     | Pending = 2 | ||||
|     | Error = 3 | ||||
|     | PendingError = 4 | ||||
|     | Completed = 5 | ||||
|     | Verified = 6 | ||||
| 
 | ||||
| let updateError wallet msg = | ||||
|     devConnStr | ||||
|     |> Sql.connect | ||||
|     |> Sql.parameters [ "wallet" , Sql.string wallet ; "msg" , Sql.string msg ] | ||||
|     |> Sql.query """ | ||||
|             UPDATE crypto SET error_msg = @msg, status = 'Error' WHERE crypto.wallet_address = @wallet; | ||||
|         """ | ||||
|     |> Sql.executeNonQueryAsync | ||||
| 
 | ||||
| let updatePendingError wallet msg txId = | ||||
|     devConnStr | ||||
|     |> Sql.connect | ||||
|     |> Sql.parameters [ "wallet" , Sql.string wallet ; "msg" , Sql.string msg ; "txId" , Sql.string txId ] | ||||
|     |> Sql.query """ | ||||
|             UPDATE crypto SET error_msg = @msg, pending_tx = @txId, status = 'PendingError' WHERE crypto.wallet_address = @wallet; | ||||
|         """ | ||||
|     |> Sql.executeNonQueryAsync | ||||
| 
 | ||||
| let updatePending wallet txId = | ||||
|     devConnStr | ||||
|     |> Sql.connect | ||||
|     |> Sql.parameters [ "wallet" , Sql.string wallet ; "txId" , Sql.string txId ] | ||||
|     |> Sql.query """ | ||||
|             UPDATE crypto SET pending_tx = @txId, status = 'Pending' WHERE crypto.wallet_address = @wallet; | ||||
|         """ | ||||
|     |> Sql.executeNonQueryAsync | ||||
| 
 | ||||
| let updateCompleted wallet txId = | ||||
|     devConnStr | ||||
|     |> Sql.connect | ||||
|     |> Sql.parameters [ "wallet" , Sql.string wallet ; "txId" , Sql.string txId ] | ||||
|     |> Sql.query """ | ||||
|             UPDATE crypto SET successful_tx = pending_tx, status = 'Completed' WHERE crypto.wallet_address = @wallet; | ||||
|         """ | ||||
|     |> Sql.executeNonQueryAsync | ||||
| 
 | ||||
| let updateVerified wallet txId amount = | ||||
|     devConnStr | ||||
|     |> Sql.connect | ||||
|     |> Sql.parameters [ "wallet" , Sql.string wallet ; "txId" , Sql.string txId ; "amount" , Sql.int amount ] | ||||
|     |> Sql.query """ | ||||
|             UPDATE crypto SET pending_tx = @txId, status = 'Verified', total_dropped = @amount WHERE crypto.wallet_address = @wallet; | ||||
|         """ | ||||
|     |> Sql.executeNonQueryAsync | ||||
| 
 | ||||
| let getTokenCountToDrop wallet = | ||||
|     task { | ||||
|         let! wl = | ||||
|             devConnStr | ||||
|             |> Sql.connect | ||||
|             |> Sql.parameters [ "wallet" , Sql.string wallet ] | ||||
|             |> Sql.query """ | ||||
|                     SELECT has_wl, has_og FROM crypto WHERE wallet_address = @wallet; | ||||
|                 """ | ||||
|             |> Sql.executeRowAsync (fun reader -> {| HasWhitelist = reader.bool "has_wl" ; HasOg = reader.bool "has_og" |}) | ||||
|         return (if wl.HasWhitelist then 1uL else 0uL) + (if wl.HasOg then 2uL else 0uL) | ||||
|     } | ||||
| 
 | ||||
| // TODO: Change was_successful to status and check if attempted, pending, errored, or completed | ||||
| let executeDrop (wallet : string) = | ||||
|     let associatedTokenAccountOwner = PublicKey(wallet) | ||||
|     let associatedTokenAccount = AssociatedTokenAccountProgram.DeriveAssociatedTokenAccount(associatedTokenAccountOwner, mintAccount) | ||||
|     let log msg = printfn $"{wallet} || {msg}" | ||||
| 
 | ||||
|     log $"ATA: {associatedTokenAccount.Key}" | ||||
|     let buildTransaction (block : LatestBlockHash) amount (targetWallet : string) = | ||||
|         TransactionBuilder() | ||||
|             .SetRecentBlockHash(block.Blockhash) | ||||
|             .SetFeePayer(authority.Account) | ||||
|             .AddInstruction(AssociatedTokenAccountProgram.CreateAssociatedTokenAccount( | ||||
|                 authority.Account, | ||||
|                 PublicKey(targetWallet), | ||||
|                 mintAccount)) | ||||
|             .AddInstruction(TokenProgram.Transfer( | ||||
|                 PublicKey("CRa7GCMUaB4np32XoTD2sEyCXFVfYKKF4JRPkQTwV3EY"), | ||||
|                 associatedTokenAccount, | ||||
|                 amount, | ||||
|                 authority.Account)) | ||||
|             .Build(authority.Account); | ||||
|     task { | ||||
| //        let streamingClient = ClientFactory.GetStreamingClient("wss://still-empty-field.solana-mainnet.quiknode.pro/5b1b6b5c913ec79a20bef19d5ba5f63023e470d6/") | ||||
|         let streamingClient = ClientFactory.GetStreamingClient(Cluster.DevNet) | ||||
|         do! streamingClient.ConnectAsync() | ||||
|         let blockHash = rpcClient.GetLatestBlockHash() | ||||
|         let! amount = getTokenCountToDrop wallet | ||||
|         log $"Dropping {amount} tokens" | ||||
|         let tx = buildTransaction blockHash.Result.Value amount wallet | ||||
|         let! tx = rpcClient.SendTransactionAsync(tx) | ||||
|         if tx.ErrorData <> null then | ||||
|             let! _ = updateError wallet (tx.ErrorData.Logs |> String.concat "\n") | ||||
|             () | ||||
|             log $"Transaction error: {wallet}" | ||||
|             return () | ||||
|         elif String.IsNullOrWhiteSpace(tx.Result) then | ||||
|             let msg = $"Transaction did not have an ID but the ErrorData was null: {tx.Reason}" | ||||
|             let! _ = updateError wallet msg | ||||
|             log $"Odd Transaction Error" | ||||
|             return () | ||||
|         else | ||||
|             log $"Successful, now waiting for RPC" | ||||
|             let! _ = updatePending wallet tx.Result | ||||
|             let! _ = streamingClient.SubscribeSignatureAsync(tx.Result, fun _ result -> | ||||
|                 if result.Value.Error = null then | ||||
|                     log "RPC Finished" | ||||
|                     task { | ||||
|                         let! _ = updateCompleted wallet tx.Result | ||||
|                         log "Getting Transaction and Token Balance" | ||||
|                         let! txInfo = rpcClient.GetTransactionAsync(tx.Result) | ||||
|                         let! tokenBalance = rpcClient.GetTokenAccountBalanceAsync(associatedTokenAccount) | ||||
| 
 | ||||
| 
 | ||||
|                         log $"Transaction Successful? {txInfo.WasSuccessful} - Token Balance {tokenBalance.Result.Value.AmountUlong}" | ||||
|                         if txInfo.WasSuccessful = true && tokenBalance.Result.Value.AmountUlong = amount then | ||||
|                             let! _ = updateVerified wallet tx.Result (int amount) | ||||
|                             () | ||||
|                         return () | ||||
|                     } |> Async.AwaitTask |> Async.Start | ||||
|                 else | ||||
|                     let msg =  $"Got an error, let's check it out {result.Value.Error}" | ||||
|                     updatePendingError wallet msg tx.Result |> Async.AwaitTask |> Async.Ignore |> Async.Start) | ||||
|             return () | ||||
|     } | ||||
| 
 | ||||
| let targetWallets = | ||||
|     devConnStr | ||||
|     |> Sql.connect | ||||
|     |> Sql.query """ | ||||
|             SELECT wallet_address FROM crypto WHERE status = 'Ready'; | ||||
|         """ | ||||
|     |> Sql.execute (fun reader -> reader.string "wallet_address") | ||||
| 
 | ||||
| printfn $"Got target wallets: {targetWallets.Length}" | ||||
| 
 | ||||
| // "GK7rkZYrdAEpTm9n9TkHWK1T5nDXeRfVUVfcHQwSDyuJ" | ||||
| let asyncs = | ||||
|     targetWallets | ||||
|     |> List.map executeDrop | ||||
|     |> List.map Async.AwaitTask | ||||
| 
 | ||||
| Async.Parallel ( asyncs , 16 ) |> Async.StartChild | ||||
| 
 | ||||
| 
 | ||||
| Console.ReadLine() |> ignore | ||||
| @ -8,3 +8,4 @@ mixpanel-csharp | ||||
| Solnet.Rpc | ||||
| FsToolkit.ErrorHandling | ||||
| FSharp.Data | ||||
| Newtonsoft.Json | ||||
|  | ||||
							
								
								
									
										117
									
								
								CurrencyAPI/Currency.fs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										117
									
								
								CurrencyAPI/Currency.fs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,117 @@ | ||||
| module CurrencyAPI.App | ||||
| 
 | ||||
| open System | ||||
| open System.IO | ||||
| open Microsoft.AspNetCore.Builder | ||||
| open Microsoft.AspNetCore.Hosting | ||||
| open Microsoft.AspNetCore.Http | ||||
| open Microsoft.Extensions.Hosting | ||||
| open Microsoft.Extensions.Logging | ||||
| open Microsoft.Extensions.DependencyInjection | ||||
| open Giraffe | ||||
| open dotenv.net | ||||
| open Npgsql.FSharp | ||||
| 
 | ||||
| DotEnv.Load(DotEnvOptions(envFilePaths = [ "../.prod.env" ], overwriteExistingVars = false)) | ||||
| 
 | ||||
| let connStr = Environment.GetEnvironmentVariable("DATABASE_URL") | ||||
|                 .Replace("postgresql://", "postgres://") | ||||
|                 .Replace("?sslmode=require", "") | ||||
| let apiKey  = Environment.GetEnvironmentVariable("API_KEY") | ||||
| 
 | ||||
| let validateApiKey (ctx : HttpContext) = | ||||
|     match ctx.TryGetRequestHeader "X-API-Key" with | ||||
|     | Some key -> apiKey.Equals key | ||||
|     | None     -> false | ||||
| 
 | ||||
| let accessDenied = setStatusCode 401 >=> text "Access Denied" | ||||
| let requiresApiKey = authorizeRequest validateApiKey accessDenied | ||||
| 
 | ||||
| let getCurrentBalance (discordId : string) = | ||||
|     task { | ||||
|         let! amounts = | ||||
|             connStr | ||||
|             |> Sql.connect | ||||
|             |> Sql.parameters [ "did" , Sql.string discordId ] | ||||
|             |> Sql.query """SELECT gbt FROM "user" WHERE discord_id = @did""" | ||||
|             |> Sql.executeAsync (fun r -> r.int "gbt") | ||||
|         match amounts with | ||||
|         | []   -> return Error "User not found" | ||||
|         | a::_ -> return Ok a | ||||
|     } | ||||
| 
 | ||||
| let get (discordId : string) : HttpHandler = | ||||
|     fun (next : HttpFunc) (ctx : HttpContext) -> | ||||
|         task { | ||||
|             try | ||||
|                 match! getCurrentBalance discordId with | ||||
|                 | Ok amount -> return! json {| Amount = amount |} next ctx | ||||
|                 | Error e -> return! RequestErrors.notFound (json {| Error = e |}) next ctx | ||||
|             with ex -> | ||||
|                 return! ServerErrors.internalError (json {| Error = ex.Message |}) next ctx | ||||
|         } | ||||
| 
 | ||||
| let modify sign (discordId : string) : HttpHandler = | ||||
|     fun (next : HttpFunc) (ctx : HttpContext) -> | ||||
|         task { | ||||
|             let! body = ctx.BindJsonAsync<{|Amount:int|}>() | ||||
|             match! getCurrentBalance discordId with | ||||
|             | Ok current -> | ||||
|                 let amount = body.Amount * sign | ||||
|                 if current + amount < 0 then | ||||
|                     return! RequestErrors.badRequest (json {| Error = "Insufficient funds" |}) next ctx | ||||
|                 else | ||||
|                 try | ||||
|                     let! _ = | ||||
|                         connStr | ||||
|                         |> Sql.connect | ||||
|                         |> Sql.parameters [ "did" , Sql.string discordId ; "amount" , Sql.int amount ] | ||||
|                         |> Sql.query """UPDATE "user" SET gbt = GREATEST(gbt + @amount, 0) WHERE discord_id = @did""" | ||||
|                         |> Sql.executeNonQueryAsync | ||||
|                     return! json {| NewBalance = current + amount |} next ctx | ||||
|                 with ex -> return! RequestErrors.notFound (json {| Error = ex.Message |}) next ctx | ||||
|             | Error e -> return! RequestErrors.notFound (json {| Error = e |}) next ctx | ||||
|         } | ||||
| 
 | ||||
| let webApp = | ||||
|     choose [ | ||||
|         GET   >=> requiresApiKey >=> routef "/user/%s/balance" get | ||||
|         PATCH >=> requiresApiKey >=> routef "/user/%s/balance/withdraw" (modify -1) | ||||
|         PATCH >=> requiresApiKey >=> routef "/user/%s/balance/deposit" (modify +1) | ||||
|         RequestErrors.NOT_FOUND "Not Found" ] | ||||
| 
 | ||||
| let errorHandler (ex : Exception) (logger : ILogger) = | ||||
|     logger.LogError(ex, "An unhandled exception has occurred while executing the request.") | ||||
|     clearResponse >=> setStatusCode 500 >=> text ex.Message | ||||
| 
 | ||||
| let configureApp (app : IApplicationBuilder) = | ||||
|     let env = app.ApplicationServices.GetService<IWebHostEnvironment>() | ||||
|     if env.IsDevelopment() then | ||||
|         app.UseDeveloperExceptionPage() | ||||
|     else | ||||
|         app.UseGiraffeErrorHandler(errorHandler) | ||||
|     |> ignore | ||||
|     app.UseGiraffe(webApp) | ||||
| 
 | ||||
| let configureServices (services : IServiceCollection) = | ||||
|     services.AddGiraffe() |> ignore | ||||
| 
 | ||||
| let configureLogging (builder : ILoggingBuilder) = | ||||
|     builder.AddConsole() | ||||
|            .AddDebug() |> ignore | ||||
| 
 | ||||
| [<EntryPoint>] | ||||
| let main args = | ||||
|     Host.CreateDefaultBuilder(args) | ||||
|         .ConfigureWebHostDefaults( | ||||
|             fun webHostBuilder -> | ||||
|                 webHostBuilder | ||||
|                     .ConfigureKestrel(fun opt -> | ||||
|                         opt.AddServerHeader <- false) | ||||
|                     .Configure(Action<IApplicationBuilder> configureApp) | ||||
|                     .ConfigureServices(configureServices) | ||||
|                     .ConfigureLogging(configureLogging) | ||||
|                     |> ignore) | ||||
|         .Build() | ||||
|         .Run() | ||||
|     0 | ||||
							
								
								
									
										19
									
								
								CurrencyAPI/CurrencyAPI.fsproj
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								CurrencyAPI/CurrencyAPI.fsproj
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,19 @@ | ||||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <Project Sdk="Microsoft.NET.Sdk.Web"> | ||||
|   <PropertyGroup> | ||||
|     <TargetFramework>net6.0</TargetFramework> | ||||
|     <AssemblyName>CurrencyAPI.App</AssemblyName> | ||||
|     <EnableDefaultContentItems>false</EnableDefaultContentItems> | ||||
|     <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects> | ||||
|   </PropertyGroup> | ||||
|   <ItemGroup> | ||||
|     <Compile Include="Currency.fs" /> | ||||
|   </ItemGroup> | ||||
|   <ItemGroup> | ||||
|     <None Include="web.config" CopyToOutputDirectory="PreserveNewest" /> | ||||
|     <Content Include="WebRoot\**\*"> | ||||
|       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> | ||||
|     </Content> | ||||
|   </ItemGroup> | ||||
|   <Import Project="..\.paket\Paket.Restore.targets" /> | ||||
| </Project> | ||||
							
								
								
									
										18
									
								
								CurrencyAPI/currency.rest
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								CurrencyAPI/currency.rest
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,18 @@ | ||||
| :headers = << | ||||
| Content-Type: application/json | ||||
| X-API-Key: 1a2ff166-8985-47f0-8e5a-a7c6fb321a3f | ||||
| # | ||||
| 
 | ||||
| # Get balance | ||||
| GET https://degenz-currency-api-prod-jv56z.ondigitalocean.app/user/90588624566886400/balance | ||||
| :headers | ||||
| 
 | ||||
| # Increment balance | ||||
| PATCH https://degenz-currency-api-prod-jv56z.ondigitalocean.app/user/90588624566886400/balance/deposit | ||||
| :headers | ||||
| { "amount" : 10 } | ||||
| 
 | ||||
| # Decrement balance | ||||
| PATCH https://degenz-currency-api-prod-jv56z.ondigitalocean.app/user/90588624566886400/balance/withdraw | ||||
| :headers | ||||
| { "amount" : 100 } | ||||
							
								
								
									
										5
									
								
								CurrencyAPI/paket.references
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								CurrencyAPI/paket.references
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,5 @@ | ||||
| FSharp.Data | ||||
| FSharp.Core | ||||
| dotenv.net | ||||
| Npgsql.FSharp | ||||
| Giraffe | ||||
							
								
								
									
										9
									
								
								CurrencyAPI/web.config
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								CurrencyAPI/web.config
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,9 @@ | ||||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <configuration> | ||||
|   <system.webServer> | ||||
|     <handlers> | ||||
|       <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" /> | ||||
|     </handlers> | ||||
|     <aspNetCore processPath="dotnet" arguments="CurrencyAPI.dll" stdoutLogEnabled="false" stdoutLogFile="logs/stdout" /> | ||||
|   </system.webServer> | ||||
| </configuration> | ||||
| @ -5,6 +5,8 @@ VisualStudioVersion = 16.0.30114.105 | ||||
| MinimumVisualStudioVersion = 10.0.40219.1 | ||||
| Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "Bot", "Bot\Bot.fsproj", "{FF9E58A6-1A1D-4DEC-B52D-265F215BF315}" | ||||
| EndProject | ||||
| Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "CurrencyAPI", "CurrencyAPI\CurrencyAPI.fsproj", "{AFA1A9F3-625E-44CA-83DA-A50756D119B5}" | ||||
| EndProject | ||||
| Global | ||||
| 	GlobalSection(SolutionConfigurationPlatforms) = preSolution | ||||
| 		Debug|Any CPU = Debug|Any CPU | ||||
| @ -22,5 +24,9 @@ Global | ||||
| 		{44151B85-0D17-4270-AD72-490A6D8D6290}.Debug|Any CPU.Build.0 = Debug|Any CPU | ||||
| 		{44151B85-0D17-4270-AD72-490A6D8D6290}.Release|Any CPU.ActiveCfg = Release|Any CPU | ||||
| 		{44151B85-0D17-4270-AD72-490A6D8D6290}.Release|Any CPU.Build.0 = Release|Any CPU | ||||
| 		{AFA1A9F3-625E-44CA-83DA-A50756D119B5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | ||||
| 		{AFA1A9F3-625E-44CA-83DA-A50756D119B5}.Debug|Any CPU.Build.0 = Debug|Any CPU | ||||
| 		{AFA1A9F3-625E-44CA-83DA-A50756D119B5}.Release|Any CPU.ActiveCfg = Release|Any CPU | ||||
| 		{AFA1A9F3-625E-44CA-83DA-A50756D119B5}.Release|Any CPU.Build.0 = Release|Any CPU | ||||
| 	EndGlobalSection | ||||
| EndGlobal | ||||
|  | ||||
							
								
								
									
										14
									
								
								Dockerfile
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								Dockerfile
									
									
									
									
									
								
							| @ -8,16 +8,18 @@ COPY . . | ||||
| 
 | ||||
| RUN dotnet tool restore | ||||
| 
 | ||||
| RUN dotnet restore "Bot/Bot.fsproj" | ||||
| RUN dotnet restore "CurrencyAPI/CurrencyAPI.fsproj" | ||||
| 
 | ||||
| WORKDIR "/src/Bot" | ||||
| WORKDIR "/src/CurrencyAPI/" | ||||
| 
 | ||||
| RUN dotnet build "Bot.fsproj" -c Release -o /app/build | ||||
| RUN dotnet build "CurrencyAPI.fsproj" -c Release -o /app/build | ||||
| 
 | ||||
| FROM build AS publish | ||||
| RUN dotnet publish "Bot.fsproj" -c Release -o /app/publish | ||||
| RUN dotnet publish "CurrencyAPI.fsproj" -c Release -o /app/publish --no-restore | ||||
| 
 | ||||
| FROM base AS final | ||||
| FROM mcr.microsoft.com/dotnet/aspnet:6.0 | ||||
| WORKDIR /app | ||||
| COPY --from=publish /app/publish . | ||||
| ENTRYPOINT "./Bot" | ||||
| EXPOSE 80 | ||||
| EXPOSE 443 | ||||
| ENTRYPOINT [ "dotnet", "./CurrencyAPI.App.dll" ] | ||||
|  | ||||
| @ -18,3 +18,5 @@ nuget Solnet.Extensions | ||||
| nuget Solnet.KeyStore | ||||
| nuget Solnet.Programs | ||||
| nuget Solnet.Rpc | ||||
| 
 | ||||
| nuget Giraffe | ||||
|  | ||||
							
								
								
									
										96
									
								
								paket.lock
									
									
									
									
									
								
							
							
						
						
									
										96
									
								
								paket.lock
									
									
									
									
									
								
							| @ -6,7 +6,7 @@ NUGET | ||||
|     ConcurrentHashSet (1.3) | ||||
|     dotenv.net (3.1.1) | ||||
|       System.Memory (>= 4.5.4) - restriction: || (&& (== net6.0) (< netstandard2.0)) (&& (== net6.0) (< netstandard2.1)) (== netstandard2.0) (&& (== netstandard2.1) (< netstandard2.0)) | ||||
|     DSharpPlus (4.3.0-nightly-01160) | ||||
|     DSharpPlus (4.3.0-nightly-01135) | ||||
|       Emzi0767.Common (>= 2.6.2) | ||||
|       Microsoft.Extensions.Logging.Abstractions (>= 5.0) | ||||
|       Newtonsoft.Json (>= 13.0.1) | ||||
| @ -16,22 +16,34 @@ NUGET | ||||
|       System.Net.WebSockets.Client (>= 4.3.2) | ||||
|       System.Runtime.InteropServices.RuntimeInformation (>= 4.3) | ||||
|       System.Threading.Channels (>= 5.0) | ||||
|     DSharpPlus.Interactivity (4.3.0-nightly-01160) | ||||
|     DSharpPlus.Interactivity (4.3.0-nightly-01135) | ||||
|       ConcurrentHashSet (>= 1.1) | ||||
|       DSharpPlus (>= 4.3.0-nightly-01160) | ||||
|     DSharpPlus.SlashCommands (4.3.0-nightly-01160) | ||||
|       DSharpPlus (>= 4.3.0-nightly-01160) | ||||
|       DSharpPlus (>= 4.3.0-nightly-01135) | ||||
|     DSharpPlus.SlashCommands (4.3.0-nightly-01135) | ||||
|       DSharpPlus (>= 4.3.0-nightly-01135) | ||||
|       Microsoft.Extensions.DependencyInjection (>= 5.0.1) | ||||
|     Emzi0767.Common (2.6.6) | ||||
|       System.Collections.Immutable (>= 6.0) | ||||
|       System.Runtime.CompilerServices.Unsafe (>= 6.0) | ||||
|     FSharp.Core (6.0.5) | ||||
|     FSharp.Data (4.2.9) | ||||
|       FSharp.Core (>= 5.0.1) | ||||
|     Emzi0767.Common (2.6.2) | ||||
|       System.Collections.Immutable (>= 5.0) | ||||
|       System.Memory (>= 4.5.4) | ||||
|       System.Runtime.CompilerServices.Unsafe (>= 5.0) | ||||
|       System.ValueTuple (>= 4.5) | ||||
|     FSharp.Core (6.0.3) | ||||
|     FSharp.Data (4.2.8) | ||||
|       FSharp.Core (>= 4.7.2) | ||||
|     FsToolkit.ErrorHandling (2.13) | ||||
|       FSharp.Core (>= 4.7.2) | ||||
|     Microsoft.Bcl.AsyncInterfaces (6.0) - restriction: || (&& (== net6.0) (>= net461)) (&& (== net6.0) (< netstandard2.1)) (== netstandard2.0) (&& (== netstandard2.1) (>= net461)) | ||||
|     Giraffe (6.0) | ||||
|       FSharp.Core (>= 6.0.1) - restriction: || (== net6.0) (&& (== netstandard2.0) (>= net6.0)) (&& (== netstandard2.1) (>= net6.0)) | ||||
|       Giraffe.ViewEngine (>= 1.3) - restriction: || (== net6.0) (&& (== netstandard2.0) (>= net6.0)) (&& (== netstandard2.1) (>= net6.0)) | ||||
|       Microsoft.IO.RecyclableMemoryStream (>= 2.2) - restriction: || (== net6.0) (&& (== netstandard2.0) (>= net6.0)) (&& (== netstandard2.1) (>= net6.0)) | ||||
|       Newtonsoft.Json (>= 13.0.1) - restriction: || (== net6.0) (&& (== netstandard2.0) (>= net6.0)) (&& (== netstandard2.1) (>= net6.0)) | ||||
|       System.Text.Json (>= 6.0.2) - restriction: || (== net6.0) (&& (== netstandard2.0) (>= net6.0)) (&& (== netstandard2.1) (>= net6.0)) | ||||
|       Utf8Json (>= 1.3.7) - restriction: || (== net6.0) (&& (== netstandard2.0) (>= net6.0)) (&& (== netstandard2.1) (>= net6.0)) | ||||
|     Giraffe.ViewEngine (1.4) - restriction: || (== net6.0) (&& (== netstandard2.0) (>= net6.0)) (&& (== netstandard2.1) (>= net6.0)) | ||||
|       FSharp.Core (>= 5.0) | ||||
|     Microsoft.Bcl.AsyncInterfaces (6.0) - restriction: || (&& (== net6.0) (< netstandard2.1)) (== netstandard2.0) | ||||
|       System.Threading.Tasks.Extensions (>= 4.5.4) - restriction: || (&& (== net6.0) (>= net461)) (&& (== net6.0) (< netstandard2.1)) (== netstandard2.0) (&& (== netstandard2.1) (>= net461)) | ||||
|     Microsoft.Bcl.HashCode (1.1.1) - restriction: || (&& (== net6.0) (< netstandard2.1)) (== netstandard2.0) | ||||
|     Microsoft.Extensions.Configuration (6.0.1) - restriction: || (== net6.0) (&& (== netstandard2.0) (>= net6.0)) (&& (== netstandard2.1) (>= net6.0)) | ||||
|       Microsoft.Extensions.Configuration.Abstractions (>= 6.0) | ||||
|       Microsoft.Extensions.Primitives (>= 6.0) | ||||
| @ -83,7 +95,8 @@ NUGET | ||||
|       Microsoft.Extensions.Primitives (>= 6.0) | ||||
|     Microsoft.Extensions.Primitives (6.0) - restriction: || (== net6.0) (&& (== netstandard2.0) (>= net6.0)) (&& (== netstandard2.1) (>= net6.0)) | ||||
|       System.Runtime.CompilerServices.Unsafe (>= 6.0) | ||||
|     Microsoft.NETCore.Platforms (6.0.5) | ||||
|     Microsoft.IO.RecyclableMemoryStream (2.2) - restriction: || (== net6.0) (&& (== netstandard2.0) (>= net6.0)) (&& (== netstandard2.1) (>= net6.0)) | ||||
|     Microsoft.NETCore.Platforms (6.0.2) | ||||
|     Microsoft.NETCore.Targets (5.0) | ||||
|     Microsoft.Win32.Primitives (4.3) | ||||
|       Microsoft.NETCore.Platforms (>= 1.1) | ||||
| @ -91,11 +104,24 @@ NUGET | ||||
|       System.Runtime (>= 4.3) | ||||
|     mixpanel-csharp (5.0) | ||||
|     Newtonsoft.Json (13.0.1) | ||||
|     Npgsql (6.0.5) - restriction: || (== net6.0) (&& (== netstandard2.0) (>= net6.0)) (&& (== netstandard2.1) (>= net6.0)) | ||||
|     Npgsql (6.0.3) | ||||
|       Microsoft.Bcl.AsyncInterfaces (>= 6.0) - restriction: || (&& (== net6.0) (< netstandard2.1)) (== netstandard2.0) | ||||
|       Microsoft.Bcl.HashCode (>= 1.1.1) - restriction: || (&& (== net6.0) (< netstandard2.1)) (== netstandard2.0) | ||||
|       System.Collections.Immutable (>= 6.0) - restriction: || (&& (== net6.0) (< netcoreapp3.1)) (&& (== net6.0) (< netstandard2.1)) (== netstandard2.0) (== netstandard2.1) | ||||
|       System.Diagnostics.DiagnosticSource (>= 6.0) - restriction: || (&& (== net6.0) (< net5.0)) (&& (== net6.0) (< netcoreapp3.1)) (&& (== net6.0) (< netstandard2.1)) (== netstandard2.0) (== netstandard2.1) | ||||
|       System.Memory (>= 4.5.4) - restriction: || (&& (== net6.0) (< netstandard2.1)) (== netstandard2.0) | ||||
|       System.Runtime.CompilerServices.Unsafe (>= 6.0) | ||||
|     Npgsql.FSharp (5.2) | ||||
|       FSharp.Core (>= 6.0.2) - restriction: || (== net6.0) (&& (== netstandard2.0) (>= net6.0)) (&& (== netstandard2.1) (>= net6.0)) | ||||
|       Npgsql (>= 6.0.5) - restriction: || (== net6.0) (&& (== netstandard2.0) (>= net6.0)) (&& (== netstandard2.1) (>= net6.0)) | ||||
|       System.Text.Json (>= 6.0) - restriction: || (&& (== net6.0) (< netcoreapp3.1)) (&& (== net6.0) (< netstandard2.1)) (== netstandard2.0) (== netstandard2.1) | ||||
|       System.Threading.Channels (>= 6.0) - restriction: || (&& (== net6.0) (< netcoreapp3.1)) (&& (== net6.0) (< netstandard2.1)) (== netstandard2.0) (== netstandard2.1) | ||||
|       System.Threading.Tasks.Extensions (>= 4.5.4) - restriction: || (&& (== net6.0) (< netstandard2.1)) (== netstandard2.0) | ||||
|       System.ValueTuple (>= 4.5) - restriction: || (&& (== net6.0) (< netstandard2.1)) (== netstandard2.0) | ||||
|     Npgsql.FSharp (4.1) | ||||
|       FSharp.Core (>= 4.7.2) | ||||
|       Npgsql (>= 5.0.3) | ||||
|       Ply (>= 0.3.1) | ||||
|     Ply (0.3.1) | ||||
|       FSharp.Core (>= 4.6.2) | ||||
|       System.Threading.Tasks.Extensions (>= 4.5.4) | ||||
|     Portable.BouncyCastle (1.9) - restriction: || (== net6.0) (&& (== netstandard2.0) (>= net6.0)) (&& (== netstandard2.1) (>= net6.0)) | ||||
|     runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3) | ||||
|     runtime.debian.9-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3) | ||||
| @ -140,21 +166,21 @@ NUGET | ||||
|     runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3) | ||||
|     runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3) | ||||
|     runtime.ubuntu.18.04-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3) | ||||
|     Solnet.Extensions (6.1) | ||||
|       Solnet.Programs (>= 6.1) - restriction: || (== net6.0) (&& (== netstandard2.0) (>= net6.0)) (&& (== netstandard2.1) (>= net6.0)) | ||||
|       Solnet.Rpc (>= 6.1) - restriction: || (== net6.0) (&& (== netstandard2.0) (>= net6.0)) (&& (== netstandard2.1) (>= net6.0)) | ||||
|       Solnet.Wallet (>= 6.1) - restriction: || (== net6.0) (&& (== netstandard2.0) (>= net6.0)) (&& (== netstandard2.1) (>= net6.0)) | ||||
|     Solnet.KeyStore (6.1) | ||||
|     Solnet.Extensions (6.0.11) | ||||
|       Solnet.Programs (>= 6.0.11) - restriction: || (== net6.0) (&& (== netstandard2.0) (>= net6.0)) (&& (== netstandard2.1) (>= net6.0)) | ||||
|       Solnet.Rpc (>= 6.0.11) - restriction: || (== net6.0) (&& (== netstandard2.0) (>= net6.0)) (&& (== netstandard2.1) (>= net6.0)) | ||||
|       Solnet.Wallet (>= 6.0.11) - restriction: || (== net6.0) (&& (== netstandard2.0) (>= net6.0)) (&& (== netstandard2.1) (>= net6.0)) | ||||
|     Solnet.KeyStore (6.0.11) | ||||
|       Chaos.NaCl.Standard (>= 1.0) - restriction: || (== net6.0) (&& (== netstandard2.0) (>= net6.0)) (&& (== netstandard2.1) (>= net6.0)) | ||||
|       Portable.BouncyCastle (>= 1.9) - restriction: || (== net6.0) (&& (== netstandard2.0) (>= net6.0)) (&& (== netstandard2.1) (>= net6.0)) | ||||
|       Solnet.Wallet (>= 6.1) - restriction: || (== net6.0) (&& (== netstandard2.0) (>= net6.0)) (&& (== netstandard2.1) (>= net6.0)) | ||||
|     Solnet.Programs (6.1) | ||||
|       Solnet.Rpc (>= 6.1) - restriction: || (== net6.0) (&& (== netstandard2.0) (>= net6.0)) (&& (== netstandard2.1) (>= net6.0)) | ||||
|     Solnet.Rpc (6.1) | ||||
|       Solnet.Wallet (>= 6.0.11) - restriction: || (== net6.0) (&& (== netstandard2.0) (>= net6.0)) (&& (== netstandard2.1) (>= net6.0)) | ||||
|     Solnet.Programs (6.0.11) | ||||
|       Solnet.Rpc (>= 6.0.11) - restriction: || (== net6.0) (&& (== netstandard2.0) (>= net6.0)) (&& (== netstandard2.1) (>= net6.0)) | ||||
|     Solnet.Rpc (6.0.11) | ||||
|       Microsoft.Extensions.Logging (>= 6.0) - restriction: || (== net6.0) (&& (== netstandard2.0) (>= net6.0)) (&& (== netstandard2.1) (>= net6.0)) | ||||
|       Microsoft.Extensions.Logging.Console (>= 6.0) - restriction: || (== net6.0) (&& (== netstandard2.0) (>= net6.0)) (&& (== netstandard2.1) (>= net6.0)) | ||||
|       Solnet.Wallet (>= 6.1) - restriction: || (== net6.0) (&& (== netstandard2.0) (>= net6.0)) (&& (== netstandard2.1) (>= net6.0)) | ||||
|     Solnet.Wallet (6.1) - restriction: || (== net6.0) (&& (== netstandard2.0) (>= net6.0)) (&& (== netstandard2.1) (>= net6.0)) | ||||
|       Solnet.Wallet (>= 6.0.11) - restriction: || (== net6.0) (&& (== netstandard2.0) (>= net6.0)) (&& (== netstandard2.1) (>= net6.0)) | ||||
|     Solnet.Wallet (6.0.11) - restriction: || (== net6.0) (&& (== netstandard2.0) (>= net6.0)) (&& (== netstandard2.1) (>= net6.0)) | ||||
|       Chaos.NaCl.Standard (>= 1.0) - restriction: || (== net6.0) (&& (== netstandard2.0) (>= net6.0)) (&& (== netstandard2.1) (>= net6.0)) | ||||
|       Portable.BouncyCastle (>= 1.9) - restriction: || (== net6.0) (&& (== netstandard2.0) (>= net6.0)) (&& (== netstandard2.1) (>= net6.0)) | ||||
|     System.Buffers (4.5.1) - restriction: || (&& (== net6.0) (>= monotouch)) (&& (== net6.0) (>= net461)) (&& (== net6.0) (< netcoreapp2.0) (< netstandard2.1)) (&& (== net6.0) (< netstandard1.1)) (&& (== net6.0) (< netstandard2.0)) (&& (== net6.0) (< netstandard2.1) (>= xamarinios)) (&& (== net6.0) (< netstandard2.1) (>= xamarinmac)) (&& (== net6.0) (< netstandard2.1) (>= xamarintvos)) (&& (== net6.0) (< netstandard2.1) (>= xamarinwatchos)) (== netstandard2.0) (== netstandard2.1) | ||||
| @ -226,7 +252,7 @@ NUGET | ||||
|       System.Resources.ResourceManager (>= 4.3) | ||||
|       System.Runtime (>= 4.3) | ||||
|       System.Runtime.Extensions (>= 4.3) | ||||
|     System.Memory (4.5.5) | ||||
|     System.Memory (4.5.4) | ||||
|       System.Buffers (>= 4.5.1) - restriction: || (&& (== net6.0) (>= monotouch)) (&& (== net6.0) (>= net461)) (&& (== net6.0) (< netcoreapp2.0)) (&& (== net6.0) (< netstandard1.1)) (&& (== net6.0) (< netstandard2.0)) (&& (== net6.0) (>= xamarinios)) (&& (== net6.0) (>= xamarinmac)) (&& (== net6.0) (>= xamarintvos)) (&& (== net6.0) (>= xamarinwatchos)) (== netstandard2.0) (== netstandard2.1) | ||||
|       System.Numerics.Vectors (>= 4.4) - restriction: || (&& (== net6.0) (< netcoreapp2.0)) (== netstandard2.0) (== netstandard2.1) | ||||
|       System.Runtime.CompilerServices.Unsafe (>= 4.5.3) - restriction: || (&& (== net6.0) (>= monotouch)) (&& (== net6.0) (>= net461)) (&& (== net6.0) (< netcoreapp2.0)) (&& (== net6.0) (< netcoreapp2.1)) (&& (== net6.0) (< netstandard1.1)) (&& (== net6.0) (< netstandard2.0)) (&& (== net6.0) (>= uap10.1)) (&& (== net6.0) (>= xamarinios)) (&& (== net6.0) (>= xamarinmac)) (&& (== net6.0) (>= xamarintvos)) (&& (== net6.0) (>= xamarinwatchos)) (== netstandard2.0) (== netstandard2.1) | ||||
| @ -357,6 +383,8 @@ NUGET | ||||
|       System.IO (>= 4.3) | ||||
|       System.Reflection.Primitives (>= 4.3) | ||||
|       System.Runtime (>= 4.3) | ||||
|     System.Reflection.Emit (4.7) - restriction: || (== net6.0) (&& (== netstandard2.0) (>= net6.0)) (&& (== netstandard2.1) (>= net6.0)) | ||||
|     System.Reflection.Emit.Lightweight (4.7) - restriction: || (== net6.0) (&& (== netstandard2.0) (>= net6.0)) (&& (== netstandard2.1) (>= net6.0)) | ||||
|     System.Reflection.Extensions (4.3) | ||||
|       Microsoft.NETCore.Platforms (>= 1.1) | ||||
|       Microsoft.NETCore.Targets (>= 1.1) | ||||
| @ -506,7 +534,7 @@ NUGET | ||||
|       System.Text.Encoding (>= 4.3) | ||||
|     System.Text.Encodings.Web (6.0) - restriction: || (== net6.0) (&& (== netstandard2.0) (>= net6.0)) (&& (== netstandard2.1) (>= net6.0)) | ||||
|       System.Runtime.CompilerServices.Unsafe (>= 6.0) | ||||
|     System.Text.Json (6.0.5) - restriction: || (== net6.0) (&& (== netstandard2.0) (>= net6.0)) (&& (== netstandard2.1) (>= net6.0)) | ||||
|     System.Text.Json (6.0.2) | ||||
|       System.Runtime.CompilerServices.Unsafe (>= 6.0) | ||||
|       System.Text.Encodings.Web (>= 6.0) | ||||
|     System.Threading (4.3) | ||||
| @ -518,7 +546,7 @@ NUGET | ||||
|       Microsoft.NETCore.Platforms (>= 1.1) | ||||
|       Microsoft.NETCore.Targets (>= 1.1) | ||||
|       System.Runtime (>= 4.3) | ||||
|     System.Threading.Tasks.Extensions (4.5.4) - restriction: || (&& (== net6.0) (>= net461)) (&& (== net6.0) (< netstandard2.1)) (== netstandard2.0) (&& (== netstandard2.1) (>= net461)) | ||||
|     System.Threading.Tasks.Extensions (4.5.4) | ||||
|       System.Runtime.CompilerServices.Unsafe (>= 4.5.3) - restriction: || (&& (== net6.0) (>= net461)) (&& (== net6.0) (< netcoreapp2.1)) (&& (== net6.0) (< netstandard1.0)) (&& (== net6.0) (< netstandard2.0)) (&& (== net6.0) (>= wp8)) (== netstandard2.0) (== netstandard2.1) | ||||
|     System.Threading.ThreadPool (4.3) | ||||
|       System.Runtime (>= 4.3) | ||||
| @ -527,3 +555,9 @@ NUGET | ||||
|       Microsoft.NETCore.Platforms (>= 1.1) | ||||
|       Microsoft.NETCore.Targets (>= 1.1) | ||||
|       System.Runtime (>= 4.3) | ||||
|     System.ValueTuple (4.5) | ||||
|     Utf8Json (1.3.7) - restriction: || (== net6.0) (&& (== netstandard2.0) (>= net6.0)) (&& (== netstandard2.1) (>= net6.0)) | ||||
|       System.Reflection.Emit (>= 4.3) | ||||
|       System.Reflection.Emit.Lightweight (>= 4.3) | ||||
|       System.Threading.Tasks.Extensions (>= 4.4) | ||||
|       System.ValueTuple (>= 4.4) | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user