Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

upgrade to rustc 1.84.0-nightly #120

Merged
merged 6 commits into from
Dec 3, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/rust.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,9 @@ jobs:
- uses: actions/checkout@v2
- uses: actions-rs/toolchain@v1
with:
toolchain: nightly-2021-05-25
toolchain: nightly
- run: rustup default nightly
- run: rustup component add rustfmt
- run: rustup component add rustfmt rust-src clippy
- run: rustup target add wasm32-unknown-unknown
- name: Cargo Fmt
run: cargo fmt --all -- --check
Expand Down
2 changes: 1 addition & 1 deletion .rustfmt.toml
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
edition = "2018"
use_small_heuristics = "Max"
fn_args_layout = "Compressed"
fn_params_layout = "Compressed"
10 changes: 3 additions & 7 deletions .travis.build.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,10 @@
set -e
set -x

if rustup component add clippy;
then
cargo clippy --all -- -Dwarnings;
else
echo 'Skipping clippy';
fi
# cargo clippy --all -- -Dwarnings;
echo 'Skipping clippy';

RUSTFLAGS="-C link-arg=-zstack-size=32768" cargo build --release --target wasm32-unknown-unknown
RUSTFLAGS="-Ctarget-cpu=mvp -C link-arg=-zstack-size=32768" cargo build -Zbuild-std=panic_abort,core,alloc --release --target wasm32-unknown-unknown

root_dir=$(pwd)

Expand Down
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@
English | [中文](README_CN.md)

A suite of tools for ontology WebAssembly smart contract development using `rust`.

## Features

- Runtime api for blockchain interaction
- Contract level storage management
- Contract testing framwork
Expand Down Expand Up @@ -150,7 +150,7 @@ fn notify<T: Encoder>(msg: T) {
4. compile contract:
since the default stack size is 1M, which is too large for contract, we need reduce it, 32kb is enough for most usecase.
```
RUSTFLAGS="-C link-arg=-zstack-size=32768" cargo build --release --target wasm32-unknown-unknown
RUSTFLAGS="-Ctarget-cpu=mvp -Clink-arg=-zstack-size=32768" cargo build -Zbuild-std=panic_abort,core,alloc --release --target wasm32-unknown-unknown
```

## Procedural Macros
Expand Down
2 changes: 1 addition & 1 deletion README_CN.md
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,7 @@ fn notify<T: Encoder>(msg: T) {

4. 合约编译:
由于rustc编译默认设置的栈内存大小是1M,这对于大型软件程序来说比较合理,但对合约来说是巨大的浪费,因此在编译时设置下栈的大小,32kb对于绝大多数合约来说是够用的。
`RUSTFLAGS="-C link-arg=-zstack-size=32768" cargo build --release --target wasm32-unknown-unknown`
`RUSTFLAGS="-Ctarget-cpu=mvp -Clink-arg=-zstack-size=32768" cargo build -Zbuild-std=panic_abort,core,alloc --release --target wasm32-unknown-unknown`

## 代码生成宏
合约的编写往往是先从输入参数的字节数组中解析出具体调用的方法和调用参数,然后跳转到对应的函数中执行,最终将执行结果序列化为字节数组返回。这和web服务器从网络上获取字节流,解析出具体的请求,执行对应的处理函数并将结果序列化为字节流发送回网络的工作方式是类似的。因此可以像web开发框架一样将这样的固定又繁琐工作统一处理,使合约的开发者专注于合约本身功能的开发。`ontio_std`提供了代码生成宏,可以根据合约接口在编译期自动生成辅助性代码。采用代码生成宏的合约基本结构如下:
Expand Down
4 changes: 2 additions & 2 deletions build.sh
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@ fi
# clean origial build
rm -rf ./target/wasm32-unknown-unknown/release/*.wasm

# clean origial build
RUSTFLAGS="-C link-arg=-zstack-size=32768" cargo build --release --target wasm32-unknown-unknown
# clean origial build
RUSTFLAGS="-Ctarget-cpu=mvp -C link-arg=-zstack-size=32768" cargo build -Zbuild-std=panic_abort,core,alloc --release --target wasm32-unknown-unknown

for wasm in ./target/wasm32-unknown-unknown/release/*.wasm ; do
ontio-wasm-build $wasm $wasm
Expand Down
2 changes: 1 addition & 1 deletion examples/bridge/src/erc20.rs
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ fn format_amount(amt: U128) -> [u8; 32] {
#[test]
fn test() {
let addr = &Address::repeat_byte(1);
println!("{:?}", format_addr(&addr).as_ref());
println!("{:?}", format_addr(addr).as_ref());
let data = gen_eth_transfer_data(addr, U128::new(1000));
println!("{:?}", data.as_slice());
}
26 changes: 13 additions & 13 deletions examples/oep5token/src/test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,15 @@ use ontio_std::types::{Address, U128};
fn initialize() {
let mut token = Oep5TokenInstance;
let owner = Address::zero();
assert_eq!(token.initialize(&owner), true);
assert!(token.initialize(&owner));
assert_eq!(token.total_supply(), token.balance_of(&owner))
}

#[test]
fn query_token_id_by_index() {
let mut token = Oep5TokenInstance;
let owner = Address::zero();
assert_eq!(token.initialize(&owner), true);
assert!(token.initialize(&owner));
let token_id = token.query_token_id_by_index(U128::new(1));
println!("token_id: {}", token_id);
assert_eq!("http://images.com/hearta.jpg", token.query_token_by_id(token_id));
Expand All @@ -24,30 +24,30 @@ fn query_token_id_by_index() {
fn transfer() {
let mut token = Oep5TokenInstance;
let owner = Address::zero();
assert_eq!(token.initialize(&owner), true);
assert!(token.initialize(&owner));
assert_eq!(token.total_supply(), U128::new(2));
let token_id = token.query_token_id_by_index(U128::new(1));
assert_eq!(token.owner_of(token_id.clone()), owner.clone());
let alice = Address::repeat_byte(1);
build_runtime().witness(&[owner]);
assert_eq!(token.transfer(&alice, token_id.clone()), true);
build_runtime().witness([owner]);
assert!(token.transfer(&alice, token_id.clone()));
assert_eq!(token.owner_of(token_id.clone()), alice);
}

#[test]
fn transfer_multi() {
let mut token = Oep5TokenInstance;
let owner = Address::zero();
build_runtime().witness(&[owner]);
assert_eq!(token.initialize(&owner), true);
build_runtime().witness([owner]);
assert!(token.initialize(&owner));
let alice = Address::repeat_byte(1);
let bob = Address::repeat_byte(2);
let token_id_1 = token.query_token_id_by_index(U128::new(1));
let token_id_2 = token.query_token_id_by_index(U128::new(2));
assert_eq!(token.owner_of(token_id_1.clone()), owner);
assert_eq!(token.owner_of(token_id_2.clone()), owner);
let states = [(alice.clone(), token_id_1.clone()), (bob.clone(), token_id_2.clone())];
assert_eq!(token.transfer_multi(&states), true);
let states = [(alice, token_id_1.clone()), (bob, token_id_2.clone())];
assert!(token.transfer_multi(&states));
assert_eq!(token.owner_of(token_id_1.clone()), alice);
assert_eq!(token.owner_of(token_id_2.clone()), bob);
}
Expand All @@ -57,12 +57,12 @@ fn approve() {
let mut token = Oep5TokenInstance;
let owner = Address::zero();
let alice = Address::repeat_byte(1);
build_runtime().witness(&[owner, alice]);
assert_eq!(token.initialize(&owner), true);
build_runtime().witness([owner, alice]);
assert!(token.initialize(&owner));
let token_id = token.query_token_id_by_index(U128::new(1));
assert_eq!(token.approve(&alice, token_id.clone()), true);
assert!(token.approve(&alice, token_id.clone()));
assert_eq!(token.get_approved(token_id.clone()), alice.clone());
assert_eq!(token.owner_of(token_id.clone()), owner.clone());
assert_eq!(token.take_ownership(token_id.clone()), true);
assert!(token.take_ownership(token_id.clone()));
assert_eq!(token.owner_of(token_id.clone()), alice.clone());
}
10 changes: 5 additions & 5 deletions examples/oep8token/src/test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ use ontio_std::types::{Address, U128};
fn init() {
let mut token = Oep8TokenInstance;
let owner: Address = ostd::macros::base58!("AFmseVrdL9f9oyCzZefL9tG6UbvhPbdYzM");
build_runtime().witness(&[owner]);
build_runtime().witness([owner]);
assert!(token.init());
let token_id_1 = format!("{}", 1);
let token_id_2 = format!("{}", 2);
Expand Down Expand Up @@ -38,7 +38,7 @@ fn init() {
fn transfer() {
let mut token = Oep8TokenInstance;
let owner: Address = ostd::macros::base58!("AFmseVrdL9f9oyCzZefL9tG6UbvhPbdYzM");
build_runtime().witness(&[owner]);
build_runtime().witness([owner]);
assert!(token.init());
let token_id_1 = format!("{}", 1);
let alice = Address::random();
Expand All @@ -47,7 +47,7 @@ fn transfer() {
assert_eq!(token.balance_of(&alice, token_id_1.clone()), U128::new(10));
let bob = Address::random();
let states = [
(owner.clone(), alice, U128::new(1000), token_id_1.clone()),
(owner, alice, U128::new(1000), token_id_1.clone()),
(owner, bob, U128::new(1000), token_id_1.clone()),
];
assert!(token.transfer_multi(&states));
Expand All @@ -59,7 +59,7 @@ fn approve() {
let mut token = Oep8TokenInstance;
let owner: Address = ostd::macros::base58!("AFmseVrdL9f9oyCzZefL9tG6UbvhPbdYzM");
let alice = Address::random();
build_runtime().witness(&[owner, alice]);
build_runtime().witness([owner, alice]);
assert!(token.init());
let token_id_1 = format!("{}", 1);
assert!(token.approve(&owner, &alice, U128::new(10), token_id_1.clone()));
Expand All @@ -74,7 +74,7 @@ fn approve_multi() {
let mut token = Oep8TokenInstance;
let owner: Address = ostd::macros::base58!("AFmseVrdL9f9oyCzZefL9tG6UbvhPbdYzM");
let alice = Address::random();
build_runtime().witness(&[owner, alice]);
build_runtime().witness([owner, alice]);
assert!(token.init());
let token_id_1 = format!("{}", 1);
let states = [(owner, alice, U128::new(10000), token_id_1.clone())];
Expand Down
6 changes: 3 additions & 3 deletions examples/oracle/tests/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ use oracle::storage;
fn test_oracle() {
let runtime = &build_runtime();
let admin = Address::repeat_byte(1);
runtime.witness(&[admin.clone()]);
runtime.witness([admin]);
method::initialize(&admin);
storage::put_decimal(9);
assert_eq!(9, storage::get_decimal());
Expand All @@ -30,7 +30,7 @@ fn test_oracle() {
fn test_init_twice() {
let runtime = &build_runtime();
let admin = Address::repeat_byte(1);
runtime.witness(&[admin.clone()]);
runtime.witness([admin]);
method::initialize(&admin);
method::initialize(&admin);
}
Expand All @@ -39,7 +39,7 @@ fn test_init_twice() {
fn test_set_decimal_twice() {
let runtime = &build_runtime();
let admin = Address::repeat_byte(1);
runtime.witness(&[admin.clone()]);
runtime.witness([admin]);
method::initialize(&admin);
storage::put_decimal(9);
storage::put_decimal(7);
Expand Down
23 changes: 11 additions & 12 deletions examples/token-codegen/src/test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ fn get_total_supply() {
let mut token = MyTokenInstance;
let owner = &Address::random();
assert!(token.initialize(owner));
assert_eq!(token.initialize(owner), false);
assert!(!token.initialize(owner));
let total = token.total_supply();
assert_eq!(token.balance_of(owner), total);
}
Expand All @@ -18,18 +18,18 @@ fn transfer_no_witness() {
let owner = &Address::random();
let b = &Address::random();
assert!(token.initialize(owner));
assert_eq!(token.transfer(owner, b, U128::new(123)), false);
assert!(!token.transfer(owner, b, U128::new(123)));
}

#[test]
fn transfer() {
let owner = &Address::random();
let b = &Address::random();
build_runtime().witness(&[owner]);
build_runtime().witness([owner]);
let mut token = MyTokenInstance;
assert!(token.initialize(owner));

assert_eq!(token.transfer(owner, b, U128::new(123)), true);
assert!(token.transfer(owner, b, U128::new(123)));
assert_eq!(token.balance_of(b), U128::new(123));

let total = token.total_supply();
Expand All @@ -42,12 +42,12 @@ fn approve() {
let alice = &Address::random();
let mut token = MyTokenInstance;
let handle = build_runtime();
handle.witness(&[owner]);
handle.witness([owner]);
assert!(token.initialize(owner));
assert!(token.approve(owner, alice, U128::new(100)));
assert_eq!(token.allowance(owner, alice), U128::new(100));
assert!(!token.transfer_from(alice, owner, U128::new(100)));
handle.witness(&[alice]);
handle.witness([alice]);
assert!(token.transfer_from(alice, owner, U128::new(100)));
assert_eq!(token.allowance(owner, alice), U128::new(0));
}
Expand All @@ -57,12 +57,11 @@ fn transfer_multi() {
let owner = &Address::random();
let alice = &Address::random();
let bob = &Address::random();
build_runtime().witness(&[owner, alice]);
build_runtime().witness([owner, alice]);
let mut token = MyTokenInstance;
assert!(token.initialize(owner));
let states =
[(owner.clone(), alice.clone(), U128::new(1)), (owner.clone(), bob.clone(), U128::new(2))];
assert_eq!(token.transfer_multi(&states), true);
assert_eq!(token.balance_of(&alice), U128::new(1));
assert_eq!(token.balance_of(&bob), U128::new(2));
let states = [(*owner, *alice, U128::new(1)), (*owner, *bob, U128::new(2))];
assert!(token.transfer_multi(&states));
assert_eq!(token.balance_of(alice), U128::new(1));
assert_eq!(token.balance_of(bob), U128::new(2));
}
8 changes: 7 additions & 1 deletion ontio-bump-alloc/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,12 @@ impl BumpAlloc {
}
}

impl Default for BumpAlloc {
fn default() -> Self {
Self::new()
}
}

fn align_to(size: usize, align: usize) -> usize {
(size + align - 1) & !(align - 1)
}
Expand All @@ -35,7 +41,7 @@ unsafe impl GlobalAlloc for BumpAlloc {
let need_bytes = align_to(layout.size(), layout.align());
let pos = align_to(inner.pos as usize, layout.align());
if pos + need_bytes > inner.size {
let need_page = (pos + need_bytes - inner.size + PAGE_SIZE - 1) / PAGE_SIZE;
let need_page = (pos + need_bytes - inner.size).div_ceil(PAGE_SIZE);
match alloc_pages(need_page) {
Some(p) => {
if inner.pos.is_null() {
Expand Down
4 changes: 2 additions & 2 deletions ontio-codegen/src/event.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,10 @@ pub fn quote(method_name: String, func: &syn::ItemFn) -> proc_macro2::TokenStrea
.sig
.inputs
.iter()
.filter_map(|i| {
.map(|i| {
match i {
// https://docs.rs/syn/1.0.1/syn/struct.PatType.html
FnArg::Typed(ref val) => Some((val.pat.clone(), val.ty.clone())),
FnArg::Typed(ref val) => (val.pat.clone(), val.ty.clone()),
_ => unreachable!("it's not gonna happen."),
}
})
Expand Down
2 changes: 1 addition & 1 deletion ontio-std/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ description = "development library for ontology wasm contract"
wee_alloc = "0.4"
ontio-bump-alloc = {version = "0.1", path = "../ontio-bump-alloc", optional = true}
fixed-hash = { version = "0.4", default-features = false }
cfg-if = { version = "0.1", default-features = false }
cfg-if = { version = "1", default-features = false }
byteorder = { version = "1", default-features= false, features = ["i128"] }
ontio-codegen = { version = "0.2.1", path = "../ontio-codegen"}
ontio-derive-codec = { version = "0.2", path = "../ontio-derive-codec"}
Expand Down
2 changes: 1 addition & 1 deletion ontio-std/src/abi/codec.rs
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ impl<'a> Decoder<'a> for &'a H256 {

impl<'a> Decoder<'a> for H256 {
fn decode(source: &mut Source<'a>) -> Result<Self, Error> {
source.read_h256().map(H256::clone)
source.read_h256().copied()
}
}

Expand Down
6 changes: 3 additions & 3 deletions ontio-std/src/abi/vm_value_builder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -31,15 +31,15 @@ impl NestedVmValueBuilder<'_> {
}
}

impl<'a> Deref for NestedVmValueBuilder<'a> {
impl Deref for NestedVmValueBuilder<'_> {
type Target = VmValueBuilderCommon;

fn deref(&self) -> &Self::Target {
&self.current
}
}

impl<'a> DerefMut for NestedVmValueBuilder<'a> {
impl DerefMut for NestedVmValueBuilder<'_> {
fn deref_mut(&mut self) -> &mut Self::Target {
&mut self.current
}
Expand Down Expand Up @@ -194,7 +194,7 @@ mod tests {
sink.write_byte(TYPE_LIST); // second param
sink.write_u32(1);
sink.write_byte(TYPE_ADDRESS); // first param
sink.write(&addr);
sink.write(addr);
assert_eq!(builder.bytes(), sink.into());
}
}
Loading
Loading