package
0.12.3
Repository: https://github.com/peteim/go-sdk.git
Documentation: pkg.go.dev

# Packages

No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author

# README

开发案例

AMOP 开发案例

AMOP(Advanced Messages Onchain Protocol)即链上信使协议,旨在为联盟链提供一个安全高效的消息信道,联盟链中的各个机构,只要部署了区块链节点,无论是共识节点还是观察节点,均可使用AMOP进行通讯,AMOP有如下优势:

  • 实时:AMOP消息不依赖区块链交易和共识,消息在节点间实时传输,延时在毫秒级。
  • 可靠:AMOP消息传输时,自动寻找区块链网络中所有可行的链路进行通讯,只要收发双方至少有一个链路可用,消息就保证可达。
  • 高效:AMOP消息结构简洁、处理逻辑高效,仅需少量cpu占用,能充分利用网络带宽。
  • 安全:AMOP的所有通讯链路使用SSL加密,加密算法可配置,支持身份认证机制。
  • 易用:使用AMOP时,无需在SDK做任何额外配置。

进一步了解 AMOP,请参考:链上信使协议

初始化

  • 搭建单群组四节点区块链网络,可参考:安装

单播案例

单播 指的是节点从监听相同 Topic 的多个订阅者中随机抽取一个订阅者转发消息,流程详细可参考 单播时序图

  • 启动 AMOP 消息订阅者:

    # go run examples/amop/sub/subscriber.go [endpoint] [topic]
    > go run examples/amop/sub/subscriber.go 127.0.0.1:20201 hello
    
      Subscriber success
      2020/08/11 21:21:50 received: hello, FISCO BCOS, I am unicast publisher! 0
      2020/08/11 21:21:52 received: hello, FISCO BCOS, I am unicast publisher! 1
      2020/08/11 21:21:54 received: hello, FISCO BCOS, I am unicast publisher! 2
      2020/08/11 21:21:56 received: hello, FISCO BCOS, I am unicast publisher! 3
    
  • 运行 AMOP 消息发布者:

    # go run examples/amop/unicast_pub/publisher.go [endpoint] [topic]
    > go run examples/amop/unicast_pub/publisher.go 127.0.0.1:20200 hello
    
      2020/08/11 21:21:50 publish message: hello, FISCO BCOS, I am unicast publisher! 0
      2020/08/11 21:21:52 publish message: hello, FISCO BCOS, I am unicast publisher! 1
      2020/08/11 21:21:54 publish message: hello, FISCO BCOS, I am unicast publisher! 2
      2020/08/11 21:21:56 publish message: hello, FISCO BCOS, I am unicast publisher! 3
    

多播案例

多播 指的是节点向监听相同 Topic 的所有订阅者转发消息。只要网络正常,即使没有监听 Topic 的订阅者,消息发布者也会收到节点消息推送成功的响应包,流程详细可参考 多播时序图

  • 启动 AMOP 消息订阅者:

    # go run examples/amop/sub/subscriber.go [endpoint] [topic]
    > go run examples/amop/sub/subscriber.go 127.0.0.1:20201 hello
    
      Subscriber success
      2020/08/11 21:23:54 received: hello, FISCO BCOS, I am broadcast publisher! 0
      2020/08/11 21:23:56 received: hello, FISCO BCOS, I am broadcast publisher! 1
      2020/08/11 21:23:58 received: hello, FISCO BCOS, I am broadcast publisher! 2
      2020/08/11 21:24:00 received: hello, FISCO BCOS, I am broadcast publisher! 3
    
  • 运行 AMOP 消息发布者:

    # go run examples/amop/broadcast_pub/publisher.go [endpoint] [topic]
    > go run examples/amop/broadcast_pub/publisher.go 127.0.0.1:20200 hello
    
      2020/08/11 21:23:54 publish message: hello, FISCO BCOS, I am broadcast publisher! 0
      2020/08/11 21:23:56 publish message: hello, FISCO BCOS, I am broadcast publisher! 1
      2020/08/11 21:23:58 publish message: hello, FISCO BCOS, I am broadcast publisher! 2
      2020/08/11 21:24:00 publish message: hello, FISCO BCOS, I am broadcast publisher! 3
    

身份验证单播案例

常规场景中,任何一个监听了某topic的接收者都能接受到发送者推送的消息。但在某些场景下,发送者只希望特定的接收者能接收到消息,不希望无关的接收者能任意的监听此topic。针对此类场景,FISCO BCOS 推出了 topic 认证功能。 认证功能是指对于特定的topic消息,只允许通过认证的接收者接收消息。详细请参考:Topic认证功能

  • 启动 AMOP 消息订阅者:

    # go run examples/amop_auth/sub/subscriber.go [endpoint] [topic]
    > go run examples/amop_auth/sub/subscriber.go 127.0.0.1:20201 hello
    
    Subscriber success
    2020/08/27 15:59:33 received: Hi, FISCO BCOS! 0
    2020/08/27 15:59:35 received: Hi, FISCO BCOS! 1
    2020/08/27 15:59:37 received: Hi, FISCO BCOS! 2
    2020/08/27 15:59:39 received: Hi, FISCO BCOS! 3
    
  • 运行 AMOP 消息发布者:

    # go run examples/amop_auth/unicast_pub/publisher.go [endpoint] [topic]
    > go run examples/amop_auth/unicast_pub/publisher.go 127.0.0.1:20200 hello
    
    publish topic success
    2020/08/27 15:59:33 publish message: Hi, FISCO BCOS! 0
    2020/08/27 15:59:35 publish message: Hi, FISCO BCOS! 1
    2020/08/27 15:59:37 publish message: Hi, FISCO BCOS! 2
    2020/08/27 15:59:39 publish message: Hi, FISCO BCOS! 3
    

身份验证多播案例

同理,FISCO BCOS 支持带身份验证的消息多播功能

  • 启动 AMOP 消息订阅者:

    # go run examples/amop_auth/sub/subscriber.go [endpoint] [topic]
    > go run examples/amop_auth/sub/subscriber.go 127.0.0.1:20201 hello
    
    Subscriber success
    2020/08/27 16:02:39 received: Hi, FISCO BCOS! 1
    2020/08/27 16:02:41 received: Hi, FISCO BCOS! 2
    2020/08/27 16:02:43 received: Hi, FISCO BCOS! 3
    2020/08/27 16:02:45 received: Hi, FISCO BCOS! 4
    
  • 运行 AMOP 消息发布者:

    # go run examples/amop_auth/broadcast_pub/publisher.go [endpoint] [topic] [publickKey...]
    > go run examples/amop_auth/broadcast_pub/publisher.go 127.0.0.1:20200 hello
    
    publish topic success
    2020/08/27 16:02:37 publish message: Hi, FISCO BCOS! 0
    2020/08/27 16:02:39 publish message: Hi, FISCO BCOS! 1
    2020/08/27 16:02:41 publish message: Hi, FISCO BCOS! 2
    2020/08/27 16:02:43 publish message: Hi, FISCO BCOS! 3
    2020/08/27 16:02:45 publish message: Hi, FISCO BCOS! 4
    

合约开发案例

在利用SDK进行项目开发时,对智能合约进行操作需要利用go-sdk的abigen工具将Solidity智能合约转换为Go文件代码。整体上主要包含六个流程:

  • 准备需要编译的智能合约
  • 配置好相应版本的solc编译器
  • 构建go-sdk的合约编译工具abigen
  • 编译生成go文件
  • 准备建立ssl连接需要的证书
  • 使用生成的go文件进行合约部署、调用

详细可参考:合约开发样例

使用同步接口调用合约案例

本案例使用 KVTableTest.sol 合约文件,部署该合约会创建一张 KV 表,表中有 "id","item_price,item_name" 三个字段以及 Set 和 Get 两个方法,有关该合约内容以及使用该合约编译生成 go 模板文件的详细说明可参考:KVTableTest样例

执行以下语句,部署和调用合约:

> go run examples/kvtable_test_sync/main.go

  -------------------starting deploy contract-----------------------
  contract address:  0x2b4173B18Fd0f88Fb5525f1b657e51c18aBf3D82
  transaction hash:  0xee1b9ddc38f15ec0cac55c7ee3edcc4c8a497b9f22db421dca8206febc8a1f33

  -------------------starting invoke Set to insert info-----------------------
  tx sent: 0x57452ea0a231c05a709644b1878179630b9ffb9bd51cad3d00446d3d95aeb9ed
  seted lines: 1

  -------------------starting invoke Get to query info-----------------------
  id: 100010001001, item_price: 6000, item_name: Laptop

使用异步接口调用合约案例

异步合约开发案例指的是通过 sol 合约文件编译、生成 go 模板文件之后,调用 go 文件中提供的异步接口部署合约、修改数据,可以极大的提高交易并发量。详细可阅读源码

执行以下语句,部署和调用合约:

> go run examples/kvtable_test_async/main.go

  -------------------starting deploy contract-----------------------
  transaction hash:  0x39ad5ed85f6493a4c73248fe65196a69316bbbfedebe87bbd5e108a703b74419
  contract address:  0x974f2B3f93a6eDeB1DCB915Fa58b6931E3229F13

  -------------------starting invoke Set to insert info-----------------------
  tx sent: 0x161835e0a379a085b1cd4f046b9668745ff09815142608e32dff6aa75dc26274
  seted lines: 1

  -------------------starting invoke Get to query info-----------------------
  id: 100010001001, item_price: 6000, item_name: Laptop