3 releases

new 0.13.0-rc.4 Apr 8, 2025
0.13.0-rc.3 Mar 31, 2025
0.13.0-rc.2 Mar 24, 2025

#133 in Magic Beans

Download history 54/week @ 2025-03-18 136/week @ 2025-03-25 71/week @ 2025-04-01

261 downloads per month
Used in 12 crates (11 directly)

MIT license

120KB
3K SLoC

Hyle contract SDK

In this crate you will find some helpers function to build your Smart Contract on Hyle.

🚧 This is work in progress, all of this is subject to changes. See examples for usages.

Model

Some of the models are defined in hyle-model crates, which is re-exported by this crate.

For example, you can do either of these two:

use contract_sdk::ZkProgramInput;
// or 
use hyle_model::ZkProgramInput;

It allows you to only depends on crate contract-sdk in your contract's code.

Entrypoints

The inputs of the zkVM should be of type ZkProgramInput defined in

pub struct ZkProgramInput {
    pub state: Vec<u8>,
    pub identity: Identity,
    pub tx_hash: TxHash,
    pub private_blob: BlobData,
    pub blobs: Vec<Blob>,
    pub index: BlobIndex,
}

In guest.rs you will find 2 functions that are entry points of smart contracts. You should call at least one of them at the beginning of your contract.

pub fn init_raw<Action>(input: ZkProgramInput) -> (ZkProgramInput, Action)

pub fn init_with_caller<Action>(
    input: ZkProgramInput,
) -> Result<(ZkProgramInput, StructuredBlob<Action>, Identity), String>

At the end of your contract, you need to output a HyleOutput, you can use the helper in utils.rs:

pub fn as_hyle_output(
    input: ZkProgramInput,
    new_state: State,
    res: crate::RunResult,
) -> HyleOutput

Helpers

You can find in erc20.rs and identity_prover.rs some structs & traits used to help building contracts of token transfers & identity providing. These are only helpers to build new contracts, not required standards.

Dependencies

~3–14MB
~193K SLoC