feat(all): 搭建基本框架和模块
This commit is contained in:
@@ -0,0 +1,25 @@
|
||||
package com.eshore.gringotts.chain;
|
||||
|
||||
import com.ulisesbocchio.jasyptspringboot.annotation.EnableEncryptableProperties;
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
||||
import org.springframework.cache.annotation.EnableCaching;
|
||||
import org.springframework.scheduling.annotation.EnableAsync;
|
||||
|
||||
/**
|
||||
* 启动类
|
||||
*
|
||||
* @author lanyuanxiaoyao
|
||||
* @date 2024-11-15
|
||||
*/
|
||||
@SpringBootApplication(scanBasePackages = {"com.eshore.gringotts"})
|
||||
@EnableAsync
|
||||
@EnableCaching
|
||||
@EnableConfigurationProperties
|
||||
@EnableEncryptableProperties
|
||||
public class ChainApplication {
|
||||
public static void main(String[] args) {
|
||||
SpringApplication.run(ChainApplication.class, args);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,74 @@
|
||||
package com.eshore.gringotts.chain.configuration;
|
||||
|
||||
import cn.hutool.core.collection.ListUtil;
|
||||
import cn.hutool.core.map.MapUtil;
|
||||
import org.fisco.bcos.sdk.BcosSDK;
|
||||
import org.fisco.bcos.sdk.config.ConfigOption;
|
||||
import org.fisco.bcos.sdk.config.exceptions.ConfigException;
|
||||
import org.fisco.bcos.sdk.config.model.ConfigProperty;
|
||||
import org.springframework.beans.factory.annotation.Qualifier;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
||||
/**
|
||||
* Fisco配置
|
||||
*
|
||||
* @author lanyuanxiaoyao
|
||||
* @date 2024-09-27
|
||||
*/
|
||||
@Configuration
|
||||
public class FiscoConfiguration {
|
||||
@Bean
|
||||
public ConfigProperty defaultConfigProperty() {
|
||||
ConfigProperty property = new ConfigProperty();
|
||||
property.setCryptoMaterial(
|
||||
MapUtil.<String, Object>builder()
|
||||
.put("certPath", "conf")
|
||||
.build()
|
||||
);
|
||||
property.setNetwork(
|
||||
MapUtil.<String, Object>builder()
|
||||
.put("peers", ListUtil.of(
|
||||
// "192.168.100.122:20200",
|
||||
// "192.168.100.122:20201"
|
||||
// "192.168.100.122:30301",
|
||||
// "192.168.100.122:30302",
|
||||
// "192.168.100.122:30303"
|
||||
"192.168.100.118:20200",
|
||||
"192.168.100.118:20201"
|
||||
// "192.168.100.119:30300",
|
||||
// "192.168.100.119:30301",
|
||||
// "192.168.100.120:30300",
|
||||
// "192.168.100.120:30301"
|
||||
))
|
||||
.build()
|
||||
);
|
||||
property.setAccount(
|
||||
MapUtil.<String, Object>builder()
|
||||
.put("keyStoreDir", "account")
|
||||
.put("accountAddress", "account")
|
||||
.put("accountFileFormat", "pem")
|
||||
.put("password", "")
|
||||
.put("accountFilePath", "")
|
||||
.build()
|
||||
);
|
||||
property.setThreadPool(
|
||||
MapUtil.<String, Object>builder()
|
||||
.put("channelProcessorThreadSize", "16")
|
||||
.put("receiptProcessorThreadSize", "16")
|
||||
.put("maxBlockingQueueSize", "102400")
|
||||
.build()
|
||||
);
|
||||
return property;
|
||||
}
|
||||
|
||||
@Bean
|
||||
public ConfigOption defaultConfigOption(@Qualifier("defaultConfigProperty") ConfigProperty configProperty) throws ConfigException {
|
||||
return new ConfigOption(configProperty);
|
||||
}
|
||||
|
||||
@Bean
|
||||
public BcosSDK bcosSDK(@Qualifier("defaultConfigOption") ConfigOption configOption) {
|
||||
return new BcosSDK(configOption);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
package com.eshore.gringotts.chain.controller;
|
||||
|
||||
import com.eshore.gringotts.chain.service.KVDatasourceService;
|
||||
import org.fisco.bcos.sdk.transaction.model.exception.ContractException;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
/**
|
||||
* @author lanyuanxiaoyao
|
||||
* @date 2024-10-10
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("kv_datasource")
|
||||
public class KVDatasourceController {
|
||||
private static final Logger logger = LoggerFactory.getLogger(KVDatasourceController.class);
|
||||
|
||||
private final KVDatasourceService kvDatasourceService;
|
||||
|
||||
public KVDatasourceController(KVDatasourceService kvDatasourceService) {
|
||||
this.kvDatasourceService = kvDatasourceService;
|
||||
}
|
||||
|
||||
@GetMapping("create")
|
||||
public String createDatasource() throws ContractException {
|
||||
return kvDatasourceService.createDatasource();
|
||||
}
|
||||
|
||||
@PostMapping("set")
|
||||
public void setValue(@RequestParam("address") String address, @RequestParam("key") String key, @RequestBody String value) {
|
||||
kvDatasourceService.set(address, key, value);
|
||||
}
|
||||
|
||||
@GetMapping("get")
|
||||
public String getValue(@RequestParam("address") String address, @RequestParam("key") String key) throws ContractException {
|
||||
return kvDatasourceService.get(address, key);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,58 @@
|
||||
package com.eshore.gringotts.chain.service;
|
||||
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.eshore.gringotts.chain.service.sdk.KVDatasource;
|
||||
import org.fisco.bcos.sdk.BcosSDK;
|
||||
import org.fisco.bcos.sdk.abi.datatypes.generated.tuples.generated.Tuple2;
|
||||
import org.fisco.bcos.sdk.client.Client;
|
||||
import org.fisco.bcos.sdk.crypto.keypair.CryptoKeyPair;
|
||||
import org.fisco.bcos.sdk.transaction.model.exception.ContractException;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
/**
|
||||
* AssetService
|
||||
*
|
||||
* @author lanyuanxiaoyao
|
||||
* @date 2024-09-27
|
||||
*/
|
||||
@Service
|
||||
public class KVDatasourceService {
|
||||
private static final Logger logger = LoggerFactory.getLogger(KVDatasourceService.class);
|
||||
private final Client client;
|
||||
private final CryptoKeyPair cryptoKeyPair;
|
||||
|
||||
public KVDatasourceService(BcosSDK bcosSDK) {
|
||||
client = bcosSDK.getClient(1);
|
||||
cryptoKeyPair = client.getCryptoSuite().createKeyPair();
|
||||
client.getCryptoSuite().setCryptoKeyPair(cryptoKeyPair);
|
||||
logger.debug("create client for group1, account address is {}", cryptoKeyPair.getAddress());
|
||||
}
|
||||
|
||||
public String createDatasource() throws ContractException {
|
||||
KVDatasource datasource = KVDatasource.deploy(client, cryptoKeyPair);
|
||||
return datasource.getContractAddress();
|
||||
}
|
||||
|
||||
public void set(String address, String key, String value) {
|
||||
if (StrUtil.isBlankIfStr(address)) {
|
||||
throw new IllegalArgumentException("address is blank");
|
||||
}
|
||||
KVDatasource datasource = KVDatasource.load(address, client, cryptoKeyPair);
|
||||
datasource.set(key, value);
|
||||
}
|
||||
|
||||
public String get(String address, String key) throws ContractException {
|
||||
if (StrUtil.isBlankIfStr(address)) {
|
||||
throw new IllegalArgumentException("address is blank");
|
||||
}
|
||||
KVDatasource datasource = KVDatasource.load(address, client, cryptoKeyPair);
|
||||
Tuple2<Boolean, String> result = datasource.get(key);
|
||||
if (result.getValue1()) {
|
||||
return result.getValue2();
|
||||
} else {
|
||||
throw new ContractException("key not found");
|
||||
}
|
||||
}
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,5 @@
|
||||
-----BEGIN PRIVATE KEY-----
|
||||
MIGNAgEAMBAGByqGSM49AgEGBSuBBAAKBHYwdAIBAQQgc8MMkQftfrOm23duZ92G
|
||||
EQaxb+Ei76ksCuHPYt83HeCgBwYFK4EEAAqhRANCAAR9H4wgDV8olUOCs+LyJq4H
|
||||
Pot/VDM4yXPSxTIccy2v3lxh3EYIvrii0+wfMg1kK7dAgAc1QMXJr538XHCqiHSf
|
||||
-----END PRIVATE KEY-----
|
||||
16
gringotts-chain/src/main/resources/application.yml
Normal file
16
gringotts-chain/src/main/resources/application.yml
Normal file
@@ -0,0 +1,16 @@
|
||||
spring:
|
||||
application:
|
||||
name: gringotts-chain
|
||||
profiles:
|
||||
include: common,metrics,encrypt,web
|
||||
sa-token:
|
||||
is-print: false
|
||||
token-name: token
|
||||
logging:
|
||||
level:
|
||||
org:
|
||||
fisco:
|
||||
bcos:
|
||||
sdk:
|
||||
eventsub:
|
||||
EventSubscribeImp: error
|
||||
12
gringotts-chain/src/main/resources/conf/ca.crt
Normal file
12
gringotts-chain/src/main/resources/conf/ca.crt
Normal file
@@ -0,0 +1,12 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIBvDCCAWKgAwIBAgIJAI4dbR1Dd1ttMAoGCCqGSM49BAMCMDwxFTATBgNVBAMM
|
||||
DGRpcl9jaGFpbl9jYTETMBEGA1UECgwKZmlzY28tYmNvczEOMAwGA1UECwwFY2hh
|
||||
aW4wHhcNMjQwODIwMDYzNzAyWhcNMzQwODE4MDYzNzAyWjA8MRUwEwYDVQQDDAxk
|
||||
aXJfY2hhaW5fY2ExEzARBgNVBAoMCmZpc2NvLWJjb3MxDjAMBgNVBAsMBWNoYWlu
|
||||
MFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEI8ofKqvz+CphnDnVGUl1o/pgJRy8Y3Xq
|
||||
EAPneYQz0liFYpNj/1639TvFURgB6GJzxd7FP3zZOdu8VSlC8/DMeqNQME4wHQYD
|
||||
VR0OBBYEFK04KqbaLX2aU0J4k399NZAdIfAXMB8GA1UdIwQYMBaAFK04KqbaLX2a
|
||||
U0J4k399NZAdIfAXMAwGA1UdEwQFMAMBAf8wCgYIKoZIzj0EAwIDSAAwRQIgPzhT
|
||||
XQRMVZEgDx7jG04fA7gnBZDMJuPoHVjCI5OtaSwCIQCemdYuYSxiuGR4uXfNjTg2
|
||||
4a5eXDY5pShjPBc87DkOFQ==
|
||||
-----END CERTIFICATE-----
|
||||
20
gringotts-chain/src/main/resources/conf/node.crt
Normal file
20
gringotts-chain/src/main/resources/conf/node.crt
Normal file
@@ -0,0 +1,20 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIBdzCCAR6gAwIBAgIJAMyVdttfo0h7MAoGCCqGSM49BAMCMDgxEDAOBgNVBAMM
|
||||
B2FnZW5jeTExEzARBgNVBAoMCmZpc2NvLWJjb3MxDzANBgNVBAsMBmFnZW5jeTAe
|
||||
Fw0yNDA4MjAwNzA0NTdaFw0zNDA4MTgwNzA0NTdaMDIxDDAKBgNVBAMMA3NkazET
|
||||
MBEGA1UECgwKZmlzY28tYmNvczENMAsGA1UECwwEbm9kZTBWMBAGByqGSM49AgEG
|
||||
BSuBBAAKA0IABMYc+IJSEGtexAzraDoDr9CUgnF5Ccpq0GJeZb7mSjRmO/5Vihax
|
||||
aiVMg0lRNbKyFKfXcXqLKil4iCuPAYSmTnCjGjAYMAkGA1UdEwQCMAAwCwYDVR0P
|
||||
BAQDAgXgMAoGCCqGSM49BAMCA0cAMEQCIEvxV0ihURNRRq7G3IoRdxwsE16yQpe4
|
||||
10vfXchHWszWAiAQ6URHYi+LSKBr+NHdjtaGHit4lRVoDQ0bwayAV3t/4w==
|
||||
-----END CERTIFICATE-----
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIBdzCCAR6gAwIBAgIJAK0fQvVpYdrBMAoGCCqGSM49BAMCMDwxFTATBgNVBAMM
|
||||
DGRpcl9jaGFpbl9jYTETMBEGA1UECgwKZmlzY28tYmNvczEOMAwGA1UECwwFY2hh
|
||||
aW4wHhcNMjQwODIwMDYzNzIyWhcNMzQwODE4MDYzNzIyWjA4MRAwDgYDVQQDDAdh
|
||||
Z2VuY3kxMRMwEQYDVQQKDApmaXNjby1iY29zMQ8wDQYDVQQLDAZhZ2VuY3kwVjAQ
|
||||
BgcqhkjOPQIBBgUrgQQACgNCAATp/NI8BbOeqIcA88gEUlQNtN+of+DSBw5Us5Gh
|
||||
cF5MkRW4FheGm7mAJm461U+tKvNtCMIWDFq8eOBrh9PlnxbDoxAwDjAMBgNVHRME
|
||||
BTADAQH/MAoGCCqGSM49BAMCA0cAMEQCICrvDfwed6E8Q2cPEKrsxnKrQOMm8khA
|
||||
al/GYGKkKkGeAiAJAdDSDnjP+iHNPWk76r3K4vpPuaDJMf7gQ6Flp0IrpQ==
|
||||
-----END CERTIFICATE-----
|
||||
5
gringotts-chain/src/main/resources/conf/node.key
Normal file
5
gringotts-chain/src/main/resources/conf/node.key
Normal file
@@ -0,0 +1,5 @@
|
||||
-----BEGIN PRIVATE KEY-----
|
||||
MIGEAgEAMBAGByqGSM49AgEGBSuBBAAKBG0wawIBAQQgVjDe1YD2ettu7AJ3gJVx
|
||||
iX9rgTDpOQ4fGJH15lNhvCehRANCAATGHPiCUhBrXsQM62g6A6/QlIJxeQnKatBi
|
||||
XmW+5ko0Zjv+VYoWsWolTINJUTWyshSn13F6iyopeIgrjwGEpk5w
|
||||
-----END PRIVATE KEY-----
|
||||
20
gringotts-chain/src/main/resources/conf/sdk.crt
Normal file
20
gringotts-chain/src/main/resources/conf/sdk.crt
Normal file
@@ -0,0 +1,20 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIBdzCCAR6gAwIBAgIJAMyVdttfo0h7MAoGCCqGSM49BAMCMDgxEDAOBgNVBAMM
|
||||
B2FnZW5jeTExEzARBgNVBAoMCmZpc2NvLWJjb3MxDzANBgNVBAsMBmFnZW5jeTAe
|
||||
Fw0yNDA4MjAwNzA0NTdaFw0zNDA4MTgwNzA0NTdaMDIxDDAKBgNVBAMMA3NkazET
|
||||
MBEGA1UECgwKZmlzY28tYmNvczENMAsGA1UECwwEbm9kZTBWMBAGByqGSM49AgEG
|
||||
BSuBBAAKA0IABMYc+IJSEGtexAzraDoDr9CUgnF5Ccpq0GJeZb7mSjRmO/5Vihax
|
||||
aiVMg0lRNbKyFKfXcXqLKil4iCuPAYSmTnCjGjAYMAkGA1UdEwQCMAAwCwYDVR0P
|
||||
BAQDAgXgMAoGCCqGSM49BAMCA0cAMEQCIEvxV0ihURNRRq7G3IoRdxwsE16yQpe4
|
||||
10vfXchHWszWAiAQ6URHYi+LSKBr+NHdjtaGHit4lRVoDQ0bwayAV3t/4w==
|
||||
-----END CERTIFICATE-----
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIBdzCCAR6gAwIBAgIJAK0fQvVpYdrBMAoGCCqGSM49BAMCMDwxFTATBgNVBAMM
|
||||
DGRpcl9jaGFpbl9jYTETMBEGA1UECgwKZmlzY28tYmNvczEOMAwGA1UECwwFY2hh
|
||||
aW4wHhcNMjQwODIwMDYzNzIyWhcNMzQwODE4MDYzNzIyWjA4MRAwDgYDVQQDDAdh
|
||||
Z2VuY3kxMRMwEQYDVQQKDApmaXNjby1iY29zMQ8wDQYDVQQLDAZhZ2VuY3kwVjAQ
|
||||
BgcqhkjOPQIBBgUrgQQACgNCAATp/NI8BbOeqIcA88gEUlQNtN+of+DSBw5Us5Gh
|
||||
cF5MkRW4FheGm7mAJm461U+tKvNtCMIWDFq8eOBrh9PlnxbDoxAwDjAMBgNVHRME
|
||||
BTADAQH/MAoGCCqGSM49BAMCA0cAMEQCICrvDfwed6E8Q2cPEKrsxnKrQOMm8khA
|
||||
al/GYGKkKkGeAiAJAdDSDnjP+iHNPWk76r3K4vpPuaDJMf7gQ6Flp0IrpQ==
|
||||
-----END CERTIFICATE-----
|
||||
5
gringotts-chain/src/main/resources/conf/sdk.key
Normal file
5
gringotts-chain/src/main/resources/conf/sdk.key
Normal file
@@ -0,0 +1,5 @@
|
||||
-----BEGIN PRIVATE KEY-----
|
||||
MIGEAgEAMBAGByqGSM49AgEGBSuBBAAKBG0wawIBAQQgVjDe1YD2ettu7AJ3gJVx
|
||||
iX9rgTDpOQ4fGJH15lNhvCehRANCAATGHPiCUhBrXsQM62g6A6/QlIJxeQnKatBi
|
||||
XmW+5ko0Zjv+VYoWsWolTINJUTWyshSn13F6iyopeIgrjwGEpk5w
|
||||
-----END PRIVATE KEY-----
|
||||
Reference in New Issue
Block a user