Skip to content

Instantly share code, notes, and snippets.

@90K2
90K2 / Test.kt
Created March 8, 2023 19:06
ton proof kotlin validation
@Test
fun `ton proof validation test`() {
val payload = """
{
"proof": {
"timestamp": 1678206305,
"domain": {
"lengthBytes": 10,
"value": "tonplay.io"
},
import org.ton.api.pk.PrivateKeyEd25519
import org.ton.bigint.BigInt
import org.ton.block.*
import org.ton.boc.BagOfCells
import org.ton.cell.Cell
import org.ton.cell.CellBuilder
import org.ton.contract.wallet.WalletContract
import org.ton.contract.wallet.WalletTransfer
import org.ton.api.pk.PrivateKeyEd25519
import org.ton.bigint.BigInt
import org.ton.bitstring.BitString
import org.ton.block.*
import org.ton.boc.BagOfCells
import org.ton.cell.Cell
import org.ton.cell.CellBuilder
import org.ton.contract.wallet.WalletContract
@90K2
90K2 / getAccount.kt
Last active December 24, 2022 20:37
@Test
fun `get account info raw`() {
val liteClient = LiteClient(
liteClientConfigGlobal = LiteClientConfigGlobal(
liteServers = listOf(
LiteServerDesc(id = PublicKeyEd25519(base64("n4VDnSCUuSpjnCyUk9e3QOOd6o0ItSWYbTnW3Wnn8wk=")), ip = 84478511, port = 19949)
)
),
coroutineContext = Dispatchers.Default
)
@90K2
90K2 / liteClientBeanConfig.kt
Created December 15, 2022 13:46
LiteClient bean
@Bean("liteClientExtended")
fun liteClient(tonChainConfigReader: TonChainConfigReader): LiteClient {
val configList = tonChainConfigReader.load().liteservers
val nearestNodesList = mutableListOf<TonChainConfigReader.TonNetConfig.LiteServerParams>()
configList.forEach {
val liteClient = LiteClient(
LiteClientConfigGlobal(
liteservers = listOf(
LiteServerDesc(id = PublicKeyEd25519(base64(it.id.key)), ip = it.ip, port = it.port)
@90K2
90K2 / PageableLite.kt
Created October 4, 2022 11:25
Spring pageable extension. Fixed current page number, reduced pageable and sorting extra fields, map function for content transformation saved
import org.springframework.data.domain.Page
class PageLite<T>(page: Page<T>) {
var content: List<T> = page.content
var pageable = PageableLite(
number = page.pageable.pageNumber + 1,
size = page.pageable.pageSize,
total = page.totalElements
)
@90K2
90K2 / isHostAvailable.kt
Created August 18, 2022 10:10
check whether is host port available or not
private fun isHostAvailable(ip: Int, port: Int): Boolean {
return kotlin.runCatching {
Socket(Utils.ipv4IntToStr(ip), port)
true
}.getOrNull() ?: false
}
@90K2
90K2 / Extension.kt
Created August 10, 2022 13:52
Serialize Kotlin data class constructor fields based on @JsonProperty annotations into string json. Nested non primitive fields will be serialized also but without any Annotations driving
fun Any.toJsonV2(): String {
var fieldNameToAnnotatedNameMap = this@toJsonV2.javaClass.declaredFields.map { it.name }.associateWith { fieldName ->
val jsonFieldName =
this@toJsonV2::class.primaryConstructor?.parameters?.first { it.name == fieldName }?.annotations?.firstOrNull { it is JsonProperty }
val serializedName = if (jsonFieldName != null) (jsonFieldName as JsonProperty).value else fieldName
serializedName
}
return buildString {
append("{\n")
import okhttp3.HttpUrl.Companion.toHttpUrl
import okhttp3.OkHttpClient
import okhttp3.Request
private inline fun < reified T: Any> downloadData(link: String, key: String, offset: String?): T {
val url = link.toHttpUrl()
offset?.let { url.newBuilder().addQueryParameter("offset", offset).build() }
val response = OkHttpClient().newCall(
Request.Builder()
.url(url)
import kotlinx.coroutines.reactor.mono
import org.ton.api.tonnode.TonNodeBlockId
import org.ton.api.tonnode.TonNodeBlockIdExt
import org.ton.bigint.BigInt
import org.ton.block.*
import org.ton.crypto.base64
import org.ton.lite.api.liteserver.LiteServerBlockTransactions
import org.ton.lite.api.liteserver.LiteServerTransactionId3
import org.ton.lite.client.LiteClient
import reactor.kotlin.core.publisher.toFlux