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