Files
mergify[bot] 40a3885d3b Native/builtin programs now receive an InvokeContext (bp #13286) (#13298)
* Native/builtin programs now receive an InvokeContext

(cherry picked from commit df8dab9d2b)

* Remove MessageProcessor::loaders

(cherry picked from commit 2664a1f7ef)

* Remove Entrypoint type

(cherry picked from commit 225bed11c7)

* Remove programs clone()

(cherry picked from commit 33884d847a)

* Add sol_log_compute_units syscall

(cherry picked from commit 66e51a7363)

* Add Bank::set_bpf_compute_budget()

(cherry picked from commit 7d686b72a0)

* Rebase

Co-authored-by: Michael Vines <mvines@gmail.com>
2020-10-30 07:47:17 +00:00
..
2019-06-17 11:04:38 -07:00
2019-11-08 11:48:07 -08:00
2019-06-17 11:04:38 -07:00

Development

Quick start

To get started create a makefile containing:

include path/to/bpf.mk

and src/program.c containing:

#include <solana_sdk.h>

bool entrypoint(const uint8_t *input) {
  SolKeyedAccount ka[1];
  uint8_t *data;
  uint64_t data_len;

  if (!sol_deserialize(buf, ka, SOL_ARRAY_SIZE(ka), NULL, &data, &data_len)) {
    return false;
  }
  print_params(1, ka, data, data_len);
  return true;
}

Then run make to build out/program.o. Run make help for more details.

Unit tests

Built-in support for unit testing is provided by the Criterion test framework. To get started create the file test/example.c containing:

#include <criterion/criterion.h>
#include "../src/program.c"

Test(test_suite_name, test_case_name) {
  cr_assert(true);
}

Then run make test.

Limitations

  • Programs must be fully contained within a single .c file
  • No libc is available but solana_sdk.h provides a minimal set of primitives