当前位置: 首页 > news >正文

FISCO BCOS Gin调用WeBASE-Front接口发请求

前提环境

需要提前搭建好一条FISCO-BCOS链和WeBASE-Front中间件

访问WeBase-Front

部署案例合约 

pragma solidity>=0.4.24 <0.6.11;contract HelloWorld {string name;constructor() public {name = "Hello, World!";}function get() public view returns (string memory) {return name;}function set(string memory n) public {name = n;}
}

获取合约地址、合约名称和合约ABI 

使用GoLand创建一个工程

请求工具类 

package utilimport ("bytes""encoding/json""fmt""io/ioutil""net/http"
)type RequestData struct {GroupId         string        `json:"groupId"`User            string        `json:"user"`ContractName    string        `json:"contractName"`Version         string        `json:"version"`FuncName        string        `json:"funcName"`FuncParam       []interface{} `json:"funcParam"`ContractAddress string        `json:"contractAddress"`ContractAbi     []interface{} `json:"contractAbi"`UseAes          bool          `json:"useAes"`UseCns          bool          `json:"useCns"`CnsName         string        `json:"cnsName"`
}var (contractAbi     = `[{"constant":false,"inputs":[{"name":"n","type":"string"}],"name":"set","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"get","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"}]`contractName    = "HelloWorld"contractAddress = "0x3dd7ab770f48c8c828c3b7bd8b2e152764bb3a6c"transUrl        = "http://192.168.200.147:5002/WeBASE-Front/trans/handle"ownerAddress    = "0x7bccfc8f2eb60ade058b1427d2bfbb2bb8c37c2a"
)func WriteContract(userAddress, funcName string, funcParam []interface{}) (map[string]interface{}, error) {// 调用 CommonReq 函数发送请求并获取响应result, err := CommonReq(userAddress, funcName, funcParam)if err != nil {return nil, err}// 解析返回的 JSON 数据var response map[string]interface{}err = json.Unmarshal([]byte(result), &response)if err != nil {return nil, err}// 判断交易是否成功if code, ok := response["code"].(float64); ok && code > 0 {// 失败时打印响应并返回错误fmt.Println(response)return nil, fmt.Errorf("transaction failed with code: %d", int(code))}// 检查状态是否为 "0x0"(表示成功)status, ok := response["status"].(string)if !ok || status != "0x0" {// 失败时打印响应并返回错误fmt.Println(response)return nil, fmt.Errorf("transaction failed with status: %s", status)}// 返回成功的响应数据return response, nil
}func OwnerWriteContract(funcName string, funcParam []interface{}) (map[string]interface{}, error) {return WriteContract(ownerAddress, funcName, funcParam)
}func CommonReq(userAddress, funcName string, funcParam []interface{}) (string, error) {// 解析合约的 ABIvar abiJSON []interface{}err := json.Unmarshal([]byte(contractAbi), &abiJSON)if err != nil {return "", fmt.Errorf("error parsing ABI: %v", err)}// 构建请求数据data := RequestData{GroupId:         "1",User:            userAddress,ContractName:    contractName,Version:         "",FuncName:        funcName,FuncParam:       funcParam,ContractAddress: contractAddress,ContractAbi:     abiJSON,UseAes:          false,UseCns:          false,CnsName:         "",}// 将请求数据转为 JSON 字符串payloadBytes, err := json.Marshal(data)if err != nil {return "", fmt.Errorf("error marshalling data: %v", err)}// 发送 HTTP POST 请求resp, err := http.Post(transUrl, "application/json; charset=utf-8", bytes.NewBuffer(payloadBytes))if err != nil {return "", fmt.Errorf("error making POST request: %v", err)}defer resp.Body.Close()// 读取响应体body, err := ioutil.ReadAll(resp.Body)if err != nil {return "", fmt.Errorf("error reading response body: %v", err)}// 返回响应的字符串return string(body), nil
}

将contractAbi、contractName、contractAddress、ownerAddress改成在wefront-front部署abi、合约名称、合约地址、部署合约用户

transUrl的IP改成对应虚拟机IP

编写实体

package entitytype HelloWorld struct {Name string `json:"name"`
}

 编写服务层

package serviceimport ("SDK/entity""SDK/util""log"
)// Set 函数用于设置 HelloWorld 实体
func Set(helloworld *entity.HelloWorld) bool {funcParams := []interface{}{helloworld.Name,}res, err := util.OwnerWriteContract("set", funcParams)if err != nil || res == nil {log.Printf("set失败: %v", err)return false}return true
}

 编写控制层

package controllerimport ("SDK/entity""SDK/service""github.com/gin-gonic/gin""net/http"
)// Set 处理 POST 请求以设置 HelloWorld 实体
func Set(c *gin.Context) {var helloworld entity.HelloWorld// 将 JSON 数据绑定到 HelloWorld 结构体if err := c.ShouldBindJSON(&helloworld); err != nil {c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})return}// 调用服务层以设置 HelloWorld 实体if success := service.Set(&helloworld); !success {c.JSON(http.StatusInternalServerError, gin.H{"error": "fail"})return}// 返回成功响应c.JSON(http.StatusOK, gin.H{"message": "success"})
}

 编写路由

package routerimport ("SDK/controller""github.com/gin-gonic/gin"
)func SetupRouter() *gin.Engine {// 创建一个新的 Gin 引擎并手动添加中间件r := gin.New()r.Use(gin.Logger(), gin.Recovery()) // 手动添加 Logger 和 Recovery 中间件// 设置路由r.POST("/set", controller.Set)return r
}

 编写main.go

package mainimport ("SDK/router""log"
)func main() {r := router.SetupRouter() // 通过 SetupRouter 获取初始化好的路由// 启动服务器if err := r.Run("127.0.0.1:8080"); err != nil {log.Fatalf("Unable to start the server: %v", err)}
}

Postman测试 

合约查看结果 

 

http://www.lryc.cn/news/605734.html

相关文章:

  • [硬件电路-111]:滤波的分类:模拟滤波与数字滤波; 无源滤波与有源滤波;低通、带通、带阻、高通滤波;时域滤波与频域滤波;低价滤波与高阶滤波。
  • 操作系统数据格式相关(AI回答)
  • 无人船 | 图解基于LQR控制的路径跟踪算法(以欠驱动无人艇Otter为例)
  • 学习笔记《区块链技术与应用》第4天 比特币脚本语言
  • Docker部署Seata
  • Linux核心转储(Core Dump)原理、配置与调试实践
  • 前端-移动Web-day2
  • 野生动物巡查系统(H题)--2025 年全国大学生电子设计竞赛试题
  • ENSP防火墙部署
  • 快速理解RTOS中的pendsv中断和systick中断
  • Java Stream进阶:map是“一对一”,flatMap是“一对多”
  • H.266 vs H.265/AV1/H.264:从工程落地看下一代视频系统的技术演进
  • 前端核心技术Node.js(五)——Mongodb、Mongoose和接口
  • Web3:在 VSCode 中基于 Foundry 快速构建 Solidity 智能合约本地开发环境
  • 硬核技术协同:x86 生态、机密计算与云原生等技术如何为产业数字化转型筑底赋能
  • 云原生环境 DDoS 防护:容器化架构下的流量管控与弹性应对
  • 对git 熟悉时,常用操作
  • Java学习第九十一部分——OkHttp
  • MongoDB用户认证authSource
  • 微服务架构技巧篇——接口类设计技巧
  • 智能交通顶刊TITS论文分享|跨区域自适应车辆轨迹预测:TRACER框架攻克域偏移难题!
  • PageOffice实现文档并发控制
  • 2025年人形机器人动捕技术研讨会将在本周四召开
  • JVM面试通关指南:内存区域、类加载器、双亲委派与GC算法全解析
  • 暑期算法训练.11
  • wpf之ControlTemplate
  • RabbitMQ 消费者确认 (Ack/Nack) (With Spring Boot)
  • HUD抬头显示器-杂散光测试设备 太阳光模拟器
  • FastGPT + Kymo AI生态创新平台,搭建企业智能化知识管理
  • TTS语音合成|GPT-SoVITS语音合成服务器部署,实现http访问