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

Candidate for 5.0.21 release #2111

Merged
merged 48 commits into from
Apr 1, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
48 commits
Select commit Hold shift + click to select a range
13cb4bb
Fix large integer overflows in swagger-ui
SethDusek Dec 18, 2023
70eb187
Add README for swagger-ui project
SethDusek Jan 31, 2024
1d251d5
5.0.21 version set
kushti Feb 5, 2024
c55fdef
Refactor Message class
ccellado Feb 8, 2024
810d708
Refactor Message class
ccellado Feb 8, 2024
df0ac3b
Better wallet unlock error
ccellado Feb 23, 2024
ce95bc2
Better wallet unlock error
ccellado Feb 23, 2024
aa8cf53
Better wallet unlock error
ccellado Feb 23, 2024
c19b7dd
Merge pull request #2119 from ccellado/better-wallet-unlock-error
kushti Feb 25, 2024
ace7016
add burn tokens form to ergo-node-interface
deadit Feb 25, 2024
e0c383a
Merge pull request #2125 from ergoplatform/add_burn_tokens_to_ergo_panel
kushti Feb 26, 2024
d739f5d
Merge branch 'master' of github.com:ergoplatform/ergo into v5.0.21
kushti Feb 26, 2024
e7dbd1c
Merge pull request #2113 from ccellado/refactor_message
kushti Feb 26, 2024
1340843
Move tests to ergo-core
ccellado Mar 1, 2024
c56614b
Move tests to ergo-core
ccellado Mar 1, 2024
85336b7
Merge pull request #2132 from ccellado/ergo-core-tests
kushti Mar 4, 2024
d37d0f9
fix ErgoStateContextSpec sporadic failure
stenolog Feb 22, 2024
46f7f98
provide alternate test-generators
stenolog Mar 4, 2024
bd9db19
Merge pull request #2116 from stenolog/i2114-repro
kushti Mar 5, 2024
b7dcf24
Fix ergo-core publishing in build.sbt
ccellado Mar 7, 2024
11ec4f3
Fix ergo-core multiversion tests
ccellado Mar 7, 2024
26f7271
Merge pull request #2135 from ccellado/improve-ci
kushti Mar 9, 2024
024b067
Remove old docker library
ccellado Feb 28, 2024
e791f43
Remove old docker library
ccellado Mar 16, 2024
6af5a4e
Remove old docker library
ccellado Feb 28, 2024
8adcbc8
Merge remote-tracking branch 'origin/it-tests-fix' into it-tests-fix
ccellado Mar 16, 2024
b324090
Remove old docker library
ccellado Mar 16, 2024
772d1f1
Remove old docker library
ccellado Mar 16, 2024
3c9c26c
Remove old docker library
ccellado Mar 16, 2024
74c899c
Remove old docker library
ccellado Mar 16, 2024
c56954e
Remove old docker library
ccellado Mar 16, 2024
b9bb5af
Remove old docker library
ccellado Mar 16, 2024
aebb019
Remove old docker library
ccellado Mar 16, 2024
76a0d81
Merge remote-tracking branch 'origin/it-tests-fix' into it-tests-fix
ccellado Mar 16, 2024
ab31f84
Remove old docker library
ccellado Mar 16, 2024
e33247f
Remove old docker library
ccellado Mar 17, 2024
f1b20ca
Remove old docker library
ccellado Mar 17, 2024
7cdc4cc
Remove old docker library
ccellado Mar 17, 2024
b172a81
Remove old docker library
ccellado Mar 17, 2024
69f42b4
Remove old docker library
ccellado Mar 17, 2024
199ec55
Remove old docker library
ccellado Mar 17, 2024
124a45b
Remove old docker library
ccellado Mar 17, 2024
bccfd3f
Remove old docker library
ccellado Mar 17, 2024
a91cfda
Remove old docker library
ccellado Mar 17, 2024
98c0966
Remove old docker library
ccellado Mar 17, 2024
f0fc48d
Remove old docker library
ccellado Mar 18, 2024
05e4267
Merge pull request #2139 from ccellado/it-tests-fix
kushti Mar 19, 2024
99309ce
Merge pull request #2100 from SethDusek/i1900-fix
kushti Mar 21, 2024
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
80 changes: 80 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,49 @@ jobs:
SONATYPE_PASSWORD: ${{ secrets.SONATYPE_PASSWORD }}
SONATYPE_USERNAME: ${{ secrets.SONATYPE_USERNAME }}

test_core:
name: Run ergo-core tests and publish a ergo-core snapshot
env:
HAS_SECRETS: ${{ secrets.SONATYPE_PASSWORD != '' }}
strategy:
matrix:
os: [ubuntu-latest]
scala: [2.13.12, 2.12.18, 2.11.12]
java: [[email protected]]
runs-on: ${{ matrix.os }}
steps:
- name: Checkout current branch (full)
uses: actions/checkout@v2
with:
fetch-depth: 0

- name: Setup Java and Scala
uses: olafurpg/setup-scala@v10
with:
java-version: ${{ matrix.java }}

- name: Cache sbt
uses: actions/cache@v2
with:
path: |
~/.sbt
~/.ivy2/cache
~/.coursier/cache/v1
~/.cache/coursier/v1
~/AppData/Local/Coursier/Cache/v1
~/Library/Caches/Coursier/v1
key: ${{ runner.os }}-sbt-cache-v2-${{ hashFiles('**/*.sbt') }}-${{ hashFiles('project/build.properties') }}

- name: Runs ergo-core tests
run: sbt ++${{ matrix.scala }} ergoCore/test

- name: Publish a wallet snapshot ${{ github.ref }}
if: env.HAS_SECRETS == 'true'
run: sbt ++${{ matrix.scala }} ergoCore/publish
env:
SONATYPE_PASSWORD: ${{ secrets.SONATYPE_PASSWORD }}
SONATYPE_USERNAME: ${{ secrets.SONATYPE_USERNAME }}

test_node:
name: Run node tests
strategy:
Expand Down Expand Up @@ -91,3 +134,40 @@ jobs:
- name: Runs node tests
run: sbt -Denv=test clean ++${{ matrix.scala }} test

test_it:
name: Run it node tests
strategy:
matrix:
os: [ ubuntu-latest ]
scala: [ 2.12.18 ]
java: [ [email protected] ]
runs-on: ${{ matrix.os }}
steps:
- name: Checkout current branch (full)
uses: actions/checkout@v2
with:
path: it
fetch-depth: 0

- name: Setup Java and Scala
uses: olafurpg/setup-scala@v10
with:
java-version: ${{ matrix.java }}

- name: Cache sbt
uses: actions/cache@v2
with:
path: |
~/.sbt
~/.ivy2/cache
~/.coursier/cache/v1
~/.cache/coursier/v1
~/AppData/Local/Coursier/Cache/v1
~/Library/Caches/Coursier/v1
key: ${{ runner.os }}-sbt-cache-v2-${{ hashFiles('**/*.sbt') }}-${{ hashFiles('project/build.properties') }}

- name: Runs it node tests
run: |
cd it
mkdir tmp
TMPDIR=$(pwd)/tmp sbt -Denv=test clean ++${{ matrix.scala }} it:test
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,8 @@ This repository has modular structure, so only parts which are needed for an app
* [ergo-core](ergo-core/README.md) - functionality needed for an SPV client (P2P messages, block section stuctures, PoW, NiPoPoW)
* ergo-wallet - Java and Scala functionalities to sign and verify transactions

Using IntelliJ IDEA be sure to set Build Tools / sbt -> `sbt shell` / `use for` / builds, to avoid compilation errors

## Contributing to Ergo

Ergo is an open-source project and we welcome contributions from developers and testers! Join the discussion over [Ergo Discord](https://discord.gg/kj7s7nb) in #development channel, or Telegram: https://t.me/ErgoDevelopers. Please also check out our [Contributing documentation](https://docs.ergoplatform.com/contribute/).
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,16 @@ import scorex.crypto.hash.{Blake2b256, Digest32}
import scorex.db.{ByteArrayWrapper, LDBVersionedStore}

import scala.collection.immutable.SortedMap
import scala.math.Ordering.Implicits._

object OOMTest extends App {

implicit val ordering: Ordering[Array[Byte]] =
new Ordering[Array[Byte]] {
override def compare(o1: Array[Byte], o2: Array[Byte]): Int =
implicitly[Ordering[Seq[Int]]].compare(o1.toSeq.map(_ & 0xFF), o2.toSeq.map(_ & 0xFF))
}

type Box = (ADKey, ADValue)

type HF = Blake2b256.type
Expand Down
11 changes: 8 additions & 3 deletions build.sbt
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ libraryDependencies ++= Seq(
"ch.qos.logback" % "logback-classic" % "1.3.5",

// test dependencies
"org.scala-lang.modules" %% "scala-async" % "0.9.7" % "test",
"org.scala-lang.modules" %% "scala-async" % "1.0.1" % "test",
"org.scalactic" %% "scalactic" % "3.0.3" % "test",
"org.scalatest" %% "scalatest" % "3.2.10" % "test,it",
"org.scalacheck" %% "scalacheck" % "1.14.+" % "test",
Expand All @@ -63,7 +63,9 @@ libraryDependencies ++= Seq(

"org.asynchttpclient" % "async-http-client" % "2.6.+" % "test",
"com.fasterxml.jackson.dataformat" % "jackson-dataformat-properties" % "2.9.2" % "test",
"com.spotify" % "docker-client" % "8.14.5" % "test" classifier "shaded"
"com.github.docker-java" % "docker-java-core" % "3.3.4" % Test,
"com.github.docker-java" % "docker-java-transport-httpclient5" % "3.3.4" % Test,

)

updateOptions := updateOptions.value.withLatestSnapshots(false)
Expand Down Expand Up @@ -167,6 +169,7 @@ configs(IntegrationTest extend Test)
inConfig(IntegrationTest)(Seq(
parallelExecution := false,
test := (test dependsOn docker).value,
scalacOptions ++= Seq("-Xasync")
))

dockerfile in docker := {
Expand All @@ -175,7 +178,7 @@ dockerfile in docker := {
val configMainNet = (resourceDirectory in IntegrationTest).value / "mainnetTemplate.conf"

new Dockerfile {
from("openjdk:9-jre-slim")
from("openjdk:11-jre-slim")
label("ergo-integration-tests", "ergo-integration-tests")
add(assembly.value, "/opt/ergo/ergo.jar")
add(Seq(configDevNet), "/opt/ergo")
Expand Down Expand Up @@ -255,6 +258,7 @@ lazy val ergoCore = (project in file("ergo-core"))
),
scalacOptions in(Compile, compile) ++= (if (scalaBinaryVersion.value == "2.11") Seq() else Seq("-release", "8")),
scalacOptions in(Compile, compile) --= scalacOpts,
parallelExecution in Test := false,
)

lazy val ergoWallet = (project in file("ergo-wallet"))
Expand All @@ -279,6 +283,7 @@ configs(It2Test)
inConfig(It2Test)(Defaults.testSettings ++ Seq(
parallelExecution := false,
test := (test dependsOn docker).value,
scalacOptions ++= Seq("-Xasync")
))

lazy val ergo = (project in file("."))
Expand Down
4 changes: 3 additions & 1 deletion ergo-core/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,9 @@ val handshakeMessageSerialized = HandshakeSerializer.toBytes(handshakeMessage)
Serialize the message and send it.
If the message arrived successfully, start communicating with the peer node.

All communication is wrapped with Message headers, format described [here](https://docs.ergoplatform.com/dev/p2p/network/#message-format).
All communication is wrapped with message headers.
Format described [here](https://docs.ergoplatform.com/dev/p2p/network/#message-format).
[MessageBase](src/main/scala/org/ergoplatform/network/message/MessageBase.scala) interface to implement.

## Syncing with the node

Expand Down
3 changes: 3 additions & 0 deletions ergo-core/build.sbt
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,9 @@ val deps212 = Seq(
"io.circe" %% "circe-generic" % "0.13.0",
"io.circe" %% "circe-parser" % "0.13.0")

publishMavenStyle := true
publishArtifact in Test := false

libraryDependencies ++= Seq() ++
(if (scalaVersion.value == scala211) deps211 else deps212)

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
package org.ergoplatform.network.message

import org.ergoplatform.network.message.MessageConstants._

import scala.util.{Success, Try}

/**
* Trait for a ergo network message
*
* @param spec - message specification
* @param input - message being wrapped, whether in byte-array form (if from outside),
* or structured data (if formed locally)
* @tparam Content - message data type
*/
trait MessageBase[Content] {
val spec: MessageSpec[Content]
val input: Either[Array[Byte], Content]

/**
* Message data bytes
*/
lazy val dataBytes: Array[Byte] = input match {
case Left(db) => db
case Right(d) => spec.toBytes(d)
}

/**
* Structured message content
*/
lazy val data: Try[Content] = input match {
case Left(db) => spec.parseBytesTry(db)
case Right(d) => Success(d)
}

lazy val dataLength: Int = dataBytes.length

/**
* @return serialized message length in bytes
*/
def messageLength: Int = {
if (dataLength > 0) {
HeaderLength + ChecksumLength + dataLength
} else {
HeaderLength
}
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package org.ergoplatform.settings

import com.typesafe.config.ConfigFactory
import net.ceedubs.ficus.Ficus._
import net.ceedubs.ficus.readers.ArbitraryTypeReader._
import java.io.File

object ChainSettingsReader extends PowSchemeReaders with ModifierIdReader with SettingsReaders{
def read(path: String): Option[ChainSettings] = {
val file = new File(path)
if (file.exists) {
val cfg = ConfigFactory.parseFile(file)
val fallback = ConfigFactory.parseFile(new File("src/main/resources/application.conf"))
val network = ConfigFactory.parseFile(new File("src/main/resources/testnet.conf"))
val fullConfig = ConfigFactory
.defaultOverrides()
.withFallback(cfg) //order
.withFallback(network) //matters
.withFallback(fallback) //here
.resolve()

val chainSettings = fullConfig.as[ChainSettings]("ergo.chain")
Some(chainSettings)
} else None
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package org.ergoplatform.settings

import com.typesafe.config.Config
import net.ceedubs.ficus.readers.ValueReader
import scorex.util.ModifierId

trait ModifierIdReader {

implicit val modifierIdReader: ValueReader[ModifierId] = new ValueReader[ModifierId] {
override def read(cfg: Config, path: String): ModifierId = {
ModifierId @@ cfg.getString(path)
}
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package org.ergoplatform.settings

import com.typesafe.config.{Config, ConfigException}
import net.ceedubs.ficus.Ficus._
import net.ceedubs.ficus.readers.ValueReader
import org.ergoplatform.mining._

trait PowSchemeReaders {

implicit val powSchemeReader: ValueReader[AutolykosPowScheme] = new ValueReader[AutolykosPowScheme] {
override def read(cfg: Config, path: String): AutolykosPowScheme = {
val schemeNameKey = s"$path.powType"
val schemeName = cfg.getString(schemeNameKey)
val n = cfg.as[Int](s"$path.n")
val k = cfg.as[Int](s"$path.k")
if (schemeName == "autolykos") {
new AutolykosPowScheme(k, n)
} else if (schemeName == "fake") {
new DefaultFakePowScheme(k, n)
} else {
throw new ConfigException.BadValue(schemeNameKey, schemeName)
}
}
}
}

Loading
Loading