diff --git a/docs/build/smart-contracts/getting-started/testnet-to-mainnet.mdx b/docs/build/smart-contracts/getting-started/testnet-to-mainnet.mdx new file mode 100644 index 000000000..f9043cbd7 --- /dev/null +++ b/docs/build/smart-contracts/getting-started/testnet-to-mainnet.mdx @@ -0,0 +1,86 @@ +--- +sidebar_position: 50 +title: 5. Move from Testnet to Mainnet +description: Move from Testnet to Miannet. +pagination_next: build/apps/dapp-frontend +--- + + + + + + + +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 Soroban 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//" +``` + +### 3. Deploy to Mainnet + +- Retrieve the compiled WASM from the GitHub release. +- Deploy the WASM to the Stellar mainnet using the Soroban CLI: + +```bash + stellar contract deploy --source-acount --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///attestations/sha256:` 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).