Skip to content

Commit

Permalink
add db query + proof
Browse files Browse the repository at this point in the history
  • Loading branch information
MSghais committed Sep 26, 2024
1 parent de6fa59 commit 499d24f
Show file tree
Hide file tree
Showing 7 changed files with 102 additions and 5 deletions.
42 changes: 40 additions & 2 deletions lib/cashubrew/core/mint.ex
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ defmodule Cashubrew.Mint do
"""

use GenServer
alias Cashubrew.Query.MeltTokens
alias Cashubrew.Cashu.BlindSignature
alias Cashubrew.Crypto.BDHKE
alias Cashubrew.Lightning.MockLightningNetworkService
Expand Down Expand Up @@ -241,7 +242,7 @@ defmodule Cashubrew.Mint do
expiry: expiry,
request_lookup_id: request,
}
case repo.insert(MeltQuote.changeset(%MeltQuote{}, attrs)) do
case repo.insert(Cashubrew.Schema.MeltQuote.changeset(%Cashubrew.Schema.MeltQuote{}, attrs)) do
{:ok, melt_quote} ->
{:reply, {:ok, melt_quote}, state}
{:error, changeset} ->
Expand All @@ -251,11 +252,48 @@ defmodule Cashubrew.Mint do

def handle_call({:create_melt_tokens, quote_id, inputs}, _from, state) do
repo = Application.get_env(:cashubrew, :repo)

attrs = %{
request: quote_id, # quote_id
unit: quote_id,
amount: 0,
fee_reserve: 0,
expiry: 0,
request_lookup_id: quote_id,
}
{:reply, {:ok, attrs}, state}

# TODO
# Verify quote_id

{:ok, melt_find}=Cashubrew.Query.MeltTokens.get_melt_by_quote_id!(quote_id)
IO.puts("melt_find: #{melt_find}")

# Check if quote is already paid or not

# Check total amount


# Check proofs

# melt_tokens_response=Cashubrew.Query.MeltTokens.list_melt_tokens()
# IO.puts("melt_tokens: #{melt_tokens_response}")


# Verify proof spent
# Check total amount


# TODO Add fee reserve
fee_reserve=0
# Create and Saved melt quote
expiry = :os.system_time(:second) + 3600

case repo.insert(MeltTokens.changeset(%MeltTokens{}, attrs)) do
{:ok, melt_quote} ->
{:reply, {:ok, melt_quote}, state}
{:error, changeset} ->
{:reply, {:error, changeset}, state}
end
end

# Public API
Expand Down
20 changes: 20 additions & 0 deletions lib/cashubrew/db/query/melt_tokens.ex
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
defmodule Cashubrew.Query.MeltTokens do
import Ecto.Query, warn: false
alias Cashubrew.Repo
alias Cashubrew.Schema.MeltTokens

# Fetch all users
def list_melt_tokens do
Repo.all(MeltTokens)
end

# Fetch a quote by id
def get_melt_by_quote_id!(quote_id) do
query = from u in MeltTokens,
where: u.request == ^quote_id,
select: u

Repo.one(query) # Return a single user (or nil if no match)
end

end
1 change: 1 addition & 0 deletions lib/cashubrew/schema/melt_tokens.ex
Original file line number Diff line number Diff line change
Expand Up @@ -21,4 +21,5 @@ defmodule Cashubrew.Schema.MeltTokens do
|> cast(attrs, [:request, :unit, :amount, :fee_reserve, :expiry, :request_lookup_id])
|> validate_required([:request, :unit, :amount, :fee_reserve, :expiry, :request_lookup_id])
end

end
23 changes: 23 additions & 0 deletions lib/cashubrew/schema/proof.ex
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
defmodule Cashubrew.Schema.Proof do
@moduledoc """
Schema for a mint quote.
"""
use Ecto.Schema
import Ecto.Changeset

schema "proof" do
field(:quote_id, :string)
field(:secret, :string)
field(:amount, :integer)
field(:y, :string)
field(:c, :string)

timestamps()
end

def changeset(quote, attrs) do
quote
|> cast(attrs, [:quote_id, :secret, :amount, :y, :c])
|> validate_required([:quote_id, :secret, :amount, :y, :c])
end
end
4 changes: 2 additions & 2 deletions lib/cashubrew/web/controllers/mint_controller.ex
Original file line number Diff line number Diff line change
Expand Up @@ -244,8 +244,8 @@ defmodule Cashubrew.Web.MintController do
conn
|> put_status(:created)
|> json(%{
quote: quote.id,
request: quote.payment_request,
quote: quote.request,
request: quote.request,
state: "UNPAID",
expiry: quote.expiry
})
Expand Down
2 changes: 1 addition & 1 deletion priv/repo/migrations/20240918113125_create_melt_tokens.exs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ defmodule Gakimint.Repo.Migrations.CreateMeltQuoteResponse do
use Ecto.Migration

def change do
create table(:melt_quote_response) do
create table(:melt_tokens) do
add :request, :string, null: false
add :unit, :string, null: false
add :amount, :integer, null: false
Expand Down
15 changes: 15 additions & 0 deletions priv/repo/migrations/20240918113126_create_proof.exs
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
defmodule Gakimint.Repo.Migrations.CreateProof do
use Ecto.Migration

def change do
create table(:proof) do
add :quote_id, :string, null: false
add :secret, :string, null: false
add :amount, :integer, null: false
add :y, :string, null: false
add :c, :string, null: false

timestamps()
end
end
end

0 comments on commit 499d24f

Please sign in to comment.