Skip to content

Releases: FrankC01/pysui

Release 0.98.0

Choose a tag to compare

@FrankC01 FrankC01 released this 13 Apr 19:05

[0.98.0] - 2026-04-13

Added

  • Wallet adds coins command to print summary of each coin type owned by address.
  • Begin refactoring the GraphQL and gRPC clients for uniform usage
    • SuiGQLClient (synchronous GraphQL client) deprecated since 0.98.0; use client_factory(PysuiConfiguration()) which returns an async client; targeted for removal in v1.0.0
    • Added PysuiClient abstract base class (sui_common/client.py) as shared interface for all async clients
    • Moved TransactionConstraints to sui_common/sui_txn_types.py; backwards-compat re-export kept in pgql_types.py
    • Added client_factory(pysui_config, *, group_name=None, protocol=None) in sui_common/factory.py; dispatches to AsyncSuiGQLClient or SuiGrpcClient based on active group protocol
    • Exposed PysuiClient, GroupProtocol, and client_factory from top-level pysui package
    • SuiConfig (JSON-RPC config), SuiClient sync/async (JSON-RPC), SuiGQLClient (sync GraphQL), and SuiTransaction (sync GraphQL) marked DeprecationWarning since 0.98.0; targeted for removal in v1.0.0
    • Removed live-node integration tests (test_argprep_sync.py, test_argprep_async.py, test_utils.py) and their conftest fixtures; integration test strategy will be rethought for v0.99.0
    • Added tests/test_factory.py with 6 offline unit tests covering client_factory dispatch, error cases, and top-level pysui exports; no network required

Release 0.97.0

Choose a tag to compare

@FrankC01 FrankC01 released this 06 Apr 09:31

Added

  • sui_prot_versions.py utility to list current protocol id for each profile (i.e. devnet, etc.). In repo only
  • Support for Sui Address coin balance. See Mysten changes here
    • GraphQL Query: GetAddressCoinBalance, GetAddressCoinBalances (deprecates GetBalance and GetAllCoinBalances queries)
    • gRPC Request: GetAddressCoinBalance, GetAddressCoinBalances (deprecates GetBalance and GetAllCoinBalances requests)
    • new pysui PTB call (GraphQL and gRPC) balance_from Withdraws Coin<T> from address balance and returns Coin<T>
    • GraphQL and gRPC: Transaction support for paying gas from account balance
      • client.transaction(use_account_for_gas=True) or await client.transaction(use_account_for_gas=True) to enable
      • txdict = txer.build_sign_with_account_gas() or txdict = await txer.build_sign_with_account_gas()

Example (GraphQL):

def handle_result(result: SuiRpcResult) -> SuiRpcResult:
    """."""
    if result.is_ok():
        if hasattr(result.result_data, "to_json"):
            print(result.result_data.to_json(indent=2))
        else:
            print(result.result_data)
    else:
        print(result.result_string)
        if result.result_data and hasattr(result.result_data, "to_json"):
            print(result.result_data.to_json(indent=2))
        else:
            print(result.result_data)
    return result

def do_sui_coin_to_account(client: SyncGqlClient):
    """Moves Sui mists to an account."""
    # Print before
    print("Before Sui coin balances")
    do_address_balance(client)
    txer: SuiTransaction = client.transaction()
    # Pull amount from transaction Gas
    scres = txer.split_coin(coin=txer.gas, amounts=[1_000_000_000])
    txer.move_call(
        target="0x2::coin::send_funds",
        type_arguments=["0x2::sui::SUI"],
        arguments=[scres, client.config.active_address],
    )
    # Uncomment to dry run
    handle_result(
        client.execute_query_node(
            with_node=qn.DryRunTransactionKind(
                tx_kind=txer.raw_kind(),
                tx_meta={"sender": client.config.active_address},
                do_gas_selection=True,
            )
        )
    )

    # Uncomment to Execute
    # txdict = txer.build_and_sign()
    # result = client.execute_query_node(with_node=qn.ExecuteTransaction(**txdict))
    # if result.is_ok():
    #     print("After transfer to address Sui coin balances")
    #     do_address_balance(client)

def do_account_to_sui_coin(client: SyncGqlClient):
    """Moves account balance to Sui coin and transfer to current address.

    Execution, vs. DryRun, Execution also demonstrates funding the transaction with sender account balance vs. gas coins.
    """
    # If set_balance is None, will use the total account balance
    set_balance: int = 1000000
    # Get the current balance
    curr_balance_res = client.execute_query_node(
        with_node=qn.GetAddressCoinBalance(owner=client.config.active_address)
    )

    # Validate existing funds exist.
    if curr_balance_res.is_ok():
        if curr_balance_res.result_data.balance.address_balance is None:
            raise ValueError(f"{client.config.active_address} Has no account balance")
        if not set_balance:
            set_balance = curr_balance_res.result_data.balance.address_balance
        else:
            if set_balance > curr_balance_res.result_data.balance.address_balance:
                raise ValueError(
                    f"{set_balance} exceeds existing address balance of {curr_balance_res.result_data.balance.address_balance}"
                )

        # Enable transaction to use account balance for gas payment
        txer: SuiTransaction = client.transaction(use_account_for_gas=True)
        
        coin = txer.balance_from(source=FundsSource.SENDER, amount=set_balance)
        txer.transfer_objects(transfers=[coin], recipient=client.config.active_address)

        # Uncomment to dry run
        # As we are using the address balance to pay for transaction
        # we want to get an estimate that reflects that, so setting `do_gas_selection=True` does
        # that.

        handle_result(
            client.execute_query_node(
                with_node=qn.DryRunTransactionKind(
                    tx_kind=txer.raw_kind(),
                    tx_meta={"sender": client.config.active_address},
                    do_gas_selection=True,
                )
            )
        )

        # Uncomment to Execute using the new build and signing method

        # txdict = txer.build_sign_with_account_gas()
        # handle_result(
        #     client.execute_query_node(with_node=qn.ExecuteTransaction(**txdict))
        # )

Fixed

Changed

  • gRPC: Updated protos

Release 0.96.0

Choose a tag to compare

@FrankC01 FrankC01 released this 04 Mar 10:45

[0.96.0] - 2026-03-04

Added

  • GraphQL: maxMultiGetSize to serviceConfig (via client.rpc_config().serviceConfig)
  • GraphQL: Added support for new Sui Move package scheme for publishing
  • gRPC: Added support for new Sui Move package scheme for publishing

Fixed

  • GraphQL: Removed 'error' field from immediate Simulate and Execute results.

Release 0.95.0

Choose a tag to compare

@FrankC01 FrankC01 released this 15 Jan 12:13

[0.95.0] - 2026-01-15

Added

Fixed

Changed

  • gRPC: Updated Mysten gRPC protobuffs
  • GraphQL: Enabled skip_checks and do_gas_selection on DryRunTransaction
  • GraphQL: Enabled skip_checks and do_gas_selection on DryRunTransactionKind

Removed

Release 0.94.0

Choose a tag to compare

@FrankC01 FrankC01 released this 11 Dec 09:17

[0.94.0] - 2025-12-11

Added

Fixed

  • bug pysui wallet not creating transaction from client
  • typo's in splay utility help documentation

Changed

  • Updated Mysten gRPC protobuffs
  • GraphQL: Mysten removed events and timestamp from transaction simulation results, defaults to None in DryRunResultTransactionGQL

Release 0.93.0

Choose a tag to compare

@FrankC01 FrankC01 released this 11 Nov 20:04

[0.93.0] - 2025-11-11

Breaking Changes
GraphQL and gRPC: Transactions are built from client being used. SuiTransaction, and variants,
will now fail if constructed directly.

GraphQL: For DryRunTransactionKind, argument name changed from tx_bytestr to tx_kind

Added

  • GraphQL: atRisk and exchangeRateTableAddress to Validator
  • GraphQL: GetValidatorExchangeRates. Given a validator's exchange object, return rate information by Epoch

Fixed

  • bug SerialTransactionExecutor was not fetchinig current gas price

Changed

  • change dropped v2beta protos
  • change Updated smash and splay utilities to GraphQL Beta
  • change Added exception in standalone transaction construction.
    Must use appropriate client (GraphQL or gRPC) transaction(...) method. Exception thrown otherwise.
  • GraphQL: Rename tx_bytestr to tx_kind in DryRunTransactionKind
  • Updated v2 protobuffs from Mysten for gRPC

Removed

  • gRPC: GetValidatorApy removed, apy field not longer available

Release 0.92.0

Choose a tag to compare

@FrankC01 FrankC01 released this 16 Oct 08:01

[0.92.0] - 2025-10-16

ANNOUNCE: In this release JSON RPC support is EOL. Strongly advised to move to pysui gRPC or GraphQL.

  • You will need to update the GraphQL URLs in PysuiConfig.json at a minimum. See pysui-graphql

Added

  • v2 gRPC protos included, v2beta to be sunset

Fixed

  • bug gRPC: 'finality' dropped from field_mask (read_mask)
  • bug JSON RPC: PR broke
    connectivity.
  • GraphQL Mysten fixed issue with fetching 0x2::sui::SUI by address in testnet

Changed

  • gRPC LiveDataService renamed to StateService for v2 protos
  • gRPC SimulateTransaction moved to TransactionService for v2 protos
  • DryRunTransactionKind tx_meta requires 'sender' set. This is due to a constraint in Sui GraphQL.

v0.91.0: Release 0.91.0 (#357)

Choose a tag to compare

@FrankC01 FrankC01 released this 02 Oct 11:46
7acd501

[0.91.0] - 2025-10-02

Breaking Changes
The transition from GraphQL ALPHA to GraphQL BETA introduced a number of input and output changes.

  • You will need to update the GraphQL URLs in PysuiConfig.json at a minimum. See pysui-graphql
  • Be sure to test thoroughly and report any issues on pysui github or our discord channel found in README.md.

Added

  • Support for Mysten GraphQL Beta

Fixed

  • bug GraphQL change to httpx kwargs, was failing on Async 'proxies'

Changed

Removed

Release 0.90.1

Choose a tag to compare

@FrankC01 FrankC01 released this 22 Sep 09:04

[0.90.1] - 2025-09-22

Bumped dependentices version, if cloning or branching from repo recommended to re-run pip install -r requirements.txt

Added

Fixed

  • bug GraphQL change to httpx kwargs, was failing on Async 'proxies'

Changed

Removed

Release 0.90.0

Choose a tag to compare

@FrankC01 FrankC01 released this 13 Sep 09:33

[0.90.0] - 2025-09-13

Bumped dependentices version, if cloning or branching from repo recommended to re-run pip install -r requirements.txt

Added

Fixed

  • bug JSON RPC: Client get_gas_from_faucet not handling exception
  • bug Typo in global constants
  • bug Fix alias length validation logic in JSON RPC configuration operation

Changed

  • change Bumped gql, httpx, h2, websockets, pysui-fastcrypto
  • change JSON RPC address print