26 releases (16 breaking)
0.17.1 | Sep 24, 2024 |
---|---|
0.16.0 | Aug 1, 2024 |
0.15.0 | Jul 3, 2024 |
0.11.0 | Feb 14, 2024 |
0.1.0 | Mar 15, 2023 |
#59 in #smart
1,187 downloads per month
Used in 6 crates
(3 directly)
32KB
592 lines
π-crust Uplink
Piecrust Uplink is the library that allows you to build smart contracts directly on top of Dusk's Piecrust virtual machine.
Usage
The library allows users of the contract platform to manage the interface and state with the host environment of the contracts. The example below describes a barebones contract. For more detailed examples, see the contracts folder.
Add piecrust_uplink
as a dependency to your contract project:
cargo add piecrust_uplink
To make use of uplink
, import the dependency in your project and mark it as no_std
:
#![no_std]
use piecrust_uplink as uplink;
To attach state to a contract:
/// Struct that describe the state for your contract
pub struct Counter {
value: i64,
};
/// State of the contract
static mut STATE: Counter = Counter { value: 0x1 };
To define logic for your contract, define an implementation:
impl Counter {
pub fn read_value(&self) -> i64 {
self.value
}
pub fn increment(&mut self) {
let value = self.value + 1;
}
}
Read and write operations need to be exposed to the host. Add the following below the implementation:
unsafe fn read_value(arg_len: u32) -> u32 {
uplink::wrap_call(arg_len, |_: ()| STATE.read_value())
}
#[no_mangle]
unsafe fn increment(arg_len: u32) -> u32 {
uplink::wrap_call(arg_len, |panic: bool| STATE.increment(panic))
}
Release History
To see the release history for this crate, please see the CHANGELOG file.
License
This code is licensed under the Mozilla Public License Version 2.0 (MPL-2.0). Please see the LICENSE for further details.
Contribute
If you want to contribute to this project, please check the CONTRIBUTING file.
Dependencies
~4–11MB
~145K SLoC