Skip to content

Commit

Permalink
update to 4.0
Browse files Browse the repository at this point in the history
  • Loading branch information
xiyu1984 committed Sep 28, 2022
1 parent ba2db25 commit 2b5c610
Show file tree
Hide file tree
Showing 3 changed files with 52 additions and 63 deletions.
19 changes: 7 additions & 12 deletions contracts/callee/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,13 @@ authors = ["[your_name] <[your_email]>"]
edition = "2021"

[dependencies]
ink_primitives = { version = "3.2.0", default-features = false }
ink_metadata = { version = "3.2.0", default-features = false, features = ["derive"], optional = true }
ink_env = { version = "3.2.0", default-features = false }
ink_storage = { version = "3.2.0", default-features = false }
ink_lang = { version = "3.2.0", default-features = false }
ink_prelude = { version = "3.2.0", default-features = false }
ink = { version = "4.0.0-alpha.3", default-features = false }

scale = { package = "parity-scale-codec", version = "3.1.5", default-features = false, features = ["derive"] }
scale-info = { version = "2.1.2", default-features = false, features = ["derive"] }
ink_primitives = { version = "4.0.0-alpha.3", default-features = false }
ink_storage = { version = "4.0.0-alpha.3", default-features = false }

scale = { package = "parity-scale-codec", version = "3.2.1", default-features = false, features = ["derive"] }
scale-info = { version = "2.2.0", default-features = false, features = ["derive", "serde", "decode"] }

payload = { path = "../../../message-ink/payload/", default-features = false, features = ["ink-as-dependency"] }

Expand All @@ -28,10 +26,7 @@ crate-type = [
[features]
default = ["std"]
std = [
"ink_metadata/std",
"ink_env/std",
"ink_storage/std",
"ink_primitives/std",
"ink/std",
"scale/std",
"scale-info/std",
]
Expand Down
94 changes: 44 additions & 50 deletions contracts/callee/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,6 @@

mod test;

use ink_lang as ink;
use ink_prelude;

use payload::message_protocol::{ MessagePayload, MessageItem, MsgDetail};
use payload::message_define::{ISentMessage, IReceivedMessage};

Expand All @@ -22,9 +19,9 @@ mod callee {
#[derive(Debug, PartialEq, Clone, Eq, scale::Encode, scale::Decode)]
#[cfg_attr(feature = "std", derive(::scale_info::TypeInfo))]
pub struct MessageDetail{
name: ink_prelude::string::String,
name: ink::prelude::string::String,
age: u32,
phones: ink_prelude::vec::Vec<ink_prelude::string::String>,
phones: ink::prelude::vec::Vec<ink::prelude::string::String>,
}

/// This is an example to impl `payload::message_protocol::InMsgType` for a user defined struct,
Expand All @@ -42,20 +39,20 @@ mod callee {

/// items from traits can only be used if the trait is in scope
fn create_message(msg_detail: Self::MyType) -> super::MsgDetail {
let mut v = ink_prelude::vec::Vec::new();
let mut v = ink::prelude::vec::Vec::new();
scale::Encode::encode_to(&msg_detail, &mut v);

super::MsgDetail::UserData(v)
}

fn into_raw_data(&self) -> ink_prelude::vec::Vec<u8> {
let mut raw_data = ink_prelude::vec![];
fn into_raw_data(self) -> ink::prelude::vec::Vec<u8> {
let mut raw_data = ink::prelude::vec![];

raw_data.append(&mut ink_prelude::vec::Vec::from(self.name.as_bytes()));
raw_data.append(&mut ink_prelude::vec::Vec::from(self.age.to_be_bytes()));
raw_data.append(&mut ink::prelude::vec::Vec::from(self.name.as_bytes()));
raw_data.append(&mut ink::prelude::vec::Vec::from(self.age.to_be_bytes()));

for ele in self.phones.iter() {
raw_data.append(&mut ink_prelude::vec::Vec::from(ele.as_bytes()));
raw_data.append(&mut ink::prelude::vec::Vec::from(ele.as_bytes()));
}

raw_data
Expand Down Expand Up @@ -88,65 +85,65 @@ mod callee {

/// test cross contract call
#[ink(message)]
pub fn encode_user_defined_struct(&self, msg: MessageDetail) -> ink_prelude::string::String{
ink_prelude::format!("{:?}", msg)
pub fn encode_user_defined_struct(&self, msg: MessageDetail) -> ink::prelude::string::String{
ink::prelude::format!("{:?}", msg)
}

/// test cross contract call
#[ink(message)]
pub fn encode_user_multi_params(&self, msg: MessageDetail, p_str: ink_prelude::string::String, p_int: u32) -> ink_prelude::string::String{
ink_prelude::format!("{}, {}, {:?}", p_int, p_str, msg)
pub fn encode_user_multi_params(&self, msg: MessageDetail, p_str: ink::prelude::string::String, p_int: u32) -> ink::prelude::string::String{
ink::prelude::format!("{}, {}, {:?}", p_int, p_str, msg)
}

/// test encoding user defined struct to u8
#[ink(message)]
pub fn encode_uds(&self, msg: MessageDetail) -> ink_prelude::vec::Vec<u8>{
let s = ink_prelude::format!("{{ name: {}, age: {}, phones: [] }}", msg.name, msg.age);
pub fn encode_uds(&self, msg: MessageDetail) -> ink::prelude::vec::Vec<u8>{
let s = ink::prelude::format!("{{ name: {}, age: {}, phones: [] }}", msg.name, msg.age);
s.into_bytes()
}

#[ink(message)]
pub fn get_struct_message_u8(& self, msg: MessageDetail) -> ink_prelude::vec::Vec::<u8>{
let mut v = ink_prelude::vec::Vec::<u8>::new();
pub fn get_struct_message_u8(& self, msg: MessageDetail) -> ink::prelude::vec::Vec::<u8>{
let mut v = ink::prelude::vec::Vec::<u8>::new();
scale::Encode::encode_to(&msg, &mut v);
v
}

#[ink(message)]
pub fn get_struct_message_vec_u8(& self, msg: MessageDetail) -> ink_prelude::vec::Vec::<u8>{
let mut v = ink_prelude::vec::Vec::<u8>::new();
let mut v_vec = ink_prelude::vec![msg.clone(), msg.clone()];
pub fn get_struct_message_vec_u8(& self, msg: MessageDetail) -> ink::prelude::vec::Vec::<u8>{
let mut v = ink::prelude::vec::Vec::<u8>::new();
let mut v_vec = ink::prelude::vec![msg.clone(), msg.clone()];
scale::Encode::encode_to(&v_vec, &mut v);
v
}

// test Payload as parameter
#[ink(message)]
pub fn get_payload(&self, msg_vec: super::MessagePayload) -> ink_prelude::string::String{
ink_prelude::format!("{:?}", msg_vec)
pub fn get_payload(&self, msg_vec: super::MessagePayload) -> ink::prelude::string::String{
ink::prelude::format!("{:?}", msg_vec)
// let mut vv = msg_vec.as_slice();
// let vout: Payload::MessagePayload = scale::Decode::decode(&mut vv).unwrap();
}

#[ink(message)]
pub fn get_recv_message(&self, msg: super::IReceivedMessage) -> ink_prelude::string::String{
ink_prelude::format!("{:?}", msg)
pub fn get_recv_message(&self, msg: super::IReceivedMessage) -> ink::prelude::string::String{
ink::prelude::format!("{:?}", msg)
}

#[ink(message)]
pub fn test_ud_en_de(&self, msg: MessageDetail) -> Option<MessageDetail> {
let mut v = ink_prelude::vec::Vec::new();
let mut v = ink::prelude::vec::Vec::new();
scale::Encode::encode_to(&msg, &mut v);

let msg_item = super::MessageItem::from(ink_prelude::string::String::from("Nika"),
let msg_item = super::MessageItem::from(ink::prelude::string::String::from("Nika"),
super::MsgDetail::UserData(v));

msg_item.in_to::<MessageDetail>()
}

#[ink(message)]
pub fn test_ud_en_de_other(&self, msg: MessageDetail) -> Option<MessageDetail> {
let msg_vec = super::MessageItem::from(ink_prelude::string::String::from("Nika"),
let msg_vec = super::MessageItem::from(ink::prelude::string::String::from("Nika"),
MessageDetail::create_message(msg));

msg_vec.in_to::<MessageDetail>()
Expand All @@ -157,19 +154,19 @@ mod callee {
pub fn send_message(&mut self, addr1: AccountId, addr2: AccountId, m: u32) {
self.flush();

ink_env::call::build_call::<ink_env::DefaultEnvironment>()
ink::env::call::build_call::<ink::env::DefaultEnvironment>()
.call_type(
ink_env::call::Call::new()
ink::env::call::Call::new()
.callee(addr1)
.gas_limit(0)
.transferred_value(0))
.exec_input(
// call `receive_message` of contract `addr1`
ink_env::call::ExecutionInput::new(ink_env::call::Selector::new([0x3a, 0x6e, 0x96, 0x96]))
ink::env::call::ExecutionInput::new(ink::env::call::Selector::new([0x3a, 0x6e, 0x96, 0x96]))
.push_arg(addr2)
.push_arg(m)
)
.call_flags(ink_env::CallFlags::default().set_allow_reentry(true))
.call_flags(ink::env::CallFlags::default().set_allow_reentry(true))
.returns::<()>()
.fire().
unwrap();
Expand All @@ -181,18 +178,18 @@ mod callee {
pub fn receive_message(&mut self, addr: AccountId, i: u32) {
// self.flush();

ink_env::call::build_call::<ink_env::DefaultEnvironment>()
ink::env::call::build_call::<ink::env::DefaultEnvironment>()
.call_type(
ink_env::call::Call::new()
ink::env::call::Call::new()
.callee(addr)
.gas_limit(0)
.transferred_value(0))
.exec_input(
// call `update_message` of contract `addr`
ink_env::call::ExecutionInput::new(ink_env::call::Selector::new([0x03, 0x2a, 0x6f, 0x29]))
ink::env::call::ExecutionInput::new(ink::env::call::Selector::new([0x03, 0x2a, 0x6f, 0x29]))
.push_arg(i)
)
// .call_flags(ink_env::CallFlags::default().set_allow_reentry(true))
.call_flags(ink::env::CallFlags::default().set_allow_reentry(true))
.returns::<()>()
.fire().
unwrap();
Expand All @@ -218,7 +215,7 @@ mod callee {
/// So if you want to flush the correct state of the contract,
/// you have to this method on storage struct.
fn flush(&self) {
let root_key = ::ink_primitives::Key::from([0x00; 32]);
let root_key = ::ink_primitives::Key::from(12);
::ink_storage::traits::push_spread_root::<Self>(self, &root_key);
}

Expand All @@ -227,7 +224,7 @@ mod callee {
/// So if you want to load the correct state of the contract,
/// you have to this method on storage struct.
fn load(&mut self) {
let root_key = ::ink_primitives::Key::from([0x00; 32]);
let root_key = ::ink_primitives::Key::from(12);
let mut state = ::ink_storage::traits::pull_spread_root::<Self>(&root_key);
core::mem::swap(self, &mut state);
let _ = core::mem::ManuallyDrop::new(state);
Expand All @@ -242,39 +239,36 @@ mod callee {
/// Imports all the definitions from the outer scope so we can use them here.
use super::*;

/// Imports `ink_lang` so we can use `#[ink::test]`.
use ink_lang as ink;

/// test `Payload`
#[ink::test]
fn test_payload() {

// let n_s = ink_prelude::string::String::from("Nika");
// let mut n_vec = ink_prelude::vec::Vec::<u8>::new();
// let n_s = ink::prelude::string::String::from("Nika");
// let mut n_vec = ink::prelude::vec::Vec::<u8>::new();
// scale::Encode::encode_to(&n_s, &mut n_vec);

let v_u16 : u16 = 99;
let mut v_vec = ink_prelude:: vec::Vec::<u8>::new();
let mut v_vec = ink::prelude:: vec::Vec::<u8>::new();
scale::Encode::encode_to(&v_u16, &mut v_vec);

let mut pl = super::super::MessagePayload::new();
let mut msg_item = super::super::MessageItem{
n: ink_prelude::string::String::from("1"),
n: ink::prelude::string::String::from("1"),
tv: super::super::MsgDetail::InkU16(18),
};

pl.push_item(ink_prelude::string::String::from("1"), super::super::MsgDetail::InkU16(24));
pl.push_item(ink::prelude::string::String::from("1"), super::super::MsgDetail::InkU16(24));
msg_item.tv = super::super::MsgDetail::InkU8(255);
assert_eq!(pl.push_item(ink_prelude::string::String::from("1"), super::super::MsgDetail::InkU16(v_u16)), false);
assert_eq!(pl.push_item(ink::prelude::string::String::from("1"), super::super::MsgDetail::InkU16(v_u16)), false);

// Attention, `assert_eq` use the concrete implementation of `PartialEq` to chack equal
// So it doesn't matter whether the `t` and `v` is the same
assert_eq!(pl.get_item(ink_prelude::string::String::from("1")), Some(&msg_item));
assert_eq!(pl.get_item(ink::prelude::string::String::from("1")), Some(&msg_item));
}

/// test `MessageItem::from`, `MessageItem::into`
fn test_from_into(){
let mut msg_item = super::super::MessageItem::from(ink_prelude::string::String::from("Nika"),
let mut msg_item = super::super::MessageItem::from(ink::prelude::string::String::from("Nika"),
super::super::MsgDetail::InkU32(128));

let num: u32 = msg_item.in_to::<u32>().unwrap();
Expand Down
2 changes: 1 addition & 1 deletion contracts/callee/test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
#[cfg_attr(feature = "std", derive(::scale_info::TypeInfo))]
pub struct CalleeDefinedData{
pub n: u128,
pub s: ink_prelude::string::String,
pub s: ink::prelude::string::String,
}

pub fn get() -> u16{
Expand Down

0 comments on commit 2b5c610

Please sign in to comment.