当前位置:   article > 正文

go语言--区块链学习(三)_go语言区块链框架

go语言区块链框架

温馨跳转链接:模块一:go语言–区块链学习(一)-CSDN博客
温馨跳转链接:模块二:go语言–区块链学习(二)-CSDN博客

模块三:以太坊

想要深入学习智能合约的小伙伴,一定不要错过的视频:

javascript版:(32 小时最全课程)区块链,智能合约 & 全栈 Web3 开发_哔哩哔哩_bilibili

python版:【公开课】Python区块链开发教程 Solidity web3 区块链和智能合约(中英字幕)_哔哩哔哩_bilibili

3.1 智能合约

3.1.1 普通合约

普通合约是指双方或多方在法律框架下,通过书面形式或口头协议达成的一种约定。它是一种约束双方行为的法律文件,规定了合同期限、支付方式、责任承担、违约处理等细节问题。普通合约通常需要法院或仲裁机构的介入来解决争议。

3.1.1.1 特点
  1. 法律约束力:普通合约是在法律框架下达成的约定,具有法律约束力。
  2. 需要履行:普通合约规定了双方的权利和义务,需要各方按照约定履行。
  3. 可变性:普通合约可以通过双方协商修改,但必须符合法律规定。
  4. 争议解决:普通合约在履行过程中可能出现争议,需要法院或仲裁机构介入解决。

普通合约广泛应用于商业活动、房地产交易、雇佣关系等各个领域。它为各方提供了一种明确的约定,保障了各方的权益,并促进了交易的顺利进行。

3.1.2 智能合约

智能合约简单来说就是部署在去中心化区块链上的一个合约或者一组指令,当这个合约或者这组指令被部署以后,它就不能被改变了,它会自动执行,每个人都可以看到合约中的条款。更深层次的理解是,这些代码会被去中心化地执行。

3.1.2.1 特点
  1. 自动执行:一旦满足了预设的条件,智能合约将自动执行相关的操作,无需人为干预。
  2. 透明性:智能合约的代码和执行结果都会被保存在区块链上,任何人都可以查看和验证。
  3. 不可篡改性:一旦部署到区块链上,智能合约的代码是不可更改的,确保了交易的可信性和安全性。
  4. 去中心化:智能合约在区块链网络上的节点上执行,没有单一的控制机构,参与者共同验证和维护合约的执行。

智能合约可以应用于各种领域,如数字货币交易、供应链管理、投票系统等。它提供了一种安全、高效、可信赖的方式来进行交易和合作,减少了中间环节和风险,提升了交易的效率和可靠性。

3.1.2.2 步骤
  1. 定义合约:首先,开发者需要定义智能合约的结构、功能和逻辑。这涉及到确定合约的变量、函数和事件,以及定义它们之间的关系和交互方式。
  2. 编写代码:根据合约的定义,开发者使用合约编程语言(如Solidity)编写智能合约的代码。代码中包含了合约的变量、函数和事件的具体实现。
  3. 编译合约:编写完智能合约代码后,开发者需要使用合约编译器将其编译成字节码。编译过程会检查代码的语法和逻辑错误,并生成可在区块链上执行的字节码文件。
  4. 部署合约:部署合约是将合约字节码上传到区块链网络,并在区块链上创建合约实例的过程。开发者需要选择适当的区块链网络,并支付一定的交易费用来完成合约的部署。
  5. 调用合约:一旦合约被部署到区块链上,其他用户可以通过调用合约的函数与之交互。调用合约需要构造交易并发送到区块链网络,以执行合约中定义的相应操作。
  6. 执行合约:当交易被打包进区块并被确认后,合约的函数将被执行。合约的执行结果会被记录在区块链上,并对所有参与者可见。
  7. 合约状态更新:合约的执行可能会导致合约的状态发生变化,例如更新合约的变量值或触发特定的事件。这些状态变化会被写入区块链,并对其他人可见。

智能合约的步骤可以根据具体的区块链平台和开发工具有所不同,上述步骤仅为一般性的概述。开发者需要熟悉所使用的具体平台和工具的文档和指南,以确保正确地编写、部署和调用智能合约。

3.1.2.3 应用

DApp(去中心化应用):常见的DApp包括去中心化金融(DeFi)应用、数字身份验证应用、去中心化交易所(DEX)、游戏等。随着区块链技术的不断发展,DApp将继续在各个领域推动创新,并改变传统的中心化应用模式。

3.2 以太坊介绍

3.2.1 什么是以太坊

以太坊(Ethereum)是一种基于区块链技术的开源平台,旨在构建和运行智能合约和去中心化应用程序(DApps)。以太坊于2015年由Vitalik Buterin等人提出,并于同年上线。

以太坊的核心是一个分布式计算平台,它使用以太坊虚拟机(Ethereum Virtual Machine,EVM)来执行智能合约。智能合约是一种自动执行的计算机程序,可以在去中心化网络上进行部署和操作。以太坊的设计目标是提供一个灵活且高度可编程的平台,使开发者能够构建各种类型的应用程序,而不仅限于传统的货币交易。

以太坊的原生加密货币称为以太币(Ether,简称ETH),它是以太坊网络中的内部计算资源,并且被用作支付交易费用和奖励矿工的费用。以太币也是其他基于以太坊平台上的代币发行的基础。

以太坊的特点包括具有可扩展性、安全性和去中心化的特性。它提供了一个开放的平台,使开发者能够构建基于区块链的应用程序,并通过智能合约实现自动化和可编程的功能。

3.2.2 官网地址

英文版:Home | ethereum.org

中文版:首页 | ethereum.org

3.2.3 浏览器交易地址

Ethereum (ETH) Blockchain Explorer (etherscan.io)

以太坊环境准备

3.2.4 私有链、公有链、联盟链

私有链(Private Chain)是指基于区块链技术构建的仅限于特定组织或个人使用的链。

特点:私有链的参与者和节点都由同一个实体控制,因此可以更好地控制链的权限、隐私性和性能。

应用:私有链通常用于企业内部的区块链解决方案,旨在提高效率、安全性和数据保密性。

公有链(Public Chain)是指开放给任何人参与的区块链网络。

特点:公有链的参与者可以匿名,任何人都可以创建账号、交易和参与共识过程。公有链的特点是去中心化和透明,所有的交易和操作都可以被公开验证。

应用:比特币和以太坊就是典型的公有链。

联盟链(Consortium Chain)是介于私有链和公有链之间的一种形式。

特点:它由一组特定的组织或实体共同管理和控制,这些组织之间达成共识并共享资源。

应用:联盟链通常用于跨组织合作的场景,如供应链管理、金融行业等,可以提供更高的效率、可扩展性和安全性。

3.2.5 比特币和以太坊

区别:

  1. 目的和设计思路不同:比特币最初是作为一种数字货币而设计的,旨在解决中心化货币系统中的问题,如中心化的发行机构、通胀等。以太坊则是为了实现智能合约而设计的,它不仅可以实现货币的交易,还可以创建分布式应用程序(DApp)和自动化的智能合约。

  2. 区块时间和容量不同:比特币的区块时间为10分钟,而以太坊的区块时间为15秒。这意味着比特币网络处理交易速度较慢,而以太坊网络处理交易速度较快。此外,比特币区块容量为1MB,而以太坊没有固定的区块容量限制。

  3. 挖矿算法不同:比特币使用SHA-256算法进行挖矿,而以太坊使用Ethash算法进行挖矿。这两种算法都需要大量的计算能力来完成,但是Ethash相对于SHA-256更加抗ASIC,因此以太坊网络上有更多的GPU挖矿。

  4. 智能合约功能不同:以太坊的智能合约功能比比特币更加强大和灵活。以太坊的智能合约可以处理复杂的逻辑和条件,如创建新的代币、触发交易、实现去中心化金融应用等。与此同时,比特币只支持基本的交易类型和脚本语言。

3.3 metamask钱包的使用

MetaMask安装及使用(全网最全!!!)_metamask如何安装-CSDN博客

3.4 remix的使用

Remix-Desktop安装-CSDN博客

3.5 solidity基础

Solidity基础(详细易懂!!!)_solidity需要什么基础-CSDN博客


因为博主近期忙于学习其他知识,以下两个知识点,只给出大体方向,实在抱歉!!!

如果可以的话,也许以后可以补上。

如果只是单纯的以太坊学习,做智能合约开发,而不是使用go语言去和以太坊做一个交互,也可以使用web3.js(主流)去做交互,具体的学习方式请看:

javascript版:(32 小时最全课程)区块链,智能合约 & 全栈 Web3 开发_哔哩哔哩_bilibili

3.6 go调用以太坊

要使用Go语言调用以太坊,你可以使用以太坊的官方Go语言客户端库——以太坊Go客户端(geth)提供的API。以下是一个简单的步骤指南:

  1. 安装以太坊Go客户端(geth):首先,你需要安装以太坊Go客户端。你可以从以太坊官方网站获取适合你操作系统的二进制文件,或者通过源码自行编译。

  2. 启动以太坊节点:运行以太坊Go客户端以启动一个本地以太坊节点。你可以使用以下命令:

    geth --rpc
    
    • 1

    这将启动一个带有RPC(Remote Procedure Call,远程过程调用)接口的本地以太坊节点。

  3. 使用Go语言编写代码:在你的Go项目中导入以太坊Go客户端库,并使用其提供的API与以太坊节点进行通信。你可以使用go-ethereum包,该包提供了与以太坊节点进行交互的API。你可以使用go get命令安装该包:

    go get -u github.com/ethereum/go-ethereum
    
    • 1
  4. 编写调用代码:在Go项目中编写代码,使用以太坊Go客户端库提供的API执行各种操作,如连接到以太坊节点、发送交易、查询区块链数据等。

    以下是一个简单的示例代码,用于连接到本地以太坊节点并获取最新的区块号:

    package main
    
    import (
        "context"
        "fmt"
        "log"
    
        "github.com/ethereum/go-ethereum/ethclient"
    )
    
    func main() {
        // 连接到本地以太坊节点
        client, err := ethclient.Dial("http://localhost:8545")
        if err != nil {
            log.Fatal(err)
        }
    
        // 获取最新的区块号
        blockNumber, err := client.BlockNumber(context.Background())
        if err != nil {
            log.Fatal(err)
        }
    
        fmt.Println("Latest block number:", blockNumber)
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
  5. 运行代码:运行你的Go程序,确保以太坊节点在运行并监听默认的RPC端口(8545)。

这只是一个简单的示例,你可以根据你的需求进一步扩展代码以执行其他操作,如发送交易、查询账户余额等。记得在实际项目中处理错误,并确保在与以太坊节点进行交互时使用安全的方法。

3.7 go调用智能合约

要在Go中调用以太坊智能合约,你需要使用以太坊Go客户端库提供的API来与以太坊节点进行交互,并使用合适的工具来与智能合约进行通信。以下是一个简单的步骤指南:

  1. 编写智能合约:首先,你需要编写你的智能合约。你可以使用Solidity语言编写合约,并将其编译为以太坊虚拟机(EVM)可执行的字节码。

  2. 部署智能合约:将智能合约部署到以太坊区块链上。你可以使用工具如Truffle、Remix或web3.js来部署合约。确保在部署合约时记录合约地址,因为你将在Go代码中需要它。

  3. 编写Go代码:在你的Go项目中导入以太坊Go客户端库,并使用其提供的API与以太坊节点进行通信。另外,你需要使用以太坊智能合约绑定工具(如abigen)生成智能合约的Go绑定代码,以便在Go中调用智能合约的函数。

    你可以使用以下命令安装abigen工具:

    go get -u github.com/ethereum/go-ethereum
    
    • 1
  4. 生成智能合约绑定代码:使用abigen工具从智能合约的Solidity源文件中生成Go绑定代码。假设你的智能合约文件为MyContract.sol,使用以下命令生成Go绑定代码:

    abigen --sol MyContract.sol --pkg main --out MyContract.go
    
    • 1
  5. 编写调用代码:在Go项目中编写代码,使用生成的智能合约绑定代码调用智能合约的函数。确保在调用合约函数时传递正确的参数,并处理返回的结果或事件。

    以下是一个简单的示例代码,用于调用智能合约的一个函数:

    package main
    
    import (
        "context"
        "fmt"
        "log"
        "math/big"
    
        "github.com/ethereum/go-ethereum/common"
        "github.com/ethereum/go-ethereum/ethclient"
        "path/to/your/contract" // 导入生成的智能合约绑定代码
    )
    
    func main() {
        // 连接到本地以太坊节点
        client, err := ethclient.Dial("http://localhost:8545")
        if err != nil {
            log.Fatal(err)
        }
    
        // 使用合约地址和客户端实例创建智能合约对象
        contractAddress := common.HexToAddress("0x123456...")
        instance, err := contract.NewMyContract(contractAddress, client)
        if err != nil {
            log.Fatal(err)
        }
    
        // 调用智能合约的一个函数
        result, err := instance.MyFunction(context.Background(), big.NewInt(123))
        if err != nil {
            log.Fatal(err)
        }
    
        fmt.Println("Result:", result)
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
  6. 运行代码:运行你的Go程序,确保以太坊节点在运行并监听默认的RPC端口(8545),并且智能合约已经部署到区块链上。

这只是一个简单的示例,你可以根据你的智能合约和业务逻辑进一步扩展代码以执行其他操作。在实际项目中,确保处理错误,并且在与智能合约交互时使用安全的方法。

感谢您的观看,go语言–区块链学习(四)Hyperledger Fabric的部分,有生之年,博主应该会更新的。。。

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号