Cross Contract Call
This example performs the simplest cross-contract call possible: it calls our Hello NEAR example to set and retrieve a greeting. It is one of the simplest examples on making a cross-contract call, and the perfect gateway to the world of interoperative contracts.
Check the tutorial on how to perform cross-contract calls in batches and in parallel
Obtaining the Cross Contract Call Example
You have two options to start the project:
- You can use the app through
Github Codespaces
, which will open a web-based interactive environment. - Clone the repository locally and use it from your computer.
Codespaces | Clone locally |
---|---|
🌐 https://github.com/near-examples/cross-contract-calls |
Structure of the Example
The smart contract is available in two flavors: Rust and JavaScript
- 🌐 JavaScript
- 🦀 Rust
┌── sandbox-ts # sandbox testing
│ ├── hello-near
│ │ └── hello-near.wasm
│ └── main.ava.ts
├── src # contract's code
│ └── contract.ts
├── package.json
├── README.md
└── tsconfig.json
┌── tests # sandbox testing
│ ├── hello-near
│ │ └── hello-near.wasm
│ └── tests.rs
├── src # contract's code
│ ├── external.rs
│ └── lib.rs
├── Cargo.toml # package manager
├── README.md
└── rust-toolchain.toml
Smart Contract
Contract
The contract exposes methods to query the greeting and change it. These methods do nothing but calling get_greeting
and
set_greeting
in the hello-near
example.
- 🌐 Javascript
- 🦀 Rust
Loading...
- lib.rs
- external.rs
Loading...
Loading...
Testing the Contract
The contract readily includes a set of unit and sandbox testing to validate its functionality. To execute the tests, run the following commands:
- 🌐 JavaScript
- 🦀 Rust
cd contract-simple-ts
yarn
yarn test
cd contract-simple-rs
cargo test
The integration tests
use a sandbox to create NEAR users and simulate interactions with the contract.
In this project in particular, the integration tests first deploy the hello-near
contract. Then,
they test that the cross-contract call correctly sets and retrieves the message. You will find the integration tests
in sandbox-ts/
for the JavaScript version and in tests/
for the Rust version.
- 🌐 Javascript
- 🦀 Rust
Loading...
Loading...
Deploying the Contract to the NEAR network
In order to deploy the contract you will need to create a NEAR account.
- Short
- Full
# Create a new account pre-funded by a faucet
near create-account <accountId> --useFaucet
# Create a new account pre-funded by a faucet
near account create-account sponsor-by-faucet-service <my-new-dev-account>.testnet autogenerate-new-keypair save-to-keychain network-config testnet create
Go into the directory containing the smart contract (cd contract-advanced-ts
or cd contract-advanced-rs
), build and deploy it:
cargo near build
cargo near deploy <accountId> with-init-call new json-args '{"hello_account":"hello.near-example.testnet"}' prepaid-gas '100.0 Tgas' attached-deposit '0 NEAR' network-config testnet sign-with-keychain send