// Register registers a new content hash in the registry. func (api *PrivateRegistarAPI) Register(sender common.Address, addr common.Address, contentHashHex string) (bool, error) { block := api.be.bc.CurrentBlock() state, err := state.New(block.Root(), api.be.chainDb) if err != nil { return false, err } codeb := state.GetCode(addr) codeHash := common.BytesToHash(crypto.Sha3(codeb)) contentHash := common.HexToHash(contentHashHex) _, err = registrar.New(api.be).SetHashToHash(sender, codeHash, contentHash) return err == nil, err }
// also called by admin.contractInfo.get func FetchDocsForContract(contractAddress string, xeth *xeth.XEth, client *httpclient.HTTPClient) (content []byte, err error) { // retrieve contract hash from state codehex := xeth.CodeAt(contractAddress) codeb := xeth.CodeAtBytes(contractAddress) if codehex == "0x" { err = fmt.Errorf("contract (%v) not found", contractAddress) return } codehash := common.BytesToHash(crypto.Sha3(codeb)) // set up nameresolver with natspecreg + urlhint contract addresses reg := registrar.New(xeth) // resolve host via HashReg/UrlHint Resolver hash, err := reg.HashToHash(codehash) if err != nil { return } if client.HasScheme("bzz") { content, err = client.Get("bzz://"+hash.Hex()[2:], "") if err == nil { // non-fatal return } err = nil //falling back to urlhint } uri, err := reg.HashToUrl(hash) if err != nil { return } // get content via http client and authenticate content using hash content, err = client.GetAuthContent(uri, hash) if err != nil { return } return }
// RegisterUrl registers a new url in the registry. func (api *PrivateRegistarAPI) RegisterUrl(sender common.Address, contentHashHex string, url string) (bool, error) { _, err := registrar.New(api.be).SetUrlToHash(sender, common.HexToHash(contentHashHex), url) return err == nil, err }
// SetUrlHint queries the registry for an url. func (api *PrivateRegistarAPI) SetUrlHint(hashreg string, from common.Address) (string, error) { return registrar.New(api.be).SetUrlHint(hashreg, from) }
// SetGlobalRegistrar allows clients to set the global registry for the node. // This method can be used to deploy a new registry. First zero out the current // address by calling the method with namereg = '0x0' and then call this method // again with '' as namereg. This will submit a transaction to the network which // will deploy a new registry on execution. The TX hash is returned. When called // with namereg '' and the current address is not zero the current global is // address is returned.. func (api *PrivateRegistarAPI) SetGlobalRegistrar(namereg string, from common.Address) (string, error) { return registrar.New(api.be).SetGlobalRegistrar(namereg, from) }