You can use your coins to buy upgrades, and I have remote events set up to give you those upgrades AND take away the coins. Once bought it doesn't take away the coins OR give you the upgrade, but the script continues like everything worked. (I know this because it destroys the button after purchase)

Server-Side Script (For all remote events)

local replicatedStorage = game:GetService("ReplicatedStorage")

replicatedStorage.RemoteControl.RemoteJumpCoin.OnServerEvent:connect(function(player, datatype)
	if datatype == "AddJump" then
		local JumpAmount = Instance.new("IntValue", game:GetService("ServerStorage"))
		JumpAmount.Name = player.Name.."Jumps"
		JumpAmount.Value = 1
		
		player.Name.leaderstats.Coins.Value = player.Name.leaderstats.Coins.Value + JumpAmount 
	end
end)

replicatedStorage.RemoteControl.Upgrades.OnServerEvent:connect(function(player, upgrade)
	if upgrade == "Velocity" then
		local trampoline = game.Workspace.Trampoline
		local trampVel = trampoline.Velocity
		local velval = game:GetService("ServerStorage"):FindFirstChild("VelVal")
		
		for i,v in pairs(game:GetService("ServerStorage"):FindFirstChild(player.Name)) do
			if v:IsA("Folder") then
				for i,vel in pairs(v:FindFirstChild("Velocity")) do
					if vel:IsA("Vector3Value") then
						vel.Value = Vector3.new(0, velval.Value + 20, 0)
					end
				end
			end
		end
	elseif upgrade == "JumpConvert" then
		-- To Be Added Later
	elseif upgrade == "MoreJumps" then
		local JumpAmount = game:GetService("ServerStorage"):FindFirstChild(player.Name.."Jumps")
		JumpAmount = JumpAmount.Value + 1
	end
end)

replicatedStorage.RemoteControl.PurchaseUpgrade.OnServerEvent:connect(function(player, upgrade)
	if upgrade == "Jump1" then
		player.Name.leaderstats.Coins.Value = player.Name.leaderstats.Coins.Value - 200
	elseif upgrade == "Jump2" then
		player.Name.leaderstats.Coins.Value = player.Name.leaderstats.Coins.Value - 500
	elseif upgrade == "Jump3" then
		player.Name.leaderstats.Coins.Value = player.Name.leaderstats.Coins.Value - 1000
	elseif upgrade == "Jump4" then
		player.Name.leaderstats.Coins.Value = player.Name.leaderstats.Coins.Value - 1700
	end
end)

replicatedStorage.RemoteControl.PurchaseVel.OnServerEvent:connect(function(player, upgrade)
	if upgrade == "Vel1" then
		player.Name.leaderstats.Coins.Value = player.Name.leaderstats.Coins.Value - 100
	elseif upgrade == "Vel2" then
		player.Name.leaderstats.Coins.Value = player.Name.leaderstats.Coins.Value - 300
	elseif upgrade == "Vel3" then
		player.Name.leaderstats.Coins.Value = player.Name.leaderstats.Coins.Value - 650
	elseif upgrade == "Vel4" then
		player.Name.leaderstats.Coins.Value = player.Name.leaderstats.Coins.Value - 1300 
	end
end)

Here is where I "FireServer" to connect to these events (the events are held in ReplicatedStorage within a script)

Client-Side Connections

local player = game.Players.LocalPlayer
local ui = player:WaitForChild("PlayerGui")
local gameUi = ui:WaitForChild("Game")
local replicatedStorage = game:GetService("ReplicatedStorage")
local serverStorage = game:GetService("ServerStorage")
local remoteControl = replicatedStorage.RemoteControl
local upgradesRem = remoteControl.Upgrades
local purchaseUpg = remoteControl.PurchaseUpgrade
local purchaseVel = remoteControl.PurchaseVel

local jumps = player.leaderstats.Jumps
local coins = player.leaderstats.Coins
local velocity = replicatedStorage:WaitForChild(player.Name).Velocity

local velStorage = replicatedStorage.Velocity:FindFirstChild(player.Name)
local upgrades = gameUi.UpgradesF
local vel = upgrades.Velocity
local jum = upgrades.Jumps
local jumpAmount = serverStorage:FindFirstChild(player.Name.."Jumps")

local jumPurchased = false
local jumPurchased2 = false
local jumPurchased3 = false
local jumPurchased4 = false

local velPurchased = false
local velPurchased2 = false
local velPurchased3 = false
local velPurchased4 = false

for i,v in pairs(jum:GetChildren()) do
	if v:IsA("TextButton") then
		if v.Name == "MoreJumps" then
			v.MouseButton1Click:connect(function(onClicked)
				if coins.Value >= 200 then
					if jumPurchased == false then
						jumPurchased = true
						purchaseUpg:FireServer(player, "Jump1")
						wait(0.05)
						upgradesRem:FireServer(player, "MoreJumps")
						v:Destroy()
					end
				end
			end)
		elseif v.Name == "MoreJumps2" then
			v.MouseButton1Click:connect(function(onClicked)
				if coins.Value >= 500 then
					if jumPurchased2 == false then
						jumPurchased2 = true
						purchaseUpg:FireServer(player, "Jump2")
						wait(0.05)
						upgradesRem:FireServer(player, "MoreJumps")
						v:Destroy()
					end
				end
			end)
		elseif v.Name == "MoreJumps3" then
			v.MouseButton1Click:connect(function(onClicked)
				if coins.Value >= 1000 then
					if jumPurchased3 == false then
						jumPurchased3 = true
						purchaseUpg:FireServer(player, "Jump3")
						wait(0.05)
						upgradesRem:FireServer(player, "MoreJumps")
						v:Destroy()
					end
				end
			end)
		elseif v.Name == "MoreJumps4" then
			v.MouseButton1Click:connect(function(onClicked)
				if coins.Value >= 1700 then
					if jumPurchased4 == false then
						jumPurchased4 = true
						purchaseUpg:FireServer(player, "Jump4")
						wait(0.05)
						upgradesRem:FireServer(player, "MoreJumps")
						v:Destroy()
					end
				end
			end)
		end
	end
end

for i,v in pairs(vel:GetChildren()) do
	if v:IsA("TextButton") then
		if v.Name == "MoreVelocity" then
			v.MouseButton1Click:connect(function(onClicked)
				if coins.Value >= 100 then
					if velPurchased == false then
						velPurchased = true
						purchaseVel:FireServer(player, "Vel1")
						wait(0.05)
						upgradesRem:FireServer(player, "Velocity")
						v:Destroy()
					end
				end
			end)
		elseif v.Name == "MoreVelocity2" then
			v.MouseButton1Click:connect(function(onClicked)
				if coins.Value >= 300 then
					if velPurchased2 == false then
						velPurchased2 = true
						purchaseVel:FireServer(player, "Vel2")
						wait(0.05)
						upgradesRem:FireServer(player, "Velocity")
						v:Destroy()
					end
				end
			end)
		elseif v.Name == "MoreVelocity3" then
			v.MouseButton1Click:connect(function(onClicked)
				if coins.Value >= 650 then
					if velPurchased3 == false then
						velPurchased3 = true
						purchaseVel:FireServer(player, "Vel3")
						wait(0.05)
						upgradesRem:FireServer(player, "Velocity")
						v:Destroy()
					end
				end
			end)
		elseif v.Name == "MoreVelocity4" then
			v.MouseButton1Click:connect(function(onClicked)
				if coins.Value >= 1300 then
					if velPurchased4 == false then
						velPurchased4 = true
						purchaseVel:FireServer(player, "Vel4")
						wait(0.05)
						upgradesRem:FireServer(player, "Velocity")
						v:Destroy()
					end
				end
			end)
		end
	end
end