diff --git a/README.md b/README.md
index 98cd7e9..1c35d25 100644
--- a/README.md
+++ b/README.md
@@ -18,7 +18,7 @@ upcoming TestNet launch.
## Using
-The latest 0.4.2 version tested with sui devnet-0.24.0 version.
+The latest 0.4.3 version tested with sui devnet-0.24.0 version.
### Maven
@@ -27,7 +27,7 @@ The latest 0.4.2 version tested with sui devnet-0.24.0 version.
me.grapebaba
sui4j
-0.4.2
+0.4.3
```
@@ -35,7 +35,7 @@ The latest 0.4.2 version tested with sui devnet-0.24.0 version.
```groovy
// https://mvnrepository.com/artifact/me.grapebaba/sui4j
-implementation 'me.grapebaba:sui4j:0.4.2'
+implementation 'me.grapebaba:sui4j:0.4.3'
```
## Building Locally
@@ -70,10 +70,7 @@ doc.
```
git clone git@github.com:MystenLabs/sui.git
cd sui
-cargo build --release
-cd sui/target/release
-./sui genesis
-./sui start
+RUST_LOG="consensus=off" cargo run --bin sui-test-validator
```
#### To run Integration tests
@@ -82,104 +79,133 @@ cd sui/target/release
./gradlew integrationTest
```
-## Supported APIs (sui SDK 0.25.0)
-
-- [x] sui_batchTransaction
-- [ ] sui_devInspectTransaction
-- [x] sui_dryRunTransaction
-- [x] sui_executeTransaction
-- [x] sui_executeTransactionSerializedSig(same with sui_executeTransaction)
-- [x] sui_getAllBalances
-- [x] sui_getAllCoins
-- [x] sui_getBalance
-- [x] sui_getCheckpointContents
-- [x] sui_getCheckpointContentsByDigest
-- [x] sui_getCheckpointSummary
-- [x] sui_getCheckpointSummaryByDigest
-- [x] sui_getCoinMetadata
-- [x] sui_getCoins
-- [x] sui_getCommitteeInfo
-- [ ] sui_getDelegatedStakes
-- [ ] sui_getDynamicFieldObject
-- [ ] sui_getDynamicFields
-- [x] sui_getEvents
-- [ ] sui_getLatestCheckpointSequenceNumber
-- [x] sui_getMoveFunctionArgTypes
-- [x] sui_getNormalizedMoveFunction
-- [x] sui_getNormalizedMoveModule
-- [x] sui_getNormalizedMoveModulesByPackage
-- [x] sui_getNormalizedMoveStruct
-- [x] sui_getObject
-- [x] sui_getObjectsOwnedByAddress
-- [x] sui_getObjectsOwnedByObject
-- [x] sui_getRawObject
-- [x] sui_getReferenceGasPrice
-- [x] sui_getSuiSystemState
-- [ ] sui_getTotalSupply
-- [x] sui_getTotalTransactionNumber
-- [x] sui_getTransaction
-- [ ] sui_getTransactionAuthSigners
-- [x] sui_getTransactions
-- [x] sui_getTransactionsInRange
-- [ ] sui_getValidators
-- [x] sui_mergeCoins
-- [x] sui_moveCall
-- [x] sui_pay
-- [x] sui_payAllSui
-- [x] sui_paySui
-- [x] sui_publish
-- [ ] sui_requestAddDelegation
-- [ ] sui_requestSwitchDelegation
-- [ ] sui_requestWithdrawDelegation
-- [x] sui_splitCoin
-- [x] sui_splitCoinEqual
-- [x] sui_subscribeEvent
-- [ ] sui_tblsSignRandomnessObject
-- [x] sui_transferObject
-- [x] sui_transferSui
-- [x] sui_tryGetPastObject
-
-
-## Examples
+## How to use it
+- local-fullnode:http://127.0.0.1:9000
+- local-faucet:http://localhost:9123
+- devnet-fullnode:https://fullnode.devnet.sui.io
+- devnet-faucet:https://faucet.devnet.sui.io
+
+### Connecting to Sui Network
+```java
+Sui sui = new Sui("","","");
+```
+
+### New Address
+```java
+KeyResponse keyRes = sui.newAddress(SignatureScheme.ED25519);
+```
+
+### Request Faucet
+```java
+CompletableFuture faucetRes = sui.requestSuiFromFaucet(s);
+```
+
+### Writing APIs
+
+#### Move Call
```java
- String BASE_URL="http://localhost:9000";
- // It must be a absolute path
- String TEST_KEY_STORE_PATH=
- System.getProperty("user.home")+"/.sui/sui_config/sui.keystore";
- Sui sui=new Sui(BASE_URL,TEST_KEY_STORE_PATH);
-
- // query objects
- CompletableFuture>res=
- sui.getObjectsOwnedByAddress("0xea79464d86786b7a7a63e3f13f798f29f5e65947");
- List objects=res.get();
- String coinObjectId=objects.get(0).getObjectId();
- List addresses=new ArrayList<>(sui.addresses());
-
- // Transfer sui
- CompletableFuture res1=
- sui.transferSui(
- "0xea79464d86786b7a7a63e3f13f798f29f5e65947",
- coinObjectId,
- 100L,
- addresses.get(0),
- 2000L,
- ExecuteTransactionRequestType.WaitForLocalExecution);
-
- CompletableFuture res2=
+CompletableFuture callRes =
sui.moveCall(
- "0xea79464d86786b7a7a63e3f13f798f29f5e65947",
- "0x0000000000000000000000000000000000000002",
- "devnet_nft",
- "mint",
- Lists.newArrayList(),
- Lists.newArrayList(
- "Example NFT",
- "An example NFT.",
- "ipfs://bafkreibngqhl3gaa7daob4i2vccziay2jjlp435cf66vhono7nrvww53ty"),
- null,
- 2000L,
- ExecuteTransactionRequestType.WaitForLocalExecution);
+ "0x0a7421363a1f6a82800f7c9340ac02b5905798cb",
+ "0x02",
+ "pay",
+ "split",
+ Lists.newArrayList(structType),
+ Lists.newArrayList("0x4b89576d18d500194f14c935bc8b297a8e1556f3217e5f125ae3d1c0f13408f9", 10000L),
+ null,
+ 3000000L,
+ null,
+ null,
+ transactionBlockResponseOptions,
+ ExecuteTransactionRequestType.WaitForLocalExecution);
+```
+
+#### Transfer Object
+```java
+CompletableFuture res =
+ sui.transferObjects(
+ sender.get(),
+ Lists.newArrayList(objects.get(0).getData().getObjectId()),
+ recipient.get(),
+ null,
+ 3000000L,
+ null,
+ null,
+ transactionBlockResponseOptions,
+ ExecuteTransactionRequestType.WaitForLocalExecution);
+```
+
+#### Publish
+```java
+CompletableFuture res =
+ sui.publish(
+ sender.get(),
+ Lists.newArrayList(
+ "oRzrCwYAAAAKAQAUAhQsA0BJBIkBEgWbAWcHggLNAgjPBGAGrwXCAwrxCC0MngnUAQAMAR4B"
+ + "JAIRAh0CHwIlAiYCJwIoAAACAAABDAAAAwQAAQQHAQAAAgYHAAMCDAEIAQQIBAAFBQwABwcCAAkJ"
+ + "BwAAFgABAAEcARUBAAEjFBUBAAIpCwwAAwoNAQEIAxoJCgEIBBoSEwAFDgYHAQIGIREBAQwGJREB"
+ + "AQgHIg4PAAgXBAUBAgkbCxYACwMHAwUIBAgIEAgHAgwBDAkIAggABwgIAAILBQEIAQgHAQgAAQYJ"
+ + "AAEBAgkABwgIAQgHAQgBAgYIBwcICAELBQEJAAEKAgEIBAMHCwUBCQAKCAQKCAQBBggIAQUBCwUB"
+ + "CAECCQAFAQcICAEIBgEJAAELAwEJAAEICQVCT0FSUwRCb2FyB0Rpc3BsYXkITWV0YWRhdGEGT3B0"
+ + "aW9uCVB1Ymxpc2hlcgZTdHJpbmcJVHhDb250ZXh0A1VJRANVcmwMYWRkX211bHRpcGxlA2FnZQVi"
+ + "b2FycwVidXllcgVjbGFpbQdjcmVhdG9yC2Rlc2NyaXB0aW9uB2Rpc3BsYXkLZHVtbXlfZmllbGQI"
+ + "ZnVsbF91cmwCaWQHaW1nX3VybARpbml0E2lzX29uZV90aW1lX3dpdG5lc3MIbWV0YWRhdGEEbmFt"
+ + "ZQNuZXcVbmV3X3Vuc2FmZV9mcm9tX2J5dGVzBG5vbmUGb2JqZWN0Bm9wdGlvbgdwYWNrYWdlBXBy"
+ + "aWNlD3B1YmxpY190cmFuc2ZlcgZzZW5kZXIEc29tZQZzdHJpbmcIdHJhbnNmZXIKdHhfY29udGV4"
+ + "dAV0eXBlcwN1cmwEdXRmOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+ + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgMI"
+ + "AAAAAAAAAAAKAgUEbmFtZQoCDAtkZXNjcmlwdGlvbgoCCAdpbWdfdXJsCgIIB2NyZWF0b3IKAgYF"
+ + "cHJpY2UKAgwLcHJvamVjdF91cmwKAgQDYWdlCgIGBWJ1eWVyCgIJCGZ1bGxfdXJsCgIODWVzY2Fw"
+ + "ZV9zeW50YXgKAgcGe25hbWV9CgI7OlVuaXF1ZSBCb2FyIGZyb20gdGhlIEJvYXJzIGNvbGxlY3Rp"
+ + "b24gd2l0aCB7bmFtZX0gYW5kIHtpZH0KAiEgaHR0cHM6Ly9nZXQtYS1ib2FyLmNvbS97aW1nX3Vy"
+ + "bH0KAgoJe2NyZWF0b3J9CgIIB3twcmljZX0KAhgXaHR0cHM6Ly9nZXQtYS1ib2FyLmNvbS8KAg8O"
+ + "e21ldGFkYXRhLmFnZX0KAggHe2J1eWVyfQoCCwp7ZnVsbF91cmx9CgIJCFx7bmFtZVx9CgIKCWZp"
+ + "cnN0LnBuZwoCCwpGaXJzdCBCb2FyCgImJUZpcnN0IEJvYXIgZnJvbSB0aGUgQm9hcnMgY29sbGVj"
+ + "dGlvbiEKAgYFQ2hyaXMKAiAfaHR0cHM6Ly9nZXQtYS1ib2FyLmZ1bGx1cmwuY29tLwACARIBAQIJ"
+ + "FAgGFQgEGQgEEAgEDwsDAQgEIAsDAQgEGAgCDQUTCAkCAgELAwAAAAACXw4AOAAEBAUICwEBBwAn"
+ + "CwAKATgBDAMOAwoBOAIMAg0CBwERAwcCEQMHAxEDBwQRAwcFEQMHBhEDBwcRAwcIEQMHCREDBwoR"
+ + "A0AMCgAAAAAAAAAHCxEDBwwRAwcNEQMHDhEDBw8RAwcQEQMHEREDBxIRAwcTEQMHFBEDQAwKAAAA"
+ + "AAAAADgDCwIKAS4RCjgECwMKAS4RCjgFCgERBgcVEQMHFhEDBxcRAwcYEQM4BjgHBgoAAAAAAAAA"
+ + "EgIKAS4RCgcZEQwSAQsBLhEKOAgCAA=="),
+ Lists.newArrayList(
+ "0x0000000000000000000000000000000000000000000000000000000000000001",
+ "0x0000000000000000000000000000000000000000000000000000000000000002"),
+ null,
+ 30000000L,
+ null,
+ null,
+ transactionBlockResponseOptions,
+ ExecuteTransactionRequestType.WaitForLocalExecution);
+```
+
+### Reading APIs
+
+#### Get Owned Objects
+```java
+CompletableFuture res =
+ sui.getObjectsOwnedByAddress(sender.get(), null, null, null);
+```
+
+#### Get Coins
+```java
+CompletableFuture res = sui.getAllCoins(sender.get(), null, null);
+```
+
+#### Get Transaction Block
+```java
+CompletableFuture res =
+ sui.queryTransactionBlocks(query, null, 10, false);
+```
+
+### Event APIs
+
+#### Subscribe
+```java
+Disposable disposable =
+ sui.subscribeEvent(eventFilter, System.out::println, System.out::println);
+
+disposable.dispose();
```
For more examples, you can see [SuiIntTests](src/integrationTest/java/io/sui/SuiIntTests.java)
diff --git a/build.gradle b/build.gradle
index 0003f12..2b00a22 100644
--- a/build.gradle
+++ b/build.gradle
@@ -11,7 +11,7 @@ plugins {
group 'me.grapebaba'
-version '0.4.2'
+version '0.4.3'
repositories {
mavenCentral()
diff --git a/docs/address.md b/docs/address.md
new file mode 100644
index 0000000..bb4e909
--- /dev/null
+++ b/docs/address.md
@@ -0,0 +1,17 @@
+## New Address
+
+### Generate Address
+
+```java
+KeyResponse res1 = sui.newAddress(SignatureScheme.ED25519);
+
+KeyResponse res2 = sui.newAddress(SignatureScheme.Secp256k1);
+```
+
+### Request Faucet
+
+```java
+CompletableFuture res = sui.requestSuiFromFaucet(s);
+```
+
+For more examples, you can see [SuiIntTests](https://github.com/GrapeBaBa/sui4j/blob/main/src/integrationTest/java/io/sui/SuiIntTests.java)
diff --git a/docs/call.md b/docs/call.md
index b7e7911..1fd8760 100644
--- a/docs/call.md
+++ b/docs/call.md
@@ -1,56 +1,170 @@
## Objects and Smart Contract transaction
-### TransferObject
+### TransferObjects
```java
- CompletableFuture res =
- sui.transferObject(
- "",
- "",
- "",
- "",
- ,
- ExecuteTransactionRequestType.WaitForLocalExecution);
+TransactionBlockResponseOptions transactionBlockResponseOptions=
+ new TransactionBlockResponseOptions();
+ transactionBlockResponseOptions.setShowEffects(true);
+ transactionBlockResponseOptions.setShowEvents(true);
+ transactionBlockResponseOptions.setShowInput(true);
+ transactionBlockResponseOptions.setShowObjectChanges(true);
+ CompletableFuture res=
+ sui.transferObjects(
+ sender.get(),
+ Lists.newArrayList(objects.get(0).getData().getObjectId()),
+ recipient.get(),
+ null,
+ 3000000L,
+ null,
+ null,
+ transactionBlockResponseOptions,
+ ExecuteTransactionRequestType.WaitForLocalExecution);
```
### Publish
```java
- CompletableFuture res =
- sui.publish(
- "",
- [""],
- "",
- ,
- ExecuteTransactionRequestType.WaitForLocalExecution);
+TransactionBlockResponseOptions transactionBlockResponseOptions=
+ new TransactionBlockResponseOptions();
+ transactionBlockResponseOptions.setShowEffects(true);
+ transactionBlockResponseOptions.setShowEvents(true);
+ transactionBlockResponseOptions.setShowInput(true);
+ transactionBlockResponseOptions.setShowObjectChanges(true);
+ CompletableFuture res=
+ sui.publish(
+ sender.get(),
+ Lists.newArrayList(
+ "oRzrCwYAAAAKAQAUAhQsA0BJBIkBEgWbAWcHggLNAgjPBGAGrwXCAwrxCC0MngnUAQAMAR4B"
+ +"JAIRAh0CHwIlAiYCJwIoAAACAAABDAAAAwQAAQQHAQAAAgYHAAMCDAEIAQQIBAAFBQwABwcCAAkJ"
+ +"BwAAFgABAAEcARUBAAEjFBUBAAIpCwwAAwoNAQEIAxoJCgEIBBoSEwAFDgYHAQIGIREBAQwGJREB"
+ +"AQgHIg4PAAgXBAUBAgkbCxYACwMHAwUIBAgIEAgHAgwBDAkIAggABwgIAAILBQEIAQgHAQgAAQYJ"
+ +"AAEBAgkABwgIAQgHAQgBAgYIBwcICAELBQEJAAEKAgEIBAMHCwUBCQAKCAQKCAQBBggIAQUBCwUB"
+ +"CAECCQAFAQcICAEIBgEJAAELAwEJAAEICQVCT0FSUwRCb2FyB0Rpc3BsYXkITWV0YWRhdGEGT3B0"
+ +"aW9uCVB1Ymxpc2hlcgZTdHJpbmcJVHhDb250ZXh0A1VJRANVcmwMYWRkX211bHRpcGxlA2FnZQVi"
+ +"b2FycwVidXllcgVjbGFpbQdjcmVhdG9yC2Rlc2NyaXB0aW9uB2Rpc3BsYXkLZHVtbXlfZmllbGQI"
+ +"ZnVsbF91cmwCaWQHaW1nX3VybARpbml0E2lzX29uZV90aW1lX3dpdG5lc3MIbWV0YWRhdGEEbmFt"
+ +"ZQNuZXcVbmV3X3Vuc2FmZV9mcm9tX2J5dGVzBG5vbmUGb2JqZWN0Bm9wdGlvbgdwYWNrYWdlBXBy"
+ +"aWNlD3B1YmxpY190cmFuc2ZlcgZzZW5kZXIEc29tZQZzdHJpbmcIdHJhbnNmZXIKdHhfY29udGV4"
+ +"dAV0eXBlcwN1cmwEdXRmOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+ +"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgMI"
+ +"AAAAAAAAAAAKAgUEbmFtZQoCDAtkZXNjcmlwdGlvbgoCCAdpbWdfdXJsCgIIB2NyZWF0b3IKAgYF"
+ +"cHJpY2UKAgwLcHJvamVjdF91cmwKAgQDYWdlCgIGBWJ1eWVyCgIJCGZ1bGxfdXJsCgIODWVzY2Fw"
+ +"ZV9zeW50YXgKAgcGe25hbWV9CgI7OlVuaXF1ZSBCb2FyIGZyb20gdGhlIEJvYXJzIGNvbGxlY3Rp"
+ +"b24gd2l0aCB7bmFtZX0gYW5kIHtpZH0KAiEgaHR0cHM6Ly9nZXQtYS1ib2FyLmNvbS97aW1nX3Vy"
+ +"bH0KAgoJe2NyZWF0b3J9CgIIB3twcmljZX0KAhgXaHR0cHM6Ly9nZXQtYS1ib2FyLmNvbS8KAg8O"
+ +"e21ldGFkYXRhLmFnZX0KAggHe2J1eWVyfQoCCwp7ZnVsbF91cmx9CgIJCFx7bmFtZVx9CgIKCWZp"
+ +"cnN0LnBuZwoCCwpGaXJzdCBCb2FyCgImJUZpcnN0IEJvYXIgZnJvbSB0aGUgQm9hcnMgY29sbGVj"
+ +"dGlvbiEKAgYFQ2hyaXMKAiAfaHR0cHM6Ly9nZXQtYS1ib2FyLmZ1bGx1cmwuY29tLwACARIBAQIJ"
+ +"FAgGFQgEGQgEEAgEDwsDAQgEIAsDAQgEGAgCDQUTCAkCAgELAwAAAAACXw4AOAAEBAUICwEBBwAn"
+ +"CwAKATgBDAMOAwoBOAIMAg0CBwERAwcCEQMHAxEDBwQRAwcFEQMHBhEDBwcRAwcIEQMHCREDBwoR"
+ +"A0AMCgAAAAAAAAAHCxEDBwwRAwcNEQMHDhEDBw8RAwcQEQMHEREDBxIRAwcTEQMHFBEDQAwKAAAA"
+ +"AAAAADgDCwIKAS4RCjgECwMKAS4RCjgFCgERBgcVEQMHFhEDBxcRAwcYEQM4BjgHBgoAAAAAAAAA"
+ +"EgIKAS4RCgcZEQwSAQsBLhEKOAgCAA=="),
+ Lists.newArrayList(
+ "0x0000000000000000000000000000000000000000000000000000000000000001",
+ "0x0000000000000000000000000000000000000000000000000000000000000002"),
+ null,
+ 30000000L,
+ null,
+ null,
+ transactionBlockResponseOptions,
+ ExecuteTransactionRequestType.WaitForLocalExecution);
```
### MoveCall
```java
- CompletableFuture res =
- sui.moveCall(
- "",
- "",
- "",
- "",
- [],
- [],
- "",
- ,
- ExecuteTransactionRequestType.WaitForLocalExecution);
+TransactionBlockResponseOptions transactionBlockResponseOptions=
+ new TransactionBlockResponseOptions();
+ transactionBlockResponseOptions.setShowEffects(true);
+ transactionBlockResponseOptions.setShowEvents(true);
+ transactionBlockResponseOptions.setShowInput(true);
+ transactionBlockResponseOptions.setShowObjectChanges(true);
+
+ io.sui.models.transactions.TypeTag.StructType structType=
+ new io.sui.models.transactions.TypeTag.StructType();
+ io.sui.models.transactions.StructTag structTag=new StructTag();
+ structTag.setAddress("0x02");
+ structTag.setModule("sui");
+ structTag.setName("SUI");
+ structType.setStructTag(structTag);
+ CompletableFuture res=
+ sui.moveCall(
+ sender.get(),
+ "0x02",
+ "pay",
+ "split",
+ Lists.newArrayList(structType),
+ Lists.newArrayList(suiObjectResponse.getData().getObjectId(),10000L),
+ null,
+ 3000000L,
+ null,
+ null,
+ transactionBlockResponseOptions,
+ ExecuteTransactionRequestType.WaitForLocalExecution);
```
-### BatchTransaction
+### SponsoredTransaction
```java
- CompletableFuture res =
- sui.batchTransaction(
- "",
- [],
- "",
- ,
- ExecuteTransactionRequestType.WaitForLocalExecution);
+CompletableFuture res=
+ sui.newTransactionBlock()
+ .thenCompose(
+ (Function>)
+ transactionBlock->{
+ transactionBlock.setExpiration(null);
+ transactionBlock.setSender(sender.get());
+ return transactionBlock
+ .transferObjects(
+ Lists.newArrayList(objects.get(0).getData().getObjectId()),
+ recipient.get())
+ .thenCompose(
+ (Function>)
+ argument->{
+ final CompletableFuture
+ transactionDataCompletableFuture=
+ transactionBlock
+ .setGasData(
+ Lists.newArrayList(),
+ sponsor.get(),
+ 3000000L,
+ null)
+ .thenCompose(
+ (Function<
+ Void,
+ CompletableFuture>)
+ unused->transactionBlock.build());
+
+ TransactionBlockResponseOptions
+ transactionBlockResponseOptions=
+ new TransactionBlockResponseOptions();
+ transactionBlockResponseOptions.setShowEffects(true);
+ transactionBlockResponseOptions.setShowEvents(true);
+ transactionBlockResponseOptions.setShowInput(true);
+ transactionBlockResponseOptions.setShowObjectChanges(true);
+ return transactionDataCompletableFuture.thenCompose(
+ (Function<
+ TransactionData,
+ CompletableFuture>)
+ transactionData->{
+ Intent intent=sui.transactionDataIntent();
+ String sponsorSig=
+ sui.signTransactionBlock(
+ sponsor.get(),transactionData,intent);
+ String senderSig=
+ sui.signTransactionBlock(
+ sender.get(),transactionData,intent);
+ return sui.executeTransaction(
+ transactionData,
+ Lists.newArrayList(senderSig,sponsorSig),
+ transactionBlockResponseOptions,
+ ExecuteTransactionRequestType
+ .WaitForLocalExecution);
+ });
+ });
+ });
```
-For more examples, you can see [SuiIntTests](https://github.com/GrapeBaBa/sui4j/blob/main/src/integrationTest/java/io/sui/SuiIntTests.java)
+For more examples, you can
+see [SuiIntTests](https://github.com/GrapeBaBa/sui4j/blob/main/src/integrationTest/java/io/sui/SuiIntTests.java)
diff --git a/docs/coin.md b/docs/coin.md
index 250bd46..488d7b7 100644
--- a/docs/coin.md
+++ b/docs/coin.md
@@ -3,53 +3,49 @@
### TransferSui
```java
- CompletableFuture res =
- sui.transferSui(
- "",
- "",
- ,
- "",
- ,
- ExecuteTransactionRequestType.WaitForLocalExecution);
-```
-
-### PaySui
+TransactionBlockResponseOptions transactionBlockResponseOptions =
+new TransactionBlockResponseOptions();
+transactionBlockResponseOptions.setShowEffects(true);
+transactionBlockResponseOptions.setShowEvents(true);
+transactionBlockResponseOptions.setShowInput(true);
+transactionBlockResponseOptions.setShowObjectChanges(true);
+
+CompletableFuture res =
+ sui.transferSui(
+ sender.get(),
+ null,
+ recipient.get(),
+ 20000L,
+ null,
+ 3000000L,
+ null,
+ null,
+ transactionBlockResponseOptions,
+ ExecuteTransactionRequestType.WaitForLocalExecution);
-```java
- CompletableFuture res =
- sui.paySui(
- "",
- [""],
- [""],
- [],
- ,
- ExecuteTransactionRequestType.WaitForLocalExecution);
-```
-
-### SplitCoin
-
-```java
- CompletableFuture res =
- sui.splitCoin(
- "",
- "",
- [],
- "",
- ,
- ExecuteTransactionRequestType.WaitForLocalExecution);
```
### MergeCoins
```java
- CompletableFuture res =
- sui.mergeCoins(
- "",
- "",
- "",
- "",
- ,
- ExecuteTransactionRequestType.WaitForLocalExecution);
+TransactionBlockResponseOptions transactionBlockResponseOptions =
+ new TransactionBlockResponseOptions();
+ transactionBlockResponseOptions.setShowEffects(true);
+ transactionBlockResponseOptions.setShowEvents(true);
+ transactionBlockResponseOptions.setShowInput(true);
+ transactionBlockResponseOptions.setShowObjectChanges(true);
+
+CompletableFuture res =
+ sui.mergeCoin(
+ sender.get(),
+ dest,
+ source,
+ null,
+ 3000000L,
+ null,
+ null,
+ transactionBlockResponseOptions,
+ ExecuteTransactionRequestType.WaitForLocalExecution);
```
For more examples, you can see [SuiIntTests](https://github.com/GrapeBaBa/sui4j/blob/main/src/integrationTest/java/io/sui/SuiIntTests.java)
diff --git a/docs/event.md b/docs/event.md
index abaa5e4..2761ed5 100644
--- a/docs/event.md
+++ b/docs/event.md
@@ -3,16 +3,12 @@
### SubscribeEvent
```java
- EventTypeEventFilter eventFilter = new EventTypeEventFilter();
- eventFilter.setEventType(EventType.CoinBalanceChange);
- Disposable disposable =
- sui.subscribeEvent(
- eventFilter,
- ,
- );
- moveCall(); // transaction invocation
-
- disposable.dispose(); // undo subscribe
+ AllEventFilter eventFilter = new AllEventFilter();
+
+ Disposable disposable =
+ SUI.subscribeEvent(eventFilter, System.out::println, System.out::println);
+
+ disposable.dispose();
```
For more examples, you can see [SuiIntTests](https://github.com/GrapeBaBa/sui4j/blob/main/src/integrationTest/java/io/sui/SuiIntTests.java)
diff --git a/docs/favicon16x16.png b/docs/favicon16x16.png
deleted file mode 100644
index 42079f5..0000000
Binary files a/docs/favicon16x16.png and /dev/null differ
diff --git a/docs/favicon192x192.png b/docs/favicon192x192.png
deleted file mode 100644
index 945094e..0000000
Binary files a/docs/favicon192x192.png and /dev/null differ
diff --git a/docs/favicon32x32.png b/docs/favicon32x32.png
deleted file mode 100644
index c3b7b22..0000000
Binary files a/docs/favicon32x32.png and /dev/null differ
diff --git a/docs/index.md b/docs/index.md
index 08f5dcb..d9c4e17 100644
--- a/docs/index.md
+++ b/docs/index.md
@@ -7,14 +7,16 @@ Sui4j is a robust, reactive, type safe Java library for working with Smart Contr
This allows you to work with the [@MystenLabs/sui](https://docs.sui.io/) blockchain, without the
additional overhead of having to write your own integration code for the platform in JVM ecosystem.
-The vision of sui4j is inspired by [Web3j](https://docs.web3j.io/), expect to accelerate JVM and Android ecosystem to integrate [@MystenLabs/sui](https://docs.sui.io/) network easily.
+The vision of sui4j is inspired by [Web3j](https://docs.web3j.io/), expect to accelerate JVM and
+Android ecosystem to integrate [@MystenLabs/sui](https://docs.sui.io/) network easily.
Features
========
- Complete implementation of @MystenLabs/sui's [JSON-RPC](https://docs.sui.io/sui-jsonrpc) client
API over HTTP
-- [BCS](https://github.com/diem/bcs) serialisation/deserialization support
+- [BCS](https://github.com/diem/bcs) serialisation/deserialization support in Java
+- Sui Programmable Transaction support
- Native reactive and asynchronous style API
- Easy to use with utility class
- Comprehensive integration tests and unit tests to guarantee high quality
@@ -25,8 +27,7 @@ Core Dependencies
- [RxJava](https://github.com/ReactiveX/RxJava) for its reactive-functional API
- [OKHttp](https://square.github.io/okhttp/) for HTTP connections
-- [Gson](https://github.com/google/gson) for fast JSON
- serialisation/deserialization
+- [Gson](https://github.com/google/gson) for fast JSON serialisation/deserialization
- [Bouncy Castle](https://www.bouncycastle.org/) for crypto
- [Guava](https://github.com/google/guava) for utility
diff --git a/docs/initsui.md b/docs/initsui.md
index c290a5f..0c392e3 100644
--- a/docs/initsui.md
+++ b/docs/initsui.md
@@ -1,16 +1,9 @@
## Init sui client
```java
- Sui sui = new Sui("", "")
+ Sui sui = new Sui("", "", "")
```
-or
-```java
- Sui sui = new Sui("", "", false)
-```
-
-To init sui client, you must provide the sui full node endpoint and keystore path.
-The third parameter represents if enable local transaction builder.
-By default, it is enabled since performance, however you still can use remote transaction builder by pass `false`.
+To init sui client, you must provide the sui full node endpoint, faucet endpoint and keystore path.
> **Note:** You only need **one** sui client instance in your application.
\ No newline at end of file
diff --git a/docs/quickstart.md b/docs/quickstart.md
index a6ffa45..50f9dd1 100644
--- a/docs/quickstart.md
+++ b/docs/quickstart.md
@@ -7,7 +7,7 @@
me.grapebaba
sui4j
-0.4.2
+0.4.3
```
@@ -15,42 +15,34 @@
```groovy
// https://mvnrepository.com/artifact/me.grapebaba/sui4j
-implementation 'me.grapebaba:sui4j:0.4.2'
+implementation 'me.grapebaba:sui4j:0.4.3'
```
## Use Sui4j
-### Mint an example NFT
+### Transfer coin
```java
- Sui sui = new Sui("", "", true);
- CompletableFuture res =
- sui.moveCall(
- "0x0a7421363a1f6a82800f7c9340ac02b5905798cb",
- "0x0000000000000000000000000000000000000002",
- "devnet_nft",
- "mint",
- Lists.newArrayList(),
- Lists.newArrayList(
- "Example NFT",
- "An example NFT.",
- "ipfs://bafkreibngqhl3gaa7daob4i2vccziay2jjlp435cf66vhono7nrvww53ty"),
- null,
- 2000L,
- ExecuteTransactionRequestType.WaitForLocalExecution);
-```
+Sui sui = new Sui("","","");
-### Transfer coin
+TransactionBlockResponseOptions transactionBlockResponseOptions =
+new TransactionBlockResponseOptions();
+transactionBlockResponseOptions.setShowEffects(true);
+transactionBlockResponseOptions.setShowEvents(true);
+transactionBlockResponseOptions.setShowInput(true);
+transactionBlockResponseOptions.setShowObjectChanges(true);
-```java
- Sui sui = new Sui("", "", true);
- CompletableFuture res =
+CompletableFuture res =
sui.transferSui(
- "0x4a2a5a8e193b608a802cd733158ccb63c2092bdb",
- "0x42f92e4c7ceec704941b48dd8919afa991913db8",
- 2000L,
- "0xa0fd2a6814cff90d4463fb7e5b5b81d01d763472",
- 20000L,
- ExecuteTransactionRequestType.WaitForLocalExecution);
+ "0x490174dbcac203f199d9dc50780f95c3a772a3c7357c5d98924885cd818f6980",
+ null,
+ "0x4543a8d956875317817c0c794c41c4b2e9a223faf2c1be0aa2c35e48acd8be42",
+ 20000L,
+ null,
+ 3000000L,
+ null,
+ null,
+ transactionBlockResponseOptions,
+ ExecuteTransactionRequestType.WaitForLocalExecution);
```
\ No newline at end of file
diff --git a/docs/sui4j.png b/docs/sui4j.png
new file mode 100644
index 0000000..1775e82
Binary files /dev/null and b/docs/sui4j.png differ
diff --git a/mkdocs.yml b/mkdocs.yml
index b16cbc1..be5f0db 100644
--- a/mkdocs.yml
+++ b/mkdocs.yml
@@ -37,33 +37,33 @@ theme:
# - toc.integrate
palette:
- scheme: default
- primary: indigo
- accent: indigo
+ primary: white
+ accent: white
toggle:
icon: material/brightness-7
name: Switch to dark mode
- scheme: slate
- primary: indigo
- accent: indigo
+ primary: white
+ accent: white
toggle:
icon: material/brightness-4
name: Switch to light mode
font:
text: Roboto
code: Roboto Mono
- logo: SuiLogo.png
- favicon: favicon16x16.png
+ logo: sui4j.png
+ favicon: sui4j.png
nav:
- Home: index.md
- Quickstart: quickstart.md
- Getting Started:
- Init sui client: initsui.md
+ - New address: address.md
- Coin transaction: coin.md
- Object and Smart Contract: call.md
- Subscribe Events: event.md
- Build: build.md
-# - Manual Configuration: getting_started/manual_configuration.md
markdown_extensions:
- abbr
diff --git a/src/integrationTest/java/io/sui/EventClientImplIntTests.java b/src/integrationTest/java/io/sui/EventClientImplIntTests.java
index 48832bd..191e93f 100644
--- a/src/integrationTest/java/io/sui/EventClientImplIntTests.java
+++ b/src/integrationTest/java/io/sui/EventClientImplIntTests.java
@@ -25,12 +25,11 @@
import io.sui.jsonrpc.JsonRpcClientProvider;
import io.sui.jsonrpc.OkHttpJsonRpcClientProvider;
import io.sui.models.SuiApiException;
-import io.sui.models.events.EventEnvelope;
import io.sui.models.events.EventFilter;
import io.sui.models.events.EventFilter.AllEventFilter;
-import io.sui.models.events.EventFilter.EventTypeEventFilter;
-import io.sui.models.events.EventFilter.ModuleEventFilter;
-import io.sui.models.events.EventType;
+import io.sui.models.events.EventFilter.MoveModuleEventFilter;
+import io.sui.models.events.SuiEvent;
+import io.sui.models.objects.MoveModule;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
@@ -63,15 +62,15 @@ static void beforeAll() {
void subscribeEvent() {
EventFilter.PackageEventFilter packageEventFilter = new EventFilter.PackageEventFilter();
packageEventFilter.setSuiPackage("0x2");
- EventFilter.ModuleEventFilter moduleEventFilter = new ModuleEventFilter();
- moduleEventFilter.setModule("devnet_nft");
- EventFilter.EventTypeEventFilter eventTypeEventFilter = new EventTypeEventFilter();
- eventTypeEventFilter.setEventType(EventType.MoveEvent);
+ MoveModuleEventFilter moveModuleEventFilter = new MoveModuleEventFilter();
+ MoveModule moveModule = new MoveModule();
+ moveModule.setSuiPackage("0x2");
+ moveModule.setModule("devnet_nft");
+ moveModuleEventFilter.setModule(moveModule);
EventFilter.AllEventFilter allEventFilter = new AllEventFilter();
allEventFilter.getAll().add(packageEventFilter);
- allEventFilter.getAll().add(moduleEventFilter);
- allEventFilter.getAll().add(eventTypeEventFilter);
- Consumer onNext = System.out::println;
+ allEventFilter.getAll().add(moveModuleEventFilter);
+ Consumer onNext = System.out::println;
Consumer onError = Throwable::printStackTrace;
eventClient.subscribeEvent(allEventFilter, onNext, onError);
diff --git a/src/integrationTest/java/io/sui/QueryClientImplIntTests.java b/src/integrationTest/java/io/sui/QueryClientImplIntTests.java
index 91392cc..9348b43 100644
--- a/src/integrationTest/java/io/sui/QueryClientImplIntTests.java
+++ b/src/integrationTest/java/io/sui/QueryClientImplIntTests.java
@@ -106,7 +106,6 @@ void getObjectsOwnedByAddressIsNotEmpty() throws ExecutionException, Interrupted
"0xb43d0468fbc80c81931b73a4b9ef4663e671b65a07ae5b336a0e7d8a70ac0646",
query,
null,
- null,
null);
CompletableFuture