diff --git a/examples/erc20/src/lib.rs b/examples/erc20/src/lib.rs index 5af6ba9fe059ad17672072c9a6ef40e0868b0df3..6dabc7a8c3392c73ca7ee6fbd1c6aaed285cac0e 100644 --- a/examples/erc20/src/lib.rs +++ b/examples/erc20/src/lib.rs @@ -1,11 +1,7 @@ #![no_std] use pdsl_core::{ - storage::{ - self, - Key, - alloc::ForwardAlloc, - }, + storage, env::{Env, ContractEnv, srml::Address, srml::Balance}, }; use parity_codec::{Encode, Decode}; @@ -94,6 +90,16 @@ impl Erc20Token { } } +// BELOW THIS EVERYTHING WILL EVENTUALLY BE GENERATED BY THE eDSL + +use pdsl_core::{ + storage::{ + alloc::ForwardAlloc, + Flush, + Key, + }, +}; + impl Erc20Token { /// Creates new ERC-20 token using the given allocator. pub unsafe fn new_using_alloc(alloc: &mut A) -> Self @@ -108,6 +114,14 @@ impl Erc20Token { } } +impl Flush for Erc20Token { + fn flush(&mut self) { + self.balances.flush(); + self.allowances.flush(); + self.total_supply.flush(); + } +} + /// Erc20Token API. #[derive(Encode, Decode)] enum Action { @@ -144,22 +158,34 @@ pub extern "C" fn call() { let mut erc20token = unsafe { Erc20Token::new_using_alloc(&mut alloc) }; match action { Action::TotalSupply => { - ret(erc20token.total_supply()) + let ret_val = erc20token.total_supply(); + erc20token.flush(); + ret(ret_val); } Action::BalanceOf{owner} => { - ret(erc20token.balance_of(owner)) + let ret_val = erc20token.balance_of(owner); + erc20token.flush(); + ret(ret_val); } Action::Allowance{owner, spender} => { - ret(erc20token.allowance(owner, spender)) + let ret_val = erc20token.allowance(owner, spender); + erc20token.flush(); + ret(ret_val); } Action::Transfer{to, value} => { - ret(erc20token.transfer(to, value)) + let ret_val = erc20token.transfer(to, value); + erc20token.flush(); + ret(ret_val); } Action::Approve{spender, value} => { - ret(erc20token.approve(spender, value)) + let ret_val = erc20token.approve(spender, value); + erc20token.flush(); + ret(ret_val); } Action::TransferFrom{from, to, value} => { - ret(erc20token.transfer_from(from, to, value)) + let ret_val = erc20token.transfer_from(from, to, value); + erc20token.flush(); + ret(ret_val); } } }