// Copyright 2017 Parity Technologies (UK) Ltd. // This file is part of Polkadot. // Polkadot is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // Polkadot is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // You should have received a copy of the GNU General Public License // along with Polkadot. If not, see . use primitives::Address; use primitives::uint::U256; use state_machine::{Externalities, StaticExternalities}; use error::Result; use executor::RustExecutor; #[derive(Debug, Serialize, Deserialize)] pub struct Transfer { /// Transfer value value: U256, /// Transfer destination to: Address, /// Replay protection nonce: U256, /// Data authorizing the transfer (we can derive sender from it) authentication_data: Vec, } /// Balances contract rust implementation. #[derive(Debug, Default)] pub struct Contract; impl Contract { /// Returns a balance of given address. pub fn balance_of>(&self, _ext: &E, _data: Address) -> Result { unimplemented!() } /// Returns the next nonce to authorize the transfer from given address. pub fn next_nonce>(&self, _ext: &E, _data: Address) -> Result { unimplemented!() } /// Checks preconditions for transfer. /// Should verify: /// - signature /// - replay protection /// - enough balance pub fn transfer_preconditions>(&self, _db: &E, _data: Transfer) -> Result { unimplemented!() } /// Perform a transfer. /// This should first make sure that precondtions are satisfied and later perform the transfer. pub fn transfer>(&self, _ext: &mut E, _data: Transfer) -> Result { unimplemented!() } }