Swan Chain: Developing Smart Contracts with Go

Introduction to Swan Chain and Connecting to RPC

  • Exploring Swan Chain: An Overview of Its Blockchain Features

  • Setting up the Go Development Environment for Swan Chain

  • Connecting to a Swan Chain RPC Using Go

  • Fetching Basic Blockchain Data from Swan Chain

Setup your RPC URL

package main
// Shared RPC URL
const rpcURL = "https://rpc-testnet.swanchain.io" // Replace with your testnet's RPC URL
func TestConnectToTestnet(t *testing.T) {
	ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second)
	defer cancel()

	// Assuming rpcURL is defined as a constant or variable that contains your Ethereum testnet RPC URL
	client, err := ethclient.DialContext(ctx, rpcURL)
	if err != nil {
		t.Fatalf("Failed to connect to the testnet: %v", err)
	}
	defer client.Close()

	// Fetching the network ID
	networkID, err := client.NetworkID(ctx)
	if err != nil {
		t.Fatalf("Failed to get network ID: %v", err)
	}

	// Fetching the latest block number
	blockNumber, err := client.BlockNumber(ctx)
	if err != nil {
		t.Fatalf("Failed to get the latest block number: %v", err)
	}

	t.Logf("Network ID: %v", networkID)
	t.Logf("Latest block number: %d", blockNumber)
}

Output

=== RUN TestGetAccountBalance ethclient_test.go:64: Balance of account [0xA41c36BCd65bDbFB62FE93E3b7a28d290E63C1F7]: 0.045930 Ether

--- PASS: TestGetAccountBalance (0.21s)

Managing Wallets and Checking Balances

  • Creating and Managing Swan Chain Wallets with Go

  • Understanding and Checking Wallet Balances on Swan Chain

  • Handling Swan Chain's Native Cryptocurrency Units

// TestGetAccountBalance tests fetching the balance for a specific account
func TestGetAccountBalance(t *testing.T) {
   accountAddress := "0xA41c36BCd65bDbFB62FE93E3b7a28d290E63C1F7" // Replace with the account address

   ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second)
   defer cancel()

   client, err := ethclient.DialContext(ctx, rpcURL)
   if err != nil {
      t.Fatalf("Failed to connect to the testnet: %v", err)
   }
   defer client.Close()

   address := common.HexToAddress(accountAddress)
   balanceWei, err := client.BalanceAt(ctx, address, nil) // Balance in Wei
   if err != nil {
      t.Fatalf("Failed to get the account balance: %v", err)
   }

   // Convert balance from Wei (big.Int) to Ether (float64)
   balanceEther := new(big.Float).Quo(new(big.Float).SetInt(balanceWei), big.NewFloat(math.Pow10(18)))

   t.Logf("Balance of account [%s]: %f Ether", accountAddress, balanceEther)

}

Deploying a Smart Contract

  • Install and fund your MetaMask wallet

  • Write, compile, and deploy your first smart contract

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract MessageContract {
    string private message;

    function writeMessage(string calldata newMessage) public {
        message = newMessage;
    }

    function readMessage() public view returns (string memory) {
        return message;
    }
}
  • Click "Advanced Configurations" , and choose "London"

Writing and Reading from a Smart Contract

  • Setting up Go for Smart Contract Interaction

  • Writing Data to a Smart Contract on Swan Chain

  • Reading and Interpreting Data from a Smart Contra

Source code can be found here:

Last updated