Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Golang menulis Ethereum

Golang menulis Ethereum

WBOY
WBOYasal
2023-05-14 14:00:08721semak imbas

Teknologi Blockchain kini telah berkembang menjadi paradigma komputer baharu, dan Ethereum ialah salah satu platform blockchain yang telah menarik perhatian ramai. Kelebihan Ethereum dalam kontrak pintar telah menarik lebih banyak perhatian daripada industri, dan keterbukaan, ketelusan dan keselamatannya juga telah menyebabkan semakin ramai pembangun memilih untuk membangun pada platform ini.

Pada masa yang sama, Golang, sebagai bahasa pengaturcaraan yang pantas dan cekap, juga sentiasa mengembangkan kawasan aplikasinya. Apakah kelebihan menggunakan Golang dalam pembangunan Ethereum? Butiran akan diperkenalkan seterusnya.

1. Kelebihan Golang

Kelebihan Golang terletak pada fungsinya yang kaya, kecekapan pembangunan yang tinggi, kelajuan larian yang pantas dan keselarasan yang kukuh.

  1. Fungsi yang kaya

Golang mempunyai fungsi berkaitan rangkaian terbina dalam, termasuk HTTP, TCP dan DNS, dsb., menjadikannya mudah untuk membina aplikasi rangkaian.

  1. Kecekapan pembangunan yang tinggi

Golang mempunyai struktur tatabahasa yang ringkas dan jelas, yang direka untuk memudahkan pembangunan. Pada masa yang sama, Golang mempunyai pengurusan memori automatik dan fungsi pengumpulan sampah, yang boleh mengurangkan beban kerja pengaturcara.

  1. Berlari pantas

Golang dipanggil "bahasa tersusun" dan boleh menyemak ralat kod semasa proses penyusunan. Selain itu, Golang menggunakan kompilasi statik, yang boleh disusun terus ke dalam kod mesin dan mempunyai prestasi yang lebih baik daripada bahasa yang ditafsirkan.

  1. Konkurensi yang kukuh

Golang mempunyai goroutine dan saluran terbina dalam, yang boleh mencapai serentak berbilang tugas dengan cekap dan meningkatkan kecekapan pelaksanaan kod tersebut.

2. Menggunakan Golang dalam Ethereum

  1. Ethereum dan Solidity

Ethereum ialah platform sistem teragih berdasarkan teknologi blockchain , yang ciri utamanya ialah desentralisasi, membenarkan kontrak pintar dan model tanpa amanah. Pada Ethereum, kontrak pintar ditulis menggunakan bahasa Solidity.

Solidity ialah bahasa pengaturcaraan berorientasikan kontrak yang serupa dengan bahasa pengaturcaraan sedia ada dan menyokong ciri seperti berorientasikan objek dan warisan, tetapi tumpuannya adalah pada penulisan kontrak pintar. Solidity ialah bahasa pengaturcaraan untuk Mesin Maya Ethereum.

  1. Alat Berkaitan

2.1 Rangka Kerja Truffle

Truffle ialah alat pembangunan berdasarkan Node.js untuk interaksi dan risikan dengan Kontrak Pembangunan Ethereum. Truffle boleh menulis kontrak pintar melalui Golang dan menyusunnya ke dalam kod bait Solidity. Dengan Truffle, pembangun boleh membangun dan menguji pada rangkaian tempatan mereka.

2.2 geth

geth ialah pelanggan rasmi Ethereum dan juga boleh dibangunkan menggunakan Golang. Melalui geth, pembangun boleh mengakses rangkaian Ethereum dan menulis kontrak pintar dan aplikasi Dapp.

  1. Golang untuk menulis kontrak pintar

Golang menyediakan pelbagai cara untuk menulis kontrak pintar Ethereum. Antaranya, dua cara yang paling biasa adalah dengan menggunakan perpustakaan go-ethereum atau Rangka Kerja Truffle.

3.1 go-ethereum

go-ethereum ialah pelanggan Ethereum yang ditulis dalam Golang. Pembangun boleh menulis kontrak pintar menggunakan bahasa pengaturcaraan dan alatan yang disediakan oleh go-ethereum. go-ethereum bertanggungjawab untuk menyusun secara langsung kontrak pintar bertulis untuk dijalankan pada Mesin Maya Ethereum.

3.2 Solidity bytecode

Solidity bytecode ialah bentuk bytecode kontrak pintar Ethereum. Kod bait kepekatan boleh disusun menggunakan Golang dan dimuat naik ke rangkaian Ethereum sebagai sebahagian daripada kontrak pintar.

3. Kes kontrak pintar Ethereum

Berikut ialah kes kontrak pintar Ethereum yang ringkas, ditulis menggunakan Golang dan Solidity:

Contoh kod:

pragma solidity ^0.4.24;

contract SimpleContract {
    uint public data;

    function set(uint x) public {
        data = x;
    }

    function get() public constant returns(uint x) {
        return data;
    }
}

Kontrak pintar termasuk kontrak pintar yang dipanggil "SimpleContract" yang boleh menetapkan dan mendapatkan data.

Kompilkan kontrak pintar ke dalam kod bait Solidity melalui Truffle dan muat naiknya ke rangkaian Ethereum Kodnya adalah seperti berikut:

truffle compile
truffle deploy

Gunakan Golang untuk berinteraksi dengan kontrak pintar :

package main

import (
    "context"
    "crypto/ecdsa"
    "fmt"
    "log"
    "math/big"

    "github.com/ethereum/go-ethereum/accounts/abi/bind"
    "github.com/ethereum/go-ethereum/common"
    "github.com/ethereum/go-ethereum/core/types"
    "github.com/ethereum/go-ethereum/crypto"
    "github.com/ethereum/go-ethereum/ethclient"

    simplecontract "path/to/contract" //设置路径
)

func main() {
    client, err := ethclient.Dial("http://localhost:8545") //以太坊网络地址
    if err != nil {
        log.Fatalf("Failed to connect to the Ethereum client: %v", err)
    }

    privateKey, err := crypto.HexToECDSA("YOUR_PRIVATE_KEY")//私钥
    if err != nil {
        log.Fatalf("Failed to parse private key: %v", err)
    }

    publicKey := privateKey.Public()
    publicKeyECDSA, ok := publicKey.(*ecdsa.PublicKey)
    if !ok {
        log.Fatalf("Failed to cast public key to ECDSA: %v", err)
    }

    fromAddress := crypto.PubkeyToAddress(*publicKeyECDSA)
    nonce, err := client.PendingNonceAt(context.Background(), fromAddress)
    if err != nil {
        log.Fatalf("Failed to retrieve account nonce: %v", err)
    }

    gasPrice, err := client.SuggestGasPrice(context.Background())
    if err != nil {
        log.Fatalf("Failed to retrieve suggested gas price: %v", err)
    }

    auth := bind.NewKeyedTransactor(privateKey)
    auth.Nonce = big.NewInt(int64(nonce))
    auth.Value = big.NewInt(0)   
    auth.GasLimit = uint64(30000) 
    auth.GasPrice = gasPrice 

    address := common.HexToAddress("CONTRACT_ADDRESS")//智能合约地址
    instance, err := simplecontract.NewSimpleContract(address, client)
    if err != nil {
        log.Fatalf("Failed to instantiate a contract: %v", err)
    }

    input := "Set Data"
    result, err := instance.Set(auth, input)
    if err != nil {
        log.Fatalf("Failed to call the Set function: %v", err)
    }

    fmt.Printf("Set Data Transaction Hash ID: %v", result.Hash().Hex())

    retrievedData, err := instance.GetData(&bind.CallOpts{})
    if err != nil {
        log.Fatalf("Failed to retrieve the stored data: %v", err)
    }

    fmt.Printf("Retrieved Data: %v", retrievedData)
}

Program Golang ini akan berinteraksi dengan kontrak pintar "SimpleContract" pada rangkaian Ethereum: simpan "Set Data" ke dalam data dan dapatkan semula data yang disimpan daripada data.

Ringkasan:

Sebagai bahasa pengaturcaraan yang pantas dan cekap, Golang mempunyai kelebihan hebat dalam menggabungkan dengan Ethereum. Dalam pembangunan Ethereum, Golang boleh meningkatkan kecekapan pembangunan, kelajuan larian dan serentak. Bagi pembangun, menggunakan Golang untuk menulis kontrak pintar Ethereum boleh membawa kepada pembangunan yang lebih pantas dan cekap.

Atas ialah kandungan terperinci Golang menulis Ethereum. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn