diff options
Diffstat (limited to 'ethereal/ui_lib.go')
-rw-r--r-- | ethereal/ui_lib.go | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/ethereal/ui_lib.go b/ethereal/ui_lib.go index 9220581cd..ade9bf381 100644 --- a/ethereal/ui_lib.go +++ b/ethereal/ui_lib.go @@ -1,11 +1,15 @@ package main import ( + "bytes" "fmt" "path" + "strconv" + "strings" "github.com/ethereum/eth-go" "github.com/ethereum/eth-go/ethchain" + "github.com/ethereum/eth-go/ethcrypto" "github.com/ethereum/eth-go/ethpipe" "github.com/ethereum/eth-go/ethutil" "github.com/ethereum/go-ethereum/javascript" @@ -36,6 +40,30 @@ func NewUiLib(engine *qml.Engine, eth *eth.Ethereum, assetPath string) *UiLib { return &UiLib{JSPipe: ethpipe.NewJSPipe(eth), engine: engine, eth: eth, assetPath: assetPath, jsEngine: javascript.NewJSRE(eth)} } +func (self *UiLib) LookupDomain(domain string) string { + world := self.World() + + if len(domain) > 32 { + domain = string(ethcrypto.Sha3Bin([]byte(domain))) + } + data := world.Config().Get("DnsReg").StorageString(domain).Bytes() + + // Left padded = A record, Right padded = CNAME + if data[0] == 0 { + data = bytes.TrimLeft(data, "\x00") + var ipSlice []string + for _, d := range data { + ipSlice = append(ipSlice, strconv.Itoa(int(d))) + } + + return strings.Join(ipSlice, ".") + } else { + data = bytes.TrimRight(data, "\x00") + + return string(data) + } +} + func (self *UiLib) ImportTx(rlpTx string) { tx := ethchain.NewTransactionFromBytes(ethutil.Hex2Bytes(rlpTx)) self.eth.TxPool().QueueTransaction(tx) |