ExSui
View SourceExSui is a comprehensive Elixir library that provides a high-performance, type-safe interface for interacting with the Sui blockchain through its native gRPC API. This library is a work in progress.
Sui is a Layer 1 blockchain designed for near-instant, low-cost transactions with parallel processing and optimized scalability, making it ideal for DeFi, NFTs, and gaming. Sui uses Move, a smart contract language designed for safety and efficiency. Unlike traditional smart contract languages like Solidity, Move is built with security in mind, minimizing common vulnerabilities such as reentrancy attacks and ensuring better resource management.
Getting Started
If available in Hex, the package can be installed
by adding ex_sui
to your list of dependencies in mix.exs
:
def deps do
[
{:ex_sui, git: "https://github.com/briankariuki/ex_sui.git"}
]
end
Usage
In iex you can access base methods in the ExSui
module. For example,
Getting a transaction's details
iex> transaction = %Sui.Rpc.V2beta.GetTransactionRequest{digest: "sp9rx3yRjDxfTbmA4xoU5FDw5233Y1S3pVaRdg8UzyJ", read_mask: %{paths: ["digest", "signatures", "events", "transaction"]}}
iex> ExSui.get_transaction(transaction)
{:ok,
%Sui.Rpc.V2beta.ExecutedTransaction{
digest: "sp9rx3yRjDxfTbmA4xoU5FDw5233Y1S3pVaRdg8UzyJ",
transaction: %Sui.Rpc.V2beta.Transaction{
bcs: %Sui.Rpc.V2beta.Bcs{
name: "TransactionData",
value: <<0, 0, 5, ...>>,
__unknown_fields__: []
},
digest: "sp9rx3yRjDxfTbmA4xoU5FDw5233Y1S3pVaRdg8UzyJ",
version: 1,
kind: %Sui.Rpc.V2beta.TransactionKind{
kind: {:programmable_transaction, ...},
__unknown_fields__: []
},
sender: "0x7afd2906726498dd5395dc26ec563ce22aa502200c0fa3a69aa2d30f2b382027",
gas_payment: %Sui.Rpc.V2beta.GasPayment{...},
...
},
signatures: [
%Sui.Rpc.V2beta.UserSignature{
bcs: %Sui.Rpc.V2beta.Bcs{
name: "UserSignatureBytes",
value: <<5, ...>>,
__unknown_fields__: []
},
scheme: :ZKLOGIN,
signature: nil,
public_key: nil,
...
}
],
effects: nil,
events: %Sui.Rpc.V2beta.TransactionEvents{
bcs: %Sui.Rpc.V2beta.Bcs{name: "TransactionEvents", value: <<...>>, ...},
digest: "8yyjrqPFKX7WVMFkJdVCAavWaZKDmp1k6sGeBsh9db81",
events: [...],
...
},
checkpoint: nil,
timestamp: nil,
balance_changes: [],
...
}}
Getting the current checkpoint details
iex> request = %Sui.Rpc.V2beta.GetCheckpointRequest{read_mask: %{paths: ["summary", "digest", "sequence_number"]}}
iex> ExSui.get_checkpoint(request)
{:ok,
%Sui.Rpc.V2beta.Checkpoint{
sequence_number: 213034443,
digest: "Bf1DgoFuknnAjd5SC1h3Ve6aAhGxvmpuh1gGDAakWGUk",
summary: %Sui.Rpc.V2beta.CheckpointSummary{
bcs: %Sui.Rpc.V2beta.Bcs{
name: "CheckpointSummary",
value: <<11, 3, 0, 0, 0, 0, 0, 0, 203, 165, 178, 12, 0, 0, 0, 0, 62, 47,
10, 156, 0, 0, 0, 0, 32, 78, 75, 57, 28, 43, 235, 46, 138, 117, 73, 59,
122, 171, 84, 119, 79, 93, ...>>,
__unknown_fields__: []
},
digest: "Bf1DgoFuknnAjd5SC1h3Ve6aAhGxvmpuh1gGDAakWGUk",
epoch: 779,
sequence_number: 213034443,
total_network_transactions: 2617913150,
content_digest: "6GdL2k3QWfN4eicvgTEo55FfMH3QK1TRoLDoRfyN45KE",
previous_digest: "Aqkj4bSHRoT83MjjcsxSvpMqf9qZc3dFq8xAVFekad6j",
epoch_rolling_gas_cost_summary: %Sui.Rpc.V2beta.GasCostSummary{
computation_cost: 1115817221792,
storage_cost: 9846684282800,
storage_rebate: 8752065218424,
non_refundable_storage_fee: 88404699176,
__unknown_fields__: []
},
timestamp: %Google.Protobuf.Timestamp{
seconds: 1751141311,
nanos: 898000000,
__unknown_fields__: []
},
commitments: [],
end_of_epoch_data: nil,
version_specific_data: <<0, 1, 138, 102, 2, 0, 0, 0, 0, 0>>,
__unknown_fields__: []
},
signature: nil,
contents: nil,
transactions: [],
__unknown_fields__: []
}}
Contributing
Download and install the protocol buffer compiler (protoc).
MacOS users can install it through Homebrew by running the following command:
brew install protobuf
Other platforms e.g. windows, linux can be installed by following the steps here.
Documentation can be generated with ExDoc and published on HexDocs. Once published, the docs can be found at https://hexdocs.pm/ex_sui.