【12】智能合约开发入门
-
12-1 在线合约开发
Cloud IDE简介
基本框架
Cloud IDE是BaaS合约平台提供的在线合约开发工具
IDE是一个去中心化应用(Dapp),通过JavaScript SDK直接与区块链平台通信,进行合约部署和调用
核心功能
合约工程管理
合约编辑与编译
合约部署和调用
自动编解码
合约单步调试
合约分析
Cloud IDE入口一
BaaS平台的合约工程页面
Cloud IDE入口二
BaaS平台新手引导中的合约体验链卡片
合约工程管理
合约工程管理是左侧导航栏中第一个功能模块,提供如下功能:
- 添加文件夹
- 添加文件
- 拖拽、移动文件或文件夹
- 删除文件或文件夹
下载源代码
Cloud IDE提供“下载源代码”按钮
所有工程的源代码下载打包成contract.zip文件
本地编辑开发,备份
合约部署和调用
使用Cloud IDE开发合约的过程分为以下5步:
- 选择目标合约链
- 编译合约
- 部署合约
- 调用合约
- 调试合约
选择目标合约链
- 选择“合约体验链”,该体验链配置默认测试账户。也可以使用通过SDK创建的账户,需要填入账户名和私钥(解密后的16进制字符串,长度32 byte)
- 选择“自定义”,需要配置目标链环境的一个节点(host和端口),目前Cloud IDE仅支持通过http协议和链通信,同时填写一个部署、调用合约的账户信息,此账户必须已在目标合约链上创建完成。
编译合约
- 字节码
- 合约代码的编译结果,通过SDK可以将字节码部署到目标生产链
- 合约接口说明(ABI)
- 应用程序二进制接口(Application Binary Interface,ABI)可以理解为合约的接口说明
参数 | 说明 |
---|---|
name | 函数名称 |
type | 方法类型,包括function、constructor、fallback(缺省方法),默认为function |
constant | 布尔值,如果为true,则表示方法不会修改合约字段的状态变量 |
payable | 布尔值,表示方法是否可以接收系统转账 |
stateMutability | 状态类型,包括pure(不读取区块链状态)、view(和constant类型一样,只能查看,不会修改合约字段)、nonpayable(和payable含义一样)、payable(和payable含义一样) |
inputs | 数组,描述参数的名称和类型。 |
name | 参数名称 |
type | 参数类型 |
outputs | 和inputs一样,如果没有返回值,缺省是一个空数组 |
部署合约
- 单击“部署合约”将合约部署到目标链
- 如果合约定义了constructor方法,需要给定constructor方法的参数
- 部署成功后,可以看到合约的方法列表
调用合约
单击目标方法右侧的“调用合约”进行调用
状态变量的调用返回状态变量的值
合约方法返回如下字段:
参数 | 说明 |
---|---|
Input | 合约方法的输入数据,通常为合约方法的参数。 |
Output | 合约方法的返回值,可能是多个值,根据返回值具体类型转码显示 |
log | 如果在合约中使用了Event事件,并且事件被触发,则会在log中展示 |
日志调试合约
通过Event事件触发日志对合约内部逻辑进行调试
合约单步调试
合约调试模块可以通过一个内置的EVM虚拟机模拟器来模拟执行Solidity合约,并给出执行结果,以此达到调试合约的目的。
调试过程如下:
- 编译/部署
- 调用目标合约生成执行的交易hash
- 调试详情单击“调试”
- 单步调试
合约安全检测
合约安全检测平台通过Cloud IDE的插件方式集成到IDE功能中
- 创建任务
- 查看检测报告
- 合约统计信息
- 安全问题
开发C++合约
蚂蚁区块链平台在支持Solidity的同时,也支持C++合约语言
不同合约语言运行的虚拟机环境不同
Cloud IDE环境下solidity和C++的功能对比:
开发TEE硬件隐私合约链
目标合约链选择TEE硬件隐私合约链
目前TEE硬件隐私合约链的加密交易仅支持solidity合约语言
对于TEE硬件隐私合约链,Cloud IDE会显示TEE加密配置
通过“TEE加密配置”可选择是否“启用TEE加密”
选择自定义AES密钥,或单击“生成密钥”随机生成密钥
如果一个合约是在“启用TEE加密”情况下部署,只有AES密钥才能成功调用此合约
进而只有AES密钥才能解密调用合约的结果
12-2 本地开发
12-2-1 本地开发环境搭建
申请区块链证书
连接到区块链平台,需要以下三个相关文件和一个密码
按照本节操作说明生成证书文件,引导过程中记录相关密码,并下载自动生成的文件。
文件 | 说明 | 来源 |
---|---|---|
ca.crt | 合约链的认证CA | BaaS平台下载 |
client.key | RSA密钥 | 通过BaaS申请证书引导在线生成 |
client.crt | RSA证书,与client.key是一对 | 通过BaaS申请证书引导在线生成 |
密码 | client.key文件的解密密码 | 证书生成过程中输入 |
可以为联盟内的链或合约体验链申请证书,本节以合约体验链为例讲解操作步骤。
首先登录BaaS平台控制台,如果目标是联盟链,选择目标联盟,左侧导航栏点击联盟内的链,右侧选择区块链
如果是合约体验链,进入区块链实验室,单击合约体验链上的 开发组件及证书 > 创建证书 按钮
生成证书和密钥。BaaS平台提供“自动生成密钥和证书(密钥非托管)”和“手动生成密钥和证书”两种方式。推荐使用安全、便捷的自动生成方式。
若选择 自动生成密钥和证书(密钥非托管),需完成以下步骤:
若选择 手动生成密钥和证书,需要上传证书请求文件(如何生成“证书请求文件”见第3节)
证书创建之后,进入区块链实验室界面可以下载证书和签名证书
不再有下载私钥client.key选项
创建账户
在合约链上提交交易,需要使用一个已经在链上存在的账户。账户可以通过BaaS平台申请创建
单击合约体验链上的 更多 > 创建账户 按钮
BaaS平台提供 自动生成密钥和证书 和手动生成密钥和证书 两种方式创建账户。推荐使用安全、便捷的自动生成方式。
若选择 自动生成密钥和证书(密钥非托管),需完成以下步骤:
若选择 手动生成密钥和证书,需要填写账户名称、公钥及恢复公钥(如何生成公钥见第3节)
单击 创建账户
账户私钥文件的三种使用场景:
区块链开发工具 | ||
---|---|---|
场景一 | ChainStack Myfish | 直接使用user.key |
场景二 | JS SDK | user.pem |
场景三 | Cloud IDE 设置目标链,使用创建的账户和私钥 | 解密之后的HEX字符串,长度32字节 |
账户私钥文件user.key转换成user.pem需要执行以下openssl命令
账户私钥文件user.key为加密格式,不能用于Cloud IDE切换账户时的私钥,需要转换成32字节的解密私钥。解密方法可以使用openssl命令,或者采用蚂蚁区块链提供的JS SDK去解析user.pem
本地生成证书请求和公私钥对
“证书请求文件”生成方法一:使用OpenSSL
- 前往OpenSSL下载页面,找到1.0.2o版本并下载安装包
- 使用OpenSSL制作私钥和证书请求文件
- openssl req -newkey rsa:2048 -keyout client.key -out client.csr
在该命令执行过程中,系统会要求您填写如下信息:
- Country Name(2 letter code):使用国际标准组织(ISO)国码格式,填写2个字母的国家代号,如中国填写CN。
- State or Province Name(full name):省份,例如填写Zhejiang。
- Locality Name(eg,city):城市,例如填写Hangzhou。
- Organization Name(eg,company):组织单位,例如填写公司名的拼音。
- Organizational UnitName(eg,section):部门名称,例如填写IT Dept。
- Common Name(eg,your websites domain name):进行SSL加密的网站域名。
- Email Address:邮箱地址,选填。
- A Challenge password:选填。
- An optional company name:选填。
“证书请求文件”生成方法二:使用本地密钥服务
- 准备Java运行环境,1.7版本以上
- 下载密钥生成工具,https://baas-public.oss-cn-shanghai.aliyuncs.com/baas-crypto-tool-1.0.0.jar
- 运行命令启动密钥服务
- java -jar baas-crypto-tool-1.0.0.jar --server.port=8080
- 在浏览器中访问 http://localhost:8080/api/crypto/generateTlsKey?algo=rsa&isPkcs8=true&password=${password},生成tlskey.zip文件包
- 解压该zip包后得到client.key和client.csr(证书请求文件)
账户公钥、恢复公钥生成方法:使用本地密钥服务
- 同“证书请求文件”生成方法二,运行本地密钥服务
- 在浏览器中访问http://localhost:8080/api/crypto/generateUserKey?algo=ec&isPkcs8=true&password=${password},生成userkey.zip文件包
- 解压该.zip包后得到user.key和pub.txt。其中,user.key为账户私钥,pub.txt为账户公钥。
- 使用不同密码在浏览器中再次访问上述URL
- 解压新zip包后得到user.key和pub.txt。其中,user.key为账户恢复私钥,pub.txt为账户恢复公钥。
查看区块链节点信息
为了与合约链交互,需要获取节点的IP地址和端口号。
在BaaS平台,通过查看目标合约链详情,在区块浏览器中查看节点详情可获取链节点的IP地址和端口号。
12-2-2 本地开发
Solidity合约开发
蚂蚁链合约平台支持Solidity语言来实现合约的编写和编译
蚂蚁链提供在线工具Cloud IDE和本地solc-js编译工具
本地开发步骤:
- 下载/安装solc-js
- 合约开发
- 合约编译
合约编译工具
下载solc-js
从蚂蚁链网站获取合约编译工具solc-js安装包:alipay-solc-0.1.12.tgz
蚂蚁链对Solidity语言的支持和原生的Solidity不同,不能使用外部社区的solc-js编译工具
安装solc-js
下载并安装Node.js(推荐版本:v10.11.0)
全局安装solc-js。执行命令 npm i -g alipay-solc-0.1.12.tgz
使用solc-js
命令行语法:Usage:solcjs[options]<FILENAME>
命令选项 | 说明 | 类型 |
---|---|---|
--version | 显示版本号 | 布尔 |
--optimize | 启用字节码优化器 | 布尔 |
--bin | 十六进制合约的二进制 | 布尔 |
--abi | 合约接口说明 | 布尔 |
--standard-json | 打开标准JSON输入或输出模式 | 布尔 |
--output-dir, -o | 合约输出的目录 | 字符串 |
--help | 显示帮助信息 | 布尔 |
编译示例
- 创建名为hello.sol的solidity合约示例
- 运行以下命令行,编译hello.sol合约并得到编译字节码结果
- solcjs --bin hello.sol
- 运行以下命令行,编译hello.sol合约并得到合约接口说明(ABI)
- solcjs -- abi hello.sol
JS代码中编译合约
- 创建目录solcjs-test,执行npm init,将alipay-solc-0.1.12.tgz文件放到solc-test目录
- 运行以下命令行,在solc-test目录中安装solc-js
- npm i alipay-solc-0.1.12.tgz -save
- 代码中编译合约,创建index.js文件。内容如下:
示例
合约部署、升级、调用
在JS代码中编译Solidity合约后,得到编译字节码和合约接口说明(ABI),进而可直接使用JS SDK来部署、调用合约
solc-js工具在JS代码中默认也使用 --bin 参数编译合约得到字节码,此字节码不能直接用于合约升级,但是通过一次“本地合约部署”之后即可得到 runtime 字节码,用于合约升级使用
二进制solc编译工具同时支持 --bin -runtime 和 --bin 参数,这两个参数在编译结果上的主要差异在于,--bin参数编译字节码除了包含--bin-runtime参数的编译字节码结果之外,还包含合约初始化方法constructor的相关字节码等内容
C++合约开发
蚂蚁区块链智能合约平台提供一套基于C99/C++14标准的C++语言子集作为合约语言。
通过编译工具(mychain.mycdt)将合约代码编译成wasm字节码,由合约平台区块链节点解释执行。
开发步骤:
- 准备环境
- 编写普通C++合约
- 编译合约
- 构建静态库
- 合约部署
- 合约调用
- 合约测试
准备环境
蚂蚁区块链平台提供C++编译工具mychain.mycdt
- mychain.mycdt将合约代码编译成wasm代码
- Linux平台,下载安装包MYCDT-2.24.2-Linux-x86_64.tar.gz
- 执行tar命令解压
- 修改PATH环境变量
- 执行my++ -version命令,验证是否安装成功
普通wasm合约
编辑hello.cpp,引入需要的头文件<mychainlib/contract.h>
编写简单测试合约
my++
执行命令 my++ -o hello.wasm hello.cpp
如果编译成功,可以得到以下三个文件
- hello.wasm:合约的wasm字节码文件
- hello.abi:合约的abi定义文件
- hello.wasc:合并字节码和ABI的文件
构建静态库
静态库会链接进目标文件
使用MYCDT提供的工具,将一组源文件编译打包成一个wasm静态库,供合约使用
如果编写两个C++源文件foo.cc和bar.cc,分别定义一些工具函数,函数接口统一声明在头文件foobar.h
用以下命令编译,打包成静态库foobar.a
- my++ -c foo.cc bar.cc
- llvm -ar rcs foobar.a foo.o bar.o
如果要使用该静态库,只需包含头文件foobar.h,然后编译时指定静态库即可
- my++ main.cc foobar.a -o contract.wasm
12-3 ChainStack框架开发
ChainStack简介
基于蚂蚁链的区块链应用技术图谱,ChainStack从框架与服务角度出发,打造服务于区块链应用的框架
特点
- 一套智能合约框架
- 一套可复用的应用组件
- 一套完整的DApp应用工具链
ChainStack环境申请
开发者体验链可以通过BaaS Rest交易网关进行访问
访问BaaS Rest有相应的权限验证机制
访问之前,需要在开发者实验室完成以下申请
- Access Key
- Access Secret
- 链上账户
步骤一
登录开发者实验室,进入 开发者实验室 -> 应用开发工具 页面
通过立即申请或重置可以获得Access-id和Access.key
步骤二
创建发送链上交易所需的区块链账户
填写账户名称、私钥密码和恢复私钥密码
创建完成后下载账户的公私钥对以及恢复公私钥对
可以通过再次点击“立刻申请”创建新的账户
安装依赖软件
JDK版本 >= 1.8,(下载地址:https://openjdk.java.net/install/)
Maven版本 >= 3.2.5 (下载地址:https://maven.apache.org/download.cgi)
安装cstack工具
cstack是智能合约研发命令行工具,通过该工具可以完成cstack工程的创建、编译、测试、三方包管理、标准组件导出等功能。
- 下载ChainStack安装包,解压安装包
- 进入安装包目录,执行bash install_nix.sh && source ~/.chainstack/env
- 执行成功后检查安装
一键创建简单wasm合约工程
执行命令 cstack quickinit Demo 创建名为Demo的合约项目
网络环境配置
打开project-setting.yaml,填入“环境申请”得到的账户信息和BaaS Rest访问信息
一键运行合约
运行测试用例
执行命令 cstack test 运行测试用例
编译合约
执行命令 cstack build,合约模块会编译出智能合约字节码
字节码需要部署到区块链上,通过交易触发才能执行
DApp工程结构
cstack quickinit 会生成一个DApp工程,包含两个模块
- 合约模块:contract目录为合约模块,含有一个智能合约
- Java集成测试模块:test/ittest目录为Java测试模块,这是一个标准Maven工程,里面自动生成一个测试用例
相关文章:

【12】智能合约开发入门
12-1 在线合约开发 Cloud IDE简介 基本框架 Cloud IDE是BaaS合约平台提供的在线合约开发工具 IDE是一个去中心化应用(Dapp),通过JavaScript SDK直接与区块链平台通信,进行合约部署和调用 核心功能 合约工程管理 合约编辑与编…...
web安全——分析应用程序
文章目录 一、确定用户输入入口点二、确定服务端技术三、解析受攻击面 一、确定用户输入入口点 在检查枚举应用程序功能时生成的HTTP请求的过程中,用户输入入口点包括: URL文件路径 通常,在查询字符?之前的URL部分并不视为用户输入入口&am…...
Wpf 之Generic.xaml
在 WPF 中,Generic.xaml 是一个特殊的资源文件,它会被自动加载,不需要显式添加。这是 WPF 的命名约定。当 WPF 初始化自定义控件时,它会专门查找这个名字的文件。 这个名字是硬编码在 WPF 框架中的,不能改变。 Generi…...

VidSketch:具有扩散控制的手绘草图驱动视频生成
浙大提出的VidSketch是第一个能够仅通过任意数量的手绘草图和简单的文本提示来生成高质量视频动画的应用程序。该方法训练是在单个 RTX4090 GPU 上进行的,针对每个动作类别使用一个小型、高质量的数据集。VidSketch方法使所有用户都能使用简洁的文本提示和直观的手绘…...
解锁C# XML编程:从新手到实战高手的蜕变之路
一、引言:XML 在 C# 中的关键地位 在 C# 开发的广袤领域中,XML(可扩展标记语言,eXtensible Markup Language)宛如一颗璀璨的明星,占据着举足轻重的地位。它以其独特的结构化和自描述特性,成为了…...

kafka-leader -1问题解决
一. 问题: 在 Kafka 中,leader -1 通常表示分区的领导者副本尚未被选举出来,或者在获取领导者信息时出现了问题。以下是可能导致出现 kafka leader -1 的一些常见原因及相关分析: 1. 副本同步问题: 在 Kafka 集群中&…...

超大规模分类(四):Partial FC
人脸识别任务里,通常利用全连接层,来做人脸的分类。会面临三个实际问题: 真实的人脸识别数据噪声严重真实的人脸识别数据存在严重的长尾分布问题,一些类别样本多,多数类别样本少人脸类别越来越多,全连接层…...
uniapp 小程序如何实现大模型流式交互?前端SSE技术完整实现解析
文章目录 一、背景概述二、核心流程图解三、代码模块详解1. UTF-8解码器(处理二进制流)2. 请求控制器(核心通信模块)3. 流式请求处理器(分块接收)4. 数据解析器(处理SSE格式)5. 回调…...
因子分析详解:从理论到MATLAB实战
内容摘要: 本文系统解析因子分析的核心原理与MATLAB实战,涵盖数学模型、载荷矩阵估计、因子旋转及得分计算。通过上市公司盈利能力、消费者偏好等案例,演示数据标准化、因子提取与解释的全流程,并提供完整代码实现。深入对比因子分…...

【组态PLC】基于三菱西门子S7-200PLC和组态王液料混合系统组态设计【含PLC组态源码 M016期】
控制要求 总体控制要求:如面板图所示,本装置为三种液体混合模拟装置,由液面传感器SL1、SL2、SL3,液体A、B、C阀门与混合液阀门由电磁阀YV1、YV2、YV3、YV4,搅匀电机M,加热器H,温度传感器T组成。…...
js:根据后端返回的数组取出每一个数组的keyword字段然后拼接成一个逗号分隔的字符串
问: 现在有一个el-select, 后端接口返回数据为keyword:xxx,referenceNum:1,tagId:132sf32fasdfaf组成的数组, 现在select是多选, 但是但我选择多个下拉框选项后,后端需要前端返回的数据tagIds字段需要时一个字符串…...
基于大模型的肺纤维化预测及临床方案研究报告
目录 一、引言 1.1 研究背景与意义 1.2 研究目的与方法 二、大模型技术概述 2.1 大模型的基本原理 2.2 大模型在医疗领域的应用现状 三、肺纤维化相关知识 3.1 肺纤维化的病因与发病机制 3.2 肺纤维化的临床症状与诊断方法 3.3 肺纤维化的治疗现状与挑战 四、大模型…...
7. 【.NET 8 实战--孢子记账--从单体到微服务--转向微服务】--微服务基础工具与技术--Ocelot 网关--路由
路由是API网关的核心功能,对系统性能和可靠性至关重要。路由通过定义规则,将客户端请求准确地转发到相应的后端服务,确保请求能够正确处理,简化了微服务架构中的服务调用逻辑。有效的路由配置能够提高系统的灵活性和可维护性。 一…...

【GESP】C++二级模拟 luogu-b3995, [GESP 二级模拟] 小洛的田字矩阵
GESP二级模拟题,多层循环、分支语句练习,难度★✮☆☆☆。 题目题解详见:https://www.coderli.com/gesp-2-luogu-b3995/ 【GESP】C二级模拟 luogu-b3995, [GESP 二级模拟] 小洛的田字矩阵 | OneCoderGESP二级模拟题,多层循环、分…...
监督学习——基于线性回归的波士顿房价预测:理论、实践与评估
基于线性回归的波士顿房价预测:理论、实践与评估 文章目录 基于线性回归的波士顿房价预测:理论、实践与评估一、引言二、线性回归基础理论2.1 线性回归原理2.2 线性回归在房价预测中的应用逻辑三、波士顿房价数据集介绍3.1 数据集概述3.2 特征说明3.3 目标变量四、波士顿房价…...
Selenium 调用模型接口实现功能测试
要使用 Selenium 调用模型接口实现功能测试,可按以下步骤进行: 1. 环境准备 安装 Selenium:使用 pip install selenium 安装 Selenium 库。安装浏览器驱动:根据使用的浏览器(如 Chrome、Firefox 等)下载对应的驱动,并将其添加到系统的环境变量中。例如,Chrome 浏览器需…...
回调函数的用法
回调函数的基本用法 回调函数是一种被作为参数传递给另一个函数的函数,接收回调函数作为参数的函数在合适的时候会调用这个回调函数。回调函数为代码提供了更高的灵活性和可扩展性,下面为你详细介绍回调函数的基本用法。 基本概念 回调函数的核心在于函…...
springboot实现文件上传到华为云的obs
一、前言 有时在项目中需要使用一些存储系统来存储文件,那么当项目要接入obs作为存储系统时,就会利用obs来进行文件的上传下载,具体实现如下。 二、如何通过obs实现文件的上传下载? 1.添加相关的obs的maven依赖。 <dependency…...

南京布局产业园剖析:成都树莓集团的战略逻辑
在数字产业飞速发展的当下,成都树莓集团在南京布局产业园,这一举措蕴含着深刻的战略考量,是基于对市场环境、产业趋势以及自身发展需求的综合研判。 一、政策利好与发展机遇 南京作为长三角地区的重要城市,在数字经济发展方面享有…...

C++ QT 6.6.1 QCustomPlot的导入及使用注意事项和示例 | 关于高版本QT使用QCustomPlot报错问题解决的办法
C QT 6.6.1 QCustomPlot的导入及使用注意事项和示例 | 关于高版本QT使用QCustomPlot报错问题解决的办法 记录一下 qmake .pro文件的配置 QT core gui printsupportgreaterThan(QT_MAJOR_VERSION, 4): QT widgetsCONFIG c17# You can make your code fail to compil…...
Vim 调用外部命令学习笔记
Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》
在注意力分散、内容高度同质化的时代,情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现,消费者对内容的“有感”程度,正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中࿰…...

什么是库存周转?如何用进销存系统提高库存周转率?
你可能听说过这样一句话: “利润不是赚出来的,是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业,很多企业看着销售不错,账上却没钱、利润也不见了,一翻库存才发现: 一堆卖不动的旧货…...
Nginx server_name 配置说明
Nginx 是一个高性能的反向代理和负载均衡服务器,其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机(Virtual Host)。 1. 简介 Nginx 使用 server_name 指令来确定…...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)
笔记整理:刘治强,浙江大学硕士生,研究方向为知识图谱表示学习,大语言模型 论文链接:http://arxiv.org/abs/2407.16127 发表会议:ISWC 2024 1. 动机 传统的知识图谱补全(KGC)模型通过…...

ios苹果系统,js 滑动屏幕、锚定无效
现象:window.addEventListener监听touch无效,划不动屏幕,但是代码逻辑都有执行到。 scrollIntoView也无效。 原因:这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作,从而会影响…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”
2025年#高考 将在近日拉开帷幕,#AI 监考一度冲上热搜。当AI深度融入高考,#时间同步 不再是辅助功能,而是决定AI监考系统成败的“生命线”。 AI亮相2025高考,40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕,江西、…...

【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...
uniapp 字符包含的相关方法
在uniapp中,如果你想检查一个字符串是否包含另一个子字符串,你可以使用JavaScript中的includes()方法或者indexOf()方法。这两种方法都可以达到目的,但它们在处理方式和返回值上有所不同。 使用includes()方法 includes()方法用于判断一个字…...

淘宝扭蛋机小程序系统开发:打造互动性强的购物平台
淘宝扭蛋机小程序系统的开发,旨在打造一个互动性强的购物平台,让用户在购物的同时,能够享受到更多的乐趣和惊喜。 淘宝扭蛋机小程序系统拥有丰富的互动功能。用户可以通过虚拟摇杆操作扭蛋机,实现旋转、抽拉等动作,增…...