1
0

feat(all): 搭建基本框架和模块

This commit is contained in:
2024-11-15 15:35:08 +08:00
commit 1900265075
174 changed files with 87868 additions and 0 deletions

View File

@@ -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);
}
}

View File

@@ -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);
}
}

View File

@@ -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);
}
}

View File

@@ -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

View File

@@ -0,0 +1,5 @@
-----BEGIN PRIVATE KEY-----
MIGNAgEAMBAGByqGSM49AgEGBSuBBAAKBHYwdAIBAQQgc8MMkQftfrOm23duZ92G
EQaxb+Ei76ksCuHPYt83HeCgBwYFK4EEAAqhRANCAAR9H4wgDV8olUOCs+LyJq4H
Pot/VDM4yXPSxTIccy2v3lxh3EYIvrii0+wfMg1kK7dAgAc1QMXJr538XHCqiHSf
-----END PRIVATE KEY-----

View 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

View File

@@ -0,0 +1,12 @@
-----BEGIN CERTIFICATE-----
MIIBvDCCAWKgAwIBAgIJAI4dbR1Dd1ttMAoGCCqGSM49BAMCMDwxFTATBgNVBAMM
DGRpcl9jaGFpbl9jYTETMBEGA1UECgwKZmlzY28tYmNvczEOMAwGA1UECwwFY2hh
aW4wHhcNMjQwODIwMDYzNzAyWhcNMzQwODE4MDYzNzAyWjA8MRUwEwYDVQQDDAxk
aXJfY2hhaW5fY2ExEzARBgNVBAoMCmZpc2NvLWJjb3MxDjAMBgNVBAsMBWNoYWlu
MFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEI8ofKqvz+CphnDnVGUl1o/pgJRy8Y3Xq
EAPneYQz0liFYpNj/1639TvFURgB6GJzxd7FP3zZOdu8VSlC8/DMeqNQME4wHQYD
VR0OBBYEFK04KqbaLX2aU0J4k399NZAdIfAXMB8GA1UdIwQYMBaAFK04KqbaLX2a
U0J4k399NZAdIfAXMAwGA1UdEwQFMAMBAf8wCgYIKoZIzj0EAwIDSAAwRQIgPzhT
XQRMVZEgDx7jG04fA7gnBZDMJuPoHVjCI5OtaSwCIQCemdYuYSxiuGR4uXfNjTg2
4a5eXDY5pShjPBc87DkOFQ==
-----END CERTIFICATE-----

View 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-----

View File

@@ -0,0 +1,5 @@
-----BEGIN PRIVATE KEY-----
MIGEAgEAMBAGByqGSM49AgEGBSuBBAAKBG0wawIBAQQgVjDe1YD2ettu7AJ3gJVx
iX9rgTDpOQ4fGJH15lNhvCehRANCAATGHPiCUhBrXsQM62g6A6/QlIJxeQnKatBi
XmW+5ko0Zjv+VYoWsWolTINJUTWyshSn13F6iyopeIgrjwGEpk5w
-----END PRIVATE KEY-----

View 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-----

View File

@@ -0,0 +1,5 @@
-----BEGIN PRIVATE KEY-----
MIGEAgEAMBAGByqGSM49AgEGBSuBBAAKBG0wawIBAQQgVjDe1YD2ettu7AJ3gJVx
iX9rgTDpOQ4fGJH15lNhvCehRANCAATGHPiCUhBrXsQM62g6A6/QlIJxeQnKatBi
XmW+5ko0Zjv+VYoWsWolTINJUTWyshSn13F6iyopeIgrjwGEpk5w
-----END PRIVATE KEY-----