Releases: near/near-sdk-rs
Releases · near/near-sdk-rs
4.0.0-pre.9
4.0.0-pre.8
Added
- Added
Debug
andPartialEq
implementations forPromiseError
. PR 728. - Added convenience function
env::block_timestamp_ms
to return ms since 1970. PR 736 - Added an optional way to handle contract errors with
Result
. PR 745, PR 754 and PR 757. - Added support for using
#[callback_result]
with a function that doesn't have a return. PR 738 - Support for multi-architecture docker builds and updated Rust version to 1.56 with latest contract builder. PR 751
Fixes
- Disallow invalid
Promise::then
chains. Will now panic withpromise_1.then(promise_2.then(promise_3))
syntax. PR 410- Current implementation will schedule these promises in the incorrect order. With this format, it's unclear where the result from
promise_1
will be used, so it will panic at runtime.
- Current implementation will schedule these promises in the incorrect order. With this format, it's unclear where the result from
- Fixed
signer_account_pk
from mocked implementation. PR 785
Changed
- Deprecate
callback
,callback_vec
,result_serializer
,init
proc macro attributes and remove exports fromnear-sdk
. PR 770- They are not needed to be imported and are handled specifically within
#[near_bindgen]
- They are not needed to be imported and are handled specifically within
- Fixed gas assertion in
*_transfer_call
implementations of FT and NFT standards to only require what's needed. PR 760 - Fixed events being emitted in FT standard to include refund transfers and burn events. PR 752
- Moved
VMContext
to a local type defined in SDK to avoid duplicate types. PR 785 - Moved
Metadata
andMethodMetadata
to a pseudo-private module as these are just types used within macros and not stable. PR 771
Removed
- Remove
Clone
implementation forPromise
(error prone) #783
4.0.0-pre.7
4.0.0-pre.6
This release comes primarily to make the final near_sdk::store
collections available under the unstable
feature flag. Notable changes:
Features
- Added
env::random_seed_array
to return a fixed length array of therandom_seed
and optimizes the existing function. PR 692 - Implemented new iteration of
UnorderedSet
andTreeMap
undernear_sdk::store
which is available with theunstable
feature flag. PR 672 and PR 665
Fixes
- Improved macro spans for better errors with
#[near_bindgen]
macro. PR 683
4.0.0-pre.5
This release comes with changes to clean up the API to get ready for a stable release as well as adding new features such as more near_sdk::store
updated collection types! Notable changes include:
- fix(standards): Fix NFT impl macros to not import
HashMap
andnear_sdk::json_types::U128
. PR 571. - Add drain iterator for
near_sdk::store::UnorderedMap
. PR 613.- Will remove all values and iterate over owned values that were removed
- Fix codegen for methods inside a
#[near_bindgen]
to allow usingmut self
which will generate the same code asself
and will not persist state. PR 616. - Make function call terminology consistent by switching from method name usages. PR 633.
- This is only a breaking change if inspecting the
VmAction
s of receipts in mocked environments. All other changes are positional argument names.
- This is only a breaking change if inspecting the
- Implement new iterator for
collections::Vec
to optimize fornth
andcount
. PR 634- This is useful specifically for things like pagination, where
.skip(x)
will not load the firstx
elements anymore - Does not affect any
store
collections, which are already optimized, this just optimizes the legacycollections
that useVec
- This is useful specifically for things like pagination, where
- Add consts for near, yocto, and tgas. PR 640.
near_sdk::ONE_NEAR
,near_sdk::ONE_YOCTO
,near_sdk::Gas::ONE_TERA
- Update SDK dependencies for
nearcore
crates used for mocking (0.10
) andborsh
(0.9
) - Implemented
Debug
for allcollection
andstore
types. PR 647 - Added new internal mint function to allow specifying or ignoring refund. PR 618
- store: Implement caching
LookupSet
type. This is the new iteration of the previous version ofnear_sdk::collections::LookupSet
that has an updated API, and is located atnear_sdk::store::LookupSet
. PR 654, PR 664. - Deprecate
testing_env_with_promise_results
,setup_with_config
, andsetup
due to these functions being unneeded anymore or have unintended side effects PR 671- Added missing pattern for only including context and vm config to
testing_env!
to remove friction
- Added missing pattern for only including context and vm config to
- Added
_array
suffix versions ofsha256
,keccak256
, andkeccak512
hash functions inenv
PR 646- These return a fixed length array instead of heap allocating with
Vec<u8>
- These return a fixed length array instead of heap allocating with
- Added
ripemd160_array
hash function that returns a fixed length byte array PR 648 - Added
ecrecover
underunstable
feature for recovering signer address by message hash and a corresponding signature. PR 658. - standards: Add require statement to ensure minimum needed gas in FT and NFT transfers at start of method. PR 678
4.0.0-pre.3
This release comes with a few very minor API changes but also some new features. For up-to-date changes, see CHANGELOG.
4.0.0-pre.3
[10-12-2021]
- Introduce
#[callback_result]
annotation, which acts like#[callback]
except that it returnsResult<T, PromiseError>
to allow error handling. PR 554- Adds
#[callback_unwrap]
to replacecallback
- Adds
- mock: Update
method_names
field ofAddKeyWithFunctionCall
to aVec<String>
fromVec<Vec<u8>>
. PR 555- Method names were changed to be strings in
4.0.0-pre.2
but this one was missed
- Method names were changed to be strings in
- env: Update the register used for temporary
env
methods tou64::MAX - 2
from0
. PR 557.- When mixing using
sys
andenv
, reduces chance of collision for using0
- When mixing using
- store: Implement caching
LookupMap
type. This is the new iteration of the previous version ofnear_sdk::collections::LookupMap
that has an updated API, and is located atnear_sdk::store::LookupMap
. PR 487.- The internal storage format has changed from
collections::LookupMap
so the type cannot be swapped out without some migration.
- The internal storage format has changed from
- store: Implement caching
UnorderedMap
type. PR 584.- Similar change to
LookupMap
update, and is an iterable version of that data structure. - Data structure has also changed internal storage format and cannot be swapped with
collections::UnorderedMap
without manual migration.
- Similar change to
4.0.0-pre.2
This release comes with various API fixes. For up to date changes, see CHANGELOG.
Changes in this release:
- Update
panic
andpanic_utf8
syscall signatures to indicate they do not return. PR 489 - Deprecate
env::panic
in favor ofenv::panic_str
. PR 492- This method now takes a
&str
as the bytes are enforced to be utf8 in the runtime. - Change is symmetric to
env::log_str
change in4.0.0-pre.1
- This method now takes a
- Removes
PublicKey
generic onenv
promise batch calls. Functions now just take a reference to thePublicKey
. PR 495 - fix: Public keys can no longer be borsh deserialized from invalid bytes. PR 502
- Adds
Hash
derive toPublicKey
- Adds
- Changes method name parameters from bytes (
Vec<u8>
and&[u8]
) to string equivalents for batch function call promises PR 515promise_batch_action_function_call
,Promise::function_call
,promise_batch_action_add_key_with_function_call
,Promise::add_access_key
, andPromise::add_access_key_with_nonce
are afffected.- Updates
promise_then
,promise_create
, andReceipt::FunctionCall
's method name to string equivalents from bytes PR 521. - Instead of
b"method_name"
just use"method_name"
, the bytes are enforced to be utf8 in the runtime.
- Fixes
#[ext_contract]
codegen function signatures to take anAccountId
instead of a genericToString
and converting unchecked toAccountId
. PR 518 - Fixes NFT contract standard
mint
function to not be in theNonFungibleTokenCore
trait. PR 525- If using the
mint
function from the code generated function on the contract, switch to call it on theNonFungibleToken
field of the contract (self.mint(..)
=>self.token.mint(..)
)
- If using the
- Fixes
nft_is_approved
method on contract standard to take&self
instead of movingself
. - Fixes
receiver_id
inmock::Receipt
toAccountId
from string. This is a change to the type added in4.0.0-pre.1
. PR 529 - Moves runtime syscalls to
near-sys
crate and includes new functions available PR 507
4.0.0-pre.1
- Implements new
LazyOption
type underunstable
feature. Similar toLazy
but is optional to set a value. PR 444. - Move type aliases and core types to near-sdk to avoid coupling. PR 415.
- Implements new
Lazy
type under the newunstable
feature which is a lazily loaded storage value. PR 409. - fix(promise):
PromiseOrValue
now correctly setsshould_return
flag correctly on serialization. PR 407. - fix(tree_map): Correctly panic when range indices are exluded and
start > end
. PR 392. - Implement
FromStr
for json types to allow calling.parse()
to convert them. - expose
cur_block
andgenesis_config
fromRuntimeStandalone
to configure simulation tests. PR 390. - fix(simulator): failing with long chains. PR 385.
- Make block time configurable to sim contract tests. PR 378.
- Deprecate
env::log
in favour ofenv::log_str
. The logs assume that the bytes are utf8, so this will be a cleaner interface to use. PR 366. - Update syscall interface to no longer go through
BLOCKCHAIN_INTERFACE
. Instead usesnear_sdk::sys
which is under theunstable
feature flag if needed. PR 417. - Set up global allocator by default for WASM architectures. PR 429.
- This removes the re-export of
wee_alloc
because if this feature is enabled, the allocator will already be set. - Deprecates
setup_alloc!
macro as this will be set up by default, as long as thewee_alloc
feature is not specifically disabled. In this case, the allocator can be overridden to a custom one or set manually if intended.
- This removes the re-export of
- Update
TreeMap
iterator implementation to avoid unnecessary storage reads. PR 428. - Update
AccountId
to be a newtype with merged functionality fromValidAccountId
- Removes
ValidAccountId
to avoid having multiple types for account IDs - This type will have
ValidAccountId
's JSON (de)serialization and the borsh serialization will be equivalent to what it was previously
- Removes
- Initializes default for
BLOCKCHAIN_INTERFACE
to avoid requiring to initialize testing environment for tests that don't require custom blockchain interface configuration- This default only affects outside of
wasm32
environments and is optional/backwards compatible
- This default only affects outside of
- Deprecates
env::block_index
and replaces it withenv::block_height
for more consistent naming - Updates internal NFT traits to not move the underlying type for methods
- This should not be a breaking change if using the
impl
macros, only if implementing manually
- This should not be a breaking change if using the
- Makes
BLOCKCHAIN_INTERFACE
a concrete type and no longer exports it.- If for testing you need this mocked blockchain,
near_sdk::mock::with_mocked_blockchain
can be used near_sdk::env::take_blockchain_interface
is removed, as this interface is no longer optional- removes
BlockchainInterface
trait, as this interface is only used in mocked contexts now
- If for testing you need this mocked blockchain,
- Updates
Gas
type to be a newtype, which makes the API harder to misuse.- This also changes the JSON serialization of this type to a string, to avoid precision loss when deserializing in JavaScript
PublicKey
now utilizesBase58PublicKey
instead ofVec<u8>
directly PR 453. Usage ofBase58PublicKey
is deprecated- Expose
Receipt
and respectiveVmAction
s in mocked contexts through replacing with a local interface and types.
v3.1.0
3.1.0
- Updated dependencies for
near-sdk
- Introduce trait
IntoStorageKey
and updating all persistent collections to take it instead ofVec<u8>
.
It's a non-breaking change. - Introduce a macro derive
BorshStorageKey
that implementsIntoStorageKey
using borsh serialization. Example:
use near_sdk::BorshStorageKey;
#[derive(BorshSerialize, BorshStorageKey)]
enum StorageKey {
Records,
UniqueValues,
}
#[near_bindgen]
#[derive(BorshDeserialize, BorshSerialize, PanicOnDefault)]
pub struct StatusMessage {
pub records: LookupMap<String, String>,
pub unique_values: LookupSet<String>,
}
#[near_bindgen]
impl StatusMessage {
#[init]
pub fn new() -> Self {
Self {
records: LookupMap::new(StorageKey::Records),
unique_values: LookupSet::new(StorageKey::UniqueValues),
}
}
}
v3.0.1
3.0.1
- Introduced
#[private]
method decorator, that verifiespredecessor_account_id() == current_account_id()
.
NOTE: Usually, when a contract has to have a callback for a remote cross-contract call, this callback method should
only be called by the contract itself. It's to avoid someone else calling it and messing the state. Pretty common pattern
is to have an assert that validates that the direct caller (predecessor account ID) matches to the contract's account (current account ID). - Added how to build contracts with reproducible builds.
- Added
log!
macro to log a string from a contract similar toprintln!
macro. - Added
test_utils
mod fromnear_sdk
that contains a bunch of helper methods and structures, e.g.test_env
- simple test environment mod used internally.- Expanded
testing_env
to be able to pass promise results - Added
VMContextBuilder
to help construct aVMContext
for tests - Added
get_logs
method that returns current logs from the contract execution. - TEST_BREAKING
env::created_receipts
moved totest_utils::get_created_receipts
.
env
shouldn't contain testing methods. - Updated a few examples to use
log!
macro
- Added
#[derive(PanicOnDefault)]
that automatically implementsDefault
trait that panics when called.
This is helpful to prevent contracts from being initialized usingDefault
by removing boilerplate code. - Introduce
setup_alloc
macro that generates the same boilerplate as before, but also adds a #[cfg(target_arch = "wasm32")], which prevents the allocator from being used when the contract's main file is used in simulation testing. - Introduce
Base58CryptoHash
andCryptoHash
to represent32
bytes slice ofu8
. - Introduce
LazyOption
to keep a single large value with lazy deserialization. - BREAKING
#[init]
now checks that the state is not initialized. This is expected behavior. To ignore state check you can call#[init(ignore_state)]
- NOTE:
3.0.0
is not published, due to tag conflicts on thenear-sdk-rs
repo.