-
Notifications
You must be signed in to change notification settings - Fork 450
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add example which uses ext_transfer + ext_terminate (#554)
* [chores] Fix typo: invokation ➜ invocation * [chores] Fix typo: timstamp ➜ timestamp * [chores] Fix typo: ininitialized ➜ initialized * [env] Implement terminate_contract in off-chain env * [examples] Add lock-until * [env] Implement proper off-chain testing for ext_terminate * Apply suggestions from code review Co-authored-by: Hero Bird <robin.freyler@gmail.com> * [env] Fix Environment type * [env] Derive Balance/AccountId from Environment * [env] Fix types in macro * [examples] Remove lock-until * [examples] Add contract-terminate * [examples] Add contract-transfer * [examples] Make clippy happy * [examples] Fix example name * [examples] Remove Default impls * [examples] Move macro to contract-terminate/test_utils * [env] Migrate macro to fn which gets Environment type param * [env] Add explanatory dev comment * [examples] Allow clippy::new_without_default Co-authored-by: Hero Bird <robin.freyler@gmail.com>
- Loading branch information
Showing
15 changed files
with
463 additions
and
14 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
# Ignore build artifacts from the local tests sub-crate. | ||
/target/ | ||
|
||
# Ignore backup files creates by cargo fmt. | ||
**/*.rs.bk | ||
|
||
# Remove Cargo.lock when creating an executable, leave it for libraries | ||
# More information here http://doc.crates.io/guide.html#cargotoml-vs-cargolock | ||
Cargo.lock |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
[package] | ||
name = "contract_terminate" | ||
version = "3.0.0-rc1" | ||
authors = ["Parity Technologies <admin@parity.io>"] | ||
edition = "2018" | ||
|
||
[dependencies] | ||
ink_primitives = { version = "3.0.0-rc1", path = "../../crates/primitives", default-features = false } | ||
ink_metadata = { version = "3.0.0-rc1", path = "../../crates/metadata", default-features = false, features = ["derive"], optional = true } | ||
ink_env = { version = "3.0.0-rc1", path = "../../crates/env", default-features = false } | ||
ink_storage = { version = "3.0.0-rc1", path = "../../crates/storage", default-features = false } | ||
ink_lang = { version = "3.0.0-rc1", path = "../../crates/lang", default-features = false } | ||
|
||
scale = { package = "parity-scale-codec", version = "1.3", default-features = false, features = ["derive"] } | ||
scale-info = { version = "0.4", default-features = false, features = ["derive"], optional = true } | ||
|
||
|
||
[lib] | ||
name = "contract_terminate" | ||
path = "lib.rs" | ||
crate-type = ["cdylib"] | ||
|
||
[features] | ||
default = ["std"] | ||
std = [ | ||
"ink_primitives/std", | ||
"ink_metadata", | ||
"ink_metadata/std", | ||
"ink_env/std", | ||
"ink_storage/std", | ||
"ink_lang/std", | ||
"scale/std", | ||
"scale-info", | ||
"scale-info/std", | ||
] | ||
ink-as-dependency = [] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,101 @@ | ||
// Copyright 2018-2020 Parity Technologies (UK) Ltd. | ||
// | ||
// Licensed under the Apache License, Version 2.0 (the "License"); | ||
// you may not use this file except in compliance with the License. | ||
// You may obtain a copy of the License at | ||
// | ||
// http://www.apache.org/licenses/LICENSE-2.0 | ||
// | ||
// Unless required by applicable law or agreed to in writing, software | ||
// distributed under the License is distributed on an "AS IS" BASIS, | ||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
// See the License for the specific language governing permissions and | ||
// limitations under the License. | ||
|
||
//! A smart contract which demonstrates behavior of the `self.env().terminate()` | ||
//! function. It terminates itself once `terminate_me()` is called. | ||
#![cfg_attr(not(feature = "std"), no_std)] | ||
#![allow(clippy::new_without_default)] | ||
|
||
use ink_lang as ink; | ||
|
||
#[ink::contract] | ||
pub mod just_terminates { | ||
/// No storage is needed for this simple contract. | ||
#[ink(storage)] | ||
pub struct JustTerminate {} | ||
|
||
impl JustTerminate { | ||
/// Creates a new instance of this contract. | ||
#[ink(constructor)] | ||
pub fn new() -> Self { | ||
Self {} | ||
} | ||
|
||
/// Terminates with the caller as beneficiary. | ||
#[ink(message)] | ||
pub fn terminate_me(&mut self) { | ||
self.env().terminate_contract(self.env().caller()); | ||
} | ||
} | ||
|
||
#[cfg(test)] | ||
mod tests { | ||
use super::*; | ||
|
||
use ink_env::{ | ||
call, | ||
test, | ||
}; | ||
use ink_lang as ink; | ||
|
||
#[ink::test] | ||
fn terminating_works() { | ||
// given | ||
let accounts = default_accounts(); | ||
let contract_id = ink_env::test::get_current_contract_account_id::< | ||
ink_env::DefaultEnvironment, | ||
>() | ||
.expect("Cannot get contract id"); | ||
set_sender(accounts.alice); | ||
set_balance(contract_id, 100); | ||
let mut contract = JustTerminate::new(); | ||
|
||
// when | ||
let should_terminate = move || contract.terminate_me(); | ||
|
||
// then | ||
ink_env::test::assert_contract_termination::<ink_env::DefaultEnvironment, _>( | ||
should_terminate, | ||
accounts.alice, | ||
100, | ||
); | ||
} | ||
|
||
fn default_accounts( | ||
) -> ink_env::test::DefaultAccounts<ink_env::DefaultEnvironment> { | ||
ink_env::test::default_accounts::<ink_env::DefaultEnvironment>() | ||
.expect("Off-chain environment should have been initialized already") | ||
} | ||
|
||
fn set_sender(sender: AccountId) { | ||
let callee = ink_env::account_id::<ink_env::DefaultEnvironment>() | ||
.unwrap_or([0x0; 32].into()); | ||
test::push_execution_context::<Environment>( | ||
sender, | ||
callee, | ||
1000000, | ||
1000000, | ||
test::CallData::new(call::Selector::new([0x00; 4])), // dummy | ||
); | ||
} | ||
|
||
fn set_balance(account_id: AccountId, balance: Balance) { | ||
ink_env::test::set_account_balance::<ink_env::DefaultEnvironment>( | ||
account_id, balance, | ||
) | ||
.expect("Cannot set account balance"); | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
# Ignore build artifacts from the local tests sub-crate. | ||
/target/ | ||
|
||
# Ignore backup files creates by cargo fmt. | ||
**/*.rs.bk | ||
|
||
# Remove Cargo.lock when creating an executable, leave it for libraries | ||
# More information here http://doc.crates.io/guide.html#cargotoml-vs-cargolock | ||
Cargo.lock |
Oops, something went wrong.