扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
Go语言与区块链学科可以从事区块链项目开发和企业服务器开发及游戏服务器开发。
成都创新互联公司是专业的徽县网站建设公司,徽县接单;提供成都网站设计、成都做网站,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行徽县网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!
(比如比特币
智能合约调用是实现一个 DApp 的关键,一个完整的 DApp 包括前端、后端、智能合约及区块 链系统,智能合约的调用是连接区块链与前后端的关键。
我们先来了解一下智能合约调用的基础原理。智能合约运行在以太坊节点的 EVM 中。因此要 想调用合约必须要访问某个节点。
以后端程序为例,后端服务若想连接节点有两种可能,一种是双 方在同一主机,此时后端连接节点可以采用 本地 IPC(Inter-Process Communication,进 程间通信)机制,也可以采用 RPC(Remote Procedure Call,远程过程调用)机制;另 一种情况是双方不在同一台主机,此时只能采用 RPC 机制进行通信。
提到 RPC, 读者应该对 Geth 启动参数有点印象,Geth 启动时可以选择开启 RPC 服务,对应的 默认服务端口是 8545。。
接着,我们来了解一下智能合约运行的过程。
智能合约的运行过程是后端服务连接某节点,将 智能合约的调用(交易)发送给节点,节点在验证了交易的合法性后进行全网广播,被矿工打包到 区块中代表此交易得到确认,至此交易才算完成。
就像数据库一样,每个区块链平台都会提供主流 开发语言的 SDK(Software Development Kit,软件开发工具包),由于 Geth 本身就是用 Go 语言 编写的,因此若想使用 Go 语言连接节点、发交易,直接在工程内导入 go-ethereum(Geth 源码) 包就可以了,剩下的问题就是流程和 API 的事情了。
总结一下,智能合约被调用的两个关键点是节点和 SDK。
由于 IPC 要求后端与节点必须在同一主机,所以很多时候开发者都会采用 RPC 模式。除了 RPC,以太坊也为开发者提供了 json- rpc 接口,本文就不展开讨论了。
接下来介绍如何使用 Go 语言,借助 go-ethereum 源码库来实现智能合约的调用。这是有固定 步骤的,我们先来说一下总体步骤,以下面的合约为例。
步骤 01:编译合约,获取合约 ABI(Application Binary Interface,应用二进制接口)。 单击【ABI】按钮拷贝合约 ABI 信息,将其粘贴到文件 calldemo.abi 中(可使用 Go 语言IDE 创建该文件,文件名可自定义,后缀最好使用 abi)。
最好能将 calldemo.abi 单独保存在一个目录下,输入“ls”命令只能看到 calldemo.abi 文件,参 考效果如下:
步骤 02:获得合约地址。注意要将合约部署到 Geth 节点。因此 Environment 选择为 Web3 Provider。
在【Environment】选项框中选择“Web3 Provider”,然后单击【Deploy】按钮。
部署后,获得合约地址为:0xa09209c28AEf59a4653b905792a9a910E78E7407。
步骤 03:利用 abigen 工具(Geth 工具包内的可执行程序)编译智能合约为 Go 代码。abigen 工具的作用是将 abi 文件转换为 Go 代码,命令如下:
其中各参数的含义如下。 (1)abi:是指定传入的 abi 文件。 (2)type:是指定输出文件中的基本结构类型。 (3)pkg:指定输出文件 package 名称。 (4)out:指定输出文件名。 执行后,将在代码目录下看到 funcdemo.go 文件,读者可以打开该文件欣赏一下,注意不要修改它。
步骤 04:创建 main.go,填入如下代码。 注意代码中 HexToAddress 函数内要传入该合约部署后的地址,此地址在步骤 01 中获得。
步骤 04:设置 go mod,以便工程自动识别。
前面有所提及,若要使用 Go 语言调用智能合约,需要下载 go-ethereum 工程,可以使用下面 的指令:
该指令会自动将 go-ethereum 下载到“$GOPATH/src/github.com/ethereum/go-ethereum”,这样还算 不错。不过,Go 语言自 1.11 版本后,增加了 module 管理工程的模式。只要设置好了 go mod,下载 依赖工程的事情就不必关心了。
接下来设置 module 生效和 GOPROXY,命令如下:
在项目工程内,执行初始化,calldemo 可以自定义名称。
步骤 05:运行代码。执行代码,将看到下面的效果,以及最终输出的 2020。
上述输出信息中,可以看到 Go 语言会自动下载依赖文件,这就是 go mod 的神奇之处。看到 2020,相信读者也知道运行结果是正确的了。
Fabric区块链开发详解,本课程面向初学者,内容即包含Hyperledger Fabric的身份证书与MSP服务、权限策略、通道配置与启动、链码通信接口等核心概念,也包含Fabric网络设计、链码与应用开发的操作实践,是学习Fabric区块链开发的最佳选择。
给你个免费区块链博客看看。
区块链是一种数据存储的结构,通过GO语言可以方便的创建一个区块链
直接上代码
1:区块接口和方法
2:创建区块链类和方法
最后测试方法:
测试结果:
PS F:goblock go run main.go
index: 0
times: 1640488480
PrevHash:
Hash: a91a1da064bd40523be90634584c7c6a23bef44390f855ce8ff671d48b8d9e06
data: 创世区块
-----------------------------------
index: 1
times: 1640488481
PrevHash: a91a1da064bd40523be90634584c7c6a23bef44390f855ce8ff671d48b8d9e06
Hash: 28b659f29d8c8564adc23861e2fa2291dd23d14d672f080fa80ab70dcde7c059
data: 交易记录:1
-----------------------------------
index: 2
times: 1640488482
PrevHash: 28b659f29d8c8564adc23861e2fa2291dd23d14d672f080fa80ab70dcde7c059
Hash: 12b668c4d98cade9d12d651598d302663bcf64435a4e6ed1987cd1d730f324ea
data: 交易记录:2
-----------------------------------
index: 3
times: 1640488483
PrevHash: 12b668c4d98cade9d12d651598d302663bcf64435a4e6ed1987cd1d730f324ea
Hash: c420f63c9a8f73672f23b353f5fd752dee644e0f764740d090319dacccfa7be6
data: 交易记录:3
-----------------------------------
index: 4
times: 1640488484
PrevHash: c420f63c9a8f73672f23b353f5fd752dee644e0f764740d090319dacccfa7be6
Hash: ff37f186a13a4871c398869a259f288e4f504c7adcb613172fc7fbfba6488a45
data: 交易记录:4
-----------------------------------
index: 5
times: 1640488485
PrevHash: ff37f186a13a4871c398869a259f288e4f504c7adcb613172fc7fbfba6488a45
Hash: 0911b845ed602ab4f9c726b3d5dacea6c388c9e0c28db60a4aad62d94720f860
data: 交易记录:5
-----------------------------------
index: 6
times: 1640488486
PrevHash: 0911b845ed602ab4f9c726b3d5dacea6c388c9e0c28db60a4aad62d94720f860
Hash: 8f0f744d190bf204b4441900df2412d99d613bc030ab607b736c99bf1da451b5
data: 交易记录:6
-----------------------------------
index: 7
times: 1640488487
PrevHash: 8f0f744d190bf204b4441900df2412d99d613bc030ab607b736c99bf1da451b5
Hash: 3f8181b0570d615bfd0cae38f38813a46413d2ef8f40fc0bd312b7ff93fa57c5
data: 交易记录:7
-----------------------------------
index: 8
times: 1640488488
PrevHash: 3f8181b0570d615bfd0cae38f38813a46413d2ef8f40fc0bd312b7ff93fa57c5
Hash: 17ca30a31359c73ecd9b7e43319e0736d0d3043f94e541e7b9e19914f192b8ea
data: 交易记录:8
-----------------------------------
index: 9
times: 1640488489
PrevHash: 17ca30a31359c73ecd9b7e43319e0736d0d3043f94e541e7b9e19914f192b8ea
Hash: becffe7bb98f299739f6205bf16996e73315b5b752765d36ba7fc050de4abe1c
data: 交易记录:9
-----------------------------------
区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。所谓共识机制是区块链系统中实现不同节点之间建立信任、获取权益的数学算法
区块链(Blockchain)是比特币的一个重要概念,它本质上是一个去中心化的数据库,同时作为比特币的底层技术。区块链是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了一次比特币网络交易的信息,用于验证其信息的有效性(防伪)和生成下一个区块。
狭义来讲,区块链是一种按照时间顺序将数据区块以顺序相连的方式组合成的一种链式数据结构,并以密码学方式保证的不可篡改和不可伪造的分布式账本。
广义来讲,区块链技术是利用块链式数据结构来验证与存储数据、利用分布式节点共识算法来生成和更新数据、利用密码学的方式保证数据传输和访问的安全、利用由自动化脚本代码组成的智能合约来编程和操作数据的一种全新的分布式基础架构与计算方式
GO语言+区块链培训课程:
1、 Go有什么优势
Go的优势
1:性能
2:语言性能很重要
3:开发者效率不要过于创新
4:并发性通道
5:快速的编译时间
6:打造团队的能力
7:强大的生态系统
8:GOFMT,强制代码格式
9:gRPC 和 Protocol Buffers
可直接编译成机器码,不依赖其他库,glibc的版本有一定要求,部署就是扔一个文件上去就完成了。
静态类型语言,但是有动态语言的感觉,静态类型的语言就是可以在编译的时候检查出来隐藏的大多数问题,动态语言的感觉就是有很多的包可以使用,写起来的效率很高。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流