Giter VIP home page Giter VIP logo

spring-boot-starter's Introduction

English / 中文

Spring Boot Starter

PRs Welcome Build Status CodeFactor

The sample spring boot project is based on Web3SDK, which provides the basic framework and basic test cases for blockchain application and helps developers to quickly develop applications based on the FISCO BCOS blockchain. The version only supports FISCO BCOS 2.0+.

Quickstart

Precodition

Build FISCO BCOS blockchain, please check out here

Download

$ git clone https://github.com/FISCO-BCOS/spring-boot-starter.git

Certificate Configuration

Copy the ca.crt, sdk.crt, and sdk.key files in the node's directory nodes/${ip}/sdk to the project's src/main/resources directory.(Before FISCO BCOS 2.1, the certificate files are ca.crt, node.crt and node.key)

Settings

The application.yml of the spring boot project is shown below, and the commented content is modified according to the blockchain node configuration.

encrypt-type: # 0:standard, 1:guomi
 encrypt-type: 0 
 
group-channel-connections-config:
  all-channel-connections:
  - group-id: 1  # group ID
    connections-str:
                    - 127.0.0.1:20200  # node listen_ip:channel_listen_port
                    - 127.0.0.1:20201
  - group-id: 2  
    connections-str:
                    - 127.0.0.1:20202  # node listen_ip:channel_listen_port
                    - 127.0.0.1:20203
 
channel-service:
  group-id: 1 # The specified group to which the SDK connects
  agency-name: fisco # agency name

accounts:
  pem-file: 0xcdcce60801c0a2e6bb534322c32ae528b9dec8d2.pem # PEM format account file
  p12-file: 0x98333491efac02f8ce109b0c499074d47e7779a6.p12 # PKCS12 format account file
  password: 123456 # PKCS12 format account password

A detail description of the SDK configuration for the project, please checkout here

Run

Compile and run test cases:

$ cd spring-boot-starter
$ ./gradlew build
$ ./gradlew test

When all test cases run successfully, it means that the blockchain is running normally,and the project is connected to the blockchain through the SDK. You can develop your blockchain application based on the project。

Note: If you run the demo project in IntelliJ IDEA or Eclipse, please use gradle wrapper mode. In addition, please enable Annotation Processors in Settings for IntelliJ IDEA.

Test Case Introduction

The sample project provides test cases for developers to use. The test cases are mainly divided into tests for Web3j API, Precompiled Serveice API, Solidity contract file to Java contract file, deployment and call contract.

Web3j API Test

Provide Web3jApiTest class to test the Web3j API. The sample test is as follows:

@Test
public void getBlockNumber() throws IOException {
    BigInteger blockNumber = web3j.getBlockNumber().send().getBlockNumber();
    System.out.println(blockNumber);
    assertTrue(blockNumber.compareTo(new BigInteger("0"))>= 0);
}

Tips: The Application class initializes the Web3j object, which can be used directly in the way where the business code needs it. The usage is as follows:

@Autowired
private Web3j web3j

Precompiled Service API Test

Provide PrecompiledServiceApiTest class to test the Precompiled Service API。The sample test is as follows:

@Test
public void testSystemConfigService() throws Exception {
    SystemConfigSerivce systemConfigSerivce = new SystemConfigSerivce(web3j, credentials);
    systemConfigSerivce.setValueByKey("tx_count_limit", "2000");
    String value = web3j.getSystemConfigByKey("tx_count_limit").send().getSystemConfigByKey();
    System.out.println(value);
    assertTrue("2000".equals(value));
}

Solidity contract file to Java contract file Test

Provide SolidityFunctionWrapperGeneratorTest class to test contract compilation. The sample test is as follows:

@Test
public void compileSolFilesToJavaTest() throws IOException {
    File solFileList = new File("src/test/resources/contract");
    File[] solFiles = solFileList.listFiles();

    for (File solFile : solFiles) {

        SolidityCompiler.Result res = SolidityCompiler.compile(solFile, true, ABI, BIN, INTERFACE, METADATA);
        System.out.println("Out: '" + res.output + "'");
        System.out.println("Err: '" + res.errors + "'");
        CompilationResult result = CompilationResult.parse(res.output);
        System.out.println("contractname  " + solFile.getName());
        Path source = Paths.get(solFile.getPath());
        String contractname = solFile.getName().split("\\.")[0];
        CompilationResult.ContractMetadata a = result.getContract(solFile.getName().split("\\.")[0]);
        System.out.println("abi   " + a.abi);
        System.out.println("bin   " + a.bin);
        FileUtils.writeStringToFile(new File("src/test/resources/solidity/" + contractname + ".abi"), a.abi);
        FileUtils.writeStringToFile(new File("src/test/resources/solidity/" + contractname + ".bin"), a.bin);
        String binFile;
        String abiFile;
        String tempDirPath = new File("src/test/java/").getAbsolutePath();
        String packageName = "org.fisco.bcos.temp";
        String filename = contractname;
        abiFile = "src/test/resources/solidity/" + filename + ".abi";
        binFile = "src/test/resources/solidity/" + filename + ".bin";
        SolidityFunctionWrapperGenerator.main(Arrays.asList(
                "-a", abiFile,
                "-b", binFile,
                "-p", packageName,
                "-o", tempDirPath
        ).toArray(new String[0]));
    }
    System.out.println("generate successfully");
}

This test case converts all Solidity contract files (HelloWorld contract provided by default) in the src/test/resources/contract directory to the corresponding abi and bin files, and save them in the src/test/resources/solidity directory. Then convert the abi file and the corresponding bin file combination into a Java contract file, which is saved in the src/test/java/org/fisco/bcos/temp directory. The SDK will use the Java contract file for contract deployment and invocation.

Deployment and Invocation Contract Test

Provide ContractTest class to test deploy and call contracts. The sample test is as follows:

@Test
public void deployAndCallHelloWorld() throws Exception {
    //deploy contract
    HelloWorld helloWorld = HelloWorld.deploy(web3j, credentials, new StaticGasProvider(gasPrice, gasLimit)).send();
    if (helloWorld != null) {
        System.out.println("HelloWorld address is: " + helloWorld.getContractAddress());
        //call set function
        helloWorld.set("Hello, World!").send();
        //call get function
        String result = helloWorld.get().send();
        System.out.println(result);
        assertTrue( "Hello, World!".equals(result));
    }
}

Code Contribution

  • Your contributions are most welcome and appreciated. Please read the contribution instructions .
  • If this project is useful to you, please star us on GitHub project page!

Join Our Community

The FISCO BCOS community is one of the most active open-source blockchain communities in China. It provides long-term technical support for both institutional and individual developers and users of FISCO BCOS. Thousands of technical enthusiasts from numerous industry sectors have joined this community, studying and using FISCO BCOS platform. If you are also interested, you are most welcome to join us for more support and fun.

Related Links

spring-boot-starter's People

Contributors

fqliao avatar dalaocu avatar ywy2090 avatar bxq2011hust avatar chaychen2005 avatar yanyanho avatar jimmyshi22 avatar handsometea avatar cyjseagull avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.