Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

dipcoinlab/sui4j

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

31 Commits

Repository files navigation

Sui4J - Java SDK for Sui Blockchain

Java Maven 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

  • JDK: 21+
  • Maven: 3.6+
  • Network: HTTPS connection support

βš™οΈ Installation and Configuration

πŸ“¦ Maven Dependency

<dependency>
 <groupId>io.dipcoin</groupId>
 <artifactId>sui4j</artifactId>
 <version>0.1.6</version>
</dependency>

🎯 Gradle Dependency

implementation 'io.dipcoin:sui4j:0.1.6'

🎯 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:

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
Perp Trade MoveCall
Perp Deposit MoveCall

Read Operations (Read RPC)

Dynamic Field Object Query
Owned Object Query
Single Owned Object Query
Gas Price Query
Object Information Query
Batch Object Query
Object Base Update Fee Query
Pyth Package ID Query
ZkLogin Signature Verification
Move Function Parameter Type Query
Normalized Move Function Query
Move Module Query
Move Struct Query
Chain Identifier Query
Batch Transactions

πŸ” Cryptocurrency Module

Ed25519KeyPair

Key Pair Generation
Mnemonics Generation
Private Key Decoding
SuiPrivateKey Decoding
Address Generation
Private Key Encoding
Public Key Bytes
Boundary Key Testing

Secp256k1KeyPair

Key Pair Generation
Mnemonics Generation
Private Key Decoding
Address Generation
Private Key Encoding

πŸ“¦ BCS Serialization Module

Primitive type serialization

U8 Type Serialization
U16 Type Serialization
U32 Type Serialization
U64 Type Serialization
U128 Type Serialization
U256 Type Serialization
Boolean Type Serialization
String Serialization
Byte Array Serialization
Vector Serialization
Optional Type Serialization
Complex Serialization
Serializer Reset

Sui Object Serialization

Basic Type Serialization
Address and Object Serialization
Type Tag Serialization
Transaction Serialization

Test complex transaction serialization

Move Call Deposit Serialization
Move Call Transaction Serialization
PTB Update Price Serialization
Test complex transaction serialization

Signature Message Serialization

Intent Serialization
Intent String Serialization
Signature Serialization
Owner Serialization
Authentication Serialization

Transaction Data Message Serialization

Transaction Data Message
Personal Message

Transaction Effects Serialization

Gas Cost Summary Serialization
Transaction Effects V1 Serialization
Transaction Effects Serialization
Serialize to Base64
Deserialize from Base64
Failed Execution Status
Empty Object Lists
Large Object Lists
Unsupported Version
Round-trip Serialization

Sui BCS Serialization

Sui Object Reference Serialization
Shared Object Reference Serialization
Object Parameter Serialization
Call Parameter Serialization
Type Tag Serialization
Serialize to Base64
Complex Type tag serialization
Large Parameter List Serialization
Empty Parameter List Serialization
Invalid Base64 Deserialization
Round-trip Serialization
Special Character String Serialization

Pure BCS Serialization

Basic Type Serialization
Vector Type Serialization
Serialize to Base64
Deserialize from Base64
Empty Vector Serialization
Large Vector Serialization
Round-trip Serialization
Special Character String Serialization
Zero Value Serialization
Maximum Value Serialization
Multiple Serializations

Performance Testing

Performance Testing

πŸ§ͺ Test Cases

πŸƒβ€β™‚οΈ Run All Tests

mvn test

🎯 Run Specific Module Tests

# 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

# 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 file for details.

πŸ“ƒ Acknowledgements

This project includes code derived from Web3j, licensed under the Apache License 2.0.

πŸ”— Official Documentation Links

πŸ’¬ Support

If you encounter problems or have questions, please:

  1. Check 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.

About

A Sui SDK designed for building maintainable, high-performance Java servers.

Topics

Resources

License

Stars

Watchers

Forks

Packages

Contributors

Languages

AltStyle γ«γ‚ˆγ£γ¦ε€‰ζ›γ•γ‚ŒγŸγƒšγƒΌγ‚Έ (->γ‚ͺγƒͺγ‚ΈγƒŠγƒ«) /