https://github.com/dipcoinlab/sui4j
A Sui SDK designed for building maintainable, high-performance Java servers.
https://github.com/dipcoinlab/sui4j
amm dipcoin java jdk21 sdk-java sui
Last synced: about 1 month ago
JSON representation
A Sui SDK designed for building maintainable, high-performance Java servers.
- Host: GitHub
- URL: https://github.com/dipcoinlab/sui4j
- Owner: dipcoinlab
- License: apache-2.0
- Created: 2025-09-17T09:07:42.000Z (5 months ago)
- Default Branch: main
- Last Pushed: 2025-10-15T06:46:26.000Z (4 months ago)
- Last Synced: 2025-10-15T19:36:52.454Z (4 months ago)
- Topics: amm, dipcoin, java, jdk21, sdk-java, sui
- Language: Java
- Homepage: https://www.dipcoin.io/
- Size: 250 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
- Notice: NOTICE
Awesome Lists containing this project
README
# Sui4J - Java SDK for Sui Blockchain
[](https://openjdk.java.net/)
[](https://maven.apache.org/)
[](LICENSE)
Sui4J is a Java SDK designed specifically for the Sui blockchain, providing complete RPC client, BCS serialization, cryptocurrency functionality, and Pyth oracle integration.
## ๐ Table of Contents
- [๐ Environment Requirements](#-environment-requirements)
- [โ๏ธ Installation and Configuration](#-installation-and-configuration)
- [๐ฏ Basic Usage](#-basic-usage)
- [๐ Core Features](#-core-features)
- [๐ RPC Client](#-rpc-client)
- [๐ Cryptocurrency Module](#-cryptocurrency-module)
- [๐ฆ BCS Serialization Module](#-bcs-serialization-module)
- [๐งช Test Cases](#-test-cases)
- [๐ API Reference](#-api-reference)
- [๐ค Contributing Guide](#-contributing-guide)
- [๐ License](#-license)
- [๐ Official Documentation Links](#-official-documentation-links)
- [๐ฌ Support](#-support)
## ๐ Environment Requirements
- **JDK**: 21+
- **Maven**: 3.6+
- **Network**: HTTPS connection support
## โ๏ธ Installation and Configuration
### ๐ฆ Maven Dependency
```xml
io.dipcoin
sui4j
0.1.2
```
### ๐ฏ Gradle Dependency
```gradle
implementation 'io.dipcoin:sui4j:0.1.2'
```
## ๐ฏ Basic Usage
### ๐ Complete Example: From HTTP Instance Creation to Pyth Price Update
The following is a complete usage example showing how to start from creating an HTTP service instance, generate Ed25519 key pairs, and finally call Pyth updatePrice PTB operations:
```java
package io.dipcoin.sui;
import io.dipcoin.sui.bcs.types.gas.GasData;
import io.dipcoin.sui.bcs.types.gas.SuiObjectRef;
import io.dipcoin.sui.bcs.types.transaction.Argument;
import io.dipcoin.sui.bcs.types.transaction.Command;
import io.dipcoin.sui.bcs.types.transaction.ProgrammableMoveCall;
import io.dipcoin.sui.bcs.types.transaction.ProgrammableTransaction;
import io.dipcoin.sui.client.TransactionBuilder;
import io.dipcoin.sui.crypto.Ed25519KeyPair;
import io.dipcoin.sui.crypto.SuiKeyPair;
import io.dipcoin.sui.protocol.SuiClient;
import io.dipcoin.sui.protocol.http.HttpService;
import io.dipcoin.sui.pyth.core.PythClient;
import io.dipcoin.sui.pyth.model.PythNetwork;
import java.io.IOException;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Arrays;
/**
* @author : Same
* @datetime : 2025/9/18 16:37
* @Description : Sui4jBasicExample
*/
public class Sui4jBasicExample {
public static void main(String[] args) throws IOException {
// 1. Create HTTP service instance
HttpService httpService = new HttpService("https://fullnode.testnet.sui.io:443");
// 2. Build Sui client
SuiClient suiClient = SuiClient.build(httpService);
// 3. Create Pyth client
PythClient pythClient = new PythClient(suiClient);
// 4. Generate Ed25519 key pair
SuiKeyPair keyPair = Ed25519KeyPair.generate();
System.out.println("Generated address: " + keyPair.address());
System.out.println("Private key: " + keyPair.encodePrivateKey());
// 5. Prepare Pyth price update parameters
String feedId = "0xf9c0172ba10dfa4d19088d94f5bf61d3b54d5bd7483a322a982e1373ee8ea31b";
// 6. Build PTB update price transaction
ProgrammableTransaction programmableTx = pythClient.updatePrice(feedId, PythNetwork.TESTNET);
// 7. Add custom Move call (optional)
ProgrammableMoveCall moveCall = new ProgrammableMoveCall(
"0xb5f4bf7d29a8e82eb5de521cf556f1953c9fdd3d73e7f371a156c6e1ee64f24b",
"main",
"use_pyth_price",
new ArrayList<>(),
Arrays.asList(Argument.ofInput(2), Argument.ofInput(6))
);
Command useUpdateMoveCall = new Command.MoveCall(moveCall);
programmableTx.addCommand(useUpdateMoveCall);
// 8. Prepare Gas data (actual Gas object needed here)
SuiObjectRef gasObject = new SuiObjectRef(
"0x0b50fe6d7b86730f0f8d2e389d22d63c30a73a1034720a8a43bb5e322a9588e1",
500452832L,
"FZSJfo8uZMLjeppm4XSd1peiEnox8FYxMxPbZVmuUjqw"
);
GasData gasData = new GasData(
Arrays.asList(gasObject),
keyPair.address(),
1000L,
BigInteger.valueOf(10000000L)
);
// 9. Serialize transaction (using local BCS encoding)
String transactionDataBase64 = TransactionBuilder.serializeTransactionBytes(
programmableTx,
keyPair.address(),
gasData
);
System.out.println("Serialized transaction data: " + transactionDataBase64);
// 10. Execute transaction (optional, requires actual Gas object)
// suiClient.executeTransactionBlock(transactionDataBase64, keyPair);
System.out.println("Pyth price update PTB transaction construction completed!");
}
}
```
### โจ Key Feature Description
1. **Local BCS Encoding**: All transactions use local BCS serialization without relying on external services
2. **Type Safety**: Uses strongly-typed Java objects to avoid string concatenation errors
3. **Modular Design**: Each functional module is independent and can be used as needed
4. **High Performance**: Optimized serialization performance supporting large-scale transaction processing
## ๐ Core Features
### ๐ RPC Client
#### Write Operations (Write RPC)
##### PythClient PTB Update Price
- **Function**: Pyth oracle PTB update price operation (local bcs encoding)
- **Test Case**: [`PythClientTest.testPtbUpdatePrice()`](src/test/java/com/dipcoin/sui/protocol/PythClientTest.java#L70)
##### Perp Trade MoveCall
- **Function**: Perp Move call on-chain transaction (local bcs encoding)
- **Test Case**: [`PythClientTest.testMoveCallTrade()`](src/test/java/com/dipcoin/sui/protocol/PythClientTest.java#L111)
##### Perp Deposit MoveCall
- **Function**: Perp Move call deposit operation (local bcs encoding)
- **Test Case**: [`PythClientTest.testMoveCallDeposit()`](src/test/java/com/dipcoin/sui/protocol/PythClientTest.java#L304)
#### Read Operations (Read RPC)
##### Dynamic Field Object Query
- **Function**: Get dynamic field object information
- **Test Case**:
- [`SuiClientTest.testGetDynamicFieldObject()`](src/test/java/com/dipcoin/sui/protocol/SuiClientTest.java#L94)
- [`PythClientTest.testGetDynamicFieldObject()`](src/test/java/com/dipcoin/sui/protocol/PythClientTest.java#L59)
##### Owned Object Query
- **Function**: Get list of objects owned by address
- **Test Case**: [`SuiClientTest.testGetOwnedObjects()`](src/test/java/com/dipcoin/sui/protocol/SuiClientTest.java#L137)
##### Single Owned Object Query
- **Function**: Get single owned object information
- **Test Case**: [`SuiClientTest.testGetOwnedObject()`](src/test/java/com/dipcoin/sui/protocol/SuiClientTest.java#L174)
##### Gas Price Query
- **Function**: Get reference gas price
- **Test Case**: [`SuiClientTest.testGetReferenceGasPrice()`](src/test/java/com/dipcoin/sui/protocol/SuiClientTest.java#L207)
##### Object Information Query
- **Function**: Get detailed information of specified object
- **Test Case**: [`SuiClientTest.testGetObject()`](src/test/java/com/dipcoin/sui/protocol/SuiClientTest.java#L228)
##### Batch Object Query
- **Function**: Batch get multiple object information
- **Test Case**: [`SuiClientTest.testMultiGetObjects()`](src/test/java/com/dipcoin/sui/protocol/SuiClientTest.java#L256)
##### Object Base Update Fee Query
- **Function**: Get object base update fee
- **Test Case**: [`SuiClientTest.testGetObjectBaseUpdateFee()`](src/test/java/com/dipcoin/sui/protocol/SuiClientTest.java#L279)
##### Pyth Package ID Query
- **Function**: Get Pyth package ID information
- **Test Case**: [`SuiClientTest.testGetPythPackageId()`](src/test/java/com/dipcoin/sui/protocol/SuiClientTest.java#L300)
##### ZkLogin Signature Verification
- **Function**: Verify ZkLogin signature
- **Test Case**: [`SuiClientTest.testVerifyZkLoginSignature()`](src/test/java/com/dipcoin/sui/protocol/SuiClientTest.java#L327)
##### Move Function Parameter Type Query
- **Function**: Get Move function parameter types
- **Test Case**: [`SuiClientTest.testGetMoveFunctionArgTypes()`](src/test/java/com/dipcoin/sui/protocol/SuiClientTest.java#L358)
##### Normalized Move Function Query
- **Function**: Get normalized Move function information
- **Test Case**: [`SuiClientTest.testGetNormalizedMoveFunction()`](src/test/java/com/dipcoin/sui/protocol/SuiClientTest.java#L386)
##### Move Module Query
- **Function**: Get Sui Move normalized module information
- **Test Case**:
- [`SuiClientTest.testGetSuiMoveNormalizedModule()`](src/test/java/com/dipcoin/sui/protocol/SuiClientTest.java#L407)
- [`SuiClientTest.testGetSuiMoveNormalizedModuleByPackage()`](src/test/java/com/dipcoin/sui/protocol/SuiClientTest.java#L427)
##### Move Struct Query
- **Function**: Get normalized Move struct information
- **Test Case**: [`SuiClientTest.testGetNormalizedMoveStruct()`](src/test/java/com/dipcoin/sui/protocol/SuiClientTest.java#L448)
##### Chain Identifier Query
- **Function**: Get chain identifier
- **Test Case**: [`SuiClientTest.testGetChainIdentifier()`](src/test/java/com/dipcoin/sui/protocol/SuiClientTest.java#L471)
##### Batch Transactions
- **Function**: Execute batch transaction requests
- **Test Case**: [`SuiClientTest.testBatchTransaction()`](src/test/java/com/dipcoin/sui/protocol/SuiClientTest.java#L494)
### ๐ Cryptocurrency Module
#### Ed25519KeyPair
##### Key Pair Generation
- **Function**: Generate new Ed25519 key pair
- **Test Case**: [`Ed25519KeyPairTest.createSuiKeyPair()`](src/test/java/com/dipcoin/sui/crypto/Ed25519KeyPairTest.java#L25)
##### Mnemonics Generation
- **Function**: Generate new Ed25519 key mnemonics
- **Test Case**: [`Ed25519KeyPairTest.createSuiKeyDerive()`](src/test/java/com/dipcoin/sui/crypto/Ed25519KeyPairTest.java#L25)
##### Private Key Decoding
- **Function**: Decode key pair from hexadecimal private key
- **Test Case**: [`Ed25519KeyPairTest.decodeBase64_shouldWorkWithValidKey()`](src/test/java/com/dipcoin/sui/crypto/Ed25519KeyPairTest.java#L46)
##### SuiPrivateKey Decoding
- **Function**: Decode key pair from suiPrivateKey
- **Test Case**: [`Ed25519KeyPairTest.importSuiKeyDerive()`](src/test/java/com/dipcoin/sui/crypto/Ed25519KeyPairTest.java#L46)
##### Address Generation
- **Function**: Generate correctly formatted address
- **Test Case**: [`Ed25519KeyPairTest.address_shouldGenerateCorrectFormat()`](src/test/java/com/dipcoin/sui/crypto/Ed25519KeyPairTest.java#L56)
##### Private Key Encoding
- **Function**: Encode private key to hexadecimal format
- **Test Case**: [`Ed25519KeyPairTest.encodePrivateKey_shouldReturnOriginalHex()`](src/test/java/com/dipcoin/sui/crypto/Ed25519KeyPairTest.java#L71)
##### Public Key Bytes
- **Function**: Get 32-byte public key
- **Test Case**: [`Ed25519KeyPairTest.publicKeyBytes_shouldReturn32Bytes()`](src/test/java/com/dipcoin/sui/crypto/Ed25519KeyPairTest.java#L85)
##### Boundary Key Testing
- **Function**: Boundary condition key testing
- **Test Case**: [`Ed25519KeyPairTest.boundaryKeyTests()`](src/test/java/com/dipcoin/sui/crypto/Ed25519KeyPairTest.java#L140)
#### Secp256k1KeyPair
##### Key Pair Generation
- **Function**: Generate new Secp256k1 key pair
- **Test Case**: [`Scep256k1KeyPairTest.createSuiKeyPair()`](src/test/java/com/dipcoin/sui/crypto/Scep256k1KeyPairTest.java#L25)
##### Mnemonics Generation
- **Function**: Generate new Secp256k1 key mnemonics
- **Test Case**: [`Scep256k1KeyPairTest.createSuiKeyDerive()`](src/test/java/com/dipcoin/sui/crypto/Scep256k1KeyPairTest.java#L25)
##### Private Key Decoding
- **Function**: Decode key pair from hexadecimal private key
- **Test Case**: [`Scep256k1KeyPairTest.decodeBase64_shouldWorkWithValidKey()`](src/test/java/com/dipcoin/sui/crypto/Scep256k1KeyPairTest.java#L46)
##### Address Generation
- **Function**: Generate correctly formatted address
- **Test Case**: [`Scep256k1KeyPairTest.address_shouldGenerateCorrectFormat()`](src/test/java/com/dipcoin/sui/crypto/Scep256k1KeyPairTest.java#L56)
##### Private Key Encoding
- **Function**: Encode private key to hexadecimal format
- **Test Case**: [`Scep256k1KeyPairTest.encodePrivateKey_shouldReturnOriginalHex()`](src/test/java/com/dipcoin/sui/crypto/Scep256k1KeyPairTest.java#L99)
### ๐ฆ BCS Serialization Module
#### Primitive type serialization
##### U8 Type Serialization
- **Function**: Serialize 8-bit unsigned integer
- **Test Case**: [`BcsSerializerTest.testWriteU8()`](src/test/java/com/dipcoin/sui/bcs/BcsSerializerTest.java#L31)
##### U16 Type Serialization
- **Function**: Serialize 16-bit unsigned integer
- **Test Case**: [`BcsSerializerTest.testWriteU16()`](src/test/java/com/dipcoin/sui/bcs/BcsSerializerTest.java#L48)
##### U32 Type Serialization
- **Function**: Serialize 32-bit unsigned integer
- **Test Case**: [`BcsSerializerTest.testWriteU32()`](src/test/java/com/dipcoin/sui/bcs/BcsSerializerTest.java#L68)
##### U64 Type Serialization
- **Function**: Serialize 64-bit unsigned integer
- **Test Case**: [`BcsSerializerTest.testWriteU64()`](src/test/java/com/dipcoin/sui/bcs/BcsSerializerTest.java#L91)
##### U128 Type Serialization
- **Function**: Serialize 128-bit unsigned integer
- **Test Case**: [`BcsSerializerTest.testWriteU128()`](src/test/java/com/dipcoin/sui/bcs/BcsSerializerTest.java#L118)
##### U256 Type Serialization
- **Function**: Serialize 256-bit unsigned integer
- **Test Case**: [`BcsSerializerTest.testWriteU256()`](src/test/java/com/dipcoin/sui/bcs/BcsSerializerTest.java#L134)
##### Boolean Type Serialization
- **Function**: Serialize boolean values
- **Test Case**: [`BcsSerializerTest.testWriteBool()`](src/test/java/com/dipcoin/sui/bcs/BcsSerializerTest.java#L150)
##### String Serialization
- **Function**: Serialize strings
- **Test Case**: [`BcsSerializerTest.testWriteString()`](src/test/java/com/dipcoin/sui/bcs/BcsSerializerTest.java#L175)
##### Byte Array Serialization
- **Function**: Serialize byte arrays
- **Test Case**: [`BcsSerializerTest.testWriteBytes()`](src/test/java/com/dipcoin/sui/bcs/BcsSerializerTest.java#L196)
##### Vector Serialization
- **Function**: Serialize vector types
- **Test Case**: [`BcsSerializerTest.testWriteVector()`](src/test/java/com/dipcoin/sui/bcs/BcsSerializerTest.java#L221)
##### Optional Type Serialization
- **Function**: Serialize optional values
- **Test Case**: [`BcsSerializerTest.testWriteOption()`](src/test/java/com/dipcoin/sui/bcs/BcsSerializerTest.java#L242)
##### Complex Serialization
- **Function**: Complex type combination serialization
- **Test Case**: [`BcsSerializerTest.testComplexSerialization()`](src/test/java/com/dipcoin/sui/bcs/BcsSerializerTest.java#L268)
##### Serializer Reset
- **Function**: Reset serializer state
- **Test Case**: [`BcsSerializerTest.testReset()`](src/test/java/com/dipcoin/sui/bcs/BcsSerializerTest.java#L288)
#### Sui Object Serialization
##### Basic Type Serialization
- **Function**: Basic BCS type serialization
- **Test Case**: [`BcsIndexTest.testBasicTypesSerialization()`](src/test/java/com/dipcoin/sui/bcs/BcsIndexTest.java#L117)
##### Address and Object Serialization
- **Function**: Address and Sui object serialization
- **Test Case**: [`BcsIndexTest.testAddressAndObjectSerialization()`](src/test/java/com/dipcoin/sui/bcs/BcsIndexTest.java#L158)
##### Type Tag Serialization
- **Function**: Type tag serialization
- **Test Case**: [`BcsIndexTest.testTypeTagSerialization()`](src/test/java/com/dipcoin/sui/bcs/BcsIndexTest.java#L196)
##### Transaction Serialization
- **Function**: Transaction data serialization
- **Test Case**: [`BcsIndexTest.testTransactionSerialization()`](src/test/java/com/dipcoin/sui/bcs/BcsIndexTest.java#L233)
#### Test complex transaction serialization
##### Move Call Deposit Serialization
- **Function**: Move call deposit transaction serialization
- **Test Case**: [`BcsIndexTest.testMoveCallDepositSerialization()`](src/test/java/com/dipcoin/sui/bcs/BcsIndexTest.java#L319)
##### Move Call Transaction Serialization
- **Function**: Move call transaction serialization
- **Test Case**: [`BcsIndexTest.testMoveCallTradeSerialization()`](src/test/java/com/dipcoin/sui/bcs/BcsIndexTest.java#L468)
##### PTB Update Price Serialization
- **Function**: PTB update price transaction serialization
- **Test Case**: [`BcsIndexTest.testPtbUpdatePriceSerialization()`](src/test/java/com/dipcoin/sui/bcs/BcsIndexTest.java#L709)
##### Test complex transaction serialization
- **Function**: Complex transaction combination serialization
- **Test Case**: [`BcsIndexTest.testComplexTransactionSerialization()`](src/test/java/com/dipcoin/sui/bcs/BcsIndexTest.java#L965)
#### Signature Message Serialization
##### Intent Serialization
- **Function**: Intent message serialization
- **Test Case**: [`BcsIndexTest.testIntentSerialization()`](src/test/java/com/dipcoin/sui/bcs/BcsIndexTest.java#L804)
##### Intent String Serialization
- **Function**: Intent string serialization
- **Test Case**: [`BcsIndexTest.testIntentStringSerialization()`](src/test/java/com/dipcoin/sui/bcs/BcsIndexTest.java#L850)
##### Signature Serialization
- **Function**: Signature data serialization
- **Test Case**: [`BcsIndexTest.testSignatureSerialization()`](src/test/java/com/dipcoin/sui/bcs/BcsIndexTest.java#L864)
##### Owner Serialization
- **Function**: Owner information serialization
- **Test Case**: [`BcsIndexTest.testOwnerSerialization()`](src/test/java/com/dipcoin/sui/bcs/BcsIndexTest.java#L908)
##### Authentication Serialization
- **Function**: Authentication information serialization
- **Test Case**: [`BcsIndexTest.testAuthSerialization()`](src/test/java/com/dipcoin/sui/bcs/BcsIndexTest.java#L949)
#### Transaction Data Message Serialization
##### Transaction Data Message
- **Function**: Transaction data message serialization
- **Test Case**: [`IntentBcsTest.testTransactionDataMessage()`](src/test/java/com/dipcoin/sui/bcs/IntentBcsTest.java#L31)
##### Personal Message
- **Function**: Personal message serialization
- **Test Case**: [`IntentBcsTest.testPersonalMessage()`](src/test/java/com/dipcoin/sui/bcs/IntentBcsTest.java#L58)
#### Transaction Effects Serialization
##### Gas Cost Summary Serialization
- **Function**: Gas cost summary serialization
- **Test Case**: [`EffectsBcsTest.testGasCostSummarySerialization()`](src/test/java/com/dipcoin/sui/bcs/EffectsBcsTest.java#L61)
##### Transaction Effects V1 Serialization
- **Function**: Transaction effects V1 serialization
- **Test Case**: [`EffectsBcsTest.testTransactionEffectsV1Serialization()`](src/test/java/com/dipcoin/sui/bcs/EffectsBcsTest.java#L95)
##### Transaction Effects Serialization
- **Function**: Transaction effects serialization
- **Test Case**: [`EffectsBcsTest.testTransactionEffectsSerialization()`](src/test/java/com/dipcoin/sui/bcs/EffectsBcsTest.java#L125)
##### Serialize to Base64
- **Function**: Serialize results to Base64
- **Test Case**: [`EffectsBcsTest.testSerializeToBase64()`](src/test/java/com/dipcoin/sui/bcs/EffectsBcsTest.java#L150)
##### Deserialize from Base64
- **Function**: Deserialize from Base64
- **Test Case**: [`EffectsBcsTest.testDeserializeFromBase64()`](src/test/java/com/dipcoin/sui/bcs/EffectsBcsTest.java#L167)
##### Failed Execution Status
- **Function**: Failed execution status serialization
- **Test Case**: [`EffectsBcsTest.testFailedExecutionStatus()`](src/test/java/com/dipcoin/sui/bcs/EffectsBcsTest.java#L197)
##### Empty Object Lists
- **Function**: Empty object lists serialization
- **Test Case**: [`EffectsBcsTest.testEmptyObjectLists()`](src/test/java/com/dipcoin/sui/bcs/EffectsBcsTest.java#L231)
##### Large Object Lists
- **Function**: Large object lists serialization
- **Test Case**: [`EffectsBcsTest.testLargeObjectLists()`](src/test/java/com/dipcoin/sui/bcs/EffectsBcsTest.java#L266)
##### Unsupported Version
- **Function**: Unsupported version handling
- **Test Case**: [`EffectsBcsTest.testUnsupportedVersion()`](src/test/java/com/dipcoin/sui/bcs/EffectsBcsTest.java#L329)
##### Round-trip Serialization
- **Function**: Serialization-deserialization round-trip testing
- **Test Case**: [`EffectsBcsTest.testRoundTripSerialization()`](src/test/java/com/dipcoin/sui/bcs/EffectsBcsTest.java#L346)
#### Sui BCS Serialization
##### Sui Object Reference Serialization
- **Function**: Sui object reference serialization
- **Test Case**: [`SuiBcsTest.testSuiObjectRefSerialization()`](src/test/java/com/dipcoin/sui/bcs/SuiBcsTest.java#L75)
##### Shared Object Reference Serialization
- **Function**: Shared object reference serialization
- **Test Case**: [`SuiBcsTest.testSharedObjectRefSerialization()`](src/test/java/com/dipcoin/sui/bcs/SuiBcsTest.java#L104)
##### Object Parameter Serialization
- **Function**: Object parameter serialization
- **Test Case**:
- [`SuiBcsTest.testObjectArgImmOrOwnedObjectSerialization()`](src/test/java/com/dipcoin/sui/bcs/SuiBcsTest.java#L135)
- [`SuiBcsTest.testObjectArgSharedObjectSerialization()`](src/test/java/com/dipcoin/sui/bcs/SuiBcsTest.java#L160)
- [`SuiBcsTest.testObjectArgReceivingSerialization()`](src/test/java/com/dipcoin/sui/bcs/SuiBcsTest.java#L185)
##### Call Parameter Serialization
- **Function**: Call parameter serialization
- **Test Case**:
- [`SuiBcsTest.testCallArgPureSerialization()`](src/test/java/com/dipcoin/sui/bcs/SuiBcsTest.java#L210)
- [`SuiBcsTest.testCallArgObjectArgSerialization()`](src/test/java/com/dipcoin/sui/bcs/SuiBcsTest.java#L237)
##### Type Tag Serialization
- **Function**: Type tag serialization
- **Test Case**: [`SuiBcsTest.testTypeTagSerialization()`](src/test/java/com/dipcoin/sui/bcs/SuiBcsTest.java#L262)
##### Serialize to Base64
- **Function**: Serialize results to Base64
- **Test Case**: [`SuiBcsTest.testSerializeToBase64()`](src/test/java/com/dipcoin/sui/bcs/SuiBcsTest.java#L283)
##### Complex Type tag serialization
- **Function**: Complex type tag serialization
- **Test Case**: [`SuiBcsTest.testComplexTypeTagSerialization()`](src/test/java/com/dipcoin/sui/bcs/SuiBcsTest.java#L300)
##### Large Parameter List Serialization
- **Function**: Large parameter list serialization
- **Test Case**: [`SuiBcsTest.testLargeArgumentsList()`](src/test/java/com/dipcoin/sui/bcs/SuiBcsTest.java#L322)
##### Empty Parameter List Serialization
- **Function**: Empty parameter list serialization
- **Test Case**: [`SuiBcsTest.testEmptyArgumentsList()`](src/test/java/com/dipcoin/sui/bcs/SuiBcsTest.java#L351)
##### Invalid Base64 Deserialization
- **Function**: Invalid Base64 deserialization handling
- **Test Case**: [`SuiBcsTest.testInvalidBase64Deserialization()`](src/test/java/com/dipcoin/sui/bcs/SuiBcsTest.java#L373)
##### Round-trip Serialization
- **Function**: Serialization-deserialization round-trip testing
- **Test Case**: [`SuiBcsTest.testRoundTripSerialization()`](src/test/java/com/dipcoin/sui/bcs/SuiBcsTest.java#L393)
##### Special Character String Serialization
- **Function**: Special character string serialization
- **Test Case**: [`SuiBcsTest.testSpecialCharactersInStrings()`](src/test/java/com/dipcoin/sui/bcs/SuiBcsTest.java#L417)
#### Pure BCS Serialization
##### Basic Type Serialization
- **Function**: Primitive type serialization.
- **Test Case**: [`PureBcsTest.testBasicTypeSerialization()`](src/test/java/com/dipcoin/sui/bcs/PureBcsTest.java#L24)
##### Vector Type Serialization
- **Function**: Vector type serialization
- **Test Case**: [`PureBcsTest.testVectorTypeSerialization()`](src/test/java/com/dipcoin/sui/bcs/PureBcsTest.java#L55)
##### Serialize to Base64
- **Function**: Serialize results to Base64
- **Test Case**: [`PureBcsTest.testSerializeToBase64()`](src/test/java/com/dipcoin/sui/bcs/PureBcsTest.java#L76)
##### Deserialize from Base64
- **Function**: Deserialize from Base64
- **Test Case**: [`PureBcsTest.testDeserializeFromBase64()`](src/test/java/com/dipcoin/sui/bcs/PureBcsTest.java#L93)
##### Empty Vector Serialization
- **Function**: Empty vector serialization
- **Test Case**: [`PureBcsTest.testEmptyVectorSerialization()`](src/test/java/com/dipcoin/sui/bcs/PureBcsTest.java#L110)
##### Large Vector Serialization
- **Function**: Large vector serialization
- **Test Case**: [`PureBcsTest.testLargeVectorSerialization()`](src/test/java/com/dipcoin/sui/bcs/PureBcsTest.java#L130)
##### Round-trip Serialization
- **Function**: Serialization-deserialization round-trip testing
- **Test Case**: [`PureBcsTest.testRoundTripSerialization()`](src/test/java/com/dipcoin/sui/bcs/PureBcsTest.java#L174)
##### Special Character String Serialization
- **Function**: Special character string serialization
- **Test Case**: [`PureBcsTest.testSpecialCharactersInStrings()`](src/test/java/com/dipcoin/sui/bcs/PureBcsTest.java#L204)
##### Zero Value Serialization
- **Function**: Zero value serialization
- **Test Case**: [`PureBcsTest.testZeroValues()`](src/test/java/com/dipcoin/sui/bcs/PureBcsTest.java#L224)
##### Maximum Value Serialization
- **Function**: Maximum value serialization
- **Test Case**: [`PureBcsTest.testMaxValues()`](src/test/java/com/dipcoin/sui/bcs/PureBcsTest.java#L249)
##### Multiple Serializations
- **Function**: Multiple serialization testing
- **Test Case**: [`PureBcsTest.testMultipleSerializations()`](src/test/java/com/dipcoin/sui/bcs/PureBcsTest.java#L276)
#### Performance Testing
##### Performance Testing
- **Function**: BCS serialization performance testing
- **Test Case**: [`BcsIndexTest.testPerformance()`](src/test/java/com/dipcoin/sui/bcs/BcsIndexTest.java#L1041)
## ๐งช Test Cases
### ๐โโ๏ธ Run All Tests
```bash
mvn test
```
### ๐ฏ Run Specific Module Tests
```bash
# RPC client tests
mvn test -Dtest=SuiClientTest
mvn test -Dtest=PythClientTest
# Cryptocurrency tests
mvn test -Dtest=Ed25519KeyPairTest
mvn test -Dtest=Scep256k1KeyPairTest
# BCS serialization tests
mvn test -Dtest=BcsIndexTest
mvn test -Dtest=SuiBcsTest
mvn test -Dtest=EffectsBcsTest
mvn test -Dtest=IntentBcsTest
mvn test -Dtest=PureBcsTest
mvn test -Dtest=BcsSerializerTest
```
## ๐ API Reference
### ๐ Main Classes
- `SuiClient` - Sui RPC client
- `PythClient` - Pyth oracle client
- `BcsSerializer` - BCS serializer
- `BcsDeserializer` - BCS deserializer
- `Ed25519KeyPair` - Ed25519 key pair
- `Secp256k1KeyPair` - Secp256k1 key pair
- `CommandBuilder` - Command builder
- `TransactionBuilder` - Transaction builder
- `QueryBuilder` - Query builder
### ๐ Network Configuration
- **Testnet**: `https://fullnode.testnet.sui.io:443`
- **Mainnet**: `https://fullnode.mainnet.sui.io:443`
## ๐ค Contributing Guide
We welcome community contributions! Please follow these steps:
1. Fork the project
2. Create a feature branch (`git checkout -b feature/AmazingFeature`)
3. Commit your changes (`git commit -m 'Add some AmazingFeature'`)
4. Push to the branch (`git push origin feature/AmazingFeature`)
5. Open a Pull Request
### ๐ ๏ธ Development Environment Setup
```bash
# Clone the project
git clone https://github.com/dipcoinlab/sui4j.git
cd sui4j
# Install dependencies
mvn install
# Run tests
mvn test
```
## ๐ License
This project is licensed under the Apache License 2.0 - see the [LICENSE](LICENSE) file for details.
## ๐ Acknowledgements
This project includes code derived from [Web3j](https://github.com/LFDT-web3j/web3j),
licensed under the Apache License 2.0.
## ๐ Official Documentation Links
- [Sui Official Documentation](https://docs.sui.io/)
- [Pyth Network Documentation](https://docs.pyth.network/)
- [BCS Serialization Specification](https://github.com/MystenLabs/ts-sdks/tree/main/packages/bcs)
## ๐ฌ Support
If you encounter problems or have questions, please:
1. Check [Issues](https://github.com/dipcoinlab/sui4j/issues)
2. Create a new Issue
3. Contact the maintenance team
---
**Note**: This is a project under development, and APIs may change. Please test thoroughly before using in production environments.