121 lines
2.4 KiB
C
121 lines
2.4 KiB
C
#pragma once
|
|
/**
|
|
* @brief Solana Public key
|
|
*/
|
|
|
|
#include <sol/types.h>
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/**
|
|
* Size of Public key in bytes
|
|
*/
|
|
#define SIZE_PUBKEY 32
|
|
|
|
/**
|
|
* Public key
|
|
*/
|
|
typedef struct {
|
|
uint8_t x[SIZE_PUBKEY];
|
|
} SolPubkey;
|
|
|
|
/**
|
|
* Prints the hexadecimal representation of a public key
|
|
*
|
|
* @param key The public key to print
|
|
*/
|
|
void sol_log_pubkey(
|
|
const SolPubkey *pubkey
|
|
);
|
|
|
|
/**
|
|
* Compares two public keys
|
|
*
|
|
* @param one First public key
|
|
* @param two Second public key
|
|
* @return true if the same
|
|
*/
|
|
static bool SolPubkey_same(const SolPubkey *one, const SolPubkey *two) {
|
|
for (int i = 0; i < sizeof(*one); i++) {
|
|
if (one->x[i] != two->x[i]) {
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Seed used to create a program address or passed to sol_invoke_signed
|
|
*/
|
|
typedef struct {
|
|
const uint8_t *addr; /** Seed bytes */
|
|
uint64_t len; /** Length of the seed bytes */
|
|
} SolSignerSeed;
|
|
|
|
/**
|
|
* Seeds used by a signer to create a program address or passed to
|
|
* sol_invoke_signed
|
|
*/
|
|
typedef struct {
|
|
const SolSignerSeed *addr; /** An arry of a signer's seeds */
|
|
uint64_t len; /** Number of seeds */
|
|
} SolSignerSeeds;
|
|
|
|
/**
|
|
* Create a program address
|
|
*
|
|
* @param seeds Seed bytes used to sign program accounts
|
|
* @param seeds_len Length of the seeds array
|
|
* @param program_id Program id of the signer
|
|
* @param program_address Program address created, filled on return
|
|
*/
|
|
uint64_t sol_create_program_address(
|
|
const SolSignerSeed *seeds,
|
|
int seeds_len,
|
|
const SolPubkey *program_id,
|
|
SolPubkey *program_address
|
|
);
|
|
|
|
/**
|
|
* Try to find a program address and return corresponding bump seed
|
|
*
|
|
* @param seeds Seed bytes used to sign program accounts
|
|
* @param seeds_len Length of the seeds array
|
|
* @param program_id Program id of the signer
|
|
* @param program_address Program address created, filled on return
|
|
* @param bump_seed Bump seed required to create a valid program address
|
|
*/
|
|
uint64_t sol_try_find_program_address(
|
|
const SolSignerSeed *seeds,
|
|
int seeds_len,
|
|
const SolPubkey *program_id,
|
|
SolPubkey *program_address,
|
|
uint8_t *bump_seed
|
|
);
|
|
|
|
#ifdef SOL_TEST
|
|
/**
|
|
* Stub functions when building tests
|
|
*/
|
|
#include <stdio.h>
|
|
|
|
void sol_log_pubkey(
|
|
const SolPubkey *pubkey
|
|
) {
|
|
printf("Program log: ");
|
|
for (int i = 0; i < SIZE_PUBKEY; i++) {
|
|
printf("%02 ", pubkey->x[i]);
|
|
}
|
|
printf("\n");
|
|
}
|
|
|
|
#endif
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
/**@}*/
|