Skip to content

Commit a678ba8

Browse files
authored
Merge pull request #19 from strategyobject/feature/cleanup
Restructure project
2 parents 338ebdc + e8a7c79 commit a678ba8

File tree

372 files changed

+1743
-1834
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

372 files changed

+1743
-1834
lines changed

api/build.gradle

+9-7
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,21 @@
11
dependencies {
22
implementation project(':common')
3+
implementation project(':crypto')
34
implementation project(':pallet')
45
implementation project(':rpc')
5-
implementation project(':rpc:rpc-core')
6-
implementation project(':rpc:rpc-sections')
7-
implementation project(':rpc:rpc-types')
6+
implementation project(':rpc:rpc-api')
87
implementation project(':scale')
9-
implementation project(':storage')
108
implementation project(':transport')
11-
implementation project(':types')
9+
10+
annotationProcessor project(':pallet:pallet-codegen')
11+
annotationProcessor project(':rpc:rpc-codegen')
1212

1313
testImplementation project(':tests')
1414

15+
testAnnotationProcessor project(':pallet:pallet-codegen')
16+
17+
testImplementation 'ch.qos.logback:logback-classic:1.2.11'
1518
testImplementation 'org.testcontainers:testcontainers:1.17.1'
1619
testImplementation 'org.testcontainers:junit-jupiter:1.17.1'
17-
18-
testAnnotationProcessor project(':pallet:pallet-codegen')
20+
testImplementation 'org.awaitility:awaitility:4.2.0'
1921
}
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,65 @@
11
package com.strategyobject.substrateclient.api;
22

33
import com.strategyobject.substrateclient.pallet.GeneratedPalletResolver;
4-
import com.strategyobject.substrateclient.rpc.Rpc;
5-
import com.strategyobject.substrateclient.rpc.RpcImpl;
4+
import com.strategyobject.substrateclient.pallet.PalletResolver;
5+
import com.strategyobject.substrateclient.rpc.RpcGeneratedSectionFactory;
6+
import com.strategyobject.substrateclient.rpc.api.section.State;
67
import com.strategyobject.substrateclient.transport.ProviderInterface;
8+
import lombok.NonNull;
79
import lombok.val;
810

11+
import java.util.Map;
12+
import java.util.concurrent.ConcurrentHashMap;
13+
914
/**
1015
* Provides the ability to query a node and interact with the Polkadot or Substrate chains.
1116
* It allows interacting with blockchain in various ways: using RPC's queries directly or
1217
* accessing Pallets and its APIs, such as storages, transactions, etc.
1318
*/
14-
public interface Api {
15-
static DefaultApi with(ProviderInterface provider) {
16-
val rpc = RpcImpl.with(provider);
19+
public class Api implements AutoCloseable {
20+
private final @NonNull ProviderInterface providerInterface;
21+
private final @NonNull PalletResolver palletResolver;
22+
private final Map<Class<?>, Object> resolvedCache = new ConcurrentHashMap<>();
23+
24+
private Api(@NonNull ProviderInterface providerInterface) {
25+
this.providerInterface = providerInterface;
1726

18-
return DefaultApi.with(rpc, GeneratedPalletResolver.with(rpc));
27+
val state = RpcGeneratedSectionFactory.create(State.class, providerInterface);
28+
this.palletResolver = GeneratedPalletResolver.with(state);
1929
}
2030

2131
/**
22-
* @return the instance that provides a proper API for querying the RPC's methods.
32+
* Resolves the instance of a rpc by its definition.
33+
*
34+
* @param clazz the class of the rpc
35+
* @param <T> the type of the rpc
36+
* @return appropriate instance of the rpc
2337
*/
24-
Rpc rpc();
38+
public <T> T rpc(Class<T> clazz) {
39+
return clazz.cast(resolvedCache
40+
.computeIfAbsent(clazz, x -> RpcGeneratedSectionFactory.create(x, providerInterface)));
41+
}
2542

2643
/**
2744
* Resolves the instance of a pallet by its definition.
45+
*
2846
* @param clazz the class of the pallet
29-
* @param <T> the type of the pallet
47+
* @param <T> the type of the pallet
3048
* @return appropriate instance of the pallet
3149
*/
32-
<T> T pallet(Class<T> clazz);
33-
}
50+
public <T> T pallet(@NonNull Class<T> clazz) {
51+
return clazz.cast(resolvedCache
52+
.computeIfAbsent(clazz, palletResolver::resolve));
53+
}
54+
55+
public static Api with(ProviderInterface providerInterface) {
56+
return new Api(providerInterface);
57+
}
58+
59+
@Override
60+
public void close() throws Exception {
61+
if (providerInterface instanceof AutoCloseable) {
62+
((AutoCloseable) providerInterface).close();
63+
}
64+
}
65+
}

api/src/main/java/com/strategyobject/substrateclient/api/DefaultApi.java

-34
This file was deleted.

api/src/test/java/com/strategyobject/substrateclient/api/ApiTests.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,14 @@
1515
import static org.junit.jupiter.api.Assertions.assertNotNull;
1616

1717
@Testcontainers
18-
public class ApiTests {
18+
class ApiTests {
1919
private static final int WAIT_TIMEOUT = 1000;
2020

2121
@Container
2222
private final TestSubstrateContainer substrate = new TestSubstrateContainer(SubstrateVersion.V3_0_0);
2323

2424
@Test
25-
public void getSystemPalletAndCall() throws Exception { // TODO move the test out of the project
25+
void getSystemPalletAndCall() throws Exception { // TODO move the test out of the project
2626
val wsProvider = WsProvider.builder()
2727
.setEndpoint(substrate.getWsAddress())
2828
.build();

api/src/test/java/com/strategyobject/substrateclient/api/SystemPallet.java

+8-8
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
package com.strategyobject.substrateclient.api;
22

3-
import com.strategyobject.substrateclient.pallet.annotations.Pallet;
4-
import com.strategyobject.substrateclient.pallet.annotations.Storage;
5-
import com.strategyobject.substrateclient.pallet.annotations.StorageHasher;
6-
import com.strategyobject.substrateclient.pallet.annotations.StorageKey;
7-
import com.strategyobject.substrateclient.rpc.types.BlockHash;
8-
import com.strategyobject.substrateclient.scale.annotations.Scale;
9-
import com.strategyobject.substrateclient.storage.StorageNMap;
3+
import com.strategyobject.substrateclient.pallet.annotation.Pallet;
4+
import com.strategyobject.substrateclient.pallet.annotation.Storage;
5+
import com.strategyobject.substrateclient.pallet.annotation.StorageHasher;
6+
import com.strategyobject.substrateclient.pallet.annotation.StorageKey;
7+
import com.strategyobject.substrateclient.pallet.storage.StorageNMap;
8+
import com.strategyobject.substrateclient.rpc.api.BlockHash;
9+
import com.strategyobject.substrateclient.scale.annotation.Scale;
1010

1111
@Pallet("System")
1212
public interface SystemPallet {
@@ -15,7 +15,7 @@ public interface SystemPallet {
1515
keys = {
1616
@StorageKey(
1717
type = @Scale(Integer.class),
18-
hasher = StorageHasher.TwoX64Concat
18+
hasher = StorageHasher.TWOX_64_CONCAT
1919
)
2020
})
2121
StorageNMap<BlockHash> blockHash();

build.gradle

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ plugins {
55

66
allprojects {
77
group = 'com.strategyobject.substrateclient'
8-
version = '0.1.1-SNAPSHOT'
8+
version = '0.1.2-SNAPSHOT'
99

1010
repositories {
1111
mavenLocal()

common/src/main/java/com/strategyobject/substrateclient/common/codegen/ProcessorContext.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ public boolean isNonGeneric(@NonNull TypeMirror type) {
4343
return type.getKind().isPrimitive() ||
4444
((TypeElement) typeUtils.asElement(type))
4545
.getTypeParameters()
46-
.size() == 0;
46+
.isEmpty();
4747
}
4848

4949
public TypeMirror erasure(@NonNull TypeMirror type) {

common/src/main/java/com/strategyobject/substrateclient/common/codegen/TypeTraverser.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,7 @@ public T traverse(@NonNull TypeTraverser.TypeTreeNode typeOverride) {
160160
}
161161

162162
val declaredType = (DeclaredType) typeOverride.type;
163-
if (typeOverride.children.size() == 0) {
163+
if (typeOverride.children.isEmpty()) {
164164
return whenNonGenericType(declaredType, typeOverride.type);
165165
}
166166

common/src/main/java/com/strategyobject/substrateclient/common/codegen/TypeUtils.java

+3
Original file line numberDiff line numberDiff line change
@@ -48,4 +48,7 @@ public static String getSimpleName(TypeMirror type) {
4848

4949
throw new IllegalArgumentException(String.format("Cannot populate the name of %s", type));
5050
}
51+
52+
private TypeUtils() {
53+
}
5154
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
package com.strategyobject.substrateclient.common.types;
2+
3+
public interface Array<T> {
4+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package com.strategyobject.substrateclient.common.types;
2+
3+
import com.google.common.base.Preconditions;
4+
5+
/**
6+
* Upperbounds the size of a class.
7+
*
8+
* @param <S> Size
9+
*/
10+
public interface Bounded<S extends Size> {
11+
/**
12+
* Asserts that the size is correct.
13+
*
14+
* @param expected Expected size
15+
* @param actual Actual size
16+
*/
17+
default void assertSize(S expected, int actual) {
18+
Preconditions.checkArgument(
19+
actual <= expected.getValue(),
20+
"Provided size (%s) is invalid. Expected not more than %s.", actual, expected.getValue());
21+
}
22+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package com.strategyobject.substrateclient.common.types;
2+
3+
import com.google.common.base.Preconditions;
4+
5+
/**
6+
* Sets the size of a class.
7+
*
8+
* @param <S> Size
9+
*/
10+
public interface Fixed<S extends Size> {
11+
12+
/**
13+
* Asserts that the size is correct.
14+
*
15+
* @param expected Expected size
16+
* @param actual Actual size
17+
*/
18+
default void assertSize(S expected, int actual) {
19+
Preconditions.checkArgument(
20+
actual == expected.getValue(),
21+
"Provided size (%s) is invalid. Expected %s.", actual, expected.getValue());
22+
}
23+
}

types/src/main/java/com/strategyobject/substrateclient/types/FixedBytes.java common/src/main/java/com/strategyobject/substrateclient/common/types/FixedBytes.java

+3-5
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,17 @@
1-
package com.strategyobject.substrateclient.types;
1+
package com.strategyobject.substrateclient.common.types;
22

33
import com.google.common.base.Preconditions;
44
import lombok.EqualsAndHashCode;
55
import lombok.Getter;
66

77
@EqualsAndHashCode
8-
public abstract class FixedBytes<S extends Size> {
8+
public abstract class FixedBytes<S extends Size> implements Fixed<S> {
99
@Getter
1010
private final byte[] data;
1111

1212
protected FixedBytes(byte[] data, S size) {
1313
Preconditions.checkNotNull(data);
14-
Preconditions.checkArgument(
15-
data.length == size.getValue(),
16-
"The data size must be %s; received %s.", size.getValue(), data.length);
14+
assertSize(size, data.length);
1715

1816
this.data = data;
1917
}

types/src/main/java/com/strategyobject/substrateclient/types/Result.java common/src/main/java/com/strategyobject/substrateclient/common/types/Result.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.strategyobject.substrateclient.types;
1+
package com.strategyobject.substrateclient.common.types;
22

33
import lombok.val;
44

types/src/main/java/com/strategyobject/substrateclient/types/Size.java common/src/main/java/com/strategyobject/substrateclient/common/types/Size.java

+9-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.strategyobject.substrateclient.types;
1+
package com.strategyobject.substrateclient.common.types;
22

33
public interface Size {
44
int getValue();
@@ -8,6 +8,7 @@ public interface Size {
88
Of64 of64 = new Of64();
99
Of96 of96 = new Of96();
1010
Of128 of128 = new Of128();
11+
Of256 of256 = new Of256();
1112

1213
class Zero implements Size {
1314
@Override
@@ -43,4 +44,11 @@ public int getValue() {
4344
return 128;
4445
}
4546
}
47+
48+
class Of256 implements Size {
49+
@Override
50+
public int getValue() {
51+
return 256;
52+
}
53+
}
4654
}

types/src/main/java/com/strategyobject/substrateclient/types/Unit.java common/src/main/java/com/strategyobject/substrateclient/common/types/Unit.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.strategyobject.substrateclient.types;
1+
package com.strategyobject.substrateclient.common.types;
22

33
public class Unit {
44
private static final Unit UNIT = new Unit();

types/src/main/java/com/strategyobject/substrateclient/types/tuples/Pair.java common/src/main/java/com/strategyobject/substrateclient/common/types/tuple/Pair.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.strategyobject.substrateclient.types.tuples;
1+
package com.strategyobject.substrateclient.common.types.tuple;
22

33
import lombok.Getter;
44
import lombok.RequiredArgsConstructor;

types/src/main/java/com/strategyobject/substrateclient/types/union/Union.java common/src/main/java/com/strategyobject/substrateclient/common/types/union/Union.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.strategyobject.substrateclient.types.union;
1+
package com.strategyobject.substrateclient.common.types.union;
22

33
public abstract class Union {
44
protected int index;

types/src/main/java/com/strategyobject/substrateclient/types/union/Union1.java common/src/main/java/com/strategyobject/substrateclient/common/types/union/Union1.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.strategyobject.substrateclient.types.union;
1+
package com.strategyobject.substrateclient.common.types.union;
22

33
import lombok.NonNull;
44
import lombok.val;

types/src/main/java/com/strategyobject/substrateclient/types/union/Union10.java common/src/main/java/com/strategyobject/substrateclient/common/types/union/Union10.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.strategyobject.substrateclient.types.union;
1+
package com.strategyobject.substrateclient.common.types.union;
22

33
import com.google.common.base.Preconditions;
44
import lombok.NonNull;

types/src/main/java/com/strategyobject/substrateclient/types/union/Union11.java common/src/main/java/com/strategyobject/substrateclient/common/types/union/Union11.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.strategyobject.substrateclient.types.union;
1+
package com.strategyobject.substrateclient.common.types.union;
22

33
import com.google.common.base.Preconditions;
44
import lombok.NonNull;

types/src/main/java/com/strategyobject/substrateclient/types/union/Union12.java common/src/main/java/com/strategyobject/substrateclient/common/types/union/Union12.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.strategyobject.substrateclient.types.union;
1+
package com.strategyobject.substrateclient.common.types.union;
22

33
import com.google.common.base.Preconditions;
44
import lombok.NonNull;

types/src/main/java/com/strategyobject/substrateclient/types/union/Union2.java common/src/main/java/com/strategyobject/substrateclient/common/types/union/Union2.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.strategyobject.substrateclient.types.union;
1+
package com.strategyobject.substrateclient.common.types.union;
22

33
import com.google.common.base.Preconditions;
44
import lombok.NonNull;

types/src/main/java/com/strategyobject/substrateclient/types/union/Union3.java common/src/main/java/com/strategyobject/substrateclient/common/types/union/Union3.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.strategyobject.substrateclient.types.union;
1+
package com.strategyobject.substrateclient.common.types.union;
22

33
import com.google.common.base.Preconditions;
44
import lombok.NonNull;

types/src/main/java/com/strategyobject/substrateclient/types/union/Union4.java common/src/main/java/com/strategyobject/substrateclient/common/types/union/Union4.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.strategyobject.substrateclient.types.union;
1+
package com.strategyobject.substrateclient.common.types.union;
22

33
import com.google.common.base.Preconditions;
44
import lombok.NonNull;

types/src/main/java/com/strategyobject/substrateclient/types/union/Union5.java common/src/main/java/com/strategyobject/substrateclient/common/types/union/Union5.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.strategyobject.substrateclient.types.union;
1+
package com.strategyobject.substrateclient.common.types.union;
22

33
import com.google.common.base.Preconditions;
44
import lombok.NonNull;

0 commit comments

Comments
 (0)