aboutsummaryrefslogtreecommitdiffstats
path: root/common/resolver/resolver.go
diff options
context:
space:
mode:
Diffstat (limited to 'common/resolver/resolver.go')
-rw-r--r--common/resolver/resolver.go30
1 files changed, 18 insertions, 12 deletions
diff --git a/common/resolver/resolver.go b/common/resolver/resolver.go
index 060e9dbb5..9c71ac85f 100644
--- a/common/resolver/resolver.go
+++ b/common/resolver/resolver.go
@@ -11,7 +11,7 @@ import (
/*
Resolver implements the Ethereum DNS mapping
-NameReg : Domain Name (or Code hash of Contract) -> Content Hash
+HashReg : Key Hash (hash of domain name or contract code) -> Content Hash
UrlHint : Content Hash -> Url Hint
The resolver is meant to be called by the roundtripper transport implementation
@@ -19,13 +19,13 @@ of a url scheme
*/
const (
URLHintContractAddress = core.ContractAddrURLhint
- NameRegContractAddress = core.ContractAddrHashReg
+ HashRegContractAddress = core.ContractAddrHashReg
)
type Resolver struct {
backend Backend
urlHintContractAddress string
- nameRegContractAddress string
+ hashRegContractAddress string
}
type Backend interface {
@@ -36,17 +36,23 @@ func New(eth Backend, uhca, nrca string) *Resolver {
return &Resolver{eth, uhca, nrca}
}
-func (self *Resolver) NameToContentHash(name string) (chash common.Hash, err error) {
- // look up in nameReg
- key := storageAddress(1, common.Hex2BytesFixed(name, 32))
- hash := self.backend.StorageAt("0x"+self.nameRegContractAddress, key)
- copy(chash[:], common.Hex2Bytes(hash))
+func (self *Resolver) KeyToContentHash(khash common.Hash) (chash common.Hash, err error) {
+ // look up in hashReg
+ key := storageAddress(1, khash[:])
+ hash := self.backend.StorageAt("0x"+self.hashRegContractAddress, key)
+
+ if hash == "0x0" || len(hash) < 3 {
+ err = fmt.Errorf("GetHashReg: content hash not found")
+ return
+ }
+
+ copy(chash[:], common.Hex2BytesFixed(hash[2:], 32))
return
}
func (self *Resolver) ContentHashToUrl(chash common.Hash) (uri string, err error) {
- // look up in nameReg
- key := storageAddress(2, chash[:])
+ // look up in URL reg
+ key := storageAddress(1, chash[:])
hex := self.backend.StorageAt("0x"+self.urlHintContractAddress, key)
uri = string(common.Hex2Bytes(hex[2:]))
l := len(uri)
@@ -61,9 +67,9 @@ func (self *Resolver) ContentHashToUrl(chash common.Hash) (uri string, err error
return
}
-func (self *Resolver) NameToUrl(name string) (uri string, hash common.Hash, err error) {
+func (self *Resolver) KeyToUrl(key common.Hash) (uri string, hash common.Hash, err error) {
// look up in urlHint
- hash, err = self.NameToContentHash(name)
+ hash, err = self.KeyToContentHash(key)
if err != nil {
return
}