|
1 | 1 | #include "fd_builtin_programs.h"
|
| 2 | +#include "fd_precompiles.h" |
2 | 3 | #include "../fd_runtime.h"
|
3 | 4 | #include "../fd_acc_mgr.h"
|
4 | 5 | #include "../fd_system_ids.h"
|
|
26 | 27 | builtin_program_id \
|
27 | 28 | }
|
28 | 29 |
|
| 30 | +#define PRECOMPILE(program_id, feature_offset, verify_fn) \ |
| 31 | + { \ |
| 32 | + program_id, \ |
| 33 | + feature_offset, \ |
| 34 | + verify_fn \ |
| 35 | + } |
| 36 | + |
29 | 37 | #define NO_CORE_BPF_MIGRATION_CONFIG NULL
|
30 | 38 |
|
31 | 39 | #define DEFINE_CORE_BPF_MIGRATION_CONFIG(name, buffer_address, feature_offset, program_id) \
|
@@ -57,12 +65,23 @@ DEFINE_CORE_BPF_MIGRATION_CONFIG(STATELESS_TO_CORE_BPF_FEATURE_GATE_PROGRAM_CONF
|
57 | 65 |
|
58 | 66 | #define FEATURE_PROGRAM_BUILTIN STATELESS_BUILTIN(&fd_solana_feature_program_id, MIGRATE_STATELESS_TO_CORE_BPF_FEATURE_GATE_PROGRAM_CONFIG)
|
59 | 67 |
|
| 68 | +#define SECP256R1_PROGRAM_BUILTIN PRECOMPILE(&fd_solana_secp256r1_program_id, offsetof(fd_features_t, enable_secp256r1_precompile), fd_precompile_secp256r1_verify) |
| 69 | +#define KECCAK_SECP_PROGRAM_BUILTIN PRECOMPILE(&fd_solana_keccak_secp_256k_program_id, NO_ENABLE_FEATURE_ID, fd_precompile_secp256k1_verify) |
| 70 | +#define ED25519_SV_PROGRAM_BUILTIN PRECOMPILE(&fd_solana_ed25519_sig_verify_program_id, NO_ENABLE_FEATURE_ID, fd_precompile_ed25519_verify) |
| 71 | + |
60 | 72 | /* https://github.com/anza-xyz/agave/blob/v2.1.0/runtime/src/bank/builtins/mod.rs#L133-L143 */
|
61 | 73 | static const fd_stateless_builtin_program_t stateless_programs_builtins[] = {
|
62 | 74 | FEATURE_PROGRAM_BUILTIN
|
63 | 75 | };
|
64 | 76 | #define STATELESS_BUILTINS_COUNT (sizeof(stateless_programs_builtins) / sizeof(fd_stateless_builtin_program_t))
|
65 | 77 |
|
| 78 | +static const fd_precompile_program_t precompiles[] = { |
| 79 | + SECP256R1_PROGRAM_BUILTIN, |
| 80 | + KECCAK_SECP_PROGRAM_BUILTIN, |
| 81 | + ED25519_SV_PROGRAM_BUILTIN |
| 82 | +}; |
| 83 | +#define PRECOMPILE_PROGRAMS_COUNT (sizeof(precompiles) / sizeof(fd_precompile_program_t)) |
| 84 | + |
66 | 85 | /* https://github.com/anza-xyz/agave/blob/v2.1.0/runtime/src/bank/builtins/mod.rs#L34-L131 */
|
67 | 86 | static fd_builtin_program_t const builtin_programs[] = {
|
68 | 87 | SYSTEM_PROGRAM_BUILTIN,
|
@@ -250,6 +269,16 @@ fd_num_stateless_builtins( void ) {
|
250 | 269 | return STATELESS_BUILTINS_COUNT;
|
251 | 270 | }
|
252 | 271 |
|
| 272 | +fd_precompile_program_t const * |
| 273 | +fd_precompiles( void ) { |
| 274 | + return precompiles; |
| 275 | +} |
| 276 | + |
| 277 | +ulong |
| 278 | +fd_num_precompiles( void ) { |
| 279 | + return PRECOMPILE_PROGRAMS_COUNT; |
| 280 | +} |
| 281 | + |
253 | 282 | uchar
|
254 | 283 | fd_is_migrating_builtin_program( fd_exec_txn_ctx_t const * txn_ctx,
|
255 | 284 | fd_pubkey_t const * pubkey,
|
|
0 commit comments