Crates.io | near-sdk-abi-macros |
lib.rs | near-sdk-abi-macros |
version | 0.1.0 |
source | src |
created_at | 2023-01-16 10:30:00.25758 |
updated_at | 2023-01-16 10:30:00.25758 |
description | Utility library for making typesafe cross-contract calls in NEAR SDK smart contracts. |
homepage | |
repository | https://github.com/near/near-sdk-abi |
max_upload_size | |
id | 760079 |
size | 6,060 |
near-sdk-abi
Utility library for making typesafe cross-contract calls with near-sdk-rs smart contracts
Release notes and unreleased changes can be found in the CHANGELOG
This crate supports two sets of APIs for users with different needs:
Checkout the delegator-macro
example for a standalone smart contract using macro API to make a cross-contract call.
To generate a trait named ContractName
with ext interface named ext_name
based on ABI located at path/to/abi.json
(relative to the current file's directory):
near_abi_ext! { mod ext_name trait ContractName for "path/to/abi.json" }
Now, assuming you have an ext_account_id: near_sdk::AccountId
representing the contract account id, you can make a cross-contract call like this:
let promise = ext_adder::ext(ext_account_id).my_method_name(arg1, arg2);
Checkout the delegator-generation
example for a standalone project using generation API to make a cross-contract call.
First, we need our package to have a build.rs
file that runs the generation step. The following snippet will generate the contract trait in abi.rs
under path/to/out/dir
:
fn main() -> anyhow::Result<()> {
near_sdk_abi::Generator::new("path/to/out/dir".into())
.file(near_sdk_abi::AbiFile::new("path/to/abi.json"))
.generate()?;
Ok(())
}
The resulting file, however, is not included in your source set by itself. You have to include it manually; the recommended way is to create a mod with a custom path:
#[path = "path/to/out/dir/abi.rs"]
mod mymod;
Now, assuming you have an ext_account_id: near_sdk::AccountId
representing the contract account id, you can make a cross-contract call like this:
let promise = ext_adder::ext(ext_account_id).my_method_name(arg1, arg2);
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as below, without any additional terms or conditions.
Licensed under either of
at your option.