Skip to content

Commit

Permalink
build!: update Rust version and near-* dependencies (#118)
Browse files Browse the repository at this point in the history
* Update to rust-version to 1.70.0

* Update workspaces, rename to near-workspaces

* Use new Gas type in some test internals

* Update near-sdk

* Set MSRV to 1.69.0

* ci: downgrade some dev-dependencies

* Fix version of `clap_lex`

* Add `scripts/fix_dependencies.sh`

* ci: downgrade deps in `lint` job

* Mention scripts/fix-dependencies.sh in README

* Fix language in comments
  • Loading branch information
mooori authored Nov 8, 2023
1 parent 64c512f commit 2e601c5
Show file tree
Hide file tree
Showing 29 changed files with 158 additions and 117 deletions.
10 changes: 8 additions & 2 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,10 @@ jobs:

- uses: Swatinem/rust-cache@v1
with:
cache-on-failure: true
key: rust-version-1.69.0-msrv

- name: downgrade some dev-dependencies for msrv, see https://github.com/near/near-workspaces-rs/issues/336
run: ./scripts/fix_dependencies.sh

- name: add wasm32-unknown-unknown
run: rustup target add wasm32-unknown-unknown
Expand All @@ -44,7 +47,10 @@ jobs:

- uses: Swatinem/rust-cache@v1
with:
cache-on-failure: true
key: rust-version-1.69.0-msrv

- name: downgrade some dev-dependencies for msrv, see https://github.com/near/near-workspaces-rs/issues/336
run: ./scripts/fix_dependencies.sh

- name: cargo fmt
run: cargo fmt --all -- --check
Expand Down
6 changes: 3 additions & 3 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ version = "0.15.0"
version = "0.1.0"
edition = "2021"
authors = ["Aurora Labs <[email protected]>"]
rust-version = "1.64.0"
rust-version = "1.69.0"
description = "Ergonomic plugin system to extend NEAR contracts."
license = "CC0-1.0"
readme = "README.md"
Expand All @@ -22,14 +22,14 @@ keywords = ["near", "smart contract", "plugin"]

[workspace.dependencies]
bitflags = "1.3"
near-sdk = "4.1.0"
near-sdk = "4.1.1"
near-plugins = { path = "near-plugins" }
near-plugins-derive = { path = "near-plugins-derive" }
serde = "1"
anyhow = "1.0"
borsh = "0.9"
tokio = { version = "1", features = ["full"] }
workspaces = "0.7"
near-workspaces = "0.9"
toml = "0.5"
darling = "0.13.1"
proc-macro2 = "1.0"
Expand Down
9 changes: 7 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -65,10 +65,10 @@ Tests should verify that once the macros provided by this crate are expanded, th

- A contract using the plugin is contained in `near-plugins-derive/tests/contracts/<plugin_name>/`.
- This contract is used in `near-plugins-derive/tests/<plugin_name>.rs` which:
- Compiles and deploys the contract on chain via [NEAR `workspaces`](https://docs.rs/workspaces/0.7.0/workspaces/).
- Compiles and deploys the contract on chain via [`near-workspaces`](https://crates.io/crates/near-workspaces).
- Sends transactions to the deployed contract to verify plugin functionality.

## Contributors Notes
## Traits and their implementations

Traits doesn't contain any implementation, even though some interfaces are self-contained enough to have it.
It is this way since `near_bindgen` macro from near-sdk-rs will only expose as public methods those that are implemented
Expand All @@ -77,6 +77,11 @@ during the trait implementation for the contract.
In the documentation all comments under Default Implementation makes remarks about the current implementation derived
automatically from macros. They can be changed if the trait is manually implemented rather than deriving the macro.

## Contributor Notes

When compiling tests for the first time on a machine using the MSRV 1.69.0, an error might occur due to some dependencies of `near-workspaces` requiring a higher version of Rust. You can execute [./script/fix-dependencies.sh](./scripts/fix_dependencies.sh) to install a compatible version of these dependencies. The comments in that script provide additional information.


## Roadmap

- Factory upgrades: Allow upgrading all deployed contracts from the factory fetching binary upstream.
Expand Down
2 changes: 1 addition & 1 deletion near-plugins-derive/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -21,5 +21,5 @@ borsh.workspace = true
near-plugins.workspace = true
near-sdk.workspace = true
tokio.workspace = true
workspaces.workspace = true
near-workspaces.workspace = true
toml.workspace = true
10 changes: 5 additions & 5 deletions near-plugins-derive/tests/access_controllable.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,12 @@ use common::utils::{
};
use near_plugins::access_controllable::{PermissionedAccounts, PermissionedAccountsPerRole};
use near_sdk::serde_json::json;
use near_workspaces::network::Sandbox;
use near_workspaces::result::ExecutionFinalResult;
use near_workspaces::{Account, AccountId, Contract, Worker};
use std::collections::{HashMap, HashSet};
use std::convert::TryFrom;
use std::path::Path;
use workspaces::network::Sandbox;
use workspaces::result::ExecutionFinalResult;
use workspaces::{Account, AccountId, Contract, Worker};

const PROJECT_PATH: &str = "./tests/contracts/access_controllable";

Expand Down Expand Up @@ -48,7 +48,7 @@ impl Setup {
admins: HashMap<String, AccountId>,
grantees: HashMap<String, AccountId>,
) -> anyhow::Result<Self> {
let worker = workspaces::sandbox().await?;
let worker = near_workspaces::sandbox().await?;
let wasm =
common::repo::compile_project(Path::new(PROJECT_PATH), "access_controllable").await?;
let contract = AccessControllableContract::new(worker.dev_deploy(&wasm).await?);
Expand Down Expand Up @@ -110,7 +110,7 @@ impl Setup {
async fn call_increase_2(
contract: &Contract,
caller: &Account,
) -> workspaces::Result<ExecutionFinalResult> {
) -> near_workspaces::Result<ExecutionFinalResult> {
caller
.call(contract.id(), "increase_2")
.args_json(())
Expand Down
18 changes: 9 additions & 9 deletions near-plugins-derive/tests/common/access_controllable_contract.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
use near_plugins::access_controllable::PermissionedAccounts;

use near_sdk::serde_json::json;
use workspaces::result::ExecutionFinalResult;
use workspaces::{Account, AccountId, Contract};
use near_workspaces::result::ExecutionFinalResult;
use near_workspaces::{Account, AccountId, Contract};

/// Wrapper for a contract that is `#[access_controllable]`. It allows
/// implementing helpers for calling contract methods.
Expand Down Expand Up @@ -56,7 +56,7 @@ impl AccessControllableContract {
&self,
caller: &Account,
account_id: &AccountId,
) -> workspaces::Result<ExecutionFinalResult> {
) -> near_workspaces::Result<ExecutionFinalResult> {
caller
.call(self.contract.id(), "acl_init_super_admin")
.args_json(json!({
Expand Down Expand Up @@ -89,7 +89,7 @@ impl AccessControllableContract {
&self,
caller: &Account,
account_id: &AccountId,
) -> workspaces::Result<ExecutionFinalResult> {
) -> near_workspaces::Result<ExecutionFinalResult> {
caller
.call(self.contract.id(), "acl_add_super_admin_unchecked")
.args_json(json!({
Expand Down Expand Up @@ -140,7 +140,7 @@ impl AccessControllableContract {
&self,
caller: &Account,
account_id: &AccountId,
) -> workspaces::Result<ExecutionFinalResult> {
) -> near_workspaces::Result<ExecutionFinalResult> {
caller
.call(self.contract.id(), "acl_revoke_super_admin_unchecked")
.args_json(json!({
Expand Down Expand Up @@ -201,7 +201,7 @@ impl AccessControllableContract {
caller: &Account,
role: &str,
account_id: &AccountId,
) -> workspaces::Result<ExecutionFinalResult> {
) -> near_workspaces::Result<ExecutionFinalResult> {
caller
.call(self.contract.id(), "acl_add_admin_unchecked")
.args_json(json!({
Expand Down Expand Up @@ -252,7 +252,7 @@ impl AccessControllableContract {
caller: &Account,
role: &str,
account_id: &AccountId,
) -> workspaces::Result<ExecutionFinalResult> {
) -> near_workspaces::Result<ExecutionFinalResult> {
caller
.call(self.contract.id(), "acl_revoke_admin_unchecked")
.args_json(json!({
Expand Down Expand Up @@ -314,7 +314,7 @@ impl AccessControllableContract {
caller: &Account,
role: &str,
account_id: &AccountId,
) -> workspaces::Result<ExecutionFinalResult> {
) -> near_workspaces::Result<ExecutionFinalResult> {
caller
.call(self.contract.id(), "acl_grant_role_unchecked")
.args_json(json!({
Expand Down Expand Up @@ -365,7 +365,7 @@ impl AccessControllableContract {
caller: &Account,
role: &str,
account_id: &AccountId,
) -> workspaces::Result<ExecutionFinalResult> {
) -> near_workspaces::Result<ExecutionFinalResult> {
caller
.call(self.contract.id(), "acl_revoke_role_unchecked")
.args_json(json!({
Expand Down
8 changes: 4 additions & 4 deletions near-plugins-derive/tests/common/key.rs
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
use workspaces::result::ExecutionFinalResult;
use workspaces::types::{AccessKeyInfo, PublicKey};
use workspaces::{Account, AccountId, Contract};
use near_workspaces::result::ExecutionFinalResult;
use near_workspaces::types::{AccessKeyInfo, PublicKey};
use near_workspaces::{Account, AccountId, Contract};

/// Creates a transaction signed by `signer` to delete `key` from `contract`.
pub async fn delete_access_key(
signer: &Account,
contract: &AccountId,
key: PublicKey,
) -> workspaces::Result<ExecutionFinalResult> {
) -> near_workspaces::Result<ExecutionFinalResult> {
signer.batch(contract).delete_key(key).transact().await
}

Expand Down
6 changes: 3 additions & 3 deletions near-plugins-derive/tests/common/ownable_contract.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use near_sdk::serde_json::json;
use workspaces::result::ExecutionFinalResult;
use workspaces::{Account, AccountId, Contract};
use near_workspaces::result::ExecutionFinalResult;
use near_workspaces::{Account, AccountId, Contract};

/// Wrapper for a contract that is `#[ownable]`. It allows implementing helpers for calling contract
/// methods.
Expand All @@ -26,7 +26,7 @@ impl OwnableContract {
&self,
caller: &Account,
owner: Option<AccountId>,
) -> workspaces::Result<ExecutionFinalResult> {
) -> near_workspaces::Result<ExecutionFinalResult> {
caller
.call(self.contract.id(), "owner_set")
.args_json(json!({ "owner": owner }))
Expand Down
8 changes: 4 additions & 4 deletions near-plugins-derive/tests/common/pausable_contract.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
use near_sdk::serde_json::json;
use near_workspaces::result::ExecutionFinalResult;
use near_workspaces::{Account, Contract};
use std::collections::HashSet;
use workspaces::result::ExecutionFinalResult;
use workspaces::{Account, Contract};

/// Wrapper for a contract that is `#[pausable]`. It allows implementing helpers
/// for calling contract methods.
Expand Down Expand Up @@ -33,7 +33,7 @@ impl PausableContract {
&self,
caller: &Account,
key: &str,
) -> workspaces::Result<ExecutionFinalResult> {
) -> near_workspaces::Result<ExecutionFinalResult> {
caller
.call(self.contract.id(), "pa_pause_feature")
.args_json(json!({ "key": key }))
Expand All @@ -46,7 +46,7 @@ impl PausableContract {
&self,
caller: &Account,
key: &str,
) -> workspaces::Result<ExecutionFinalResult> {
) -> near_workspaces::Result<ExecutionFinalResult> {
caller
.call(self.contract.id(), "pa_unpause_feature")
.args_json(json!({ "key": key }))
Expand Down
16 changes: 8 additions & 8 deletions near-plugins-derive/tests/common/upgradable_contract.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ use near_plugins::upgradable::{FunctionCallArgs, UpgradableDurationStatus};
use near_sdk::serde_json::json;
use near_sdk::CryptoHash;
use near_sdk::Duration;
use workspaces::result::ExecutionFinalResult;
use workspaces::{Account, Contract};
use near_workspaces::result::ExecutionFinalResult;
use near_workspaces::{Account, Contract};

/// Wrapper for a contract that derives `Upgradable`. It allows implementing helpers for calling
/// contract methods provided by `Upgradable`.
Expand Down Expand Up @@ -36,7 +36,7 @@ impl UpgradableContract {
&self,
caller: &Account,
code: Vec<u8>,
) -> workspaces::Result<ExecutionFinalResult> {
) -> near_workspaces::Result<ExecutionFinalResult> {
caller
.call(self.contract.id(), "up_stage_code")
.args_borsh(code)
Expand Down Expand Up @@ -66,13 +66,13 @@ impl UpgradableContract {
Ok(res.json::<Option<CryptoHash>>()?)
}

/// The `Promise` returned by trait method `up_deploy_code` is resolved in the `workspaces`
/// The `Promise` returned by trait method `up_deploy_code` is resolved in the `near_workspaces`
/// transaction.
pub async fn up_deploy_code(
&self,
caller: &Account,
function_call_args: Option<FunctionCallArgs>,
) -> workspaces::Result<ExecutionFinalResult> {
) -> near_workspaces::Result<ExecutionFinalResult> {
caller
.call(self.contract.id(), "up_deploy_code")
.args_json(json!({
Expand All @@ -87,7 +87,7 @@ impl UpgradableContract {
&self,
caller: &Account,
staging_duration: Duration,
) -> workspaces::Result<ExecutionFinalResult> {
) -> near_workspaces::Result<ExecutionFinalResult> {
caller
.call(self.contract.id(), "up_init_staging_duration")
.args_json(json!({ "staging_duration": staging_duration }))
Expand All @@ -100,7 +100,7 @@ impl UpgradableContract {
&self,
caller: &Account,
staging_duration: Duration,
) -> workspaces::Result<ExecutionFinalResult> {
) -> near_workspaces::Result<ExecutionFinalResult> {
caller
.call(self.contract.id(), "up_stage_update_staging_duration")
.args_json(json!({ "staging_duration": staging_duration }))
Expand All @@ -112,7 +112,7 @@ impl UpgradableContract {
pub async fn up_apply_update_staging_duration(
&self,
caller: &Account,
) -> workspaces::Result<ExecutionFinalResult> {
) -> near_workspaces::Result<ExecutionFinalResult> {
caller
.call(self.contract.id(), "up_apply_update_staging_duration")
.max_gas()
Expand Down
12 changes: 6 additions & 6 deletions near-plugins-derive/tests/common/utils.rs
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
use near_sdk::serde::de::DeserializeOwned;
use near_sdk::Duration;
use near_workspaces::network::Sandbox;
use near_workspaces::result::{ExecutionFinalResult, ExecutionOutcome};
use near_workspaces::{AccountId, Block, Worker};
use std::cmp::PartialEq;
use std::fmt::Debug;
use std::str::FromStr;
use workspaces::network::Sandbox;
use workspaces::result::{ExecutionFinalResult, ExecutionOutcome};
use workspaces::{AccountId, Block, Worker};

/// Converts `account_id` to a `near_sdk::AccountId` and panics on failure.
///
Expand Down Expand Up @@ -172,7 +172,7 @@ pub fn assert_failure_with(res: ExecutionFinalResult, must_contain: &str) {
}

pub fn assert_access_key_not_found_error(
res: workspaces::Result<ExecutionFinalResult, workspaces::error::Error>,
res: near_workspaces::Result<ExecutionFinalResult, near_workspaces::error::Error>,
) {
let err = res.expect_err("Transaction should not have been executed");

Expand Down Expand Up @@ -202,7 +202,7 @@ async fn block_timestamp(worker: &Worker<Sandbox>) -> u64 {
pub async fn get_transaction_block(
worker: &Worker<Sandbox>,
result: &ExecutionOutcome,
) -> workspaces::Result<Block> {
) -> near_workspaces::Result<Block> {
let block_hash = result.block_hash;
worker.view_block().block_hash(block_hash).await
}
Expand All @@ -215,7 +215,7 @@ pub async fn get_transaction_block(
/// forwarding provided by this function is reasonly fast in our tests for durations that correspond
/// to less than 100 seconds.
///
/// [Time travels]: https://github.com/near/workspaces-rs#time-traveling
/// [Time travels]: https://github.com/near/near-workspaces-rs#time-traveling
pub async fn fast_forward_beyond(worker: &Worker<Sandbox>, duration: Duration) {
let initial_timestamp = block_timestamp(worker).await;

Expand Down
2 changes: 1 addition & 1 deletion near-plugins-derive/tests/contracts/README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
Contains contracts that use the plugins provided by `near-plugins`.

These contracts are compiled during tests via Near's `workspaces-rs` and may serve as examples for smart contract developers.
These contracts are compiled during tests via `near-workspaces` and may serve as examples for smart contract developers.

# TODO: contract to test optional ACL arguments
- `#[access_control]` has optional arguments, e.g. `storage_prefix`.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ crate-type = ["cdylib", "rlib"]

[dependencies]
near-plugins = { path = "../../../../near-plugins" }
near-sdk = "4.0.0"
near-sdk = "4.1.1"

[profile.release]
codegen-units = 1
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
[toolchain]
channel = "1.66.1"
channel = "1.69.0"
components = ["clippy", "rustfmt"]
targets = [ "wasm32-unknown-unknown" ]
2 changes: 1 addition & 1 deletion near-plugins-derive/tests/contracts/ownable/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ crate-type = ["cdylib", "rlib"]

[dependencies]
near-plugins = { path = "../../../../near-plugins" }
near-sdk = "4.1.0"
near-sdk = "4.1.1"

[profile.release]
codegen-units = 1
Expand Down
3 changes: 2 additions & 1 deletion near-plugins-derive/tests/contracts/ownable/rust-toolchain
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
[toolchain]
channel = "1.66.1"
channel = "1.69.0"
components = ["clippy", "rustfmt"]
targets = [ "wasm32-unknown-unknown" ]
Loading

0 comments on commit 2e601c5

Please sign in to comment.