Skip to content

Commit

Permalink
feat: add search by commitment to explorer (#3668)
Browse files Browse the repository at this point in the history
  • Loading branch information
stringhandler authored Dec 30, 2021
1 parent 5dd9e1c commit 18f6e29
Show file tree
Hide file tree
Showing 6 changed files with 86 additions and 4 deletions.
12 changes: 9 additions & 3 deletions applications/tari_explorer/app.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ const asciichart = require("asciichart")
var indexRouter = require("./routes/index")
var blocksRouter = require("./routes/blocks")
var mempoolRouter = require("./routes/mempool")
var searchRouter = require("./routes/search")

var hbs = require("hbs")
hbs.registerHelper("hex", function (buffer) {
Expand Down Expand Up @@ -50,9 +51,13 @@ hbs.registerHelper("percentbar", function (a, b) {
})

hbs.registerHelper("chart", function (data, height) {
return asciichart.plot(data, {
height: height,
})
if (data.length > 0) {
return asciichart.plot(data, {
height: height,
})
} else {
return "**No data**"
}
})

var app = express()
Expand All @@ -74,6 +79,7 @@ app.use(express.static(path.join(__dirname, "public")))
app.use("/", indexRouter)
app.use("/blocks", blocksRouter)
app.use("/mempool", mempoolRouter)
app.use("/search", searchRouter)

// catch 404 and forward to error handler
app.use(function (req, res, next) {
Expand Down
1 change: 0 additions & 1 deletion applications/tari_explorer/routes/blocks.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ var { createClient } = require("../baseNodeClient")
var express = require("express")
var router = express.Router()

/* GET home page. */
router.get("/:height", async function (req, res) {
let client = createClient()
let height = req.params.height
Expand Down
56 changes: 56 additions & 0 deletions applications/tari_explorer/routes/search.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
// Copyright 2021. The Tari Project
//
// Redistribution and use in source and binary forms, with or without modification, are permitted provided that the
// following conditions are met:
//
// 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following
// disclaimer.
//
// 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the
// following disclaimer in the documentation and/or other materials provided with the distribution.
//
// 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote
// products derived from this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
// INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
// USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

var { createClient } = require("../baseNodeClient")

var express = require("express")
var router = express.Router()

router.get("/", async function (req, res) {
let client = createClient()
let commitments = (
req.query.comm ||
req.query.commitment ||
req.query.c ||
""
).split(",")

if (commitments.length === 0) {
res.status(404)
return
}
let hexCommitments = []
for (let i = 0; i < commitments.length; i++) {
hexCommitments.push(Buffer.from(commitments[i], "hex"))
}
console.log(hexCommitments)
let result = await client.searchUtxos({
hexCommitments,
})

console.log(result)
res.render("search", {
items: result,
})
})

module.exports = router
6 changes: 6 additions & 0 deletions applications/tari_explorer/views/index.hbs
Original file line number Diff line number Diff line change
Expand Up @@ -148,3 +148,9 @@
</tbody>
</table>
<br />

<form method="get" action="search">
<label for="c">Find commitment</label>
<input id="c" name="c" type="text" />
<button type="submit">search</button>
</form>
14 changes: 14 additions & 0 deletions applications/tari_explorer/views/search.hbs
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<h2>{{title}}</h2>
<br />
<h1>Found in blocks:</h1>
{{#if items.length}}
<ul>
{{#each items}}
<li>{{link "/blocks/{{this.block.header.hash}}" this.block.header.height}}</a></li>


{{/each}}
</ul>
{{else}}
<h2>!!! No results found</h2>
{{/if}}
1 change: 1 addition & 0 deletions clients/base_node_grpc_client/src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ function Client(address = "127.0.0.1:18142") {
"getBlocks",
"getMempoolTransactions",
"getTipInfo",
"searchUtxos"
];
methods.forEach((method) => {
this[method] = (arg) => this.inner[method]().sendMessage(arg);
Expand Down

0 comments on commit 18f6e29

Please sign in to comment.