pub struct ExampleContract;Expand description
Neo N3 Contract Examples
Basic Hello-World pattern showing how to expose a method that simply returns contract state:
use neo_devpack::prelude::*;
#[neo_contract]
pub struct HelloWorld {
greeting: NeoString,
}
impl HelloWorld {
#[neo_method]
pub fn say_hello(&self) -> NeoResult<NeoString> {
Ok(self.greeting.clone())
}
}A more complete storage-backed counter that demonstrates manifest overlays, permissions, witnesses and event emission:
use neo_devpack::prelude::*;
#[neo_event]
pub struct CounterIncreased {
pub account: NeoByteString,
pub new_value: NeoInteger,
}
neo_manifest_overlay!(r#"{
"name": "FamousCounter",
"features": { "storage": true }
}"#);
neo_permission!("*", ["balanceOf"]);
neo_supported_standards!(["NEP-17"]);
#[neo_contract]
pub struct FamousCounter;
impl FamousCounter {
#[neo_method]
pub fn increment(&self, caller: NeoByteString) -> NeoResult<NeoInteger> {
if !NeoRuntime::check_witness(&caller)?.as_bool() {
return Err(NeoError::InvalidOperation);
}
let context = NeoStorage::get_context()?;
let counter_key = NeoByteString::from_slice(b"counter");
NeoStorage::put(&context, &counter_key, &NeoByteString::from_slice(b"1"))?;
CounterIncreased {
account: caller.clone(),
new_value: NeoInteger::new(1),
}
.emit()?;
Ok(NeoInteger::new(1))
}
}Auto Trait Implementations§
impl Freeze for ExampleContract
impl RefUnwindSafe for ExampleContract
impl Send for ExampleContract
impl Sync for ExampleContract
impl Unpin for ExampleContract
impl UnwindSafe for ExampleContract
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more