Esempio n. 1
0
        public async Task <TransactionReceipt> SetResolver()
        {
            var SetResolverFunction = new SetResolverFunction()
            {
                Node        = EnsUtil.GetNameHash($"{Domain}.eth").HexToByteArray(),
                Resolver    = PublicResolverAddress,
                FromAddress = OwnerAddress,
                Gas         = new HexBigInteger(100000),
                GasPrice    = new HexBigInteger(100000),
            };

            return(await ENSRegistryService.SetResolverRequestAndWaitForReceiptAsync(SetResolverFunction));
        }
Esempio n. 2
0
        private async ValueTask <string> GetRegistrantAddress(string Domain)
        {
            var NameHashString = EnsUtil.GetNameHash(Domain);

            var NameHashBytes = NameHashString.HexToByteArray();

            var OwnerFunction = new OwnerFunction()
            {
                Node = NameHashBytes
            };

            return(await ENSRegistryService.OwnerQueryAsync(OwnerFunction));
        }
Esempio n. 3
0
        public async Task <string> GetEnsAddress(string ensName)
        {
            var ensUtil            = new EnsUtil();
            var contract           = "0x314159265dD8dbb310642f98f50C066173C1259b"; //ENS contract address
            var web3               = new Web3("https://mainnet.infura.io/v3/146c5ff4a83a4a62b8eb4bbc93e07974");
            var fullNameNode       = ensUtil.GetNameHash(ensName);
            var ensRegistryService = new ENSRegistryService(web3, contract);
            var resolverAddress    = await ensRegistryService.ResolverQueryAsync(
                new ResolverFunction()
            {
                Node = fullNameNode.HexToByteArray()
            });

            var newRes                  = "0x4976fb03C32e5B8cfe2b6cCB31c09Ba78EBaBa41";
            var resolverService         = new PublicResolverService(web3, resolverAddress);
            var migratedResolverService = new PublicResolverService(web3, newRes);
            var address                 = await resolverService.AddrQueryAsync(fullNameNode.HexToByteArray());

            var migratedAddress = await migratedResolverService.AddrQueryAsync(fullNameNode.HexToByteArray());

            if (migratedAddress == "0x0000000000000000000000000000000000000000")
            {
                return(address);
            }
            else
            {
                return(migratedAddress);
            }
        }
Esempio n. 4
0
        public async ValueTask <(string Registrant, ulong TimeToLive, string Resolver, string Contract)> ResolveAsync(string Domain)
        {
            if (!Domain.EndsWith(".eth", StringComparison.InvariantCultureIgnoreCase))
            {
                throw new NotImplementedException($"Only .ETH Top-Level Domain is Supported.");
            }

            var NameHashString = EnsUtil.GetNameHash(Domain);

            var NameHashBytes = NameHashString.HexToByteArray();

            var TimeToLive = await GetTimeToLiveAsync(NameHashBytes);

            var ResolverFunction = new ResolverFunction()
            {
                Node = NameHashBytes
            };

            //get the resolver address from ENS
            var Resolver = await ENSRegistryService.ResolverQueryAsync(ResolverFunction);

            var OwnerFunction = new OwnerFunction()
            {
                Node = NameHashBytes
            };

            var Registrant = await ENSRegistryService.OwnerQueryAsync(OwnerFunction);

            var ResolverService = new PublicResolverService(Web3, Resolver);

            //and get the address from the resolver
            var Contract = await ResolverService.AddrQueryAsync(NameHashBytes);

            return(Registrant, TimeToLive, Resolver, Contract);
        }
Esempio n. 5
0
        public async Task <string> ResolveAsync(string Domain)
        {
            var NameHashString = EnsUtil.GetNameHash(Domain);

            var NameHashBytes = NameHashString.HexToByteArray();

            var ResolverFunction = new ResolverFunction()
            {
                Node = NameHashBytes
            };

            //get the resolver address from ENS
            var ResolverAddress = await ENSRegistryService.ResolverQueryAsync(ResolverFunction);

            var ResolverService = new PublicResolverService(Web3, ResolverAddress);

            //and get the address from the resolver
            var Address = await ResolverService.AddrQueryAsync(NameHashBytes);

            return(Address);
        }
Esempio n. 6
0
        public static async Task <string> GetENSAddress(string ensName)
        {
            try {
                var ensUtil            = new EnsUtil();
                var contract           = "0x314159265dD8dbb310642f98f50C066173C1259b"; //ENS contract address
                var web3               = new Web3(ChainWatcher.GETH_WEB3_ENDPOINT);
                var fullNameNode       = ensUtil.GetNameHash(ensName);
                var ensRegistryService = new ENSRegistryService(web3, contract);
                var oldResolver        = "0x226159d592E2b063810a10Ebf6dcbADA94Ed68b8";
                var resolverAddress    = await ensRegistryService.ResolverQueryAsync(
                    new ResolverFunction()
                {
                    Node = fullNameNode.HexToByteArray()
                });

                var newRes                  = "0x4976fb03C32e5B8cfe2b6cCB31c09Ba78EBaBa41";
                var resolverService         = new PublicResolverService(web3, resolverAddress);
                var migratedResolverService = new PublicResolverService(web3, newRes);
                var address                 = await resolverService.AddrQueryAsync(fullNameNode.HexToByteArray());

                var migratedAddress = await migratedResolverService.AddrQueryAsync(fullNameNode.HexToByteArray());

                if (migratedAddress == "0x0000000000000000000000000000000000000000")
                {
                    return(address);
                }
                else
                {
                    return(migratedAddress);
                }
            }
            catch (Exception e) {
                Console.WriteLine(e.Message);
            }
            return(null);
        }
Esempio n. 7
0
        public async void ShouldCreateEnsRegistarResolverAndRegiterandResolveANewAddress()
        {
            //Ignoring parity due to https://github.com/paritytech/parity-ethereum/issues/8675
            if (_ethereumClientIntegrationFixture.Geth)
            {
                //The address we want to resolve when using "test.eth"
                var addressToResolve = "0x12890D2cce102216644c59daE5baed380d84830c";


                var addressFrom = "0x12890D2cce102216644c59daE5baed380d84830c";

                var web3 = _ethereumClientIntegrationFixture.GetWeb3();


                //deploy ENS contract
                var ensDeploymentReceipt =
                    await ENSRegistryService.DeployContractAndWaitForReceiptAsync(web3, new ENSRegistryDeployment());

                var ensUtil = new EnsUtil();
                var ethNode = ensUtil.GetNameHash("eth");

                //create a new First in First service registrar for "eth"
                var fifsDeploymentReceipt = await FIFSRegistrarService.DeployContractAndWaitForReceiptAsync(web3,
                                                                                                            new FIFSRegistrarDeployment()
                {
                    EnsAddr = ensDeploymentReceipt.ContractAddress,
                    Node    = ethNode.HexToByteArray()
                });


                var publicResolverDeploymentReceipt = await PublicResolverService.DeployContractAndWaitForReceiptAsync(
                    web3,
                    new PublicResolverDeployment()
                {
                    Ens = ensDeploymentReceipt.ContractAddress
                }
                    );


                var ensRegistryService = new ENSRegistryService(web3, ensDeploymentReceipt.ContractAddress);

                //set ownership of "eth" to the fifs service
                //we are owners of "", so a subnode label "eth" will now be owned by the FIFS registar, which will allow to also to set ownership in Ens of further subnodes of Eth.
                var ethLabel = ensUtil.GetLabelHash("eth");

                var receipt = await ensRegistryService.SetSubnodeOwnerRequestAndWaitForReceiptAsync(
                    ensUtil.GetNameHash("").HexToByteArray(),
                    ethLabel.HexToByteArray(),
                    fifsDeploymentReceipt.ContractAddress
                    );


                //Now the owner of Eth is the FIFS
                var ownerOfEth =
                    await ensRegistryService.OwnerQueryAsync(ethNode.HexToByteArray());

                Assert.Equal(fifsDeploymentReceipt.ContractAddress.ToLower(), ownerOfEth.ToLower());
                /**** setup done **/

                //registration of "myname"

                //create a service for the registrar
                var fifsService = new FIFSRegistrarService(web3, fifsDeploymentReceipt.ContractAddress);

                //create a label
                var testLabel = ensUtil.GetLabelHash("myname");
                //submit the registration using the label bytes, and set ourselves as the owner
                await fifsService.RegisterRequestAndWaitForReceiptAsync(new RegisterFunction()
                {
                    Owner   = addressFrom,
                    Subnode = testLabel.HexToByteArray()
                });



                //now using the the full name
                var fullNameNode = ensUtil.GetNameHash("myname.eth");

                var ownerOfMyName =
                    await ensRegistryService.OwnerQueryAsync(fullNameNode.HexToByteArray());

                //set the resolver (the public one)
                await ensRegistryService.SetResolverRequestAndWaitForReceiptAsync(
                    new SetResolverFunction()
                {
                    Resolver = publicResolverDeploymentReceipt.ContractAddress,
                    Node     = fullNameNode.HexToByteArray()
                });


                var publicResolverService =
                    new PublicResolverService(web3, publicResolverDeploymentReceipt.ContractAddress);
                // set the address in the resolver which we want to resolve, ownership is validated using ENS in the background

                //Fails here
                await publicResolverService.SetAddrRequestAndWaitForReceiptAsync(fullNameNode.HexToByteArray(),
                                                                                 addressToResolve
                                                                                 );


                //Now as "end user" we can start resolving...

                //get the resolver address from ENS
                var resolverAddress = await ensRegistryService.ResolverQueryAsync(
                    fullNameNode.HexToByteArray());

                //using the resolver address we can create our service (should be an abstract / interface based on abi as we can have many)
                var resolverService = new PublicResolverService(web3, resolverAddress);

                //and get the address from the resolver
                var theAddress =
                    await resolverService.AddrQueryAsync(fullNameNode.HexToByteArray());

                Assert.Equal(addressToResolve.ToLower(), theAddress.ToLower());
            }
        }
        public void ShouldEncodeCorrectly()
        {
            var ensUtil = new EnsUtil();

            //empty
            Assert.Equal("0x0000000000000000000000000000000000000000000000000000000000000000", ensUtil.GetNameHash(""));
            //tld
            Assert.Equal("0x93cdeb708b7545dc668eb9280176169d1c33cfd8ed6f04690a0bcc88a93fc4ae", ensUtil.GetNameHash("eth"));
            //foo.eth
            Assert.Equal("0xde9b09fd7c5f901e23a3f19fecc54828e9c848539801e86591bd9801b019f84f", ensUtil.GetNameHash("foo.eth"));
            //normalise ascii domain
            Assert.Equal("foo.eth", ensUtil.Normalise("foo.eth"));
            //normalise international domain
            //with crylic 'o'
            Assert.Equal("xn--f-1tba.eth", ensUtil.Normalise("fоо.eth"));
        }