If you are a developer new to Ethereum/blockchain, it is possible you are overwhelmed (at least I was) trying to understand all the tools and technologies in the Ethereum ecosystem. So I decided to briefly describe the various components you come across frequently while starting to learn Ethereum. Hopefully this will help you get a big picture of the Ethereum ecosystem and how all the pieces fit together.

1. Ethereum

Ethereum is a smart contract blockchain on which you can build decentralized applications (called smart contracts). If you are a technologist, this white paper is worth reading: https://github.com/ethereum/wiki/wiki/White-Paper.

If you have built web applications before, I wrote a post comparing Ethereum blockchain and web application architecture which might help understand Ethereum at a high level.

2. Geth

Geth is the official client software provided by the Ethereum Foundation. It is written in the Go programming language. This software packages a few components which is worth understanding:

  1. Client Daemon

When you start this client daemon, it connects to other clients (also called nodes) in the network and downloads a copy of the blockchain. It will constantly communicate with other nodes to keep it’s copy of the blockchain up to date. It also has the ability to mine blocks and add transactions to the blockchain, validate the transactions in the block and also execute the transactions. It also acts as a server by exposing APIs you can interact with through RPC.

2. geth console

This is a command line tool which lets you connect to your running node and perform various actions like create and manage accounts, query the blockchain, sign and submit transactions to the blockchain and so on.

3. Mist Browser

This is a desktop application used to communicate with your node. Anything you can do using the geth console can be accomplished through this Graphical User Interface.

3. Parity

Parity is another good implementation of the Ethereum protocol and is written in the Rust programming language. It is an unofficial client and is maintained by a company called Parity Inc. Any one can implement the client software and join the Ethereum network. You can follow the specs in this yellow paper to implement your own client!

4. Web3.js

Just like you have geth, mist browser and so on to communicate with the ethereum node, there is also a javascript library called Web3.js which can be used to interact with a node. Since it is a javascript library, you can use it to build web based dapps.

5. Solidity

Solidity is the most popular programming language used to write smart contracts to run on the Ethereum blockchain. It is a high level language which when compiled gets converted to EVM (Ethereum Virtual Machine) byte code. This is very similar to the world of Java where there are JVM languages like Scala, Groovy, Clojure, JRuby etc. All these on compilation generate byte code which run in the JVM (Java Virtual Machine). You can also create a language like Solidity as long as you follow the specs and your language compiles down to the valid EVM byte code!

There is a also very nice browser based IDE where you can write contracts, compile and deploy to the blockchain here: http://remix.ethereum.org/

6. Truffle/Embark

Just like you have frameworks for web application development such as Ruby on Rails, Python/Django etc, Truffle and Embark are the two most popular frameworks used to develop dapps. They abstract away lot of the complexities of compiling and deploying your contract on the blockchain.

If you are new to Ethereum dapp development, I wrote a series of guided tutorials to get started here, here and here.

7. Metamask

If you hang out in the Ethereum community for more than a week, you will inevitably come across Metamask. As of this writing, it is a chrome plugin used to interact with the Ethereum node. It is unrealistic for everyone in the world to run a node to interact with the blockchain. So, the folks at Metamask host a number of nodes so you don’t have to. All you have to do is install Metamask and it automatically connects to their nodes.

8. ENS

Ethereum Naming System is the DNS for the Ethereum world. Just like you map an IP address to a human readable name, you can map any Ethereum contract or wallet address to a human readable name.

Ex: 146.115.22.177 → google.com. Instead of typing the ip address in your browser, you type google.com which resolves to that IP address

Ex: 0x80C013d980aB049471c88E1603b8b4a60E03295C is my wallet address. If you are in the mood to send me some Ether, you don’t have to memorize this address. Once ENS launches, I will probably map it to mvmurthy.eth and you can use that to send me money easily :).

9. Swarm

The blockchain is good to store small amounts of data. What if you want to store a patient record, a sale deed or some large file which needs to be publicly timestamped? It is expensive and also not scalable to store a blob in the blockchain. Swarm is used to solve this problem. Swarm is a decentralized content storage and distribution service. You can think of it as a CDN but instead of the entire CDN hosted on one company’s servers, it is distributed on computers across the internet. Just like you run an Ethereum node, you run a swarm node to connect to the swarm network.

When you deploy an Ethereum contract on to the blockchain, you get a deployed address and JSON interface of the ABI (The contract interface similar to API). When you want someone to use your contract, you have to give them the deployed address and the ABI. In the future, the ABI will be stored on Swarm so anyone can look up the ABI just by looking at the Ethereum address.

10. IPFS

IPFS (Inter Planetary File System) is conceptually exactly similar to Swarm. It is a decentralized storage system. It is not related to Ethereum directly but can be integrated with Ethereum.

You can read about the differences between Swarm and IPFS here: https://github.com/ethersphere/go-ethereum/wiki/IPFS-&-SWARM

11. Whisper

You don’t hear a lot about Whisper but is an interesting technology in the Ethereum ecosystem. It is a communication protocol for Dapps to interact with one another. You can read more about it here: https://github.com/ethereum/wiki/wiki/Whisper

Below is an attempt to put all the pieces together:

Hope this helps you get a 10,000 foot view of the Ethereum ecosystem and can now delve into each component and understand it better.

If you are interested in learning more about Ethereum development, you can sign up here.


Problem

When loading the FIM Self-Service Password Reset registration and reset web portals, an error is returned to the user.

The Forefront Identity Manager event log (located under Applications and Services Logs) on the server hosting the SSPR web portals contains one of the following error messages:

Could not connect to http://ServerName-fim02:5725/ResourceManagementService/MEX. TCP error code 10060: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond x.x.x.x:5725

Could not connect to http://servername-fim02:5726/ResourceManagementService/SecurityTokenService/Registration. TCP error code 10060: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond x.x.x.x:5726.

 

 

In a load balanced environment, the error message will only show up on the server that handled the request.

Diagnosis

In order for the FIM SSPR registration and reset portals to communicate with the FIM Service, ports 5725 and 5726 must be open on the firewall and allowing HTTP traffic from the FIM SSPR server(s) to the FIM Service server(s).

In this scenario, the problem existed because the FIM SSPR portals were configured to use the hostname of the FIM Service that is routed on the management network interface, and the firewall was only configured to allow traffic on ports 5725 and 5726 on the application network interface. Thus, the FIM SSPR portals could not communicate with the FIM Service as the ports were blocked when using the configured hostname for the FIM Service server.

Solution

In order to fix this problem, the FIM Self-Service Password Reset registration and reset web portals must be re-configured on all servers to use the hostname of the FIM Service server on the application network interface. As well, the external service address must be configured on the FIM Service to also use the hostname that is routed on the application network interface. The steps for doing this reconfiguration are outlined in the following sections.

Reconfigure FIM SSPR Web Portals

To reconfigure the FIM SSPR web portals, do the following on each of the FIM SSPR servers:

  1. Open the Control Panel
  2. Click Uninstall a program
  3. Select Forefront Identity Manager Service and Portal from the list
  4. Click Change
  5. The following screen will be displayed:
  6. Click Next
  7. On the next screen (shown below), click Change
  8. On the next screen (shown below) select I don’t want to join the program at this time and click Next
  9. On the next screen (shown below), ensure that only the FIM Password Registration Portal and FIM Password Reset Portal are selected
  10. On the next screen (shown below), enter the following:
    1. FIM SSPR service account that will be used to run the Password Registration Web Portal application pool
    2. Password of the FIM SSPR service account
    3. Host name, if necessary, that will be used for the password registration portal web site (Note: this will automatically display the previously configured value)
    4. Port that will be used for the password registration portal web site (Note: this will automatically display the previously configured value)
  11. Click Next
  12. On the next screen (shown below), click Next
  13. On the next screen (shown below), change the FIM Service Server address so that it uses the hostname that is routed on the application network interface (ttqwnapp-fim02-app in the acceptance environment)
  14. Click Next
  15. On the next screen (shown below), enter the following:
    1. FIM SSPR service account that will be used to run the Password Reset Web Portal application pool
    2. Password of the FIM SSPR service account
    3. Host name, if necessary, that will be used for the password reset portal web site (Note: this will automatically display the previously configured value)
    4. Port that will be used for the password reset portal web site (Note: this will automatically display the previously configured value)
  16. Click Next
  17. On the next screen (shown below), click Next
  18. On the next screen (shown below), change the FIM Service Server address so that it uses the hostname that is routed on the application network interface (ttqwnapp-fim02-app in the acceptance environment)
  19. Click Next
  20. On the next screen (shown below), click Change to complete the reconfiguration process and apply the changes.

Reconfigure FIM Service

To reconfigure the FIM Service, do the following on each FIM Service server as an administrator:

  1. Click Start
  2. Under All Programs > Accessories, right click on Notepad and select Run as Administrator
  3. Click File > Open
  4. Navigate to C:\Program Files\Microsoft Forefront Identity Manager\2010\Service
  5. Select ResourceManagement.Service.exe.config
    1. You may need to change the file type to All files to see this file
  6. Press Ctrl+F to open the Find dialog
  7. Type resourceManagementService into the text field and click Find Next until the following line is found:

<resourceManagementService externalHostName=”…” />

  1. Change the value of the externalHostName attribute so that it uses the hostname that is routable on the application network interface. In the acceptance environment this would be as follows:

<resourceManagementService externalHostName=”server-name” />

  1. Save the file
  2. Close Notepad
  3. Click Start
  4. Click Run…
  5. Enter msc
  6. Click OK
  7. Select Forefront Identity Manager Service in the list of services
  8. Right click and select Restart