基于KZG多项式承诺方案的RLN
1. 引言
RLN——Rate-Limiting Nullifier为PSE团队主导的项目,源自:
- Barry White Hat 2019年博客 Semaphore RLN, rate limiting nullifier for spam prevention in anonymous p2p setting
RLN(Rate-Limiting Nullifier)是一种zk小工具/协议,可为匿名环境启用垃圾邮件预防机制。旨在:
- 在每个epoch使用KZG多项式承诺
- 为每个message使用KZG opening
- 为单个message生成proof的时间应小于1ms,几乎改进约1000倍
- 使用RLN作为垃圾邮件保护层(spam protection layer),从而具有网络层面的隐私,可用于Tor网络和以太坊validator网路
从技术层面上来说,transmitter选中某多项式 f ( X ) f(X) f(X),其中 f ( 0 ) f(0) f(0)为其想要保护的私钥,当发送某message时,实际发送的是该多项式上的某个点。
若 f ( X ) f(X) f(X)为 n n n阶多相似,则所发送的message数量上限为 n n n,transmitter若发送多于 n n n个不同的message,则其私钥将会泄露。
实际使用zkSNARK来:
- 使用membership proof,来确保transmitter对某proof of stake进行了承诺
- 使用message proof,来证明其包含了多项式上的某个点。
当前的问题在于,为单个message来生成proof需约1s,在很多场景下并不实用——如Tor网路、Validator网络、手机环境等。需要利用KZG多项式承诺和KZG opening方案,将单个message证明时间由1s提高到1ms。
具体场景为:
- 某指定epoch e e e和message数量上限(message limit) n n n,用户创建某degree为 n n n的多项式,满足 f ( 0 ) f(0) f(0)为该用户的私钥 p k pk pk。
- 可信设置(trusted setup):
- 对于message数量上限为 n n n的场景,需要shared common reference: g , g α , g α 2 , ⋯ , g α n g,g^{\alpha}, g^{\alpha^2},\cdots,g^{\alpha^n} g,gα,gα2,⋯,gαn
- 对于非匿名版本:需为每个message limit执行可信设置。
- 对于匿名版本:可使用现有的reference。
- 对于message数量上限为 n n n的场景,需要shared common reference: g , g α , g α 2 , ⋯ , g α n g,g^{\alpha}, g^{\alpha^2},\cdots,g^{\alpha^n} g,gα,gα2,⋯,gαn
承诺是指:
- 用户为某epoch选中某 n n n-degree多项式,最多可发送 n n n个message,其中 f ( 0 ) f(0) f(0)为用户私钥 p k pk pk。
- 使用reference string用户计算KZG多项式承诺 C = g f ( α ) C=g^{f(\alpha)} C=gf(α)。
- 在特定epcoh,用户分享该多项式承诺 C C C。
- 为发送某message,用户分享 ( f ( m ) , g ψ m ( α ) ) (f(m), g^{\psi_m(\alpha)}) (f(m),gψm(α)),其中 m m m为message的哈希值, g ψ m ( α ) g^{\psi_m(\alpha)} gψm(α)为相应的opening proof,其中 ψ m ( x ) = f ( x ) − f ( m ) x − m \psi_m(x)=\frac{f(x)-f(m)}{x-m} ψm(x)=x−mf(x)−f(m)。
对某message的evaluation为:
- 计算message的哈希值: m m m
- RLN message为: m , f ( m ) , g ψ m ( α ) m,f(m),g^{\psi_m(\alpha)} m,f(m),gψm(α)
- Verifier具有该epoch的多项式承诺值 g f ( α ) g^{f(\alpha)} gf(α)
- Verifier对message进行evaluate:
e ( g f ( α ) , g ) = ? e ( g ψ m ( α ) , g α ⋅ g − m ) ⋅ e ( g , g ) f ( m ) e(g^{f(\alpha)},g)\overset{\text{?}}{=}e(g^{\psi_m(\alpha)},g^{\alpha}\cdot g^{-m})\cdot e(g,g)^{f(m)} e(gf(α),g)=?e(gψm(α),gα⋅g−m)⋅e(g,g)f(m)
为此,设计了3个版本:
- Version A:具体的原型设计见:
https://github.com/Rate-Limiting-Nullifier/kzg-rln/blob/main/versionA/src/main.rs(Rust) - Version B
- Version C
这3个版本的性能对比为:【可在epoch之初缓存 e ( g f ( α ) , g ) e(g^{f(\alpha)},g) e(gf(α),g)以供之后的message verification过程中使用,因此,每个message verification仅需2次pairing运算。】
2. Version A:非匿名的最简单方案
关键点为:
- 用户的公钥为: g f ( 0 ) g^{f(0)} gf(0)
- 用户提供多项式承诺值、用户公钥以及opening proof: g f ( α ) , g ψ 0 ( α ) , g f ( 0 ) g^{f(\alpha)},g^{\psi_0(\alpha)},g^{f(0)} gf(α),gψ0(α),gf(0)
- Verifier:通过验证KZG commitment的opening,检查用户公钥 g f ( 0 ) g^{f(0)} gf(0)在所承诺的多项式上。
e ( g ψ 0 ( α ) , g α ) ⋅ e ( g , g f ( 0 ) ) = ? e ( g , g f ( α ) ) e(g^{\psi_0(\alpha)},g^{\alpha})\cdot e(g,g^{f(0)})\overset{\text{?}}{=}e(g,g^{f(\alpha)}) e(gψ0(α),gα)⋅e(g,gf(0))=?e(g,gf(α))
3. Version B:借助ZKP实现的匿名方案
ZKP针对的场景为:
- public信息有: g f ( α ) , n g^{f(\alpha)},n gf(α),n
- private信息有: f ( x ) , p k f(x),pk f(x),pk
- 约束有:
- f ( 0 ) = p k f(0)=pk f(0)=pk
- membership proof of g f ( 0 ) g^{f(0)} gf(0)
- f ( x ) = ∑ i = 0 k c i x i f(x)=\sum_{i=0}^{k}c_ix^i f(x)=∑i=0kcixi,当 i > n i>n i>n时有 c i = 0 c_i=0 ci=0
用户提供proof π \pi π和多项式承诺值 g f ( α ) g^{f(\alpha)} gf(α)。
Verifier检查proof:
verify ( π , g f ( α ) , root , n ) → t r u e \text{verify}(\pi, g^{f(\alpha)},\text{root},n)\to true verify(π,gf(α),root,n)→true
4. Version C:为多个epoch承诺 使用multiple多项式承诺 的匿名方案
multiple多项式承诺方案为:
- 用户为 m m m个epoch创建 m m m个degree为 n n n的多项式,然后对这些多项式同时承诺。
- 对于某epoch,对应的 n n n-degree多项式为 f e ( x ) f_e(x) fe(x),将其表示为 f e ( x ) = ∑ i = 0 n c i ( e ) ⋅ x i f_e(x)=\sum_{i=0}^{n}c_i(e)\cdot x^i fe(x)=∑i=0nci(e)⋅xi,从而有:
f 1 ( x ) = c 0 ( 1 ) + c 1 ( 1 ) x + c 2 ( 1 ) x 2 + ⋯ + c n ( 1 ) x n f_1(x)=c_0(1)+c_1(1)x+c_2(1)x^2+\cdots+c_n(1)x^n f1(x)=c0(1)+c1(1)x+c2(1)x2+⋯+cn(1)xn
f 2 ( x ) = c 0 ( 2 ) + c 1 ( 2 ) x + c 2 ( 2 ) x 2 + ⋯ + c n ( 2 ) x n f_2(x)=c_0(2)+c_1(2)x+c_2(2)x^2+\cdots+c_n(2)x^n f2(x)=c0(2)+c1(2)x+c2(2)x2+⋯+cn(2)xn
f 3 ( x ) = c 0 ( 3 ) + c 1 ( 3 ) x + c 2 ( 3 ) x 2 + ⋯ + c n ( 3 ) x n f_3(x)=c_0(3)+c_1(3)x+c_2(3)x^2+\cdots+c_n(3)x^n f3(x)=c0(3)+c1(3)x+c2(3)x2+⋯+cn(3)xn
⋮ \vdots ⋮
f m ( x ) = c 0 ( m ) + c 1 ( m ) x + c 2 ( m ) x 2 + ⋯ + c n ( m ) x n f_m(x)=c_0(m)+c_1(m)x+c_2(m)x^2+\cdots+c_n(m)x^n fm(x)=c0(m)+c1(m)x+c2(m)x2+⋯+cn(m)xn - 用户为每个 c i ( e ) c_i(e) ci(e)创建多项式承诺
对应ZKP针对的场景为:
- public信息有: g c i ( α ) , n , m g^{c_i(\alpha)},n,m gci(α),n,m
- private信息有: c i ( e ) , p k c_i(e),pk ci(e),pk
- 约束有:
- 对于每个 e ≤ m e\leq m e≤m,有 c 0 ( e ) = p k c_0(e)=pk c0(e)=pk
- f e ( x ) = ∑ i = 0 k c i ( e ) x i f_e(x)=\sum_{i=0}^{k}c_i(e)x^i fe(x)=∑i=0kci(e)xi,当 i > n i>n i>n,有 c i ( e ) = 0 c_i(e)=0 ci(e)=0
- membership proof of g f e ( 0 ) g^{f_e(0)} gfe(0)
- 多项式承诺值 g c i ( α ) g^{c_i(\alpha)} gci(α)是正确的
验证过程为:
- 对于注册阶段:
- Verifier检查proot:
verify ( π , g c 0 ( α ) , ⋯ , g c n ( α ) , root , n , m ) → t r u e \text{verify}(\pi, g^{c_0(\alpha)},\cdots,g^{c_n(\alpha)},\text{root},n,m)\to true verify(π,gc0(α),⋯,gcn(α),root,n,m)→true
- Verifier检查proot:
- 对于每个epoch e e e:
- 用户提交:
-
{ ( g c 0 ( e ) , g ϕ 0 , e ( α ) ) , ( g c 1 ( e ) , g ϕ 1 , e ( α ) ) , ⋯ , ( g c n ( e ) , g ϕ n , e ( α ) ) } \{(g^{c_0(e)},g^{\phi_{0,e}(\alpha)}),(g^{c_1(e)},g^{\phi_{1,e}(\alpha)}),\cdots,(g^{c_n(e)},g^{\phi_{n,e}(\alpha)})\} {(gc0(e),gϕ0,e(α)),(gc1(e),gϕ1,e(α)),⋯,(gcn(e),gϕn,e(α))},其中 ϕ ( i , e ) ( x ) = c i ( x ) − c i ( e ) x − e \phi_{(i,e)}(x)=\frac{c_i(x)-c_i(e)}{x-e} ϕ(i,e)(x)=x−eci(x)−ci(e)
-
为检查 g f e ( α ) = ∏ i = 0 n g c i ( e ) α i g^{f_e(\alpha)}=\prod_{i=0}^{n}g^{c_i(e)\alpha^i} gfe(α)=∏i=0ngci(e)αi,Verifier检查:
e ( g , g f e ( α ) ) = e ( g , ∏ i = 0 n g c i ( e ) α i ) = ? ∏ i = 0 n e ( g c i ( e ) , g α i ) e(g,g^{f_e(\alpha)})=e(g,\prod_{i=0}^{n}g^{c_i(e)\alpha^i})\overset{\text{?}}{=}\prod_{i=0}^{n}e(g^{c_i(e)},g^{\alpha^i}) e(g,gfe(α))=e(g,∏i=0ngci(e)αi)=?∏i=0ne(gci(e),gαi)- 对于 i = 0 , ⋯ , n i=0,\cdots,n i=0,⋯,n,借助同态属性,Verifier检查用户在多项式承诺值中隐藏的系数:
e ( g c i ( α ) , g ) = ? e ( g ϕ i , e ( α ) , g α ⋅ g − e ) ⋅ e ( g , g c i ( e ) ) e(g^{c_i(\alpha)},g)\overset{\text{?}}{=}e(g^{\phi_{i,e}(\alpha)},g^{\alpha}\cdot g^{-e})\cdot e(g,g^{c_i(e)}) e(gci(α),g)=?e(gϕi,e(α),gα⋅g−e)⋅e(g,gci(e))
其中 ϕ i , e ( x ) = c i ( x ) − c i ( e ) x − e \phi_{i,e}(x)=\frac{c_i(x)-c_i(e)}{x-e} ϕi,e(x)=x−eci(x)−ci(e)
- 对于 i = 0 , ⋯ , n i=0,\cdots,n i=0,⋯,n,借助同态属性,Verifier检查用户在多项式承诺值中隐藏的系数:
-
然后:
- 计算message的哈希值: m m m
- RLN message有: m , f ( m ) , g ψ m ( α ) m,f(m),g^{\psi_m(\alpha)} m,f(m),gψm(α)
- Verifier evaluate the message:
e ( g f ( α ) , g ) = ? e ( g ψ m ( α ) , g α ⋅ g − m ) ⋅ e ( g , g ) f ( m ) e(g^{f(\alpha)},g)\overset{\text{?}}{=}e(g^{\psi_m(\alpha)},g^{\alpha}\cdot g^{-m})\cdot e(g,g)^{f(m)} e(gf(α),g)=?e(gψm(α),gα⋅g−m)⋅e(g,g)f(m)
-
- 用户提交:
参考资料
[1] 2023年4月 ethresearch和zkresearch联合发布 RLN on KZG polynomial commitment scheme [cross-posted]
相关文章:
基于KZG多项式承诺方案的RLN
1. 引言 RLN——Rate-Limiting Nullifier为PSE团队主导的项目,源自: Barry White Hat 2019年博客 Semaphore RLN, rate limiting nullifier for spam prevention in anonymous p2p setting RLN(Rate-Limiting Nullifier)是一种…...
《站在巨人的肩膀上学习Java》
Java从诞生距今已经有28年了,在这段时间里,随着Java版本的不断迭代,Java新特性的不断出现,使得Java被使用的越来越广泛。在工程界Java语言一直是大家最喜欢的语言之一,Java一直排行在编程语言热门程度的前3名。 可想而…...
敏捷ACP.敏捷估计与规划.Mike Cohn.
第一部分 传统规划失败的原因 vs 敏捷规划有效的原因 传统的项目规划方式往往会让我们失望。要回答-一个 新产品的范围/进度/资源的组合问题,传统规划过程不一定会产生令人非常满意的答案和最终产品。以下- -些论据可以支持这个结论: ●大约2/3的项目会显著超…...
[创新工具和方法论]-01- DOE课程基础知识
文章目录 1.DOE实验设计的介绍1.1 什么是实验设计DOE?1.2 DOE的优势有哪些?1.3 如何开展DoE研究?步骤 2.DOE实验培训3.数据分析步骤4.实验的随机化5.偏差6.R方 相关系数假设检验 7.三因子二水平全因子设计 1.DOE实验设计的介绍 实验设计是一种安排实验和分析实验数…...
LeetCode-1033. 移动石子直到连续
题目链接 LeetCode-1033. 移动石子直到连续 题目描述 题解 题解一(Java) 作者:仲景 这题目挺难懂的,得画画图才能更好的理解 这也是LeetCode的尿性,习惯了,非得整这种别人看不懂的鸟语 你可以这样理解&a…...
JVM调优入门指南:掌握步骤、参数和场景
前言 作为Java开发者,我们经常需要优化应用的性能,其中JVM调优是非常重要的一部分。在本文中,我们将介绍JVM调优的一般步骤和方法,了解JVM调优参数,如堆大小、新生代比例、GC算法等参数的作用和配置方式,并…...
基于JSP+MySQL的跳蚤市场网站设计与开发
摘 要 在当今社会,网络信息已经不是什么很陌生的词汇,每天都在这个信息时代里生活着并且享受着它带来的与众不同。网络购物可以说是飞速发展的,这种购物方式逐渐的影响着人们的衣食住行。所以利用计算机实现 跳蚤市场网站设计与开发势在必行。本网站是一个校园的跳蚤市场网…...
内网穿透NPS和宝塔Nginx配合使用,开启SSL访问本地局域网网络
并非为了教学,仅供自己记录,方便下次用。所以内容不会刻意花时间写的很细节详细。 1. 服务器NPS配置 NPS install安装后,配置文件会在其他位置,通过是 /etc/nps/nps.conf目录。 找到进行修改,主要修改的是http_proxy_p…...
ToLua框架
ToLua 是一个用于在 Unity 中为 Lua 提供 C# 语言绑定的框架。通过 ToLua,你可以方便地将 C# 代码暴露给 Lua 脚本,并在 Lua 脚本中调用 C# 类、方法和属性。 更新流程 原理:使用AssetBundle进行资源的更新,而由于lua运行时才编…...
Golang-常见数据结构Map
Map map 是一种特殊的数据结构:一种元素对(pair)的无序集合,pair 的一个元素是 key,对应的另一个元素是 value,所以这个结构也称为关联数组或字典。这是一种快速寻找值的理想结构:给定 key&…...
基于空间矢量脉宽调制(SVPWM)的并网逆变器研究(Simulink)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
介绍tcpdump在centos中的使用方法
tcpdump是一款强大的命令行数据包分析器,支持多种过滤和抓包参数。下面将介绍tcpdump的常用抓包参数。当需要监控CentOS系统的网络流量或者进行网络故障排查时,可以使用tcpdump来捕获数据包并进行分析。 下面介绍在CentOS中使用tcpdump的方法࿱…...
机器学习实战:Python基于DT决策树模型进行分类预测(六)
文章目录 1 前言1.1 决策树的介绍1.2 决策树的应用 2 Scikit-learn数据集演示2.1 导入函数2.2 导入数据2.3 建模2.4 评估模型2.5 可视化决策树2.6 优化模型2.7 可视化优化模型 3 讨论 1 前言 1.1 决策树的介绍 决策树(Decision Tree,DT)是一…...
操作系统之进程同异步、互斥
引入 异步性是指,各并发执行的进程以各自独立的、不可预知的速度向前推进。 但是在一定的条件之下,需要进程按照一定的顺序去执行相关进程: 举例说明1: 举例说明2: 读进程和写进程并发地运行,由于并发必然导致异步性…...
你了解这2类神经性皮炎吗?常常预示着这5类疾病!
神经性皮炎属于慢性皮肤病,患者皮肤可出现局限性苔藓样变,同时伴有阵发性瘙痒。神经性皮炎易发生在颈部两侧和四肢伸侧,中年人是高发人群。到目前为止神经性皮炎病因还并不是很明确,不过一部分病人发病前常常出现精神神经方面异常…...
二叉搜索树【Java】
文章目录 二叉搜索树的性质二叉搜索树的操作遍历查找插入删除 二叉搜索树又称为二叉排序树,是一种具有一定性质的特殊的二叉树; 二叉搜索树的性质 若它的左子树不为空,则左子树上结点的值均小于根节点的值; 若它的右子树不为空&a…...
二叉树的遍历方式
文章目录 层序遍历——队列实现分析Java完整代码 先序遍历——中左右分析递归实现非递归实现——栈实现 中序遍历——左中右递归实现非递归实现——栈实现 后续遍历——左右中递归实现非递归实现——栈加标志指针实现 总结 层序遍历——队列实现 给你二叉树的根节点 root &…...
SpringCloud01
SpringCloud01 微服务入门案例 实现步骤 导入数据 实现远程调用 MapperScan("cn.itcast.order.mapper") SpringBootApplication public class OrderApplication {public static void main(String[] args) {SpringApplication.run(OrderApplication.class, args);}…...
SpringBoot整合Redis实现点赞、收藏功能
前言 点赞、收藏功能作为常见的社交功能,是众多Web应用中必不可少的功能之一。而redis作为一个基于内存的高性能key-value存储数据库,可以用来实现这些功能。 本文将介绍如何使用spring boot整合redis实现点赞、收藏功能,并提供前后端页面的…...
【Java入门合集】第一章Java概述
【Java入门合集】第一章Java概述 博主:命运之光 专栏:JAVA入门 学习目标 1.理解JVM、JRE、JDK的概念; 2.掌握Java开发环境的搭建,环境变量的配置; 3.掌握Java程序的编写、编译和运行; 4.学会编写第一个Java程序&#x…...
Android无线调试操作说明
1.首先通过手机机蓝牙将jackpal.androidterm-1.0.70.apk(终端模拟器)传的设备上安装 链接: https://pan.baidu.com/s/151SzEgsX0b_VTWowzfUrsA?pwdrn75 提取码: rn75 复制这段内容后打开百度网盘手机App,操作更方便哦 2.打开这个终端模拟器,输入以下命…...
什么是 Python ?聊一聊Python程序员找工作的六大技巧
最近我一直在思考换工作的事情。因此,这段时间我会看一些题目,看一些与面试相关的内容,以便更好地准备面试。我认为无论你处于什么阶段,面试中都会有技术面试环节。无论是初级职位还是高级职位,都需要通过技术面试来检…...
RabbitMQ 01 概述
什么是消息队列 进行大量的远程调用时,传统的Http方式容易造成阻塞,所以引入了消息队列的概念,即让消息排队,按照队列进行消费。 它能够将发送方发送的信息放入队列中,当新的消息入队时,会通知接收方进行处…...
面经|曹操出行供需策略运营
1.自我介绍 面试官表示看了简历之后,表示对专业能力比较放心。想了解下对于专业能力之外,关于其他方面的介绍。 2.策略运营,除了工具之外,还有哪些能力是需要具备的 回答:主要是从做项目的维度逻辑先去回答的。 分析思…...
【Python】selenium工具
目录 1. 安装 2. 测试 3. 无头浏览器 4. 元素定位 5. 页面滑动 6. 按键、填写登录表单 7. 页面切换 Selenium是Web的自动化测试工具,为网站自动化测试而开发,Selenium可以直接运行在浏览器上,它支持所有主流的浏览器,可以接…...
实验六~Web事件处理与过滤器
1. 创建一个名为exp06的Web项目,编写、部署、测试一个ServletContext事件监听器。 BookBean代码 package org.example.beans;import java.io.Serializable;/*** Created with IntelliJ IDEA.* Description:* User: Li_yizYa* Date: 2023—04—29* Time: 18:39*/ Su…...
刷题4.28
1、 开闭原则软件实体(模块,类,方法等)应该对扩展开放,对修改关闭,即在设计一个软件系统模块(类,方法)的时候,应该可以在不修改原有的模块(修改关…...
做了一年csgo搬砖项目,还清所有债务:会赚钱的人都在做这件事 !
前段時间,在网上看到一句话:有什么事情,比窮更可怕? 有人回答说:“又忙又窮。” 很扎心,却是绝大多数人的真实写照。 每天拼死拼活的996,你有算过你的時间值多少钱? 我们来算一笔…...
线性回归模型(7大模型)
线性回归模型(7大模型) 线性回归是人工智能领域中最常用的统计学方法之一。在许多不同的应用领域中,线性回归都是非常有用的,例如金融、医疗、社交网络、推荐系统等等。 在机器学习中,线性回归是最基本的模型之一&am…...
VP记录:Codeforces Round 868 (Div. 2) A~D
传送门:CF A题:A-characteristic 构造一个只有 1 , − 1 1,-1 1,−1的数组,满足乘积为 1 1 1的数对的个数为 k k k. 发现 n n n的范围很小,考虑直接暴力枚举数组中 1 1 1的个数,记为 i i i,那么对于1的所有数对来说,我们有 i ∗ ( i − 1 ) / 2 i*(i-1)/2 i∗(i−1)/2个,然后…...
北京公司注册地址多少钱一年/王通seo赚钱培训
解决引用openssl静态库libcrypto.a和libssl.a出现undefined reference to错误的问题参考文章: (1)解决引用openssl静态库libcrypto.a和libssl.a出现undefined reference to错误的问题 (2)https://www.cnblogs.com/Bo…...
网站的日志文件/磁力狗最佳搜索引擎
1、C中有两个方面体现重用: (1)面向对象的思想:继承和多态,标准类库。 (2)泛型程序设计(generic programming) 的思想: 模板机制,以及标准模板库 STL。 将一些常用的数据…...
宁波市建设工程检测协会网站/网络推广渠道和方法
在华为开发者大会2020,发布了鸿蒙操作系统HarmonyOS 2.0版本,相比去年发布的HarmonyOS 1.0版本,有了质的提升。HarmonyOS 2.0打破硬件边界,融入全场景智能生态。打造好底座,才能让鸿蒙操作系统走的更远。HarmonyOS 2.0…...
专题活动是在官方网站还是在其他网站做/企业网站推广建议
使用 Binder IPC 本页介绍了 Android O 中对 Binder 驱动程序进行的更改、提供了有关使用 Binder IPC 的详细信息,并列出了必需的 SELinux 政策。 对 Binder 驱动程序进行的更改 从 Android O 开始,Android 框架和 HAL 现在使用 Binder 互相通信。由于…...
php网站做多久/游戏推广合作
ANSA、META的二次开发均基于Python开发。本文基于ANSA的帮助文档《Introduction to Python》进行一定的扩展,希望能帮助大家快速掌握这门语言。首先来介绍下这门语言里的主要数据类型,包括:整型、浮点型、复数、布尔类型、字符串、列表、元祖…...
今天发生的国际新闻/宁波seo营销
在Simulink模型做Test Squence测试时,工程师有时候希望测试用例能按照自己期望的条件来停止或暂停仿真,这个期望的特定条件,可以是时间达到,也可以是任何能达到的特定状态。 具体实现方法如下: 1、在Test Harness测试…...