pub struct ExampleContract;Expand description
Neo N3 Contract Examples
Basic Hello-World pattern showing how to expose a method that simply returns contract state. This shows canonical devpack syntax for contract methods and metadata:
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 UnsafeUnpin 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