From 4497c0f36ba7fb789f3dde85d69f27777ae4bbc5 Mon Sep 17 00:00:00 2001 From: Vamsi Krishna B Date: Wed, 11 May 2022 22:32:09 +0530 Subject: [PATCH] Added support for UA --- .../controllers/address_controller.ex | 26 ++++ .../controllers/search_controller.ex | 26 +++- lib/zcash_explorer_web/router.ex | 1 + .../templates/address/u_address.html.heex | 115 ++++++++++++++++++ mix.lock | 2 +- 5 files changed, 168 insertions(+), 2 deletions(-) create mode 100644 lib/zcash_explorer_web/templates/address/u_address.html.heex diff --git a/lib/zcash_explorer_web/controllers/address_controller.ex b/lib/zcash_explorer_web/controllers/address_controller.ex index 87d8272..58efaf7 100644 --- a/lib/zcash_explorer_web/controllers/address_controller.ex +++ b/lib/zcash_explorer_web/controllers/address_controller.ex @@ -91,4 +91,30 @@ defmodule ZcashExplorerWeb.AddressController do page_title: "Zcash Address #{address}" ) end + + def get_ua(conn, %{"address" => ua}) do + {:ok, details} = Zcashex.z_listunifiedreceivers(ua) + IO.inspect(details) + orchard_present = Map.has_key?(details, "orchard") + transparent_present = Map.has_key?(details, "p2pkh") + sapling_present = Map.has_key?(details, "sapling") + + if String.starts_with?(ua, ["u"]) do + u_qr = + ua + |> EQRCode.encode() + |> EQRCode.png(width: 150, color: <<0, 0, 0>>, background_color: :transparent) + |> Base.encode64() + + render(conn, "u_address.html", + address: ua, + qr: u_qr, + page_title: "Zcash Unified Address", + orchard_present: orchard_present, + transparent_present: transparent_present, + sapling_present: sapling_present, + details: details + ) + end + end end diff --git a/lib/zcash_explorer_web/controllers/search_controller.ex b/lib/zcash_explorer_web/controllers/search_controller.ex index 1f8df71..6cb4a06 100644 --- a/lib/zcash_explorer_web/controllers/search_controller.ex +++ b/lib/zcash_explorer_web/controllers/search_controller.ex @@ -31,6 +31,11 @@ defmodule ZcashExplorerWeb.SearchController do {:ok, tadd_resp} = Enum.at(results, 2) {:ok, zadd_resp} = Enum.at(results, 3) + IO.inspect(block_resp) + IO.inspect(tx_resp) + IO.inspect(tadd_resp) + IO.inspect(zadd_resp) + cond do is_valid_block?(block_resp) -> redirect(conn, to: "/blocks/#{qs}") @@ -44,6 +49,9 @@ defmodule ZcashExplorerWeb.SearchController do is_valid_zaddr?(zadd_resp) -> redirect(conn, to: "/address/#{qs}") + is_valid_unified_address?(zadd_resp) -> + redirect(conn, to: "/ua/#{qs}") + true -> conn |> put_status(:not_found) @@ -80,11 +88,27 @@ defmodule ZcashExplorerWeb.SearchController do false end - def is_valid_zaddr?({:ok, %{"isvalid" => true}}) do + def is_valid_zaddr?({:ok, %{"isvalid" => true, "type" => "sprout"}}) do true end + def is_valid_zaddr?({:ok, %{"isvalid" => true, "type" => "sapling"}}) do + true + end + + def is_valid_zaddr?({:ok, %{"isvalid" => true, "type" => "unified"}}) do + false + end + def is_valid_zaddr?({:ok, %{"isvalid" => false}}) do false end + + def is_valid_unified_address?({:ok, %{"isvalid" => true, "type" => "unified"}}) do + true + end + + def is_valid_unified_address?(resp) do + false + end end diff --git a/lib/zcash_explorer_web/router.ex b/lib/zcash_explorer_web/router.ex index 3322030..e9bd4b6 100644 --- a/lib/zcash_explorer_web/router.ex +++ b/lib/zcash_explorer_web/router.ex @@ -45,6 +45,7 @@ defmodule ZcashExplorerWeb.Router do get "/vk", PageController, :vk post "/vk", PageController, :do_import_vk get "/blockchain-info", PageController, :blockchain_info + get "/ua/:address", AddressController, :get_ua end scope "/", ZcashExplorerWeb do diff --git a/lib/zcash_explorer_web/templates/address/u_address.html.heex b/lib/zcash_explorer_web/templates/address/u_address.html.heex new file mode 100644 index 0000000..fed99c2 --- /dev/null +++ b/lib/zcash_explorer_web/templates/address/u_address.html.heex @@ -0,0 +1,115 @@ +
+
+
+
+ +

Details for the Zcash Unified Address: +

+

+ <%= @address %> +

+
+ +
+ +
+ +
+
+
+
+
+
+

+ You are viewing the details of a + + Zcash Unified Address. +

+
+ +
+ + +
+
+
+
+
\ No newline at end of file diff --git a/mix.lock b/mix.lock index 86b03c2..67f4b5d 100644 --- a/mix.lock +++ b/mix.lock @@ -57,5 +57,5 @@ "tzdata": {:hex, :tzdata, "1.1.1", "20c8043476dfda8504952d00adac41c6eda23912278add38edc140ae0c5bcc46", [:mix], [{:hackney, "~> 1.17", [hex: :hackney, repo: "hexpm", optional: false]}], "hexpm", "a69cec8352eafcd2e198dea28a34113b60fdc6cb57eb5ad65c10292a6ba89787"}, "unicode_util_compat": {:hex, :unicode_util_compat, "0.7.0", "bc84380c9ab48177092f43ac89e4dfa2c6d62b40b8bd132b1059ecc7232f9a78", [:rebar3], [], "hexpm", "25eee6d67df61960cf6a794239566599b09e17e668d3700247bc498638152521"}, "unsafe": {:hex, :unsafe, "1.0.1", "a27e1874f72ee49312e0a9ec2e0b27924214a05e3ddac90e91727bc76f8613d8", [:mix], [], "hexpm", "6c7729a2d214806450d29766abc2afaa7a2cbecf415be64f36a6691afebb50e5"}, - "zcashex": {:git, "https://github.com/nighthawk-apps/zcashex.git", "dca51cca3df69586016b24277614565514e1b8e2", []}, + "zcashex": {:git, "https://github.com/nighthawk-apps/zcashex.git", "5975509b8d6fc8716d7891eb8c9cb7b089ca18d3", []}, }