add a basic node implementation and tests