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

FISCO BCOS 智能合约开发详解

一、FISCO BCOS 智能合约开发概览

FISCO BCOS 是一个国产开源联盟链平台,支持两种类型的智能合约:​FISCO BCOS Documentation

  • Solidity 合约:​与以太坊兼容,使用 Solidity 语言编写,适用于灵活的业务逻辑开发。

  • 预编译合约(Precompiled Contract):​使用 C++ 开发,内置于平台中,性能更高,适用于逻辑固定但需要共识的场景。​FISCO BCOS Documentation

此外,FISCO BCOS 提供了 CRUD 合约接口,简化了合约开发过程,降低了开发门槛。​FISCO BCOS Documentation+2FISCO BCOS Documentation+2FISCO BCOS Documentation+2


二、Solidity 合约开发

1. 开发工具支持

FISCO BCOS 支持多种开发工具,包括:​

  • Remix 在线 IDE:​适合快速编写和测试 Solidity 合约。

  • WeBASE 合约 IDE:​提供图形化界面,支持合约的编写、编译、部署和调用。​FISCO BCOS Documentation

这些工具帮助开发者高效地进行合约开发和调试。​FISCO BCOS Documentation

2. 国密算法支持

在国密环境下,FISCO BCOS 对 Solidity 中的 keccak256sha3 指令进行了替换,实际执行的是国密 SM3 算法,以满足国内密码算法的合规要求。​


三、KVTable 与 Table 合约接口

FISCO BCOS 提供了两种表结构接口,实现合约逻辑与数据存储的分离:​

1. KVTable(键值对表)

KVTable 适用于键值对数据的存储和访问。​

接口示例:

 

solidity

复制编辑

pragma solidity ^0.4.24; contract KVTableFactory { function openTable(string tableName) public constant returns (KVTable); function createTable(string tableName, string key, string valueFields) public returns(int256); } contract KVTable { function get(string key) public view returns (bool, Entry); function set(string key, Entry entry) public returns (int256); function newEntry() public view returns (Entry); } contract Entry { function getInt(string field) public constant returns (int256); function getString(string field) public constant returns (string); function set(string field, int256 value) public; function set(string field, string value) public; }

使用示例:

 

solidity

复制编辑

pragma solidity ^0.4.24; import "./Table.sol"; contract KVTableTest { KVTableFactory tableFactory; string constant TABLE_NAME = "t_kvtest"; constructor() public { tableFactory = KVTableFactory(0x1010); tableFactory.createTable(TABLE_NAME, "id", "item_price,item_name"); } function set(string id, int256 item_price, string item_name) public returns (int256) { KVTable table = tableFactory.openTable(TABLE_NAME); Entry entry = table.newEntry(); entry.set("id", id); entry.set("item_price", item_price); entry.set("item_name", item_name); return table.set(id, entry); } function get(string id) public view returns (bool, int256, string) { KVTable table = tableFactory.openTable(TABLE_NAME); bool ok; Entry entry; (ok, entry) = table.get(id); if (ok) { return (true, entry.getInt("item_price"), entry.getString("item_name")); } else { return (false, 0, ""); } } }

2. Table(结构化表)

Table 接口提供了类似数据库的 CRUD 操作,适用于结构化数据的存储和管理。​FISCO BCOS Documentation

接口示例:

 

solidity

复制编辑

pragma solidity ^0.4.24; contract TableFactory { function openTable(string tableName) public constant returns (Table); function createTable(string tableName, string key, string valueFields) public returns(int256); } contract Table { function select(string key, Condition condition) public constant returns (Entries); function insert(string key, Entry entry) public returns (int256); function update(string key, Entry entry, Condition condition) public returns (int256); function remove(string key, Condition condition) public returns (int256); function newEntry() public constant returns (Entry); function newCondition() public constant returns (Condition); } contract Entry { function getInt(string field) public constant returns (int256); function getString(string field) public constant returns (string); function set(string field, int256 value) public; function set(string field, string value) public; } contract Condition { function EQ(string field, int256 value) public; function EQ(string field, string value) public; function GT(string field, int256 value) public; function LT(string field, int256 value) public; }

通过 Table 接口,开发者可以实现复杂的数据查询和管理功能。​


四、预编译合约(Precompiled Contract)

预编译合约是使用 C++ 开发的合约,内置于 FISCO BCOS 平台中,具有以下特点:​FISCO BCOS Documentation

  • 高性能:​由于是底层实现,执行效率高,适用于对性能要求较高的场景。

  • 逻辑固定:​适用于逻辑固定但需要共识的场景,例如群组配置等。

  • 接口预定义:​合约接口在编译时预先确定,不能动态修改。​FISCO BCOS Documentation

预编译合约适用于对性能和安全性要求较高的业务场景。​


五、开发建议与最佳实践

  • 选择合适的合约类型:​根据业务需求选择 Solidity 合约或预编译合约。

  • 使用 CRUD 接口:​利用 KVTable 和 Table 接口,实现合约逻辑与数据存储的分离,提升系统的可维护性和扩展性。

  • 遵循国密标准:​在国密环境下,确保使用平台提供的加密算法,满足合规要求。

  • 利用开发工具:​充分利用 Remix、WeBASE 等开发工具,提高开发效率。​FISCO BCOS Documentation+1FISCO BCOS Documentation+1


六、参考资料

  • FISCO BCOS 智能合约开发文档:​智能合约开发 — FISCO BCOS 2.0 v2.11.0 文档

  • FISCO BCOS 智能合约开发快速入门:​FISCO BCOS智能合约开发快速入门 — FISCO BCOS 2.0 v2.11.0 文档

  • FISCO BCOS 预编译合约开发指南:​使用预编译合约 — FISCO BCOS 2.0 v2.11.0 文档​

相关文章:

FISCO BCOS 智能合约开发详解

一、FISCO BCOS 智能合约开发概览 FISCO BCOS 是一个国产开源联盟链平台,支持两种类型的智能合约:​FISCO BCOS Documentation Solidity 合约:​与以太坊兼容,使用 Solidity 语言编写,适用于灵活的业务逻辑开发。 预…...

Linux操作系统从入门到实战(四)Linux基础指令(下)

Linux操作系统从入门到实战(四)Linux基础指令(下) 前言一、date 指令二、cal 指令三、find 指令四、which 指令五、whereis 指令六、alias 指令七、grep 指令八、zip/unzip 指令九、tar 指令(重要)十、bc 指…...

使用 LLM助手进行 Python 数据可视化

在数据科学中,数据可视化是一项至关重要的任务,旨在揭示数据背后的模式和洞察,并向观众传达这些信息。然而,在编程语言(如 Python)中创建有洞察力的图表有时可能会耗时且复杂。本文介绍了一种借助 AI 助手&…...

docker安装jenkins自动化测试

#搭建gitlab docker pull gitlab/gitlab-ce docker run -d\--hostname localhost \-p 443:443 -p 80:80 -p 2222:22 \--name gitlab \-v /myproject/gitlab/config:/etc/gitlab \-v /myproject/gitlab/logs:/var/log/gitlab \-v /myproject/gitlab/data:/var/opt/gitlab \gitla…...

Python3:面向对象编程

这里写目录标题 🧩 面向对象编程:让代码化身为积木世界一、核心概念:类与对象二、四大基石:面向对象的核心特性1️⃣ 封装(Encapsulation):包装复杂性,提供简单接口2️⃣ 继承(Inheritance):站在…...

数据可视化 —— 饼图

一、饼图的所有常用使用场景 饼图是一种直观展示数据占比关系的图表,适用于以下常见场景: 1. 市场与商业分析 市场份额:展示不同品牌/产品在市场中的占有率。 收入构成:分析公司各业务线或产品的收入占比。 客户分布&#xff1…...

OpenLayers WebGL与3D渲染 (进阶一)

1. WebGL概述 WebGL是一种JavaScript API,它基于OpenGL ES 2.0/3.0标准,允许在不使用插件的情况下在兼容的Web浏览器中呈现高性能的交互式3D和2D图形。在地理信息系统(GIS)领域,WebGL为地图渲染和空间数据可视化提供了强大的性能支持。 1.1…...

ARP协议(地址解析协议)

ARP协议是用来把IP地址转换成MAC地址的。 因为在局域网里,真正通信靠的是MAC地址,但我们平时只知道目标的IP地址,所以需要一个办法把IP地址变成MAC地址 —— 这个过程就是靠ARP完成的。 举个超简单的例子: 你电脑要发数据给192.1…...

深度学习常见框架:TensorFlow 与 PyTorch 简介与对比

🐇明明跟你说过:个人主页 🏅个人专栏:《深度探秘:AI界的007》 🏅 🔖行路有良友,便是天堂🔖 目录 一、引言 1、为什么需要深度学习框架? 2、框架的发展背…...

iOS 类与对象底层原理

iOS 类与对象底层原理 文章目录 iOS 类与对象底层原理探索对象本质objc_setProperty 源码cls与类的关联原理联合体isa的类型isa_t 原理探索initIsa方法通过setClass方法中的shiftcls来验证绑定的一个流程通过 isa & ISA_MSAK通过object_getClass通过位运算 类&类的结构…...

Babel、core-js、Loader之间的关系和作用全解析

在现代前端开发中,Babel、polyfill(如 core-js)和 Loader 是非常常见又容易混淆的几个概念。为了彻底搞明白它们的作用、关系和使用方法,下面一篇文章详细梳理。 一、Babel的作用 Babel 是一个 JavaScript 的编译器,主…...

总线位宽不变,有效数据位宽变化的缓存方案

总线位宽不变,有效数据位宽变化的缓存方案 譬如总线位宽为64bit,但是有时候只有高32bit有效,有时只有低32bit有效,有时64bit都有效。总线上收到的数据要先缓存到FIFO中,那么这个FIFO的宽度和深度如何设置呢&#xff1…...

若依脱敏功能升级:接口返回想脱就脱,想不脱就不脱(实现灵活可控制的数据脱敏)

若依原生框架中的脱敏功能不够灵活(默认超级管理员不脱敏,其他则脱敏)。 有时候,我们有些接口想要脱敏,但是有些接口又不想脱敏。(例如列表查询的时候脱敏。修改的时候,不想数据脱敏&#xff0…...

【Azure Redis 缓存】在Azure Redis中,如何限制只允许Azure App Service访问?

问题描述 在Azure Redis服务中,如何实现只允许Azure App Service访问呢? 问题解答 Azure Redis 开启 防火墙的功能,并在防火墙中添加上App Service的出口IP地址即可。两步即可实现此目的! 1)查询 App Service 的出口IP…...

如何解决无训练数据问题:一种更为智能化的解决方案

手动标注数据真的很费时间,而且买数据集又贵得要命,还不一定能完全符合你的需求。但这里有个令人兴奋的好消息,为啥不用 AI 来解决这个问题呢? 别再依赖传统方法了,你可以用像 LLM(大型语言模型)和图像生成器这样的 AI 工具,为你的特定目标创建合成训练数据。如今有那…...

AI 应用同质化:一场看不见的资源 “吞噬战”

大家好,我是涛涛,今天聊聊令人担心的事情。 一、同质化的“繁荣”背后 当ChatGPT在2022年掀起全球AI热潮时,中国互联网行业迅速进入“All in AI”模式。根据艾瑞咨询数据,2023年国内AI应用市场新增注册企业超2.3万家&#xff0c…...

Java + Spring Boot + MyBatis获取以及持久化sql语句的方法

在Java的Spring Boot项目中结合MyBatis获取实际执行的SQL语句,可以通过以下几种方法实现: 方法一:配置MyBatis日志级别 通过调整日志级别,MyBatis会输出执行的SQL语句及参数,适用于快速调试。 修改application.prope…...

「浏览器即OS」:WebVM技术栈如何用Wasm字节码重构冯·诺依曼体系?

一、冯诺依曼架构的维度坍塌 1. 传统计算模型的能量耗散 浏览器执行效率瓶颈分析: 操作x86指令周期Wasm指令周期能效比提升矩阵乘法3894.2x内存访问1234x系统调用120012100x 二、WebVM的量子纠缠架构 1. 浏览器内核的重构 // 基于WASI的系统调用处理 #[no_mangl…...

Vue3项目目录结构规范建议

以下是一个推荐的 Vue 3 项目目录结构规范,适用于中大型项目并遵循最佳实践: 基础目录结构 bash src/ ├─ assets/ # 静态资源 │ ├─ images/ # 图片文件 │ ├─ fonts/ # 字体文件 │ └─ styles/ …...

【计算机视觉】CV实战项目- Four-Flower:基于TensorFlow的花朵分类实战指南

深度解析Four-Flower:基于TensorFlow的花朵分类实战指南 项目概述与技术背景技术栈组成 完整实战流程环境配置1. 基础环境安装2. 项目环境搭建3. 环境验证 数据准备模型架构解析训练过程优化1. 训练配置2. 关键参数建议3. 训练监控 常见问题与解决方案1. 内存不足错…...

4.27 JavaScript核心语法+事件监听

JavaScript负责网页的行为(交互行为) JS基本语法: 引用方式 变量&常量&数据类型: alert()标签输出弹出框,如以上代码会输出true。 函数: 自定义对象: 属性方法行为 JS中的全局变量是window。 js…...

于键值(KV)的表

基于键值(KV)的表 将行编码为键值(KVs) 索引查询:点查询和范围查询 在关系型数据库中,数据被建模为由行和列组成的二维表。用户通过SQL表达他们的意图,而数据库则神奇地提供结果。不那么神奇的…...

Matlab算例运行

1. 使用终端命令运行算例: 2. 如果点击Run 按钮就是会一直报错,所以直接改成终端运行算例...

package.json script 中的 prepare 脚本的作用是什么

在 package.json 的 scripts 中,prepare 脚本是一个特殊的生命周期脚本,主要作用和执行时机如下: prepare 脚本的作用和执行时机 执行时机: 在执行 npm publish 命令之前运行。在执行不带参数的 npm install 命令时运行&#xff…...

图论---最大流(Dinic)

最大流一定是阻塞流,阻塞流不一定是最大流。 阻塞流---从起点到终点的管道已经阻塞了。 时间复杂度: 一般情况:O(n2m)O(n2m)(但实际运行效率较高,尤其在稀疏图上)。 使用当前弧优化后,效率接近…...

FastAPI系列06:FastAPI响应(Response)

FastAPI响应(Response) 1、Response入门2、Response基本操作设置响应体(返回数据)设置状态码设置响应头设置 Cookies 3、响应模型 response_model4、响应类型 response_classResponse派生类自定义response_class 在“FastAPI系列0…...

双目RealSense系统配置rs_camera.launch----实现D435i自制rosbag数据集到离线场景的slam建图

引言 Intel RealSense系列相机因其出色的深度感知能力和灵活的配置选项,在机器视觉与应用中得到广泛应用。大家在后期的slam学习中,无论是对算法本身的性能要求还是实验的泛化性都有一定的要求,那么公开的数据集如kitti、tum、Eourc不能满足…...

【MCP-2】MCP是什么,利用智普大模型在MaxKB中调用自己开发的MCP服务

在上一篇【MCP-1】MCP是什么,从DEMO入手文章中我们介绍了MCP是什么、他能干啥,以及简单的Demo示例等,这篇文章我们使用MaxKB这个工具,利用智普大模型,看看MCP到底怎么用。 创建SSE协议的MCP服务 在上篇文章中的Demo是…...

Allegro23.1新功能之如何单独关闭铜皮显示效果操作指导

Allegro23.1新功能之如何单独关闭铜皮显示效果操作指导 Allegro升级到了23.1的时候,支持单独关闭铜皮显示 ,如下图 如何仅关闭shape的显示,单独显示线,具体操作如下 点击setup...

《从分遗产说起:JS 原型与继承详解》

“天天开心就好” 先来讲讲概念: 原型(Prototype) 什么是原型? 原型是 JavaScript 中实现对象间共享属性和方法的机制。每个 JavaScript 对象(除了 null)都有一个内部链接指向另一个对象,这…...

【Part 2安卓原生360°VR播放器开发实战】第二节|基于等距圆柱投影方式实现全景视频渲染

《VR 360全景视频开发》专栏 将带你深入探索从全景视频制作到Unity眼镜端应用开发的全流程技术。专栏内容涵盖安卓原生VR播放器开发、Unity VR视频渲染与手势交互、360全景视频制作与优化,以及高分辨率视频性能优化等实战技巧。 📝 希望通过这个专栏&am…...

Android——RecyclerView

RecyclerView的使用 依赖 implementation("androidx.recyclerview:recyclerview:1.4.0")activity_recyclerview.xml <androidx.recyclerview.widget.RecyclerViewandroid:id"id/rv"android:layout_width"match_parent"android:layout_height…...

跨域问题(Cross-Origin Problem)

跨域问题&#xff08;Cross-Origin Problem&#xff09;是浏览器出于安全考虑&#xff0c;对不同源&#xff08;协议、域名、端口&#xff09;之间的资源访问进行限制而引发的限制。以下是详细解释&#xff1a; 1. 核心定义 跨域&#xff1a;当一个网页&#xff08;源A&#x…...

阿里云直接对系统云盘扩容

阿里云直接对系统云盘扩容 登录阿里云控制台&#xff0c;进入ECS实例管理页面&#xff0c;检查目标磁盘的容量是否已更新为扩容后的数值。通过SSH远程连接服务器&#xff0c;使用命令 lsblk 或 fdisk -l 查看当前磁盘分区和容量&#xff0c;确认扩容后的物理磁盘已被系统识别。…...

Java大厂面试突击:从Spring Boot自动配置到Kafka分区策略实战解析

第一轮核心知识 面试官&#xff1a;请解释Spring Boot中自动配置的工作原理并演示如何自定义一个ConfigurationProperties组件&#xff1f; xbhog&#xff1a;自动配置通过EnableAutoConfiguration注解触发&#xff0c;结合当前环境判断&#xff08;如是否检测到MyBatis依赖&…...

【python】lambda用法(结合例子理解)

目录 lambda 是什么? 为什么叫 lambda? 语法 举例 1. 最简单的 lambda:单个数字处理 2. 用 lambda 排序一组字符串(按照长度排序) 3. 在列表里找出绝对值最小的数字 4. 给 map() 用 lambda 5. 组合使用:筛选出偶数 lambda 和 def 的对比 lambda 适合用在什么地…...

前端Ui设计工具

PS 稿、蓝湖、Sketch 和 Figma 前端 UI 设计工具的对比分析 PS 稿&#xff08;Adobe Photoshop&#xff09; 提供精准设计细节&#xff1a;PS 稿能让前端更精准地理解页面布局、元素尺寸、颜色等&#xff0c;通过精确测量和查看信息面板&#xff0c;把握设计元素的空间关系、…...

深入探索Python Pandas:解锁数据分析的无限可能

放在前头 深入探索Python Pandas&#xff1a;解锁数据分析的无限可能 深入探索Python Pandas&#xff1a;解锁数据分析的无限可能 在当今数据驱动的时代&#xff0c;高效且准确地处理和分析数据成为了各个领域的关键需求。而Python作为一门强大且灵活的编程语言&#xff0c;…...

django admin 设置字段不可编辑

在Django中&#xff0c;如果你想让管理员在后台管理界面中无法编辑某个字段&#xff0c;你可以通过在模型的Meta类中设置editable属性为False&#xff0c;或者在admin.py文件中使用readonly_fields属性来实现。 方法1&#xff1a;在模型中使用Meta类设置 你可以在模型的Meta类…...

AI在医疗领域的10大应用:从疾病预测到手术机器人

AI在医疗领域的10大应用&#xff1a;从疾病预测到手术机器人 系统化学习人工智能网站&#xff08;收藏&#xff09;&#xff1a;https://www.captainbed.cn/flu 文章目录 AI在医疗领域的10大应用&#xff1a;从疾病预测到手术机器人摘要引言1. 医学影像诊断&#xff1a;从静态…...

深入理解 Java 单例模式:从基础到最佳实践

单例&#xff08;Singleton&#xff09;模式是 Java 中最基本、最常用的设计模式之一。它确保一个类在任何情况下都只有一个实例&#xff0c;并提供一个全局访问点来获取这个唯一的实例。 一、为什么需要单例模式&#xff1f;&#xff08;使用场景&#xff09; 单例模式主要适…...

Rust:安全与性能兼得的现代系统编程语言

一、起源与设计理念 Rust 是由 Mozilla 研究院 Graydon Hoare 于 2006 年发起设计的系统级编程语言&#xff0c;其诞生源于传统系统语言&#xff08;如 C/C&#xff09;在内存安全与并发编程方面的缺陷。经过近十年的迭代&#xff0c;Rust 1.0 稳定版于 2015 年正式发布&#…...

AI赋能智慧医疗新范式:小天互连即时通讯打造高效、安全的医疗通讯平台

在医疗行业&#xff0c;高效的信息协作与严格的数据安全不仅直接关系患者诊疗效率&#xff0c;更是医院现代化管理的核心命题。小天互连即时通讯系统通过将智能化功能与医疗场景深度结合&#xff0c;打造出全链路数字化协作平台&#xff0c;有效破解了传统沟通模式的效率瓶颈&a…...

图像生成新势力:GPT-Image-1 与 GPT-4o 在智创聚合 API 的较量

在人工智能领域&#xff0c;图像生成技术正迅速发展&#xff0c;OpenAI 推出的 GPT-Image-1 和 GPT-4o 在图像生成方面展现出了强大的能力。智创聚合 API 平台已支持这两个模型&#xff0c;并且其图片生成 / 编辑工作台支持图片的循环编辑等功能&#xff0c;为用户提供了更便捷…...

如何避免爬虫因Cookie过期导致登录失效

1. Cookie的作用及其过期机制 1.1 什么是Cookie&#xff1f; Cookie是服务器发送到用户浏览器并保存在本地的一小段数据&#xff0c;用于维持用户会话状态。爬虫在模拟登录后&#xff0c;通常需要携带Cookie访问后续页面。 1.2 Cookie为什么会过期&#xff1f; 会话Cookie&…...

集成方案 | Docusign + 甄零科技,赋能企业海外业务高效增长!

本文将详细介绍 Docusign 与甄零科技的集成步骤及其效果&#xff0c;并通过实际应用场景来展示 Docusign 的强大集成能力&#xff0c;以证明 Docusign 集成功能的高效性和实用性。 甄零科技是一家专注于数字化合同管理系统的 SaaS 解决方案提供商&#xff0c;致力于为企业打造“…...

【Arxiv 2025】Single Image Iterative Subject-driven Generation and Editing

文章目录 文章标题作者及研究团队介绍01 在论文所属的研究领域&#xff0c;有哪些待解决的问题或者现有的研究工作仍有哪些不足&#xff1f;02 这篇论文主要解决了什么问题&#xff1f;03 这篇论文解决问题采用的关键解决方案是什么&#xff1f;04 这篇论文的主要贡献是什么&am…...

CoOAG:首个捕捉学术研究兴趣动态演变的数据集

2025-04-24&#xff0c;由西安交通大学基于学术合作网络构建一种新的动态图数据集CoOAG&#xff0c;用于研究动态图中的节点分类问题。该数据集通过捕捉作者研究兴趣的动态变化&#xff0c;为动态图学习领域提供了新的研究方向和测试平台&#xff0c;特别是在标签受限的动态节点…...

决策树随机深林

决策树和随机森林是机器学习中常用的两种模型&#xff0c;以下是对它们的简单介绍&#xff1a; 决策树 - 原理&#xff1a;通过一系列的条件判断对样本进行分类或预测。它由节点&#xff08;内部节点是属性上的测试&#xff0c;叶节点是类别或值&#xff09;和边组成&#xff0…...

Unity 和 Unreal Engine(UE) 两大主流游戏引擎的核心使用方法

以下是 Unity 和 Unreal Engine&#xff08;UE&#xff09; 两大主流游戏引擎的核心使用方法和对比分析&#xff0c;帮助开发者快速上手并根据项目需求选择合适工具&#xff1a; 一、Unity 使用指南 1. 安装与配置 安装&#xff1a;从 Unity Hub 下载&#xff0c;选择长期支持…...