github.com/linapex/ethereum-go-chinese@v0.0.0-20190316121929-f8b7a73c3fa1/contracts/ens/ens_test.go (about) 1 2 //<developer> 3 // <name>linapex 曹一峰</name> 4 // <email>linapex@163.com</email> 5 // <wx>superexc</wx> 6 // <qqgroup>128148617</qqgroup> 7 // <url>https://jsq.ink</url> 8 // <role>pku engineer</role> 9 // <date>2019-03-16 19:16:34</date> 10 //</624450077045297152> 11 12 13 package ens 14 15 import ( 16 "math/big" 17 "testing" 18 19 "github.com/ethereum/go-ethereum/accounts/abi/bind" 20 "github.com/ethereum/go-ethereum/accounts/abi/bind/backends" 21 "github.com/ethereum/go-ethereum/common" 22 "github.com/ethereum/go-ethereum/contracts/ens/contract" 23 "github.com/ethereum/go-ethereum/core" 24 "github.com/ethereum/go-ethereum/crypto" 25 ) 26 27 var ( 28 key, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") 29 name = "my name on ENS" 30 hash = crypto.Keccak256Hash([]byte("my content")) 31 addr = crypto.PubkeyToAddress(key.PublicKey) 32 testAddr = common.HexToAddress("0x1234123412341234123412341234123412341234") 33 ) 34 35 func TestENS(t *testing.T) { 36 contractBackend := backends.NewSimulatedBackend(core.GenesisAlloc{addr: {Balance: big.NewInt(1000000000)}}, 10000000) 37 transactOpts := bind.NewKeyedTransactor(key) 38 39 ensAddr, ens, err := DeployENS(transactOpts, contractBackend) 40 if err != nil { 41 t.Fatalf("can't deploy root registry: %v", err) 42 } 43 contractBackend.Commit() 44 45 //将自己设置为名称的所有者。 46 if _, err := ens.Register(name); err != nil { 47 t.Fatalf("can't register: %v", err) 48 } 49 contractBackend.Commit() 50 51 //部署一个冲突解决程序并使其负责该名称。 52 resolverAddr, _, _, err := contract.DeployPublicResolver(transactOpts, contractBackend, ensAddr) 53 if err != nil { 54 t.Fatalf("can't deploy resolver: %v", err) 55 } 56 if _, err := ens.SetResolver(EnsNode(name), resolverAddr); err != nil { 57 t.Fatalf("can't set resolver: %v", err) 58 } 59 contractBackend.Commit() 60 61 //设置名称的内容哈希。 62 if _, err = ens.SetContentHash(name, hash); err != nil { 63 t.Fatalf("can't set content hash: %v", err) 64 } 65 contractBackend.Commit() 66 67 //尝试解析名称。 68 vhost, err := ens.Resolve(name) 69 if err != nil { 70 t.Fatalf("expected no error, got %v", err) 71 } 72 if vhost != hash { 73 t.Fatalf("resolve error, expected %v, got %v", hash.Hex(), vhost.Hex()) 74 } 75 76 //设置名称的地址 77 if _, err = ens.SetAddr(name, testAddr); err != nil { 78 t.Fatalf("can't set address: %v", err) 79 } 80 contractBackend.Commit() 81 82 //尝试将名称解析为地址 83 recoveredAddr, err := ens.Addr(name) 84 if err != nil { 85 t.Fatalf("expected no error, got %v", err) 86 } 87 if vhost != hash { 88 t.Fatalf("resolve error, expected %v, got %v", testAddr.Hex(), recoveredAddr.Hex()) 89 } 90 } 91