+
+
+
+ Binary Canonical Serialization is an efficient binary format for structured data,
+ ensuring consistent serialization across platforms. This format is used extensively by Sui, so it is worth
+ touching.
+
+
+
+ It is available for various platforms, and we can install it by adding a dependency for a platform
+ as follows:
+
+
+
+
+ implementation("xyz.mcxross.bcs:<bcs-[platform]>:<$bcs_version>")
+
+
+
+
+ implementation("xyz.mcxross.bcs:bcs:<$bcs_version>")
+
+
+
+
+ implementation("xyz.mcxross.bcs:bcs-android:<$bcs_version>")
+
+
+
+
+ implementation("xyz.mcxross.bcs:bcs-jvm:<$bcs_version>")
+
+
+
+
+
+
+
+ In order to serializer a user defined type, first make a class serializable by annotating it with @Serializable
+
+
+@Serializable
+data class Data(
+ val long: Long,
+ val double: Double,
+ val string: String,
+ val boolean: Boolean
+)
+
+ You can now serialize an instance of this class by calling Bcs.encodeToByteArray()
+
+val bcs = Bcs.encodeToByteArray(Data(1_000_000, 3.14159265359, "çå∞≠¢õß∂ƒ∫", false))
+
+
+
+ To deserialize an object from BCS, use the decodeFromByteArray()
static methode:
+
+ val obj = Bcs.decodeFromByteArray<Data>(bcs)
+
+
+
\ No newline at end of file
diff --git a/docs/topics/deepbook.md b/docs/topics/deepbook.md
new file mode 100644
index 0000000..27a5b8b
--- /dev/null
+++ b/docs/topics/deepbook.md
@@ -0,0 +1,3 @@
+# DeepBook
+
+TBA
\ No newline at end of file
diff --git a/docs/topics/ext-technology.md b/docs/topics/ext-technology.md
new file mode 100644
index 0000000..e027f96
--- /dev/null
+++ b/docs/topics/ext-technology.md
@@ -0,0 +1,5 @@
+# Extended Technology
+
+This topic covers every other Sui technology that is not part of the core technologies.
+It is important to mention that the term "core" is used loosely.
+
diff --git a/docs/topics/getting-started.topic b/docs/topics/getting-started.topic
new file mode 100644
index 0000000..825659d
--- /dev/null
+++ b/docs/topics/getting-started.topic
@@ -0,0 +1,112 @@
+
+
+
+
+
+ In this chapter, we'll see how to install Sui binaries and how to add Sui client libraries
+ as dependencies. Let's start with installing Sui binaries.
+
+
+
+ Installing Sui for development is very easy with package managers. In your OS' terminal or shell, run the
+ appropriate command as shown below:
+
+
+
+
+ brew install sui
+
+
+
+
+ brew install sui
+
+
+
+
+ choco install sui
+
+
+
+
+
+
+ In order to interact with Sui, we need a client. If you've run either of the above
+ commands, you have a binary client installed that you can confirm by running sui --version
+ in you terminal or shell. If successful, this should display the version of Sui installed.
+
+
+
+ To add a library client to your project, follow the instructions below:
+
+
+
+
+ The client libraries are available for various platforms. Ranging from specific platform
+ libraries to multiplatform libraries. Follow the instructions below:
+
+
+
+
+ implementation("xyz.mcxross.ksui:<ksui-[platform]>:<$ksui_version>")
+
+
+
+
+ If you have a Kotlin Multiplaform project, add the following dependency to your projects' common sourceSet:
+
+
+
+ implementation("xyz.mcxross.ksui:ksui:<$ksui_version>")
+
+
+
+
+ For a purely Android project, add the following as a dependency:
+
+
+
+ implementation("xyz.mcxross.ksui:ksui-android:<$ksui_version>")
+
+
+
+
+ For a JVM projects, add the following as a dependency:
+
+
+ implementation("xyz.mcxross.ksui:ksui-jvm:<$ksui_version>")
+
+
+
+
+
+
+ Create a Sui
instance. This is the entry point for the client
+
+ val sui = Sui()
+
+ The default connection network is devnet
. To change this:
+
+ val config = SuiConfig(settings = SuiSettings(network = Network.MAINNET))
+ val sui = Sui(config)
+
+
+ The Sui Client is heavily configurable. You can set things like connectAttempts
,
+ retryOnServerErrors
, proxy
, and much more.
+
+ Simply pass a ClientConfig
object to the settings:
+
+
+ val settings = SuiSettings(clientConfig = ClientConfig(maxRetries = 5))
+ val sui = Sui(SuiConfig(settings))
+
+
+
+ Our client is now ready for use. We can now call the various available methods on this sui
object.
+
+
+
+
\ No newline at end of file
diff --git a/docs/topics/misc.md b/docs/topics/misc.md
new file mode 100644
index 0000000..4500831
--- /dev/null
+++ b/docs/topics/misc.md
@@ -0,0 +1,3 @@
+# Misc
+
+Everything else pertaining to Sui that's good to know
\ No newline at end of file
diff --git a/docs/topics/programmable-transaction-blocks.md b/docs/topics/programmable-transaction-blocks.md
new file mode 100644
index 0000000..e8346d0
--- /dev/null
+++ b/docs/topics/programmable-transaction-blocks.md
@@ -0,0 +1,72 @@
+# Programmable Transaction Blocks
+
+The Kotlin SDK does a great job by abstracting PTB construction using a simple
+expressive Domain Specific Language as we'll explore below.
+
+The `programmableTx {}` DSL block is the top most block that creates a typed scope for PTB construction. Within it, we can
+call all available commands, pass their results to the next command and so forth.
+
+For example, the Sui `moveCall` command expects a mandatory `target` argument, optional`arguments`, and
+`typedArguments` argument. The natural mapping for these is the `moveCall` within `programmableTx` DSL,
+where each property (target, arguments, and typedArgument) is used directly with matching names.
+
+Let's see how to call `hello_world` **Move** **function** in the `hello_wolrd` **module** of
+`0x883393ee444fb828aa0e977670cf233b0078b41d144e6208719557cb3888244d` **package**. The function
+has the following signature:
+
+```Rust
+[[[public entry fun hello_world(arg0: u64)|https://testnet.suivision.xyz/package/0x883393ee444fb828aa0e977670cf233b0078b41d144e6208719557cb3888244d?tab=Code]]]
+```
+
+Things to note, the function expects a `u64` as an argument. Has no type parameters. The module name and package. Click on it for details.
+
+Given the above properties, we can call it as follows:
+
+```Kotlin
+val ptb = programmableTx {
+ command {
+ moveCall {
+ target = "0x883393ee444fb828aa0e977670cf233b0078b41d144e6208719557cb3888244d::hello_wolrd::hello_world"
+ typeArguments = emptyList()
+ arguments = inputs(0UL)
+ }
+ }
+}
+```
+
+You can also pass results from one command to the next by storing them in a variable, as shown below:
+
+```Kotlin
+val ptb = programmableTx {
+ command {
+ val splitCoins = splitCoins {
+ coin = Argument.GasCoin
+ into = inputs(1_000_000UL)
+ }
+
+ transferObjects {
+ objects = inputs(splitCoins)
+ to = input(alice.address)
+ }
+ }
+}
+```
+
+## Transaction Block Dry Run
+
+Simulate a transaction before execution:
+
+```Kotlin
+val result = [[[sui|getting-started.topic#sui-client]]].dryRunTransactionBlock(ptb)
+```
+
+## Sign And Execute Transaction Block
+
+Once you've constructed, you can sign and execute it:
+
+```Kotlin
+val result = [[[sui|getting-started.topic#sui-client]]].signAndExecuteTransactionBlock(alice, ptb)
+```
+
+In the next section of Transactions, we're going to see how to visually compose PTBs using
+**[PTB Studio](https://ptb.studio)**.
\ No newline at end of file
diff --git a/docs/topics/ptb-studio.md b/docs/topics/ptb-studio.md
new file mode 100644
index 0000000..22ccd65
--- /dev/null
+++ b/docs/topics/ptb-studio.md
@@ -0,0 +1,10 @@
+# PTB Studio
+
+[PTB Studio](https://ptb.studio) is your one-stop shop for everything Sui Transactions.
+With it, you can construct, visualize and execute transactions.
+
+Watch the video below to learn more:
+
+