forked from cerc-io/laconicd-deprecated
Compare commits
7
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1646dd6d05 | ||
|
|
981bd6a5b2 | ||
|
|
5fe9add0af | ||
|
|
006655f0f8 | ||
|
|
d82c676777 | ||
|
|
61fe74ca3b | ||
|
|
afc40702e2 |
+6
-4
@@ -1,5 +1,7 @@
|
||||
# localnet-setup
|
||||
localnet-setup
|
||||
Dockerfile
|
||||
|
||||
# build
|
||||
build
|
||||
**/node_modules
|
||||
init.sh
|
||||
|
||||
build
|
||||
localnet-setup
|
||||
@@ -1,5 +0,0 @@
|
||||
# CODEOWNERS: https://help.github.com/articles/about-codeowners/
|
||||
|
||||
# Primary (global) repo maintainers
|
||||
|
||||
* @evmos/core-engineering
|
||||
+18
-23
@@ -94,39 +94,34 @@ jobs:
|
||||
ref: jest_timeout
|
||||
- name: Environment
|
||||
run: ls -tlh && env
|
||||
- name: build containers scripts
|
||||
- name: Build containers scripts
|
||||
working-directory: tests/sdk_tests
|
||||
run: ./build-laconicd-container.sh && ./build-sdk-test-container.sh
|
||||
- name: start containers
|
||||
|
||||
- name: Start containers
|
||||
working-directory: tests/sdk_tests
|
||||
run: docker compose up -d
|
||||
- name: run-tests.sh
|
||||
- name: Run tests
|
||||
working-directory: tests/sdk_tests
|
||||
run: ./run-tests.sh
|
||||
- name: reset containers for auction tests
|
||||
|
||||
- name: Start auction containers
|
||||
working-directory: tests/sdk_tests
|
||||
if: always()
|
||||
run: docker compose down
|
||||
- name: start auction containers
|
||||
env:
|
||||
TEST_AUCTION_ENABLED: true
|
||||
run: docker compose up -d
|
||||
- name: Run auction tests
|
||||
working-directory: tests/sdk_tests
|
||||
run: docker compose -f docker-compose-auctions.yml up -d
|
||||
- name: run-acution-tests.sh
|
||||
run: ./run-tests.sh test:auctions
|
||||
|
||||
- name: Start auction containers
|
||||
working-directory: tests/sdk_tests
|
||||
run: ./run-auction-tests.sh
|
||||
- name: reset containers for nameservice tests
|
||||
env:
|
||||
TEST_REGISTRY_EXPIRY: true
|
||||
run: docker compose up -d
|
||||
- name: Run nameservice expiry 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
|
||||
run: ./run-tests.sh test:nameservice-expiry
|
||||
|
||||
# integration_tests:
|
||||
# runs-on: ubuntu-latest
|
||||
|
||||
+7
-7
@@ -1,14 +1,14 @@
|
||||
FROM golang:alpine AS build-env
|
||||
|
||||
# Set up dependencies
|
||||
ENV PACKAGES git build-base
|
||||
# Install dependencies
|
||||
RUN apk add --update git build-base linux-headers
|
||||
|
||||
# Set working directory for the build
|
||||
WORKDIR /go/src/github.com/cerc-io/laconicd
|
||||
|
||||
# Install dependencies
|
||||
RUN apk add --update $PACKAGES
|
||||
RUN apk add linux-headers
|
||||
# Cache Go modules
|
||||
COPY go.mod go.sum ./
|
||||
RUN go mod download
|
||||
|
||||
# Add source files
|
||||
COPY . .
|
||||
@@ -21,10 +21,10 @@ FROM alpine:3.17.0
|
||||
|
||||
# Install ca-certificates
|
||||
RUN apk add --update ca-certificates jq curl
|
||||
WORKDIR /
|
||||
|
||||
# Copy over binaries from the build-env
|
||||
COPY --from=build-env /go/src/github.com/cerc-io/laconicd/build/laconicd /usr/bin/laconicd
|
||||
|
||||
WORKDIR /
|
||||
# Run laconicd by default
|
||||
CMD ["laconicd"]
|
||||
ENTRYPOINT ["laconicd"]
|
||||
|
||||
@@ -72,7 +72,7 @@ ifeq ($(ENABLE_ROCKSDB),true)
|
||||
BUILD_TAGS += rocksdb_build
|
||||
test_tags += rocksdb_build
|
||||
else
|
||||
$(warning RocksDB support is disabled; to build and test with RocksDB support, set ENABLE_ROCKSDB=true)
|
||||
$(info RocksDB support is disabled; to build and test with RocksDB support, set ENABLE_ROCKSDB=true)
|
||||
endif
|
||||
|
||||
# DB backend selection
|
||||
@@ -145,7 +145,7 @@ docker-build:
|
||||
# update old container
|
||||
docker rm laconicd || true
|
||||
# create a new container from the latest image
|
||||
docker create --name laconic -t -i cerc-io/laconicd:latest laconicd
|
||||
docker create --name laconic -t -i ${DOCKER_IMAGE}:${DOCKER_TAG} laconicd
|
||||
# move the binaries to the ./build directory
|
||||
mkdir -p ./build/
|
||||
docker cp laconic:/usr/bin/laconicd ./build/
|
||||
@@ -316,7 +316,7 @@ TEST_TARGETS := test-unit test-unit-cover test-race
|
||||
# Test runs-specific rules. To add a new test target, just add
|
||||
# a new rule, customise ARGS or TEST_PACKAGES ad libitum, and
|
||||
# append the new rule to the TEST_TARGETS list.
|
||||
test-unit: ARGS=-timeout=10m -race
|
||||
test-unit: ARGS=-timeout=10m -race -test.v
|
||||
test-unit: TEST_PACKAGES=$(PACKAGES_UNIT)
|
||||
|
||||
test-race: ARGS=-race
|
||||
|
||||
+48
-98
@@ -2,7 +2,6 @@ package eip712
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/base64"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"math/big"
|
||||
@@ -10,15 +9,17 @@ import (
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
errorsmod "cosmossdk.io/errors"
|
||||
sdkmath "cosmossdk.io/math"
|
||||
codectypes "github.com/cosmos/cosmos-sdk/codec/types"
|
||||
"github.com/cosmos/cosmos-sdk/crypto/keys/ed25519"
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
errortypes "github.com/cosmos/cosmos-sdk/types/errors"
|
||||
"golang.org/x/text/cases"
|
||||
"golang.org/x/text/language"
|
||||
|
||||
errorsmod "cosmossdk.io/errors"
|
||||
codectypes "github.com/cosmos/cosmos-sdk/codec/types"
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
errortypes "github.com/cosmos/cosmos-sdk/types/errors"
|
||||
|
||||
registry "github.com/cerc-io/laconicd/x/registry/types"
|
||||
"github.com/ethereum/go-ethereum/common"
|
||||
"github.com/ethereum/go-ethereum/common/math"
|
||||
"github.com/ethereum/go-ethereum/signer/core/apitypes"
|
||||
@@ -33,6 +34,24 @@ func WrapTxToTypedData(
|
||||
data []byte,
|
||||
feeDelegation *FeeDelegationOptions,
|
||||
) (apitypes.TypedData, error) {
|
||||
txData := make(map[string]interface{})
|
||||
|
||||
if err := json.Unmarshal(data, &txData); err != nil {
|
||||
return apitypes.TypedData{}, errorsmod.Wrap(errortypes.ErrJSONUnmarshal, "failed to JSON unmarshal data")
|
||||
}
|
||||
|
||||
if txData["msgs"].([]interface{})[0].(map[string]interface{})["value"].(map[string]interface{})["payload"] != nil {
|
||||
setRecordMsg := msg.(*registry.MsgSetRecord)
|
||||
var attr []interface{}
|
||||
for _, b := range setRecordMsg.Payload.Record.Attributes.Value {
|
||||
attr = append(attr, fmt.Sprintf("%v", b))
|
||||
}
|
||||
|
||||
txData["msgs"].([]interface{})[0].(map[string]interface{})["value"].(map[string]interface{})["payload"].(map[string]interface{})["record"].(map[string]interface{})["attributes"] = map[string]interface{}{ //nolint:lll
|
||||
"type_url": setRecordMsg.Payload.Record.Attributes.TypeUrl,
|
||||
"value": attr,
|
||||
}
|
||||
}
|
||||
|
||||
domain := apitypes.TypedDataDomain{
|
||||
Name: "Cosmos Web3",
|
||||
@@ -47,13 +66,22 @@ func WrapTxToTypedData(
|
||||
return apitypes.TypedData{}, err
|
||||
}
|
||||
|
||||
txData := make(map[string]interface{})
|
||||
if err := json.Unmarshal(data, &txData); err != nil {
|
||||
return apitypes.TypedData{}, errorsmod.Wrap(errortypes.ErrJSONUnmarshal, "failed to JSON unmarshal data")
|
||||
if msgTypes["TypePayloadRecord"] != nil {
|
||||
msgTypes["TypePayloadRecord"] = []apitypes.Type{
|
||||
{Name: "id", Type: "string"},
|
||||
{Name: "bond_id", Type: "string"},
|
||||
{Name: "create_time", Type: "string"},
|
||||
{Name: "expiry_time", Type: "string"},
|
||||
{Name: "deleted", Type: "bool"},
|
||||
{Name: "attributes", Type: "TypePayloadRecordAttributes"},
|
||||
}
|
||||
}
|
||||
|
||||
if err := patchTxData(txData, msgTypes, "Tx"); err != nil {
|
||||
return apitypes.TypedData{}, errorsmod.Wrap(errortypes.ErrJSONUnmarshal, "failed to patch JSON data")
|
||||
if msgTypes["TypePayloadRecordAttributes"] != nil {
|
||||
msgTypes["TypePayloadRecordAttributes"] = []apitypes.Type{
|
||||
{Name: "type_url", Type: "string"},
|
||||
{Name: "value", Type: "uint8[]"},
|
||||
}
|
||||
delete(msgTypes, "TypePayloadRecordAttributesValue")
|
||||
}
|
||||
|
||||
if feeDelegation != nil {
|
||||
@@ -292,15 +320,10 @@ func traverseFields(
|
||||
ethTyp := typToEth(fieldType)
|
||||
if len(ethTyp) > 0 {
|
||||
// Support array of uint64
|
||||
if isCollection {
|
||||
if fieldType.Kind() != reflect.Slice && fieldType.Kind() != reflect.Array {
|
||||
ethTyp += "[]"
|
||||
}
|
||||
// convert uint8[] to bytes
|
||||
if fieldType.Kind() == reflect.Uint8 {
|
||||
ethTyp = "bytes"
|
||||
}
|
||||
if isCollection && fieldType.Kind() != reflect.Slice && fieldType.Kind() != reflect.Array {
|
||||
ethTyp += "[]"
|
||||
}
|
||||
|
||||
if prefix == typeDefPrefix {
|
||||
typeMap[rootType] = append(typeMap[rootType], apitypes.Type{
|
||||
Name: fieldName,
|
||||
@@ -443,13 +466,14 @@ func typToEth(typ reflect.Type) string {
|
||||
return "uint32"
|
||||
case reflect.Uint64:
|
||||
return "uint64"
|
||||
case reflect.Slice | reflect.Array:
|
||||
// Note: this case may never be reached due to previous handling in traverseFields
|
||||
case reflect.Slice:
|
||||
ethName := typToEth(typ.Elem())
|
||||
if len(ethName) > 0 {
|
||||
return ethName + "[]"
|
||||
}
|
||||
case reflect.Array:
|
||||
ethName := typToEth(typ.Elem())
|
||||
if len(ethName) > 0 {
|
||||
if ethName == "uint8" {
|
||||
return "bytes"
|
||||
}
|
||||
return ethName + "[]"
|
||||
}
|
||||
case reflect.Ptr:
|
||||
@@ -486,77 +510,3 @@ func doRecover(err *error) {
|
||||
*err = fmt.Errorf("%v", r)
|
||||
}
|
||||
}
|
||||
|
||||
// Performs extra type conversions on JSON-decoded data accoding to the provided type definitions
|
||||
// for compatibility with Geth's encoding
|
||||
func patchTxData(data map[string]any, schema apitypes.Types, rootType string) error {
|
||||
// Scan the data for any types that need to be converted.
|
||||
// This is adapted from TypedData.EncodeData
|
||||
for _, field := range schema[rootType] {
|
||||
encType := field.Type
|
||||
encValue := data[field.Name]
|
||||
if encType[len(encType)-1:] == "]" {
|
||||
arrayValue, ok := encValue.([]interface{})
|
||||
if !ok {
|
||||
return dataMismatchError(encType, encValue)
|
||||
}
|
||||
|
||||
parsedType := strings.Split(encType, "[")[0]
|
||||
if schema[parsedType] != nil {
|
||||
for _, item := range arrayValue {
|
||||
mapValue, ok := item.(map[string]interface{})
|
||||
if !ok {
|
||||
return dataMismatchError(parsedType, item)
|
||||
}
|
||||
|
||||
err := patchTxData(mapValue, schema, parsedType)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
} else {
|
||||
for i, item := range arrayValue {
|
||||
converted, err := handleConversion(parsedType, item)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
arrayValue[i] = converted
|
||||
}
|
||||
}
|
||||
|
||||
} else if schema[encType] != nil {
|
||||
mapValue, ok := encValue.(map[string]interface{})
|
||||
if !ok {
|
||||
return dataMismatchError(encType, encValue)
|
||||
}
|
||||
err := patchTxData(mapValue, schema, encType)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
} else {
|
||||
converted, err := handleConversion(encType, encValue)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
data[field.Name] = converted
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func handleConversion(encType string, encValue any) (any, error) {
|
||||
switch encType {
|
||||
case "bytes":
|
||||
// Protobuf encodes byte strings in base64
|
||||
if v, ok := encValue.(string); ok {
|
||||
return base64.StdEncoding.DecodeString(v)
|
||||
}
|
||||
}
|
||||
return encValue, nil
|
||||
}
|
||||
|
||||
// dataMismatchError generates an error for a mismatch between
|
||||
// the provided type and data
|
||||
func dataMismatchError(encType string, encValue any) error {
|
||||
return fmt.Errorf("provided data '%v' doesn't match type '%s'", encValue, encType)
|
||||
}
|
||||
|
||||
@@ -4,25 +4,28 @@ import (
|
||||
"testing"
|
||||
|
||||
"cosmossdk.io/math"
|
||||
registrytypes "github.com/cerc-io/laconicd/x/registry/types"
|
||||
|
||||
"github.com/cerc-io/laconicd/ethereum/eip712"
|
||||
"github.com/cosmos/cosmos-sdk/client"
|
||||
cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types"
|
||||
"github.com/cosmos/cosmos-sdk/simapp/params"
|
||||
"github.com/ethereum/go-ethereum/crypto"
|
||||
|
||||
"github.com/cerc-io/laconicd/crypto/ethsecp256k1"
|
||||
cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types"
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
|
||||
"github.com/cerc-io/laconicd/app"
|
||||
"github.com/cerc-io/laconicd/encoding"
|
||||
banktypes "github.com/cosmos/cosmos-sdk/x/bank/types"
|
||||
|
||||
txtypes "github.com/cosmos/cosmos-sdk/types/tx"
|
||||
"github.com/cosmos/cosmos-sdk/types/tx/signing"
|
||||
authsigning "github.com/cosmos/cosmos-sdk/x/auth/signing"
|
||||
banktypes "github.com/cosmos/cosmos-sdk/x/bank/types"
|
||||
|
||||
distributiontypes "github.com/cosmos/cosmos-sdk/x/distribution/types"
|
||||
govtypes "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1"
|
||||
stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types"
|
||||
"github.com/ethereum/go-ethereum/crypto"
|
||||
"github.com/stretchr/testify/suite"
|
||||
|
||||
"github.com/cerc-io/laconicd/app"
|
||||
"github.com/cerc-io/laconicd/crypto/ethsecp256k1"
|
||||
"github.com/cerc-io/laconicd/encoding"
|
||||
"github.com/cerc-io/laconicd/ethereum/eip712"
|
||||
)
|
||||
|
||||
// Unit tests for single-signer EIP-712 signature verification. Multi-signer verification tests are included
|
||||
@@ -329,54 +332,6 @@ func (suite *EIP712TestSuite) TestEIP712SignatureVerification() {
|
||||
sequence: 78,
|
||||
expectSuccess: false,
|
||||
},
|
||||
|
||||
// test laconic registry messages
|
||||
{
|
||||
title: "Succeeds - Standard MsgSetName",
|
||||
fee: txtypes.Fee{
|
||||
Amount: suite.makeCoins("aphoton", math.NewInt(2000)),
|
||||
GasLimit: 100000,
|
||||
},
|
||||
memo: "",
|
||||
msgs: []sdk.Msg{
|
||||
registrytypes.NewMsgSetName(
|
||||
"testcrn",
|
||||
"testcid",
|
||||
suite.createTestAddress(),
|
||||
),
|
||||
},
|
||||
accountNumber: 25,
|
||||
sequence: 78,
|
||||
expectSuccess: true,
|
||||
},
|
||||
{
|
||||
title: "Succeeds - Standard MsgSetRecord",
|
||||
fee: txtypes.Fee{
|
||||
Amount: suite.makeCoins("aphoton", math.NewInt(2000)),
|
||||
GasLimit: 100000,
|
||||
},
|
||||
memo: "",
|
||||
msgs: []sdk.Msg{
|
||||
registrytypes.NewMsgSetRecord(
|
||||
registrytypes.Payload{
|
||||
Record: ®istrytypes.Record{
|
||||
Attributes: []byte("test attributes"),
|
||||
},
|
||||
Signatures: []registrytypes.Signature{
|
||||
{
|
||||
Sig: "fake sig",
|
||||
PubKey: "fake pubkey",
|
||||
},
|
||||
},
|
||||
},
|
||||
"testbondid",
|
||||
suite.createTestAddress(),
|
||||
),
|
||||
},
|
||||
accountNumber: 25,
|
||||
sequence: 78,
|
||||
expectSuccess: true,
|
||||
},
|
||||
}
|
||||
|
||||
for _, tc := range testCases {
|
||||
|
||||
+3
-3
@@ -61,7 +61,7 @@ func getGQLRecord(ctx context.Context, resolver QueryResolver, record registryty
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
recordType := record.ToReadableRecord()
|
||||
recordType := record.ToRecordType()
|
||||
attributes, err := getAttributes(&recordType)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
@@ -163,7 +163,7 @@ func GetGQLAuction(auction *auctiontypes.Auction, bids []*auctiontypes.Bid) (*Au
|
||||
return &gqlAuction, nil
|
||||
}
|
||||
|
||||
func getReferences(ctx context.Context, resolver QueryResolver, r *registrytypes.ReadableRecord) ([]*Record, error) {
|
||||
func getReferences(ctx context.Context, resolver QueryResolver, r *registrytypes.RecordType) ([]*Record, error) {
|
||||
var ids []string
|
||||
|
||||
// #nosec G705
|
||||
@@ -184,7 +184,7 @@ func getReferences(ctx context.Context, resolver QueryResolver, r *registrytypes
|
||||
return resolver.GetRecordsByIds(ctx, ids)
|
||||
}
|
||||
|
||||
func getAttributes(r *registrytypes.ReadableRecord) ([]*KeyValue, error) {
|
||||
func getAttributes(r *registrytypes.RecordType) ([]*KeyValue, error) {
|
||||
return mapToKeyValuePairs(r.Attributes)
|
||||
}
|
||||
|
||||
|
||||
@@ -5,19 +5,20 @@ CHAINID="laconic_9000-1"
|
||||
MONIKER="localtestnet"
|
||||
KEYRING="test"
|
||||
KEYALGO="eth_secp256k1"
|
||||
LOGLEVEL="info"
|
||||
LOGLEVEL="${LOGLEVEL:-info}"
|
||||
# trace evm
|
||||
TRACE="--trace"
|
||||
# TRACE=""
|
||||
|
||||
# validate dependencies are installed
|
||||
command -v jq > /dev/null 2>&1 || { echo >&2 "jq not installed. More info: https://stedolan.github.io/jq/download/"; exit 1; }
|
||||
command -v jq > /dev/null 2>&1 || {
|
||||
echo >&2 "jq not installed. More info: https://stedolan.github.io/jq/download/"
|
||||
exit 1
|
||||
}
|
||||
|
||||
# remove existing daemon and client
|
||||
rm -rf ~/.laconic*
|
||||
|
||||
make install
|
||||
|
||||
laconicd config keyring-backend $KEYRING
|
||||
laconicd config chain-id $CHAINID
|
||||
|
||||
@@ -27,71 +28,70 @@ laconicd keys add $KEY --keyring-backend $KEYRING --algo $KEYALGO
|
||||
# Set moniker and chain-id for Ethermint (Moniker can be anything, chain-id must be an integer)
|
||||
laconicd init $MONIKER --chain-id $CHAINID
|
||||
|
||||
update_genesis() {
|
||||
jq "$1" $HOME/.laconicd/config/genesis.json > $HOME/.laconicd/config/tmp_genesis.json &&
|
||||
mv $HOME/.laconicd/config/tmp_genesis.json $HOME/.laconicd/config/genesis.json
|
||||
}
|
||||
|
||||
# Change parameter token denominations to aphoton
|
||||
cat $HOME/.laconicd/config/genesis.json | jq '.app_state["staking"]["params"]["bond_denom"]="aphoton"' > $HOME/.laconicd/config/tmp_genesis.json && mv $HOME/.laconicd/config/tmp_genesis.json $HOME/.laconicd/config/genesis.json
|
||||
cat $HOME/.laconicd/config/genesis.json | jq '.app_state["crisis"]["constant_fee"]["denom"]="aphoton"' > $HOME/.laconicd/config/tmp_genesis.json && mv $HOME/.laconicd/config/tmp_genesis.json $HOME/.laconicd/config/genesis.json
|
||||
cat $HOME/.laconicd/config/genesis.json | jq '.app_state["gov"]["deposit_params"]["min_deposit"][0]["denom"]="aphoton"' > $HOME/.laconicd/config/tmp_genesis.json && mv $HOME/.laconicd/config/tmp_genesis.json $HOME/.laconicd/config/genesis.json
|
||||
cat $HOME/.laconicd/config/genesis.json | jq '.app_state["mint"]["params"]["mint_denom"]="aphoton"' > $HOME/.laconicd/config/tmp_genesis.json && mv $HOME/.laconicd/config/tmp_genesis.json $HOME/.laconicd/config/genesis.json
|
||||
update_genesis '.app_state["staking"]["params"]["bond_denom"]="aphoton"'
|
||||
update_genesis '.app_state["crisis"]["constant_fee"]["denom"]="aphoton"'
|
||||
update_genesis '.app_state["gov"]["deposit_params"]["min_deposit"][0]["denom"]="aphoton"'
|
||||
update_genesis '.app_state["mint"]["params"]["mint_denom"]="aphoton"'
|
||||
# Custom modules
|
||||
cat $HOME/.laconicd/config/genesis.json | jq '.app_state["registry"]["params"]["record_rent"]["denom"]="aphoton"' > $HOME/.laconicd/config/tmp_genesis.json && mv $HOME/.laconicd/config/tmp_genesis.json $HOME/.laconicd/config/genesis.json
|
||||
cat $HOME/.laconicd/config/genesis.json | jq '.app_state["registry"]["params"]["authority_rent"]["denom"]="aphoton"' > $HOME/.laconicd/config/tmp_genesis.json && mv $HOME/.laconicd/config/tmp_genesis.json $HOME/.laconicd/config/genesis.json
|
||||
cat $HOME/.laconicd/config/genesis.json | jq '.app_state["registry"]["params"]["authority_auction_commit_fee"]["denom"]="aphoton"' > $HOME/.laconicd/config/tmp_genesis.json && mv $HOME/.laconicd/config/tmp_genesis.json $HOME/.laconicd/config/genesis.json
|
||||
cat $HOME/.laconicd/config/genesis.json | jq '.app_state["registry"]["params"]["authority_auction_reveal_fee"]["denom"]="aphoton"' > $HOME/.laconicd/config/tmp_genesis.json && mv $HOME/.laconicd/config/tmp_genesis.json $HOME/.laconicd/config/genesis.json
|
||||
cat $HOME/.laconicd/config/genesis.json | jq '.app_state["registry"]["params"]["authority_auction_minimum_bid"]["denom"]="aphoton"' > $HOME/.laconicd/config/tmp_genesis.json && mv $HOME/.laconicd/config/tmp_genesis.json $HOME/.laconicd/config/genesis.json
|
||||
update_genesis '.app_state["registry"]["params"]["record_rent"]["denom"]="aphoton"'
|
||||
update_genesis '.app_state["registry"]["params"]["authority_rent"]["denom"]="aphoton"'
|
||||
update_genesis '.app_state["registry"]["params"]["authority_auction_commit_fee"]["denom"]="aphoton"'
|
||||
update_genesis '.app_state["registry"]["params"]["authority_auction_reveal_fee"]["denom"]="aphoton"'
|
||||
update_genesis '.app_state["registry"]["params"]["authority_auction_minimum_bid"]["denom"]="aphoton"'
|
||||
|
||||
if [[ "$TEST_REGISTRY_EXPIRY" == "true" ]]; then
|
||||
echo "Setting timers for expiry tests."
|
||||
|
||||
cat $HOME/.laconicd/config/genesis.json | jq '.app_state["registry"]["params"]["record_rent_duration"]="60s"' > $HOME/.laconicd/config/tmp_genesis.json && mv $HOME/.laconicd/config/tmp_genesis.json $HOME/.laconicd/config/genesis.json
|
||||
cat $HOME/.laconicd/config/genesis.json | jq '.app_state["registry"]["params"]["authority_grace_period"]="60s"' > $HOME/.laconicd/config/tmp_genesis.json && mv $HOME/.laconicd/config/tmp_genesis.json $HOME/.laconicd/config/genesis.json
|
||||
cat $HOME/.laconicd/config/genesis.json | jq '.app_state["registry"]["params"]["authority_rent_duration"]="60s"' > $HOME/.laconicd/config/tmp_genesis.json && mv $HOME/.laconicd/config/tmp_genesis.json $HOME/.laconicd/config/genesis.json
|
||||
update_genesis '.app_state["registry"]["params"]["record_rent_duration"]="60s"'
|
||||
update_genesis '.app_state["registry"]["params"]["authority_grace_period"]="60s"'
|
||||
update_genesis '.app_state["registry"]["params"]["authority_rent_duration"]="60s"'
|
||||
fi
|
||||
|
||||
if [[ "$TEST_AUCTION_ENABLED" == "true" ]]; then
|
||||
echo "Enabling auction and setting timers."
|
||||
|
||||
cat $HOME/.laconicd/config/genesis.json | jq '.app_state["registry"]["params"]["authority_auction_enabled"]=true' > $HOME/.laconicd/config/tmp_genesis.json && mv $HOME/.laconicd/config/tmp_genesis.json $HOME/.laconicd/config/genesis.json
|
||||
cat $HOME/.laconicd/config/genesis.json | jq '.app_state["registry"]["params"]["authority_rent_duration"]="60s"' > $HOME/.laconicd/config/tmp_genesis.json && mv $HOME/.laconicd/config/tmp_genesis.json $HOME/.laconicd/config/genesis.json
|
||||
cat $HOME/.laconicd/config/genesis.json | jq '.app_state["registry"]["params"]["authority_grace_period"]="300s"' > $HOME/.laconicd/config/tmp_genesis.json && mv $HOME/.laconicd/config/tmp_genesis.json $HOME/.laconicd/config/genesis.json
|
||||
cat $HOME/.laconicd/config/genesis.json | jq '.app_state["registry"]["params"]["authority_auction_commits_duration"]="60s"' > $HOME/.laconicd/config/tmp_genesis.json && mv $HOME/.laconicd/config/tmp_genesis.json $HOME/.laconicd/config/genesis.json
|
||||
cat $HOME/.laconicd/config/genesis.json | jq '.app_state["registry"]["params"]["authority_auction_reveals_duration"]="60s"' > $HOME/.laconicd/config/tmp_genesis.json && mv $HOME/.laconicd/config/tmp_genesis.json $HOME/.laconicd/config/genesis.json
|
||||
update_genesis '.app_state["registry"]["params"]["authority_auction_enabled"]=true'
|
||||
update_genesis '.app_state["registry"]["params"]["authority_rent_duration"]="60s"'
|
||||
update_genesis '.app_state["registry"]["params"]["authority_grace_period"]="300s"'
|
||||
update_genesis '.app_state["registry"]["params"]["authority_auction_commits_duration"]="60s"'
|
||||
update_genesis '.app_state["registry"]["params"]["authority_auction_reveals_duration"]="60s"'
|
||||
fi
|
||||
|
||||
# increase block time (?)
|
||||
cat $HOME/.laconicd/config/genesis.json | jq '.consensus_params["block"]["time_iota_ms"]="1000"' > $HOME/.laconicd/config/tmp_genesis.json && mv $HOME/.laconicd/config/tmp_genesis.json $HOME/.laconicd/config/genesis.json
|
||||
update_genesis '.consensus_params["block"]["time_iota_ms"]="1000"'
|
||||
|
||||
# Set gas limit in genesis
|
||||
cat $HOME/.laconicd/config/genesis.json | jq '.consensus_params["block"]["max_gas"]="10000000"' > $HOME/.laconicd/config/tmp_genesis.json && mv $HOME/.laconicd/config/tmp_genesis.json $HOME/.laconicd/config/genesis.json
|
||||
update_genesis '.consensus_params["block"]["max_gas"]="10000000"'
|
||||
|
||||
# disable produce empty block
|
||||
if [[ "$OSTYPE" == "darwin"* ]]; then
|
||||
sed -i '' 's/create_empty_blocks = true/create_empty_blocks = false/g' $HOME/.laconicd/config/config.toml
|
||||
else
|
||||
sed -i 's/create_empty_blocks = true/create_empty_blocks = false/g' $HOME/.laconicd/config/config.toml
|
||||
sed -i '' 's/create_empty_blocks = true/create_empty_blocks = false/g' $HOME/.laconicd/config/config.toml
|
||||
else
|
||||
sed -i 's/create_empty_blocks = true/create_empty_blocks = false/g' $HOME/.laconicd/config/config.toml
|
||||
fi
|
||||
|
||||
if [[ $1 == "pending" ]]; then
|
||||
if [[ "$1" == "pending" ]]; then
|
||||
alias sed-i="sed -i"
|
||||
if [[ "$OSTYPE" == "darwin"* ]]; then
|
||||
sed -i '' 's/create_empty_blocks_interval = "0s"/create_empty_blocks_interval = "30s"/g' $HOME/.laconicd/config/config.toml
|
||||
sed -i '' 's/timeout_propose = "3s"/timeout_propose = "30s"/g' $HOME/.laconicd/config/config.toml
|
||||
sed -i '' 's/timeout_propose_delta = "500ms"/timeout_propose_delta = "5s"/g' $HOME/.laconicd/config/config.toml
|
||||
sed -i '' 's/timeout_prevote = "1s"/timeout_prevote = "10s"/g' $HOME/.laconicd/config/config.toml
|
||||
sed -i '' 's/timeout_prevote_delta = "500ms"/timeout_prevote_delta = "5s"/g' $HOME/.laconicd/config/config.toml
|
||||
sed -i '' 's/timeout_precommit = "1s"/timeout_precommit = "10s"/g' $HOME/.laconicd/config/config.toml
|
||||
sed -i '' 's/timeout_precommit_delta = "500ms"/timeout_precommit_delta = "5s"/g' $HOME/.laconicd/config/config.toml
|
||||
sed -i '' 's/timeout_commit = "5s"/timeout_commit = "150s"/g' $HOME/.laconicd/config/config.toml
|
||||
sed -i '' 's/timeout_broadcast_tx_commit = "10s"/timeout_broadcast_tx_commit = "150s"/g' $HOME/.laconicd/config/config.toml
|
||||
else
|
||||
sed -i 's/create_empty_blocks_interval = "0s"/create_empty_blocks_interval = "30s"/g' $HOME/.laconicd/config/config.toml
|
||||
sed -i 's/timeout_propose = "3s"/timeout_propose = "30s"/g' $HOME/.laconicd/config/config.toml
|
||||
sed -i 's/timeout_propose_delta = "500ms"/timeout_propose_delta = "5s"/g' $HOME/.laconicd/config/config.toml
|
||||
sed -i 's/timeout_prevote = "1s"/timeout_prevote = "10s"/g' $HOME/.laconicd/config/config.toml
|
||||
sed -i 's/timeout_prevote_delta = "500ms"/timeout_prevote_delta = "5s"/g' $HOME/.laconicd/config/config.toml
|
||||
sed -i 's/timeout_precommit = "1s"/timeout_precommit = "10s"/g' $HOME/.laconicd/config/config.toml
|
||||
sed -i 's/timeout_precommit_delta = "500ms"/timeout_precommit_delta = "5s"/g' $HOME/.laconicd/config/config.toml
|
||||
sed -i 's/timeout_commit = "5s"/timeout_commit = "150s"/g' $HOME/.laconicd/config/config.toml
|
||||
sed -i 's/timeout_broadcast_tx_commit = "10s"/timeout_broadcast_tx_commit = "150s"/g' $HOME/.laconicd/config/config.toml
|
||||
alias sed-i="sed -i ''"
|
||||
fi
|
||||
sed-i \
|
||||
-e 's/create_empty_blocks_interval = "0s"/create_empty_blocks_interval = "30s"/g' \
|
||||
-e 's/timeout_propose = "3s"/timeout_propose = "30s"/g' \
|
||||
-e 's/timeout_propose_delta = "500ms"/timeout_propose_delta = "5s"/g' \
|
||||
-e 's/timeout_prevote = "1s"/timeout_prevote = "10s"/g' \
|
||||
-e 's/timeout_prevote_delta = "500ms"/timeout_prevote_delta = "5s"/g' \
|
||||
-e 's/timeout_precommit = "1s"/timeout_precommit = "10s"/g' \
|
||||
-e 's/timeout_precommit_delta = "500ms"/timeout_precommit_delta = "5s"/g' \
|
||||
-e 's/timeout_commit = "5s"/timeout_commit = "150s"/g' \
|
||||
-e 's/timeout_broadcast_tx_commit = "10s"/timeout_broadcast_tx_commit = "150s"/g' \
|
||||
$HOME/.laconicd/config/config.toml
|
||||
fi
|
||||
|
||||
# Allocate genesis accounts (cosmos formatted addresses)
|
||||
@@ -106,9 +106,16 @@ laconicd collect-gentxs
|
||||
# Run this to ensure everything worked and that the genesis file is setup correctly
|
||||
laconicd validate-genesis
|
||||
|
||||
if [[ $1 == "pending" ]]; then
|
||||
if [[ "$1" == "pending" ]]; then
|
||||
echo "pending mode is on, please wait for the first block committed."
|
||||
fi
|
||||
|
||||
# Start the node (remove the --pruning=nothing flag if historical queries are not needed)
|
||||
laconicd start --pruning=nothing --evm.tracer=json $TRACE --log_level $LOGLEVEL --minimum-gas-prices=0.0001aphoton --json-rpc.api eth,txpool,personal,net,debug,web3,miner --api.enable --gql-server --gql-playground
|
||||
laconicd start \
|
||||
--pruning=nothing \
|
||||
--evm.tracer=json $TRACE \
|
||||
--log_level $LOGLEVEL \
|
||||
--minimum-gas-prices=0.0001aphoton \
|
||||
--json-rpc.api eth,txpool,personal,net,debug,web3,miner \
|
||||
--api.enable \
|
||||
--gql-server --gql-playground
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
syntax = "proto3";
|
||||
package vulcanize.registry.v1beta1;
|
||||
|
||||
import "gogoproto/gogo.proto";
|
||||
|
||||
option go_package = "github.com/cerc-io/laconicd/x/registry/types";
|
||||
|
||||
message ServiceProviderRegistration {
|
||||
string bond_id = 1 [(gogoproto.moretags) = "json:\"bondId\" yaml:\"bondId\""];
|
||||
string laconic_id = 2 [(gogoproto.moretags) = "json:\"laconicId\" yaml:\"laconicId\""];
|
||||
X500 x500 = 3 [(gogoproto.moretags) = "json:\"x500\" yaml:\"x500\""];
|
||||
string type = 4 [(gogoproto.moretags) = "json:\"type\" yaml:\"type\""];
|
||||
string version = 6 [(gogoproto.moretags) = "json:\"version\" yaml:\"version\""];
|
||||
}
|
||||
|
||||
message X500 {
|
||||
string common_name = 1 [(gogoproto.moretags) = "json:\"commonName\" yaml:\"commonName\""];
|
||||
string organization_unit = 2 [(gogoproto.moretags) = "json:\"organizationUnit\" yaml:\"organizationUnit\""];
|
||||
string organization_name = 3 [(gogoproto.moretags) = "json:\"organizationName\" yaml:\"organizationName\""];
|
||||
string locality_name = 4 [(gogoproto.moretags) = "json:\"localityName\" yaml:\"localityName\""];
|
||||
string state_name = 5 [(gogoproto.moretags) = "json:\"stateName\" yaml:\"stateName\""];
|
||||
string country = 6 [(gogoproto.moretags) = "json:\"country\" yaml:\"country\""];
|
||||
}
|
||||
|
||||
message WebsiteRegistrationRecord {
|
||||
string url = 1 [(gogoproto.moretags) = "json:\"url\" yaml:\"url\""];
|
||||
string repo_registration_record_cid = 2
|
||||
[(gogoproto.moretags) = "json:\"repoRegistrationRecordCID\" yaml:\"repoRegistrationRecordCID\""];
|
||||
string build_artifact_cid = 3 [(gogoproto.moretags) = "json:\"buildArtifactCID\" yaml:\"buildArtifactCID\""];
|
||||
string tls_cert_cid = 4 [(gogoproto.moretags) = "json:\"TLSCertCID\" yaml:\"TLSCertCID\""];
|
||||
string type = 5 [(gogoproto.moretags) = "json:\"type\" yaml:\"type\""];
|
||||
string version = 6 [(gogoproto.moretags) = "json:\"version\" yaml:\"version\""];
|
||||
}
|
||||
@@ -56,7 +56,7 @@ message Params {
|
||||
];
|
||||
}
|
||||
|
||||
// Params defines the registry module records
|
||||
// Record defines a registry record
|
||||
message Record {
|
||||
string id = 1 [(gogoproto.moretags) = "json:\"id\" yaml:\"id\""];
|
||||
string bond_id = 2 [(gogoproto.moretags) = "json:\"bondId\" yaml:\"bondId\""];
|
||||
@@ -64,12 +64,12 @@ message Record {
|
||||
string expiry_time = 4 [(gogoproto.moretags) = "json:\"expiryTime\" yaml:\"expiryTime\""];
|
||||
bool deleted = 5;
|
||||
repeated string owners = 6 [(gogoproto.moretags) = "json:\"owners\" yaml:\"owners\""];
|
||||
bytes attributes = 7 [(gogoproto.moretags) = "json:\"attributes\" yaml:\"attributes\""];
|
||||
google.protobuf.Any attributes = 7 [(gogoproto.moretags) = "json:\"attributes\" yaml:\"attributes\""];
|
||||
repeated string names = 8 [(gogoproto.moretags) = "json:\"names\" yaml:\"names\""];
|
||||
string type = 9 [(gogoproto.moretags) = "json:\"types\" yaml:\"types\""];
|
||||
}
|
||||
|
||||
// AuthorityEntry defines the registry module AuthorityEntries
|
||||
// AuthorityEntry defines a registry authority
|
||||
message AuthorityEntry {
|
||||
string name = 1;
|
||||
NameAuthority entry = 2;
|
||||
@@ -99,7 +99,7 @@ message NameEntry {
|
||||
NameRecord entry = 2;
|
||||
}
|
||||
|
||||
// NameRecord
|
||||
// NameRecord defines a versioned name record
|
||||
message NameRecord {
|
||||
NameRecordEntry latest = 1;
|
||||
repeated NameRecordEntry history = 2;
|
||||
@@ -131,4 +131,4 @@ message BlockChangeSet {
|
||||
message AuctionBidInfo {
|
||||
string auction_id = 1 [(gogoproto.moretags) = "json:\"auctionID\" yaml:\"auctionID\""];
|
||||
string bidder_address = 2 [(gogoproto.moretags) = "json:\"bidderAddress\" yaml:\"bidderAddress\""];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,13 +7,13 @@ import "vulcanize/registry/v1beta1/registry.proto";
|
||||
|
||||
option go_package = "github.com/cerc-io/laconicd/x/registry/types";
|
||||
|
||||
// Msg is a service which exposes the registry functionality
|
||||
// Msg
|
||||
service Msg {
|
||||
// SetRecord records a new record with given payload and bond id
|
||||
// SetRecord will records a new record with given payload and bond id
|
||||
rpc SetRecord(MsgSetRecord) returns (MsgSetRecordResponse) {
|
||||
option (google.api.http).post = "/vulcanize/registry/v1beta1/set_record";
|
||||
}
|
||||
// Renew Record renews an expired record
|
||||
// Renew Record will renew the expire record
|
||||
rpc RenewRecord(MsgRenewRecord) returns (MsgRenewRecordResponse) {
|
||||
option (google.api.http).post = "/vulcanize/registry/v1beta1/renew_record";
|
||||
}
|
||||
@@ -66,10 +66,8 @@ message MsgSetRecordResponse {
|
||||
// Payload
|
||||
message Payload {
|
||||
Record record = 1;
|
||||
repeated Signature signatures = 2 [
|
||||
(gogoproto.nullable) = false,
|
||||
(gogoproto.moretags) = "json:\"signatures\" yaml:\"signatures\""
|
||||
];
|
||||
repeated Signature signatures = 2
|
||||
[(gogoproto.nullable) = false, (gogoproto.moretags) = "json:\"signatures\" yaml:\"signatures\""];
|
||||
}
|
||||
|
||||
// MsgSetName
|
||||
@@ -93,7 +91,7 @@ message MsgReserveAuthority {
|
||||
// MsgReserveNameResponse
|
||||
message MsgReserveAuthorityResponse {}
|
||||
|
||||
// MsgSetAuthorityBond
|
||||
// MsgSetAuthorityBond is SDK message for SetAuthorityBond
|
||||
message MsgSetAuthorityBond {
|
||||
string name = 1;
|
||||
string bond_id = 2 [(gogoproto.moretags) = "json:\"bondId\" yaml:\"bondId\""];
|
||||
@@ -103,7 +101,7 @@ message MsgSetAuthorityBond {
|
||||
// MsgSetAuthorityBondResponse
|
||||
message MsgSetAuthorityBondResponse {}
|
||||
|
||||
// MsgDeleteNameAuthority
|
||||
// MsgDeleteNameAuthority is SDK message for DeleteNameAuthority
|
||||
message MsgDeleteNameAuthority {
|
||||
string crn = 1;
|
||||
string signer = 2;
|
||||
@@ -112,7 +110,7 @@ message MsgDeleteNameAuthority {
|
||||
// MsgDeleteNameAuthorityResponse
|
||||
message MsgDeleteNameAuthorityResponse {}
|
||||
|
||||
// MsgRenewRecord
|
||||
// MsgRenewRecord is SDK message for Renew a record
|
||||
message MsgRenewRecord {
|
||||
string record_id = 1 [(gogoproto.moretags) = "json:\"recordId\" yaml:\"recordId\""];
|
||||
string signer = 2;
|
||||
@@ -131,30 +129,30 @@ message MsgAssociateBond {
|
||||
// MsgAssociateBondResponse
|
||||
message MsgAssociateBondResponse {}
|
||||
|
||||
// MsgDissociateBond
|
||||
// MsgDissociateBond is SDK message for Msg/DissociateBond
|
||||
message MsgDissociateBond {
|
||||
string record_id = 1 [(gogoproto.moretags) = "json:\"recordId\" yaml:\"recordId\""];
|
||||
string signer = 2;
|
||||
}
|
||||
|
||||
// MsgDissociateBondResponse
|
||||
// MsgDissociateBondResponse is response type for MsgDissociateBond
|
||||
message MsgDissociateBondResponse {}
|
||||
|
||||
// MsgDissociateRecords
|
||||
// MsgDissociateRecords is SDK message for Msg/DissociateRecords
|
||||
message MsgDissociateRecords {
|
||||
string bond_id = 1 [(gogoproto.moretags) = "json:\"bondId\" yaml:\"bondId\""];
|
||||
string signer = 2;
|
||||
}
|
||||
|
||||
// MsgDissociateRecordsResponse
|
||||
// MsgDissociateRecordsResponse is response type for MsgDissociateRecords
|
||||
message MsgDissociateRecordsResponse {}
|
||||
|
||||
// MsgReAssociateRecords
|
||||
// MsgReAssociateRecords is SDK message for Msg/ReAssociateRecords
|
||||
message MsgReAssociateRecords {
|
||||
string new_bond_id = 1 [(gogoproto.moretags) = "json:\"newBondId\" yaml:\"newBondId\""];
|
||||
string old_bond_id = 2 [(gogoproto.moretags) = "json:\"oldBondId\" yaml:\"oldBondId\""];
|
||||
string signer = 3;
|
||||
}
|
||||
|
||||
// MsgReAssociateRecordsResponse
|
||||
// MsgReAssociateRecordsResponse is response type for MsgReAssociateRecords
|
||||
message MsgReAssociateRecordsResponse {}
|
||||
|
||||
@@ -1,52 +0,0 @@
|
||||
# Originally from: https://github.com/devcontainers/images/blob/main/src/javascript-node/.devcontainer/Dockerfile
|
||||
# [Choice] Node.js version (use -bullseye variants on local arm64/Apple Silicon): 18, 16, 14, 18-bullseye, 16-bullseye, 14-bullseye, 18-buster, 16-buster, 14-buster
|
||||
ARG VARIANT=16-bullseye
|
||||
FROM node:${VARIANT}
|
||||
|
||||
ARG USERNAME=node
|
||||
ARG NPM_GLOBAL=/usr/local/share/npm-global
|
||||
|
||||
# Add NPM global to PATH.
|
||||
ENV PATH=${NPM_GLOBAL}/bin:${PATH}
|
||||
|
||||
RUN \
|
||||
# Configure global npm install location, use group to adapt to UID/GID changes
|
||||
if ! cat /etc/group | grep -e "^npm:" > /dev/null 2>&1; then groupadd -r npm; fi \
|
||||
&& usermod -a -G npm ${USERNAME} \
|
||||
&& umask 0002 \
|
||||
&& mkdir -p ${NPM_GLOBAL} \
|
||||
&& touch /usr/local/etc/npmrc \
|
||||
&& chown ${USERNAME}:npm ${NPM_GLOBAL} /usr/local/etc/npmrc \
|
||||
&& chmod g+s ${NPM_GLOBAL} \
|
||||
&& npm config -g set prefix ${NPM_GLOBAL} \
|
||||
&& su ${USERNAME} -c "npm config -g set prefix ${NPM_GLOBAL}" \
|
||||
# Install eslint
|
||||
&& su ${USERNAME} -c "umask 0002 && npm install -g eslint" \
|
||||
&& npm cache clean --force > /dev/null 2>&1
|
||||
|
||||
# [Optional] Uncomment this section to install additional OS packages.
|
||||
# RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \
|
||||
# && apt-get -y install --no-install-recommends <your-package-list-here>
|
||||
|
||||
# [Optional] Uncomment if you want to install an additional version of node using nvm
|
||||
# ARG EXTRA_NODE_VERSION=10
|
||||
# RUN su node -c "source /usr/local/share/nvm/nvm.sh && nvm install ${EXTRA_NODE_VERSION}"
|
||||
|
||||
# [Optional] Uncomment if you want to install more global node modules
|
||||
# RUN su node -c "npm install -g <your-package-list-here>"
|
||||
|
||||
WORKDIR /
|
||||
COPY entrypoint.sh .
|
||||
ENTRYPOINT ["/entrypoint.sh"]
|
||||
# Placeholder CMD : generally this will be overridden at run time like :
|
||||
# docker run -it -v /home/builder/cerc/laconic-sdk:/workspace cerc/builder-js sh -c 'cd /workspace && yarn && yarn build'
|
||||
CMD node --version
|
||||
|
||||
# Temp hack, clone the laconic-sdk repo here
|
||||
WORKDIR /app
|
||||
RUN \
|
||||
git clone https://github.com/cerc-io/laconic-sdk.git \
|
||||
&& cd laconic-sdk \
|
||||
&& yarn install
|
||||
|
||||
WORKDIR /app/laconic-sdk
|
||||
@@ -1,3 +1,2 @@
|
||||
#!/usr/bin/env bash
|
||||
docker build -t cerc-io/laconicd:local-test ../../
|
||||
|
||||
docker build -t cerc/laconicd:local ../.. --progress=plain
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
docker build -t cerc-io/laconic-sdk-tester:local-test -f Dockerfile-sdk .
|
||||
|
||||
@@ -1,31 +0,0 @@
|
||||
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
|
||||
@@ -1,31 +0,0 @@
|
||||
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
|
||||
@@ -1,10 +1,14 @@
|
||||
services:
|
||||
laconicd:
|
||||
restart: unless-stopped
|
||||
image: cerc-io/laconicd:local-test
|
||||
command: ["sh", "/docker-entrypoint-scripts.d/create-fixturenet.sh"]
|
||||
image: cerc/laconicd:local
|
||||
entrypoint: ["sh", "/docker-entrypoint-scripts.d/create-fixturenet.sh"]
|
||||
environment:
|
||||
- TEST_AUCTION_ENABLED
|
||||
- TEST_REGISTRY_EXPIRY
|
||||
- LOGLEVEL
|
||||
volumes:
|
||||
- ../../init.sh:/docker-entrypoint-scripts.d/create-fixturenet.sh
|
||||
- ../../init.sh:/docker-entrypoint-scripts.d/create-fixturenet.sh
|
||||
healthcheck:
|
||||
test: ["CMD", "curl", "-v", "http://127.0.0.1:6060"]
|
||||
interval: 1s
|
||||
@@ -22,7 +26,7 @@ services:
|
||||
- "1317"
|
||||
|
||||
sdk-test-runner:
|
||||
image: cerc-io/laconic-sdk-tester:local-test
|
||||
image: cerc/laconic-sdk-tester:local
|
||||
depends_on:
|
||||
laconicd:
|
||||
condition: service_healthy
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
#!/bin/sh
|
||||
exec "$@"
|
||||
|
||||
@@ -1,16 +0,0 @@
|
||||
#!/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"
|
||||
@@ -1,16 +0,0 @@
|
||||
#!/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"
|
||||
@@ -1,18 +1,26 @@
|
||||
#!/usr/bin/env bash
|
||||
# Forwards all args to yarn on the sdk-test-runner container
|
||||
|
||||
if [ -n "$CERC_SCRIPT_DEBUG" ]; then
|
||||
set -x
|
||||
fi
|
||||
|
||||
yarn_args=("--inspect-brk=8888")
|
||||
yarn_args+=("${@:-test}")
|
||||
|
||||
# Get the key from laconicd
|
||||
laconicd_key=$( docker compose exec laconicd echo y | docker compose exec laconicd laconicd keys export mykey --unarmored-hex --unsafe )
|
||||
laconicd_key=$(
|
||||
yes | 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 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"
|
||||
# Run tests
|
||||
docker compose exec \
|
||||
-e COSMOS_CHAIN_ID="$cosmos_chain_id" \
|
||||
-e LACONICD_REST_ENDPOINT="$laconicd_rest_endpoint" \
|
||||
-e LACONICD_GQL_ENDPOINT="$laconicd_gql_endpoint" \
|
||||
-e PRIVATE_KEY="$laconicd_key" \
|
||||
sdk-test-runner yarn run "${yarn_args[@]}"
|
||||
|
||||
@@ -519,6 +519,7 @@ func New(l Logger, baseDir string, cfg Config) (*Network, error) {
|
||||
|
||||
l.Log("starting test network...")
|
||||
for _, v := range network.Validators {
|
||||
l.Log("starting validator:", v.Moniker)
|
||||
err := startInProcess(cfg, v)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
||||
@@ -161,9 +161,9 @@ $ %s query %s list
|
||||
}
|
||||
|
||||
recordsList := res.GetRecords()
|
||||
records := make([]types.ReadableRecord, len(recordsList))
|
||||
records := make([]types.RecordType, len(recordsList))
|
||||
for i, record := range res.GetRecords() {
|
||||
records[i] = record.ToReadableRecord()
|
||||
records[i] = record.ToRecordType()
|
||||
}
|
||||
bytesResult, err := json.Marshal(records)
|
||||
if err != nil {
|
||||
|
||||
@@ -66,10 +66,13 @@ $ %s tx %s set [payload file path] [bond-id]
|
||||
return err
|
||||
}
|
||||
|
||||
payload := payloadType.ToPayload()
|
||||
payload, err := payloadType.ToPayload()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
msg := types.NewMsgSetRecord(payload, args[1], clientCtx.GetFromAddress())
|
||||
return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg)
|
||||
return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), &msg)
|
||||
},
|
||||
}
|
||||
|
||||
@@ -262,7 +265,7 @@ $ %s tx %s set-name [crn] [cid]
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg)
|
||||
return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), &msg)
|
||||
},
|
||||
}
|
||||
|
||||
@@ -370,8 +373,8 @@ $ %s tx %s delete-name [crn]
|
||||
}
|
||||
|
||||
// GetPayloadFromFile Load payload object from YAML file.
|
||||
func GetPayloadFromFile(filePath string) (*types.ReadablePayload, error) {
|
||||
var payload types.ReadablePayload
|
||||
func GetPayloadFromFile(filePath string) (*types.PayloadType, error) {
|
||||
var payload types.PayloadType
|
||||
|
||||
data, err := os.ReadFile(filePath) // #nosec G304
|
||||
if err != nil {
|
||||
|
||||
@@ -42,7 +42,8 @@ func (s *IntegrationTestSuite) TestGRPCQueryParams() {
|
||||
|
||||
for _, tc := range testCases {
|
||||
s.Run(tc.name, func() {
|
||||
resp, _ := rest.GetRequest(tc.url)
|
||||
resp, err := rest.GetRequest(tc.url)
|
||||
s.NoError(err)
|
||||
require := s.Require()
|
||||
if tc.expectErr {
|
||||
require.Contains(string(resp), tc.errorMsg)
|
||||
@@ -110,11 +111,11 @@ func (s *IntegrationTestSuite) TestGRPCQueryWhoIs() {
|
||||
|
||||
for _, tc := range testCases {
|
||||
s.Run(tc.name, func() {
|
||||
if !tc.expectErr {
|
||||
tc.preRun(authorityName)
|
||||
tc.url = fmt.Sprintf(tc.url, authorityName)
|
||||
}
|
||||
resp, _ := rest.GetRequest(tc.url)
|
||||
tc.preRun(authorityName)
|
||||
tc.url = fmt.Sprintf(tc.url, authorityName)
|
||||
|
||||
resp, err := rest.GetRequest(tc.url)
|
||||
s.NoError(err)
|
||||
require := s.Require()
|
||||
if tc.expectErr {
|
||||
require.Contains(string(resp), tc.errorMsg)
|
||||
@@ -131,7 +132,7 @@ func (s *IntegrationTestSuite) TestGRPCQueryWhoIs() {
|
||||
func (s *IntegrationTestSuite) TestGRPCQueryLookup() {
|
||||
val := s.network.Validators[0]
|
||||
sr := s.Require()
|
||||
reqURL := val.APIAddress + "/vulcanize/registry/v1beta1/lookup?crn=%s"
|
||||
reqURL := val.APIAddress + "/vulcanize/registry/v1beta1/lookup"
|
||||
authorityName := "QueryLookUp"
|
||||
|
||||
testCases := []struct {
|
||||
@@ -151,7 +152,7 @@ func (s *IntegrationTestSuite) TestGRPCQueryLookup() {
|
||||
},
|
||||
{
|
||||
"Success",
|
||||
reqURL,
|
||||
fmt.Sprintf(reqURL+"?crn=crn://%s/", authorityName),
|
||||
false,
|
||||
"",
|
||||
func(authorityName string) {
|
||||
@@ -163,11 +164,9 @@ func (s *IntegrationTestSuite) TestGRPCQueryLookup() {
|
||||
|
||||
for _, tc := range testCases {
|
||||
s.Run(tc.name, func() {
|
||||
if !tc.expectErr {
|
||||
tc.preRun(authorityName)
|
||||
tc.url = fmt.Sprintf(reqURL, fmt.Sprintf("crn://%s/", authorityName))
|
||||
}
|
||||
resp, _ := rest.GetRequest(tc.url)
|
||||
tc.preRun(authorityName)
|
||||
resp, err := rest.GetRequest(tc.url)
|
||||
s.NoError(err)
|
||||
if tc.expectErr {
|
||||
sr.Contains(string(resp), tc.errorMsg)
|
||||
} else {
|
||||
@@ -233,12 +232,11 @@ func (s *IntegrationTestSuite) TestGRPCQueryRecordExpiryQueue() {
|
||||
|
||||
for _, tc := range testCases {
|
||||
s.Run(tc.name, func() {
|
||||
if !tc.expectErr {
|
||||
tc.preRun(s.bondID)
|
||||
}
|
||||
tc.preRun(s.bondID)
|
||||
// wait 12 seconds for records expires
|
||||
time.Sleep(time.Second * 12)
|
||||
resp, _ := rest.GetRequest(tc.url)
|
||||
resp, err := rest.GetRequest(tc.url)
|
||||
s.NoError(err)
|
||||
require := s.Require()
|
||||
if tc.expectErr {
|
||||
require.Contains(string(resp), tc.errorMsg)
|
||||
@@ -303,13 +301,12 @@ func (s *IntegrationTestSuite) TestGRPCQueryAuthorityExpiryQueue() {
|
||||
|
||||
for _, tc := range testCases {
|
||||
s.Run(tc.name, func() {
|
||||
if !tc.expectErr {
|
||||
tc.preRun("QueryAuthorityExpiryQueue")
|
||||
}
|
||||
tc.preRun("QueryAuthorityExpiryQueue")
|
||||
// wait 12 seconds to name authorites expires
|
||||
time.Sleep(time.Second * 12)
|
||||
|
||||
resp, _ := rest.GetRequest(tc.url)
|
||||
resp, err := rest.GetRequest(tc.url)
|
||||
s.NoError(err)
|
||||
require := s.Require()
|
||||
if tc.expectErr {
|
||||
require.Contains(string(resp), tc.errorMsg)
|
||||
@@ -377,10 +374,9 @@ func (s *IntegrationTestSuite) TestGRPCQueryListRecords() {
|
||||
|
||||
for _, tc := range testCases {
|
||||
s.Run(tc.name, func() {
|
||||
if !tc.expectErr {
|
||||
tc.preRun(s.bondID)
|
||||
}
|
||||
resp, _ := rest.GetRequest(tc.url)
|
||||
tc.preRun(s.bondID)
|
||||
resp, err := rest.GetRequest(tc.url)
|
||||
s.NoError(err)
|
||||
require := s.Require()
|
||||
if tc.expectErr {
|
||||
require.Contains(string(resp), tc.errorMsg)
|
||||
@@ -433,7 +429,7 @@ func (s *IntegrationTestSuite) TestGRPCQueryGetRecordByID() {
|
||||
}
|
||||
out, err := clitestutil.ExecTestCLICmd(clientCtx, cmd, args)
|
||||
sr.NoError(err)
|
||||
var records []nstypes.ReadableRecord
|
||||
var records []nstypes.RecordType
|
||||
err = json.Unmarshal(out.Bytes(), &records)
|
||||
sr.NoError(err)
|
||||
return records[0].ID
|
||||
@@ -443,12 +439,11 @@ func (s *IntegrationTestSuite) TestGRPCQueryGetRecordByID() {
|
||||
|
||||
for _, tc := range testCases {
|
||||
s.Run(tc.name, func() {
|
||||
var recordID string
|
||||
if !tc.expectErr {
|
||||
recordID = tc.preRun(s.bondID)
|
||||
tc.url = fmt.Sprintf(reqURL, recordID)
|
||||
}
|
||||
resp, _ := rest.GetRequest(tc.url)
|
||||
recordID := tc.preRun(s.bondID)
|
||||
tc.url = fmt.Sprintf(reqURL, recordID)
|
||||
|
||||
resp, err := rest.GetRequest(tc.url)
|
||||
s.NoError(err)
|
||||
require := s.Require()
|
||||
if tc.expectErr {
|
||||
require.Contains(string(resp), tc.errorMsg)
|
||||
@@ -498,11 +493,11 @@ func (s *IntegrationTestSuite) TestGRPCQueryGetRecordByBondID() {
|
||||
|
||||
for _, tc := range testCases {
|
||||
s.Run(tc.name, func() {
|
||||
if !tc.expectErr {
|
||||
tc.preRun(s.bondID)
|
||||
tc.url = fmt.Sprintf(reqURL, s.bondID)
|
||||
}
|
||||
resp, _ := rest.GetRequest(tc.url)
|
||||
tc.preRun(s.bondID)
|
||||
tc.url = fmt.Sprintf(reqURL, s.bondID)
|
||||
|
||||
resp, err := rest.GetRequest(tc.url)
|
||||
s.NoError(err)
|
||||
require := s.Require()
|
||||
if tc.expectErr {
|
||||
require.Contains(string(resp), tc.errorMsg)
|
||||
@@ -552,10 +547,9 @@ func (s *IntegrationTestSuite) TestGRPCQueryGetRegistryModuleBalance() {
|
||||
|
||||
for _, tc := range testCases {
|
||||
s.Run(tc.name, func() {
|
||||
if !tc.expectErr {
|
||||
tc.preRun(s.bondID)
|
||||
}
|
||||
resp, _ := rest.GetRequest(tc.url)
|
||||
tc.preRun(s.bondID)
|
||||
resp, err := rest.GetRequest(tc.url)
|
||||
s.NoError(err)
|
||||
require := s.Require()
|
||||
if tc.expectErr {
|
||||
require.Contains(string(resp), tc.errorMsg)
|
||||
@@ -603,10 +597,9 @@ func (s *IntegrationTestSuite) TestGRPCQueryNamesList() {
|
||||
|
||||
for _, tc := range testCases {
|
||||
s.Run(tc.name, func() {
|
||||
if !tc.expectErr {
|
||||
tc.preRun("ListNameRecords")
|
||||
}
|
||||
resp, _ := rest.GetRequest(tc.url)
|
||||
tc.preRun("ListNameRecords")
|
||||
resp, err := rest.GetRequest(tc.url)
|
||||
s.NoError(err)
|
||||
require := s.Require()
|
||||
if tc.expectErr {
|
||||
require.Contains(string(resp), tc.errorMsg)
|
||||
@@ -643,5 +636,5 @@ func createRecord(bondID string, s *IntegrationTestSuite) {
|
||||
var d sdk.TxResponse
|
||||
err = val.ClientCtx.Codec.UnmarshalJSON(out.Bytes(), &d)
|
||||
sr.NoError(err)
|
||||
sr.Zero(d.Code)
|
||||
sr.Zero(d.Code, d.RawLog)
|
||||
}
|
||||
|
||||
@@ -114,7 +114,7 @@ func (s *IntegrationTestSuite) TestGetCmdQueryForRecords() {
|
||||
sr.Error(err)
|
||||
} else {
|
||||
sr.NoError(err)
|
||||
var records []types.ReadableRecord
|
||||
var records []types.RecordType
|
||||
err := json.Unmarshal(out.Bytes(), &records)
|
||||
sr.NoError(err)
|
||||
sr.Equal(tc.noOfRecords, len(records))
|
||||
@@ -538,9 +538,6 @@ func createNameRecord(authorityName string, s *IntegrationTestSuite) {
|
||||
sr.NoError(err)
|
||||
sr.Zero(d.Code)
|
||||
|
||||
// creating the bond
|
||||
CreateBond(s)
|
||||
|
||||
// Get the bond-id
|
||||
bondID := GetBondID(s)
|
||||
|
||||
|
||||
@@ -101,42 +101,23 @@ func CreateBond(s *IntegrationTestSuite) {
|
||||
val := s.network.Validators[0]
|
||||
sr := s.Require()
|
||||
|
||||
testCases := []struct {
|
||||
name string
|
||||
args []string
|
||||
err bool
|
||||
}{
|
||||
{
|
||||
"create bond",
|
||||
[]string{
|
||||
fmt.Sprintf("100000000000%s", s.cfg.BondDenom),
|
||||
fmt.Sprintf("--%s=%s", flags.FlagFrom, accountName),
|
||||
fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation),
|
||||
fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock),
|
||||
fmt.Sprintf("--%s=json", tmcli.OutputFlag),
|
||||
fmt.Sprintf("--%s=%s", flags.FlagFees, fmt.Sprintf("3%s", s.cfg.BondDenom)),
|
||||
},
|
||||
false,
|
||||
},
|
||||
clientCtx := val.ClientCtx
|
||||
cmd := bondcli.NewCreateBondCmd()
|
||||
args := []string{
|
||||
fmt.Sprintf("100000000000%s", s.cfg.BondDenom),
|
||||
fmt.Sprintf("--%s=%s", flags.FlagFrom, accountName),
|
||||
fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation),
|
||||
fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock),
|
||||
fmt.Sprintf("--%s=json", tmcli.OutputFlag),
|
||||
fmt.Sprintf("--%s=%s", flags.FlagFees, fmt.Sprintf("3%s", s.cfg.BondDenom)),
|
||||
}
|
||||
out, err := clitestutil.ExecTestCLICmd(clientCtx, cmd, args)
|
||||
sr.NoError(err)
|
||||
|
||||
for _, tc := range testCases {
|
||||
s.Run(fmt.Sprintf("Case %s", tc.name), func() {
|
||||
clientCtx := val.ClientCtx
|
||||
cmd := bondcli.NewCreateBondCmd()
|
||||
|
||||
out, err := clitestutil.ExecTestCLICmd(clientCtx, cmd, tc.args)
|
||||
if tc.err {
|
||||
sr.Error(err)
|
||||
} else {
|
||||
sr.NoError(err)
|
||||
var d sdk.TxResponse
|
||||
err = val.ClientCtx.Codec.UnmarshalJSON(out.Bytes(), &d)
|
||||
sr.NoError(err)
|
||||
sr.Zero(d.Code)
|
||||
}
|
||||
})
|
||||
}
|
||||
var d sdk.TxResponse
|
||||
err = val.ClientCtx.Codec.UnmarshalJSON(out.Bytes(), &d)
|
||||
sr.NoError(err)
|
||||
sr.Zero(d.Code)
|
||||
}
|
||||
|
||||
func GetBondID(s *IntegrationTestSuite) string {
|
||||
@@ -160,6 +141,11 @@ func (s *IntegrationTestSuite) TestGetCmdSetRecord() {
|
||||
val := s.network.Validators[0]
|
||||
sr := s.Require()
|
||||
|
||||
bondID := GetBondID(s)
|
||||
dir, err := os.Getwd()
|
||||
sr.NoError(err)
|
||||
payloadPath := dir + "/service_provider_example.yml"
|
||||
|
||||
testCases := []struct {
|
||||
name string
|
||||
args []string
|
||||
@@ -179,6 +165,7 @@ func (s *IntegrationTestSuite) TestGetCmdSetRecord() {
|
||||
{
|
||||
"success",
|
||||
[]string{
|
||||
payloadPath, bondID,
|
||||
fmt.Sprintf("--%s=%s", flags.FlagFrom, accountName),
|
||||
fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation),
|
||||
fmt.Sprintf("--%s=json", tmcli.OutputFlag),
|
||||
@@ -191,17 +178,6 @@ func (s *IntegrationTestSuite) TestGetCmdSetRecord() {
|
||||
|
||||
for _, tc := range testCases {
|
||||
s.Run(fmt.Sprintf("Case %s", tc.name), func() {
|
||||
if !tc.err {
|
||||
// create the bond
|
||||
CreateBond(s)
|
||||
// get the bond id from bond list
|
||||
bondID := GetBondID(s)
|
||||
dir, err := os.Getwd()
|
||||
sr.NoError(err)
|
||||
payloadPath := dir + "/service_provider_example.yml"
|
||||
|
||||
tc.args = append([]string{payloadPath, bondID}, tc.args...)
|
||||
}
|
||||
clientCtx := val.ClientCtx
|
||||
cmd := cli.GetCmdSetRecord()
|
||||
|
||||
@@ -341,9 +317,6 @@ func (s *IntegrationTestSuite) TestGetCmdSetName() {
|
||||
sr.NoError(err)
|
||||
sr.Zero(d.Code)
|
||||
|
||||
// creating the bond
|
||||
CreateBond(s)
|
||||
|
||||
// Get the bond-id
|
||||
bondID := GetBondID(s)
|
||||
|
||||
@@ -369,9 +342,7 @@ func (s *IntegrationTestSuite) TestGetCmdSetName() {
|
||||
|
||||
for _, tc := range testCases {
|
||||
s.Run(fmt.Sprintf("Case %s", tc.name), func() {
|
||||
if !tc.err {
|
||||
tc.preRun(authorityName)
|
||||
}
|
||||
tc.preRun(authorityName)
|
||||
|
||||
clientCtx := val.ClientCtx
|
||||
cmd := cli.GetCmdSetName()
|
||||
@@ -394,6 +365,7 @@ func (s *IntegrationTestSuite) TestGetCmdSetAuthorityBond() {
|
||||
val := s.network.Validators[0]
|
||||
sr := s.Require()
|
||||
authorityName := "TestGetCmdSetAuthorityBond"
|
||||
bondID := GetBondID(s)
|
||||
|
||||
testCases := []struct {
|
||||
name string
|
||||
@@ -417,6 +389,7 @@ func (s *IntegrationTestSuite) TestGetCmdSetAuthorityBond() {
|
||||
{
|
||||
"success with name and bond-id",
|
||||
[]string{
|
||||
authorityName, bondID,
|
||||
fmt.Sprintf("--%s=%s", flags.FlagFrom, accountName),
|
||||
fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation),
|
||||
fmt.Sprintf("--%s=json", tmcli.OutputFlag),
|
||||
@@ -449,15 +422,7 @@ func (s *IntegrationTestSuite) TestGetCmdSetAuthorityBond() {
|
||||
|
||||
for _, tc := range testCases {
|
||||
s.Run(fmt.Sprintf("Case %s", tc.name), func() {
|
||||
if !tc.err {
|
||||
// reserve the name
|
||||
tc.preRun(authorityName)
|
||||
// creating the bond
|
||||
CreateBond(s)
|
||||
// getting the bond-id
|
||||
bondID := GetBondID(s)
|
||||
tc.args = append([]string{authorityName, bondID}, tc.args...)
|
||||
}
|
||||
tc.preRun(authorityName)
|
||||
clientCtx := val.ClientCtx
|
||||
cmd := cli.GetCmdSetAuthorityBond()
|
||||
|
||||
@@ -501,6 +466,7 @@ func (s *IntegrationTestSuite) TestGetCmdDeleteName() {
|
||||
{
|
||||
"successfully delete name",
|
||||
[]string{
|
||||
fmt.Sprintf("crn://%s/", authorityName),
|
||||
fmt.Sprintf("--%s=%s", flags.FlagFrom, accountName),
|
||||
fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation),
|
||||
fmt.Sprintf("--%s=json", tmcli.OutputFlag),
|
||||
@@ -516,10 +482,8 @@ func (s *IntegrationTestSuite) TestGetCmdDeleteName() {
|
||||
|
||||
for _, tc := range testCasesForDeletingName {
|
||||
s.Run(fmt.Sprintf("Case %s", tc.name), func() {
|
||||
if !tc.err {
|
||||
tc.preRun(authorityName, s)
|
||||
tc.args = append([]string{fmt.Sprintf("crn://%s/", authorityName)}, tc.args...)
|
||||
}
|
||||
tc.preRun(authorityName, s)
|
||||
|
||||
clientCtx := val.ClientCtx
|
||||
cmd := cli.GetCmdDeleteName()
|
||||
|
||||
@@ -574,8 +538,6 @@ func (s *IntegrationTestSuite) TestGetCmdDissociateBond() {
|
||||
},
|
||||
false,
|
||||
func(s *IntegrationTestSuite) string {
|
||||
// create the bond
|
||||
CreateBond(s)
|
||||
// get the bond id from bond list
|
||||
bondID := GetBondID(s)
|
||||
dir, err := os.Getwd()
|
||||
@@ -606,7 +568,7 @@ func (s *IntegrationTestSuite) TestGetCmdDissociateBond() {
|
||||
cmd = cli.GetCmdList()
|
||||
out, err = clitestutil.ExecTestCLICmd(clientCtx, cmd, args)
|
||||
sr.NoError(err)
|
||||
var records []nstypes.ReadableRecord
|
||||
var records []nstypes.RecordType
|
||||
err = json.Unmarshal(out.Bytes(), &records)
|
||||
sr.NoError(err)
|
||||
return records[0].ID
|
||||
@@ -816,8 +778,6 @@ func (s *IntegrationTestSuite) TestGetCmdAssociateBond() {
|
||||
},
|
||||
false,
|
||||
func(s *IntegrationTestSuite) (string, string) {
|
||||
// create the bond
|
||||
CreateBond(s)
|
||||
// get the bond id from bond list
|
||||
bondID := GetBondID(s)
|
||||
dir, err := os.Getwd()
|
||||
@@ -848,7 +808,7 @@ func (s *IntegrationTestSuite) TestGetCmdAssociateBond() {
|
||||
cmd = cli.GetCmdList()
|
||||
out, err = clitestutil.ExecTestCLICmd(clientCtx, cmd, args)
|
||||
sr.NoError(err)
|
||||
var records []nstypes.ReadableRecord
|
||||
var records []nstypes.RecordType
|
||||
err = json.Unmarshal(out.Bytes(), &records)
|
||||
sr.NoError(err)
|
||||
|
||||
|
||||
@@ -106,7 +106,8 @@ func (suite *KeeperTestSuite) TestGrpcGetRecordLists() {
|
||||
sr.NoError(err)
|
||||
payloadType, err := cli.GetPayloadFromFile(fmt.Sprint(dir, example))
|
||||
sr.NoError(err)
|
||||
payload := payloadType.ToPayload()
|
||||
payload, err := payloadType.ToPayload()
|
||||
sr.NoError(err)
|
||||
record, err := suite.app.RegistryKeeper.ProcessSetRecord(ctx, registrytypes.MsgSetRecord{
|
||||
BondId: suite.bond.GetId(),
|
||||
Signer: suite.accounts[0].String(),
|
||||
@@ -128,7 +129,9 @@ func (suite *KeeperTestSuite) TestGrpcGetRecordLists() {
|
||||
sr.Equal(resp.GetRecords()[0].GetBondId(), suite.bond.GetId())
|
||||
|
||||
for _, record := range resp.GetRecords() {
|
||||
recAttr := helpers.UnMarshalMapFromJSONBytes(record.Attributes)
|
||||
bz, err := registrytypes.GetJSONBytesFromAny(*record.Attributes)
|
||||
sr.NoError(err)
|
||||
recAttr := helpers.UnMarshalMapFromJSONBytes(bz)
|
||||
for _, attr := range test.req.GetAttributes() {
|
||||
if attr.Key[:4] == "x500" {
|
||||
sr.Equal(keeper.GetAttributeValue(attr.Value), recAttr["x500"].(map[string]interface{})[attr.Key[4:]])
|
||||
@@ -255,7 +258,8 @@ func (suite *KeeperTestSuite) TestGrpcQueryRegistryModuleBalance() {
|
||||
for _, example := range examples {
|
||||
payloadType, err := cli.GetPayloadFromFile(fmt.Sprint(dir, example))
|
||||
sr.NoError(err)
|
||||
payload := payloadType.ToPayload()
|
||||
payload, err := payloadType.ToPayload()
|
||||
sr.NoError(err)
|
||||
record, err := suite.app.RegistryKeeper.ProcessSetRecord(ctx, registrytypes.MsgSetRecord{
|
||||
BondId: suite.bond.GetId(),
|
||||
Signer: suite.accounts[0].String(),
|
||||
|
||||
+57
-37
@@ -112,8 +112,7 @@ func (k Keeper) GetRecord(ctx sdk.Context, id string) (record types.Record) {
|
||||
store := ctx.KVStore(k.storeKey)
|
||||
result := store.Get(GetRecordIndexKey(id))
|
||||
k.cdc.MustUnmarshal(result, &record)
|
||||
decodeRecordNames(store, &record)
|
||||
return record
|
||||
return recordObjToRecord(store, record)
|
||||
}
|
||||
|
||||
// ListRecords - get all records.
|
||||
@@ -126,17 +125,15 @@ func (k Keeper) ListRecords(ctx sdk.Context) []types.Record {
|
||||
for ; itr.Valid(); itr.Next() {
|
||||
bz := store.Get(itr.Key())
|
||||
if bz != nil {
|
||||
var record types.Record
|
||||
k.cdc.MustUnmarshal(bz, &record)
|
||||
decodeRecordNames(store, &record)
|
||||
records = append(records, record)
|
||||
var obj types.Record
|
||||
k.cdc.MustUnmarshal(bz, &obj)
|
||||
records = append(records, recordObjToRecord(store, obj))
|
||||
}
|
||||
}
|
||||
|
||||
return records
|
||||
}
|
||||
|
||||
// RecordsFromAttributes gets a list of records whose attributes match all provided values
|
||||
func (k Keeper) RecordsFromAttributes(ctx sdk.Context, attributes []*types.QueryListRecordsRequest_KeyValueInput, all bool) ([]types.Record, error) {
|
||||
resultRecordIds := []string{}
|
||||
for i, attr := range attributes {
|
||||
@@ -160,11 +157,11 @@ func (k Keeper) RecordsFromAttributes(ctx sdk.Context, attributes []*types.Query
|
||||
continue
|
||||
}
|
||||
store := ctx.KVStore(k.storeKey)
|
||||
decodeRecordNames(store, &record)
|
||||
if !all && len(record.Names) == 0 {
|
||||
recordWithNames := recordObjToRecord(store, record)
|
||||
if !all && len(recordWithNames.Names) == 0 {
|
||||
continue
|
||||
}
|
||||
records = append(records, record)
|
||||
records = append(records, recordWithNames)
|
||||
}
|
||||
return records, nil
|
||||
}
|
||||
@@ -236,9 +233,9 @@ func (k Keeper) GetRecordExpiryQueue(ctx sdk.Context) []*types.ExpiryQueueRecord
|
||||
}
|
||||
|
||||
// ProcessSetRecord creates a record.
|
||||
func (k Keeper) ProcessSetRecord(ctx sdk.Context, msg types.MsgSetRecord) (*types.ReadableRecord, error) {
|
||||
func (k Keeper) ProcessSetRecord(ctx sdk.Context, msg types.MsgSetRecord) (*types.RecordType, error) {
|
||||
payload := msg.Payload.ToReadablePayload()
|
||||
record := types.ReadableRecord{Attributes: payload.Record, BondID: msg.BondId}
|
||||
record := types.RecordType{Attributes: payload.Record, BondID: msg.BondId}
|
||||
|
||||
// Check signatures.
|
||||
resourceSignBytes, _ := record.GetSignBytes()
|
||||
@@ -259,13 +256,13 @@ func (k Keeper) ProcessSetRecord(ctx sdk.Context, msg types.MsgSetRecord) (*type
|
||||
pubKey, err := legacy.PubKeyFromBytes(helpers.BytesFromBase64(sig.PubKey))
|
||||
if err != nil {
|
||||
fmt.Println("Error decoding pubKey from bytes: ", err)
|
||||
return nil, errorsmod.Wrap(sdkerrors.ErrUnauthorized, "Invalid public key.")
|
||||
return nil, errorsmod.Wrapf(sdkerrors.ErrUnauthorized, "Invalid public key: %s", err)
|
||||
}
|
||||
|
||||
sigOK := pubKey.VerifySignature(resourceSignBytes, helpers.BytesFromBase64(sig.Sig))
|
||||
if !sigOK {
|
||||
fmt.Println("Signature mismatch: ", sig.PubKey)
|
||||
return nil, errorsmod.Wrap(sdkerrors.ErrUnauthorized, "Invalid signature.")
|
||||
return nil, errorsmod.Wrapf(sdkerrors.ErrUnauthorized, "Invalid signature: %s", sig.PubKey)
|
||||
}
|
||||
record.Owners = append(record.Owners, pubKey.Address().String())
|
||||
}
|
||||
@@ -279,13 +276,11 @@ func (k Keeper) ProcessSetRecord(ctx sdk.Context, msg types.MsgSetRecord) (*type
|
||||
return &record, nil
|
||||
}
|
||||
|
||||
func (k Keeper) processRecord(ctx sdk.Context, record *types.ReadableRecord, isRenewal bool) error {
|
||||
func (k Keeper) processRecord(ctx sdk.Context, record *types.RecordType, isRenewal bool) error {
|
||||
params := k.GetParams(ctx)
|
||||
rent := params.RecordRent
|
||||
|
||||
err := k.bondKeeper.TransferCoinsToModuleAccount(
|
||||
ctx, record.BondID, types.RecordRentModuleAccountName, sdk.NewCoins(rent),
|
||||
)
|
||||
err := k.bondKeeper.TransferCoinsToModuleAccount(ctx, record.BondID, types.RecordRentModuleAccountName, sdk.NewCoins(rent))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -300,14 +295,7 @@ func (k Keeper) processRecord(ctx sdk.Context, record *types.ReadableRecord, isR
|
||||
}
|
||||
k.PutRecord(ctx, recordObj)
|
||||
|
||||
// TODO look up/validate record type here
|
||||
|
||||
if err := k.processAttributes(ctx, record.Attributes, record.ID, ""); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
expiryTimeKey := GetAttributesIndexKey(ExpiryTimeAttributeName, record.ExpiryTime)
|
||||
if err := k.SetAttributeMapping(ctx, expiryTimeKey, record.ID); err != nil {
|
||||
if err := k.ProcessAttributes(ctx, *record); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -328,17 +316,47 @@ func (k Keeper) PutRecord(ctx sdk.Context, record types.Record) {
|
||||
k.updateBlockChangeSetForRecord(ctx, record.Id)
|
||||
}
|
||||
|
||||
func (k Keeper) processAttributes(ctx sdk.Context, attrs map[string]any, id string, prefix string) error {
|
||||
for key, value := range attrs {
|
||||
if subRecord, ok := value.(map[string]any); ok {
|
||||
k.processAttributes(ctx, subRecord, id, key)
|
||||
} else {
|
||||
indexKey := GetAttributesIndexKey(prefix+key, value)
|
||||
if err := k.SetAttributeMapping(ctx, indexKey, id); err != nil {
|
||||
return err
|
||||
func (k Keeper) ProcessAttributes(ctx sdk.Context, record types.RecordType) error {
|
||||
switch record.Attributes["type"] {
|
||||
case "ServiceProviderRegistration":
|
||||
{
|
||||
// #nosec G705
|
||||
for key := range record.Attributes {
|
||||
if key == "x500" {
|
||||
// #nosec G705
|
||||
for x500Key, x500Val := range record.Attributes[key].(map[string]interface{}) {
|
||||
indexKey := GetAttributesIndexKey(fmt.Sprintf("x500%s", x500Key), x500Val)
|
||||
if err := k.SetAttributeMapping(ctx, indexKey, record.ID); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
} else {
|
||||
indexKey := GetAttributesIndexKey(key, record.Attributes[key])
|
||||
if err := k.SetAttributeMapping(ctx, indexKey, record.ID); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
case "WebsiteRegistrationRecord":
|
||||
{
|
||||
// #nosec G705
|
||||
for key := range record.Attributes {
|
||||
indexKey := GetAttributesIndexKey(key, record.Attributes[key])
|
||||
if err := k.SetAttributeMapping(ctx, indexKey, record.ID); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
default:
|
||||
return fmt.Errorf("unsupported record type %s", record.Attributes["type"])
|
||||
}
|
||||
|
||||
expiryTimeKey := GetAttributesIndexKey(ExpiryTimeAttributeName, record.ExpiryTime)
|
||||
if err := k.SetAttributeMapping(ctx, expiryTimeKey, record.ID); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -371,12 +389,12 @@ func (k Keeper) GetAttributeMapping(ctx sdk.Context, key []byte) ([]string, erro
|
||||
store := ctx.KVStore(k.storeKey)
|
||||
|
||||
if !store.Has(key) {
|
||||
return nil, fmt.Errorf("store doesn't have key")
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
var recordIds []string
|
||||
if err := json.Unmarshal(store.Get(key), &recordIds); err != nil {
|
||||
return nil, fmt.Errorf("cannot unmarshal byte array, error, %w", err)
|
||||
return nil, fmt.Errorf("cannont unmarshal byte array, error, %w", err)
|
||||
}
|
||||
|
||||
return recordIds, nil
|
||||
@@ -554,7 +572,7 @@ func (k Keeper) GetModuleBalances(ctx sdk.Context) []*types.AccountBalance {
|
||||
return balances
|
||||
}
|
||||
|
||||
func decodeRecordNames(store sdk.KVStore, record *types.Record) {
|
||||
func recordObjToRecord(store sdk.KVStore, record types.Record) types.Record {
|
||||
reverseNameIndexKey := GetCIDToNamesIndexKey(record.Id)
|
||||
|
||||
if store.Has(reverseNameIndexKey) {
|
||||
@@ -565,4 +583,6 @@ func decodeRecordNames(store sdk.KVStore, record *types.Record) {
|
||||
|
||||
record.Names = names
|
||||
}
|
||||
|
||||
return record
|
||||
}
|
||||
|
||||
@@ -25,11 +25,7 @@ func (m msgServer) SetRecord(c context.Context, msg *types.MsgSetRecord) (*types
|
||||
return nil, err
|
||||
}
|
||||
|
||||
record, err := m.Keeper.ProcessSetRecord(ctx, types.MsgSetRecord{
|
||||
BondId: msg.GetBondId(),
|
||||
Signer: msg.GetSigner(),
|
||||
Payload: msg.GetPayload(),
|
||||
})
|
||||
record, err := m.Keeper.ProcessSetRecord(ctx, *msg)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -51,7 +47,7 @@ func (m msgServer) SetRecord(c context.Context, msg *types.MsgSetRecord) (*types
|
||||
return &types.MsgSetRecordResponse{Id: record.ID}, nil
|
||||
}
|
||||
|
||||
//nolint: all
|
||||
// nolint: all
|
||||
func (m msgServer) SetName(c context.Context, msg *types.MsgSetName) (*types.MsgSetNameResponse, error) {
|
||||
ctx := sdk.UnwrapSDKContext(c)
|
||||
_, err := sdk.AccAddressFromBech32(msg.Signer)
|
||||
@@ -108,7 +104,7 @@ func (m msgServer) ReserveName(c context.Context, msg *types.MsgReserveAuthority
|
||||
return &types.MsgReserveAuthorityResponse{}, nil
|
||||
}
|
||||
|
||||
//nolint: all
|
||||
// nolint: all
|
||||
func (m msgServer) SetAuthorityBond(c context.Context, msg *types.MsgSetAuthorityBond) (*types.MsgSetAuthorityBondResponse, error) {
|
||||
ctx := sdk.UnwrapSDKContext(c)
|
||||
_, err := sdk.AccAddressFromBech32(msg.Signer)
|
||||
@@ -185,7 +181,7 @@ func (m msgServer) RenewRecord(c context.Context, msg *types.MsgRenewRecord) (*t
|
||||
return &types.MsgRenewRecordResponse{}, nil
|
||||
}
|
||||
|
||||
//nolint: all
|
||||
// nolint: all
|
||||
func (m msgServer) AssociateBond(c context.Context, msg *types.MsgAssociateBond) (*types.MsgAssociateBondResponse, error) {
|
||||
ctx := sdk.UnwrapSDKContext(c)
|
||||
_, err := sdk.AccAddressFromBech32(msg.Signer)
|
||||
|
||||
@@ -147,10 +147,9 @@ func (k RecordKeeper) QueryRecordsByBond(ctx sdk.Context, bondID string) []types
|
||||
cid := itr.Key()[len(bondIDPrefix):]
|
||||
bz := store.Get(append(PrefixCIDToRecordIndex, cid...))
|
||||
if bz != nil {
|
||||
var record types.Record
|
||||
k.cdc.MustUnmarshal(bz, &record)
|
||||
decodeRecordNames(store, &record)
|
||||
records = append(records, record)
|
||||
var obj types.Record
|
||||
k.cdc.MustUnmarshal(bz, &obj)
|
||||
records = append(records, recordObjToRecord(store, obj))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -174,7 +173,7 @@ func (k Keeper) ProcessRenewRecord(ctx sdk.Context, msg types.MsgRenewRecord) er
|
||||
return errorsmod.Wrap(sdkerrors.ErrInvalidRequest, "Renewal not required.")
|
||||
}
|
||||
|
||||
recordType := record.ToReadableRecord()
|
||||
recordType := record.ToRecordType()
|
||||
err = k.processRecord(ctx, &recordType, true)
|
||||
if err != nil {
|
||||
return err
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
package types
|
||||
|
||||
type Attributes interface {
|
||||
GetType() string
|
||||
}
|
||||
Generated
+1412
File diff suppressed because it is too large
Load Diff
@@ -39,6 +39,17 @@ func RegisterInterfaces(registry types.InterfaceRegistry) {
|
||||
&MsgReAssociateRecords{},
|
||||
)
|
||||
|
||||
registry.RegisterInterface(
|
||||
"vulcanize.registry.v1beta1.ServiceProvideRegistration",
|
||||
(*Attributes)(nil),
|
||||
&ServiceProviderRegistration{},
|
||||
)
|
||||
|
||||
registry.RegisterInterface(
|
||||
"vulcanize.registry.v1beta1.WebsiteRegistrationRecord",
|
||||
(*Attributes)(nil),
|
||||
&WebsiteRegistrationRecord{},
|
||||
)
|
||||
msgservice.RegisterMsgServiceDesc(registry, &_Msg_serviceDesc)
|
||||
}
|
||||
|
||||
|
||||
@@ -16,8 +16,8 @@ var (
|
||||
)
|
||||
|
||||
// NewMsgSetName is the constructor function for MsgSetName.
|
||||
func NewMsgSetName(crn string, cid string, signer sdk.AccAddress) *MsgSetName {
|
||||
return &MsgSetName{
|
||||
func NewMsgSetName(crn string, cid string, signer sdk.AccAddress) MsgSetName {
|
||||
return MsgSetName{
|
||||
Crn: crn,
|
||||
Cid: cid,
|
||||
Signer: signer.String(),
|
||||
|
||||
@@ -2,6 +2,7 @@ package types
|
||||
|
||||
import (
|
||||
errorsmod "cosmossdk.io/errors"
|
||||
cdctypes "github.com/cosmos/cosmos-sdk/codec/types"
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
|
||||
)
|
||||
@@ -13,11 +14,13 @@ var (
|
||||
_ sdk.Msg = &MsgDissociateBond{}
|
||||
_ sdk.Msg = &MsgDissociateRecords{}
|
||||
_ sdk.Msg = &MsgReAssociateRecords{}
|
||||
|
||||
_ cdctypes.UnpackInterfacesMessage = &MsgSetRecord{}
|
||||
)
|
||||
|
||||
// NewMsgSetRecord is the constructor function for MsgSetRecord.
|
||||
func NewMsgSetRecord(payload Payload, bondID string, signer sdk.AccAddress) *MsgSetRecord {
|
||||
return &MsgSetRecord{
|
||||
func NewMsgSetRecord(payload Payload, bondID string, signer sdk.AccAddress) MsgSetRecord {
|
||||
return MsgSetRecord{
|
||||
Payload: payload,
|
||||
BondId: bondID,
|
||||
Signer: signer.String(),
|
||||
@@ -58,6 +61,12 @@ func (msg MsgSetRecord) GetSignBytes() []byte {
|
||||
return sdk.MustSortJSON(bz)
|
||||
}
|
||||
|
||||
// UnpackInterfaces implements UnpackInterfacesMessage.UnpackInterfaces
|
||||
func (msg MsgSetRecord) UnpackInterfaces(unpacker cdctypes.AnyUnpacker) error {
|
||||
var attr Attributes
|
||||
return unpacker.UnpackAny(msg.Payload.Record.Attributes, &attr)
|
||||
}
|
||||
|
||||
// NewMsgRenewRecord is the constructor function for MsgRenewRecord.
|
||||
func NewMsgRenewRecord(recordID string, signer sdk.AccAddress) MsgRenewRecord {
|
||||
return MsgRenewRecord{
|
||||
|
||||
Generated
+124
-116
@@ -5,7 +5,7 @@ package types
|
||||
|
||||
import (
|
||||
fmt "fmt"
|
||||
_ "github.com/cosmos/cosmos-sdk/codec/types"
|
||||
types1 "github.com/cosmos/cosmos-sdk/codec/types"
|
||||
types "github.com/cosmos/cosmos-sdk/types"
|
||||
_ "github.com/cosmos/gogoproto/gogoproto"
|
||||
proto "github.com/gogo/protobuf/proto"
|
||||
@@ -155,17 +155,17 @@ func (m *Params) GetAuthorityAuctionMinimumBid() types.Coin {
|
||||
return types.Coin{}
|
||||
}
|
||||
|
||||
// Record defines a registry record
|
||||
// Params defines the registry module records
|
||||
type Record struct {
|
||||
Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty" json:"id" yaml:"id"`
|
||||
BondId string `protobuf:"bytes,2,opt,name=bond_id,json=bondId,proto3" json:"bond_id,omitempty" json:"bondId" yaml:"bondId"`
|
||||
CreateTime string `protobuf:"bytes,3,opt,name=create_time,json=createTime,proto3" json:"create_time,omitempty" json:"createTime" yaml:"createTime"`
|
||||
ExpiryTime string `protobuf:"bytes,4,opt,name=expiry_time,json=expiryTime,proto3" json:"expiry_time,omitempty" json:"expiryTime" yaml:"expiryTime"`
|
||||
Deleted bool `protobuf:"varint,5,opt,name=deleted,proto3" json:"deleted,omitempty"`
|
||||
Owners []string `protobuf:"bytes,6,rep,name=owners,proto3" json:"owners,omitempty" json:"owners" yaml:"owners"`
|
||||
Attributes []byte `protobuf:"bytes,7,opt,name=attributes,proto3" json:"attributes,omitempty" json:"attributes" yaml:"attributes"`
|
||||
Names []string `protobuf:"bytes,8,rep,name=names,proto3" json:"names,omitempty" json:"names" yaml:"names"`
|
||||
Type string `protobuf:"bytes,9,opt,name=type,proto3" json:"type,omitempty" json:"types" yaml:"types"`
|
||||
Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty" json:"id" yaml:"id"`
|
||||
BondId string `protobuf:"bytes,2,opt,name=bond_id,json=bondId,proto3" json:"bond_id,omitempty" json:"bondId" yaml:"bondId"`
|
||||
CreateTime string `protobuf:"bytes,3,opt,name=create_time,json=createTime,proto3" json:"create_time,omitempty" json:"createTime" yaml:"createTime"`
|
||||
ExpiryTime string `protobuf:"bytes,4,opt,name=expiry_time,json=expiryTime,proto3" json:"expiry_time,omitempty" json:"expiryTime" yaml:"expiryTime"`
|
||||
Deleted bool `protobuf:"varint,5,opt,name=deleted,proto3" json:"deleted,omitempty"`
|
||||
Owners []string `protobuf:"bytes,6,rep,name=owners,proto3" json:"owners,omitempty" json:"owners" yaml:"owners"`
|
||||
Attributes *types1.Any `protobuf:"bytes,7,opt,name=attributes,proto3" json:"attributes,omitempty" json:"attributes" yaml:"attributes"`
|
||||
Names []string `protobuf:"bytes,8,rep,name=names,proto3" json:"names,omitempty" json:"names" yaml:"names"`
|
||||
Type string `protobuf:"bytes,9,opt,name=type,proto3" json:"type,omitempty" json:"types" yaml:"types"`
|
||||
}
|
||||
|
||||
func (m *Record) Reset() { *m = Record{} }
|
||||
@@ -243,7 +243,7 @@ func (m *Record) GetOwners() []string {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (m *Record) GetAttributes() []byte {
|
||||
func (m *Record) GetAttributes() *types1.Any {
|
||||
if m != nil {
|
||||
return m.Attributes
|
||||
}
|
||||
@@ -264,7 +264,7 @@ func (m *Record) GetType() string {
|
||||
return ""
|
||||
}
|
||||
|
||||
// AuthorityEntry defines a registry authority
|
||||
// AuthorityEntry defines the registry module AuthorityEntries
|
||||
type AuthorityEntry struct {
|
||||
Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
|
||||
Entry *NameAuthority `protobuf:"bytes,2,opt,name=entry,proto3" json:"entry,omitempty"`
|
||||
@@ -466,7 +466,7 @@ func (m *NameEntry) GetEntry() *NameRecord {
|
||||
return nil
|
||||
}
|
||||
|
||||
// NameRecord defines a versioned name record
|
||||
// NameRecord
|
||||
type NameRecord struct {
|
||||
Latest *NameRecordEntry `protobuf:"bytes,1,opt,name=latest,proto3" json:"latest,omitempty"`
|
||||
History []*NameRecordEntry `protobuf:"bytes,2,rep,name=history,proto3" json:"history,omitempty"`
|
||||
@@ -781,91 +781,92 @@ func init() {
|
||||
}
|
||||
|
||||
var fileDescriptor_5ca0f65a0e7121be = []byte{
|
||||
// 1344 bytes of a gzipped FileDescriptorProto
|
||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x57, 0xdd, 0x6e, 0x1b, 0xc5,
|
||||
0x17, 0xcf, 0xc6, 0x89, 0x13, 0x9f, 0x34, 0xf9, 0xff, 0x35, 0xa4, 0xad, 0x13, 0xa8, 0x37, 0x18,
|
||||
0x95, 0x36, 0x84, 0xda, 0x2a, 0xbd, 0x28, 0x9f, 0x42, 0xd9, 0x24, 0x0d, 0x11, 0x02, 0xc2, 0xb4,
|
||||
0x37, 0x20, 0x21, 0x6b, 0x76, 0x77, 0x6a, 0x0f, 0xf5, 0xee, 0x5a, 0xbb, 0xb3, 0xa5, 0xe6, 0x0e,
|
||||
0xf1, 0x02, 0xb9, 0xec, 0x05, 0x6f, 0x00, 0x12, 0x8f, 0x41, 0x2f, 0x7b, 0x89, 0x90, 0x30, 0xa8,
|
||||
0x79, 0x03, 0x3f, 0x01, 0xda, 0xf9, 0xd8, 0x2f, 0xdb, 0x75, 0xa1, 0x77, 0x73, 0xbe, 0x7e, 0xf3,
|
||||
0x9b, 0x33, 0xe7, 0x9c, 0xd9, 0x85, 0xdd, 0x87, 0x71, 0xdf, 0x21, 0x3e, 0xfb, 0x9e, 0xb6, 0x43,
|
||||
0xda, 0x65, 0x11, 0x0f, 0x87, 0xed, 0x87, 0x37, 0x6d, 0xca, 0xc9, 0xcd, 0x54, 0xd1, 0x1a, 0x84,
|
||||
0x01, 0x0f, 0xd0, 0x76, 0xea, 0xda, 0x4a, 0x2d, 0xca, 0x75, 0xbb, 0xd1, 0x0d, 0x82, 0x6e, 0x9f,
|
||||
0xb6, 0x85, 0xa7, 0x1d, 0xdf, 0x6f, 0xbb, 0x71, 0x48, 0x38, 0x0b, 0x7c, 0x19, 0xbb, 0x6d, 0x96,
|
||||
0xed, 0x9c, 0x79, 0x34, 0xe2, 0xc4, 0x1b, 0x28, 0x87, 0xcd, 0x6e, 0xd0, 0x0d, 0xc4, 0xb2, 0x9d,
|
||||
0xac, 0x94, 0xb6, 0xe1, 0x04, 0x91, 0x17, 0x44, 0x6d, 0x9b, 0x44, 0x34, 0xa5, 0xe5, 0x04, 0x4c,
|
||||
0xc3, 0x6e, 0x95, 0x61, 0x89, 0xaf, 0xd8, 0x36, 0xff, 0x5c, 0x87, 0xea, 0x29, 0x09, 0x89, 0x17,
|
||||
0x21, 0x06, 0x6b, 0x21, 0x75, 0x82, 0xd0, 0xed, 0x84, 0xd4, 0xe7, 0x75, 0x63, 0xc7, 0xb8, 0xbe,
|
||||
0xf6, 0xce, 0x56, 0x4b, 0x62, 0xb7, 0x12, 0x6c, 0x7d, 0x8e, 0xd6, 0x41, 0xc0, 0x7c, 0xeb, 0xc6,
|
||||
0x93, 0x91, 0xb9, 0x30, 0x1e, 0x99, 0x57, 0xbf, 0x8d, 0x02, 0xff, 0xfd, 0x66, 0x2e, 0xb6, 0xb9,
|
||||
0x33, 0x24, 0x5e, 0xbf, 0xa8, 0xc2, 0x20, 0x25, 0x4c, 0x7d, 0x8e, 0xce, 0x0c, 0xd8, 0xcc, 0x19,
|
||||
0x3b, 0x3a, 0x0d, 0xf5, 0x45, 0xb5, 0xa9, 0x24, 0xdc, 0xd2, 0x84, 0x5b, 0x87, 0xca, 0xc1, 0x3a,
|
||||
0x50, 0x9b, 0xde, 0x9e, 0xd8, 0x34, 0x05, 0x99, 0xb2, 0x7b, 0x66, 0x7b, 0xfc, 0x97, 0x69, 0x60,
|
||||
0x94, 0x51, 0xd1, 0xc0, 0x28, 0x86, 0x0d, 0x12, 0xf3, 0x5e, 0x10, 0x32, 0x3e, 0x94, 0x09, 0xa8,
|
||||
0xcc, 0x4b, 0xc0, 0x2d, 0xc5, 0x65, 0x4f, 0x72, 0x29, 0x86, 0x6b, 0x16, 0x25, 0x2d, 0x5e, 0x4f,
|
||||
0x15, 0x22, 0x13, 0x3f, 0x19, 0x70, 0xb9, 0xe8, 0x92, 0x25, 0x63, 0x69, 0x5e, 0x32, 0x4e, 0x14,
|
||||
0x81, 0x8f, 0xa6, 0x11, 0x98, 0xc8, 0xc7, 0x2c, 0xb3, 0x48, 0xc9, 0xc5, 0x02, 0xad, 0x34, 0x2b,
|
||||
0x8f, 0x0d, 0xb8, 0x94, 0xc5, 0x75, 0x43, 0xe2, 0xd0, 0xce, 0x80, 0x86, 0x2c, 0x70, 0xeb, 0xcb,
|
||||
0xf3, 0xd8, 0x1d, 0x2b, 0x76, 0x1f, 0x94, 0xd9, 0xe5, 0x61, 0x26, 0xc9, 0x15, 0xac, 0x82, 0xdb,
|
||||
0x66, 0x6a, 0x3c, 0x4e, 0x6c, 0xa7, 0xc2, 0x84, 0x7e, 0x30, 0x60, 0x2b, 0x8b, 0x22, 0xb1, 0x93,
|
||||
0x6c, 0xda, 0xa1, 0x3e, 0xb1, 0xfb, 0xd4, 0xad, 0x57, 0x77, 0x8c, 0xeb, 0xab, 0xd6, 0xd1, 0x78,
|
||||
0x64, 0xee, 0x97, 0xb7, 0x2f, 0xb9, 0x4e, 0x32, 0x28, 0x3b, 0xe0, 0xec, 0x86, 0xf6, 0xa5, 0xe9,
|
||||
0x48, 0x5a, 0xd0, 0x6f, 0x06, 0x4c, 0x89, 0x73, 0x02, 0xcf, 0x63, 0x3c, 0xca, 0x2e, 0x72, 0x65,
|
||||
0x5e, 0xaa, 0x3a, 0x2a, 0x55, 0x77, 0x67, 0x71, 0x2d, 0x43, 0xce, 0x26, 0x3d, 0xe1, 0x29, 0x52,
|
||||
0x68, 0x96, 0x4f, 0x70, 0x20, 0xdd, 0xd2, 0x8b, 0x9e, 0x7e, 0x92, 0x90, 0x3e, 0xa4, 0xa4, 0x9f,
|
||||
0x3b, 0xc9, 0xea, 0x4b, 0x9f, 0xa4, 0x0c, 0x39, 0xfb, 0x24, 0x13, 0x9e, 0xd3, 0x4f, 0x82, 0xa5,
|
||||
0x5b, 0x7a, 0x92, 0x9f, 0x0d, 0x78, 0x6d, 0x56, 0x5a, 0x3a, 0xf7, 0x29, 0xad, 0xd7, 0xe6, 0xf5,
|
||||
0xf5, 0x17, 0xea, 0x0c, 0xc7, 0xcf, 0xbf, 0x8d, 0x04, 0x6c, 0xde, 0x3d, 0x08, 0x1f, 0xbc, 0x35,
|
||||
0x3d, 0xfb, 0x77, 0x28, 0x9d, 0xc1, 0x56, 0x1e, 0x5d, 0xb0, 0x85, 0x97, 0x66, 0x9b, 0x81, 0xcd,
|
||||
0xcb, 0xf5, 0x0c, 0xb6, 0x32, 0xc3, 0x09, 0xdb, 0x5f, 0x0d, 0xb8, 0x32, 0x19, 0xec, 0x31, 0x9f,
|
||||
0x79, 0xb1, 0xd7, 0xb1, 0x99, 0x5b, 0x5f, 0x9b, 0x47, 0xf7, 0x4b, 0x45, 0xf7, 0x64, 0x16, 0xdd,
|
||||
0x1c, 0xda, 0x6c, 0xbe, 0x79, 0x27, 0xbc, 0x5d, 0x26, 0xfc, 0x99, 0xb4, 0x5a, 0xcc, 0x6d, 0xfe,
|
||||
0xb8, 0x04, 0x55, 0x2c, 0xa6, 0x3d, 0xba, 0x06, 0x8b, 0xcc, 0x15, 0xcf, 0x5a, 0xcd, 0xba, 0x3c,
|
||||
0x1e, 0x99, 0xaf, 0x48, 0x06, 0xd9, 0x36, 0x09, 0xd6, 0x22, 0x73, 0xd1, 0xbb, 0xb0, 0x62, 0x07,
|
||||
0xbe, 0xdb, 0x61, 0xae, 0x78, 0x8f, 0x6a, 0x96, 0x39, 0x1e, 0x99, 0xaf, 0x4a, 0xef, 0xc4, 0x70,
|
||||
0x92, 0x46, 0x28, 0x09, 0x57, 0xe5, 0x02, 0x7d, 0x02, 0x6b, 0x4e, 0x48, 0x09, 0xa7, 0x9d, 0xe4,
|
||||
0xe1, 0x16, 0x2f, 0x48, 0xcd, 0xba, 0x36, 0x1e, 0x99, 0x6f, 0xc8, 0x68, 0x69, 0xbc, 0xc7, 0xbc,
|
||||
0xf4, 0x2a, 0x72, 0x1a, 0x0c, 0x99, 0x90, 0x20, 0xd1, 0x47, 0x03, 0x16, 0x0e, 0x25, 0xd2, 0x52,
|
||||
0x19, 0x49, 0x1a, 0xf3, 0x48, 0x39, 0x0d, 0x86, 0x4c, 0x40, 0x75, 0x58, 0x71, 0x69, 0x9f, 0x72,
|
||||
0x2a, 0x47, 0xf6, 0x2a, 0xd6, 0x22, 0xba, 0x0d, 0xd5, 0xe0, 0x3b, 0x9f, 0x86, 0x51, 0xbd, 0xba,
|
||||
0x53, 0x29, 0x1e, 0x53, 0xea, 0x35, 0xb4, 0x92, 0xb0, 0x72, 0x47, 0xc7, 0x00, 0x84, 0xf3, 0x90,
|
||||
0xd9, 0x31, 0xa7, 0x91, 0x98, 0x6e, 0x17, 0xf2, 0xdc, 0x32, 0x5b, 0x7a, 0x81, 0x99, 0x06, 0xe7,
|
||||
0x42, 0xd1, 0x2d, 0x58, 0xf6, 0x89, 0x47, 0xa3, 0xfa, 0xaa, 0x20, 0x70, 0x65, 0x3c, 0x32, 0xb7,
|
||||
0x24, 0x86, 0x50, 0xeb, 0x70, 0x29, 0x60, 0xe9, 0x8b, 0x6e, 0xc2, 0x12, 0x1f, 0x0e, 0x64, 0x1f,
|
||||
0x17, 0x62, 0x12, 0x6d, 0x1a, 0x23, 0x05, 0x2c, 0x5c, 0x9b, 0x14, 0x36, 0xf6, 0x75, 0x8d, 0x1c,
|
||||
0xf9, 0x3c, 0x1c, 0x22, 0x04, 0x4b, 0x09, 0x9a, 0x2c, 0x07, 0x2c, 0xd6, 0xe8, 0x63, 0x58, 0xa6,
|
||||
0x89, 0x51, 0x7d, 0x85, 0xec, 0xb6, 0x66, 0x7f, 0xc9, 0xb5, 0x3e, 0x27, 0x1e, 0x4d, 0x21, 0xb1,
|
||||
0x8c, 0x6b, 0xfe, 0x51, 0x81, 0xf5, 0x82, 0x01, 0x7d, 0x05, 0xff, 0x17, 0x39, 0xeb, 0x0c, 0x62,
|
||||
0xbb, 0xcf, 0x9c, 0xce, 0x03, 0x3a, 0x54, 0x15, 0xd8, 0xce, 0x3e, 0x1c, 0x84, 0xc7, 0xa9, 0x70,
|
||||
0xf8, 0x94, 0x0e, 0x0b, 0x49, 0xcf, 0xb4, 0x78, 0xa3, 0xa8, 0x40, 0xa7, 0xb0, 0x2e, 0xa1, 0x89,
|
||||
0xeb, 0x86, 0x34, 0x8a, 0x54, 0xad, 0xee, 0x8d, 0x47, 0xe6, 0xb5, 0x1c, 0xee, 0xbe, 0xb4, 0x16,
|
||||
0x50, 0xb5, 0x0e, 0x5f, 0xc8, 0x8b, 0xe8, 0x12, 0x54, 0x7b, 0x94, 0x75, 0x7b, 0xf2, 0xd3, 0x67,
|
||||
0x09, 0x2b, 0x29, 0xd1, 0x47, 0x9c, 0xf0, 0x38, 0x92, 0x65, 0x88, 0x95, 0x84, 0x0e, 0x01, 0x74,
|
||||
0x3f, 0x32, 0x59, 0x5c, 0x35, 0xeb, 0xea, 0x78, 0x64, 0xbe, 0xae, 0x5b, 0x5b, 0xd8, 0x4e, 0x0e,
|
||||
0xb3, 0x36, 0xd6, 0x0a, 0x5c, 0xd3, 0xeb, 0x42, 0xb7, 0x55, 0xa7, 0x76, 0xdb, 0x61, 0xa1, 0xdb,
|
||||
0x0e, 0xb3, 0x6e, 0xeb, 0x17, 0x7b, 0x44, 0xbe, 0xb2, 0xdb, 0x13, 0x6f, 0xd3, 0x3d, 0xfd, 0x0d,
|
||||
0x6d, 0xb5, 0xd5, 0xec, 0x79, 0x91, 0x1e, 0x3a, 0x4b, 0x1e, 0x9b, 0x5c, 0x1f, 0x35, 0xbf, 0x81,
|
||||
0x5a, 0x72, 0xb7, 0xb3, 0xcb, 0xe7, 0xc3, 0x62, 0xf9, 0xbc, 0x39, 0xaf, 0x7c, 0xe4, 0x58, 0xd2,
|
||||
0xb5, 0xf3, 0xd8, 0x00, 0xc8, 0xb4, 0xe8, 0x00, 0xaa, 0x7d, 0xc2, 0x69, 0xa4, 0xbf, 0xc3, 0xf7,
|
||||
0x5e, 0x0c, 0x4d, 0xb0, 0xc3, 0x2a, 0x14, 0x1d, 0xc1, 0x4a, 0x8f, 0x45, 0x3c, 0x10, 0x9c, 0x2a,
|
||||
0xff, 0x16, 0x45, 0xc7, 0x36, 0xdf, 0x83, 0xff, 0x95, 0x6c, 0x68, 0x23, 0x9b, 0xa5, 0x62, 0x64,
|
||||
0x66, 0xa5, 0xb3, 0x98, 0x2f, 0x9d, 0x66, 0x08, 0xb5, 0xbb, 0xac, 0xeb, 0x13, 0x1e, 0x87, 0x14,
|
||||
0xed, 0x41, 0x25, 0x62, 0x5d, 0x55, 0xff, 0x5b, 0xe3, 0x91, 0x79, 0x51, 0xde, 0x43, 0xc4, 0xba,
|
||||
0xfa, 0x02, 0x92, 0x25, 0x4e, 0xbc, 0x92, 0xb2, 0x18, 0xc4, 0xb6, 0x68, 0x98, 0x89, 0x21, 0x3c,
|
||||
0x88, 0xed, 0x5c, 0xa3, 0x28, 0x09, 0x57, 0xd5, 0xe2, 0x6c, 0x11, 0x36, 0xac, 0x7e, 0xe0, 0x3c,
|
||||
0x38, 0xe8, 0x11, 0xbf, 0x4b, 0xef, 0x52, 0x9e, 0xa3, 0x97, 0x6c, 0x5e, 0x49, 0x2b, 0xbb, 0x0e,
|
||||
0x2b, 0xf2, 0x57, 0x20, 0x12, 0x09, 0xaa, 0x61, 0x2d, 0xa2, 0x6d, 0x58, 0x55, 0x25, 0x1a, 0xd5,
|
||||
0x2b, 0xc2, 0x94, 0xca, 0xe8, 0x11, 0x5c, 0xd0, 0x75, 0x6f, 0x33, 0x37, 0xe9, 0x8a, 0x24, 0xb7,
|
||||
0x6f, 0x3d, 0x2f, 0xb7, 0xea, 0x61, 0xb2, 0x98, 0x7b, 0xe2, 0xdf, 0x0f, 0xac, 0xdd, 0xec, 0xb7,
|
||||
0x89, 0xa4, 0x96, 0xa8, 0xd4, 0x27, 0x42, 0x85, 0xd7, 0x72, 0x12, 0xda, 0x81, 0x35, 0xfd, 0xd6,
|
||||
0x31, 0x1a, 0xd5, 0x97, 0x05, 0xb1, 0xbc, 0x0a, 0x6d, 0xea, 0x89, 0x2a, 0x46, 0xba, 0x1a, 0x99,
|
||||
0xcd, 0x5f, 0x8c, 0x64, 0x00, 0xe6, 0x29, 0x94, 0x9a, 0xd7, 0xf8, 0x8f, 0xcd, 0x7b, 0x0f, 0x36,
|
||||
0x6c, 0xe6, 0xba, 0x13, 0x53, 0xe8, 0xc6, 0x78, 0x64, 0xee, 0xaa, 0x1e, 0x16, 0xf6, 0xd2, 0x18,
|
||||
0x2a, 0x2a, 0xf1, 0x7a, 0x41, 0xb6, 0xee, 0x3c, 0x79, 0xd6, 0x30, 0x9e, 0x3e, 0x6b, 0x18, 0x7f,
|
||||
0x3f, 0x6b, 0x18, 0x67, 0xe7, 0x8d, 0x85, 0xa7, 0xe7, 0x8d, 0x85, 0xdf, 0xcf, 0x1b, 0x0b, 0x5f,
|
||||
0xbf, 0xdd, 0x65, 0xbc, 0x17, 0xdb, 0x2d, 0x27, 0xf0, 0xda, 0x0e, 0x0d, 0x9d, 0x1b, 0x2c, 0x68,
|
||||
0xf7, 0x89, 0x13, 0xf8, 0xcc, 0x71, 0xdb, 0x8f, 0xb2, 0x7f, 0x73, 0x31, 0xfd, 0xed, 0xaa, 0x98,
|
||||
0x01, 0xb7, 0xfe, 0x09, 0x00, 0x00, 0xff, 0xff, 0x03, 0x19, 0xcc, 0xfc, 0xbe, 0x0f, 0x00, 0x00,
|
||||
// 1347 bytes of a gzipped FileDescriptorProto
|
||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x57, 0xdd, 0x6e, 0x1b, 0x45,
|
||||
0x14, 0xce, 0xc6, 0x89, 0x13, 0x9f, 0x34, 0x01, 0x0d, 0x69, 0xeb, 0x04, 0xea, 0x0d, 0x46, 0xa5,
|
||||
0x0d, 0xa1, 0xb6, 0x4a, 0x2f, 0xca, 0xaf, 0x50, 0x36, 0x49, 0x4b, 0x84, 0x80, 0x30, 0xed, 0x0d,
|
||||
0x48, 0x95, 0x35, 0xbb, 0x3b, 0xb5, 0x87, 0x7a, 0x77, 0xad, 0xdd, 0xd9, 0x52, 0x73, 0xc7, 0x1b,
|
||||
0xe4, 0xb2, 0x48, 0xbc, 0x01, 0x48, 0x3c, 0x06, 0xbd, 0xec, 0x25, 0x42, 0xc2, 0xa0, 0xe6, 0x0d,
|
||||
0xfc, 0x04, 0x68, 0xe7, 0x67, 0xff, 0x6c, 0xd7, 0x85, 0xde, 0xcd, 0xf9, 0xfb, 0xe6, 0x9b, 0x33,
|
||||
0xe7, 0x9c, 0xd9, 0x85, 0xdd, 0x87, 0x71, 0xdf, 0x21, 0x3e, 0xfb, 0x81, 0xb6, 0x43, 0xda, 0x65,
|
||||
0x11, 0x0f, 0x87, 0xed, 0x87, 0xd7, 0x6d, 0xca, 0xc9, 0xf5, 0x54, 0xd1, 0x1a, 0x84, 0x01, 0x0f,
|
||||
0xd0, 0x76, 0xea, 0xda, 0x4a, 0x2d, 0xca, 0x75, 0xbb, 0xd1, 0x0d, 0x82, 0x6e, 0x9f, 0xb6, 0x85,
|
||||
0xa7, 0x1d, 0xdf, 0x6f, 0xbb, 0x71, 0x48, 0x38, 0x0b, 0x7c, 0x19, 0xbb, 0x6d, 0x96, 0xed, 0x9c,
|
||||
0x79, 0x34, 0xe2, 0xc4, 0x1b, 0x28, 0x87, 0xcd, 0x6e, 0xd0, 0x0d, 0xc4, 0xb2, 0x9d, 0xac, 0x94,
|
||||
0xb6, 0xe1, 0x04, 0x91, 0x17, 0x44, 0x6d, 0x9b, 0x44, 0x34, 0xa5, 0xe5, 0x04, 0x4c, 0xc3, 0x6e,
|
||||
0x95, 0x61, 0x89, 0xaf, 0xd8, 0x36, 0xff, 0x5a, 0x87, 0xea, 0x09, 0x09, 0x89, 0x17, 0x21, 0x06,
|
||||
0x6b, 0x21, 0x75, 0x82, 0xd0, 0xed, 0x84, 0xd4, 0xe7, 0x75, 0x63, 0xc7, 0xb8, 0xba, 0xf6, 0xde,
|
||||
0x56, 0x4b, 0x62, 0xb7, 0x12, 0x6c, 0x7d, 0x8e, 0xd6, 0x41, 0xc0, 0x7c, 0xeb, 0xda, 0x93, 0x91,
|
||||
0xb9, 0x30, 0x1e, 0x99, 0x97, 0xbf, 0x8b, 0x02, 0xff, 0xc3, 0x66, 0x2e, 0xb6, 0xb9, 0x33, 0x24,
|
||||
0x5e, 0xbf, 0xa8, 0xc2, 0x20, 0x25, 0x4c, 0x7d, 0x8e, 0x4e, 0x0d, 0xd8, 0xcc, 0x19, 0x3b, 0x3a,
|
||||
0x0d, 0xf5, 0x45, 0xb5, 0xa9, 0x24, 0xdc, 0xd2, 0x84, 0x5b, 0x87, 0xca, 0xc1, 0x3a, 0x50, 0x9b,
|
||||
0xde, 0x9c, 0xd8, 0x34, 0x05, 0x99, 0xb2, 0x7b, 0x66, 0x7b, 0xfc, 0xb7, 0x69, 0x60, 0x94, 0x51,
|
||||
0xd1, 0xc0, 0x28, 0x86, 0x0d, 0x12, 0xf3, 0x5e, 0x10, 0x32, 0x3e, 0x94, 0x09, 0xa8, 0xcc, 0x4b,
|
||||
0xc0, 0x0d, 0xc5, 0x65, 0x4f, 0x72, 0x29, 0x86, 0x6b, 0x16, 0x25, 0x2d, 0x5e, 0x4f, 0x15, 0x22,
|
||||
0x13, 0x3f, 0x1b, 0x70, 0xb1, 0xe8, 0x92, 0x25, 0x63, 0x69, 0x5e, 0x32, 0x8e, 0x15, 0x81, 0x4f,
|
||||
0xa6, 0x11, 0x98, 0xc8, 0xc7, 0x2c, 0xb3, 0x48, 0xc9, 0xf9, 0x02, 0xad, 0x34, 0x2b, 0x8f, 0x0d,
|
||||
0xb8, 0x90, 0xc5, 0x75, 0x43, 0xe2, 0xd0, 0xce, 0x80, 0x86, 0x2c, 0x70, 0xeb, 0xcb, 0xf3, 0xd8,
|
||||
0xdd, 0x56, 0xec, 0x3e, 0x2a, 0xb3, 0xcb, 0xc3, 0x4c, 0x92, 0x2b, 0x58, 0x05, 0xb7, 0xcd, 0xd4,
|
||||
0x78, 0x3b, 0xb1, 0x9d, 0x08, 0x13, 0xfa, 0xd1, 0x80, 0xad, 0x2c, 0x8a, 0xc4, 0x4e, 0xb2, 0x69,
|
||||
0x87, 0xfa, 0xc4, 0xee, 0x53, 0xb7, 0x5e, 0xdd, 0x31, 0xae, 0xae, 0x5a, 0x47, 0xe3, 0x91, 0xb9,
|
||||
0x5f, 0xde, 0xbe, 0xe4, 0x3a, 0xc9, 0xa0, 0xec, 0x80, 0xb3, 0x1b, 0xda, 0x97, 0xa6, 0x23, 0x69,
|
||||
0x41, 0xbf, 0x1b, 0x30, 0x25, 0xce, 0x09, 0x3c, 0x8f, 0xf1, 0x28, 0xbb, 0xc8, 0x95, 0x79, 0xa9,
|
||||
0xea, 0xa8, 0x54, 0xdd, 0x99, 0xc5, 0xb5, 0x0c, 0x39, 0x9b, 0xf4, 0x84, 0xa7, 0x48, 0xa1, 0x59,
|
||||
0x3e, 0xc1, 0x81, 0x74, 0x4b, 0x2f, 0x7a, 0xfa, 0x49, 0x42, 0xfa, 0x90, 0x92, 0x7e, 0xee, 0x24,
|
||||
0xab, 0x2f, 0x7d, 0x92, 0x32, 0xe4, 0xec, 0x93, 0x4c, 0x78, 0x4e, 0x3f, 0x09, 0x96, 0x6e, 0xe9,
|
||||
0x49, 0x7e, 0x31, 0xe0, 0x8d, 0x59, 0x69, 0xe9, 0xdc, 0xa7, 0xb4, 0x5e, 0x9b, 0xd7, 0xd7, 0x5f,
|
||||
0xa9, 0x33, 0xdc, 0x7e, 0xfe, 0x6d, 0x24, 0x60, 0xf3, 0xee, 0x41, 0xf8, 0xe0, 0xad, 0xe9, 0xd9,
|
||||
0xbf, 0x45, 0xe9, 0x0c, 0xb6, 0xf2, 0xe8, 0x82, 0x2d, 0xbc, 0x34, 0xdb, 0x0c, 0x6c, 0x5e, 0xae,
|
||||
0x67, 0xb0, 0x95, 0x19, 0x4e, 0xd8, 0xfe, 0x66, 0xc0, 0xa5, 0xc9, 0x60, 0x8f, 0xf9, 0xcc, 0x8b,
|
||||
0xbd, 0x8e, 0xcd, 0xdc, 0xfa, 0xda, 0x3c, 0xba, 0x5f, 0x2b, 0xba, 0xc7, 0xb3, 0xe8, 0xe6, 0xd0,
|
||||
0x66, 0xf3, 0xcd, 0x3b, 0xe1, 0xed, 0x32, 0xe1, 0x2f, 0xa4, 0xd5, 0x62, 0x6e, 0xf3, 0xa7, 0x25,
|
||||
0xa8, 0x62, 0x31, 0xed, 0xd1, 0x15, 0x58, 0x64, 0xae, 0x78, 0xd6, 0x6a, 0xd6, 0xc5, 0xf1, 0xc8,
|
||||
0x7c, 0x4d, 0x32, 0xc8, 0xb6, 0x49, 0xb0, 0x16, 0x99, 0x8b, 0xde, 0x87, 0x15, 0x3b, 0xf0, 0xdd,
|
||||
0x0e, 0x73, 0xc5, 0x7b, 0x54, 0xb3, 0xcc, 0xf1, 0xc8, 0x7c, 0x5d, 0x7a, 0x27, 0x86, 0xe3, 0x34,
|
||||
0x42, 0x49, 0xb8, 0x2a, 0x17, 0xe8, 0x33, 0x58, 0x73, 0x42, 0x4a, 0x38, 0xed, 0x24, 0x0f, 0xb7,
|
||||
0x78, 0x41, 0x6a, 0xd6, 0x95, 0xf1, 0xc8, 0x7c, 0x4b, 0x46, 0x4b, 0xe3, 0x5d, 0xe6, 0xa5, 0x57,
|
||||
0x91, 0xd3, 0x60, 0xc8, 0x84, 0x04, 0x89, 0x3e, 0x1a, 0xb0, 0x70, 0x28, 0x91, 0x96, 0xca, 0x48,
|
||||
0xd2, 0x98, 0x47, 0xca, 0x69, 0x30, 0x64, 0x02, 0xaa, 0xc3, 0x8a, 0x4b, 0xfb, 0x94, 0x53, 0x39,
|
||||
0xb2, 0x57, 0xb1, 0x16, 0xd1, 0x4d, 0xa8, 0x06, 0xdf, 0xfb, 0x34, 0x8c, 0xea, 0xd5, 0x9d, 0x4a,
|
||||
0xf1, 0x98, 0x52, 0xaf, 0xa1, 0x95, 0x84, 0x95, 0x3b, 0xba, 0x07, 0x40, 0x38, 0x0f, 0x99, 0x1d,
|
||||
0x73, 0x1a, 0xa9, 0xe9, 0xb6, 0x39, 0x31, 0x13, 0xf6, 0xfd, 0x61, 0x9e, 0x71, 0x16, 0x91, 0x5e,
|
||||
0x6b, 0xa6, 0xc1, 0x39, 0x40, 0x74, 0x03, 0x96, 0x7d, 0xe2, 0xd1, 0xa8, 0xbe, 0x2a, 0x68, 0x5d,
|
||||
0x1a, 0x8f, 0xcc, 0x2d, 0x89, 0x21, 0xd4, 0x3a, 0x5c, 0x0a, 0x58, 0xfa, 0xa2, 0xeb, 0xb0, 0xc4,
|
||||
0x87, 0x03, 0xd9, 0xdd, 0x85, 0x98, 0x44, 0x9b, 0xc6, 0x48, 0x01, 0x0b, 0xd7, 0x26, 0x85, 0x8d,
|
||||
0x7d, 0x5d, 0x39, 0x47, 0x3e, 0x0f, 0x87, 0x08, 0xc1, 0x52, 0x82, 0x26, 0x8b, 0x04, 0x8b, 0x35,
|
||||
0xfa, 0x14, 0x96, 0x69, 0x62, 0x54, 0xdf, 0x26, 0xbb, 0xad, 0xd9, 0xdf, 0x77, 0xad, 0x2f, 0x89,
|
||||
0x47, 0x53, 0x48, 0x2c, 0xe3, 0x9a, 0x7f, 0x56, 0x60, 0xbd, 0x60, 0x40, 0xdf, 0xc0, 0xab, 0x22,
|
||||
0x93, 0x9d, 0x41, 0x6c, 0xf7, 0x99, 0xd3, 0x79, 0x40, 0x87, 0xaa, 0x2e, 0xdb, 0xd9, 0xe7, 0x84,
|
||||
0xf0, 0x38, 0x11, 0x0e, 0x9f, 0xd3, 0x61, 0xe1, 0x2a, 0x32, 0x2d, 0xde, 0x28, 0x2a, 0xd0, 0x09,
|
||||
0xac, 0x4b, 0x68, 0xe2, 0xba, 0x21, 0x8d, 0x22, 0x55, 0xc1, 0x7b, 0xe3, 0x91, 0x79, 0x25, 0x87,
|
||||
0xbb, 0x2f, 0xad, 0x05, 0x54, 0xad, 0xc3, 0xe7, 0xf2, 0x22, 0xba, 0x00, 0xd5, 0x1e, 0x65, 0xdd,
|
||||
0x9e, 0xfc, 0x20, 0x5a, 0xc2, 0x4a, 0x4a, 0xf4, 0x11, 0x27, 0x3c, 0x8e, 0x64, 0x71, 0x62, 0x25,
|
||||
0xa1, 0x43, 0x00, 0xdd, 0xa5, 0x4c, 0x96, 0x5c, 0xcd, 0xba, 0x3c, 0x1e, 0x99, 0x6f, 0xea, 0x86,
|
||||
0x17, 0xb6, 0xe3, 0xc3, 0xac, 0xb9, 0xb5, 0x02, 0xd7, 0xf4, 0xba, 0xd0, 0x83, 0xd5, 0xa9, 0x3d,
|
||||
0x78, 0x58, 0xe8, 0xc1, 0xc3, 0xac, 0x07, 0xfb, 0xc5, 0xce, 0x91, 0xd5, 0xb9, 0x3d, 0x51, 0x9d,
|
||||
0x77, 0xf5, 0x97, 0xb5, 0xd5, 0x56, 0x13, 0xe9, 0x45, 0x3a, 0xeb, 0x34, 0x79, 0x82, 0x72, 0xdd,
|
||||
0xd5, 0xbc, 0x07, 0xb5, 0xe4, 0x6e, 0x67, 0x97, 0xcf, 0xc7, 0xc5, 0xf2, 0x79, 0x7b, 0x5e, 0xf9,
|
||||
0xc8, 0x61, 0xa5, 0x6b, 0xe7, 0xb1, 0x01, 0x90, 0x69, 0xd1, 0x01, 0x54, 0xfb, 0x84, 0xd3, 0x48,
|
||||
0x7f, 0x9d, 0xef, 0xbd, 0x18, 0x9a, 0x60, 0x87, 0x55, 0x28, 0x3a, 0x82, 0x95, 0x1e, 0x8b, 0x78,
|
||||
0x20, 0x38, 0x55, 0xfe, 0x2b, 0x8a, 0x8e, 0x6d, 0x7e, 0x00, 0xaf, 0x94, 0x6c, 0x68, 0x23, 0x9b,
|
||||
0xb0, 0x62, 0x90, 0x66, 0xa5, 0xb3, 0x98, 0x2f, 0x9d, 0x66, 0x08, 0xb5, 0x3b, 0xac, 0xeb, 0x13,
|
||||
0x1e, 0x87, 0x14, 0xed, 0x41, 0x25, 0x62, 0x5d, 0x55, 0xff, 0x5b, 0xe3, 0x91, 0x79, 0x5e, 0xde,
|
||||
0x43, 0xc4, 0xba, 0xfa, 0x02, 0x92, 0x25, 0x4e, 0xbc, 0x92, 0xb2, 0x18, 0xc4, 0xb6, 0x68, 0x98,
|
||||
0x89, 0xd1, 0x3c, 0x88, 0xed, 0x5c, 0xa3, 0x28, 0x09, 0x57, 0xd5, 0xe2, 0x74, 0x11, 0x36, 0xac,
|
||||
0x7e, 0xe0, 0x3c, 0x38, 0xe8, 0x11, 0xbf, 0x4b, 0xef, 0x50, 0x9e, 0xa3, 0x97, 0x6c, 0x5e, 0x49,
|
||||
0x2b, 0xbb, 0x0e, 0x2b, 0xf2, 0x07, 0x21, 0x12, 0x09, 0xaa, 0x61, 0x2d, 0xa2, 0x6d, 0x58, 0x55,
|
||||
0x25, 0x1a, 0xd5, 0x2b, 0xc2, 0x94, 0xca, 0xe8, 0x11, 0x9c, 0xd3, 0x75, 0x6f, 0x33, 0x37, 0xe9,
|
||||
0x8a, 0x24, 0xb7, 0xef, 0x3c, 0x2f, 0xb7, 0xea, 0xb9, 0xb2, 0x98, 0x7b, 0xec, 0xdf, 0x0f, 0xac,
|
||||
0xdd, 0xec, 0x67, 0x8a, 0xa4, 0x96, 0xa8, 0xd4, 0x27, 0x42, 0x85, 0xd7, 0x72, 0x12, 0xda, 0x81,
|
||||
0x35, 0xfd, 0x02, 0x32, 0x1a, 0xd5, 0x97, 0x05, 0xb1, 0xbc, 0x0a, 0x6d, 0xea, 0x89, 0x2a, 0x06,
|
||||
0xbd, 0x1a, 0x99, 0xcd, 0x5f, 0x8d, 0x64, 0x00, 0xe6, 0x29, 0x94, 0x9a, 0xd7, 0xf8, 0x9f, 0xcd,
|
||||
0x7b, 0x17, 0x36, 0x6c, 0xe6, 0xba, 0x13, 0x53, 0xe8, 0xda, 0x78, 0x64, 0xee, 0xaa, 0x1e, 0x16,
|
||||
0xf6, 0xd2, 0x18, 0x2a, 0x2a, 0xf1, 0x7a, 0x41, 0xb6, 0x6e, 0x3d, 0x79, 0xd6, 0x30, 0x9e, 0x3e,
|
||||
0x6b, 0x18, 0xff, 0x3c, 0x6b, 0x18, 0xa7, 0x67, 0x8d, 0x85, 0xa7, 0x67, 0x8d, 0x85, 0x3f, 0xce,
|
||||
0x1a, 0x0b, 0xdf, 0xbe, 0xdb, 0x65, 0xbc, 0x17, 0xdb, 0x2d, 0x27, 0xf0, 0xda, 0x0e, 0x0d, 0x9d,
|
||||
0x6b, 0x2c, 0x68, 0xf7, 0x89, 0x13, 0xf8, 0xcc, 0x71, 0xdb, 0x8f, 0xb2, 0x3f, 0x76, 0x31, 0xfd,
|
||||
0xed, 0xaa, 0x98, 0x01, 0x37, 0xfe, 0x0d, 0x00, 0x00, 0xff, 0xff, 0xd7, 0x03, 0x2e, 0xc4, 0xd4,
|
||||
0x0f, 0x00, 0x00,
|
||||
}
|
||||
|
||||
func (m *Params) Marshal() (dAtA []byte, err error) {
|
||||
@@ -1027,10 +1028,15 @@ func (m *Record) MarshalToSizedBuffer(dAtA []byte) (int, error) {
|
||||
dAtA[i] = 0x42
|
||||
}
|
||||
}
|
||||
if len(m.Attributes) > 0 {
|
||||
i -= len(m.Attributes)
|
||||
copy(dAtA[i:], m.Attributes)
|
||||
i = encodeVarintRegistry(dAtA, i, uint64(len(m.Attributes)))
|
||||
if m.Attributes != nil {
|
||||
{
|
||||
size, err := m.Attributes.MarshalToSizedBuffer(dAtA[:i])
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
i -= size
|
||||
i = encodeVarintRegistry(dAtA, i, uint64(size))
|
||||
}
|
||||
i--
|
||||
dAtA[i] = 0x3a
|
||||
}
|
||||
@@ -1146,12 +1152,12 @@ func (m *NameAuthority) MarshalToSizedBuffer(dAtA []byte) (int, error) {
|
||||
_ = i
|
||||
var l int
|
||||
_ = l
|
||||
n12, err12 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.ExpiryTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.ExpiryTime):])
|
||||
if err12 != nil {
|
||||
return 0, err12
|
||||
n13, err13 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.ExpiryTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.ExpiryTime):])
|
||||
if err13 != nil {
|
||||
return 0, err13
|
||||
}
|
||||
i -= n12
|
||||
i = encodeVarintRegistry(dAtA, i, uint64(n12))
|
||||
i -= n13
|
||||
i = encodeVarintRegistry(dAtA, i, uint64(n13))
|
||||
i--
|
||||
dAtA[i] = 0x3a
|
||||
if len(m.BondId) > 0 {
|
||||
@@ -1549,8 +1555,8 @@ func (m *Record) Size() (n int) {
|
||||
n += 1 + l + sovRegistry(uint64(l))
|
||||
}
|
||||
}
|
||||
l = len(m.Attributes)
|
||||
if l > 0 {
|
||||
if m.Attributes != nil {
|
||||
l = m.Attributes.Size()
|
||||
n += 1 + l + sovRegistry(uint64(l))
|
||||
}
|
||||
if len(m.Names) > 0 {
|
||||
@@ -2364,7 +2370,7 @@ func (m *Record) Unmarshal(dAtA []byte) error {
|
||||
if wireType != 2 {
|
||||
return fmt.Errorf("proto: wrong wireType = %d for field Attributes", wireType)
|
||||
}
|
||||
var byteLen int
|
||||
var msglen int
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return ErrIntOverflowRegistry
|
||||
@@ -2374,24 +2380,26 @@ func (m *Record) Unmarshal(dAtA []byte) error {
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
byteLen |= int(b&0x7F) << shift
|
||||
msglen |= int(b&0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
if byteLen < 0 {
|
||||
if msglen < 0 {
|
||||
return ErrInvalidLengthRegistry
|
||||
}
|
||||
postIndex := iNdEx + byteLen
|
||||
postIndex := iNdEx + msglen
|
||||
if postIndex < 0 {
|
||||
return ErrInvalidLengthRegistry
|
||||
}
|
||||
if postIndex > l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
m.Attributes = append(m.Attributes[:0], dAtA[iNdEx:postIndex]...)
|
||||
if m.Attributes == nil {
|
||||
m.Attributes = []byte{}
|
||||
m.Attributes = &types1.Any{}
|
||||
}
|
||||
if err := m.Attributes.Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
|
||||
return err
|
||||
}
|
||||
iNdEx = postIndex
|
||||
case 8:
|
||||
|
||||
Generated
+13
-13
@@ -385,7 +385,7 @@ func (m *MsgReserveAuthorityResponse) XXX_DiscardUnknown() {
|
||||
|
||||
var xxx_messageInfo_MsgReserveAuthorityResponse proto.InternalMessageInfo
|
||||
|
||||
// MsgSetAuthorityBond
|
||||
// MsgSetAuthorityBond is SDK message for SetAuthorityBond
|
||||
type MsgSetAuthorityBond struct {
|
||||
Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
|
||||
BondId string `protobuf:"bytes,2,opt,name=bond_id,json=bondId,proto3" json:"bond_id,omitempty" json:"bondId" yaml:"bondId"`
|
||||
@@ -483,7 +483,7 @@ func (m *MsgSetAuthorityBondResponse) XXX_DiscardUnknown() {
|
||||
|
||||
var xxx_messageInfo_MsgSetAuthorityBondResponse proto.InternalMessageInfo
|
||||
|
||||
// MsgDeleteNameAuthority
|
||||
// MsgDeleteNameAuthority is SDK message for DeleteNameAuthority
|
||||
type MsgDeleteNameAuthority struct {
|
||||
Crn string `protobuf:"bytes,1,opt,name=crn,proto3" json:"crn,omitempty"`
|
||||
Signer string `protobuf:"bytes,2,opt,name=signer,proto3" json:"signer,omitempty"`
|
||||
@@ -573,7 +573,7 @@ func (m *MsgDeleteNameAuthorityResponse) XXX_DiscardUnknown() {
|
||||
|
||||
var xxx_messageInfo_MsgDeleteNameAuthorityResponse proto.InternalMessageInfo
|
||||
|
||||
// MsgRenewRecord
|
||||
// MsgRenewRecord is SDK message for Renew a record
|
||||
type MsgRenewRecord struct {
|
||||
RecordId string `protobuf:"bytes,1,opt,name=record_id,json=recordId,proto3" json:"record_id,omitempty" json:"recordId" yaml:"recordId"`
|
||||
Signer string `protobuf:"bytes,2,opt,name=signer,proto3" json:"signer,omitempty"`
|
||||
@@ -761,7 +761,7 @@ func (m *MsgAssociateBondResponse) XXX_DiscardUnknown() {
|
||||
|
||||
var xxx_messageInfo_MsgAssociateBondResponse proto.InternalMessageInfo
|
||||
|
||||
// MsgDissociateBond
|
||||
// MsgDissociateBond is SDK message for Msg/DissociateBond
|
||||
type MsgDissociateBond struct {
|
||||
RecordId string `protobuf:"bytes,1,opt,name=record_id,json=recordId,proto3" json:"record_id,omitempty" json:"recordId" yaml:"recordId"`
|
||||
Signer string `protobuf:"bytes,2,opt,name=signer,proto3" json:"signer,omitempty"`
|
||||
@@ -814,7 +814,7 @@ func (m *MsgDissociateBond) GetSigner() string {
|
||||
return ""
|
||||
}
|
||||
|
||||
// MsgDissociateBondResponse
|
||||
// MsgDissociateBondResponse is response type for MsgDissociateBond
|
||||
type MsgDissociateBondResponse struct {
|
||||
}
|
||||
|
||||
@@ -851,7 +851,7 @@ func (m *MsgDissociateBondResponse) XXX_DiscardUnknown() {
|
||||
|
||||
var xxx_messageInfo_MsgDissociateBondResponse proto.InternalMessageInfo
|
||||
|
||||
// MsgDissociateRecords
|
||||
// MsgDissociateRecords is SDK message for Msg/DissociateRecords
|
||||
type MsgDissociateRecords struct {
|
||||
BondId string `protobuf:"bytes,1,opt,name=bond_id,json=bondId,proto3" json:"bond_id,omitempty" json:"bondId" yaml:"bondId"`
|
||||
Signer string `protobuf:"bytes,2,opt,name=signer,proto3" json:"signer,omitempty"`
|
||||
@@ -904,7 +904,7 @@ func (m *MsgDissociateRecords) GetSigner() string {
|
||||
return ""
|
||||
}
|
||||
|
||||
// MsgDissociateRecordsResponse
|
||||
// MsgDissociateRecordsResponse is response type for MsgDissociateRecords
|
||||
type MsgDissociateRecordsResponse struct {
|
||||
}
|
||||
|
||||
@@ -941,7 +941,7 @@ func (m *MsgDissociateRecordsResponse) XXX_DiscardUnknown() {
|
||||
|
||||
var xxx_messageInfo_MsgDissociateRecordsResponse proto.InternalMessageInfo
|
||||
|
||||
// MsgReAssociateRecords
|
||||
// MsgReAssociateRecords is SDK message for Msg/ReAssociateRecords
|
||||
type MsgReAssociateRecords struct {
|
||||
NewBondId string `protobuf:"bytes,1,opt,name=new_bond_id,json=newBondId,proto3" json:"new_bond_id,omitempty" json:"newBondId" yaml:"newBondId"`
|
||||
OldBondId string `protobuf:"bytes,2,opt,name=old_bond_id,json=oldBondId,proto3" json:"old_bond_id,omitempty" json:"oldBondId" yaml:"oldBondId"`
|
||||
@@ -1002,7 +1002,7 @@ func (m *MsgReAssociateRecords) GetSigner() string {
|
||||
return ""
|
||||
}
|
||||
|
||||
// MsgReAssociateRecordsResponse
|
||||
// MsgReAssociateRecordsResponse is response type for MsgReAssociateRecords
|
||||
type MsgReAssociateRecordsResponse struct {
|
||||
}
|
||||
|
||||
@@ -1147,9 +1147,9 @@ const _ = grpc.SupportPackageIsVersion4
|
||||
//
|
||||
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
|
||||
type MsgClient interface {
|
||||
// SetRecord records a new record with given payload and bond id
|
||||
// SetRecord will records a new record with given payload and bond id
|
||||
SetRecord(ctx context.Context, in *MsgSetRecord, opts ...grpc.CallOption) (*MsgSetRecordResponse, error)
|
||||
// Renew Record renews an expired record
|
||||
// Renew Record will renew the expire record
|
||||
RenewRecord(ctx context.Context, in *MsgRenewRecord, opts ...grpc.CallOption) (*MsgRenewRecordResponse, error)
|
||||
// AssociateBond
|
||||
AssociateBond(ctx context.Context, in *MsgAssociateBond, opts ...grpc.CallOption) (*MsgAssociateBondResponse, error)
|
||||
@@ -1269,9 +1269,9 @@ func (c *msgClient) SetAuthorityBond(ctx context.Context, in *MsgSetAuthorityBon
|
||||
|
||||
// MsgServer is the server API for Msg service.
|
||||
type MsgServer interface {
|
||||
// SetRecord records a new record with given payload and bond id
|
||||
// SetRecord will records a new record with given payload and bond id
|
||||
SetRecord(context.Context, *MsgSetRecord) (*MsgSetRecordResponse, error)
|
||||
// Renew Record renews an expired record
|
||||
// Renew Record will renew the expire record
|
||||
RenewRecord(context.Context, *MsgRenewRecord) (*MsgRenewRecordResponse, error)
|
||||
// AssociateBond
|
||||
AssociateBond(context.Context, *MsgAssociateBond) (*MsgAssociateBondResponse, error)
|
||||
|
||||
+140
-52
@@ -2,9 +2,14 @@ package types
|
||||
|
||||
import (
|
||||
"crypto/sha256"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"github.com/cerc-io/laconicd/x/registry/helpers"
|
||||
codectypes "github.com/cosmos/cosmos-sdk/codec/types"
|
||||
canonicalJson "github.com/gibson042/canonicaljson-go"
|
||||
"github.com/gogo/protobuf/proto"
|
||||
)
|
||||
|
||||
const (
|
||||
@@ -13,14 +18,137 @@ const (
|
||||
AuthorityUnderAuction = "auction"
|
||||
)
|
||||
|
||||
// ReadablePayload represents a signed record payload that can be serialized from/to YAML.
|
||||
type ReadablePayload struct {
|
||||
// PayloadType represents a signed record payload that can be serialized from/to YAML.
|
||||
type PayloadType struct {
|
||||
Record map[string]interface{} `json:"record"`
|
||||
Signatures []Signature `json:"signatures"`
|
||||
}
|
||||
|
||||
// ReadableRecord represents a WNS record.
|
||||
type ReadableRecord struct {
|
||||
// ToPayload converts PayloadType to Payload object.
|
||||
// Why? Because go-amino can't handle maps: https://github.com/tendermint/go-amino/issues/4.
|
||||
func (payloadObj *PayloadType) ToPayload() (Payload, error) {
|
||||
attributes, err := payLoadAttributes(payloadObj.Record)
|
||||
if err != nil {
|
||||
return Payload{}, err
|
||||
}
|
||||
payload := Payload{
|
||||
Record: &Record{
|
||||
Deleted: false,
|
||||
Owners: nil,
|
||||
Attributes: attributes,
|
||||
},
|
||||
Signatures: payloadObj.Signatures,
|
||||
}
|
||||
return payload, nil
|
||||
}
|
||||
|
||||
func payLoadAttributes(recordPayLoad map[string]interface{}) (*codectypes.Any, error) {
|
||||
recordType, ok := recordPayLoad["type"]
|
||||
if !ok {
|
||||
return &codectypes.Any{}, fmt.Errorf("cannot get type from payload")
|
||||
}
|
||||
bz := helpers.MarshalMapToJSONBytes(recordPayLoad)
|
||||
|
||||
switch recordType.(string) {
|
||||
case "ServiceProviderRegistration":
|
||||
{
|
||||
var attributes ServiceProviderRegistration
|
||||
err := json.Unmarshal(bz, &attributes)
|
||||
if err != nil {
|
||||
return &codectypes.Any{}, err
|
||||
}
|
||||
return codectypes.NewAnyWithValue(&attributes)
|
||||
}
|
||||
case "WebsiteRegistrationRecord":
|
||||
{
|
||||
var attributes WebsiteRegistrationRecord
|
||||
err := json.Unmarshal(bz, &attributes)
|
||||
if err != nil {
|
||||
return &codectypes.Any{}, err
|
||||
}
|
||||
return codectypes.NewAnyWithValue(&attributes)
|
||||
}
|
||||
default:
|
||||
return &codectypes.Any{}, fmt.Errorf("unsupported record type %s", recordType.(string))
|
||||
}
|
||||
}
|
||||
|
||||
// ToReadablePayload converts Payload to PayloadType
|
||||
// It will unmarshal with record attributes
|
||||
func (payload Payload) ToReadablePayload() PayloadType {
|
||||
var payloadType PayloadType
|
||||
bz, err := GetJSONBytesFromAny(*payload.Record.Attributes)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
payloadType.Record = helpers.UnMarshalMapFromJSONBytes(bz)
|
||||
payloadType.Signatures = payload.Signatures
|
||||
|
||||
return payloadType
|
||||
}
|
||||
|
||||
// Record to Record Type for human-readable attributes
|
||||
|
||||
func (r *Record) ToRecordType() RecordType {
|
||||
var resourceObj RecordType
|
||||
|
||||
resourceObj.ID = r.Id
|
||||
resourceObj.BondID = r.BondId
|
||||
resourceObj.CreateTime = r.CreateTime
|
||||
resourceObj.ExpiryTime = r.ExpiryTime
|
||||
resourceObj.Deleted = r.Deleted
|
||||
resourceObj.Owners = r.Owners
|
||||
resourceObj.Names = r.Names
|
||||
|
||||
bz, err := GetJSONBytesFromAny(*r.Attributes)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
resourceObj.Attributes = helpers.UnMarshalMapFromJSONBytes(bz)
|
||||
|
||||
return resourceObj
|
||||
}
|
||||
|
||||
func GetJSONBytesFromAny(any codectypes.Any) ([]byte, error) {
|
||||
var bz []byte
|
||||
s := strings.Split(any.TypeUrl, ".")
|
||||
switch s[len(s)-1] {
|
||||
case "ServiceProviderRegistration":
|
||||
{
|
||||
var attributes ServiceProviderRegistration
|
||||
err := proto.Unmarshal(any.Value, &attributes)
|
||||
if err != nil {
|
||||
panic("Proto unmarshal error")
|
||||
}
|
||||
|
||||
bz, err = json.Marshal(attributes)
|
||||
if err != nil {
|
||||
panic("JSON marshal error")
|
||||
}
|
||||
}
|
||||
case "WebsiteRegistrationRecord":
|
||||
{
|
||||
var attributes WebsiteRegistrationRecord
|
||||
err := proto.Unmarshal(any.Value, &attributes)
|
||||
if err != nil {
|
||||
panic("Proto unmarshal error")
|
||||
}
|
||||
|
||||
bz, err = json.Marshal(attributes)
|
||||
if err != nil {
|
||||
panic("JSON marshal error")
|
||||
}
|
||||
}
|
||||
default:
|
||||
return nil, fmt.Errorf("unsupported type %s", s[len(s)-1])
|
||||
}
|
||||
|
||||
return bz, nil
|
||||
}
|
||||
|
||||
// RecordType represents a WNS record.
|
||||
type RecordType struct {
|
||||
ID string `json:"id,omitempty"`
|
||||
Names []string `json:"names,omitempty"`
|
||||
BondID string `json:"bondId,omitempty"`
|
||||
@@ -31,53 +159,13 @@ type ReadableRecord struct {
|
||||
Attributes map[string]interface{} `json:"attributes,omitempty"`
|
||||
}
|
||||
|
||||
// ToPayload converts PayloadEncodable to Payload object.
|
||||
// Why? Because go-amino can't handle maps: https://github.com/tendermint/go-amino/issues/4.
|
||||
func (payloadObj *ReadablePayload) ToPayload() Payload {
|
||||
// Note: record directly contains the attributes here
|
||||
attributes := helpers.MarshalMapToJSONBytes(payloadObj.Record)
|
||||
payload := Payload{
|
||||
Record: &Record{
|
||||
Deleted: false,
|
||||
Owners: nil,
|
||||
Attributes: attributes,
|
||||
},
|
||||
Signatures: payloadObj.Signatures,
|
||||
}
|
||||
// TODO rm error
|
||||
return payload
|
||||
}
|
||||
|
||||
// ToReadablePayload converts Payload to a serializable object
|
||||
func (payload Payload) ToReadablePayload() ReadablePayload {
|
||||
var encodable ReadablePayload
|
||||
|
||||
encodable.Record = helpers.UnMarshalMapFromJSONBytes(payload.Record.Attributes)
|
||||
encodable.Signatures = payload.Signatures
|
||||
|
||||
return encodable
|
||||
}
|
||||
|
||||
// ToReadableRecord converts Record to a serializable object
|
||||
func (r *Record) ToReadableRecord() ReadableRecord {
|
||||
var resourceObj ReadableRecord
|
||||
|
||||
resourceObj.ID = r.Id
|
||||
resourceObj.BondID = r.BondId
|
||||
resourceObj.CreateTime = r.CreateTime
|
||||
resourceObj.ExpiryTime = r.ExpiryTime
|
||||
resourceObj.Deleted = r.Deleted
|
||||
resourceObj.Owners = r.Owners
|
||||
resourceObj.Names = r.Names
|
||||
resourceObj.Attributes = helpers.UnMarshalMapFromJSONBytes(r.Attributes)
|
||||
|
||||
return resourceObj
|
||||
}
|
||||
|
||||
// ToRecordObj converts Record to RecordObj.
|
||||
// Why? Because go-amino can't handle maps: https://github.com/tendermint/go-amino/issues/4.
|
||||
func (r *ReadableRecord) ToRecordObj() (Record, error) {
|
||||
attributes := helpers.MarshalMapToJSONBytes(r.Attributes)
|
||||
func (r *RecordType) ToRecordObj() (Record, error) {
|
||||
attributes, err := payLoadAttributes(r.Attributes)
|
||||
if err != nil {
|
||||
return Record{}, err
|
||||
}
|
||||
|
||||
var resourceObj Record
|
||||
|
||||
@@ -93,7 +181,7 @@ func (r *ReadableRecord) ToRecordObj() (Record, error) {
|
||||
}
|
||||
|
||||
// CanonicalJSON returns the canonical JSON representation of the record.
|
||||
func (r *ReadableRecord) CanonicalJSON() []byte {
|
||||
func (r *RecordType) CanonicalJSON() []byte {
|
||||
bytes, err := canonicalJson.Marshal(r.Attributes)
|
||||
if err != nil {
|
||||
panic("Record marshal error.")
|
||||
@@ -103,7 +191,7 @@ func (r *ReadableRecord) CanonicalJSON() []byte {
|
||||
}
|
||||
|
||||
// GetSignBytes generates a record hash to be signed.
|
||||
func (r *ReadableRecord) GetSignBytes() ([]byte, []byte) {
|
||||
func (r *RecordType) GetSignBytes() ([]byte, []byte) {
|
||||
// Double SHA256 hash.
|
||||
|
||||
// Input to the first round of hashing.
|
||||
@@ -123,7 +211,7 @@ func (r *ReadableRecord) GetSignBytes() ([]byte, []byte) {
|
||||
}
|
||||
|
||||
// GetCID gets the record CID.
|
||||
func (r *ReadableRecord) GetCID() (string, error) {
|
||||
func (r *RecordType) GetCID() (string, error) {
|
||||
id, err := helpers.GetCid(r.CanonicalJSON())
|
||||
if err != nil {
|
||||
return "", err
|
||||
|
||||
Reference in New Issue
Block a user