A reader just asked me (Chris) these questions: How are nanoblocks fastened together to form macro structures? How can nanoblocks implement the diversity and complexity required to build a wide range of products?
There are several proposed fastening techniques. Some of them are more elegant than others. One of the most elegant proposals is to leave surfaces unterminated (with dangling bonds), so they form into one giant seamless molecule when pushed together. But this has not been well studied yet, and I'm not 100% convinced it would work as we'd wish.
My fallback technique is plain old mechanical fasteners. I talked about this to some extent in my Primitive Nanofactory paper. I didn't go into a lot of detail, because I didn't think I needed to. A 200-nm nanoblock has space for millions of mechanical features, so I don't think there'll be any problem inventing a mechanical system that does what we need it to do. So I didn't worry too much about it, once I was reasonably well satisfied that functional connections as well as strong structural connections could be made.
A nanoblock is a convenient size for design. It's small enough to be buildable by a single molecular fabricator in a reasonable time, and also small enough not to be damaged too quickly by background radiation. But it's big enough to contain lots and lots of functionality, and to be handled easily and efficiently in a planar assembly nanofactory.
I expect there will be dozens or hundreds of nanoblock types, with each type parameterized to some extent. In a way, they might be very roughly analogous to the assembly language of a computer. Some blocks might change dimension (actuators). Some could be sensors or display elements. Some might be analogous to utility tunnels with valves and conduits, programmable to distribute information, materials, and power. Some could contain computer CPU's or other logic circuitry. Some would be nearly-solid structural components. Some might have wheels sticking out one side to contact a large shaft, with a cylindrical array of such blocks acting as a bearing or motor. And so on.
Basic nanomachines like motors and logic gates would be combined to build this pallette of nanoblocks. Then the nanoblocks could be combined to form "virtual materials" with programmable properties. The virtual materials could be used to form micro- or macro-scale machines. Micro-scale machines could be built into another layer of "virtual materials." This is not the only way to design large products out of nanoscale components, but I think it's reasonably effective and efficient.