Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -147,7 +147,7 @@ We would like all developers to follow a standard development flow and coding st
2. Review the code before submission.
3. Run standardized tests.
`Sonar`-scanner and `Travis CI` continuous integration scanner will be automatically triggered when a pull request has been submitted. When a PR passes all the checks, the **java-tron** maintainers will then review the PR and offer feedback and modifications when necessary. Once adopted, the PR will be closed and merged into the `develop` branch.
`Sonar`-scanner and CI checks (GitHub Actions) will be automatically triggered when a pull request has been submitted. When a PR passes all the checks, the **java-tron** maintainers will then review the PR and offer feedback and modifications when necessary. Once adopted, the PR will be closed and merged into the `develop` branch.
We are glad to receive your pull requests and will try our best to review them as soon as we can. Any pull request is welcome, even if it is for a typo.
Expand All @@ -161,7 +161,7 @@ Please make sure your submission meets the following code style:
- The code must have passed the Sonar scanner test.
- The code has to be pulled from the `develop` branch.
- The commit message should start with a verb, whose initial should not be capitalized.
- The commit message should be less than 50 characters in length.
- The commit message title should be between 10 and 72 characters in length.
Expand Down Expand Up @@ -196,7 +196,7 @@ The message header is a single line that contains succinct description of the ch
The `scope` can be anything specifying place of the commit change. For example: `framework`, `api`, `tvm`, `db`, `net`. For a full list of scopes, see [Type and Scope Reference](#type-and-scope-reference). You can use `*` if there isn't a more fitting scope.
The subject contains a succinct description of the change:
1. Limit the subject line, which briefly describes the purpose of the commit, to 50 characters.
1. Limit the subject line, which briefly describes the purpose of the commit, to 72 characters (minimum 10).
2. Start with a verb and use first-person present-tense (e.g., use "change" instead of "changed" or "changes").
3. Do not capitalize the first letter.
4. Do not end the subject line with a period.
Expand Down
81 changes: 0 additions & 81 deletions build.md

This file was deleted.

69 changes: 38 additions & 31 deletions docs/implement-a-customized-actuator-en.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,13 +36,19 @@ message Transaction {
AccountCreateContract = 0;
TransferContract = 1;
........
SumContract = 52;
SumContract = 60;
}
...
}
```

Then register a function to ensure that gRPC can receive and identify the requests of this contract. Currently, gRPC protocols are all defined in `src/main/protos/api/api.proto`. To add an `InvokeSum` interface in Wallet Service:
Then register a function to ensure that gRPC can receive and identify the requests of this contract. Currently, gRPC protocols are all defined in `src/main/protos/api/api.proto`. First add the import for the new proto file at the top of `api.proto`:

```protobuf
import "core/contract/math_contract.proto";
```

Then add an `InvokeSum` interface in the Wallet service:

```protobuf
service Wallet {
Expand All @@ -60,13 +66,11 @@ service Wallet {
```
At last, recompile the modified proto files. Compiling the java-tron project directly will compile the proto files as well, `protoc` command is also supported.

*Currently, java-tron uses protoc v3.4.0. Please keep the same version when compiling by `protoc` command.*

```shell
# recommended
# recommended — also recompiles proto files automatically
./gradlew build -x test

# or build via protoc
# or build via protoc (ensure the protoc version matches the one declared in build.gradle)
protoc -I=src/main/protos -I=src/main/protos/core --java_out=src/main/java Tron.proto
protoc -I=src/main/protos/core/contract --java_out=src/main/java math_contract.proto
protoc -I=src/main/protos/api -I=src/main/protos/core -I=src/main/protos --java_out=src/main/java api.proto
Expand All @@ -78,7 +82,11 @@ After compilation, the corresponding .class under the java_out directory will be

For now, the default Actuator supported by java-tron is located in `org.tron.core.actuator`. Creating `SumActuator` under this directory:

> **Note**: The Actuator must be placed in the `org.tron.core.actuator` package. At node startup, `TransactionRegister.registerActuator()` uses reflection to scan that package and auto-discovers every `AbstractActuator` subclass. Each subclass is instantiated once (triggering the `super()` constructor which calls `TransactionFactory.register()`), so no manual registration code is needed.

```java
import static org.tron.core.config.Parameter.ChainConstant.TRANSFER_FEE;

public class SumActuator extends AbstractActuator {

public SumActuator() {
Expand Down Expand Up @@ -210,48 +218,47 @@ At last, run a test class to validate whether the above steps are correct:
```java
public class SumActuatorTest {
private static final Logger logger = LoggerFactory.getLogger("Test");
private String serviceNode = "127.0.0.1:50051";
private String confFile = "config-localtest.conf";
private String dbPath = "output-directory";
private TronApplicationContext context;
private Application appTest;
private ManagedChannel channelFull = null;
private WalletGrpc.WalletBlockingStub blockingStubFull = null;
private static final String SERVICE_NODE = "127.0.0.1:50051";

@ClassRule
public static TemporaryFolder temporaryFolder = new TemporaryFolder();

@Rule
public Timeout timeout = new Timeout(30, TimeUnit.SECONDS);

private static TronApplicationContext context;
private static Application appTest;
private static ManagedChannel channelFull;
private static WalletGrpc.WalletBlockingStub blockingStubFull;

/**
* init the application.
* init the application once for all tests in this class.
*/
@Before
public void init() {
CommonParameter argsTest = Args.getInstance();
Args.setParam(new String[]{"--output-directory", dbPath},
confFile);
@BeforeClass
public static void init() throws IOException {
Args.setParam(new String[]{"--output-directory",
temporaryFolder.newFolder().toString()}, "config-localtest.conf");
context = new TronApplicationContext(DefaultConfig.class);
RpcApiService rpcApiService = context.getBean(RpcApiService.class);
appTest = ApplicationFactory.create(context);
appTest.addService(rpcApiService);
appTest.initServices(argsTest);
appTest.startServices();
appTest.startup();
channelFull = ManagedChannelBuilder.forTarget(serviceNode)
channelFull = ManagedChannelBuilder.forTarget(SERVICE_NODE)
.usePlaintext()
.build();
blockingStubFull = WalletGrpc.newBlockingStub(channelFull);
}

/**
* destroy the context.
* destroy the context after all tests finish.
*/
@After
public void destroy() throws InterruptedException {
@AfterClass
public static void destroy() throws InterruptedException {
if (channelFull != null) {
channelFull.shutdown().awaitTermination(5, TimeUnit.SECONDS);
channelFull.shutdown();
channelFull.awaitTermination(5, TimeUnit.SECONDS);
}
Args.clearParam();
appTest.shutdownServices();
appTest.shutdown();
context.destroy();
FileUtil.deleteDir(new File(dbPath));
Args.clearParam();
}

@Test
Expand Down
69 changes: 38 additions & 31 deletions docs/implement-a-customized-actuator-zh.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,13 +38,19 @@ message Transaction {
AccountCreateContract = 0;
TransferContract = 1;
........
SumContract = 52;
SumContract = 60;
}
...
}
```

然后还需要注册一个方法来保证 gRPC 能够接收并识别该类型合约的请求,目前 gRPC 协议统一定义在 src/main/protos/api/api.proto,在 api.proto 中的 Wallet Service 新增 `InvokeSum` 接口:
然后还需要注册一个方法来保证 gRPC 能够接收并识别该类型合约的请求,目前 gRPC 协议统一定义在 src/main/protos/api/api.proto。首先在 `api.proto` 顶部添加对新 proto 文件的 import:

```protobuf
import "core/contract/math_contract.proto";
```

然后在 Wallet service 中新增 `InvokeSum` 接口:

```protobuf
service Wallet {
Expand All @@ -62,13 +68,11 @@ service Wallet {
```
最后重新编译修改过 proto 文件,可自行编译也可直接通过编译 java-tron 项目来编译 proto 文件:

*目前 java-tron 采用的是 protoc v3.4.0,自行编译时确保 protoc 版本一致。*

```shell
# recommended
# 推荐方式 —— 直接编译项目,proto 文件会自动重新编译
./gradlew build -x test

# or build via protoc
# 或者手动使用 protoc(版本需与 build.gradle 中声明的一致)
protoc -I=src/main/protos -I=src/main/protos/core --java_out=src/main/java Tron.proto
protoc -I=src/main/protos/core/contract --java_out=src/main/java math_contract.proto
protoc -I=src/main/protos/api -I=src/main/protos/core -I=src/main/protos --java_out=src/main/java api.proto
Expand All @@ -80,7 +84,11 @@ protoc -I=src/main/protos/api -I=src/main/protos/core -I=src/main/protos --java

目前 java-tron 默认支持的 Actuator 存放在该模块的 org.tron.core.actuator 目录下,同样在该目录下创建 `SumActuator` :

> **注意**:Actuator 必须放在 `org.tron.core.actuator` 包下。节点启动时,`TransactionRegister.registerActuator()` 会通过反射扫描该包,自动发现所有 `AbstractActuator` 的子类,并各实例化一次(触发 `super()` 构造器,进而调用 `TransactionFactory.register()`)。因此无需手动编写注册代码。

```java
import static org.tron.core.config.Parameter.ChainConstant.TRANSFER_FEE;

public class SumActuator extends AbstractActuator {

public SumActuator() {
Expand Down Expand Up @@ -212,48 +220,47 @@ public class WalletApi extends WalletImplBase {
```java
public class SumActuatorTest {
private static final Logger logger = LoggerFactory.getLogger("Test");
private String serviceNode = "127.0.0.1:50051";
private String confFile = "config-localtest.conf";
private String dbPath = "output-directory";
private TronApplicationContext context;
private Application appTest;
private ManagedChannel channelFull = null;
private WalletGrpc.WalletBlockingStub blockingStubFull = null;
private static final String SERVICE_NODE = "127.0.0.1:50051";

@ClassRule
public static TemporaryFolder temporaryFolder = new TemporaryFolder();

@Rule
public Timeout timeout = new Timeout(30, TimeUnit.SECONDS);

private static TronApplicationContext context;
private static Application appTest;
private static ManagedChannel channelFull;
private static WalletGrpc.WalletBlockingStub blockingStubFull;

/**
* init the application.
* 整个测试类只初始化一次应用上下文。
*/
@Before
public void init() {
CommonParameter argsTest = Args.getInstance();
Args.setParam(new String[]{"--output-directory", dbPath},
confFile);
@BeforeClass
public static void init() throws IOException {
Args.setParam(new String[]{"--output-directory",
temporaryFolder.newFolder().toString()}, "config-localtest.conf");
context = new TronApplicationContext(DefaultConfig.class);
RpcApiService rpcApiService = context.getBean(RpcApiService.class);
appTest = ApplicationFactory.create(context);
appTest.addService(rpcApiService);
appTest.initServices(argsTest);
appTest.startServices();
appTest.startup();
channelFull = ManagedChannelBuilder.forTarget(serviceNode)
channelFull = ManagedChannelBuilder.forTarget(SERVICE_NODE)
.usePlaintext()
.build();
blockingStubFull = WalletGrpc.newBlockingStub(channelFull);
}

/**
* destroy the context.
* 所有测试结束后统一销毁上下文。
*/
@After
public void destroy() throws InterruptedException {
@AfterClass
public static void destroy() throws InterruptedException {
if (channelFull != null) {
channelFull.shutdown().awaitTermination(5, TimeUnit.SECONDS);
channelFull.shutdown();
channelFull.awaitTermination(5, TimeUnit.SECONDS);
}
Args.clearParam();
appTest.shutdownServices();
appTest.shutdown();
context.destroy();
FileUtil.deleteDir(new File(dbPath));
Args.clearParam();
}

@Test
Expand Down
13 changes: 6 additions & 7 deletions docs/modular-deployment-en.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
# How to deploy java-tron after modularization

After modularization, java-tron is launched via shell script instead of typing command: `java -jar FullNode.jar`.
After modularization, the recommended way to launch java-tron is via the shell script generated in `bin/`. The classic `java -jar FullNode.jar` command is still fully supported as an alternative.

*`java -jar FullNode.jar` still works, but will be deprecated in future*.
> **Supported platforms**: Linux and macOS. Windows is not supported.

## Download

Expand All @@ -29,7 +29,7 @@ After unzip, two directories will be generated in java-tron: `bin` and `lib`, sh

## Startup

Use the corresponding script to start java-tron according to the OS type, use `*.bat` on Windows, Linux demo is as below:
Use the shell script to start java-tron (Linux / macOS):
```
# default
java-tron-1.0.0/bin/FullNode
Expand All @@ -45,12 +45,11 @@ java-tron-1.0.0/bin/FullNode -c config.conf -w

JVM options can also be specified, located in `bin/java-tron.vmoptions`:
```
# demo
-XX:+UseConcMarkSweepGC
# demo (compatible with JDK 8 / JDK 17)
-Xms2g
-Xmx9g
-XX:+PrintGCDetails
-Xloggc:./gc.log
-XX:+PrintGCDateStamps
-XX:+CMSParallelRemarkEnabled
-XX:ReservedCodeCacheSize=256m
-XX:+CMSScavengeBeforeRemark
```
Loading
Loading