commit a9c1b81aea23d508e28a53624d57ce4e9d2eb50a Author: xiaoJ <1143020035@qq.com> Date: Mon Feb 9 17:45:06 2026 +0800 first commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b489d62 --- /dev/null +++ b/.gitignore @@ -0,0 +1,45 @@ +.gradle +build/ +!gradle/wrapper/gradle-wrapper.jar +!**/src/main/**/build/ +!**/src/test/**/build/ +.kotlin + +### IntelliJ IDEA ### +.idea/modules.xml +.idea/jarRepositories.xml +.idea/compiler.xml +.idea/libraries/ +*.iws +*.iml +*.ipr +out/ +!**/src/main/**/out/ +!**/src/test/**/out/ + +### Eclipse ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache +bin/ +!**/src/main/**/bin/ +!**/src/test/**/bin/ + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ + +### VS Code ### +.vscode/ + +### Mac OS ### +.DS_Store + +fisco/ \ No newline at end of file diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..ab1f416 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,10 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Ignored default folder with query files +/queries/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml +# Editor-based HTTP Client requests +/httpRequests/ diff --git a/.idea/gradle.xml b/.idea/gradle.xml new file mode 100644 index 0000000..2a65317 --- /dev/null +++ b/.idea/gradle.xml @@ -0,0 +1,17 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..87a20fc --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..bf6f850 --- /dev/null +++ b/README.md @@ -0,0 +1,131 @@ +# FISCO BCOS 合约开发项目 + +## 项目简介 + +这是一个基于 FISCO BCOS 区块链平台的 Java 开发项目,提供了与 FISCO BCOS 区块链交互的完整示例代码。项目包含账户管理、智能合约部署和调用等核心功能,适合作为 FISCO BCOS 应用开发的学习和实践基础。 + +## 技术栈 + +- **编程语言**: Java +- **构建工具**: Gradle +- **区块链平台**: FISCO BCOS +- **核心依赖**: + - FISCO BCOS Java SDK 2.9.1 + - SLF4J 日志框架 + +## 主要功能 + +### 1. 账户管理 +- **账户生成**: 支持生成 ECDSA 和国密 SM 两种加密类型的区块链账户 +- **PEM 格式**: 账户以 PEM 格式存储,包含私钥、公钥和地址信息 +- **账户加载**: 支持从 PEM 文件加载已有账户 +- **多账户管理**: 可批量生成和管理多个用户账户 + +### 2. 智能合约交互 +- HelloWorld 智能合约示例 +- 合约部署和调用演示 +- 支持使用指定账户与合约交互 + +### 3. 区块链节点连接 +- 配置化的节点连接管理 +- 支持多种加密类型(ECDSA / 国密 SM) +- 证书和密钥管理 + +## 项目结构 + +``` +contract/ +├── account/ # 生成的账户文件目录 (PEM 格式) +├── conf/ # 配置文件目录 +├── fisco/ # FISCO BCOS 相关文件 +├── src/ +│ └── main/ +│ └── java/ +│ └── com/org/fisco/ +│ ├── AccountGenerator.java # 账户生成工具 +│ ├── HelloWorld.java # HelloWorld 合约示例 +│ ├── HelloWorldWithAccount.java # 带账户的合约调用示例 +│ └── BcosSDKTest.java # SDK 测试类 +├── build.gradle # Gradle 构建配置 +└── README.md # 项目说明文档 +``` + +## 快速开始 + +### 前置要求 + +- JDK 8 或更高版本 +- Gradle 6.0 或更高版本 +- FISCO BCOS 区块链节点(运行中) + +### 安装与构建 + +1. 克隆项目到本地 +2. 配置区块链节点连接信息(在 `conf` 目录下) +3. 构建项目: + ```bash + ./gradlew build + ``` + +### 运行账户生成工具 + +```bash +./gradlew run +``` + +该命令会运行 `AccountGenerator` 主类,自动生成示例账户并保存到 `account` 目录。 + +生成的账户包括: +- user_pem.pem +- alice.pem +- bob.pem +- charlie.pem + +## 使用说明 + +### 生成账户 + +```java +import com.org.fisco.AccountGenerator; +import org.fisco.bcos.sdk.model.CryptoType; + +// 生成 ECDSA 类型账户 +AccountGenerator.generatePEMAccount("myAccount", CryptoType.ECDSA_TYPE); + +// 生成国密 SM 类型账户 +AccountGenerator.generatePEMAccount("myAccount", CryptoType.SM_TYPE); +``` + +### 加载账户 + +```java +// 从 PEM 文件加载账户 +CryptoKeyPair keyPair = AccountGenerator.loadPEMAccount("account/alice.pem", CryptoType.SM_TYPE); +``` + +## 配置说明 + +项目配置文件位于 `conf` 目录,主要包括: +- 节点连接配置 +- 证书文件 +- 群组配置 +- 加密类型配置 + +## 开发环境 + +- IDE: IntelliJ IDEA(推荐) +- 操作系统: macOS / Linux / Windows +- Java 版本: JDK 8+ + +## 许可证 + +本项目采用开源许可证发布。 + +## 相关资源 + +- [FISCO BCOS 官方文档](https://fisco-bcos-documentation.readthedocs.io/) +- [FISCO BCOS Java SDK 文档](https://fisco-bcos-documentation.readthedocs.io/zh_CN/latest/docs/sdk/java_sdk/index.html) + +## 贡献 + +欢迎提交 Issue 和 Pull Request 来改进这个项目。 diff --git a/account/alice.pem b/account/alice.pem new file mode 100644 index 0000000..10ef470 --- /dev/null +++ b/account/alice.pem @@ -0,0 +1,12 @@ +-----BEGIN PRIVATE KEY----- +1120cf8793ccb6df2a4a4f371503e9699d1512d2e35d73daa3202c20c8e11731 +-----END PRIVATE KEY----- +-----BEGIN PUBLIC KEY----- +6b68d579030462d7a0232b65a96c19a27bc98fd12ba8e5b09fdc83237ee54191ce8ff77d630341209d26bcd04640cf9e95f96af08718da3d258cef5e6e99bd08 +-----END PUBLIC KEY----- +-----BEGIN ADDRESS----- +0xfffecbb1ef05e897e8d7f9da10fa13255c5c7b17 +-----END ADDRESS----- +-----BEGIN CRYPTO TYPE----- +1 +-----END CRYPTO TYPE----- diff --git a/account/bob.pem b/account/bob.pem new file mode 100644 index 0000000..18e0066 --- /dev/null +++ b/account/bob.pem @@ -0,0 +1,12 @@ +-----BEGIN PRIVATE KEY----- +23230366ba1af4d9fe798a4891302e6f4d765f2cdb4e47836ceac4a3d5f50967 +-----END PRIVATE KEY----- +-----BEGIN PUBLIC KEY----- +8bd59280cc6deee3de64d88c45227cf1342a6603607e30099371a0b5ab469e832dc2b72a00f7c3acbc5b40fc6a0fc298ae8545467e67dab4d3037b129c608ba9 +-----END PUBLIC KEY----- +-----BEGIN ADDRESS----- +0x863a9a841c4242c7cab7ab3d5399f41ae21d05f9 +-----END ADDRESS----- +-----BEGIN CRYPTO TYPE----- +1 +-----END CRYPTO TYPE----- diff --git a/account/charlie.pem b/account/charlie.pem new file mode 100644 index 0000000..4c5f19f --- /dev/null +++ b/account/charlie.pem @@ -0,0 +1,12 @@ +-----BEGIN PRIVATE KEY----- +3855d3f52955a2ff799d52996fa0828d077d8dbb19242e6bd1d7b3a6f8dfbf29 +-----END PRIVATE KEY----- +-----BEGIN PUBLIC KEY----- +aeb5629ca59d24e78f0aab53a03405fc6814316a1bdac4fba56385e8639b10d8ab04a53a7b7d94a5138f51ee02de7a7481ff8dc350c1b5d015dfa95273f48025 +-----END PUBLIC KEY----- +-----BEGIN ADDRESS----- +0xdb52dabfe568e15331d302f4d9a411d6993c3606 +-----END ADDRESS----- +-----BEGIN CRYPTO TYPE----- +1 +-----END CRYPTO TYPE----- diff --git a/account/user_pem.pem b/account/user_pem.pem new file mode 100644 index 0000000..4b100c1 --- /dev/null +++ b/account/user_pem.pem @@ -0,0 +1,12 @@ +-----BEGIN PRIVATE KEY----- +e9c890670f4af89b804ea94e4068f604170d6c39f428bc04b62e8e2b5d05fdf2 +-----END PRIVATE KEY----- +-----BEGIN PUBLIC KEY----- +f7e50297ef82600b324685265cae5b3e9030fd3c8d45b643a1c4316ecfae282b1a241c3f1d42d1d129a24d66f636dcb17b3e0a4ca34b3cb6475f774e1cb0b83a +-----END PUBLIC KEY----- +-----BEGIN ADDRESS----- +0x7843803067240dd872e50a26b254c83bc77d77ed +-----END ADDRESS----- +-----BEGIN CRYPTO TYPE----- +1 +-----END CRYPTO TYPE----- diff --git a/build.gradle b/build.gradle new file mode 100644 index 0000000..fbe068a --- /dev/null +++ b/build.gradle @@ -0,0 +1,31 @@ +plugins { + id 'java' + id 'application' +} + +group = 'org.example' +version = '1.0-SNAPSHOT' + +repositories { + mavenCentral() +} + + +dependencies { + implementation ('org.fisco-bcos.java-sdk:fisco-bcos-java-sdk:2.9.1') + + // 添加日志实现,避免 SLF4J 警告 + implementation 'org.slf4j:slf4j-simple:1.7.36' + + testImplementation platform('org.junit:junit-bom:5.10.0') + testImplementation 'org.junit.jupiter:junit-jupiter' + testRuntimeOnly 'org.junit.platform:junit-platform-launcher' +} + +test { + useJUnitPlatform() +} + +application { + mainClass = 'com.org.fisco.AccountGenerator' +} \ No newline at end of file diff --git a/conf/ca.crt b/conf/ca.crt new file mode 100644 index 0000000..844d467 --- /dev/null +++ b/conf/ca.crt @@ -0,0 +1,18 @@ +-----BEGIN CERTIFICATE----- +MIIC9zCCAd8CFCHZXCvdfXdVqezsonFAU3f2LgNMMA0GCSqGSIb3DQEBCwUAMDcx +EDAOBgNVBAMMB2FnZW5jeUExEzARBgNVBAoMCmZpc2NvLWJjb3MxDjAMBgNVBAsM +BWNoYWluMCAXDTI2MDIwNjA0MDEwNVoYDzIxMjYwMTEzMDQwMTA1WjA3MRAwDgYD +VQQDDAdhZ2VuY3lBMRMwEQYDVQQKDApmaXNjby1iY29zMQ4wDAYDVQQLDAVjaGFp +bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANQbqCgGZqEpM5aDOGFd +6lN7Z8cmV7Tbx2GviSU2AtcUjHhlGRfYepruSYbLLthhtjZVLzbSNliDYS7n7+AE +TAaR1RTtfL/6WIdMMmoPwHQHzNQ088dcMxcjHiUamvzKyJwxYlxRwCIQqQsiq0uE +boSlPmYVcWs4ahfydMJoEoALCj4/A+MSIxWBfki7G5p5vMbFy55dMc1ugPfw7XJm +rEiBo3XgXHT8yi41tMurh8Cr/F2gOMcLunbUb5aUpPTjdMqTkb/yGrGCHdLZI/g/ +QOibfd5NDNs6l66zy0JQDWzWzHZ5Yzw5J2oPu4hwaX/1ub6x4j77n9k9VbCesTfu +cTcCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAEIqWVURjPmtC09GXcKhVvSm0esmw +fzTe1rfzXZI7Qzfv7If0fRaGwFA8EI4qE435UykVE7P4V1nqRsJQdWxu+5N0JlXF +QbbYvjho0Vb3Nd0rqeJtQyKLPH3idsFsYi26vbMaX5iEOssDiy4wLvfKt1fYglGd +Ytd5KnVqqTB9/C0RJYUsyGk/+rnXcOpeu83rdH5afDuQVF5WfpfX9XGrQJWrAQwJ +cNETHLc7Yd7HeJmEIIRxJKiKsOcRc1kezy/ZYeeotJO0ZCJ9qCtWO9AHwpZutXXT +ULO1CTfAcczyOpRrWtegbriyqenCZfKpcJ/UZNgP+HdPhZSI+aTsPfUPGg== +-----END CERTIFICATE----- diff --git a/conf/cert.cnf b/conf/cert.cnf new file mode 100644 index 0000000..f182224 --- /dev/null +++ b/conf/cert.cnf @@ -0,0 +1,29 @@ +[ca] +default_ca=default_ca +[default_ca] +default_days = 365 +default_md = sha256 + +[req] +distinguished_name = req_distinguished_name +req_extensions = v3_req +[req_distinguished_name] +countryName = CN +countryName_default = CN +stateOrProvinceName = State or Province Name (full name) +stateOrProvinceName_default =GuangDong +localityName = Locality Name (eg, city) +localityName_default = ShenZhen +organizationalUnitName = Organizational Unit Name (eg, section) +organizationalUnitName_default = fisco-bcos +commonName = Organizational commonName (eg, fisco-bcos) +commonName_default = fisco-bcos +commonName_max = 64 + +[ v3_req ] +basicConstraints = CA:FALSE +keyUsage = nonRepudiation, digitalSignature, keyEncipherment + +[ v4_req ] +basicConstraints = CA:TRUE + diff --git a/conf/gm/gmca.crt b/conf/gm/gmca.crt new file mode 100644 index 0000000..169d974 --- /dev/null +++ b/conf/gm/gmca.crt @@ -0,0 +1,12 @@ +-----BEGIN CERTIFICATE----- +MIIBxTCCAWqgAwIBAgIJAPSAlCTqOJY3MAoGCCqBHM9VAYN1MDcxEDAOBgNVBAMM +B2dtY2hhaW4xEzARBgNVBAoMCmZpc2NvLWJjb3MxDjAMBgNVBAsMBWNoYWluMCAX +DTI2MDIwNjA0MDEwNVoYDzIxMjYwMTEzMDQwMTA1WjA3MRAwDgYDVQQDDAdnbWNo +YWluMRMwEQYDVQQKDApmaXNjby1iY29zMQ4wDAYDVQQLDAVjaGFpbjBZMBMGByqG +SM49AgEGCCqBHM9VAYItA0IABLmhQY65M64nPOre8lfW5S4WLm3nI5UDHmgg/Ug/ +pMmpolL7Noc528pK9HFOZYA+1Wgp1e3DizsO85OR4W+F4lKjXTBbMB0GA1UdDgQW +BBR8ewFMkuB1I40ls9/R2ZIP3yp4FjAfBgNVHSMEGDAWgBR8ewFMkuB1I40ls9/R +2ZIP3yp4FjAMBgNVHRMEBTADAQH/MAsGA1UdDwQEAwIBBjAKBggqgRzPVQGDdQNJ +ADBGAiEAjVNUxBNYAZj/Cv041LbBwWkLj0pPjpGX1k3ZgruUKOACIQDvtSp38lD7 +jpi5W7mTXH6OMm6AUVziRGh8ODQKnCRp8Q== +-----END CERTIFICATE----- diff --git a/conf/gm/gmensdk.crt b/conf/gm/gmensdk.crt new file mode 100644 index 0000000..9124492 --- /dev/null +++ b/conf/gm/gmensdk.crt @@ -0,0 +1,11 @@ +-----BEGIN CERTIFICATE----- +MIIBgjCCASegAwIBAgIJAL+zBlcZ31NIMAoGCCqBHM9VAYN1MDsxEzARBgNVBAMM +CmFnZW5jeUEtZ20xEzARBgNVBAoMCmZpc2NvLWJjb3MxDzANBgNVBAsMBmFnZW5j +eTAgFw0yNjAyMDYwNDAxMDZaGA8yMTI2MDExMzA0MDEwNlowMzEMMAoGA1UEAwwD +c2RrMRMwEQYDVQQKDApmaXNjby1iY29zMQ4wDAYDVQQLDAVlbnNkazBZMBMGByqG +SM49AgEGCCqBHM9VAYItA0IABBWEvtek8MGJoF528A9ECUooZ6MpDiF1S0V2BYSE +Wlibu+2VYJYSZtRLY8fPaFtiU1fRmS0hoDxmLW8MLcCsTPWjGjAYMAkGA1UdEwQC +MAAwCwYDVR0PBAQDAgM4MAoGCCqBHM9VAYN1A0kAMEYCIQDtT30Osq4PQ9KeTeJI +jnxan8Fm7Za3mez9w7IE1BQXlAIhAOqXF68GsigOqHFZ7Y8FGdfuP6tpoTaVRTLF +n0/Ceo8X +-----END CERTIFICATE----- diff --git a/conf/gm/gmensdk.key b/conf/gm/gmensdk.key new file mode 100644 index 0000000..f6b4966 --- /dev/null +++ b/conf/gm/gmensdk.key @@ -0,0 +1,5 @@ +-----BEGIN PRIVATE KEY----- +MIGHAgEAMBMGByqGSM49AgEGCCqBHM9VAYItBG0wawIBAQQgG1YrjGc1e/Lfd5Eb +e3i+qTpf+sBU6YBQsjMz1G86RvChRANCAAQVhL7XpPDBiaBedvAPRAlKKGejKQ4h +dUtFdgWEhFpYm7vtlWCWEmbUS2PHz2hbYlNX0ZktIaA8Zi1vDC3ArEz1 +-----END PRIVATE KEY----- diff --git a/conf/gm/gmsdk.crt b/conf/gm/gmsdk.crt new file mode 100644 index 0000000..c5d08f1 --- /dev/null +++ b/conf/gm/gmsdk.crt @@ -0,0 +1,35 @@ +-----BEGIN CERTIFICATE----- +MIIBfzCCASWgAwIBAgIJAL+zBlcZ31NHMAoGCCqBHM9VAYN1MDsxEzARBgNVBAMM +CmFnZW5jeUEtZ20xEzARBgNVBAoMCmZpc2NvLWJjb3MxDzANBgNVBAsMBmFnZW5j +eTAgFw0yNjAyMDYwNDAxMDZaGA8yMTI2MDExMzA0MDEwNlowMTEMMAoGA1UEAwwD +c2RrMRMwEQYDVQQKDApmaXNjby1iY29zMQwwCgYDVQQLDANzZGswWTATBgcqhkjO +PQIBBggqgRzPVQGCLQNCAARjprE8r7lT893QkAl6XUPo2VHTYJWplJULE5fEd10J +Qr39IQinuu3EfdN/EJcQWKGs8g0LpBJzyTt1DVH7eMfhoxowGDAJBgNVHRMEAjAA +MAsGA1UdDwQEAwIGwDAKBggqgRzPVQGDdQNIADBFAiBOxkoOw89pKV45oS9xkayR +a8b48zFCwhl64e/C4Cd9RAIhAOp3tu311JO92zS+1F9KE1PviigxM5Wwawu5ZgSV +bSho +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIBxzCCAW6gAwIBAgIJAMoFIqx10XfAMAoGCCqBHM9VAYN1MDcxEDAOBgNVBAMM +B2dtY2hhaW4xEzARBgNVBAoMCmZpc2NvLWJjb3MxDjAMBgNVBAsMBWNoYWluMCAX +DTI2MDIwNjA0MDEwNVoYDzIxMjYwMTEzMDQwMTA1WjA7MRMwEQYDVQQDDAphZ2Vu +Y3lBLWdtMRMwEQYDVQQKDApmaXNjby1iY29zMQ8wDQYDVQQLDAZhZ2VuY3kwWTAT +BgcqhkjOPQIBBggqgRzPVQGCLQNCAATQI9maMxt/8i75GN0xv3aApeYf1xU8+JpA +vzzP925b2KOE4vfsnunsrV7NdC48O0FsSOJQsJs4TP40xcGIeX0oo10wWzAdBgNV +HQ4EFgQUhzVrLyY4bq+m1UklHuaBOiAsxMYwHwYDVR0jBBgwFoAUfHsBTJLgdSON +JbPf0dmSD98qeBYwDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAQYwCgYIKoEcz1UB +g3UDRwAwRAIgeyET44D0eDRuPCXg3vqpKXfF+Ks/h0h50Cd1AsvPjggCID/HYDTe +OEwICO0uVYC+rc+XAVhrTrMhFyerjbty1fMK +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIBxTCCAWqgAwIBAgIJAPSAlCTqOJY3MAoGCCqBHM9VAYN1MDcxEDAOBgNVBAMM +B2dtY2hhaW4xEzARBgNVBAoMCmZpc2NvLWJjb3MxDjAMBgNVBAsMBWNoYWluMCAX +DTI2MDIwNjA0MDEwNVoYDzIxMjYwMTEzMDQwMTA1WjA3MRAwDgYDVQQDDAdnbWNo +YWluMRMwEQYDVQQKDApmaXNjby1iY29zMQ4wDAYDVQQLDAVjaGFpbjBZMBMGByqG +SM49AgEGCCqBHM9VAYItA0IABLmhQY65M64nPOre8lfW5S4WLm3nI5UDHmgg/Ug/ +pMmpolL7Noc528pK9HFOZYA+1Wgp1e3DizsO85OR4W+F4lKjXTBbMB0GA1UdDgQW +BBR8ewFMkuB1I40ls9/R2ZIP3yp4FjAfBgNVHSMEGDAWgBR8ewFMkuB1I40ls9/R +2ZIP3yp4FjAMBgNVHRMEBTADAQH/MAsGA1UdDwQEAwIBBjAKBggqgRzPVQGDdQNJ +ADBGAiEAjVNUxBNYAZj/Cv041LbBwWkLj0pPjpGX1k3ZgruUKOACIQDvtSp38lD7 +jpi5W7mTXH6OMm6AUVziRGh8ODQKnCRp8Q== +-----END CERTIFICATE----- diff --git a/conf/gm/gmsdk.key b/conf/gm/gmsdk.key new file mode 100644 index 0000000..4195de0 --- /dev/null +++ b/conf/gm/gmsdk.key @@ -0,0 +1,5 @@ +-----BEGIN PRIVATE KEY----- +MIGHAgEAMBMGByqGSM49AgEGCCqBHM9VAYItBG0wawIBAQQgoxmrcKs1GIs5Ew2z +MtY/LPzpypmdrP2YcfGE9iKE4cyhRANCAARjprE8r7lT893QkAl6XUPo2VHTYJWp +lJULE5fEd10JQr39IQinuu3EfdN/EJcQWKGs8g0LpBJzyTt1DVH7eMfh +-----END PRIVATE KEY----- diff --git a/conf/gm/gmsdk.publickey b/conf/gm/gmsdk.publickey new file mode 100644 index 0000000..5f9e254 --- /dev/null +++ b/conf/gm/gmsdk.publickey @@ -0,0 +1 @@ +63a6b13cafb953f3ddd090097a5d43e8d951d36095a994950b1397c4775d0942bdfd2108a7baedc47dd37f10971058a1acf20d0ba41273c93b750d51fb78c7e1 diff --git a/conf/sdk.crt b/conf/sdk.crt new file mode 100644 index 0000000..a20c27c --- /dev/null +++ b/conf/sdk.crt @@ -0,0 +1,18 @@ +-----BEGIN CERTIFICATE----- +MIIC+zCCAeMCFAuwtZkiTBgmFOw4C/QNXnVg6Qm+MA0GCSqGSIb3DQEBCwUAMDcx +EDAOBgNVBAMMB2FnZW5jeUExEzARBgNVBAoMCmZpc2NvLWJjb3MxDjAMBgNVBAsM +BWNoYWluMCAXDTI2MDIwNjA0MDEwNloYDzIxMjYwMTEzMDQwMTA2WjA7MRMwEQYD +VQQDDApGSVNDTy1CQ09TMRMwEQYDVQQKDApmaXNjby1iY29zMQ8wDQYDVQQLDAZh +Z2VuY3kwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQD1LZn9mPsId0uY +7ewKt2NCMoSdM4eE6BOFdIdZnM5qieOucqOhR8xMjBZtkaHX5yHzEOA4NZtNhvCs +l5kUHmQGxTalLjCwkZWMf88gEqoR26a5RR6uq5Zd3cH/Eb6eHYM70Y5TUVFgNhDU +zaAXFP9J4BCx9tHGC4bDhhRALDJ8rUyAyUSQypW4vetegfaRVzXcOfbVUQxp1/xw +Gp66APSfzhAIvS5VuqBfO4ZU7IJlbwyqwgkZyoDKq25Q5W9wE6Y0tsFqVEZihPHP +pInX4ynXAQm8FkAyUVS6cpAXs0ZOpceN8ibSz811Kp/HjbvxY2Em66uu4XsrZnXs ++FuA/yETAgMBAAEwDQYJKoZIhvcNAQELBQADggEBAGikh1Lcx3tMaS5o3GVHybF7 +N4UZr71YBONJcR5tuqDpjAuF8XX9bRq25IDN8Fk3q/GQYRLMCETJeQwP1xSyuEBp +5clmA9UvGOCXPsG04BkwOovE718mWTm6Ip2iEWf6OMlnmMPPYY/w5pDk0UjBKpPj +l7Nn9iIWS46HGGBzBvX+DAkmXdB3xXD0uloPNrMsudKeJITUOUKev1Ar7sf7Knh/ +Es+HbusUWphdfMz6YdctAEcjm3J6IGmtSQmiYre7TNG7iVEA4tP933miyR9ihhP5 ++Vchd6BCC35Lk7mial1Vc0bV3oLicHrQMcMQ7WLuExyUcbtST4nVuLKlFAj/Juk= +-----END CERTIFICATE----- diff --git a/conf/sdk.key b/conf/sdk.key new file mode 100644 index 0000000..635a037 --- /dev/null +++ b/conf/sdk.key @@ -0,0 +1,28 @@ +-----BEGIN PRIVATE KEY----- +MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQD1LZn9mPsId0uY +7ewKt2NCMoSdM4eE6BOFdIdZnM5qieOucqOhR8xMjBZtkaHX5yHzEOA4NZtNhvCs +l5kUHmQGxTalLjCwkZWMf88gEqoR26a5RR6uq5Zd3cH/Eb6eHYM70Y5TUVFgNhDU +zaAXFP9J4BCx9tHGC4bDhhRALDJ8rUyAyUSQypW4vetegfaRVzXcOfbVUQxp1/xw +Gp66APSfzhAIvS5VuqBfO4ZU7IJlbwyqwgkZyoDKq25Q5W9wE6Y0tsFqVEZihPHP +pInX4ynXAQm8FkAyUVS6cpAXs0ZOpceN8ibSz811Kp/HjbvxY2Em66uu4XsrZnXs ++FuA/yETAgMBAAECggEAAd29KH0pGqk5yz9dsWkwRA6OttmaZExrQElLnHGBRWCo ++dNyjmWLAbbRQY0/Dkh6mCyJNbRRayIl+Seq6R3KxMhsgDkH8tgbgMxvlFQVX6Rs +h517PHjJi2EG5dJJ6/nX3V/cyvfj/Cz9LM7R3fXGyaupxN5W6MB+tUSd09fiRyj7 +YHFEtIQ18TAHPRGYDPhI/qWsBYeKOcgpC8BlhS4kbszoJ5BrlzH6HHNi9NzfF/1B +emrYTPohonmiwIbBjmSFPTugzYMn2ntp1PvyG+NbseeyAGe1/98u7ktXI3FDMqU9 +x1YYHOkbc36HwfkPtM8b0i1bg/OCdDCrLbJe5cZqfQKBgQD+oPcZKUkE+C8w2iYp +gRsB8rwXLnichDNwo3PPCmOFy9efknJk9h0l1jFI1lU4kmXEV6BsByFzrNReUZyR +Pgiu8s9ckXU9a78XAKgidMmP2sCFp5kZmh+haYAaAwW8N/nX1D2mg910FGucIie9 +3jnxf7rvRaM3D8appQDsFIcTnwKBgQD2f5uGGBbXdFzmmit/y2FBt7YnOZad626T +4n31R/OBrLMl5GuNRSaaDGt0BaZzNU4nOF1f7DSVZr8VC8StXYor0M/ao7Dqh3Fx +kfGqGj4qvjYg+zuudr4TYZKHILQNr3bx6NA9a1DvGA19W5dAxYHlXui0NmyApfQd +hVqa4pmeDQKBgBhdUKegsrL+CI31Idew2eO61VKmiLX5VG6/xTIXfWRtF+nV+oo8 +npdjQn4EvEzYfVJnTBtqJ0JJVFzeFEw1kmEjLMJfzMceyz8pOe1qHWtddDSVz+mK +POKWFMLobSEQfiCv12JaldMorQ9YmVLqs8KvBTUmBbMcGFddSZRNdotjAoGBAMUY +T5Cu3kS0RDwW9cUfJ8rWTA2dHHN09lvE9BYVy/zZy/z2YZD5w93VJG4GvorMCouN +pAu44Gq9VvhLCp3cd0iFlE0sKZ+9YNYAbg0nIqImqT1B5Pyg8Wap0/G8EnwG2sKe +9zLFBlfHEbI0dAJUaoKumr7N7YAIMeMQ59uEaHRZAoGBALge3B+I24Psq8CFWJ98 +BjOUFC9DqU5ImW59aioBFe6ukvQgMcjQ0DxHLg1fGUHv70lk6xcCVmypTAmvhyQt +2TnhJgpwW848kdDsrRiHHImmOWXlnMONexVVyB3TanX2A1puF2wutInmA8+aUA34 +LhI9mFGkzTEOr5osJJJSdhEF +-----END PRIVATE KEY----- diff --git a/diagnose-certs.ps1 b/diagnose-certs.ps1 new file mode 100644 index 0000000..d6df199 --- /dev/null +++ b/diagnose-certs.ps1 @@ -0,0 +1,113 @@ +Write-Host "=== FISCO BCOS 国密证书诊断 ===" -ForegroundColor Cyan +Write-Host "" + +$projectRoot = Get-Location +Write-Host "项目目录: $projectRoot" -ForegroundColor Gray +Write-Host "" + +# 检查证书目录 +Write-Host "1. 检查证书目录结构..." -ForegroundColor Yellow +$certPath = "conf\gm" + +if (Test-Path "conf") { + Write-Host " ✓ conf 目录存在" -ForegroundColor Green + + if (Test-Path $certPath) { + Write-Host " ✓ conf\gm 目录存在" -ForegroundColor Green + } else { + Write-Host " ✗ conf\gm 目录不存在" -ForegroundColor Red + Write-Host "" + Write-Host "请创建目录: mkdir conf\gm -Force" -ForegroundColor Yellow + } +} else { + Write-Host " ✗ conf 目录不存在" -ForegroundColor Red + Write-Host "" + Write-Host "请创建目录: mkdir conf\gm -Force" -ForegroundColor Yellow +} + +Write-Host "" + +# 检查证书文件 +Write-Host "2. 检查国密证书文件..." -ForegroundColor Yellow +$requiredFiles = @( + "gmca.crt", + "gmsdk.crt", + "gmsdk.key", + "gmensdk.crt", + "gmensdk.key" +) + +$allPresent = $true +foreach ($file in $requiredFiles) { + $filePath = "conf\gm\$file" + if (Test-Path $filePath) { + $fileSize = (Get-Item $filePath).Length + $firstLine = (Get-Content $filePath -First 1 -ErrorAction SilentlyContinue) + + if ($firstLine -match "BEGIN") { + Write-Host " ✓ $file ($fileSize 字节) - 格式正确" -ForegroundColor Green + } else { + Write-Host " ⚠ $file ($fileSize 字节) - 格式可能有问题" -ForegroundColor Yellow + } + } else { + Write-Host " ✗ $file - 文件不存在" -ForegroundColor Red + $allPresent = $false + } +} + +Write-Host "" + +# 检查配置文件 +Write-Host "3. 检查配置文件..." -ForegroundColor Yellow +if (Test-Path "config.toml") { + Write-Host " ✓ config.toml 存在" -ForegroundColor Green + + $content = Get-Content "config.toml" -Raw + if ($content -match 'useSMCrypto\s*=\s*"true"') { + Write-Host " ✓ 国密模式已启用" -ForegroundColor Green + } else { + Write-Host " ⚠ 国密模式未启用" -ForegroundColor Yellow + } + + if ($content -match 'certPath\s*=\s*"([^"]+)"') { + $certPathConfig = $matches[1] + Write-Host " 证书路径配置: $certPathConfig" -ForegroundColor Gray + } +} else { + Write-Host " ✗ config.toml 不存在" -ForegroundColor Red +} + +Write-Host "" + +# 检查 resources 目录 +Write-Host "4. 检查 resources 配置..." -ForegroundColor Yellow +if (Test-Path "src\main\resources\config.toml") { + Write-Host " ✓ src\main\resources\config.toml 存在" -ForegroundColor Green +} else { + Write-Host " ✗ src\main\resources\config.toml 不存在" -ForegroundColor Red + Write-Host " 需要复制: copy config.toml src\main\resources\" -ForegroundColor Yellow +} + +Write-Host "" + +# 总结 +Write-Host "=== 诊断总结 ===" -ForegroundColor Cyan +if ($allPresent) { + Write-Host "✓ 所有证书文件都已就位" -ForegroundColor Green + Write-Host "" + Write-Host "如果仍然连接失败,请检查:" -ForegroundColor Yellow + Write-Host " 1. 证书是否来自正确的节点服务器" -ForegroundColor Gray + Write-Host " 2. 证书文件内容是否完整" -ForegroundColor Gray + Write-Host " 3. 节点是否确实使用国密模式" -ForegroundColor Gray +} else { + Write-Host "✗ 缺少必要的证书文件" -ForegroundColor Red + Write-Host "" + Write-Host "请按以下步骤获取证书:" -ForegroundColor Yellow + Write-Host " 1. 在节点服务器上: cd /path/to/fisco/nodes/127.0.0.1/sdk" -ForegroundColor Gray + Write-Host " 2. 打包证书: tar -czf ~/fisco-gm-certs.tar.gz gm/" -ForegroundColor Gray + Write-Host " 3. 下载到 Windows 并解压到项目的 conf 目录" -ForegroundColor Gray +} + +Write-Host "" +Write-Host "需要更详细的帮助,请查看节点日志或联系管理员" -ForegroundColor Gray + diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000..249e583 Binary files /dev/null and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..4620418 --- /dev/null +++ b/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +#Thu Feb 05 15:52:41 CST 2026 +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-9.0.0-bin.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew new file mode 100755 index 0000000..1b6c787 --- /dev/null +++ b/gradlew @@ -0,0 +1,234 @@ +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit + +APP_NAME="Gradle" +APP_BASE_NAME=${0##*/} + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat new file mode 100644 index 0000000..ac1b06f --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,89 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/settings.gradle b/settings.gradle new file mode 100644 index 0000000..5f556aa --- /dev/null +++ b/settings.gradle @@ -0,0 +1 @@ +rootProject.name = 'contract' \ No newline at end of file diff --git a/src/main/java/org/example/Main.java b/src/main/java/org/example/Main.java new file mode 100644 index 0000000..2897885 --- /dev/null +++ b/src/main/java/org/example/Main.java @@ -0,0 +1,16 @@ +package org.example; +//TIP To Run code, press or +// click the icon in the gutter. +public class Main { + public static void main(String[] args) { + //TIP Press with your caret at the highlighted text + // to see how IntelliJ IDEA suggests fixing it. + System.out.printf("Hello and welcome!"); + + for (int i = 1; i <= 5; i++) { + //TIP Press to start debugging your code. We have set one breakpoint + // for you, but you can always add more by pressing . + System.out.println("i = " + i); + } + } +} \ No newline at end of file diff --git a/src/main/resources/config.toml b/src/main/resources/config.toml new file mode 100644 index 0000000..c03b54d --- /dev/null +++ b/src/main/resources/config.toml @@ -0,0 +1,55 @@ +[cryptoMaterial] + +certPath = "conf" # The certification path +useSMCrypto = "true" +# The following configurations take the certPath by default if commented +# caCert = "conf/ca.crt" # CA cert file path + # If connect to the GM node, default CA cert path is ${certPath}/gm/gmca.crt + +# sslCert = "conf/sdk.crt" # SSL cert file path + # If connect to the GM node, the default SDK cert path is ${certPath}/gm/gmsdk.crt + +# sslKey = "conf/sdk.key" # SSL key file path + # If connect to the GM node, the default SDK privateKey path is ${certPath}/gm/gmsdk.key + +# enSslCert = "conf/gm/gmensdk.crt" # GM encryption cert file path + # default load the GM SSL encryption cert from ${certPath}/gm/gmensdk.crt + +# enSslKey = "conf/gm/gmensdk.key" # GM ssl cert file path + # default load the GM SSL encryption privateKey from ${certPath}/gm/gmensdk.key + +[network] +peers=["121.196.226.157:20200", "8.137.93.11:20200"] # The peer list to connect + +# Configure a private topic as a topic message sender. +# [[amop]] +# topicName = "PrivateTopic1" +# publicKeys = [ "conf/amop/consumer_public_key_1.pem" ] # Public keys of the nodes that you want to send AMOP message of this topic to. + +# Configure a private topic as a topic subscriber. +# [[amop]] +# topicName = "PrivateTopic2" +# privateKey = "conf/amop/consumer_private_key.p12" # Your private key that used to subscriber verification. +# password = "123456" + +[account] +keyStoreDir = "account" # The directory to load/store the account file, default is "account" +# accountFilePath = "" # The account file path (default load from the path specified by the keyStoreDir) +accountFileFormat = "pem" # The storage format of account file (Default is "pem", "p12" as an option) + +accountAddress = "" # The transactions sending account address + # Default is a randomly generated account + # The randomly generated account is stored in the path specified by the keyStoreDir + +password = "" # The password used to load the account file + +[threadPool] +# channelProcessorThreadSize = "16" # The size of the thread pool to process channel callback + # Default is the number of cpu cores + +# receiptProcessorThreadSize = "16" # The size of the thread pool to process transaction receipt notification + # Default is the number of cpu cores + +maxBlockingQueueSize = "102400" # The max blocking queue size of the thread pool +maxTotal = "100" +maxPerRoute = "100" diff --git a/src/main/resources/simplelogger.properties b/src/main/resources/simplelogger.properties new file mode 100644 index 0000000..d40cbb1 --- /dev/null +++ b/src/main/resources/simplelogger.properties @@ -0,0 +1,20 @@ +# SLF4J Simple Logger 配置 +# 设置默认日志级别为 ERROR,只显示错误信息 +org.slf4j.simpleLogger.defaultLogLevel=error + +# 对于 FISCO BCOS SDK,设置为 INFO 级别 +org.slf4j.simpleLogger.log.org.fisco.bcos=info + +# 对于 Netty,设置为 ERROR 级别,隐藏警告 +org.slf4j.simpleLogger.log.io.netty=error + +# 显示日志名称 +org.slf4j.simpleLogger.showLogName=true + +# 显示线程名称 +org.slf4j.simpleLogger.showThreadName=false + +# 显示时间戳 +org.slf4j.simpleLogger.showDateTime=true +org.slf4j.simpleLogger.dateTimeFormat=yyyy-MM-dd HH:mm:ss +