Fibonacci

Description

The Fibonacci sequence is a set of integers (the Fibonacci numbers) that starts with a zero, followed by a one, then by another one, and then by a series of steadily increasing numbers. The sequence follows the rule that each number is equal to the sum of the preceding two numbers.

The Fibonacci sequence begins with the following 14 integers:

0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233 ...

From the third number onward, each one follows the same rule. For example, the seventh number is 8, which comes after 3 and 5, and 3 + 5 = 8.

The sequence can theoretically continue to infinity, using the same formula for each new number. Some resources show the Fibonacci sequence starting with a one instead of a zero, but this is fairly uncommon.

Using Truebit To Execute Fibonacci

We use Truebit to execute the Fibonacci task to get a verified result.

The Code

You can find the Fibonacci example within the folder truebit-nextgen-examples/function-tasks/<language>/fibonacci.

📁 src └─ 📄 main.rs 📄 Cargo.toml 📄 Cargo.lock

The target folder and the Cargo.lock file are going to be generated after running the build command within the truebit-cli

Source

main.rs

fn fibonacci(n: u32) -> u64 {
    if n == 0 {
        return 0;
    } else if n == 1 {
        return 1;
    }

    let mut a = 0;
    let mut b = 1;
    let mut c = 0;

    for _i in 2..=n {
        c = a + b;
        a = b;
        b = c;
    }

    return c;
}

fn run_task(input: String) -> String {
    fibonacci(input.parse().unwrap()).to_string()
}

fn main() {
    let input: String =
        std::fs::read_to_string("input.txt").expect("Could not read from input.txt");
    let output: String = run_task(input);
    std::fs::write("output.txt", output).expect("Could not write to output.txt");
}

In/Out Parameters

In order to send parameters to the Truebit task, you need to open the "input.txt" file and get the value from there. For now, only one input parameter is allowed.

let input: String = std::fs::read_to_string("input.txt").expect("Could not read from input.txt");

To retrieve the output value from the Truebit task, you need save it in the "output.txt" file.

std::fs::write("output.txt", output).expect("Could not write to output.txt");

Try Out

We will use the Truebit CLI to compile and try our source code. Once the code is finished, we will deploy it to the coordination hub so that everyone who knows the namespace and taskname can access or execute it.

Step 1: Create The Fibonacci Source Code

Within the src folder you will find a file called main in the case of Rust, C, C++, JS, and task.py in the case of Python. This is the fibonacci implementation that will be used for testing purpose.

Step 2: Build The Source Code

Execute the build command against Truebit node to get an instrumented Truebit task.

This in an example of how to build a JS task.

truebit build truebit-nextgen-examples/function-tasks/js/fibonacci/dist -l js

Output

Building the function task
Your function task is ready.
Use the following TaskId for execution or deployment: <taskId>

The taskId will always starts with the language prefix + "_" + cID

Step 3: Try The Code

Execute the start command against the Truebit node to test our Algorithm. You will need to submit the instrumented task id + the input parameter.

truebit start <taskId> 10
  • [taskId]: Add the taskId generated in the previous step.

Output

Executing the function Task
Execution Id: e406e754-b90b-4c62-9394-2cf0bb2c5647
Task executed with status: succeed
Task executed with result: 55
Task resource usage:
┌───────────────┬───────────────┬───────────────┬───────┬─────────────┬──────────┐
│ (index)       │ Unit          │ Limits        │ Peak  │ Last status │ Capacity │
├───────────────┼───────────────┼───────────────┼───────┼─────────────┼──────────┤
│ Gas           │ 'Steps'       │ 1099511627776 │ 'N/A' │ 1907033199  │ 577      │
│ Nested calls  │ 'Calls'       │ 65536         │ 6387  │ 6352        │ 10       │
│ Frame memory  │ 'Bytes'       │ 524288        │ 20115 │ 19073       │ 26       │
│ System memory │ '64 Kb pages' │ 2048          │ 87    │ '𝚫 1'       │ 24       │
└───────────────┴───────────────┴───────────────┴───────┴─────────────┴──────────┘

Step 4: Deploy The Task

Last, but not least, Execute the deploy command to deploy our task to the coordination hub, so that anyone with the namespace, taskname and the API key can execute it.

truebit deploy <namespace> <taskname> --taskId
  • [taskId]: Add the taskId generated in step 2

Output

The function task has been deployed successfully.
The Task <taskName> version <version> was registered successfully in namespace <namespace>

Last updated

Was this helpful?