diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml
index 8ca5dd98..3d5fab0e 100644
--- a/.github/workflows/maven.yml
+++ b/.github/workflows/maven.yml
@@ -19,11 +19,15 @@ jobs:
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v3
- - uses: actions/setup-java@v3
- with:
- distribution: 'temurin'
- java-version: '17'
- cache: 'maven'
- - name: Build with Maven
- run: mvn -B package --file pom.xml
+ - name: Checkout code
+ uses: actions/checkout@v4
+
+ - name: Set up JDK
+ uses: actions/setup-java@v4
+ with:
+ distribution: 'temurin'
+ java-version: '17'
+ cache: 'maven'
+
+ - name: Build with Maven
+ run: mvn clean package
diff --git a/pom.xml b/pom.xml
index e72dc8cf..f6fb30a7 100644
--- a/pom.xml
+++ b/pom.xml
@@ -17,40 +17,41 @@
package
${project.basedir}/dist
- 4.1.111.Final
+ 0.1.8
+ 4.1.115.Final
2.4.2
- 2.17.1
+ 2.18.2
5.5.0
- 1.18.32
+ 1.18.36
3.1.8
- 3.26.2
+ 3.26.3
4.13.2
- 5.11.0
+ 5.14.2
1.2.1
- 2.23.1
- 3.14.0
- 1.5
- 4.5.0-M1
- 1.17.0
- 2.16.1
- 1.8.0
- 33.2.1-jre
- 9.2.1
+ 2.24.2
+ 3.17.0
+ 1.6
+ 4.5.0-M2
+ 1.17.1
+ 2.18.0
+ 1.9.0
+ 33.3.1-jre
+ 9.7.3
4.12.0
3.26.0
23.1.3
- 1.78
- 1.78
- 4.5.7
+ 1.79
+ 1.79
+ 4.5.11
1.6
4.0.2
1.4.3
1.21.2
- 1.1.10.4
- 1.2.23
+ 1.1.10.7
+ 1.2.24
8.4.0
-
2.2.224
- 2.10
+ 2.3.232
+ 2.11.0
2.1.0
**/*RandomXSyncTest.java,**/*SyncTest.java,**/*SnapshotJTest.java
@@ -113,7 +114,7 @@
org.apache.maven.plugins
maven-compiler-plugin
- 3.11.0
+ 3.13.0
${maven.compiler.source}
${maven.compiler.target}
@@ -128,7 +129,7 @@
org.apache.maven.plugins
maven-surefire-plugin
- 3.0.0
+ 3.5.2
-Xmx2048m
@@ -141,7 +142,7 @@
org.apache.maven.plugins
maven-jar-plugin
- 3.2.0
+ 3.4.2
true
@@ -154,11 +155,25 @@
+
+ org.apache.maven.plugins
+ maven-source-plugin
+ 3.3.1
+
+
+ attach-sources
+
+ jar-no-fork
+
+
+
+
+
com.mycila
license-maven-plugin
- 4.2
+ 4.6
@@ -182,7 +197,7 @@
org.apache.maven.plugins
maven-shade-plugin
- 3.4.1
+ 3.6.0
package
@@ -228,8 +243,7 @@
true
shaded
-
+
.SF
NOTICE
AL2.0
@@ -237,8 +251,7 @@
LICENSE.txt
NOTICE.txt
-
+
LICENSE
en-mnemonic-word-list.txt
@@ -246,10 +259,8 @@
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
io.xdag.Bootstrap
- ${maven.compiler.source}
-
- ${maven.compiler.target}
-
+ ${maven.compiler.source}
+ ${maven.compiler.target}
true
@@ -306,70 +317,18 @@
${dist.phase}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
@@ -399,7 +358,7 @@
io.xdag
xdagj-native-randomx
- 0.1.7
+ ${xdagj-native-randomx.version}
diff --git a/src/main/java/io/xdag/Kernel.java b/src/main/java/io/xdag/Kernel.java
index 7c3ec59b..773ae448 100644
--- a/src/main/java/io/xdag/Kernel.java
+++ b/src/main/java/io/xdag/Kernel.java
@@ -425,9 +425,6 @@ public synchronized void testStop() {
dbFactory.getDB(name).close();
}
- // release
- randomx.randomXPoolReleaseMem();
- log.info("Release randomx");
webSocketServer.stop();
log.info("WebSocket server stop.");
poolAwardManager.stop();
diff --git a/src/main/java/io/xdag/cli/Shell.java b/src/main/java/io/xdag/cli/Shell.java
index 25969f61..882583bd 100644
--- a/src/main/java/io/xdag/cli/Shell.java
+++ b/src/main/java/io/xdag/cli/Shell.java
@@ -47,6 +47,7 @@
import org.jline.reader.impl.DefaultParser;
import org.jline.terminal.Terminal;
+import java.io.PrintWriter;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -164,8 +165,10 @@ private void processOldBalance(CommandInput input) {
}
private void println(final String msg) {
- reader.getTerminal().writer().println(msg);
- reader.getTerminal().writer().flush();
+ try(PrintWriter writer = reader.getTerminal().writer()) {
+ writer.println(msg);
+ writer.flush();
+ }
}
private void processAccount(CommandInput input) {
diff --git a/src/main/java/io/xdag/consensus/XdagPow.java b/src/main/java/io/xdag/consensus/XdagPow.java
index 167b5b96..d6f80505 100644
--- a/src/main/java/io/xdag/consensus/XdagPow.java
+++ b/src/main/java/io/xdag/consensus/XdagPow.java
@@ -267,8 +267,7 @@ protected void onNewShare(Bytes32 share) {
taskData.set(0, task.getTask()[0].getData());// preHash
taskData.set(32, share);// share
// Calculate hash
- hash = Bytes32.wrap(kernel.getRandomx()
- .randomXPoolCalcHash(taskData, taskData.size(), task.getTaskTime()).reverse());
+ hash = Bytes32.wrap(kernel.getRandomx().randomXPoolCalcHash(taskData, task.getTaskTime()).reverse());
} else {
XdagSha256Digest digest = new XdagSha256Digest(task.getDigest());
hash = Bytes32.wrap(digest.sha256Final(share.reverse()));
diff --git a/src/main/java/io/xdag/core/BlockchainImpl.java b/src/main/java/io/xdag/core/BlockchainImpl.java
index 5c859dd6..71cf8ad2 100644
--- a/src/main/java/io/xdag/core/BlockchainImpl.java
+++ b/src/main/java/io/xdag/core/BlockchainImpl.java
@@ -1212,7 +1212,7 @@ public BigInteger getDiffByRandomXHash(Block block) {
Bytes32 rxHash = Hash.sha256(block.getXdagBlock().getData().slice(0, 512 - 32));
data.set(0, rxHash);
data.set(32, block.getXdagBlock().getField(15).getData());
- byte[] blockHash = randomx.randomXBlockHash(data.toArray(), data.size(), epoch);
+ byte[] blockHash = randomx.randomXBlockHash(data.toArray(), epoch);
BigInteger diff;
if (blockHash != null) {
Bytes32 hash = Bytes32.wrap(Arrays.reverse(blockHash));
diff --git a/src/main/java/io/xdag/crypto/RandomX.java b/src/main/java/io/xdag/crypto/RandomX.java
index d2ade820..09154b9c 100644
--- a/src/main/java/io/xdag/crypto/RandomX.java
+++ b/src/main/java/io/xdag/crypto/RandomX.java
@@ -31,29 +31,20 @@
import static io.xdag.config.RandomXConstants.SEEDHASH_EPOCH_TESTNET_BLOCKS;
import static io.xdag.config.RandomXConstants.SEEDHASH_EPOCH_TESTNET_LAG;
import static io.xdag.config.RandomXConstants.XDAG_RANDOMX;
-import static io.xdag.utils.BytesUtils.bytesToPointer;
import static io.xdag.utils.BytesUtils.equalBytes;
-import java.util.concurrent.locks.ReadWriteLock;
-import java.util.concurrent.locks.ReentrantReadWriteLock;
+import java.util.Set;
+import io.xdag.crypto.randomx.*;
import org.apache.tuweni.bytes.Bytes;
import org.apache.tuweni.bytes.Bytes32;
import org.bouncycastle.util.Arrays;
import org.bouncycastle.util.encoders.Hex;
-import com.sun.jna.Memory;
-import com.sun.jna.NativeLong;
-import com.sun.jna.Pointer;
-
import io.xdag.config.Config;
import io.xdag.config.MainnetConfig;
import io.xdag.core.Block;
import io.xdag.core.Blockchain;
-import io.xdag.crypto.randomx.NativeSize;
-import io.xdag.crypto.randomx.RandomXFlag;
-import io.xdag.crypto.randomx.RandomXJNA;
-import io.xdag.crypto.randomx.RandomXUtils;
import io.xdag.utils.XdagTime;
import lombok.Data;
import lombok.Setter;
@@ -65,11 +56,10 @@
public class RandomX {
protected final RandomXMemory[] globalMemory = new RandomXMemory[2];
- protected final ReadWriteLock[] globalMemoryLock = new ReentrantReadWriteLock[2];
protected final Config config;
protected boolean isTestNet = true;
protected int mineType;
- protected int flags;
+ protected Set flagSet;
protected long randomXForkSeedHeight;
protected long randomXForkLag;
@@ -92,11 +82,11 @@ public RandomX(Config config) {
isTestNet = false;
}
this.mineType = XDAG_RANDOMX;
- // get randomx flags
+
+ flagSet = RandomXUtils.getFlagsSet();
if (config.getRandomxSpec().getRandomxFlag()) {
- flags = RandomXJNA.INSTANCE.randomx_get_flags() + RandomXFlag.LARGE_PAGES.getValue() + RandomXFlag.FULL_MEM.getValue();
- } else {
- flags = RandomXJNA.INSTANCE.randomx_get_flags();
+ flagSet.add(RandomXFlag.LARGE_PAGES);
+ flagSet.add(RandomXFlag.FULL_MEM);
}
}
@@ -177,46 +167,28 @@ public void init() {
// init memory and lock
for (int i = 0; i < 2; i++) {
- globalMemoryLock[i] = new ReentrantReadWriteLock();
globalMemory[i] = new RandomXMemory();
}
}
-
- // 矿池初始化dataset
- public void randomXPoolInitDataset(Pointer rxCache, Pointer rxDataset) {
- RandomXJNA.INSTANCE.randomx_init_dataset(rxDataset, rxCache, new NativeLong(0), RandomXJNA.INSTANCE.randomx_dataset_item_count());
- }
-
-
- // 计算出hash
- public Bytes32 randomXPoolCalcHash(Bytes data, int dataSize, long taskTime) {
+ public Bytes32 randomXPoolCalcHash(Bytes data, long taskTime) {
Bytes32 hash;
RandomXMemory memory = globalMemory[(int) (randomXPoolMemIndex) & 1];
- ReadWriteLock readWriteLock;
+
if (taskTime < memory.switchTime) {
- readWriteLock = globalMemoryLock[(int) (randomXPoolMemIndex - 1) & 1];
memory = globalMemory[(int) (randomXPoolMemIndex - 1) & 1];
- } else {
- readWriteLock = globalMemoryLock[(int) (randomXPoolMemIndex) & 1];
}
- readWriteLock.writeLock().lock();
- try {
- Pointer hashPointer = new Memory(RandomXUtils.HASH_SIZE);
- RandomXJNA.INSTANCE.randomx_calculate_hash(memory.poolVm, bytesToPointer(data.toArray()), new NativeSize(dataSize), hashPointer);
- hash = Bytes32.wrap(hashPointer.getByteArray(0, RandomXUtils.HASH_SIZE));
- } finally {
- readWriteLock.writeLock().unlock();
- }
+
+ byte[] bytes = memory.poolTemplate.calculateHash(data.toArray());
+ hash = Bytes32.wrap(bytes);
return hash;
}
- public byte[] randomXBlockHash(byte[] data, int dataSize, long blockTime) {
+ public byte[] randomXBlockHash(byte[] data, long blockTime) {
byte[] hash;
- ReadWriteLock readWriteLock;
RandomXMemory memory;
// no seed
if (randomXHashEpochIndex == 0) {
@@ -228,118 +200,26 @@ public byte[] randomXBlockHash(byte[] data, int dataSize, long blockTime) {
log.debug("Block time {} less then switchtime {}", Long.toHexString(blockTime),
Long.toHexString(memory.switchTime));
return null;
- } else {
- readWriteLock = globalMemoryLock[(int) (randomXHashEpochIndex) & 1];
}
} else {
memory = globalMemory[(int) (randomXHashEpochIndex) & 1];
if (blockTime < memory.switchTime) {
- readWriteLock = globalMemoryLock[(int) (randomXHashEpochIndex - 1) & 1];
memory = globalMemory[(int) (randomXHashEpochIndex - 1) & 1];
- } else {
- readWriteLock = globalMemoryLock[(int) (randomXHashEpochIndex) & 1];
}
}
- readWriteLock.writeLock().lock();
- try {
- log.debug("Use seed {}", Hex.toHexString(Arrays.reverse(memory.seed)));
- Pointer hashPointer = new Memory(RandomXUtils.HASH_SIZE);
- RandomXJNA.INSTANCE.randomx_calculate_hash(memory.blockVm, bytesToPointer(data), new NativeSize(dataSize), hashPointer);
- hash = hashPointer.getByteArray(0, RandomXUtils.HASH_SIZE);
- } finally {
- readWriteLock.writeLock().unlock();
- }
+ log.debug("Use seed {}", Hex.toHexString(Arrays.reverse(memory.seed)));
+ hash = memory.blockTemplate.calculateHash(data);
return hash;
}
- public Pointer randomXUpdateVm(RandomXMemory randomXMemory, boolean isPoolVm) {
- if (isPoolVm) {
- randomXMemory.poolVm = RandomXJNA.INSTANCE.randomx_create_vm(flags, randomXMemory.rxCache, randomXMemory.rxDataset);
- return randomXMemory.poolVm;
- } else {
- randomXMemory.blockVm = RandomXJNA.INSTANCE.randomx_create_vm(flags, randomXMemory.rxCache, randomXMemory.rxDataset);
- return randomXMemory.blockVm;
- }
- }
-
-
public void randomXPoolUpdateSeed(long memIndex) {
- ReadWriteLock readWriteLock = globalMemoryLock[(int) (memIndex) & 1];
- readWriteLock.writeLock().lock();
- try {
- RandomXMemory rx_memory = globalMemory[(int) (memIndex) & 1];
- if (rx_memory.rxCache == null) {
- rx_memory.rxCache = RandomXJNA.INSTANCE.randomx_alloc_cache(flags);
- if (rx_memory.rxCache == null) {
- // fail alloc
- log.debug("Failed alloc cache");
- return;
- }
- }
- // 分配成功
- RandomXJNA.INSTANCE.randomx_init_cache(rx_memory.rxCache, bytesToPointer(rx_memory.seed), new NativeSize(rx_memory.seed.length));
-
- if (config.getRandomxSpec().getRandomxFlag()) {
- if (rx_memory.rxDataset == null) {
- // 分配dataset
- rx_memory.rxDataset = RandomXJNA.INSTANCE.randomx_alloc_dataset(flags);
- if (rx_memory.rxDataset == null) {
- //分配失败
- log.debug("Failed alloc dataset");
- return;
- }
- }
-
- randomXPoolInitDataset(rx_memory.rxCache, rx_memory.rxDataset);
- } else {
- rx_memory.rxDataset = null;
- }
-
-
- if (randomXUpdateVm(rx_memory, true) == null) {
- // update failed
- log.debug("Update pool vm failed");
- return;
- }
-
- // update finished
- if (randomXUpdateVm(rx_memory, false) == null) {
- // update failed
- log.debug("Update block vm failed");
- }
-
- // update finished
-
- } finally {
- readWriteLock.writeLock().unlock();
- }
- }
-
- // 释放 ,用于程序关闭时
- public void randomXPoolReleaseMem() {
- for (int i = 0; i < 2; i++) {
- globalMemoryLock[i].writeLock().lock();
- try {
- RandomXMemory rx_memory = globalMemory[i];
- if (rx_memory.poolVm != null) {
- RandomXJNA.INSTANCE.randomx_destroy_vm(rx_memory.poolVm);
- }
- if (rx_memory.blockVm != null) {
- RandomXJNA.INSTANCE.randomx_destroy_vm(rx_memory.blockVm);
- }
- if (rx_memory.rxCache != null) {
- RandomXJNA.INSTANCE.randomx_release_cache(rx_memory.rxCache);
- }
- if (rx_memory.rxDataset != null) {
- RandomXJNA.INSTANCE.randomx_release_dataset(rx_memory.rxDataset);
- }
- } finally {
- globalMemoryLock[i].writeLock().unlock();
- }
- }
+ RandomXMemory rx_memory = globalMemory[(int) (memIndex) & 1];
+ // TODO changeKey should be re-init dataset
+ rx_memory.getPoolTemplate().changeKey(rx_memory.seed);
+ rx_memory.getBlockTemplate().changeKey(rx_memory.seed);
}
public void randomXLoadingSnapshot(byte[] preseed, long forkTime) {
@@ -419,7 +299,6 @@ public void randomXLoadingSnapshot(){
randomXPoolUpdateSeed(memoryIndex);
randomXHashEpochIndex = memoryIndex;
-// memory.isSwitched = 0;
if (XdagTime.getEpoch(blockchain.getBlockByHeight(blockchain.getXdagStats().nmain).getTimestamp())
>= memory.getSwitchTime()) {
memory.isSwitched = 1;
@@ -474,7 +353,6 @@ public void randomXLoadingSnapshotJ(){
randomXPoolUpdateSeed(memoryIndex);
randomXHashEpochIndex = memoryIndex;
-// memory.isSwitched = 0;
if (XdagTime.getEpoch(blockchain.getBlockByHeight(blockchain.getXdagStats().nmain).getTimestamp())
>= memory.getSwitchTime()) {
memory.isSwitched = 1;
@@ -526,7 +404,6 @@ public void randomXLoadingForkTime() {
randomXPoolUpdateSeed(memoryIndex);
randomXHashEpochIndex = memoryIndex;
-// memory.isSwitched = 0;
if (XdagTime.getEpoch(blockchain.getBlockByHeight(blockchain.getXdagStats().nmain).getTimestamp())
>= memory.getSwitchTime()) {
memory.isSwitched = 1;
diff --git a/src/main/java/io/xdag/crypto/RandomXMemory.java b/src/main/java/io/xdag/crypto/RandomXMemory.java
index 8887e9c6..374702bb 100644
--- a/src/main/java/io/xdag/crypto/RandomXMemory.java
+++ b/src/main/java/io/xdag/crypto/RandomXMemory.java
@@ -24,8 +24,7 @@
package io.xdag.crypto;
-import com.sun.jna.Pointer;
-
+import io.xdag.crypto.randomx.RandomXTemplate;
import lombok.Getter;
import lombok.Setter;
@@ -38,10 +37,9 @@ public class RandomXMemory {
protected long seedTime;
protected long switchTime;
protected int isSwitched;
- protected Pointer rxCache;
- protected Pointer rxDataset;
- protected Pointer poolVm;
- protected Pointer blockVm;
+
+ protected RandomXTemplate poolTemplate;
+ protected RandomXTemplate blockTemplate;
public RandomXMemory() {
this.switchTime = -1;
diff --git a/src/main/java/io/xdag/net/CapabilityTreeSet.java b/src/main/java/io/xdag/net/CapabilityTreeSet.java
index 4df9dcc4..b2fbed66 100644
--- a/src/main/java/io/xdag/net/CapabilityTreeSet.java
+++ b/src/main/java/io/xdag/net/CapabilityTreeSet.java
@@ -26,7 +26,6 @@
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
-import java.util.List;
import java.util.Objects;
import java.util.TreeSet;
import java.util.stream.Collectors;
@@ -87,13 +86,6 @@ public int size() {
return capabilities.size();
}
- /**
- * Converts the capability set to an list of String.
- */
- public List toList() {
- return capabilities.stream().map(Capability::name).collect(Collectors.toList());
- }
-
/**
* Converts the capability set to an array of String.
*/
diff --git a/src/main/java/io/xdag/net/ChannelManager.java b/src/main/java/io/xdag/net/ChannelManager.java
index f2be1eca..6f72d290 100644
--- a/src/main/java/io/xdag/net/ChannelManager.java
+++ b/src/main/java/io/xdag/net/ChannelManager.java
@@ -205,24 +205,8 @@ private void newBlocksDistributeLoop() {
}
}
- // TODO:怎么发送 目前是发给除receive的节点
public void sendNewBlock(BlockWrapper blockWrapper) {
-// Node receive;
-// Peer blockPeer = blockWrapper.getRemotePeer();
-// Node node = kernel.getClient().getNode();
-// // 说明是自己产生的
-// if (blockPeer == null || (StringUtils.equals(blockPeer.getIp(), node.getIp()) && blockPeer.getPort() == node.getPort())) {
-// receive = node;
-// } else {
-// Channel channel = activeChannels.get(blockWrapper.getRemotePeer().getPeerId());
-// receive = channel != null ? new Node(channel.getRemoteIp(), channel.getRemotePort()) : null;
-// }
for (Channel channel : activeChannels.values()) {
-// Peer remotePeer = channel.getRemotePeer();
-// if (StringUtils.equals(remotePeer.getIp(), receive.getIp()) && remotePeer.getPort() == receive.getPort()) {
-// log.debug("not send to sender node");
-// continue;
-// }
channel.getP2pHandler().sendNewBlock(blockWrapper.getBlock(), blockWrapper.getTtl());
}
}
diff --git a/src/main/java/io/xdag/net/XdagChannelInitializer.java b/src/main/java/io/xdag/net/XdagChannelInitializer.java
index 9920f5d3..9154ad20 100644
--- a/src/main/java/io/xdag/net/XdagChannelInitializer.java
+++ b/src/main/java/io/xdag/net/XdagChannelInitializer.java
@@ -70,9 +70,7 @@ protected void initChannel(SocketChannel ch) {
ch.config().setOption(ChannelOption.TCP_NODELAY, true);
// notify disconnection to channel manager
- ch.closeFuture().addListener(future -> {
- channelMgr.remove(channel);
- });
+ ch.closeFuture().addListener(future -> channelMgr.remove(channel));
} catch (Exception e) {
log.error("Unexpected error: [{}]", e.getMessage(), e);
}
diff --git a/src/main/java/io/xdag/net/XdagP2pHandler.java b/src/main/java/io/xdag/net/XdagP2pHandler.java
index ed972566..bbe38475 100644
--- a/src/main/java/io/xdag/net/XdagP2pHandler.java
+++ b/src/main/java/io/xdag/net/XdagP2pHandler.java
@@ -331,17 +331,6 @@ private ReasonCode checkPeer(Peer peer, boolean newHandShake) {
return ReasonCode.BAD_NETWORK_VERSION;
}
- // not connected
-// if (client.getPeerId().equals(peer.getPeerId()) || channelMgr.isActivePeer(peer.getPeerId())) {
-// return ReasonCode.DUPLICATED_PEER_ID;
-// }
-
- // validator can't share IP address
-// if (channelMgr.isActiveIP(channel.getRemoteIp()) // already connected
-// && nodeSpec.getNetwork() == Network.MAINNET) { // on main net
-// return ReasonCode.VALIDATOR_IP_LIMITED;
-// }
-
return null;
}
diff --git a/src/main/java/io/xdag/net/message/ReasonCode.java b/src/main/java/io/xdag/net/message/ReasonCode.java
index 28af0199..894a8396 100644
--- a/src/main/java/io/xdag/net/message/ReasonCode.java
+++ b/src/main/java/io/xdag/net/message/ReasonCode.java
@@ -23,6 +23,9 @@
*/
package io.xdag.net.message;
+import lombok.Getter;
+
+@Getter
public enum ReasonCode {
/**
@@ -70,7 +73,7 @@ public enum ReasonCode {
*/
BAD_PEER(0x08);
- private int code;
+ private final int code;
private static final ReasonCode[] intToCode = new ReasonCode[256];
@@ -88,10 +91,6 @@ public static ReasonCode of(int code) {
this.code = code;
}
- public int getCode() {
- return code;
- }
-
public byte toByte() {
return (byte) code;
}
diff --git a/src/main/java/io/xdag/net/node/NodeManager.java b/src/main/java/io/xdag/net/node/NodeManager.java
index 18ff7d41..23b2a9dc 100644
--- a/src/main/java/io/xdag/net/node/NodeManager.java
+++ b/src/main/java/io/xdag/net/node/NodeManager.java
@@ -29,7 +29,6 @@
import com.github.benmanes.caffeine.cache.Caffeine;
import io.xdag.Kernel;
import io.xdag.config.Config;
-import io.xdag.net.Channel;
import io.xdag.net.PeerClient;
import io.xdag.net.XdagChannelInitializer;
import io.xdag.net.NetDBManager;
diff --git a/src/main/java/io/xdag/utils/BytesUtils.java b/src/main/java/io/xdag/utils/BytesUtils.java
index d10695ed..c7b71154 100644
--- a/src/main/java/io/xdag/utils/BytesUtils.java
+++ b/src/main/java/io/xdag/utils/BytesUtils.java
@@ -26,8 +26,6 @@
import com.google.common.io.BaseEncoding;
import com.google.common.primitives.UnsignedLong;
-import com.sun.jna.Memory;
-import com.sun.jna.Pointer;
import org.apache.tuweni.bytes.Bytes;
import org.apache.tuweni.bytes.MutableBytes32;
@@ -102,12 +100,6 @@ public static short bytesToShort(byte[] input, int offset, boolean littleEndian)
return buffer.getShort();
}
- public static Pointer bytesToPointer(byte[] bytes) {
- Pointer pointer = new Memory(bytes.length);
- pointer.write(0, bytes, 0, bytes.length);
- return pointer;
- }
-
public static String toHexString(byte[] data) {
return data == null ? "" : BaseEncoding.base16().lowerCase().encode(data);
}
@@ -199,7 +191,7 @@ public static byte[] subArray(byte[] arrays, int index, int length) {
* @return 转换后的byte[]
*/
public static byte[] hexStringToBytes(String hexString) {
- if (hexString == null || "".equals(hexString)) {
+ if (hexString == null || hexString.isEmpty()) {
return null;
}
hexString = hexString.toUpperCase();
diff --git a/src/main/java/io/xdag/utils/XdagTime.java b/src/main/java/io/xdag/utils/XdagTime.java
index fbaa3b9d..f275551a 100644
--- a/src/main/java/io/xdag/utils/XdagTime.java
+++ b/src/main/java/io/xdag/utils/XdagTime.java
@@ -34,8 +34,7 @@ public class XdagTime {
*/
public static long getCurrentTimestamp() {
long time_ms = System.currentTimeMillis();
- double ms_tmp = (double) (time_ms << 10);
- return (long) Math.ceil(ms_tmp / 1000 + 0.5);
+ return msToXdagtimestamp(time_ms);
}
/**
diff --git a/src/main/resources/xdag-devnet.conf b/src/main/resources/xdag-devnet.conf
index f18cac54..290f62a1 100644
--- a/src/main/resources/xdag-devnet.conf
+++ b/src/main/resources/xdag-devnet.conf
@@ -3,6 +3,9 @@ admin.telnet.ip = 127.0.0.1
admin.telnet.port = 6001
admin.telnet.password = root
+# Pool Config
+pool.ws.port = 7001
+
# Node config
node.ip = 127.0.0.1
node.port = 8001
diff --git a/src/test/java/io/xdag/core/RandomXSyncTest.java b/src/test/java/io/xdag/core/RandomXSyncTest.java
index d828f991..45dc31f3 100644
--- a/src/test/java/io/xdag/core/RandomXSyncTest.java
+++ b/src/test/java/io/xdag/core/RandomXSyncTest.java
@@ -102,9 +102,6 @@ public void syncTest() throws Exception {
String kernel2Diff = kernel2.getBlockchain().getBlockByHeight(nmain - 1).getInfo().getDifficulty().toString(16);
assertEquals(expected, kernel2Diff);
-
- kernel1.getRandomx().randomXPoolReleaseMem();
- kernel2.getRandomx().randomXPoolReleaseMem();
}
public void sync(Kernel kernel1, Kernel kernel2, long startTime, long endTime, String syncName) {