synor/sdk/c/src/contract/synor_contract.h
Gulshan Yadav e65ea40af2 feat: implement Privacy and Contract SDKs for all 12 languages (Phase 5)
Privacy SDK features:
- Confidential transactions with Pedersen commitments
- Bulletproof range proofs for value validation
- Ring signatures for anonymous signing with key images
- Stealth addresses for unlinkable payments
- Blinding factor generation and value operations

Contract SDK features:
- Smart contract deployment (standard and CREATE2)
- Call (view/pure) and Send (state-changing) operations
- Event log filtering, subscription, and decoding
- ABI encoding/decoding utilities
- Gas estimation and contract verification
- Multicall for batched operations
- Storage slot reading

Languages implemented:
- JavaScript/TypeScript
- Python (async with httpx)
- Go
- Rust (async with reqwest/tokio)
- Java (async with OkHttp)
- Kotlin (coroutines with Ktor)
- Swift (async/await with URLSession)
- Flutter/Dart
- C (header-only interface)
- C++ (header-only with std::future)
- C#/.NET (async with HttpClient)
- Ruby (Faraday HTTP client)

All SDKs follow consistent patterns:
- Configuration with API key, endpoint, timeout, retries
- Custom exception types with error codes
- Retry logic with exponential backoff
- Health check endpoints
- Closed state management
2026-01-28 09:03:34 +05:30

383 lines
9.3 KiB
C

/**
* Synor Contract SDK for C
* Smart contract deployment, interaction, and event handling.
*/
#ifndef SYNOR_CONTRACT_H
#define SYNOR_CONTRACT_H
#include <stddef.h>
#include <stdint.h>
#include <stdbool.h>
#ifdef __cplusplus
extern "C" {
#endif
#define SYNOR_CONTRACT_VERSION "0.1.0"
/* ==================== Error Handling ==================== */
typedef enum {
SYNOR_CONTRACT_OK = 0,
SYNOR_CONTRACT_ERR_NULL_PARAM = -1,
SYNOR_CONTRACT_ERR_HTTP = -2,
SYNOR_CONTRACT_ERR_JSON = -3,
SYNOR_CONTRACT_ERR_API = -4,
SYNOR_CONTRACT_ERR_CLOSED = -5,
SYNOR_CONTRACT_ERR_MEMORY = -6,
SYNOR_CONTRACT_ERR_TIMEOUT = -7
} SynorContractError;
typedef struct {
int status_code;
char *code;
char *message;
} SynorContractErrorInfo;
/* ==================== Configuration ==================== */
typedef struct {
const char *api_key;
const char *endpoint;
int timeout_ms;
int retries;
} SynorContractConfig;
/* ==================== Client Handle ==================== */
typedef struct SynorContractClient SynorContractClient;
/* ==================== ABI Types ==================== */
typedef struct SynorAbiParameter {
char *name;
char *type;
bool indexed;
struct SynorAbiParameter *components;
size_t component_count;
} SynorAbiParameter;
typedef struct {
char *type;
char *name;
SynorAbiParameter *inputs;
size_t input_count;
SynorAbiParameter *outputs;
size_t output_count;
char *state_mutability;
bool anonymous;
} SynorAbiEntry;
/* ==================== Deployment ==================== */
typedef struct {
const char *bytecode;
const SynorAbiEntry *abi;
size_t abi_count;
const char **constructor_args;
size_t constructor_arg_count;
const char *value;
int64_t gas_limit;
const char *gas_price;
int64_t nonce;
} SynorDeployContractOptions;
typedef struct {
char *contract_address;
char *transaction_hash;
char *deployer;
int64_t gas_used;
int64_t block_number;
char *block_hash;
} SynorDeploymentResult;
/* ==================== Contract Interaction ==================== */
typedef struct {
const char *contract;
const char *method;
const char **args;
size_t arg_count;
const SynorAbiEntry *abi;
size_t abi_count;
} SynorCallContractOptions;
typedef struct {
const char *contract;
const char *method;
const char **args;
size_t arg_count;
const SynorAbiEntry *abi;
size_t abi_count;
const char *value;
int64_t gas_limit;
const char *gas_price;
int64_t nonce;
} SynorSendContractOptions;
typedef struct SynorEventLog {
char *address;
char **topics;
size_t topic_count;
char *data;
int64_t block_number;
char *transaction_hash;
int log_index;
char *block_hash;
bool removed;
} SynorEventLog;
typedef struct {
char *transaction_hash;
int64_t block_number;
char *block_hash;
int64_t gas_used;
char *effective_gas_price;
char *status;
SynorEventLog *logs;
size_t log_count;
} SynorTransactionResult;
/* ==================== Events ==================== */
typedef struct {
char *name;
char *signature;
char *args_json; /* JSON string for decoded args */
SynorEventLog log;
} SynorDecodedEvent;
typedef struct {
const char *contract;
const char *event;
int64_t from_block;
int64_t to_block;
const char **topics;
size_t topic_count;
const SynorAbiEntry *abi;
size_t abi_count;
} SynorEventFilter;
/* ==================== Gas Estimation ==================== */
typedef struct {
int64_t gas_limit;
char *gas_price;
char *max_fee_per_gas;
char *max_priority_fee_per_gas;
char *estimated_cost;
} SynorGasEstimation;
/* ==================== Contract Information ==================== */
typedef struct {
char *bytecode;
char *deployed_bytecode;
int size;
bool is_contract;
} SynorBytecodeInfo;
typedef struct {
const char *address;
const char *source_code;
const char *compiler_version;
const char *constructor_args;
bool optimization;
int optimization_runs;
const char *license;
} SynorVerifyContractOptions;
typedef struct {
bool verified;
char *address;
char *compiler_version;
bool optimization;
int optimization_runs;
char *license;
SynorAbiEntry *abi;
size_t abi_count;
char *source_code;
} SynorVerificationResult;
/* ==================== Multicall ==================== */
typedef struct {
const char *contract;
const char *method;
const char **args;
size_t arg_count;
const SynorAbiEntry *abi;
size_t abi_count;
} SynorMulticallRequest;
typedef struct {
bool success;
char *result_json;
char *error;
} SynorMulticallResult;
/* ==================== Client Lifecycle ==================== */
SynorContractError synor_contract_client_create(
const SynorContractConfig *config,
SynorContractClient **client
);
void synor_contract_client_close(SynorContractClient *client);
bool synor_contract_client_is_closed(const SynorContractClient *client);
bool synor_contract_health_check(SynorContractClient *client);
const SynorContractErrorInfo* synor_contract_get_last_error(const SynorContractClient *client);
/* ==================== Contract Deployment ==================== */
SynorContractError synor_contract_deploy(
SynorContractClient *client,
const SynorDeployContractOptions *options,
SynorDeploymentResult *result
);
SynorContractError synor_contract_deploy_create2(
SynorContractClient *client,
const SynorDeployContractOptions *options,
const char *salt,
SynorDeploymentResult *result
);
SynorContractError synor_contract_predict_address(
SynorContractClient *client,
const char *bytecode,
const char *salt,
const char *deployer,
char **address
);
/* ==================== Contract Interaction ==================== */
SynorContractError synor_contract_call(
SynorContractClient *client,
const SynorCallContractOptions *options,
char **result_json
);
SynorContractError synor_contract_send(
SynorContractClient *client,
const SynorSendContractOptions *options,
SynorTransactionResult *result
);
/* ==================== Events ==================== */
SynorContractError synor_contract_get_events(
SynorContractClient *client,
const SynorEventFilter *filter,
SynorDecodedEvent **events,
size_t *event_count
);
SynorContractError synor_contract_get_logs(
SynorContractClient *client,
const char *contract,
int64_t from_block,
int64_t to_block,
SynorEventLog **logs,
size_t *log_count
);
/* ==================== ABI Utilities ==================== */
SynorContractError synor_contract_encode_call(
SynorContractClient *client,
const char *method,
const char **args,
size_t arg_count,
const SynorAbiEntry *abi,
size_t abi_count,
char **data
);
SynorContractError synor_contract_decode_result(
SynorContractClient *client,
const char *data,
const char *method,
const SynorAbiEntry *abi,
size_t abi_count,
char **result_json
);
SynorContractError synor_contract_get_selector(
SynorContractClient *client,
const char *signature,
char **selector
);
/* ==================== Gas Estimation ==================== */
SynorContractError synor_contract_estimate_gas(
SynorContractClient *client,
const SynorCallContractOptions *options,
const char *value,
SynorGasEstimation *result
);
/* ==================== Contract Information ==================== */
SynorContractError synor_contract_get_bytecode(
SynorContractClient *client,
const char *address,
SynorBytecodeInfo *result
);
SynorContractError synor_contract_verify(
SynorContractClient *client,
const SynorVerifyContractOptions *options,
SynorVerificationResult *result
);
SynorContractError synor_contract_get_verification_status(
SynorContractClient *client,
const char *address,
SynorVerificationResult *result
);
/* ==================== Multicall ==================== */
SynorContractError synor_contract_multicall(
SynorContractClient *client,
const SynorMulticallRequest *requests,
size_t request_count,
SynorMulticallResult **results,
size_t *result_count
);
/* ==================== Storage ==================== */
SynorContractError synor_contract_read_storage(
SynorContractClient *client,
const char *contract,
const char *slot,
int64_t block_number,
char **value
);
/* ==================== Memory Management ==================== */
void synor_contract_free_string(char *str);
void synor_contract_free_deployment_result(SynorDeploymentResult *result);
void synor_contract_free_transaction_result(SynorTransactionResult *result);
void synor_contract_free_event_logs(SynorEventLog *logs, size_t count);
void synor_contract_free_decoded_events(SynorDecodedEvent *events, size_t count);
void synor_contract_free_gas_estimation(SynorGasEstimation *estimation);
void synor_contract_free_bytecode_info(SynorBytecodeInfo *info);
void synor_contract_free_verification_result(SynorVerificationResult *result);
void synor_contract_free_multicall_results(SynorMulticallResult *results, size_t count);
void synor_contract_free_abi(SynorAbiEntry *abi, size_t count);
#ifdef __cplusplus
}
#endif
#endif /* SYNOR_CONTRACT_H */