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

智能合约

06-智能合约

0 啥是智能合约?

定义

智能合约,又称加密合约,在一定条件下可直接控制数字货币或资产在各方之间转移的一种计算机程序。

角色

  • 区块链网络可视为一个分布式存储服务,因为它存储了所有交易和智能合约的状态
  • 智能合约还是基于存储服务之上的计算,即运行在区块链上的代码程序。
alt

特点

智能合约,即先前设定好的代码数字协议,在不可更改和公共监督情景下,去运行一个合约,违反合约的一方将付出事先约定好的代价,自动执行(无需借助外部力量)。

智能合约是公平的,第三方无法干预。

功能

智能合约不仅以与传统合约相同方式定义协议的规则和处罚,还可自动强制执行这些义务。

它通过接受信息作为输入,通过规则为输入赋值,在合约中列出并执行这些合约条款。

实例

设想人寿保险,智能合约在保单持有人去世后,向指定受益人支付利益。

合约可以对在线死亡登记表进行实时检查以确定支付时间,智能合约是可靠的,自动的。

架构地位

核心数据和核心业务逻辑运行在区块链上,保证去中心化与上层业务系统进行衔接,提供用户界面或业务集成:

alt

意义

区块链智能合约:从数据可信上升到业务可信。

1 假如没有智能合约?

区块链网络将仅作为一个分布式存储服务。区块链主要功能将会是记录和保存数据,而不会自动执行任何逻辑或业务规则。

没有智能合约的区块链网络的特点和局限:

1.1 特点

  • 去中心化存储:区块链仍提供去中心化的数据存储功能,保证数据的完整性和防篡改性
  • 数据透明性:所有节点可访问相同数据,确保信息公开透明
  • 安全性:通过共识机制和密码学技术,确保数据安全性和不可篡改性

1.2 局限

  • 缺乏自动化处理:无法在链上执行自动化的业务逻辑。如不能在特定条件下自动触发资金转移或更新数据
  • 手动操作:所有业务逻辑和操作需要依赖链下的系统或人工操作,增加操作复杂性和潜在错误
  • 有限的应用场景:仅能用于简单的数据记录和查询,无法支持复杂的去中心化应用(dApps)

1.3 假如没有智能合约的区块链网络的典型使用场景

  1. 数据记录:例如,公证和时间戳服务,用于证明某个数据在某个时间点已经存在。
  2. 审计跟踪:用于保存和跟踪记录的变更历史,确保记录的完整性和不可篡改性。
  3. 简单交易:例如,比特币的早期应用,仅支持简单的转账功能,而没有复杂的业务逻辑。

1.4 实例

若一个区块链网络没有智能合约,其工作流程可能:

  1. 数据写入:用户通过客户端,将数据写入区块链
  2. 数据存储:区块链网络通过共识机制将数据记录在区块中,并存储在各节点的账本中
  3. 数据查询:用户或应用程序可查询区块链中的数据,但不能执行任何业务逻辑

如Alice向区块链提交一笔交易,记录她向Bob转账1个单位货币。区块链网络会验证并记录这笔交易,确保其不可篡改。但若无智能合约,无法在特定条件下自动执行转账或其他逻辑操作,所有业务流程要在链下由用户或第三方系统手动处理。

综上,无智能合约的区块链网络在功能上受限,只能提供基础的分布式存储和数据记录功能,无法支持复杂的自动化业务逻辑和去中心化应用。

所以,智能合约

1.5 有啥用?

在区块链社会里,大家共同维护一个区块链账本,所有交易数据无法篡改、不可伪造,还能减少人工对账的出错概率和人力成本。 随智能合约普及,我们也会变得更佛系。面对潜在的纠纷,无需自己出马,一切代码说了算。

如乘飞机买延误险,理赔就变得简单多了:

  • 投保乘客信息、航班延误险和航班实时动态均以智能合约的形式存储在区块链上
  • 一旦航班延符合赔付标准,赔偿款将自动划账到投保乘客账户,保单处理十分高效
  • 你也不需要跟工作人员费口舌、争论计赔时间等问题

智能合约是以太坊区块链上指定地址的代码和数据集合,智能合约能直接相互发送消息,同时也能执行图灵完备计算。

智能合约是建立在以太坊虚拟机字节码基础之上的。

一般不会直接编写字节码,而是使用像 Solidity 这样的以太坊高级语言。

Solidity 是可以用来编写以太坊智能合约的高级语言,它和js很像。

推荐使用 Solidity 语言,其使用的人比较多,意味着更好的生态,能找到更多的资源,有问题也更容易找到答案。

2 重要性

2.1 经济活动可编程

代码即法律,表达现实世界的经济活动,满足条件自动触发的电子合约

2.2 现实事物可映射

智能提供丰富的数据结构,完成复杂的现实事物的标识和时序变化

2.3 区块链2.0的标志

区块链2.0通常指的是在比特币之后出现的区块链技术,其核心特征是支持智能合约(Smart Contracts)。智能合约是一种自动执行的合约,其中的条款和条件直接编码到代码中,无需第三方介入即可执行。

以太坊,HLFabric等都是建立在智能合约的基础上。

3 智能合约框架

alt

3.1 广域网的状态一致性

  • 不同节点得到一致执行结果
  • 不同硬件环境得到一致的资源消耗

3.2 合约开发语言多样性

适应不同开发者的开发习惯

支持不同的合约语言:

  • C++
  • GO
  • JAVA
  • Solidity

支持不同的合约类型:

  • WASM 合约
  • Native 合约
  • EVM 合约

合约语言/运行时相容矩阵:

alt
  • 环境准备
  • 合约编写
  • 合约编译
  • 部署调用

3.3 合约执行的高性能

支撑真实落地场景的业务体量

3.4 不同业务场景的可扩展性

  • 公开网络和联盟网络的虚拟机需求
  • 兼容已有的区块链生态

4 WASM智能合约字节码

将智能合约编译成WebAssembly字节码格式,以便在区块链环境中高效、安全地执行。WASM(WebAssembly)是一种高效、可移植的低级字节码格式,最初是为在浏览器中高效运行而设计的,但由于其安全性、跨平台兼容性和高效性,逐渐在区块链和智能合约领域中获得广泛应用。

4.1 优点

字节码预编译AOT,实现高性能

硬件无关中间码,生成本地指令 编译执行 V.S 解释执行

WASM字节码经过优化,可以接近本地执行速度,确保智能合约的高效执行。

资源限制及审计
  • 设置资源限制,超限制自动退出
  • 多纬度资源统计:CPU,内存,磁盘
安全性保障
  • 内存越界检查
  • 限制系统资源访问,类似web沙盒环境。WASM运行在沙盒环境中,隔离了智能合约执行和底层系统,减少了安全漏洞。
  • 超资源自动退出保护机制,防恶意攻击
alt
可移植性

WASM字节码可以在任何支持WASM的环境中执行,增加了智能合约的跨链兼容性

多语言支持

开发者可用多种编程语言(如Rust、C++、Go等)编写智能合约,然后编译成WASM字节码

4.2 工作流程

  1. 编写合约:开发者使用高层语言(如Rust)编写智能合约。
  2. 编译成WASM字节码:使用编译工具将智能合约编译成WASM字节码。
  3. 部署:将编译后的WASM字节码部署到区块链网络上。
  4. 执行:当调用智能合约时,区块链节点将加载并执行WASM字节码。
alt

4.3 例子

1. 编写智能合约(Rust)
#[no_mangle]
pub extern "C" fn add(a: i32, b: i32) -> i32 {
    a + b
}
2. 编译为WASM字节码

使用Rust工具链和wasm-pack将代码编译为WASM字节码:

wasm-pack build --target web

编译后生成的WASM字节码文件可以部署到支持WASM的区块链平台。

3. 部署和调用

将生成的WASM字节码文件部署到区块链上,然后通过交易调用合约函数。例如,调用add函数并传递参数ab

4.4 未来

WASM智能合约在区块链领域具有广阔的前景:

  • 跨链互操作性:由于WASM的可移植性,未来不同区块链平台之间可以更方便地共享和执行智能合约。
  • 更高性能:WASM的高效执行能力使得区块链平台可以支持更复杂和计算密集的应用。
  • 更安全的合约执行:WASM沙盒环境提供了更好的安全性,减少了智能合约中的潜在漏洞。

5 Gas 计费原理-控制流图分析

alt

Gas 计费是区块链平台(如以太坊)用来防止资源滥用和激励资源使用优化的机制。智能合约执行过程中每一步操作都会消耗一定量的Gas,用户需要为这些操作支付费用。Gas 费用通常以加密货币(例如以太币)支付。

Gas 计费原理

  1. 初始Gas分配:在交易开始前,用户需要指定一个Gas上限(即最大愿意支付的Gas量)和Gas价格(每单位Gas愿意支付的费用)。在交易执行时,这个Gas上限会被锁定,确保不会超过用户设定的最大Gas量。

  2. 操作计费:智能合约执行过程中,每个操作指令(如算术运算、存储操作、合约调用等)都有预定义的Gas消耗。虚拟机(如以太坊的EVM)会根据操作指令的类型和数量逐步扣除Gas。

  3. Gas不足处理:如果执行过程中Gas消耗超过了用户设定的Gas上限,交易会被强制中止并回滚,但已经消耗的Gas不会退还。

  4. 剩余Gas退还:如果交易执行完毕且未耗尽所有的Gas,上限中未用尽的部分会退还给用户。

控制流图分析

控制流图(CFG)是用来表示程序所有可能执行路径的图结构,节点表示基本块(basic blocks),边表示控制流(control flow)。在智能合约中,CFG可以帮助分析程序的Gas消耗情况。

示例智能合约控制流图

假设有一个简单的智能合约,伪代码如下:

function foo(x{
    if (x > 10) {
        y = x * 2;
    } else {
        y = x + 10;
    }
    return y;
}

其控制流图如下所示:

        [Start]|v[Entry: x > 10]/       \/         \v           v
[y = x * 2]   [y = x + 10]\         /\       /v     v[Return y]
Gas 计费过程
  1. 进入合约:Gas 消耗包括调用合约的基础费用和传递参数的费用。

  2. 条件判断:根据条件判断的复杂度,会消耗一定量的Gas。

  3. 分支执行

    • x > 10,执行 y = x * 2,算术运算消耗Gas。
    • x <= 10,执行 y = x + 10,算术运算消耗Gas。
  4. 返回结果:返回结果的过程会消耗Gas。

通过控制流图,可以直观地分析不同路径上的Gas消耗情况,并优化智能合约代码以减少Gas使用。例如,在上述示例中,可以通过合并相似的计算路径来减少条件判断的复杂度。

Gas 计费优化

  1. 减少存储操作:存储操作(如写入合约存储)是最昂贵的操作之一,尽量减少写操作可以显著降低Gas消耗。
  2. 优化计算:避免不必要的复杂计算,使用低Gas消耗的操作替代高Gas消耗的操作。
  3. 减少条件判断:减少条件分支的复杂度和数量,优化控制流路径。
  4. 合约重用:通过模块化设计,重用常见操作,减少重复代码带来的额外Gas消耗。

总结

Gas计费是区块链智能合约执行中的重要机制,通过控制流图分析,可以帮助理解和优化智能合约的Gas消耗。结合具体操作和优化策略,可以有效地降低智能合约的执行成本,提高运行效率。

6 合约执行事务流程

alt

从用户发起交易请求到交易完成被区块链网络记录:

  1. 用户发起交易请求

    • 用户通过钱包或DApp(去中心化应用)向区块链网络提交一笔交易请求。
    • 交易请求中包含调用的智能合约地址、函数名、参数、Gas上限和Gas价格等信息。
  2. 交易广播

    • 用户的交易请求通过节点被广播到整个区块链网络。
    • 所有全节点都会接收到这笔交易请求。
  3. 交易验证

    • 节点对交易请求进行验证,包括签名验证、Nonce验证(防止重放攻击)和检查用户账户是否有足够的余额支付Gas费用。
    • 验证通过的交易被放入交易池中等待打包。
  4. 矿工打包交易

    • 矿工节点从交易池中选取若干交易进行打包。
    • 选取策略通常优先选择Gas价格较高的交易,以获得更多的手续费收入。
  5. 交易执行

    • 矿工节点在虚拟机(如以太坊的EVM)中执行交易。
    • 虚拟机按顺序执行交易中的每一条指令,并逐步扣除Gas。
    • 若交易中的Gas不足,交易会被中止并回滚,但已经消耗的Gas不会退还。
  6. 智能合约调用

    • 在交易执行过程中,合约函数被调用,执行相应的逻辑。
    • 合约调用过程中可能会涉及状态修改、事件触发、调用其他合约等操作。
    • 执行结束后,结果(包括状态变更、返回值等)被记录下来。
  7. 交易结果打包

    • 矿工将交易执行结果和状态变更打包成一个新的区块。
    • 新区块包含区块头(包含区块号、时间戳、前一区块哈希等信息)和交易列表。
  8. 区块广播

    • 新区块通过P2P网络广播给其他节点。
    • 其他节点收到新块后,对区块和其中的交易进行验证。
  9. 共识算法

    • 区块链网络使用共识算法(如PoW、PoS等)对新块进行共识验证。
    • 验证通过后,区块被添加到区块链上,交易被正式确认。
  10. 客户端确认

    • 客户端通过监听交易或区块事件,确认交易已上链。
    • 用户可以查询交易状态,查看交易是否成功、Gas消耗情况等。

流程关键点

  • Gas机制:交易执行过程中每一步操作都会消耗一定量的Gas,防止资源滥用。
  • 交易验证:确保交易的合法性,包括签名验证和账户余额检查。
  • 共识机制:通过共识算法保证区块链的去中心化和安全性。
  • 状态变更:合约调用过程中会涉及状态变更,必须确保状态变更的一致性和不可篡改性。

7 合约并发执行原理

alt

通过允许多个智能合约交易并行处理,可以显著提高系统的吞吐量和响应速度。

  1. 交易分类

    • 首先,将待处理的交易按照涉及的账户或智能合约进行分类。不同账户或合约的交易可以并发执行,而相同账户或合约的交易则需要按顺序执行以避免冲突。
  2. 依赖关系检测

    • 通过依赖关系检测算法,确定交易之间的依赖关系。依赖关系指的是交易之间存在数据读写冲突的情况。
    • 例如,交易A需要读取交易B写入的数据,则A依赖于B,需要等待B执行完毕才能执行A。
  3. 构建依赖图

    • 根据依赖关系构建一个依赖图(DAG,Directed Acyclic Graph),其中每个节点代表一个交易,边表示依赖关系。
    • DAG图确保了并发执行的正确性,即交易的执行顺序符合依赖关系。
  4. 并发执行引擎

    • 使用并发执行引擎对交易进行调度和执行。引擎根据DAG图中的依赖关系,选择可以并行执行的交易集。
    • 同时满足无依赖关系的交易可以并行执行,依赖关系中的交易按顺序执行。
  5. 状态隔离

    • 每个交易在执行过程中操作的状态(如账户余额、合约存储等)在隔离的环境中进行,以确保并行执行时不会互相影响。
    • 使用沙盒技术或事务管理机制实现状态隔离,保证数据的一致性和隔离性。
  6. 结果合并

    • 所有交易执行完毕后,将各个交易的执行结果(状态变更、事件触发等)合并到全局状态中。
    • 确保最终的全局状态一致性,即所有交易的结果都正确应用到区块链上。
  7. 共识与确认

    • 并发执行完成后,交易结果进入共识阶段,由区块链网络通过共识算法进行验证和确认。
    • 确认通过的交易结果被持久化到区块链中,完成整个并发执行流程。

流程关键点

  • 并发调度:通过依赖图调度交易执行,确保无依赖关系的交易可以并发执行。
  • 状态隔离:使用沙盒或事务管理技术,确保并行执行时的状态隔离和数据一致性。
  • 依赖检测:检测交易之间的读写依赖关系,构建依赖图以指导并发执行。

并发执行的优势

  • 提高吞吐量:并发执行可以显著提高区块链网络的交易处理能力,增加每秒交易处理数量(TPS)。
  • 缩短确认时间:并发执行减少了交易等待时间,缩短了交易确认所需的时间,提高了用户体验。
  • 优化资源利用:并发执行可以更高效地利用节点的计算资源,提高区块链系统的整体性能。

挑战与解决方案

  • 数据冲突:需要有效的依赖关系检测和冲突解决机制,避免并发执行时的数据冲突。
  • 隔离与一致性:确保并发执行环境中的状态隔离和最终的一致性,保证数据的准确性和可靠性。
  • 复杂性管理:并发执行引擎的设计和实现较为复杂,需要处理多种并发场景和异常情况。

通过上述原理和流程,可以有效地实现智能合约的并发执行,提高区块链系统的性能和可扩展性。

获取更多干货内容,记得关注我哦。

本文由 mdnice 多平台发布

相关文章:

智能合约

06-智能合约 0 啥是智能合约&#xff1f; 定义 智能合约&#xff0c;又称加密合约&#xff0c;在一定条件下可直接控制数字货币或资产在各方之间转移的一种计算机程序。 角色 区块链网络可视为一个分布式存储服务&#xff0c;因为它存储了所有交易和智能合约的状态 智能合约还…...

【机器学习】分类器

在机器学习(Machine Learning&#xff0c;ML)中&#xff0c;分类器泛指算法或模型&#xff0c;用于将输入数据分为不同的类别或标签。分类器是监督学习的一部分&#xff0c;它依据已知的数据集中的特征和标签进行训练&#xff0c;并根据这些学习到的知识对新的未标记数据进行分…...

ASP 快速参考

ASP 快速参考 概述 ASP&#xff08;Active Server Pages&#xff09;是一种由微软开发的服务器端脚本环境&#xff0c;用于动态生成交互性网页。它允许开发者结合HTML、VBScript或JScript脚本语言来创建和运行动态网页或Web应用程序。本快速参考将提供ASP的基础知识、常用内置…...

支持向量机算法:原理、实现与应用

摘要&#xff1a; 本文深入探讨支持向量机&#xff08;Support Vector Machine&#xff0c;SVM&#xff09;算法&#xff0c;详细阐述其原理、数学模型、核函数机制以及在分类和回归问题中的应用方式。通过以 Python 和 C# 为例&#xff0c;展示 SVM 算法在不同编程环境下的具体…...

蓝桥杯分治

P1226 【模板】快速幂 题目描述 给你三个整数 &#x1d44e;,&#x1d44f;,&#x1d45d;a,b,p&#xff0c;求 &#x1d44e;&#x1d44f; mod &#x1d45d;abmodp。 输入格式 输入只有一行三个整数&#xff0c;分别代表 &#x1d44e;,&#x1d44f;,&#x1d45d;a,b,p。…...

群控系统服务端开发模式-应用开发-邮件工厂结构封装

首先在系统根目录下extend文件夹下创建邮件工厂文件夹并更名叫Mail。 一、邮件发送父类 在Mail目录下创建邮件发送父类并更名为MailSenderInterface.php&#xff0c;代码如下 <?php /*** 邮件发送父类* User: 龙哥三年风水* Date: 2024/12/5* Time: 14:22*/ namespace Ma…...

COCO数据集理解

COCO&#xff08;Common Objects in Context&#xff09;数据集是一个用于计算机视觉研究的广泛使用的数据集&#xff0c;特别是在物体检测、分割和图像标注等任务中。COCO数据集由微软研究院开发&#xff0c;其主要特点包括&#xff1a; 丰富的标签&#xff1a;COCO数据集包含…...

数据结构与算法学习笔记----堆

数据结构与算法学习笔记----堆 author: 明月清了个风 first publish time: 2024.12.2 revised: 2024.12.3 - 例题标题错误&#xff0c;已修改。 ps⛹从这里开始调整了文章结构&#xff0c;先讲解算法和数据结构基本原理&#xff0c;再给出例题&#xff0c;针对例题中的应用再…...

在玩“吃鸡”的时候游戏崩溃要如何解决?游戏运行时崩溃是什么原因?

“吃鸡”游戏崩溃问题深度解析与解决方案&#xff1a;原因、修复与预防 在紧张刺激的“吃鸡”&#xff08;即《绝地求生》&#xff09;游戏中&#xff0c;突然遭遇游戏崩溃无疑会让玩家倍感沮丧。作为一名经验丰富的软件开发从业者&#xff0c;我深知游戏崩溃可能由多种因素引…...

AndroidAutoSize实战教程:今日头条屏幕适配方案详解

如何在项目中结合 AndroidAutoSize 来进行今日头条屏幕适配&#xff0c;我会具体讲解如何用 AndroidAutoSize 实现屏幕适配&#xff0c;并结合 Kotlin 代码举例分析。 通过 AndroidAutoSize 库来实现屏幕适配&#xff0c;确保在不同的屏幕尺寸、分辨率、密度下&#xff0c;应用…...

学习threejs,通过设置纹理属性来修改纹理贴图的位置和大小

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️Texture 贴图 二、&#x1…...

图生3d 图生全景 学习笔记

目录 Aluciddreamer ZoeDepth 会自动下载模型&#xff1a; 图生全景图SD-T2I-360PanoImage&#xff1a; Aluciddreamer GitHub - luciddreamer-cvlab/LucidDreamer: Official code for the paper "LucidDreamer: Domain-free Generation of 3D Gaussian Splatting Sce…...

Delphi 实现键盘模拟、锁定键盘,锁定鼠标等操作

Delphi 模拟按键的方法 SendMessageA 说明: 调用一个窗口的窗口函数&#xff0c;将一条消息发给那个窗口。除非消息处理完毕&#xff0c;否则该函数不会返回SendMessage所包含4个参数: 1. hwnd 32位的窗口句柄窗口可以是任何类型的屏幕对象&#xff0c;因为Win32能够维护大多数…...

6. 一分钟读懂“抽象工厂模式”

6.1 模式介绍 书接上文&#xff0c;工厂方法模式只能搞定单一产品族&#xff0c;遇到需要生产多个产品族时就歇菜了。于是&#xff0c;在需求的“花式鞭策”下&#xff0c;程序员们再次绷紧脑细胞&#xff0c;创造出了更强大的抽象工厂模式&#xff0c;让工厂一次性打包多个产品…...

(四)lerobot开源项目的主从臂的远程操作(带相机)(操作记录)

目录 《项目简介》 一、​B站视频参考&#xff08;推荐&#xff09; 二、确定两个usb相机的端口号 三、远程操作&#xff08;带相机&#xff09; 四、遇到问题 《项目简介》 项目地址&#xff1a;GitHub - huggingface/lerobot: &#x1f917; LeRobot: Making AI for Ro…...

离线安装ollama到服务器

搜了很多教程不满意,弄了半天才弄好&#xff0c;这里记录下&#xff0c;方便以后的人用&#xff0c;那个在线下载太慢&#xff0c;怕不是得下载到明年。 一.从官网下在liunx版的tgz安装包 Releases ollama/ollama (github.com) 查看自己的服务器信息&#xff08;参考 https:/…...

Vue前端开发-多级路由配置

在Vue 路由数组中&#xff0c;允许配置多级的路由对象结构&#xff0c;可以是二级、三级或者更多级别&#xff0c;最大级别原则上没有限制&#xff0c;但通常最大的是三或四级&#xff0c;这种路由结构&#xff0c;称之为多级路由。 例如&#xff1a;一级路由地址/list&#x…...

Yocto bitbake and codeSonar

1 mdm 1.1 屏蔽mdm sysvinit的console输出 - uboot传入参数的时候传入consolenull&#xff0c;这样Linux启动信息没有了 - 还需要在Linux配置中去掉Support for console on AMBA serial port - 文件系统/etc/inittab文件里注释掉::respawn:/sbin/getty -L ttyS000 115200 vt100…...

sheng的学习笔记-【中】【吴恩达课后测验】Course 5 -序列模型 - 第二周测验 - 自然语言处理与词嵌入

课程5_第2周_测验题 目录 第一题 1.假设你为10000个单词学习词嵌入&#xff0c;为了捕获全部范围的单词的变化以及意义&#xff0c;那么词嵌入向量应该是10000维的。 A. 【  】正确 B. 【  】错误 答案&#xff1a; B.【 √ 】错误 第二题 2.什么是t-SNE&#xff1f…...

数字图像处理内容详解

1.对比度 最大亮度 / 最小亮度 2.邻域 m邻接&#xff1a;对于像素p和q&#xff0c;如果p和q四临接&#xff0c;或p和q八临接且两者的四邻域的交集为空 通路&#xff1a;如果俩点全部是K邻接&#xff08;K代表4&#xff0c;8&#xff0c;m&#xff09;&#xff0c;则说明存在K…...

python通过ODBC连接神通数据库

1、安装神通数据库 2、安装python 3、安装pyodbc pip3 install pyodbc-5.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl 注&#xff1a;pyodbc要和python版本相对应 4、安装unixodbc 5、配置神通数据库ODBC数据源 6、示例代码如下 #!/usr/bin/python…...

QNX的PPS发布/订阅模型

参考资料: QNX官方文档 以下摘自官网介绍: TheQNX NeutrinoPersistent Publish/Subscribe (PPS) service is a small, extensible publish/subscribe service that offers persistence across reboots. It’s designed to provide a simple and easy-to-use solution for b…...

Ubuntu——extrepo添加部分外部软件源

extrepo 是一个用于 Ubuntu 和其他基于 Debian 的系统的工具&#xff0c;它的主要作用是简化和管理外部软件源&#xff08;repositories&#xff09;的添加和更新。通过使用 extrepo&#xff0c;用户可以方便地添加、删除和管理第三方软件源&#xff0c;而不需要手动编辑源列表…...

java基础教程第16篇( 正则表达式)

Java 正则表达式 正则表达式定义了字符串的模式。 正则表达式可以用来搜索、编辑或处理文本。 正则表达式并不仅限于某一种语言&#xff0c;但是在每种语言中有细微的差别。 Java 提供了 java.util.regex 包&#xff0c;它包含了 Pattern 和 Matcher 类&#xff0c;用于处理正…...

【Shell 脚本实现 HTTP 请求的接收、解析、处理逻辑】

以下是一个实现客户端对 Shell HTTP 服务发起 POST 请求并传入 JSON 参数的完整示例。Shell 服务会解析收到的 JSON 数据&#xff0c;根据内容执行操作。 服务端脚本&#xff1a;http_server.sh 以下脚本使用 netcat (nc) 来监听 HTTP 请求&#xff0c;并通过 jq 工具解析 JSO…...

Leetcode 每日一题 290.单词规律

目录 一、问题分析 二、解题思路 三、代码实现 四、复杂度分析 五、总结 在编程的世界里&#xff0c;我们常常会遇到各种有趣的字符串匹配问题。今天要探讨的就是这样一个问题&#xff1a;给定一种规律 pattern 和一个字符串 s&#xff0c;判断 s 是否遵循与 pattern 相同…...

图像滤波和卷积的不同及MATLAB应用实例

滤波与卷积在图像处理中都是非常重要的运算&#xff0c;但它们有着明显的区别。以下是滤波与卷积的主要不同点&#xff0c;并附带一个MATLAB实例来展示两者在图像处理中的效果差异。 一、滤波与卷积的不同 定义与目的&#xff1a; 1&#xff09;滤波&#xff1a;滤波是一种信…...

【AI模型对比】AI新宠Kimi与ChatGPT的全面对比:技术、性能、应用全揭秘

文章目录 Moss前沿AI技术背景Kimi人工智能的技术积淀ChatGPT的技术优势 详细对比列表模型研发Kimi大模型的研发历程ChatGPT的发展演进 参数规模与架构Kimi大模型的参数规模解析ChatGPT的参数体系 模型表现与局限性Kimi大模型的表现ChatGPT的表现 结论&#xff1a;如何选择适合自…...

详细解读CMA实验室认可

CMA实验室认可&#xff0c;即中国计量认证&#xff08;China Metrology Accreditation&#xff09;的实验室资质认定&#xff0c;以下是对其的详细解读&#xff1a; 一、定义与目的 CMA认证是经省级以上人民政府计量行政部门对实验室的计量检定、测试能力和可靠性考核合格后进…...

H5与支付宝小程序通信,调起扫一扫

1.public/index.html加入代码 <script>if (navigator.userAgent.indexOf(AliApp) > -1) {document.writeln(<script src"https://appx/web-view.min.js" > < / script>);}window.$my my </script>2.vue其他具体页面加入代码 metho…...

Lighthouse(灯塔)—— Chrome 浏览器性能测试工具

1.认识 Lighthouse Lighthouse 是 Google 开发的一款开源性能测试工具&#xff0c;用于分析网页或 Web 应用的性能、可访问性、最佳实践、安全性以及 SEO 等关键指标。开发人员可以通过 Lighthouse 快速了解网页的性能瓶颈&#xff0c;并基于优化建议进行改进。 核心功能&…...

深入浅出机器学习中的梯度下降算法

大家好&#xff0c;在机器学习中&#xff0c;梯度下降算法&#xff08;Gradient Descent&#xff09;是一个重要的概念。它是一种优化算法&#xff0c;用于最小化目标函数&#xff0c;通常是损失函数。梯度下降可以帮助找到一个模型最优的参数&#xff0c;使得模型的预测更加准…...

AIGC 012-Video LDM-更进一步,SD作者将LDM扩展到视频生成任务!

AIGC 012-Video LDM-Stable Video diffusion前身&#xff0c;将LDM扩展到视频生成任务&#xff01; 文章目录 0 论文工作1论文方法实验结果 0 论文工作 Video LDM作者也是Stable diffusion的作者&#xff0c;作者在SD的架构上进行扩展&#xff0c;实现了视频的生成。后续在Vid…...

Rust常用命令总结

安装Rust 检查并更新Ubuntu的软件包 $ sudo apt update $ sudo apt upgrade安装相关依赖&#xff1a;安装GCC、G、MAKE、curl $ sudo apt install build-essential $ sudo apt install curl安装Rust $ curl --proto https --tlsv1.2 -sSf https://sh.rustup.rs | sh执行命令…...

docker部署RustDesk自建服务器

客户端&#xff1a; Releases rustdesk/rustdesk GitHub 服务端&#xff1a; 项目官方地址&#xff1a;GitHub - rustdesk/rustdesk-server: RustDesk Server Program 1、拉取RustDesk库 docker pull rustdesk/rustdesk-server:latest 阿里云库&#xff1a; docker pu…...

QT4和 QT5 槽函数连接的区别

正常连接方式 //QT4官方用列QLabel *label new QLabel;QScrollBar *scrollBar new QScrollBar;QObject::connect(scrollBar, SIGNAL(valueChanged(int)),label, SLOT(setNum(int)));//QT5官方用列QLabel *label new QLabel;QLineEdit *lineEdit new QLineEdit;QObject::c…...

【C++】入门【六】

本节目标 一、继承的概念及定义 二、基类和派生类对象赋值转换 三、继承中的作用域 四、派生类的默认成员函数 五、继承与友元 六、继承与静态成员 七、复杂的菱形继承及菱形虚拟继承 八、继承的总结和反思 九、笔试面试题 一、继承的概念及定义 1.继承的概念 继承是面向对象…...

Ansible 运维工具

安装 apt install ansible /etc/ansible/hosts , 指定密码或密钥访问分组机器 [k8s_masters] master0.c0.k8s.sb[k8s_nodes] node0.c0.k8s.sb node1.c0.k8s.sb[k8s:children] k8s_masters k8s_nodes[k8s_masters:vars] ansible_ssh_usersbadmin ansible_ssh_pass"***&q…...

【分布式】分布式缓存

一、什么是分布式缓存 分布式缓存是一种将缓存数据存储在多个节点上的缓存方案。它通过将数据分散存储在多个节点的内存中&#xff0c;以提高系统的读取性能、降低数据库压力和提高系统可扩展性。 二、分布式缓存的优点 优点明细提高性能&#xff1a;分布式缓存可以将数据缓…...

uni-app简洁的移动端登录注册界面

非常简洁的登录、注册界面模板&#xff0c;使用uni-app编写&#xff0c;直接复制粘贴即可&#xff0c;无任何引用&#xff0c;全部公开。 废话不多说&#xff0c;代码如下&#xff1a; login.vue文件 <template><view class"content"><view class&quo…...

传奇996_47——前端ui

方式一&#xff1a; 后端写ui&#xff0c;前端通过触发函数进行截取。然后获取标签名进行补充或附加动画 这种方式很好用。 问题1&#xff1a;获取不到标签名&#xff0c;标签名就是标签id&#xff0c;当id数字时不需要处理即可直接获取到&#xff0c;但是id如果时汉字就会获取…...

nlp培训重点

1. SGD梯度下降公式 当梯度大于0时&#xff0c;变小&#xff0c;往左边找梯度接近0的值。 当梯度小于0时&#xff0c;减去一个负数会变大&#xff0c;往右边找梯度接近0的值&#xff0c;此时梯度从负数到0上升 2.Adam优化器实现原理 #coding:utf8import torch import torch.n…...

ARM A32多数据处理汇编指令理解分享

ARM A32多数据处理汇编指令理解分享 1 多数据存储指令1.1 push指令1.2 STMFD/STMDB指令1.3 STMED/STMDA指令1.4 STMFA/STMIB指令1.5 STMEA/STMIA指令 2 多数据加载指令2.1 pop指令2.2 LDMFD/LDMIA指令2.3 LDMFA/LDMDA指令2.4 LDMEA/LDMDB指令2.5 LDMED/LDMIB指令 在ARM A32多数…...

【人工智能】Transformers之Pipeline(二十七):蒙版生成(mask-generation)

​​​​​​​ 目录 一、引言 二、蒙版生成&#xff08;mask-generation&#xff09; 2.1 概述 2.2 facebook/sam-vit-base 2.3 pipeline参数 2.3.1 pipeline对象实例化参数 2.3.2 pipeline对象使用参数 2.3.3 pipeline对象返回参数 2.4 pipeline实战 2.5 模型排…...

数据挖掘之逻辑回归

逻辑回归&#xff08;Logistic Regression&#xff09;是数据挖掘中一种经典且广泛应用的算法&#xff0c;主要用于解决分类问题。尽管名字中带有“回归”&#xff0c;它的核心目标却是预测离散的类别&#xff0c;而不是连续的数值。逻辑回归凭借其简单、高效、易于解释的特性&…...

PH热榜 | 2024-12-05

1. Oopsie 标语&#xff1a;用AI和会话回放调试Flutter和React Native应用 介绍&#xff1a;Zipy推出的Oopsie是一款你唯一需要的AI赋能移动端调试工具&#xff0c;它能提供▶️会话回放、&#x1f916;错误监控、&#x1f4a1;AI生成的概要分析&#xff0c;以及&#x1f525…...

docker-常用应用部署dockerfile模板

文章目录 概述Springboot-Djava.security.egdfile:/dev/./urandom参数说明 vue应用部署nginx.conf配置Dockerfile 概述 本文列举了Java开发中常用如SpringBoot、Vue前端等类型的应用Docker部署所需的DockerFile Springboot FROM anapsix/alpine-java:8_server-jre_unlimited…...

LabVIEW中“this VI‘s owning library is missing”错误及解决

问题描述 当加载或打开一个VI时&#xff0c;如果其所属的项目库未加载到内存&#xff0c;LabVIEW将提示错误&#xff1a;“this VIs owning library is missing”&#xff08;该VI的所属库不存在&#xff09;。 该问题通常发生在以下情况下&#xff1a; 项目库文件丢失或路径…...

【算法】棋盘覆盖问题源代码及精简版

目录 一、题目 二、样例 三、示例代码 四、精简代码 五、总结 对于棋盘覆盖问题的解答和优化。 一、题目 输入格式&#xff1a; 第一行&#xff0c;一个整数n&#xff08;棋盘n*n&#xff0c;n确保是2的幂次&#xff0c;n<64&#xff09; 第二行&#xff0c;两个整数…...

剖析kubernetes service的IP能否在宿主机中ping通

文章目录 前言一、serviceIP是怎么产生的二、宿主机中ping serviceIP地址1.ping示例2.为什么ping不通剖析2.1.封装及解封装过程2.2.ICMP报文以太网数据帧格式2.3.原因 三、ping不通svcIP是否跟iptables规则有关&#xff1f;四、为什么ipvs的的clusterIP类型的service能够ping通…...