0% found this document useful (0 votes)
19 views3 pages

VeChain Node Setup Assignment Guide

This document provides an assignment for a backend role at Aguadulce Technologies. The assignment involves setting up a machine running a VeChain Thor node on the testnet, exposing a REST endpoint to send transactions, and building a React UI. Key deliverables are the codebase in a git repo, README to run the project, and a Loom video explaining the development. Evaluation will consider deployment URL, code quality, completeness, correctness, and maintainability. Bonus points are available for tests, CI/CD, and TypeScript usage.

Uploaded by

Qumber Rizvi
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
19 views3 pages

VeChain Node Setup Assignment Guide

This document provides an assignment for a backend role at Aguadulce Technologies. The assignment involves setting up a machine running a VeChain Thor node on the testnet, exposing a REST endpoint to send transactions, and building a React UI. Key deliverables are the codebase in a git repo, README to run the project, and a Loom video explaining the development. Evaluation will consider deployment URL, code quality, completeness, correctness, and maintainability. Bonus points are available for tests, CI/CD, and TypeScript usage.

Uploaded by

Qumber Rizvi
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd

FROM TITLE

Luca Daniel

Backend
Founder

DATE

MONDAY
Assignment
07 NOV 2022

INTRO

This document describes the assignment for any


backend based role in Aguadulce.

ADDRESS

Aguadulce Technologies

SD1-398, Building 16
Ground floor
Dubai Internet City
Dubai
License No. 97890

CONTACT DETAILS

+971 585301204
Luca Yesupatham Daniel

[Link]

Boutique
Development
Studio
1

🎯 Goal
In this assignment, you will be setting up a machine that runs a node server that syncs with the VeChain
Thor testnet.

Here are a few reference links to get you started, in case you are not familiar with the blockchain space
or VeChain Thor:

● [Link]
● [Link]

You can use any language to implement this assignment. We prefer Rust, Ruby, Python or JavaScript

💼 Brief
as that is what we use the most internally.

Your node should be synced with the VeChain Thor testnet (Insight, Testnet Explorer). In case of restart,
it should start at login (with no manual intervention). It should be fault tolerant which means if the vechain
process crashes, it should get restarted automatically.

There should be a REST endpoint exposed, which can send an X amount to an address. Direct RPC
endpoints should not be exposed; you'll need to set up another small application which will interact with
the node via RPC call.

You should build a small UI with [Link] that interacts with your server. It doesn’t need to be pretty, a
barebone UI will work but we appreciate good design at Aguadulce.

You should use Docker locally while developing and bonus points if you use it to deploy your application.

For the machine running your node, you can create a free tier AWS account. The VeChain node is
lightweight and can work on a [Link] instance.

[bonus] The whole codebase should contain unit, integration and regression tests
[bonus] Set up a CI/CD pipeline that runs the tests and deploys from a specific branch your codebase to
the server
[bonus] Use TypeScript in your UI

No 3, 20th Main Rd, [Link]


7th Block, Koramangala,
Bengaluru, Karnataka, IN560095
2

👩‍💻 Deliverables
● A git repo where we can see your codebase and how it evolved as you went through the
assignment

● A README on how to run your project in the repo

● A short Loom video where you explain how the development went, challenges you faced
and how you have tackled them

🕵️ Evaluation Criteria
● The URL to the instance where the application is deployed

● Code quality and following best practices (e.g. not checking the repo node_modules, using
dotenv, using a linter, etc.)

● We are looking for you to produce working code, with enough room to demonstrate how to
structure components in a small program.

● Show us your work through your commit history. Bonus points for well written commit
messages!

● Completeness: did you complete the assignment? Focus on nailing the assignment before
addressing bonus points

● Correctness: does the functionality act in sensible, thought-out ways?

● Maintainability: is it written in a clean, maintainable way?

Please organize, design, and document your code as if it were going into production - then push your
changes to the master branch.

All the best and happy coding. We are looking forward to working together!

No 3, 20th Main Rd, [Link]


7th Block, Koramangala,
Bengaluru, Karnataka, IN560095

Common questions

Powered by AI

The expected deliverables for the backend assignment include a git repository showing the codebase and its evolution, a README document, a short Loom video explaining the development process, challenges faced, and solutions, and a URL to the deployed application instance. These deliverables indicate a candidate's ability to document and communicate their work effectively, their commitment to best practices in software development, and their proficiency in using tools like Git for version control. The delivery of a deployable application URL demonstrates their capability in managing deployment processes, potentially using tools like Docker and AWS .

Using TypeScript in the UI can add value to the development process by providing static type checking, which helps identify potential errors at compile-time rather than runtime. This can result in more robust and maintainable code by enforcing type safety, leading to fewer runtime errors. TypeScript's autocompletion and refactoring capabilities improve developer productivity and code readability. Additionally, it enhances collaboration by making the codebase more understandable through explicit type definitions, which is particularly beneficial for large teams or open-source contributions where maintainability is crucial .

The evaluation criteria for the backend assignment include code quality, completeness, correctness, and maintainability. Code quality emphasizes adherence to best practices, such as not checking in node_modules and using environment variables, which reflects the priority on clean, concise, and secure code. Completeness ensures the candidate can fully implement the assignment requirements, demonstrating their ability to follow through and deliver functional software. Correctness evaluates whether the application behaves as expected, underpinning stability and reliability. Maintainability stresses the importance of designing the code for long-term sustainability, indicating Aguadulce Technologies' focus on producing scalable and adaptable software solutions .

Including unit, integration, and regression tests is important because they collectively ensure different aspects of software quality and reliability. Unit tests validate individual components of the code, catching bugs at the earliest stage. Integration tests verify that combined components function correctly, addressing issues related to interface compatibility and data flow. Regression tests ensure that new changes do not adversely affect existing functionality, safeguarding the system against defect reintroduction after updates. Together, these tests enhance code integrity and maintainability, facilitating smooth iterative development and increasing confidence in the software's performance .

A README file plays a crucial role in the assignment submission process by serving as documentation that helps reviewers and users understand how to set up, run, and use the application. It should ideally include an overview of the project, installation instructions, a guide on how to execute the application, prerequisites needed, examples of use cases, and any troubleshooting tips. An effective README file provides clear guidance, enhancing the usability of the codebase by making it more accessible and reducing setup time, ultimately reflecting the developer's attention to detail and communication skills .

Fault tolerance is essential for the node server because it ensures the system remains operational and can recover from node crashes without manual intervention, maintaining continuous service availability. To achieve fault tolerance, best practices include implementing automatic restart mechanisms using tools like systemd or process managers such as PM2. Ensuring comprehensive logging for error tracking and handling can help in diagnosing failures and improving system resilience. Using containerization with Docker can provide environment consistency, making deployments more reliable and reducing failure points caused by discrepancies between development and production environments .

The backend assignment at Aguadulce Technologies requires setting up a node that syncs with the VeChain Thor testnet. The components involved include a Node server, REST endpoints, an RPC interaction layer, and a UI built with React.js. The Node server should ensure it remains synced with the VeChain Thor testnet and has fault tolerance to automatically restart if it crashes. The REST endpoint is used to send X amount to an address, which indirectly interacts with the VeChain node through another application handling RPC calls. Docker is recommended for local development and deployment, which helps in containerization and environment consistency. Additionally, a UI built with React.js should provide interaction capability with the Node server. Proper setup of this architecture ensures smooth interaction and functionality across all components .

Challenges in implementing the VeChain Thor node and integration with the REST API may include network synchronization issues, handling RPC call interactions, and ensuring security of API endpoints. Synchronization problems can be addressed by ensuring proper node configuration and efficient resource allocation, such as using a cloud service capable of maintaining continuous operation. Managing RPC calls requires setting up intermediate services over RPC to abstract direct access, thereby protecting the node from direct exposure. Ensuring security involves implementing authentication and authorization mechanisms, like API key management and using secure protocols (HTTPS), which prevent unauthorized access and data breaches .

Setting up a CI/CD pipeline can enhance the software development and deployment process by automating integration and deployment tasks, thereby increasing efficiency and reducing human error. It allows for automatic testing of the codebase, ensuring that all changes are validated before deployment, which maintains high code quality and prevents breaking changes from reaching production. By facilitating continuous integration, it enables developers to find and address bugs quickly, speeding up the development lifecycle. A CI/CD pipeline also supports automated deployments to production environments, allowing for rapid iterations and updates, which aligns with DevOps practices to foster agility and responsiveness .

Using Docker in local development and deployment is significant because it allows developers to create, deploy, and run applications in containers, ensuring a consistent environment across all stages of development. In the context of this assignment, Docker facilitates the management of dependencies and environment variables, isolates the application from system-specific issues, and simplifies deployment by allowing the use of lightweight, package-independent containers. This makes the application more portable and reduces the chances of environment-specific bugs, contributing to smoother transitions from development to production .

You might also like