Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

0.4.1 #127

Open
wants to merge 7 commits into
base: main
Choose a base branch
from
Open

0.4.1 #127

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
114 changes: 57 additions & 57 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -1,57 +1,57 @@
name: Release
on:
push:
branches:
- main

jobs:
build:
if: "!contains(github.event.commits[0].message, '[skip ci]')"
strategy:
matrix:
include:
- os: macos-latest
gradle_args: assemble publishIosX64PublicationToSonatypeRepository
- os: macos-latest
gradle_args: assemble publishIosArm64PublicationToSonatypeRepository
- os: macos-latest
gradle_args: assemble publishIosSimulatorArm64PublicationToSonatypeRepository
- os: macos-latest
gradle_args: assemble publishTvosX64PublicationToSonatypeRepository
- os: macos-latest
gradle_args: assemble publishTvosArm64PublicationToSonatypeRepository
- os: macos-latest
gradle_args: assemble publishTvosSimulatorArm64PublicationToSonatypeRepository
- os: macos-latest
gradle_args: assemble publishWatchosArm32PublicationToSonatypeRepository
- os: macos-latest
gradle_args: assemble publishWatchosArm64PublicationToSonatypeRepository
- os: macos-latest
gradle_args: assemble publishWatchosX64PublicationToSonatypeRepository
- os: macos-latest
gradle_args: assemble publishWatchosSimulatorArm64PublicationToSonatypeRepository
- os: macos-latest
gradle_args: assemble publishMacosX64PublicationToSonatypeRepository
- os: macos-latest
gradle_args: assemble publishMacosArm64PublicationToSonatypeRepository
- os: ubuntu-latest
gradle_args: assemble publishKotlinMultiplatformPublicationToSonatypeRepository publishJvmPublicationToSonatypeRepository publishLinuxX64PublicationToSonatypeRepository publishLinuxArm64PublicationToSonatypeRepository publishMingwX64PublicationToSonatypeRepository

runs-on: ${{ matrix.os }}
steps:
- name: Checkout project sources
uses: actions/checkout@v3
- uses: actions/setup-java@v3
with:
distribution: liberica
java-version: 8
- name: Build using gradle
uses: gradle/gradle-build-action@v2
with:
arguments: ${{ matrix.gradle_args }}
env:
SIGNING_SECRET_KEY: ${{ secrets.SIGNING_SECRET_KEY }}
SIGNING_PASSWORD: ${{ secrets.SIGNING_PASSWORD }}
OSSRH_USERNAME: ${{ secrets.OSSRH_USERNAME }}
OSSRH_PASSWORD: ${{ secrets.OSSRH_PASSWORD }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
#name: Release
#on:
# push:
# branches:
# - main
#
#jobs:
# build:
# if: "!contains(github.event.commits[0].message, '[skip ci]')"
# strategy:
# matrix:
# include:
# - os: macos-latest
# gradle_args: assemble publishIosX64PublicationToSonatypeRepository
# - os: macos-latest
# gradle_args: assemble publishIosArm64PublicationToSonatypeRepository
# - os: macos-latest
# gradle_args: assemble publishIosSimulatorArm64PublicationToSonatypeRepository
# - os: macos-latest
# gradle_args: assemble publishTvosX64PublicationToSonatypeRepository
# - os: macos-latest
# gradle_args: assemble publishTvosArm64PublicationToSonatypeRepository
# - os: macos-latest
# gradle_args: assemble publishTvosSimulatorArm64PublicationToSonatypeRepository
# - os: macos-latest
# gradle_args: assemble publishWatchosArm32PublicationToSonatypeRepository
# - os: macos-latest
# gradle_args: assemble publishWatchosArm64PublicationToSonatypeRepository
# - os: macos-latest
# gradle_args: assemble publishWatchosX64PublicationToSonatypeRepository
# - os: macos-latest
# gradle_args: assemble publishWatchosSimulatorArm64PublicationToSonatypeRepository
# - os: macos-latest
# gradle_args: assemble publishMacosX64PublicationToSonatypeRepository
# - os: macos-latest
# gradle_args: assemble publishMacosArm64PublicationToSonatypeRepository
# - os: ubuntu-latest
# gradle_args: assemble publishKotlinMultiplatformPublicationToSonatypeRepository publishJvmPublicationToSonatypeRepository publishLinuxX64PublicationToSonatypeRepository publishLinuxArm64PublicationToSonatypeRepository publishMingwX64PublicationToSonatypeRepository
#
# runs-on: ${{ matrix.os }}
# steps:
# - name: Checkout project sources
# uses: actions/checkout@v3
# - uses: actions/setup-java@v3
# with:
# distribution: liberica
# java-version: 8
# - name: Build using gradle
# uses: gradle/gradle-build-action@v2
# with:
# arguments: ${{ matrix.gradle_args }}
# env:
# SIGNING_SECRET_KEY: ${{ secrets.SIGNING_SECRET_KEY }}
# SIGNING_PASSWORD: ${{ secrets.SIGNING_PASSWORD }}
# OSSRH_USERNAME: ${{ secrets.OSSRH_USERNAME }}
# OSSRH_PASSWORD: ${{ secrets.OSSRH_PASSWORD }}
# GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
57 changes: 57 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -28,3 +28,60 @@ local.properties

# Ignore Gradle build output directory
build

.jreleaser/config.tomlreplay_pid*
.idea/**/workspace.xml
.idea/**/tasks.xml
.idea/**/usage.statistics.xml
.idea/**/dictionaries
.idea/**/shelf
.idea/**/aws.xml
.idea/**/contentModel.xml
.idea/**/dataSources/
.idea/**/dataSources.ids
.idea/**/dataSources.local.xml
.idea/**/sqlDataSources.xml
.idea/**/dynamic.xml
.idea/**/uiDesigner.xml
.idea/**/dbnavigator.xml
.idea/**/gradle.xml
.idea/**/libraries
cmake-build-*/
.idea/**/mongoSettings.xml
*.iws
out/
.idea_modules/
atlassian-ide-plugin.xml
.idea/replstate.xml
.idea/sonarlint/
com_crashlytics_export_strings.xml
crashlytics.properties
crashlytics-build.properties
fabric.properties
.idea/httpRequests
.idea/caches/build_file_checksums.ser
**/build/
!src/**/build/
gradle-app.setting
!gradle-wrapper.jar
!gradle-wrapper.properties
.gradletasknamecache
.project
.classpath
.DS_Store
.AppleDouble
.LSOverride
Icon
._*
.DocumentRevisions-V100
.fseventsd
.Spotlight-V100
.TemporaryItems
.Trashes
.VolumeIcon.icns
.com.apple.timemachine.donotpresent
.AppleDB
.AppleDesktop
Network Trash Folder
Temporary Items
.apdisk
18 changes: 9 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,28 +10,28 @@

### Core components

* `org.ton:ton-kotlin-tvm:0.3.1` - TVM Primitives (Cells, BOC, etc.)
* `org.ton:ton-kotlin-crypto:0.3.1` - Crypto primitives for TON (ED25519, SHA, etc.)
* `org.ton:ton-kotlin-adnl:0.3.1` - ADNL (Abstract Datagram Network Layer) TON Network implementation
* `org.ton.kotlin:ton-kotlin-tvm:0.4.0` - TVM Primitives (Cells, BOC, etc.)
* `org.ton.kotlin:ton-kotlin-crypto:0.4.0` - Crypto primitives for TON (ED25519, SHA, etc.)
* `org.ton.kotlin:ton-kotlin-adnl:0.4.0` - ADNL (Abstract Datagram Network Layer) TON Network implementation

### API Interfaces

* `org.ton:ton-kotlin-contract:0.3.1` - Smart-contracts API interface
* `org.ton:ton-kotlin-liteclient:0.3.1` - Lite-client API implementation
* `org.ton.kotlin:ton-kotlin-contract:0.4.0` - Smart-contracts API interface
* `org.ton.kotlin:ton-kotlin-liteclient:0.4.0` - Lite-client API implementation

### TL-B (TL-Binary)

* `org.ton:ton-kotlin-tlb:0.3.1` - TON TL-B (TL-Binary) serialization/deserialization
* `org.ton:ton-kotlin-block-tlb:0.3.1` - Pre-generated TL-B schemas for TON Blockchain
* `org.ton:ton-kotlin-hashmap-tlb:0.3.1` - Pre-generated TL-B schemas for TON Hashmap (also known as Dictionary)
* `org.ton.kotlin:ton-kotlin-tlb:0.4.0` - TON TL-B (TL-Binary) serialization/deserialization
* `org.ton.kotlin:ton-kotlin-block-tlb:0.4.0` - Pre-generated TL-B schemas for TON Blockchain
* `org.ton.kotlin:ton-kotlin-hashmap-tlb:0.4.0` - Pre-generated TL-B schemas for TON Hashmap (also known as Dictionary)

## Documentation

https://github.com/andreypfau/ton-kotlin/wiki/TON-Kotlin-documentation

<!-- Badges -->

[maven-central]: https://central.sonatype.com/artifact/org.ton/ton-kotlin-tvm/0.3.1
[maven-central]: https://central.sonatype.com/artifact/org.ton/ton-kotlin-tvm/0.4.0

[license]: LICENSE

Expand Down
40 changes: 33 additions & 7 deletions bitstring/src/BitString.kt
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ public inline fun BitString(size: Int): BitString = BitString.of(size)
public inline fun BitString(vararg bits: Boolean): BitString = BitString.of(*bits)
public inline fun BitString(bits: Iterable<Boolean>): BitString = BitString.of(bits)
public inline fun BitString(bits: Collection<Boolean>): BitString = BitString.of(bits)
public inline fun BitString(hex: String): BitString = BitString.of(hex)
public inline fun BitString(hex: String): BitString = BitString.parse(hex)

public inline fun Iterable<Boolean>.toBitString(): BitString = BitString(this)
public inline fun BooleanArray.toBitString(): BitString = BitString(*this)
Expand All @@ -27,13 +27,14 @@ public interface BitString : Iterable<Boolean>, Comparable<BitString> {
public operator fun get(index: Int): Boolean
public fun getOrNull(index: Int): Boolean?

public fun countLeadingBits(fromIndex: Int = 0, toIndex: Int = size, bit: Boolean): Int

public operator fun plus(bit: Boolean): BitString =
plus(booleanArrayOf(bit))

public operator fun plus(bits: BooleanArray): BitString =
plus(bits.asIterable())


public operator fun plus(bits: Collection<Boolean>): BitString =
plus(bits.asIterable())

Expand Down Expand Up @@ -61,8 +62,17 @@ public interface BitString : Iterable<Boolean>, Comparable<BitString> {
public fun commonSuffixWith(other: BitString): BitString =
binary(toBinary().commonSuffixWith(other.toBinary()))

public fun slice(indices: IntRange): BitString = slice(indices.first, indices.last)
@Deprecated("use substring(indices) instead", ReplaceWith("substring(indices)"))
public fun slice(indices: IntRange): BitString = substring(indices.first, indices.last)

@Deprecated("use substring(startIndex, endIndex) instead", ReplaceWith("substring(startIndex, endIndex)"))
public fun slice(startIndex: Int, endIndex: Int = size): BitString =
substring(startIndex, endIndex)

public fun substring(range: IntRange): BitString =
substring(range.first, range.last)

public fun substring(startIndex: Int, endIndex: Int = size): BitString =
binary(toBinary().substring(startIndex, endIndex))

public infix fun xor(other: BitString): BitString
Expand All @@ -81,6 +91,18 @@ public interface BitString : Iterable<Boolean>, Comparable<BitString> {

public fun toHexString(): String

public fun copyInto(
destination: MutableBitString,
destinationOffset: Int = 0,
startIndex: Int = 0,
endIndex: Int = size
) {
val length = endIndex - startIndex
for (i in 0 until length) {
destination[destinationOffset + i] = this[startIndex + i]
}
}

public companion object {
@JvmStatic
public fun empty(): BitString = EmptyBitString
Expand Down Expand Up @@ -132,12 +154,16 @@ public interface BitString : Iterable<Boolean>, Comparable<BitString> {
}

@JvmStatic
public fun of(hex: String): BitString {
if (hex.isEmpty()) return empty()
@Deprecated("use parse(hex) instead", replaceWith = ReplaceWith("parse(hex)"))
public fun of(hex: String): BitString = parse(hex)

@JvmStatic
public fun parse(source: CharSequence): BitString {
if (source.isEmpty()) return empty()
// True if bit string doesn't contain mod 4 number of bits
val incomplete = hex.isNotEmpty() && hex.last() == '_'
val incomplete = source.isNotEmpty() && source.last() == '_'

val bits = hex.asSequence()
val bits = source.asSequence()
.takeWhile { it != '_' } // consume entire hexadecimal string, except for `_`
.map { char ->
char.digitToInt(16)
Expand Down
Loading