From 2d1fffe6b8e0820786aad3f3d29c75f89dd09922 Mon Sep 17 00:00:00 2001 From: Elad Date: Mon, 18 Mar 2019 11:23:26 +0700 Subject: [PATCH] cmd, contracts: make peoples lives easier --- cmd/swarm/hash.go | 59 ++++++++++++++++++++++++++++++++++++++- contracts/ens/cid.go | 2 +- contracts/ens/cid_test.go | 2 +- contracts/ens/ens_test.go | 4 +-- 4 files changed, 62 insertions(+), 5 deletions(-) diff --git a/cmd/swarm/hash.go b/cmd/swarm/hash.go index 471feb53d6..2df02c0ed7 100644 --- a/cmd/swarm/hash.go +++ b/cmd/swarm/hash.go @@ -19,10 +19,13 @@ package main import ( "context" + "encoding/hex" "fmt" "os" "github.com/ethereum/go-ethereum/cmd/utils" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/contracts/ens" "github.com/ethereum/go-ethereum/swarm/storage" "gopkg.in/urfave/cli.v1" ) @@ -34,7 +37,33 @@ var hashCommand = cli.Command{ Usage: "print the swarm hash of a file or directory", ArgsUsage: "", Description: "Prints the swarm hash of file or directory", -} + Subcommands: []cli.Command{ + { + CustomHelpTemplate: helpTemplate, + Name: "ens", + Usage: "converts a swarm hash to an ens EIP1577 compatible CIDv1 hash", + ArgsUsage: "", + Description: "", + Subcommands: []cli.Command{ + { + Action: encodeEipHash, + CustomHelpTemplate: helpTemplate, + Name: "contenthash", + Usage: "converts a swarm hash to an ens EIP1577 compatible CIDv1 hash", + ArgsUsage: "", + Description: "", + }, + { + Action: ensNodeHash, + CustomHelpTemplate: helpTemplate, + Name: "node", + Usage: "converts an ens name to an ENS node hash", + ArgsUsage: "", + Description: "", + }, + }, + }, + }} func hash(ctx *cli.Context) { args := ctx.Args() @@ -56,3 +85,31 @@ func hash(ctx *cli.Context) { fmt.Printf("%v\n", addr) } } +func ensNodeHash(ctx *cli.Context) { + args := ctx.Args() + if len(args) < 1 { + utils.Fatalf("Usage: swarm hash ens node ") + } + ensName := args[0] + + hash := ens.EnsNode(ensName) + + stringHex := hex.EncodeToString(hash[:]) + fmt.Println(stringHex) +} +func encodeEipHash(ctx *cli.Context) { + args := ctx.Args() + if len(args) < 1 { + utils.Fatalf("Usage: swarm hash ens ") + } + swarmHash := args[0] + + hash := common.HexToHash(swarmHash) + ensHash, err := ens.EncodeSwarmHash(hash) + if err != nil { + utils.Fatalf("error converting swarm hash", err) + } + + stringHex := hex.EncodeToString(ensHash) + fmt.Println(stringHex) +} diff --git a/contracts/ens/cid.go b/contracts/ens/cid.go index b184518c3d..6d39629ac5 100644 --- a/contracts/ens/cid.go +++ b/contracts/ens/cid.go @@ -99,7 +99,7 @@ func extractContentHash(buf []byte) (common.Hash, error) { return common.BytesToHash(buf), nil } -func encodeSwarmHash(hash common.Hash) ([]byte, error) { +func EncodeSwarmHash(hash common.Hash) ([]byte, error) { var cidBytes []byte var headerBytes = []byte{ nsSwarm, //swarm namespace diff --git a/contracts/ens/cid_test.go b/contracts/ens/cid_test.go index 63bd68b44a..0761e4c420 100644 --- a/contracts/ens/cid_test.go +++ b/contracts/ens/cid_test.go @@ -132,7 +132,7 @@ func TestManualCidDecode(t *testing.T) { func TestManuelCidEncode(t *testing.T) { // call cid encode method with hash. expect byte slice returned, compare according to spec const eipHash = "29f2d17be6139079dc48696d1f582a8530eb9805b561eda517e22a892c7e3f1f" - cidBytes, err := encodeSwarmHash(common.HexToHash(eipHash)) + cidBytes, err := EncodeSwarmHash(common.HexToHash(eipHash)) if err != nil { t.Fatal(err) } diff --git a/contracts/ens/ens_test.go b/contracts/ens/ens_test.go index 26a8addb61..c65df836ad 100644 --- a/contracts/ens/ens_test.go +++ b/contracts/ens/ens_test.go @@ -59,14 +59,14 @@ func TestENS(t *testing.T) { if err != nil { t.Fatalf("can't deploy resolver: %v", err) } + if _, err := ens.SetResolver(EnsNode(name), resolverAddr); err != nil { t.Fatalf("can't set resolver: %v", err) } contractBackend.Commit() // Set the content hash for the name. - - cid, err := encodeSwarmHash(hash) + cid, err := EncodeSwarmHash(hash) if err != nil { t.Fatal(err) }