Merge branch 'main' of github.com:cerc-io/laconicd into murali/update-fork
This commit is contained in:
commit
c7be5e0dc9
2
.github/workflows/docker-image.yml
vendored
2
.github/workflows/docker-image.yml
vendored
@ -1,4 +1,4 @@
|
|||||||
name: Publish onn release
|
name: Publish on release
|
||||||
on:
|
on:
|
||||||
release:
|
release:
|
||||||
types: [published]
|
types: [published]
|
||||||
|
52
.github/workflows/test.yml
vendored
52
.github/workflows/test.yml
vendored
@ -36,7 +36,7 @@ jobs:
|
|||||||
- uses: codecov/codecov-action@v3
|
- uses: codecov/codecov-action@v3
|
||||||
with:
|
with:
|
||||||
file: ./coverage.txt
|
file: ./coverage.txt
|
||||||
fail_ci_if_error: true
|
fail_ci_if_error: false
|
||||||
if: env.GIT_DIFF
|
if: env.GIT_DIFF
|
||||||
|
|
||||||
test-importer:
|
test-importer:
|
||||||
@ -81,6 +81,56 @@ jobs:
|
|||||||
make test-rpc
|
make test-rpc
|
||||||
if: env.GIT_DIFF
|
if: env.GIT_DIFF
|
||||||
|
|
||||||
|
<<<<<<< HEAD
|
||||||
|
=======
|
||||||
|
sdk_tests:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
- name: Checkout laconic-sdk
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
with:
|
||||||
|
path: "./laconic-sdk/"
|
||||||
|
repository: cerc-io/laconic-sdk
|
||||||
|
fetch-depth: 0
|
||||||
|
ref: jest_timeout
|
||||||
|
- name: Environment
|
||||||
|
run: ls -tlh && env
|
||||||
|
- name: build containers scripts
|
||||||
|
working-directory: tests/sdk_tests
|
||||||
|
run: ./build-laconicd-container.sh && ./build-sdk-test-container.sh
|
||||||
|
- name: start containers
|
||||||
|
working-directory: tests/sdk_tests
|
||||||
|
run: docker compose up -d
|
||||||
|
- name: run-tests.sh
|
||||||
|
working-directory: tests/sdk_tests
|
||||||
|
run: ./run-tests.sh
|
||||||
|
- name: reset containers for auction tests
|
||||||
|
working-directory: tests/sdk_tests
|
||||||
|
if: always()
|
||||||
|
run: docker compose down
|
||||||
|
- name: start auction containers
|
||||||
|
working-directory: tests/sdk_tests
|
||||||
|
run: docker compose -f docker-compose-auctions.yml up -d
|
||||||
|
- name: run-acution-tests.sh
|
||||||
|
working-directory: tests/sdk_tests
|
||||||
|
run: ./run-auction-tests.sh
|
||||||
|
- name: reset containers for nameservice tests
|
||||||
|
working-directory: tests/sdk_tests
|
||||||
|
if: always()
|
||||||
|
run: docker compose -f docker-compose-auctions.yml down
|
||||||
|
- name: start auction containers
|
||||||
|
working-directory: tests/sdk_tests
|
||||||
|
run: docker compose -f docker-compose-nameservice.yml up -d
|
||||||
|
- name: run-nameservice-expiry-tests.sh
|
||||||
|
working-directory: tests/sdk_tests
|
||||||
|
run: ./run-nameservice-expiry-tests.sh
|
||||||
|
- name: reset containers for nameservice tests
|
||||||
|
working-directory: tests/sdk_tests
|
||||||
|
if: always()
|
||||||
|
run: docker compose -f docker-compose-nameservice.yml down
|
||||||
|
|
||||||
|
>>>>>>> 5f6a9f56bbd93f049b7f34d99dd412a10fbafeeb
|
||||||
# integration_tests:
|
# integration_tests:
|
||||||
# runs-on: ubuntu-latest
|
# runs-on: ubuntu-latest
|
||||||
# steps:
|
# steps:
|
||||||
|
1
.gitignore
vendored
1
.gitignore
vendored
@ -50,6 +50,7 @@ coverage.txt
|
|||||||
sim_log_file
|
sim_log_file
|
||||||
tests/**/tmp/*
|
tests/**/tmp/*
|
||||||
yarn.lock
|
yarn.lock
|
||||||
|
x/auction/client/testutil/bidder-bafyre*
|
||||||
|
|
||||||
# Vagrant
|
# Vagrant
|
||||||
.vagrant/
|
.vagrant/
|
||||||
|
@ -20,7 +20,7 @@ RUN make build
|
|||||||
FROM alpine:3.17.0
|
FROM alpine:3.17.0
|
||||||
|
|
||||||
# Install ca-certificates
|
# Install ca-certificates
|
||||||
RUN apk add --update ca-certificates jq
|
RUN apk add --update ca-certificates jq curl
|
||||||
WORKDIR /
|
WORKDIR /
|
||||||
|
|
||||||
# Copy over binaries from the build-env
|
# Copy over binaries from the build-env
|
||||||
|
@ -15,6 +15,14 @@ The Source of Proof. Laconic is a next generation data availability & verifiabil
|
|||||||
make install
|
make install
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
To quickly get started with a single node fixture, run:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
./init.sh
|
||||||
|
```
|
||||||
|
|
||||||
## Community
|
## Community
|
||||||
|
|
||||||
The following chat channels and forums are a great spot to ask questions about Ethermint:
|
The following chat channels and forums are a great spot to ask questions about Ethermint:
|
||||||
|
@ -77,7 +77,7 @@ func SetupWithDB(isCheckTx bool, patchGenesis func(*EthermintApp, simapp.Genesis
|
|||||||
// Initialize the chain
|
// Initialize the chain
|
||||||
app.InitChain(
|
app.InitChain(
|
||||||
abci.RequestInitChain{
|
abci.RequestInitChain{
|
||||||
ChainId: "ethermint_9000-1",
|
ChainId: "laconic_9000-1",
|
||||||
Validators: []abci.ValidatorUpdate{},
|
Validators: []abci.ValidatorUpdate{},
|
||||||
ConsensusParams: DefaultConsensusParams,
|
ConsensusParams: DefaultConsensusParams,
|
||||||
AppStateBytes: stateBytes,
|
AppStateBytes: stateBytes,
|
||||||
|
1
go.mod
1
go.mod
@ -18,6 +18,7 @@ require (
|
|||||||
github.com/deckarep/golang-set v1.8.0
|
github.com/deckarep/golang-set v1.8.0
|
||||||
github.com/ethereum/go-ethereum v1.10.26
|
github.com/ethereum/go-ethereum v1.10.26
|
||||||
github.com/gibson042/canonicaljson-go v1.0.3
|
github.com/gibson042/canonicaljson-go v1.0.3
|
||||||
|
github.com/go-chi/chi/v5 v5.0.7
|
||||||
github.com/gogo/protobuf v1.3.3
|
github.com/gogo/protobuf v1.3.3
|
||||||
github.com/golang/protobuf v1.5.2
|
github.com/golang/protobuf v1.5.2
|
||||||
github.com/gorilla/mux v1.8.0
|
github.com/gorilla/mux v1.8.0
|
||||||
|
2
go.sum
2
go.sum
@ -367,6 +367,8 @@ github.com/gin-gonic/gin v1.7.0/go.mod h1:jD2toBW3GZUr5UMcdrwQA10I7RuaFOl/SGeDjX
|
|||||||
github.com/glycerine/go-unsnap-stream v0.0.0-20180323001048-9f0cb55181dd/go.mod h1:/20jfyN9Y5QPEAprSgKAUr+glWDY39ZiUEAYOEv5dsE=
|
github.com/glycerine/go-unsnap-stream v0.0.0-20180323001048-9f0cb55181dd/go.mod h1:/20jfyN9Y5QPEAprSgKAUr+glWDY39ZiUEAYOEv5dsE=
|
||||||
github.com/glycerine/goconvey v0.0.0-20190410193231-58a59202ab31/go.mod h1:Ogl1Tioa0aV7gstGFO7KhffUsb9M4ydbEbbxpcEDc24=
|
github.com/glycerine/goconvey v0.0.0-20190410193231-58a59202ab31/go.mod h1:Ogl1Tioa0aV7gstGFO7KhffUsb9M4ydbEbbxpcEDc24=
|
||||||
github.com/go-chi/chi/v5 v5.0.0/go.mod h1:BBug9lr0cqtdAhsu6R4AAdvufI0/XBzAQSsUqJpoZOs=
|
github.com/go-chi/chi/v5 v5.0.0/go.mod h1:BBug9lr0cqtdAhsu6R4AAdvufI0/XBzAQSsUqJpoZOs=
|
||||||
|
github.com/go-chi/chi/v5 v5.0.7 h1:rDTPXLDHGATaeHvVlLcR4Qe0zftYethFucbjVQ1PxU8=
|
||||||
|
github.com/go-chi/chi/v5 v5.0.7/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8=
|
||||||
github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
|
github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
|
||||||
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
|
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
|
||||||
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
|
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
|
||||||
|
165
gql/graphiql.go
Normal file
165
gql/graphiql.go
Normal file
@ -0,0 +1,165 @@
|
|||||||
|
package gql
|
||||||
|
|
||||||
|
import (
|
||||||
|
"html/template"
|
||||||
|
"net/http"
|
||||||
|
)
|
||||||
|
|
||||||
|
// GraphiQL is an in-browser IDE for exploring GraphiQL APIs.
|
||||||
|
// This handler returns GraphiQL when requested.
|
||||||
|
//
|
||||||
|
// For more information, see https://github.com/graphql/graphiql.
|
||||||
|
|
||||||
|
func PlaygroundHandler(apiURL string) http.HandlerFunc {
|
||||||
|
return func(w http.ResponseWriter, r *http.Request) {
|
||||||
|
if r.Method != "GET" {
|
||||||
|
http.Error(w, "only GET requests are supported", http.StatusMethodNotAllowed)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
w.Header().Set("Content-Type", "text/html")
|
||||||
|
err := page.Execute(w, map[string]interface{}{
|
||||||
|
"apiURL": apiURL,
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// https://github.com/graphql/graphiql/blob/main/examples/graphiql-cdn/index.html
|
||||||
|
var page = template.Must(template.New("graphiql").Parse(`
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<title>GraphiQL</title>
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
height: 100%;
|
||||||
|
margin: 0;
|
||||||
|
width: 100%;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
#graphiql {
|
||||||
|
height: 100vh;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
This GraphiQL example depends on Promise and fetch, which are available in
|
||||||
|
modern browsers, but can be "polyfilled" for older browsers.
|
||||||
|
GraphiQL itself depends on React DOM.
|
||||||
|
If you do not want to rely on a CDN, you can host these files locally or
|
||||||
|
include them directly in your favored resource bundler.
|
||||||
|
-->
|
||||||
|
<script
|
||||||
|
src="https://unpkg.com/react@17/umd/react.development.js"
|
||||||
|
integrity="sha512-Vf2xGDzpqUOEIKO+X2rgTLWPY+65++WPwCHkX2nFMu9IcstumPsf/uKKRd5prX3wOu8Q0GBylRpsDB26R6ExOg=="
|
||||||
|
crossorigin="anonymous"
|
||||||
|
></script>
|
||||||
|
<script
|
||||||
|
src="https://unpkg.com/react-dom@17/umd/react-dom.development.js"
|
||||||
|
integrity="sha512-Wr9OKCTtq1anK0hq5bY3X/AvDI5EflDSAh0mE9gma+4hl+kXdTJPKZ3TwLMBcrgUeoY0s3dq9JjhCQc7vddtFg=="
|
||||||
|
crossorigin="anonymous"
|
||||||
|
></script>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
These two files can be found in the npm module, however you may wish to
|
||||||
|
copy them directly into your environment, or perhaps include them in your
|
||||||
|
favored resource bundler.
|
||||||
|
-->
|
||||||
|
<link rel="stylesheet" href="https://unpkg.com/graphiql/graphiql.min.css" />
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div id="graphiql">Loading...</div>
|
||||||
|
<script
|
||||||
|
src="https://unpkg.com/graphiql/graphiql.min.js"
|
||||||
|
type="application/javascript"
|
||||||
|
></script>
|
||||||
|
<script>
|
||||||
|
// https://github.com/graphql/graphiql/blob/main/packages/graphiql/resources/renderExample.js
|
||||||
|
|
||||||
|
// Parse the search string to get url parameters.
|
||||||
|
var search = window.location.search;
|
||||||
|
var parameters = {};
|
||||||
|
search
|
||||||
|
.substr(1)
|
||||||
|
.split('&')
|
||||||
|
.forEach(function (entry) {
|
||||||
|
var eq = entry.indexOf('=');
|
||||||
|
if (eq >= 0) {
|
||||||
|
parameters[decodeURIComponent(entry.slice(0, eq))] = decodeURIComponent(
|
||||||
|
entry.slice(eq + 1),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// When the query and variables string is edited, update the URL bar so
|
||||||
|
// that it can be easily shared.
|
||||||
|
function onEditQuery(newQuery) {
|
||||||
|
parameters.query = newQuery;
|
||||||
|
updateURL();
|
||||||
|
}
|
||||||
|
|
||||||
|
function onEditVariables(newVariables) {
|
||||||
|
parameters.variables = newVariables;
|
||||||
|
updateURL();
|
||||||
|
}
|
||||||
|
|
||||||
|
function onEditHeaders(newHeaders) {
|
||||||
|
parameters.headers = newHeaders;
|
||||||
|
updateURL();
|
||||||
|
}
|
||||||
|
|
||||||
|
function onTabChange(tabsState) {
|
||||||
|
const activeTab = tabsState.tabs[tabsState.activeTabIndex];
|
||||||
|
parameters.query = activeTab.query;
|
||||||
|
parameters.variables = activeTab.variables;
|
||||||
|
parameters.headers = activeTab.headers;
|
||||||
|
updateURL();
|
||||||
|
}
|
||||||
|
|
||||||
|
function updateURL() {
|
||||||
|
var newSearch =
|
||||||
|
'?' +
|
||||||
|
Object.keys(parameters)
|
||||||
|
.filter(function (key) {
|
||||||
|
return Boolean(parameters[key]);
|
||||||
|
})
|
||||||
|
.map(function (key) {
|
||||||
|
return (
|
||||||
|
encodeURIComponent(key) + '=' + encodeURIComponent(parameters[key])
|
||||||
|
);
|
||||||
|
})
|
||||||
|
.join('&');
|
||||||
|
history.replaceState(null, null, newSearch);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Render <GraphiQL /> into the body.
|
||||||
|
// See the README in the top level of this module to learn more about
|
||||||
|
// how you can customize GraphiQL by providing different values or
|
||||||
|
// additional child elements.
|
||||||
|
ReactDOM.render(
|
||||||
|
React.createElement(GraphiQL, {
|
||||||
|
fetcher: GraphiQL.createFetcher({
|
||||||
|
url: {{.apiURL}}
|
||||||
|
}),
|
||||||
|
query: parameters.query,
|
||||||
|
variables: parameters.variables,
|
||||||
|
headers: parameters.headers,
|
||||||
|
defaultHeaders: parameters.defaultHeaders,
|
||||||
|
onEditQuery: onEditQuery,
|
||||||
|
onEditVariables: onEditVariables,
|
||||||
|
onEditHeaders: onEditHeaders,
|
||||||
|
defaultEditorToolsVisibility: true,
|
||||||
|
isHeadersEditorEnabled: true,
|
||||||
|
shouldPersistHeaders: true,
|
||||||
|
onTabChange,
|
||||||
|
}),
|
||||||
|
document.getElementById('graphiql'),
|
||||||
|
);
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
`))
|
@ -5,9 +5,10 @@ import (
|
|||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
"github.com/99designs/gqlgen/graphql/handler"
|
"github.com/99designs/gqlgen/graphql/handler"
|
||||||
"github.com/99designs/gqlgen/graphql/playground"
|
|
||||||
"github.com/cosmos/cosmos-sdk/client"
|
"github.com/cosmos/cosmos-sdk/client"
|
||||||
"github.com/ethereum/go-ethereum/log"
|
"github.com/ethereum/go-ethereum/log"
|
||||||
|
"github.com/go-chi/chi/v5"
|
||||||
|
"github.com/rs/cors"
|
||||||
"github.com/spf13/viper"
|
"github.com/spf13/viper"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -16,6 +17,16 @@ func Server(ctx client.Context) {
|
|||||||
if !viper.GetBool("gql-server") {
|
if !viper.GetBool("gql-server") {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
router := chi.NewRouter()
|
||||||
|
|
||||||
|
// Add CORS middleware around every request
|
||||||
|
// See https://github.com/rs/cors for full option listing
|
||||||
|
router.Use(cors.New(cors.Options{
|
||||||
|
AllowedOrigins: []string{"*"},
|
||||||
|
Debug: false,
|
||||||
|
}).Handler)
|
||||||
|
|
||||||
logFile := viper.GetString("log-file")
|
logFile := viper.GetString("log-file")
|
||||||
|
|
||||||
port := viper.GetString("gql-port")
|
port := viper.GetString("gql-port")
|
||||||
@ -25,20 +36,20 @@ func Server(ctx client.Context) {
|
|||||||
logFile: logFile,
|
logFile: logFile,
|
||||||
}}))
|
}}))
|
||||||
|
|
||||||
http.Handle("/", playground.Handler("GraphQL playground", "/api"))
|
router.Handle("/", PlaygroundHandler("/api"))
|
||||||
|
|
||||||
if viper.GetBool("gql-playground") {
|
if viper.GetBool("gql-playground") {
|
||||||
apiBase := viper.GetString("gql-playground-api-base")
|
apiBase := viper.GetString("gql-playground-api-base")
|
||||||
|
|
||||||
http.Handle("/webui", playground.Handler("GraphQL playground", apiBase+"/api"))
|
router.Handle("/webui", PlaygroundHandler(apiBase+"/api"))
|
||||||
http.Handle("/console", playground.Handler("GraphQL playground", apiBase+"/graphql"))
|
router.Handle("/console", PlaygroundHandler(apiBase+"/graphql"))
|
||||||
}
|
}
|
||||||
|
|
||||||
http.Handle("/api", srv)
|
router.Handle("/api", srv)
|
||||||
http.Handle("/graphql", srv)
|
router.Handle("/graphql", srv)
|
||||||
|
|
||||||
log.Info("Connect to GraphQL playground", "url", fmt.Sprintf("http://localhost:%s", port))
|
log.Info("Connect to GraphQL playground", "url", fmt.Sprintf("http://localhost:%s", port))
|
||||||
err := http.ListenAndServe(":"+port, nil) //nolint: all
|
err := http.ListenAndServe(":"+port, router) //nolint: all
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
2
init.bat
2
init.bat
@ -9,7 +9,7 @@ rem 3. add path C:\msys64\mingw64\bin
|
|||||||
rem C:\msys64\usr\bin
|
rem C:\msys64\usr\bin
|
||||||
|
|
||||||
set KEY="mykey"
|
set KEY="mykey"
|
||||||
set CHAINID="ethermint_9000-1"
|
set CHAINID="laconic_9000-1"
|
||||||
set MONIKER="localtestnet"
|
set MONIKER="localtestnet"
|
||||||
set KEYRING="test"
|
set KEYRING="test"
|
||||||
set KEYALGO="eth_secp256k1"
|
set KEYALGO="eth_secp256k1"
|
||||||
|
2
init.sh
2
init.sh
@ -1,7 +1,7 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
KEY="mykey"
|
KEY="mykey"
|
||||||
CHAINID="laconic_2345678-1"
|
CHAINID="laconic_9000-1"
|
||||||
MONIKER="localtestnet"
|
MONIKER="localtestnet"
|
||||||
KEYRING="test"
|
KEYRING="test"
|
||||||
KEYALGO="eth_secp256k1"
|
KEYALGO="eth_secp256k1"
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
dotenv: .env
|
dotenv: .env
|
||||||
ethermint_9000-1:
|
laconic_9000-1:
|
||||||
cmd: laconicd
|
cmd: laconicd
|
||||||
start-flags: "--trace"
|
start-flags: "--trace"
|
||||||
app-config:
|
app-config:
|
||||||
|
@ -15,7 +15,7 @@ IP_ADDR="0.0.0.0"
|
|||||||
MODE="rpc"
|
MODE="rpc"
|
||||||
|
|
||||||
KEY="mykey"
|
KEY="mykey"
|
||||||
CHAINID="ethermint_9000-1"
|
CHAINID="laconic_9000-1"
|
||||||
MONIKER="mymoniker"
|
MONIKER="mymoniker"
|
||||||
|
|
||||||
## default port prefixes for laconicd
|
## default port prefixes for laconicd
|
||||||
@ -47,14 +47,14 @@ done
|
|||||||
|
|
||||||
set -euxo pipefail
|
set -euxo pipefail
|
||||||
|
|
||||||
DATA_DIR=$(mktemp -d -t ethermint_9000-datadir.XXXXX)
|
DATA_DIR=$(mktemp -d -t laconic_9000-datadir.XXXXX)
|
||||||
|
|
||||||
if [[ ! "$DATA_DIR" ]]; then
|
if [[ ! "$DATA_DIR" ]]; then
|
||||||
echo "Could not create $DATA_DIR"
|
echo "Could not create $DATA_DIR"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
DATA_CLI_DIR=$(mktemp -d -t ethermint_9000-cli-datadir.XXXXX)
|
DATA_CLI_DIR=$(mktemp -d -t laconic_9000-cli-datadir.XXXXX)
|
||||||
|
|
||||||
if [[ ! "$DATA_CLI_DIR" ]]; then
|
if [[ ! "$DATA_CLI_DIR" ]]; then
|
||||||
echo "Could not create $DATA_CLI_DIR"
|
echo "Could not create $DATA_CLI_DIR"
|
||||||
|
@ -24,7 +24,7 @@ init:
|
|||||||
address: "0.0.0.0:8545" # change the JSON-RPC address and port
|
address: "0.0.0.0:8545" # change the JSON-RPC address and port
|
||||||
ws-address: "0.0.0.0:8546" # change the JSON-RPC websocket address and port
|
ws-address: "0.0.0.0:8546" # change the JSON-RPC websocket address and port
|
||||||
genesis:
|
genesis:
|
||||||
chain_id: "ethermint_9000-1"
|
chain_id: "laconic_9000-1"
|
||||||
app_state:
|
app_state:
|
||||||
staking:
|
staking:
|
||||||
params:
|
params:
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
# Validator Guide for laconic_81337-5 Testnet
|
# Validator Guide for laconic_81337-6 Testnet
|
||||||
|
|
||||||
## Hardware Prerequisites
|
## Hardware Prerequisites
|
||||||
|
|
||||||
@ -48,8 +48,8 @@ sudo apt install git curl build-essential make jq -y
|
|||||||
# Remove any existing installation of `go`
|
# Remove any existing installation of `go`
|
||||||
sudo rm -rf /usr/local/go
|
sudo rm -rf /usr/local/go
|
||||||
|
|
||||||
# Install Go version 1.18.8
|
# Install Go version 1.19.7
|
||||||
curl https://dl.google.com/go/go1.18.8.linux-amd64.tar.gz | sudo tar -C/usr/local -zxvf -
|
curl https://dl.google.com/go/go1.19.7.linux-amd64.tar.gz | sudo tar -C/usr/local -zxvf -
|
||||||
|
|
||||||
# Update env variables to include go
|
# Update env variables to include go
|
||||||
cat <<'EOF' >>$HOME/.profile
|
cat <<'EOF' >>$HOME/.profile
|
||||||
@ -67,7 +67,7 @@ Check the version of go installed
|
|||||||
```sh
|
```sh
|
||||||
go version
|
go version
|
||||||
|
|
||||||
# Should return something like: go version go1.17.2 linux/amd64
|
# Should return something like: go version go1.19.7 linux/amd64
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
@ -80,16 +80,17 @@ cd laconicd
|
|||||||
|
|
||||||
# Checkout main branch
|
# Checkout main branch
|
||||||
git fetch --all
|
git fetch --all
|
||||||
git checkout v0.6.0
|
git checkout v0.8.0
|
||||||
|
|
||||||
# Build and install laconic
|
# Build and install laconic
|
||||||
make install
|
make VERSION=v0.8.0 install
|
||||||
```
|
```
|
||||||
|
|
||||||
Verify your installation
|
Verify your installation
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
laconicd version --long
|
laconicd version --long
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
On running the above command, you should see a similar response like this. Make sure that the _version_ and _commit
|
On running the above command, you should see a similar response like this. Make sure that the _version_ and _commit
|
||||||
@ -122,13 +123,13 @@ Make sure the directory `~/.laconicd` does not exist or is empty
|
|||||||
>In order to run the below commands in a docker container:
|
>In order to run the below commands in a docker container:
|
||||||
>```sh
|
>```sh
|
||||||
>docker run -ti -v ~/.laconicd:/root/.laconicd \
|
>docker run -ti -v ~/.laconicd:/root/.laconicd \
|
||||||
>git.vdb.to/cerc-io/laconicd/laconicd:v0.6.0 /bin/sh
|
>git.vdb.to/cerc-io/laconicd/laconicd:v0.8.0 /bin/sh
|
||||||
>```
|
>```
|
||||||
---
|
---
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
# Initialize the validator node
|
# Initialize the validator node
|
||||||
laconicd init <your-node-moniker> --chain-id laconic_81337-5
|
laconicd init <your-node-moniker> --chain-id laconic_81337-6
|
||||||
```
|
```
|
||||||
|
|
||||||
Running the above commands will initialize the validator node with default configuration. The config files will be saved in the default location (`~/.laconicd/config`).
|
Running the above commands will initialize the validator node with default configuration. The config files will be saved in the default location (`~/.laconicd/config`).
|
||||||
@ -168,7 +169,7 @@ Create Your `gentx` transaction file
|
|||||||
```sh
|
```sh
|
||||||
laconicd gentx <key-name> 12900000000000000000000achk \
|
laconicd gentx <key-name> 12900000000000000000000achk \
|
||||||
--pubkey=$(laconicd tendermint show-validator) \
|
--pubkey=$(laconicd tendermint show-validator) \
|
||||||
--chain-id="laconic_81337-5" \
|
--chain-id="laconic_81337-6" \
|
||||||
--moniker="<your-moniker-name>" \
|
--moniker="<your-moniker-name>" \
|
||||||
--website="<your-validator-website>" \
|
--website="<your-validator-website>" \
|
||||||
--details="<your-validator-description>" \
|
--details="<your-validator-description>" \
|
||||||
@ -198,10 +199,10 @@ Submit your `gentx` file to the [https://github.com/cerc-io/laconic-testnet](htt
|
|||||||
To submit the gentx file, follow the below process:
|
To submit the gentx file, follow the below process:
|
||||||
|
|
||||||
- Fork the [https://github.com/cerc-io/laconic-testnet](https://github.com/cerc-io/laconic-testnet) repository
|
- Fork the [https://github.com/cerc-io/laconic-testnet](https://github.com/cerc-io/laconic-testnet) repository
|
||||||
- Upload your gentx file in the `laconic_81337-5/config/gentxs` folder
|
- Upload your gentx file in the `laconic_81337-6/config/gentxs` folder
|
||||||
- Submit Pull Request to [https://github.com/cerc-io/laconic-testnet](https://github.com/cerc-io/laconic-testnet) with name `ADD <your-moniker> gentx`
|
- Submit Pull Request to [https://github.com/cerc-io/laconic-testnet](https://github.com/cerc-io/laconic-testnet) with name `ADD <your-moniker> gentx`
|
||||||
|
|
||||||
The genesis file will be published in the `laconic_81337-5/config/` folder within the [https://github.com/cerc-io/laconic-testnet](https://github.com/cerc-io/laconic-testnet) repository.
|
The genesis file will be published in the `laconic_81337-6/config/` folder within the [https://github.com/cerc-io/laconic-testnet](https://github.com/cerc-io/laconic-testnet) repository.
|
||||||
|
|
||||||
# CONTINUE WITH BELOW STEPS ONLY AFTER GENESIS FILE HAS BEEN PUBLISHED
|
# CONTINUE WITH BELOW STEPS ONLY AFTER GENESIS FILE HAS BEEN PUBLISHED
|
||||||
|
|
||||||
@ -271,25 +272,33 @@ journalctl -f -u laconicd
|
|||||||
In this example the Tendermint RPC and Prometheus metrics ports are exposed only to localhost. You may want to change 127.0.0.1 to private or public network interface of your host if you need to access these ports remotely.
|
In this example the Tendermint RPC and Prometheus metrics ports are exposed only to localhost. You may want to change 127.0.0.1 to private or public network interface of your host if you need to access these ports remotely.
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
docker create --name laconic-testnet-5 -v ~/.laconicd:/root/.laconicd -p 26656:26656 -p 127.0.0.1:26657:26657 -p 127.0.0.1:26660:26660 git.vdb.to/cerc-io/laconicd/laconicd:v0.6.0 laconicd start --gql-playground --gql-server --log_level=warn
|
docker create \
|
||||||
|
--name laconic-testnet-6 \
|
||||||
|
--restart always \
|
||||||
|
-v ~/.laconicd:/root/.laconicd \
|
||||||
|
-p 26656:26656 \
|
||||||
|
-p 127.0.0.1:26657:26657 \
|
||||||
|
-p 127.0.0.1:26660:26660 \
|
||||||
|
git.vdb.to/cerc-io/laconicd/laconicd:v0.8.0 \
|
||||||
|
laconicd start --gql-playground --gql-server --log_level=warn
|
||||||
```
|
```
|
||||||
|
|
||||||
### Run validator node
|
### Run validator node
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
docker start laconic-testnet-5
|
docker start laconic-testnet-6
|
||||||
```
|
```
|
||||||
|
|
||||||
### Check validator node logs
|
### Check validator node logs
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
docker logs laconic-testnet-5
|
docker logs laconic-testnet-6
|
||||||
```
|
```
|
||||||
|
|
||||||
### Run shell inside docker container
|
### Run shell inside docker container
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
docker exec -ti laconic-testnet-5 /bin/sh
|
docker exec -ti laconic-testnet-6 /bin/sh
|
||||||
```
|
```
|
||||||
---
|
---
|
||||||
## Helpful commands
|
## Helpful commands
|
||||||
|
178
testnet/validator upgrade 0.6.0 - 0.7.0.md
Normal file
178
testnet/validator upgrade 0.6.0 - 0.7.0.md
Normal file
@ -0,0 +1,178 @@
|
|||||||
|
# Validator Upgrade Guide for laconic_81337-5 Testnet v0.6.0 -> v0.7.0
|
||||||
|
|
||||||
|
This guide assumes you have followed the instructions to crete a systemd service or docker container validator node v0.6.0 and you perform the upgrade on a machine running v0.6.0
|
||||||
|
|
||||||
|
It is highly recommended to make the backup of your datadir after you stop v0.6.0 and before you start v0.7.0. Unless you changed your datadir, it should be located in `~/.laconicd`
|
||||||
|
|
||||||
|
## Systemd service
|
||||||
|
Skip this section if you use docker
|
||||||
|
|
||||||
|
This is very similar to building v0.6.0. We keep v 0.6.0 running until v0.7.0 is built and only after the successful build we should replace 0.6.0 binary with v0.7.0. This is to avoid jailing your validator for long downtime.
|
||||||
|
The general upgrade plan is the following:
|
||||||
|
1. Install Go v1.19.5 (we used 1.18 for v0.6.0)
|
||||||
|
2. Remove old copy of the github repository and build directory
|
||||||
|
3. Download the latest laconicd repository and checkout v0.7.0
|
||||||
|
4. Build laconicd binary (but not install in this moment)
|
||||||
|
5. Stop laconicd systemd service
|
||||||
|
6. Install recently built new version of laconicd
|
||||||
|
7. Start laconicd service
|
||||||
|
|
||||||
|
>***You have ~10 minutes after step 5 to complete steps 6 and 7 before your validator is jailed for downtime. Getting jailed for downtime is not a disaster, however would require manual unjailing.***
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
### Install Go 1.19
|
||||||
|
|
||||||
|
```sh
|
||||||
|
# Update Ubuntu
|
||||||
|
sudo apt update
|
||||||
|
sudo apt upgrade -y
|
||||||
|
|
||||||
|
# Install required software packages
|
||||||
|
sudo apt install git curl build-essential make jq -y
|
||||||
|
|
||||||
|
# Remove any existing installation of `go`
|
||||||
|
sudo rm -rf /usr/local/go
|
||||||
|
|
||||||
|
# Install Go version 1.19.5
|
||||||
|
curl https://dl.google.com/go/go1.19.5.linux-amd64.tar.gz | sudo tar -C/usr/local -zxvf -
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
Check the version of go installed
|
||||||
|
|
||||||
|
```sh
|
||||||
|
go version
|
||||||
|
|
||||||
|
# Should return something like: go version go1.19.5 linux/amd64
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Remove old copy of `laconicd` build
|
||||||
|
|
||||||
|
>Attention should be paid that the directory mentioned below is `~/laconicd` and NOT `~/.laconicd`. The latter is the data directory containing all your node data and configuration and it must be kept during the upgrade.
|
||||||
|
|
||||||
|
```sh
|
||||||
|
# Remove the previous build directory
|
||||||
|
cd ~
|
||||||
|
rm -rf laconicd
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Download `laconicd` repository
|
||||||
|
```sh
|
||||||
|
git clone https://github.com/cerc-io/laconicd.git
|
||||||
|
cd laconicd
|
||||||
|
|
||||||
|
# Checkout 0.7.0 branch
|
||||||
|
git fetch --all
|
||||||
|
git checkout v0.7.0
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Build the new version of `laconicd`
|
||||||
|
|
||||||
|
```sh
|
||||||
|
# Build laconic (but not install at this moment)
|
||||||
|
make VERSION=v0.7.0 build
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Stop `laconicd` systemd service
|
||||||
|
|
||||||
|
```sh
|
||||||
|
sudo systemctl stop laconicd
|
||||||
|
```
|
||||||
|
|
||||||
|
>***Make sure the service is stopped***
|
||||||
|
|
||||||
|
```sh
|
||||||
|
sudo systemctl status laconicd
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Install new `laconicd` version
|
||||||
|
|
||||||
|
```sh
|
||||||
|
make VERSION=v0.7.0 install
|
||||||
|
```
|
||||||
|
|
||||||
|
Verify your installation
|
||||||
|
|
||||||
|
```sh
|
||||||
|
laconicd version
|
||||||
|
```
|
||||||
|
This should return `0.7.0`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Start `laconicd` systemd service
|
||||||
|
|
||||||
|
```sh
|
||||||
|
sudo systemctl start laconicd
|
||||||
|
```
|
||||||
|
|
||||||
|
Verify that the node joined the network and produces new blocks
|
||||||
|
|
||||||
|
```sh
|
||||||
|
journalctl -f -u laconicd
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Docker container
|
||||||
|
|
||||||
|
Upgrade plan:
|
||||||
|
1. Stop running v0.6.0 container
|
||||||
|
2. Delete v0.6.0 container
|
||||||
|
3. Create v0.7.0 container
|
||||||
|
4. Start v0.7.0 container
|
||||||
|
|
||||||
|
>***You have ~10 minutes to complete the upgrade procedure before your validator is jailed for downtime. Getting jailed for downtime is not a disaster, however would require manual unjailing.***
|
||||||
|
|
||||||
|
### Stop running v0.6.0 container
|
||||||
|
```sh
|
||||||
|
docker stop laconic-testnet-5
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Delete v0.6.0 container
|
||||||
|
```sh
|
||||||
|
docker rm laconic-testnet-5
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Create v0.7.0 container
|
||||||
|
```sh
|
||||||
|
docker create --name laconic-testnet-5 \
|
||||||
|
--restart always \
|
||||||
|
-v ~/.laconicd:/root/.laconicd \
|
||||||
|
-p 26656:26656 \
|
||||||
|
-p 127.0.0.1:26657:26657 \
|
||||||
|
-p 127.0.0.1:26660:26660 \
|
||||||
|
git.vdb.to/cerc-io/laconicd/laconicd:v0.7.0 \
|
||||||
|
laconicd start --gql-playground --gql-server --log_level=warn
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Start v0.7.0 container
|
||||||
|
```sh
|
||||||
|
docker start laconic-testnet-5
|
||||||
|
```
|
||||||
|
|
||||||
|
Verify that the node joined the network and produces new blocks
|
||||||
|
|
||||||
|
```sh
|
||||||
|
docker logs -f laconic-testnet-5
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
31
tests/sdk_tests/docker-compose-auctions.yml
Normal file
31
tests/sdk_tests/docker-compose-auctions.yml
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
services:
|
||||||
|
laconicd:
|
||||||
|
restart: unless-stopped
|
||||||
|
image: cerc-io/laconicd:local-test
|
||||||
|
environment:
|
||||||
|
- TEST_AUCTION_ENABLED=true
|
||||||
|
command: ["sh", "/docker-entrypoint-scripts.d/create-fixturenet.sh"]
|
||||||
|
volumes:
|
||||||
|
- ../../init.sh:/docker-entrypoint-scripts.d/create-fixturenet.sh
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD", "curl", "-v", "http://127.0.0.1:6060"]
|
||||||
|
interval: 1s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 30
|
||||||
|
ports:
|
||||||
|
- "6060"
|
||||||
|
- "26657"
|
||||||
|
- "26656"
|
||||||
|
- "9473"
|
||||||
|
- "8545"
|
||||||
|
- "8546"
|
||||||
|
- "9090"
|
||||||
|
- "9091"
|
||||||
|
- "1317"
|
||||||
|
|
||||||
|
sdk-test-runner:
|
||||||
|
image: cerc-io/laconic-sdk-tester:local-test
|
||||||
|
depends_on:
|
||||||
|
laconicd:
|
||||||
|
condition: service_healthy
|
||||||
|
command: tail -F /dev/null
|
31
tests/sdk_tests/docker-compose-nameservice.yml
Normal file
31
tests/sdk_tests/docker-compose-nameservice.yml
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
services:
|
||||||
|
laconicd:
|
||||||
|
restart: unless-stopped
|
||||||
|
image: cerc-io/laconicd:local-test
|
||||||
|
environment:
|
||||||
|
- TEST_REGISTRY_EXPIRY=true
|
||||||
|
command: ["sh", "/docker-entrypoint-scripts.d/create-fixturenet.sh"]
|
||||||
|
volumes:
|
||||||
|
- ../../init.sh:/docker-entrypoint-scripts.d/create-fixturenet.sh
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD", "curl", "-v", "http://127.0.0.1:6060"]
|
||||||
|
interval: 1s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 30
|
||||||
|
ports:
|
||||||
|
- "6060"
|
||||||
|
- "26657"
|
||||||
|
- "26656"
|
||||||
|
- "9473"
|
||||||
|
- "8545"
|
||||||
|
- "8546"
|
||||||
|
- "9090"
|
||||||
|
- "9091"
|
||||||
|
- "1317"
|
||||||
|
|
||||||
|
sdk-test-runner:
|
||||||
|
image: cerc-io/laconic-sdk-tester:local-test
|
||||||
|
depends_on:
|
||||||
|
laconicd:
|
||||||
|
condition: service_healthy
|
||||||
|
command: tail -F /dev/null
|
@ -6,7 +6,7 @@ services:
|
|||||||
volumes:
|
volumes:
|
||||||
- ../../init.sh:/docker-entrypoint-scripts.d/create-fixturenet.sh
|
- ../../init.sh:/docker-entrypoint-scripts.d/create-fixturenet.sh
|
||||||
healthcheck:
|
healthcheck:
|
||||||
test: ["CMD", "wget", "-nv", "-t1", "--spider", "http://localhost:6060"]
|
test: ["CMD", "curl", "-v", "http://127.0.0.1:6060"]
|
||||||
interval: 1s
|
interval: 1s
|
||||||
timeout: 5s
|
timeout: 5s
|
||||||
retries: 30
|
retries: 30
|
||||||
|
16
tests/sdk_tests/run-auction-tests.sh
Executable file
16
tests/sdk_tests/run-auction-tests.sh
Executable file
@ -0,0 +1,16 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
if [ -n "$CERC_SCRIPT_DEBUG" ]; then
|
||||||
|
set -x
|
||||||
|
fi
|
||||||
|
# Get the key from laconicd
|
||||||
|
laconicd_key=$( docker compose exec laconicd echo y | docker compose exec laconicd laconicd keys export mykey --unarmored-hex --unsafe )
|
||||||
|
# Set parameters for the test suite
|
||||||
|
cosmos_chain_id=laconic_9000-1
|
||||||
|
laconicd_rest_endpoint=http://laconicd:1317
|
||||||
|
laconicd_gql_endpoint=http://laconicd:9473/api
|
||||||
|
# Run tests
|
||||||
|
docker network inspect sdk_tests_default
|
||||||
|
sleep 30s
|
||||||
|
docker logs sdk_tests-laconicd-1
|
||||||
|
|
||||||
|
docker compose exec sdk-test-runner sh -c "COSMOS_CHAIN_ID=${cosmos_chain_id} LACONICD_REST_ENDPOINT=${laconicd_rest_endpoint} LACONICD_GQL_ENDPOINT=${laconicd_gql_endpoint} PRIVATE_KEY=${laconicd_key} yarn test:auctions"
|
16
tests/sdk_tests/run-nameservice-expiry-tests.sh
Executable file
16
tests/sdk_tests/run-nameservice-expiry-tests.sh
Executable file
@ -0,0 +1,16 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
if [ -n "$CERC_SCRIPT_DEBUG" ]; then
|
||||||
|
set -x
|
||||||
|
fi
|
||||||
|
# Get the key from laconicd
|
||||||
|
laconicd_key=$( docker compose exec laconicd echo y | docker compose exec laconicd laconicd keys export mykey --unarmored-hex --unsafe )
|
||||||
|
# Set parameters for the test suite
|
||||||
|
cosmos_chain_id=laconic_9000-1
|
||||||
|
laconicd_rest_endpoint=http://laconicd:1317
|
||||||
|
laconicd_gql_endpoint=http://laconicd:9473/api
|
||||||
|
# Run tests
|
||||||
|
docker network inspect sdk_tests_default
|
||||||
|
sleep 30s
|
||||||
|
docker logs sdk_tests-laconicd-1
|
||||||
|
|
||||||
|
docker compose exec sdk-test-runner sh -c "COSMOS_CHAIN_ID=${cosmos_chain_id} LACONICD_REST_ENDPOINT=${laconicd_rest_endpoint} LACONICD_GQL_ENDPOINT=${laconicd_gql_endpoint} PRIVATE_KEY=${laconicd_key} yarn test:nameservice-expiry"
|
@ -3,10 +3,16 @@ if [ -n "$CERC_SCRIPT_DEBUG" ]; then
|
|||||||
set -x
|
set -x
|
||||||
fi
|
fi
|
||||||
# Get the key from laconicd
|
# Get the key from laconicd
|
||||||
laconicd_key=$( docker compose exec laconicd echo y | laconicd keys export mykey --unarmored-hex --unsafe )
|
laconicd_key=$( docker compose exec laconicd echo y | docker compose exec laconicd laconicd keys export mykey --unarmored-hex --unsafe )
|
||||||
# Set parameters for the test suite
|
# Set parameters for the test suite
|
||||||
cosmos_chain_id=laconic_9000-1
|
cosmos_chain_id=laconic_9000-1
|
||||||
laconicd_rest_endpoint=http://laconicd:1317
|
laconicd_rest_endpoint=http://laconicd:1317
|
||||||
laconicd_gql_endpoint=http://laconicd:9473/api
|
laconicd_gql_endpoint=http://laconicd:9473/api
|
||||||
# Run tests
|
# Run tests
|
||||||
|
docker network inspect sdk_tests_default
|
||||||
|
sleep 30s
|
||||||
|
docker logs laconicd
|
||||||
|
docker compose exec laconicd sh -c "curl http://127.0.0.1:9473/api"
|
||||||
|
docker compose exec laconicd sh -c "curl http://localhost:9473/api"
|
||||||
|
|
||||||
docker compose exec sdk-test-runner sh -c "COSMOS_CHAIN_ID=${cosmos_chain_id} LACONICD_REST_ENDPOINT=${laconicd_rest_endpoint} LACONICD_GQL_ENDPOINT=${laconicd_gql_endpoint} PRIVATE_KEY=${laconicd_key} yarn test"
|
docker compose exec sdk-test-runner sh -c "COSMOS_CHAIN_ID=${cosmos_chain_id} LACONICD_REST_ENDPOINT=${laconicd_rest_endpoint} LACONICD_GQL_ENDPOINT=${laconicd_gql_endpoint} PRIVATE_KEY=${laconicd_key} yarn test"
|
||||||
|
@ -8,17 +8,16 @@ import (
|
|||||||
"bytes"
|
"bytes"
|
||||||
"errors"
|
"errors"
|
||||||
|
|
||||||
"github.com/ipld/go-ipld-prime/codec/dagcbor"
|
|
||||||
"github.com/ipld/go-ipld-prime/fluent"
|
|
||||||
"github.com/ipld/go-ipld-prime/linking"
|
|
||||||
cidlink "github.com/ipld/go-ipld-prime/linking/cid"
|
|
||||||
"github.com/ipld/go-ipld-prime/multicodec"
|
|
||||||
"github.com/ipld/go-ipld-prime/storage/memstore"
|
|
||||||
|
|
||||||
canonicalJson "github.com/gibson042/canonicaljson-go"
|
canonicalJson "github.com/gibson042/canonicaljson-go"
|
||||||
"github.com/ipfs/go-cid"
|
"github.com/ipfs/go-cid"
|
||||||
cbor "github.com/ipfs/go-ipld-cbor"
|
cbor "github.com/ipfs/go-ipld-cbor"
|
||||||
|
"github.com/ipld/go-ipld-prime/codec/dagcbor"
|
||||||
|
"github.com/ipld/go-ipld-prime/codec/dagjson"
|
||||||
|
"github.com/ipld/go-ipld-prime/linking"
|
||||||
|
cidlink "github.com/ipld/go-ipld-prime/linking/cid"
|
||||||
|
"github.com/ipld/go-ipld-prime/multicodec"
|
||||||
basicnode "github.com/ipld/go-ipld-prime/node/basic"
|
basicnode "github.com/ipld/go-ipld-prime/node/basic"
|
||||||
|
"github.com/ipld/go-ipld-prime/storage/memstore"
|
||||||
mh "github.com/multiformats/go-multihash"
|
mh "github.com/multiformats/go-multihash"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -68,7 +67,17 @@ func GetAttributeAsString(obj map[string]interface{}, attr string) (string, erro
|
|||||||
}
|
}
|
||||||
|
|
||||||
// CIDFromJSONBytesUsingIpldPrime returns CID (dagcbor) for json (as bytes).
|
// CIDFromJSONBytesUsingIpldPrime returns CID (dagcbor) for json (as bytes).
|
||||||
|
// This is combination of samples for unmarshalling and linking
|
||||||
|
// see: https://pkg.go.dev/github.com/ipld/go-ipld-prime
|
||||||
func CIDFromJSONBytesUsingIpldPrime(content []byte) (string, error) {
|
func CIDFromJSONBytesUsingIpldPrime(content []byte) (string, error) {
|
||||||
|
np := basicnode.Prototype.Any // Pick a stle for the in-memory data.
|
||||||
|
nb := np.NewBuilder() // Create a builder.
|
||||||
|
err := dagjson.Decode(nb, bytes.NewReader(content)) // Hand the builder to decoding -- decoding will fill it in!
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
n := nb.Build() // Call 'Build' to get the resulting Node. (It's immutable!)
|
||||||
|
|
||||||
lsys := cidlink.DefaultLinkSystem()
|
lsys := cidlink.DefaultLinkSystem()
|
||||||
|
|
||||||
// We want to store the serialized data somewhere.
|
// We want to store the serialized data somewhere.
|
||||||
@ -87,14 +96,6 @@ func CIDFromJSONBytesUsingIpldPrime(content []byte) (string, error) {
|
|||||||
MhLength: 32, // sha2-256 hash has a 32-byte sum.
|
MhLength: 32, // sha2-256 hash has a 32-byte sum.
|
||||||
}}
|
}}
|
||||||
|
|
||||||
// And we need some data to link to! Here's a quick piece of example data:
|
|
||||||
n, err := fluent.Build(basicnode.Prototype.Any, func(na fluent.NodeAssembler) {
|
|
||||||
na.AssignBytes(content)
|
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
return "", err
|
|
||||||
}
|
|
||||||
|
|
||||||
// Now: time to apply the LinkSystem, and do the actual store operation!
|
// Now: time to apply the LinkSystem, and do the actual store operation!
|
||||||
lnk, err := lsys.Store(
|
lnk, err := lsys.Store(
|
||||||
linking.LinkContext{}, // The zero value is fine. Configure it it you want cancellability or other features.
|
linking.LinkContext{}, // The zero value is fine. Configure it it you want cancellability or other features.
|
||||||
|
35
utils/json_test.go
Normal file
35
utils/json_test.go
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
package utils
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestAndValidateCIDGeneration(t *testing.T) {
|
||||||
|
testCases := []struct {
|
||||||
|
name string
|
||||||
|
content string
|
||||||
|
expected string
|
||||||
|
}{
|
||||||
|
// empty string and empty json blows up
|
||||||
|
// {
|
||||||
|
// "empty string", "", "bafyreiengp2sbi6ez34a2jctv34bwyjl7yoliteleaswgcwtqzrhmpyt2m",
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// "empty json", "{}", "bafyreihpfkdvib5muloxlj5b3tgdwibjdcu3zdsuhyft33z7gtgnlzlkpm",
|
||||||
|
// },
|
||||||
|
|
||||||
|
{
|
||||||
|
"test record", "{\"build_artifact_cid\":\"QmP8jTG1m9GSDJLCbeWhVSVgEzCPPwXRdCRuJtQ5Tz9Kc9\",\"repo_registration_record_cid\":\"QmSnuWmxptJZdLJpKRarxBMS2Ju2oANVrgbr2xWbie9b2D\",\"tls_cert_cid\":\"QmbWqxBEKC3P8tqsKc98xmWNzrzDtRLMiMPL8wBuTGsMnR\",\"type\":\"WebsiteRegistrationRecord\",\"url\":\"https://cerc.io\",\"version\":\"0.0.1\"}",
|
||||||
|
"bafyreiek4hnoqmits66bjyxswapplweuoqe4en2ux6u772o4y3askpd3ny",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, tc := range testCases {
|
||||||
|
deprecatedAndCorrect, _ := CIDFromJSONBytes([]byte(tc.content))
|
||||||
|
newImpl, err := CIDFromJSONBytesUsingIpldPrime([]byte(tc.content))
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.Equal(t, deprecatedAndCorrect, newImpl, tc.name)
|
||||||
|
require.Equal(t, tc.expected, newImpl)
|
||||||
|
}
|
||||||
|
}
|
@ -20,7 +20,7 @@ The following steps need to be followed only before running the chain for the fi
|
|||||||
Keep a note of the keyring passphrase if you set it.
|
Keep a note of the keyring passphrase if you set it.
|
||||||
2. Init the chain:
|
2. Init the chain:
|
||||||
```
|
```
|
||||||
./build/laconicd init test-moniker --chain-id ethermint_9000-1
|
./build/laconicd init test-moniker --chain-id laconic_9000-1
|
||||||
```
|
```
|
||||||
3. Add genesis account:
|
3. Add genesis account:
|
||||||
```
|
```
|
||||||
@ -28,7 +28,7 @@ The following steps need to be followed only before running the chain for the fi
|
|||||||
```
|
```
|
||||||
4. Make a genesis tx:
|
4. Make a genesis tx:
|
||||||
```
|
```
|
||||||
./build/laconicd gentx root 1000000000000000000stake --chain-id ethermint_9000-1
|
./build/laconicd gentx root 1000000000000000000stake --chain-id laconic_9000-1
|
||||||
```
|
```
|
||||||
5. Collect gentxs:
|
5. Collect gentxs:
|
||||||
```
|
```
|
||||||
|
@ -9,9 +9,9 @@ $ make build
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
./build/laconicd keys add root
|
./build/laconicd keys add root
|
||||||
./build/laconicd init test-moniker --chain-id ethermint_9000-1
|
./build/laconicd init test-moniker --chain-id laconic_9000-1
|
||||||
./build/laconicd add-genesis-account $(./build/laconicd keys show root -a) 1000000000000000000aphoton,1000000000000000000stake
|
./build/laconicd add-genesis-account $(./build/laconicd keys show root -a) 1000000000000000000aphoton,1000000000000000000stake
|
||||||
./build/laconicd gentx root 1000000000000000000stake --chain-id ethermint_9000-1
|
./build/laconicd gentx root 1000000000000000000stake --chain-id laconic_9000-1
|
||||||
./build/laconicd collect-gentxs
|
./build/laconicd collect-gentxs
|
||||||
./build/laconicd start
|
./build/laconicd start
|
||||||
```
|
```
|
||||||
|
@ -9,9 +9,9 @@ $ make build
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
./build/laconicd keys add root
|
./build/laconicd keys add root
|
||||||
./build/laconicd init test-moniker --chain-id ethermint_9000-1
|
./build/laconicd init test-moniker --chain-id laconic_9000-1
|
||||||
./build/laconicd add-genesis-account $(./build/laconicd keys show root -a) 1000000000000000000aphoton,1000000000000000000stake
|
./build/laconicd add-genesis-account $(./build/laconicd keys show root -a) 1000000000000000000aphoton,1000000000000000000stake
|
||||||
./build/laconicd gentx root 1000000000000000000stake --chain-id ethermint_9000-1
|
./build/laconicd gentx root 1000000000000000000stake --chain-id laconic_9000-1
|
||||||
./build/laconicd collect-gentxs
|
./build/laconicd collect-gentxs
|
||||||
./build/laconicd start
|
./build/laconicd start
|
||||||
```
|
```
|
||||||
@ -58,7 +58,7 @@ $ ./build/laconicd q registry params -o json | jq .
|
|||||||
> First you have to Create bond
|
> First you have to Create bond
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
$ ./build/laconicd tx registry set ~/Desktop/examples/records/service_provider_example.yml 95f68b1b862bfd1609b0c9aaf7300287b92fec90ac64027092c3e723af36e83d --from root --chain-id ethermint_9000-1 --yes -o json
|
$ ./build/laconicd tx registry set ~/Desktop/examples/records/service_provider_example.yml 95f68b1b862bfd1609b0c9aaf7300287b92fec90ac64027092c3e723af36e83d --from root --chain-id laconic_9000-1 --yes -o json
|
||||||
{
|
{
|
||||||
"height": "0",
|
"height": "0",
|
||||||
"txhash": "BA44ABE1194724694E7CB290F9F3121DB4E63E1A030D95CB84813EEA132CF95F",
|
"txhash": "BA44ABE1194724694E7CB290F9F3121DB4E63E1A030D95CB84813EEA132CF95F",
|
||||||
@ -121,7 +121,7 @@ $ ./build/laconicd q registry get bafyreih7un2ntk235wshncebus5emlozdhdixrrv675my
|
|||||||
## Reserve name
|
## Reserve name
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
./build/laconicd tx registry reserve-name hello --from root --chain-id ethermint_9000-1 --owner $(./build/laconicd key
|
./build/laconicd tx registry reserve-name hello --from root --chain-id laconic_9000-1 --owner $(./build/laconicd key
|
||||||
s show root -a) -y -o json | jq .
|
s show root -a) -y -o json | jq .
|
||||||
{
|
{
|
||||||
"height": "0",
|
"height": "0",
|
||||||
@ -181,8 +181,8 @@ $ ./build/laconicd q registry balance -o json | jq .
|
|||||||
## add bond to the authority
|
## add bond to the authority
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
$ ./build/laconicd tx registry authority-bond [Authority Name] [Bond ID ] --from root --chain-id ethermint_9000-1 -y -o json | jq .
|
$ ./build/laconicd tx registry authority-bond [Authority Name] [Bond ID ] --from root --chain-id laconic_9000-1 -y -o json | jq .
|
||||||
$ ./build/laconicd tx registry authority-bond hello 95f68b1b862bfd1609b0c9aaf7300287b92fec90ac64027092c3e723af36e83d --from root --chain-id ethermint_9000-1 -y -o json | jq .
|
$ ./build/laconicd tx registry authority-bond hello 95f68b1b862bfd1609b0c9aaf7300287b92fec90ac64027092c3e723af36e83d --from root --chain-id laconic_9000-1 -y -o json | jq .
|
||||||
```
|
```
|
||||||
|
|
||||||
## Query the records by associate bond id
|
## Query the records by associate bond id
|
||||||
@ -209,7 +209,7 @@ $ ./build/laconicd q registry query-by-bond 95f68b1b862bfd1609b0c9aaf7300287b92f
|
|||||||
## dissociate bond from record
|
## dissociate bond from record
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
$ ./build/laconicd tx registry dissociate-bond bafyreih7un2ntk235wshncebus5emlozdhdixrrv675my5umb6fgdergae --from root --chain-id ethermint_9000-1
|
$ ./build/laconicd tx registry dissociate-bond bafyreih7un2ntk235wshncebus5emlozdhdixrrv675my5umb6fgdergae --from root --chain-id laconic_9000-1
|
||||||
{"body":{"messages":[{"@type":"/vulcanize.registry.v1beta1.MsgDissociateBond","record_id":"bafyreih7un2ntk235wshncebus5emlozdhdixrrv675my5umb6fgdergae","signer":"ethm1mfdjngh5jvjs9lqtt9a7y2hlgw8v3syh3hsqzk"}],"memo":"","timeout_height":"0","extension_options":[],"non_critical_extension_options":[]},"auth_info":{"signer_infos":[],"fee":{"amount":[],"gas_limit":"200000","payer":"","granter":""}},"signatures":[]}
|
{"body":{"messages":[{"@type":"/vulcanize.registry.v1beta1.MsgDissociateBond","record_id":"bafyreih7un2ntk235wshncebus5emlozdhdixrrv675my5umb6fgdergae","signer":"ethm1mfdjngh5jvjs9lqtt9a7y2hlgw8v3syh3hsqzk"}],"memo":"","timeout_height":"0","extension_options":[],"non_critical_extension_options":[]},"auth_info":{"signer_infos":[],"fee":{"amount":[],"gas_limit":"200000","payer":"","granter":""}},"signatures":[]}
|
||||||
|
|
||||||
confirm transaction before signing and broadcasting [y/N]: y
|
confirm transaction before signing and broadcasting [y/N]: y
|
||||||
@ -231,7 +231,7 @@ txhash: 7AFEF524CB0D92D6576FC08601A787786E802449888FD8DDAA7635698CC85060
|
|||||||
## Associate bond with record
|
## Associate bond with record
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
./build/laconicd tx registry associate-bond bafyreih7un2ntk235wshncebus5emlozdhdixrrv675my5umb6fgdergae c3f7a78c5042d2003880962ba31ff3b01fcf5942960e0bc3ca331f816346a440 --from root --chain-id ethermint_9000-1 -y -o json | jq .
|
./build/laconicd tx registry associate-bond bafyreih7un2ntk235wshncebus5emlozdhdixrrv675my5umb6fgdergae c3f7a78c5042d2003880962ba31ff3b01fcf5942960e0bc3ca331f816346a440 --from root --chain-id laconic_9000-1 -y -o json | jq .
|
||||||
{
|
{
|
||||||
"height": "0",
|
"height": "0",
|
||||||
"txhash": "F75C2BF2FE73668AE1332E1237F924AC549E31E822A56394DE5AC17200B199F9",
|
"txhash": "F75C2BF2FE73668AE1332E1237F924AC549E31E822A56394DE5AC17200B199F9",
|
||||||
@ -252,7 +252,7 @@ txhash: 7AFEF524CB0D92D6576FC08601A787786E802449888FD8DDAA7635698CC85060
|
|||||||
## dissociate-records => remove all record from bond
|
## dissociate-records => remove all record from bond
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
$./build/laconicd tx registry dissociate-records c3f7a78c5042d2003880962ba31ff3b01fcf5942960e0bc3ca331f816346a440 --from root --chain-id ethermint_9000-1 -y -o json | jq .
|
$./build/laconicd tx registry dissociate-records c3f7a78c5042d2003880962ba31ff3b01fcf5942960e0bc3ca331f816346a440 --from root --chain-id laconic_9000-1 -y -o json | jq .
|
||||||
{
|
{
|
||||||
"height": "0",
|
"height": "0",
|
||||||
"txhash": "0316F503E5DEA47CB108AE6C7C7FFAF3F71CC56BC22F63CB97322E1BE48B33B9",
|
"txhash": "0316F503E5DEA47CB108AE6C7C7FFAF3F71CC56BC22F63CB97322E1BE48B33B9",
|
||||||
@ -274,14 +274,14 @@ $./build/laconicd tx registry dissociate-records c3f7a78c5042d2003880962ba31ff3b
|
|||||||
> When a record is expires , needs to renew record
|
> When a record is expires , needs to renew record
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
$ ./build/laconicd tx registry renew-record bafyreih7un2ntk235wshncebus5emlozdhdixrrv675my5umb6fgdergae --from root --chain-id ethermint_9000-1
|
$ ./build/laconicd tx registry renew-record bafyreih7un2ntk235wshncebus5emlozdhdixrrv675my5umb6fgdergae --from root --chain-id laconic_9000-1
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
## Set the authority name
|
## Set the authority name
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
$ ./build/laconicd tx registry set-name crn://hello/test test_hello_cid --from root --chain-id ethermint_9000-1 -y -o json | jq .
|
$ ./build/laconicd tx registry set-name crn://hello/test test_hello_cid --from root --chain-id laconic_9000-1 -y -o json | jq .
|
||||||
{
|
{
|
||||||
"height": "0",
|
"height": "0",
|
||||||
"txhash": "66A63C73B076EEE9A2F7605354448EDEB161F0115D4D03AF68C01BA28DB97486",
|
"txhash": "66A63C73B076EEE9A2F7605354448EDEB161F0115D4D03AF68C01BA28DB97486",
|
||||||
@ -301,7 +301,7 @@ $ ./build/laconicd tx registry set-name crn://hello/test test_hello_cid --from
|
|||||||
## Delete the name
|
## Delete the name
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
$./build/laconicd tx registry delete-name crn://hello/test --from root --chain-id ethermint_9000-1 -y
|
$./build/laconicd tx registry delete-name crn://hello/test --from root --chain-id laconic_9000-1 -y
|
||||||
code: 0
|
code: 0
|
||||||
codespace: ""
|
codespace: ""
|
||||||
data: ""
|
data: ""
|
||||||
|
@ -111,7 +111,7 @@ func (k Keeper) GetRecord(ctx sdk.Context, id string) (record types.Record) {
|
|||||||
store := ctx.KVStore(k.storeKey)
|
store := ctx.KVStore(k.storeKey)
|
||||||
result := store.Get(GetRecordIndexKey(id))
|
result := store.Get(GetRecordIndexKey(id))
|
||||||
k.cdc.MustUnmarshal(result, &record)
|
k.cdc.MustUnmarshal(result, &record)
|
||||||
return record
|
return recordObjToRecord(store, record)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ListRecords - get all records.
|
// ListRecords - get all records.
|
||||||
|
Loading…
Reference in New Issue
Block a user