Cross Contract Call

To Share and +4 nLEARNs

import Tabs from ‘@theme/Tabs’;
import TabItem from ‘@theme/TabItem’;
import {CodeTabs, Language, Github} from "@site/components/codetabs"

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.

::info
This example is purely technical and does not have an frontend

::

Interacting with the Project

Since this example does not have a frontend, we will interact with it through the NEAR CLI.

| Gitpod | Clone locally |
| ———————————————————————————————————————————————————————————————— | —————————————————————————– |
| Open in Gitpod | 🌐 `https://github.com/near-examples/cross-contract-hello-js.git` |

| Gitpod | Clone locally |
| ———————————————————————————————————————————————————————————————— | —————————————————————————– |
| Open in Gitpod | 🦀 `https://github.com/near-examples/docs-examples` -> cross-contract-hello-rs |

| Gitpod | Clone locally |
| ———————————————————————————————————————————————————————————————— | —————————————————————————– |
| Open in Gitpod | 🚀 `https://github.com/near-examples/docs-examples` -> cross-contract-hello-as |



To try the project you will need to:

  1. Deploy the Hello NEAR contract. A compiled version is available in /test/aux_contracts/hello-near.wasm.
  2. Deploy the Cross Contract Example. A compiled version is available in /out/main.wasm.
  3. Initialize the cross-contract example using the account’s address of the hello-near contract deployed in (1).
  4. Call set_greeting and get_greeting in the cross-contract example.

Structure of the Project

The project is organized as follows:

  1. The smart contract code is in the /contract folder.
  2. The compiled smart contract can be found in /out/main.wasm.
  3. A compiled Hello NEAR contract can be found in /test/aux_contracts/hello-near.wasm.

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.









Testing

When writing smart contracts it is very important to test all methods exhaustively. In this
project you have two types of tests: unit and integration. Before digging in them,
go ahead and perform the tests present in the dApp through the command yarn test.

Unit test

Unit tests check individual functions in the smart contract. They are written in the
same language as the smart contract is. For AssemblyScript, you will find the test in the
__tests__ folder. If your contract is in Rust you will find the tests at the bottom of
each .rs file.

Since this example handles Cross-contract calls, in the unit tests we only test the initialize
method works. This is because unit tests are cannot test cross-contract calls.

Integration test

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 test/.






Moving Forward

A nice way to learn is by trying to expand a contract. Modify the cross contract example to use the guest-book
contract!. In this way, you can try to make a cross-contract call that attaches money. Remember to correctly handle the callback,
and to return the money to the user in case of error.

Scroll to Top