aboutsummaryrefslogtreecommitdiffstats
path: root/common/resolver
diff options
context:
space:
mode:
authorzsfelfoldi <zsfelfoldi@gmail.com>2015-04-07 17:50:17 +0800
committerzelig <viktor.tron@gmail.com>2015-04-20 03:57:49 +0800
commitb635cad9fe127e6b0ca6d993ce9a3b6c61ce79c6 (patch)
tree81d44673f4510e13f85f9aa9d5e0009b6638eacd /common/resolver
parent94489b2269133c545aa3e9580737b2bd93f3ead0 (diff)
downloaddexon-b635cad9fe127e6b0ca6d993ce9a3b6c61ce79c6.tar
dexon-b635cad9fe127e6b0ca6d993ce9a3b6c61ce79c6.tar.gz
dexon-b635cad9fe127e6b0ca6d993ce9a3b6c61ce79c6.tar.bz2
dexon-b635cad9fe127e6b0ca6d993ce9a3b6c61ce79c6.tar.lz
dexon-b635cad9fe127e6b0ca6d993ce9a3b6c61ce79c6.tar.xz
dexon-b635cad9fe127e6b0ca6d993ce9a3b6c61ce79c6.tar.zst
dexon-b635cad9fe127e6b0ca6d993ce9a3b6c61ce79c6.zip
NatSpec passing end to end test
Diffstat (limited to 'common/resolver')
-rw-r--r--common/resolver/resolver.go30
-rw-r--r--common/resolver/resolver_test.go20
2 files changed, 29 insertions, 21 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
}
diff --git a/common/resolver/resolver_test.go b/common/resolver/resolver_test.go
index 5652213f6..17a1c4f94 100644
--- a/common/resolver/resolver_test.go
+++ b/common/resolver/resolver_test.go
@@ -23,12 +23,12 @@ func NewTestBackend() *testBackend {
self := &testBackend{}
self.contracts = make(map[string](map[string]string))
- self.contracts[NameRegContractAddress] = make(map[string]string)
- key := storageAddress(0, common.Hex2Bytes(codehash))
- self.contracts[NameRegContractAddress][key] = hash
+ self.contracts[HashRegContractAddress] = make(map[string]string)
+ key := storageAddress(1, common.Hex2Bytes(codehash))
+ self.contracts[HashRegContractAddress][key] = hash
self.contracts[URLHintContractAddress] = make(map[string]string)
- key = storageAddress(0, common.Hex2Bytes(hash))
+ key = storageAddress(1, common.Hex2Bytes(hash))
self.contracts[URLHintContractAddress][key] = url
return self
@@ -43,10 +43,12 @@ func (self *testBackend) StorageAt(ca, sa string) (res string) {
return
}
-func TestNameToContentHash(t *testing.T) {
+func TestKeyToContentHash(t *testing.T) {
b := NewTestBackend()
- res := New(b, URLHintContractAddress, NameRegContractAddress)
- got, err := res.NameToContentHash(codehash)
+ res := New(b, URLHintContractAddress, HashRegContractAddress)
+ chash := common.Hash{}
+ copy(chash[:], common.Hex2BytesFixed(codehash, 32))
+ got, err := res.KeyToContentHash(chash)
if err != nil {
t.Errorf("expected no error, got %v", err)
} else {
@@ -58,7 +60,7 @@ func TestNameToContentHash(t *testing.T) {
func TestContentHashToUrl(t *testing.T) {
b := NewTestBackend()
- res := New(b, URLHintContractAddress, NameRegContractAddress)
+ res := New(b, URLHintContractAddress, HashRegContractAddress)
chash := common.Hash{}
copy(chash[:], common.Hex2Bytes(hash))
got, err := res.ContentHashToUrl(chash)
@@ -71,5 +73,5 @@ func TestContentHashToUrl(t *testing.T) {
}
}
-func TestNameToUrl(t *testing.T) {
+func TestKeyToUrl(t *testing.T) {
}