Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add testnet to mainnet tutorial #1102

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions docs/build/guides/testing/unit-tests.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ fn test() {
assert_eq!(client.increment(), 3);
}
```

Ref: https://github.com/stellar/soroban-examples/blob/main/increment/src/test.rs

:::tip
Expand All @@ -42,6 +43,7 @@ The Env created at the beginning of the test is not a simulation of the Soroban
It's a simple test, but it's a complete test. There's a full environment setup, used, and torn down in the test, and it happens fast. The Rust test harness runs all the tests for a contract in parallel and each will have its own isolated contract environment.

Most tests, even integration tests and fuzz tests, will look very similar to this unit test. They'll do four things:

1. Create an environment, the `Env`.
2. Register the contract(s) to be tested.
3. Invoke functions using a client.
Expand Down
86 changes: 86 additions & 0 deletions docs/build/smart-contracts/getting-started/testnet-to-mainnet.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
---
sidebar_position: 50
title: 5. Move from Testnet to Mainnet
description: Move from Testnet to Mainnet
pagination_next: build/apps/dapp-frontend
---

<head>
<meta charSet="utf-8" />
<meta property="og:title" content="Move from Testnet to Mainnet." />
<meta property="og:description" content="Move from Testnet to Mainnet." />
</head>

import Tabs from "@theme/Tabs";
import TabItem from "@theme/TabItem";
import { getPlatform } from "@site/src/helpers/getPlatform";

## Moving a Contract from Testnet to Mainnet

This guide outlines the process for securely deploying Stellar smart contracts from Testnet to Mainnet using GitHub Actions and Github Attestation for source code validation.

## Steps to Deploy

### 1. Set Up Contract Source Validation

- Configure your GitHub repository for automated source validation.
- Create a workflow file `.github/workflows/release.yml` in your repository.

Example workflow:

```yaml
name: Build and Release # arbitrary name
on:
push:
tags:
- "v*" # triggered whenever a new tag (prefixed with "v") is pushed

permissions: # required permissions
id-token: write
contents: write
attestations: write

jobs:
release-contract-a:
uses: stellar-expert/soroban-build-workflow/.github/workflows/release.yml@main
with:
release_name: ${{ github.ref_name }} # git tag as unique release name
release_description: "Contract release" # text to attach to the release
relative_path: '["src/my-awesome-contract"]' # relative contract path
package: "my-awesome-contract" # package name to build
make_target: "build-dependencies" # make target to invoke
secrets: # authentication tokens will be automatically created by GitHub
release_token: ${{ secrets.GITHUB_TOKEN }} # don't modify this line
```

### 2. Compile and Validate Contract

- Trigger the workflow by pushing a new tag (e.g., `v1.0`).
- The workflow will:
- Compile the contract to Wasm.
- Publish a GitHub release with build artifacts.
- Generate a GitHub attestation, linking the Wasm to the source code.

```bash
stellar contract build \
--meta name="Contract Name" \
--meta description="Descripton of the contract"
--meta source="https://api.github.com/repos/<user_name>/<repo_name>"
```

### 3. Deploy to Mainnet

- Retrieve the compiled Wasm from the GitHub release.
- Deploy the Wasm to the Stellar Mainnet using the Stellar CLI:

```bash
stellar contract deploy --source-acount <source-account> --wasm <path-to-wasm> --network mainnet
```

### 4. Verify Contract Authenticity

Use the GitHub API to confirm the Wasm's source: Retrieve attestation via: `https://api.github.com/repos/<user_name>/<repo_name>/attestations/sha256:<wasm_hash>` Ensure the source code and commit hash match the deployed contract.

## Up next

Ready to turn these deployed contracts into a simple web application? Head over to the [Build a Dapp Frontend section](../../apps/dapp-frontend.mdx).
Loading