学习Hyperledger Fabric2.5

news/2025/11/6 13:58:22/文章来源:https://www.cnblogs.com/wwwzhqwww/p/19192330

一、环境准备

1.安装环境包   sudo apt install curl(远程传输)  git(代码拉取)  vim(编辑器)  docker-compose  jq  openssh-server(远程连接) -y

2.启动docker  systemctl start docker

3.开机自启动  systemctl enable docker

4.设置全局用户  sudo usermod -aG docker  $USER

5.go 语言安装  (下载go 的linux安装包,远程连接工具上传到linux 的download 文件夹下)

6.查看ip   ip a

7.在download文件夹下执行复制  sudo cp  go1.23.3.linux-amd64.tar.gz  /usr/local

8.切换到 /usr/loacl 目录  cd  /usr/local    查看ls

9.解压 sudo tar -zxvf  go1.23.3.linux-amd64.tar.gz 

10.删除压缩包  sudo rm -rf  go1.23.3.linux-amd64.tar.gz 

11.安装vim   sudo apt install vim   

12.查看vim 配置   sudo vim ~/.bashrc

13.在最后增加 export PATH=SPATH:/usr/local/go/bin       :wq 保存退出

14.生效配置  source ~/.bashrc    

15.查看go 版本 go version

16.需要java时安装JDK   sudo apt-get install -y openjdk-8-jdk

17.安装 nvm   curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash

18.应用生效 nvm  source  ~/.bashrc

19.node 安装  nvm install <version>    如;nvm install 24.11.0

20.查看node 版本  node --version

21.重启虚拟机  reboot

二、区块链安装

1.docker镜像拉取配置镜像

 

sudo gedit /etc/docker/daemon.json

 

   将下面内容添加到该文件中

 

{

 

 "registry-mirrors":  ["https://docker.registry.cyou",

 

                       "https://docker-cf.registry.cyou",

 

                       "https://dockercf.jsdelivr.fyi",

 

                       "https://docker.jsdelivr.fyi",

 

                       "https://dockertest.jsdelivr.fyi",

 

                       "https://mirror.aliyuncs.com",

 

                        "https://dockerproxy.com",

 

                        "https://mirror.baidubce.com",

 

                        "https://docker.m.daocloud.io",

 

                        "https://docker.nju.edu.cn",

 

                        "https://docker.mirrors.sjtug.sjtu.edu.cn",

 

                        "https://docker.mirrors.ustc.edu.cn",

 

                        "https://mirror.iscas.ac.cn",

 

                        "https://docker.rainbond.cc"]

 

}

 

2.文件说明: binary  部署fabric所需的二进制文件  。 examples  区块链浏览器部署   。

 

3.

一、部署合约 通过链码到提交给通道 并测试peer节点可用
# 1 上传智能合约
1)新建智能合约待打包 文件夹
```执行命令:
cd ~fabric-samples/chaincode/
mkdir package-java-jar
```
2)打包开发好的智能合约项目在 target目录下生成chaincode.jar , 一同上传至 fabric-samples/chaincode/package-java-jar
(可以不传--上传项目目录下 collections_config.json文件 META-INF文件夹 )

 

3)返回到~fabric-samples/test-network所在目录
执行命令:
cd ../../test-network
```

 

2. 启动区块链网络创建通道

可以创建指定name的通道 指定存储方式的通道
./network.sh up createChannel -ca -c channeljava -s couchdb (创建名为channeljava的通道 所用存储 couchdb)
(不执行)./network.sh up createChannel (创建默认通道名: mychannel)
3. 检查网络容器启动
```
docker ps 返回两个peer组织节点启动 一个orderer节点启动 一个bin/bash 启动 以及couchdb 启动
```
4.赋值密钥文件夹到应用项目
test-network/organizations 下生成两个密匙文件夹 ordererOrgaizations peerOrganizations
后续将两个密匙文件复制到fabric-app 应用程序jar包处 用以启动应用程序后连接当前链码

 

5.将bin目录中二进制文件添加到CLI路径 所需格式的链码包可以使用peer CLI创建

 

1)将这些二进制文件添加到你的CLI路径 执行命令:
```
export PATH=${PWD}/../bin:$PATH
```

 

2)设置FABRIC_CFG_PATH为指向fabric-samples中的core.yaml文件 执行命令:
```
export FABRIC_CFG_PATH=$PWD/../config/
```

 

3)创建链码包
```
peer lifecycle chaincode package hyperledger-fabric-contract-java.tar.gz --path ../mychaincode/package-java8/ --lang java --label hyperledger-fabric-contract-java01
```
注意:升级合约的时候需要将label 改变

 

命令解释:此命令将在当前目录中创建一个名为 hyperledger-fabric-contract-java.tar.gz的软件包。–lang标签用于指定链码语言,–path标签提供智能合约代码的位置,该路径必须是标准路径或相对于当前工作目录的路径,–label标签用于指定一个链码标签,该标签将在安装链码后对其进行标识。建议您的标签包含链码名称和版本。

 

二、安装链码
1.安装链码包
打包 hyperledger-fabric-contract-java 智能合约后,我们可以在peer节点上安装链码。需要在将认可交易的每个peer节点上安装链码。因为我们将设置背书策略以要求来自Org1和Org2的背书,所以我们需要在两个组织的peer节点上安装链码:peer0.org1.example.com和peer0.org2.example.com
2. Org1 peer节点安装链码

 

1)设置以下环境变量,以Org1管理员的身份操作peer CLI。
```
export CORE_PEER_TLS_ENABLED=true
export CORE_PEER_LOCALMSPID="Org1MSP"
export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
export CORE_PEER_ADDRESS=localhost:7051
```

 

2)使用 peer lifecycle chaincode install 命令在peer节点上安装链码。
```
peer lifecycle chaincode install hyperledger-fabric-contract-java.tar.gz
```

 

返回如下则链码安装成功
submitInstallProposal -> Chaincode code package identifier: hyperledger-fabric-contract-java01:2c2cad9f51943f5c9bac7d78c9adf461f01f73ffd29f8f171e2e5f2b28355d51
3.Org2 peer节点安装链码

 

1)设置以下环境变量,以Org2管理员的身份操作peer CLI。
```
export CORE_PEER_LOCALMSPID="Org2MSP"
export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt
export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp
export CORE_PEER_ADDRESS=localhost:9051
```

 

2)使用 peer lifecycle chaincode install 命令在peer节点上安装链码。
```
peer lifecycle chaincode install hyperledger-fabric-contract-java.tar.gz
``` 注意:安装链码时,链码由peer节点构建。如果智能合约代码有问题,install命令将从链码中返回所有构建错误。
因为安装 java 链码的时候需要经过 maven 构建以及下载依赖包的过程这个过程有可能会较慢,所以 install 命令有可能会返回一个超时错误:。但是其实链码的 docker 容器内此时还在执行构建任务没有完成。等到构建成功了链码包也就安装成功了。

返回成功显示:
submitInstallProposal -> Chaincode code package identifier: hyperledger-fabric-contract-java01:2c2cad9f51943f5c9bac7d78c9adf461f01f73ffd29f8f171e2e5f2b28355d51

 

4.通过链码定义

 

安装链码包后,需要通过组织的链码定义。该定义包括链码管理的重要参数,例如名称,版本和链码认可策略。
如果组织已在其peer节点上安装了链码,则他们需要在其组织通过的链码定义中包括包ID。
包ID用于将peer节点上安装的链码与通过的链码定义相关联,并允许组织使用链码来认可交易。

 

1) 查询包ID
```
peer lifecycle chaincode queryinstalled
``` 包ID是链码标签和链码二进制文件的哈希值的组合。每个peer节点将生成相同的包ID。你应该看到类似于以下内容的输出:
Installed chaincodes on peer:
Package ID: hyperledger-fabric-contract-java01:2c2cad9f51943f5c9bac7d78c9adf461f01f73ffd29f8f171e2e5f2b28355d51, Label: hyperledger-fabric-contract-java01
2)将包ID保存为环境变量
通过链码时,我们将使用包ID, 将以上返回的包ID粘贴到下面的命令中 =后。
```
export CC_PACKAGE_ID=hyperledger-fabric-contract-java01:2c2cad9f51943f5c9bac7d78c9adf461f01f73ffd29f8f171e2e5f2b28355d51
```

 

3)Org2 通过链码定义

 

因为已经设置了环境变量为peer CLI作为Orig2管理员进行操作,所以我们可以以Org2组织级别将 hyperledger-fabric-contract-java01 的链码定义通过。使用 peer lifecycle chaincode approveformyorg命令通过链码定义:
```
peer lifecycle chaincode approveformyorg -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --channelID channeljava --name hyperledger-fabric-contract-java01 --version 1.0 --package-id $CC_PACKAGE_ID --sequence 1 --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

 

返回结果:2025-11-05 10:36:13.574 CST 0001 INFO [chaincodeCmd] ClientWait -> txid [2c91a9c9163e735825e9937c479153efcaa3e086e6f12ac1354c7cf5fd13cbb4] committed with status (VALID) at localhost:9051

 

``` 注意: 如果需要更新合约时 sequence 不能重复递增1

 

4)Org1 通过链码定义

 

设置以下环境变量以Org1管理员身份运行:
```
export CORE_PEER_LOCALMSPID="Org1MSP"
export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
export CORE_PEER_ADDRESS=localhost:7051
```

 

用 peer lifecycle chaincode approveformyorg 命令通过链码定义
```
peer lifecycle chaincode approveformyorg -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --channelID channeljava --name hyperledger-fabric-contract-java01 --version 1.0 --package-id $CC_PACKAGE_ID --sequence 1 --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem
```
返回结果:2025-11-05 10:37:14.519 CST 0001 INFO [chaincodeCmd] ClientWait -> txid [b9cec435d8984812b78927a0fd9148ba2baf1c0b51f63ee7801e8289e90c7a4a] committed with status (VALID) at localhost:7051

 

注意: 如果需要更新合约时 sequence 不能重复递增1

5. 将链码定义提交给通道

 

1) 检查通道成员是否已批准相同的链码定义:
使用peer lifecycle chaincode checkcommitreadiness命令来
```
peer lifecycle chaincode checkcommitreadiness --channelID channeljava --name hyperledger-fabric-contract-java01 --version 1.0 --sequence 1 --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem --output json
```
注意:如果是更新链码合约 --sequence 不能与上一个相同 +1
```
更新例子:peer lifecycle chaincode checkcommitreadiness --channelID channeljava --name hyperledger-fabric-contract-java01 --version 1.0 --sequence 2 --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem --output json
```
该命令将生成一个JSON映射,该映射显示通道成员是否批准了checkcommitreadiness命令中指定的参数:
返回结果```
{
"approvals": {
"Org1MSP": true,
"Org2MSP": true
}
}
```
2)将链码定义提交到通道
由于作为通道成员的两个组织都同意了相同的参数,因此链码定义已准备好提交给通道。
你可以使用peer lifecycle chaincode commit命令 commit命令还需要由组织管理员提交。
```
peer lifecycle chaincode commit -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --channelID channeljava --name hyperledger-fabric-contract-java01 --version 1.0 --sequence 1 --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem --peerAddresses localhost:7051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt --peerAddresses localhost:9051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt
```
返回结果:2025-11-05 10:40:30.292 CST 0001 INFO [chaincodeCmd] ClientWait -> txid [df0e7a0b0801cfedfa176b99be9afe4209cd7388af5c0d73b4382991fc7ce8b7] committed with status (VALID) at localhost:9051
2025-11-05 10:40:30.372 CST 0002 INFO [chaincodeCmd] ClientWait -> txid [df0e7a0b0801cfedfa176b99be9afe4209cd7388af5c0d73b4382991fc7ce8b7] committed with status (VALID) at localhost:7051
3)确认链码定义已提交给通道
可以使用peer lifecycle chaincode querycommitted命令来。
```
peer lifecycle chaincode querycommitted --channelID channeljava --name hyperledger-fabric-contract-java01 --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem
```
如果将链码成功提交给通道, 返回链码定义的顺序和版本:
Version: 1.0, Sequence: 1, Endorsement Plugin: escc, Validation Plugin: vscc, Approvals: [Org1MSP: true, Org2MSP: true]

 

6. 测试调用链码 demo
```
peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n hyperledger-fabric-contract-java --peerAddresses localhost:7051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt --peerAddresses localhost:9051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt -c '{"function":"createCat","Args":["cat-0" , "tom" , "3" , "蓝色" , "大懒猫"]}'

 

peer chaincode query -C mychannel -n hyperledger-fabric-contract-java -c '{"Args":["queryCat" , "cat-0"]}'

 

peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n hyperledger-fabric-contract-java --peerAddresses localhost:7051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt --peerAddresses localhost:9051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt -c '{"function":"updateCat","Args":["cat-0" , "tom" , "3" , "白色" , "超级大懒猫"]}'

 

peer chaincode query -C mychannel -n hyperledger-fabric-contract-java -c '{"Args":["queryCat" , "cat-0"]}'

 

peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n hyperledger-fabric-contract-java --peerAddresses localhost:7051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt --peerAddresses localhost:9051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt -c '{"function":"deleteCat","Args":["cat-0"]}'

 

peer chaincode query -C mychannel -n hyperledger-fabric-contract-java -c '{"Args":["queryCat" , "cat-0"]}'
```

 

看到 Chaincode invoke successful. result: status:200 信息证明链码调用成功:

 


peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n hyperledger-fabric-contract-java --peerAddresses localhost:7051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt --peerAddresses localhost:9051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt -c '{"function":"uplink","Args":["" , "tom" , "3" , "蓝色" , "大懒猫"]}'

 

---------------到此打包java合约成功-------------

 

二、启动应用程序
1.在本地启动,将 test-network/organizations 两个密匙文件夹 prdererOrgaizations peerOrganizations
复制到 应用程序 fabric-app/crypto-config/目录下

 

2.配置host 参考host配置

 

3.查询docker 日志 docker logs imagesId
4.在服务器启动
上传 hyperledger-fabric-app-java--8080.jar 到 ~/fabric-samples/asset-transfer-basic/application-java-my/crypto-config
复制 cp -r ~/fabric-samples/test-network/organizations/peerOrganizations ~/fabric-samples/asset-transfer-basic/application-java-my/crypto-config
cp -r ~/fabric-samples/test-network/organizations/ordererOrganizations ~/fabric-samples/asset-transfer-basic/application-java-my/crypto-config
新建启动文件 touch start.sh
三、清空所有重装

 

2. 恢复到已知的初始状态 结束所有活动或陈旧的Docker容器并删除以前生成的部件
./network.sh down
3.该createChannel命令创建一个以mychannel两个通道成员Org1和Org2命名的通道。该命令还将属于每个组织的peer节点加入通道。并且启动测试网络
sudo ./network.sh up createChannel

 


4.停止所有容器 docker stop $(docker ps -aq)

 

5.删除所有容器 docker rm $(docker ps -aq)

 

6.通过 image name 删除单个镜像 docker image rm $image_name

 

7.通过 image id 删除单个镜像 docker rmi $image_id

 

8.删除所有不使用的镜像 docker image prune --force --all
或者 docker image prune -f -a

 

9.删除所有停止的容器 docker container prune -f

 

10.删除所有镜像 docker rmi -f $(docker images -a -q)

 

11.Docker占用的磁盘空间 docker system df

 

12.只清除超过创建时间超过24小时的镜像 docker image prune -a --filter "until=24h"

 

13.在test-network/organizations 目录下 删除文件夹 rm -rf ordererOrganizations/ rm -rf peerOrganizations/

 

14.在test-network/目录下 删除链码包 hyperledger-fabric-contract-java.tar.gz

 

15.重新执行 安装docker 镜像 ./bootstrap.sh

 

四、fabric 节点操作命令
1.节点链码
peer chaincode [command]

 

Available Commands:
install Install a chaincode.
instantiate Deploy the specified chaincode to the network.
invoke Invoke the specified chaincode.
list Get the instantiated chaincodes on a channel or installed chaincodes on a peer.
package Package a chaincode
query Query using the specified chaincode.
signpackage Sign the specified chaincode package
upgrade Upgrade chaincode.

 

Flags:
--cafile string Path to file containing PEM-encoded trusted certificate(s) for the ordering endpoint
--certfile string Path to file containing PEM-encoded X509 public key to use for mutual TLS communication with the orderer endpoint
--clientauth Use mutual TLS when communicating with the orderer endpoint
--connTimeout duration Timeout for client to connect (default 3s)
-h, --help help for chaincode
--keyfile string Path to file containing PEM-encoded private key to use for mutual TLS communication with the orderer endpoint
-o, --orderer string Ordering service endpoint
--ordererTLSHostnameOverride string The hostname override to use when validating the TLS connection to the orderer
--tls Use TLS when communicating with the orderer endpoint
--tlsHandshakeTimeShift duration The amount of time to shift backwards for certificate expiration checks during TLS handshakes with the orderer endpoint
--transient string Transient map of arguments in JSON encoding
2.节点通道
peer channel [command]

 

Available Commands:
create Create a channel
fetch Fetch a block
getinfo get blockchain information of a specified channel.
join Joins the peer to a channel.
joinbysnapshot Joins the peer to a channel by the specified snapshot
joinbysnapshotstatus Query if joinbysnapshot is running for any channel
list List of channels peer has joined.
signconfigtx Signs a configtx update.
update Send a configtx update.

 

Flags:
--cafile string Path to file containing PEM-encoded trusted certificate(s) for the ordering endpoint
--certfile string Path to file containing PEM-encoded X509 public key to use for mutual TLS communication with the orderer endpoint
--clientauth Use mutual TLS when communicating with the orderer endpoint
--connTimeout duration Timeout for client to connect (default 3s)
-h, --help help for channel
--keyfile string Path to file containing PEM-encoded private key to use for mutual TLS communication with the orderer endpoint
-o, --orderer string Ordering service endpoint
--ordererTLSHostnameOverride string The hostname override to use when validating the TLS connection to the orderer
--tls Use TLS when communicating with the orderer endpoint
--tlsHandshakeTimeShift duration The amount of time to shift backwards for certificate expiration checks during TLS handshakes with the orderer endpoint
删除通道
区块链的不可篡改性注定了我们无法从网络上删除通道,只能将新数据(正常事务或配置更新)附加到区块链网络2。到现在我们已经讨论过了组织、节点及通道的添加和删除方式,发现 Fabric 联盟链通常对删除操作并没有提供支持。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/957729.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DHTMLX Gantt 9.1 的核心目标——在保持稳定性能的基础上,带来更智能的时间刻度优化、更灵活的任务渲染、更高效的实时协作能力及更完善的资源管理功能。

DHTMLX Gantt 9.1 的核心目标——在保持稳定性能的基础上,带来更智能的时间刻度优化、更灵活的任务渲染、更高效的实时协作能力及更完善的资源管理功能。在与众多开发者及企业客户的交流中,全球知名的前端UI控件服务…

量化选股与量化交易第857篇:通达信主升操盘 - Leone

通达信主升操盘主图多:EMA(C,3),COLORYELLOW; 空:EMA(C,5),COLOR00FF00; 均衡:EMA(空,5),COLORWHITE,; 章鱼1:=COUNT(CROSS(多,均衡),2)=1; 章鱼2:=COUNT(CROSS(空,均衡),2)=1; ZAI:=FILTER(章鱼1 AND 章鱼2,2); DRAWT…

【中大厂前端】Java常见面试题 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

量化选股与量化交易第858篇:通达信擒龙三把锁 - Leone

通达信擒龙三把锁主图擒龙锁11:=1; 擒龙锁12:=((((2*C)+HIGH)+LOW) / 4); 擒龙锁14:=LLV(LOW,5); 擒龙锁15:=HHV(HIGH,4); C1:=(EMA((((擒龙锁12-擒龙锁14)/(擒龙锁15-擒龙锁14))*100),4)*擒龙锁11),COLORRED,LINETHIC…

量化选股与量化交易第861篇:通达信绝杀大牛 - Leone

通达信绝杀大牛主图ZYG1:=CONST(LLV((IF(C< 300,(AMOUNT/V/100),EMA(C,1))),2)); ZYG2:=CONST(LLV((IF(C< 300,(AMOUNT/V/100),EMA(C,1))),4)); ZYG3:=EMA(MA(((C-MA(C,13))*100),7),1); ZYG4:=(CROSS(ZYG3,EMA(…

国产化Excel处理控件Spire.XLS教程:使用Java将CSV转换为PDF(含格式设置)

如果能将 CSV 自动转换为 PDF ,就能快速生成清晰、美观的报表,既节省手动排版时间,又能保持数据的专业呈现。本文将介绍如何使用 Spire.XLS for Java 实现这一过程——从加载 CSV 到输出高质量 PDF,仅需数行代码即…

Python 机器学习02 - 常见分类算法

from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.neighbors import KNeighborsClassifier from skle…

系统基础文件属性(二)

系统基础优化知识 (二)系统重要目录介绍: /usr/local --- 存放安装第三方软件程序数据 系统安装部署软件方法:yum 4种安装方式 文件属性详细介绍: 1)文件类型介绍:有哪些文件分类 文件相关命令 2)文件用…

量化选股与量化交易第882篇:通达信量能趋势启动 - Leone

通达信量能趋势启动主图ZYG1:=REF(LOW,1); ZYG2:=SMA(ABS(LOW-ZYG1),3,1)/SMA(MAX(LOW-ZYG1,0),3,1)*100; ZYG3:=EMA(IF(CLOSE>REF(CLOSE,1)*1.02,ZYG2*10,ZYG2/10),3); ZYG4:=LLV(LOW,38); ZYG5:=HHV(ZYG3,38); ZY…

量化选股与量化交易第883篇:通达信顶底雷达 - Leone

通达信顶底雷达副图章鱼:LLV(LOW,10) NODRAW; 鱼哥:HHV(HIGH,25) NODRAW; 章鱼出:=3.2,COLORCYAN; STICKLINE(C>0,3.2,3.2,1,0),COLORFF1199; 清仓卖出:3.5,COLOR0088FF; 章鱼线:=EMA((CLOSE-章鱼)/(鱼哥-章鱼)*4,4…

量化选股与量化交易第878篇:通达信起爆点探测器 - Leone

起爆点探测器主图STICKLINE(C>=O,H,L,0,1), COLORRED; STICKLINE(C>=O,C,O,3,0), COLORRED; STICKLINE(C< O,H,L,0,0), COLORFFFF00; STICKLINE(C< O,C,O,3,0),COLORFFFF00; ZYG9:MA(CLOSE,5); ZYG31:=MA(…

量化选股与量化交易第879篇:通达信强势反转战法 - Leone

通达信强势反转战法主图N1:=20; N2:=60; 鱼哥1:=(LOW+HIGH+CLOSE)/3; X: MA(鱼哥1,5); A1: HHV(X,N1)COLORMAGENTA; A2: HHV(X,N2),COLORGREEN; A3: HHV(HIGH,N2)*0.98,COLOR0000FF; B1: LLV(X,N1); B2: LLV(LOW,N2)*1…

量化选股与量化交易第886篇:通达信收割机 - Leone

通达信收割机主图DRAWTEXT_FIX(1,0.005,0,0,所属风格:),COLORYELLOW; DRAWTEXT_FIX(1,0.06,0,0,FGBLOCK),COLORYELLOW; DRAWTEXT_FIX(1,0.005,0.05,0,所属概念:),COLORMAGENTA; DRAWTEXT_FIX(1,0.06,0.05,0,GNBLOCK),C…

量化选股与量化交易第888篇:通达信龙头趋势量化 - Leone

通达信龙头趋势量化主图DRAWGBK(C>0,RGB(0,10,10),RGB(88,0,0),0,0,0); DRAWGBK(C>0,RGB(40,120,20),RGB(00,00,00),0,0,1); DRAWGBK(C>0,RGB(80,100,120),RGB(00,00,00),0,0,1); DRAWKLINE(HIGH,OPEN,LOW,CL…

【深入理解计算机网络04】通信基础核心知识全解析:从信号原理到物理层设备 - 教程

【深入理解计算机网络04】通信基础核心知识全解析:从信号原理到物理层设备 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; fon…

详细介绍:vue3和uniapp的生命周期

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

系统基础文件属性

系统基础优化知识系统重要文件介绍: /etc 目录重要文件信息:配置变量与别名文件 /var 目录重要文件信息: /proc目录重要文件信息:系统重要目录介绍: /usr/local --- 存放安装第三方软件程序数据 系统安装部署软…

DMS Airflow:企业级数据工作流编排平台的专业实践

DMS Airflow 是基于 Apache Airflow 构建的企业级数据工作流编排平台,通过深度集成阿里云 DMS(Data Management Service)系统的各项能力,为数据团队提供了强大的工作流调度、监控和管理能力。本文将从 Airflow 的高…

iOS HTTPS 抓包,从原理到落地排查的工程化方法(Charles / tcpdump / Sniffmaster)

面向开发与运维的 iOS HTTPS 抓包实战:按 TCP→TLS→应用三层排查,列出 Charles/Fiddler、tcpdump、Wireshark、mitmproxy 的职责,提供可复制命令与故障模板,并说明在代理受限或协议边界(QUIC/HTTP3)时如何用替代…