Merge pull request #33 from deep-stack/ng-client-set-record

Fixes to nameservice message types and GQL queries
This commit is contained in:
Ashwin Phatak 2022-04-21 10:08:41 +05:30 committed by GitHub
commit de7c0558c9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
37 changed files with 2429 additions and 774 deletions

View File

@ -1,11 +1,11 @@
# Vulcanize dxns gql
# Vulcanize chiba-clonk gql
> Browser : http://localhost:9473 for gql
## Start server
```shell
./build/chibaclonkd start --gql-playground --gql-server
./build/chibaclonkd start --gql-playground --gql-server
```
Basic node status:
@ -100,7 +100,7 @@ Query records.
```graphql
{
queryRecords(attributes: [{ key: "type", value: { string: "wrn:bot" } }]) {
queryRecords(attributes: [{ key: "type", value: { string: "crn:bot" } }]) {
id
names
bondId
@ -316,7 +316,7 @@ LookUp Names
```graphql
{
lookupNames(names: ["wrn://hello/test"]){
lookupNames(names: ["crn://hello/test"]){
latest{
id
height

View File

@ -165,7 +165,7 @@ var (
// Ethermint modules
evm.AppModuleBasic{},
feemarket.AppModuleBasic{},
// Vulcanize DXNS modules
// Vulcanize chiba-clonk modules
auction.AppModuleBasic{},
bond.AppModuleBasic{},
nameservice.AppModuleBasic{},
@ -244,7 +244,7 @@ type EthermintApp struct {
EvmKeeper *evmkeeper.Keeper
FeeMarketKeeper feemarketkeeper.Keeper
// DXNS keepers
// chiba-clonk keepers
AuctionKeeper auctionkeeper.Keeper
BondKeeper bondkeeper.Keeper
NameServiceKeeper nameservicekeeper.Keeper
@ -300,7 +300,7 @@ func NewEthermintApp(
ibchost.StoreKey, ibctransfertypes.StoreKey,
// ethermint keys
evmtypes.StoreKey, feemarkettypes.StoreKey,
// dxns keys
// chiba-clonk keys
auctiontypes.StoreKey,
bondtypes.StoreKey,
nameservicetypes.StoreKey,
@ -378,7 +378,7 @@ func NewEthermintApp(
appCodec, keys[feemarkettypes.StoreKey], app.GetSubspace(feemarkettypes.ModuleName),
)
// Create Vulcanize dxns keepers
// Create Vulcanize chiba-clonk keepers
app.AuctionKeeper = auctionkeeper.NewKeeper(
app.AccountKeeper, app.BankKeeper, keys[auctiontypes.StoreKey],
appCodec, app.GetSubspace(auctiontypes.ModuleName),
@ -486,7 +486,7 @@ func NewEthermintApp(
// Ethermint app modules
evm.NewAppModule(app.EvmKeeper, app.AccountKeeper),
feemarket.NewAppModule(app.FeeMarketKeeper),
// DXNs modules
// chiba-clonk modules
auction.NewAppModule(appCodec, app.AuctionKeeper),
bond.NewAppModule(appCodec, app.BondKeeper),
nameservice.NewAppModule(app.NameServiceKeeper),
@ -520,7 +520,7 @@ func NewEthermintApp(
feegrant.ModuleName,
paramstypes.ModuleName,
vestingtypes.ModuleName,
// DXNS modules
// chiba-clonk modules
auctiontypes.ModuleName,
bondtypes.ModuleName,
nameservicetypes.ModuleName,
@ -549,7 +549,7 @@ func NewEthermintApp(
paramstypes.ModuleName,
upgradetypes.ModuleName,
vestingtypes.ModuleName,
// DXNS modules
// chiba-clonk modules
auctiontypes.ModuleName,
bondtypes.ModuleName,
nameservicetypes.ModuleName,
@ -582,7 +582,7 @@ func NewEthermintApp(
// Ethermint modules
evmtypes.ModuleName,
feemarkettypes.ModuleName,
// DXNS modules
// chiba-clonk modules
auctiontypes.ModuleName,
bondtypes.ModuleName,
nameservicetypes.ModuleName,
@ -843,7 +843,7 @@ func initParamsKeeper(
// ethermint subspaces
paramsKeeper.Subspace(evmtypes.ModuleName)
paramsKeeper.Subspace(feemarkettypes.ModuleName)
// dxns subspaces
// chiba-clonk subspaces
paramsKeeper.Subspace(auctiontypes.ModuleName)
paramsKeeper.Subspace(bondtypes.ModuleName)
paramsKeeper.Subspace(nameservicetypes.ModuleName)

View File

@ -179,17 +179,20 @@
- [QueryListNameRecordsRequest](#vulcanize.nameservice.v1beta1.QueryListNameRecordsRequest)
- [QueryListNameRecordsResponse](#vulcanize.nameservice.v1beta1.QueryListNameRecordsResponse)
- [QueryListRecordsRequest](#vulcanize.nameservice.v1beta1.QueryListRecordsRequest)
- [QueryListRecordsRequest.KeyValueInput](#vulcanize.nameservice.v1beta1.QueryListRecordsRequest.KeyValueInput)
- [QueryListRecordsRequest.ReferenceInput](#vulcanize.nameservice.v1beta1.QueryListRecordsRequest.ReferenceInput)
- [QueryListRecordsRequest.ValueInput](#vulcanize.nameservice.v1beta1.QueryListRecordsRequest.ValueInput)
- [QueryListRecordsResponse](#vulcanize.nameservice.v1beta1.QueryListRecordsResponse)
- [QueryLookupWrn](#vulcanize.nameservice.v1beta1.QueryLookupWrn)
- [QueryLookupWrnResponse](#vulcanize.nameservice.v1beta1.QueryLookupWrnResponse)
- [QueryLookupCrn](#vulcanize.nameservice.v1beta1.QueryLookupCrn)
- [QueryLookupCrnResponse](#vulcanize.nameservice.v1beta1.QueryLookupCrnResponse)
- [QueryParamsRequest](#vulcanize.nameservice.v1beta1.QueryParamsRequest)
- [QueryParamsResponse](#vulcanize.nameservice.v1beta1.QueryParamsResponse)
- [QueryRecordByBondIdRequest](#vulcanize.nameservice.v1beta1.QueryRecordByBondIdRequest)
- [QueryRecordByBondIdResponse](#vulcanize.nameservice.v1beta1.QueryRecordByBondIdResponse)
- [QueryRecordByIdRequest](#vulcanize.nameservice.v1beta1.QueryRecordByIdRequest)
- [QueryRecordByIdResponse](#vulcanize.nameservice.v1beta1.QueryRecordByIdResponse)
- [QueryResolveWrn](#vulcanize.nameservice.v1beta1.QueryResolveWrn)
- [QueryResolveWrnResponse](#vulcanize.nameservice.v1beta1.QueryResolveWrnResponse)
- [QueryResolveCrn](#vulcanize.nameservice.v1beta1.QueryResolveCrn)
- [QueryResolveCrnResponse](#vulcanize.nameservice.v1beta1.QueryResolveCrnResponse)
- [QueryWhoisRequest](#vulcanize.nameservice.v1beta1.QueryWhoisRequest)
- [QueryWhoisResponse](#vulcanize.nameservice.v1beta1.QueryWhoisResponse)
@ -2362,11 +2365,12 @@ Params defines the nameservice module records
| ----- | ---- | ----- | ----------- |
| `id` | [string](#string) | | |
| `bond_id` | [string](#string) | | |
| `create_time` | [google.protobuf.Timestamp](#google.protobuf.Timestamp) | | |
| `expiry_time` | [google.protobuf.Timestamp](#google.protobuf.Timestamp) | | |
| `create_time` | [string](#string) | | |
| `expiry_time` | [string](#string) | | |
| `deleted` | [bool](#bool) | | |
| `owners` | [string](#string) | repeated | |
| `attributes` | [bytes](#bytes) | | |
| `attributes` | [string](#string) | | |
| `names` | [string](#string) | repeated | |
@ -2597,6 +2601,8 @@ QueryListRecordsRequest is request type for nameservice records list
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| `attributes` | [QueryListRecordsRequest.KeyValueInput](#vulcanize.nameservice.v1beta1.QueryListRecordsRequest.KeyValueInput) | repeated | |
| `all` | [bool](#bool) | | |
| `pagination` | [cosmos.base.query.v1beta1.PageRequest](#cosmos.base.query.v1beta1.PageRequest) | | pagination defines an optional pagination for the request. |
@ -2604,6 +2610,58 @@ QueryListRecordsRequest is request type for nameservice records list
<a name="vulcanize.nameservice.v1beta1.QueryListRecordsRequest.KeyValueInput"></a>
### QueryListRecordsRequest.KeyValueInput
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| `key` | [string](#string) | | |
| `value` | [QueryListRecordsRequest.ValueInput](#vulcanize.nameservice.v1beta1.QueryListRecordsRequest.ValueInput) | | |
<a name="vulcanize.nameservice.v1beta1.QueryListRecordsRequest.ReferenceInput"></a>
### QueryListRecordsRequest.ReferenceInput
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| `id` | [string](#string) | | |
<a name="vulcanize.nameservice.v1beta1.QueryListRecordsRequest.ValueInput"></a>
### QueryListRecordsRequest.ValueInput
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| `type` | [string](#string) | | |
| `string` | [string](#string) | | |
| `int` | [int64](#int64) | | |
| `float` | [double](#double) | | |
| `boolean` | [bool](#bool) | | |
| `reference` | [QueryListRecordsRequest.ReferenceInput](#vulcanize.nameservice.v1beta1.QueryListRecordsRequest.ReferenceInput) | | |
| `values` | [QueryListRecordsRequest.ValueInput](#vulcanize.nameservice.v1beta1.QueryListRecordsRequest.ValueInput) | repeated | |
<a name="vulcanize.nameservice.v1beta1.QueryListRecordsResponse"></a>
### QueryListRecordsResponse
@ -2620,25 +2678,25 @@ QueryListRecordsResponse is response type for nameservice records list
<a name="vulcanize.nameservice.v1beta1.QueryLookupWrn"></a>
<a name="vulcanize.nameservice.v1beta1.QueryLookupCrn"></a>
### QueryLookupWrn
QueryLookupWrn is request type for LookupWrn
### QueryLookupCrn
QueryLookupCrn is request type for LookupCrn
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| `wrn` | [string](#string) | | |
| `crn` | [string](#string) | | |
<a name="vulcanize.nameservice.v1beta1.QueryLookupWrnResponse"></a>
<a name="vulcanize.nameservice.v1beta1.QueryLookupCrnResponse"></a>
### QueryLookupWrnResponse
QueryLookupWrnResponse is response type for QueryLookupWrn
### QueryLookupCrnResponse
QueryLookupCrnResponse is response type for QueryLookupCrn
| Field | Type | Label | Description |
@ -2737,25 +2795,25 @@ QueryRecordByIdResponse is response type for nameservice records by id
<a name="vulcanize.nameservice.v1beta1.QueryResolveWrn"></a>
<a name="vulcanize.nameservice.v1beta1.QueryResolveCrn"></a>
### QueryResolveWrn
QueryResolveWrn is request type for ResolveWrn
### QueryResolveCrn
QueryResolveCrn is request type for ResolveCrn
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| `wrn` | [string](#string) | | |
| `crn` | [string](#string) | | |
<a name="vulcanize.nameservice.v1beta1.QueryResolveWrnResponse"></a>
<a name="vulcanize.nameservice.v1beta1.QueryResolveCrnResponse"></a>
### QueryResolveWrnResponse
QueryResolveWrnResponse is response type for QueryResolveWrn
### QueryResolveCrnResponse
QueryResolveCrnResponse is response type for QueryResolveCrn
| Field | Type | Label | Description |
@ -2817,8 +2875,8 @@ Query defines the gRPC querier service for nameservice module
| `GetNameServiceModuleBalance` | [GetNameServiceModuleBalanceRequest](#vulcanize.nameservice.v1beta1.GetNameServiceModuleBalanceRequest) | [GetNameServiceModuleBalanceResponse](#vulcanize.nameservice.v1beta1.GetNameServiceModuleBalanceResponse) | Get nameservice module balance | GET|/vulcanize/nameservice/v1beta1/balance|
| `ListNameRecords` | [QueryListNameRecordsRequest](#vulcanize.nameservice.v1beta1.QueryListNameRecordsRequest) | [QueryListNameRecordsResponse](#vulcanize.nameservice.v1beta1.QueryListNameRecordsResponse) | List name records | GET|/vulcanize/nameservice/v1beta1/names|
| `Whois` | [QueryWhoisRequest](#vulcanize.nameservice.v1beta1.QueryWhoisRequest) | [QueryWhoisResponse](#vulcanize.nameservice.v1beta1.QueryWhoisResponse) | Whois method retrieve the name authority info | GET|/vulcanize/nameservice/v1beta1/whois/{name}|
| `LookupWrn` | [QueryLookupWrn](#vulcanize.nameservice.v1beta1.QueryLookupWrn) | [QueryLookupWrnResponse](#vulcanize.nameservice.v1beta1.QueryLookupWrnResponse) | LookupWrn | GET|/vulcanize/nameservice/v1beta1/lookup|
| `ResolveWrn` | [QueryResolveWrn](#vulcanize.nameservice.v1beta1.QueryResolveWrn) | [QueryResolveWrnResponse](#vulcanize.nameservice.v1beta1.QueryResolveWrnResponse) | ResolveWrn | GET|/vulcanize/nameservice/v1beta1/resolve|
| `LookupCrn` | [QueryLookupCrn](#vulcanize.nameservice.v1beta1.QueryLookupCrn) | [QueryLookupCrnResponse](#vulcanize.nameservice.v1beta1.QueryLookupCrnResponse) | LookupCrn | GET|/vulcanize/nameservice/v1beta1/lookup|
| `ResolveCrn` | [QueryResolveCrn](#vulcanize.nameservice.v1beta1.QueryResolveCrn) | [QueryResolveCrnResponse](#vulcanize.nameservice.v1beta1.QueryResolveCrnResponse) | ResolveCrn | GET|/vulcanize/nameservice/v1beta1/resolve|
| `GetRecordExpiryQueue` | [QueryGetRecordExpiryQueue](#vulcanize.nameservice.v1beta1.QueryGetRecordExpiryQueue) | [QueryGetRecordExpiryQueueResponse](#vulcanize.nameservice.v1beta1.QueryGetRecordExpiryQueueResponse) | GetRecordExpiryQueue | GET|/vulcanize/nameservice/v1beta1/record-expiry|
| `GetAuthorityExpiryQueue` | [QueryGetAuthorityExpiryQueue](#vulcanize.nameservice.v1beta1.QueryGetAuthorityExpiryQueue) | [QueryGetAuthorityExpiryQueueResponse](#vulcanize.nameservice.v1beta1.QueryGetAuthorityExpiryQueueResponse) | GetAuthorityExpiryQueue | GET|/vulcanize/nameservice/v1beta1/authority-expiry|
@ -2868,7 +2926,7 @@ MsgDeleteNameAuthority is SDK message for DeleteNameAuthority
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| `wrn` | [string](#string) | | |
| `crn` | [string](#string) | | |
| `signer` | [string](#string) | | |
@ -3053,7 +3111,7 @@ MsgSetName
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| `wrn` | [string](#string) | | |
| `crn` | [string](#string) | | |
| `cid` | [string](#string) | | |
| `signer` | [string](#string) | | |
@ -3095,6 +3153,11 @@ MsgSetRecord
MsgSetRecordResponse
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| `id` | [string](#string) | | |
@ -3134,7 +3197,7 @@ Msg
| `DissociateBond` | [MsgDissociateBond](#vulcanize.nameservice.v1beta1.MsgDissociateBond) | [MsgDissociateBondResponse](#vulcanize.nameservice.v1beta1.MsgDissociateBondResponse) | DissociateBond | |
| `DissociateRecords` | [MsgDissociateRecords](#vulcanize.nameservice.v1beta1.MsgDissociateRecords) | [MsgDissociateRecordsResponse](#vulcanize.nameservice.v1beta1.MsgDissociateRecordsResponse) | DissociateRecords | |
| `ReAssociateRecords` | [MsgReAssociateRecords](#vulcanize.nameservice.v1beta1.MsgReAssociateRecords) | [MsgReAssociateRecordsResponse](#vulcanize.nameservice.v1beta1.MsgReAssociateRecordsResponse) | ReAssociateRecords | |
| `SetName` | [MsgSetName](#vulcanize.nameservice.v1beta1.MsgSetName) | [MsgSetNameResponse](#vulcanize.nameservice.v1beta1.MsgSetNameResponse) | SetName will store the name with given wrn and name | |
| `SetName` | [MsgSetName](#vulcanize.nameservice.v1beta1.MsgSetName) | [MsgSetNameResponse](#vulcanize.nameservice.v1beta1.MsgSetNameResponse) | SetName will store the name with given crn and name | |
| `ReserveName` | [MsgReserveAuthority](#vulcanize.nameservice.v1beta1.MsgReserveAuthority) | [MsgReserveAuthorityResponse](#vulcanize.nameservice.v1beta1.MsgReserveAuthorityResponse) | Reserve name | |
| `DeleteName` | [MsgDeleteNameAuthority](#vulcanize.nameservice.v1beta1.MsgDeleteNameAuthority) | [MsgDeleteNameAuthorityResponse](#vulcanize.nameservice.v1beta1.MsgDeleteNameAuthorityResponse) | Delete Name method will remove authority name | |
| `SetAuthorityBond` | [MsgSetAuthorityBond](#vulcanize.nameservice.v1beta1.MsgSetAuthorityBond) | [MsgSetAuthorityBondResponse](#vulcanize.nameservice.v1beta1.MsgSetAuthorityBondResponse) | SetAuthorityBond | |

4
go.mod
View File

@ -3,6 +3,7 @@ module github.com/tharsis/ethermint
go 1.17
require (
github.com/99designs/gqlgen v0.17.2
github.com/btcsuite/btcd v0.22.0-beta
github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce
github.com/cosmos/cosmos-sdk v0.45.1
@ -35,6 +36,7 @@ require (
github.com/tendermint/tendermint v0.34.14
github.com/tendermint/tm-db v0.6.7
github.com/tyler-smith/go-bip39 v1.1.0
github.com/vektah/gqlparser/v2 v2.4.1
google.golang.org/genproto v0.0.0-20220401170504-314d38edb7de
google.golang.org/grpc v1.45.0
google.golang.org/protobuf v1.28.0
@ -44,7 +46,6 @@ require (
require (
filippo.io/edwards25519 v1.0.0-beta.2 // indirect
github.com/99designs/gqlgen v0.17.2 // indirect
github.com/99designs/keyring v1.1.6 // indirect
github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d // indirect
github.com/DataDog/zstd v1.4.5 // indirect
@ -152,7 +153,6 @@ require (
github.com/tendermint/go-amino v0.16.0 // indirect
github.com/tklauser/go-sysconf v0.3.5 // indirect
github.com/tklauser/numcpus v0.2.2 // indirect
github.com/vektah/gqlparser/v2 v2.4.1 // indirect
github.com/whyrusleeping/cbor-gen v0.0.0-20200123233031-1cdf64d27158 // indirect
github.com/zondax/hid v0.9.0 // indirect
go.etcd.io/bbolt v1.3.6 // indirect

7
go.sum
View File

@ -115,11 +115,13 @@ github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk5
github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM=
github.com/allegro/bigcache v1.2.1 h1:hg1sY1raCwic3Vnsvje6TT7/pnZba83LeFck5NrFKSc=
github.com/allegro/bigcache v1.2.1/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM=
github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883 h1:bvNMNQO63//z+xNgfBlViaCIJKLlCJ6/fmUseuG0wVQ=
github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8=
github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY=
github.com/apache/arrow/go/arrow v0.0.0-20191024131854-af6fa24be0db/go.mod h1:VTxUBvSJ3s3eHAg65PNgrsn5BtqCRPdmyXh6rAfdxN0=
github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ=
github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ=
github.com/arbovm/levenshtein v0.0.0-20160628152529-48b4e1c0c4d0 h1:jfIu9sQUG6Ig+0+Ap1h4unLjW6YQJpKZVmUzxsD4E/Q=
github.com/arbovm/levenshtein v0.0.0-20160628152529-48b4e1c0c4d0/go.mod h1:t2tdKJDJF9BV14lnkjHmOQgcvEKgtqs5a1N3LNdJhGE=
github.com/aristanetworks/goarista v0.0.0-20170210015632-ea17b1a17847/go.mod h1:D/tb0zPVXnP7fmsLZjtdUhSsumbK/ij54UXjjVgMGxQ=
github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o=
@ -282,6 +284,7 @@ github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUn
github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 h1:fAjc9m62+UWV/WAFKLNi6ZS0675eEUC9y3AlwSbQu1Y=
github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw=
github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no=
github.com/dgryski/trifles v0.0.0-20200323201526-dd97f9abfb48 h1:fRzb/w+pyskVMQ+UbP35JkH8yB7MYb4q/qhBarqZE6g=
github.com/dgryski/trifles v0.0.0-20200323201526-dd97f9abfb48/go.mod h1:if7Fbed8SFyPtHLHbg49SI7NAdJiC5WIA09pe59rfAA=
github.com/dlclark/regexp2 v1.2.0/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc=
github.com/dlclark/regexp2 v1.4.1-0.20201116162257-a2a8dda75c91/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc=
@ -993,6 +996,7 @@ github.com/segmentio/fasthash v1.0.3/go.mod h1:waKX8l2N8yckOgmSsXJi7x1ZfdKZ4x7KR
github.com/segmentio/kafka-go v0.1.0/go.mod h1:X6itGqS9L4jDletMsxZ7Dz+JFWxM6JHfPOCvTvk+EJo=
github.com/segmentio/kafka-go v0.2.0/go.mod h1:X6itGqS9L4jDletMsxZ7Dz+JFWxM6JHfPOCvTvk+EJo=
github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo=
github.com/sergi/go-diff v1.1.0 h1:we8PVUC3FE2uYfodKH/nBHMSetSfHDR6scGdBi+erh0=
github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM=
github.com/shirou/gopsutil v2.20.5+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA=
github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible h1:Bn1aCHHRnjv4Bl16T8rcaFjYSrGrIZvpiGO6P3Q4GpU=
@ -1112,7 +1116,6 @@ github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/X
github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc=
github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8=
github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ=
github.com/vektah/gqlparser/v2 v2.4.0 h1:EmA4dw9mqHm0j6Xzb9T21hOrp3oXmxnS40vwki70DZU=
github.com/vektah/gqlparser/v2 v2.4.0/go.mod h1:flJWIR04IMQPGz+BXLrORkrARBxv/rtyIAFvd/MceW0=
github.com/vektah/gqlparser/v2 v2.4.1 h1:QOyEn8DAPMUMARGMeshKDkDgNmVoEaEGiDB0uWxcSlQ=
github.com/vektah/gqlparser/v2 v2.4.1/go.mod h1:flJWIR04IMQPGz+BXLrORkrARBxv/rtyIAFvd/MceW0=
@ -1524,8 +1527,8 @@ golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
golang.org/x/tools v0.1.5 h1:ouewzE6p+/VEB31YYnTbEJdi8pFqKp4P4n85vwo3DHA=
golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
golang.org/x/tools v0.1.9 h1:j9KsMiaP1c3B0OTQGth0/k+miLGTgLsAFUCrF2vLcF8=
golang.org/x/tools v0.1.9/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=

View File

@ -1,11 +1,11 @@
# Vulcanize dxns gql
# Vulcanize chiba-clonk gql
> Browser : http://localhost:9473 for gql
## Start server
```shell
./build/chibaclonkd start --gql-playground --gql-server
./build/chibaclonkd start --gql-playground --gql-server
```
Basic node status:
@ -100,7 +100,7 @@ Query records.
```graphql
{
queryRecords(attributes: [{ key: "type", value: { string: "wrn:bot" } }]) {
queryRecords(attributes: [{ key: "type", value: { string: "crn:bot" } }]) {
id
names
bondId
@ -316,7 +316,7 @@ LookUp Names
```graphql
{
lookupNames(names: ["wrn://hello/test"]){
lookupNames(names: ["crn://hello/test"]){
latest{
id
height

View File

@ -988,7 +988,7 @@ func (ec *executionContext) introspectType(name string) (*introspection.Type, er
}
var sources = []*ast.Source{
{Name: "vulcanize/dxns/schema.graphql", Input: `# Reference to another record.
{Name: "vulcanize/chiba-clonk/schema.graphql", Input: `# Reference to another record.
type Reference {
id: String! # ID of linked record.
}
@ -1096,7 +1096,7 @@ type PeerInfo {
remote_ip: String!
}
# Vulcanize DXNS status.
# Vulcanize chiba-clonk status.
type Status {
version: String!
node: NodeInfo!

View File

@ -4,7 +4,7 @@
# for detailed .gqlgen.yml documentation.
schema:
- vulcanize/dxns/*.graphql
- vulcanize/chiba-clonk/*.graphql
exec:
filename: generated.go
model:

View File

@ -3,13 +3,14 @@ package gql
import (
"context"
"encoding/base64"
"strconv"
"github.com/cosmos/cosmos-sdk/client"
authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
banktypes "github.com/cosmos/cosmos-sdk/x/bank/types"
auctiontypes "github.com/tharsis/ethermint/x/auction/types"
bondtypes "github.com/tharsis/ethermint/x/bond/types"
nstypes "github.com/tharsis/ethermint/x/nameservice/types"
"strconv"
)
// DefaultLogNumLines is the number of log lines to tail by default.
@ -75,17 +76,18 @@ func (q queryResolver) ResolveNames(ctx context.Context, names []string) ([]*Rec
nsQueryClient := nstypes.NewQueryClient(q.ctx)
var gqlResponse []*Record
for _, name := range names {
res, err := nsQueryClient.ResolveWrn(context.Background(), &nstypes.QueryResolveWrn{Wrn: name})
res, err := nsQueryClient.ResolveCrn(context.Background(), &nstypes.QueryResolveCrn{Crn: name})
if err != nil {
return nil, err
}
// Return nil for record not found.
gqlResponse = append(gqlResponse, nil)
} else {
gqlRecord, err := getGQLRecord(context.Background(), q, *res.GetRecord())
if err != nil {
return nil, err
}
gqlRecord, err := getGQLRecord(context.Background(), q, *res.GetRecord())
if err != nil {
return nil, err
gqlResponse = append(gqlResponse, gqlRecord)
}
gqlResponse = append(gqlResponse, gqlRecord)
}
return gqlResponse, nil
@ -96,17 +98,18 @@ func (q queryResolver) LookupNames(ctx context.Context, names []string) ([]*Name
var gqlResponse []*NameRecord
for _, name := range names {
res, err := nsQueryClient.LookupWrn(context.Background(), &nstypes.QueryLookupWrn{Wrn: name})
res, err := nsQueryClient.LookupCrn(context.Background(), &nstypes.QueryLookupCrn{Crn: name})
if err != nil {
return nil, err
}
// Return nil for name not found.
gqlResponse = append(gqlResponse, nil)
} else {
gqlRecord, err := getGQLNameRecord(res.GetName())
if err != nil {
return nil, err
}
gqlRecord, err := getGQLNameRecord(res.GetName())
if err != nil {
return nil, err
gqlResponse = append(gqlResponse, gqlRecord)
}
gqlResponse = append(gqlResponse, gqlRecord)
}
return gqlResponse, nil
@ -114,7 +117,15 @@ func (q queryResolver) LookupNames(ctx context.Context, names []string) ([]*Name
func (q queryResolver) QueryRecords(ctx context.Context, attributes []*KeyValueInput, all *bool) ([]*Record, error) {
nsQueryClient := nstypes.NewQueryClient(q.ctx)
res, err := nsQueryClient.ListRecords(context.Background(), &nstypes.QueryListRecordsRequest{})
res, err := nsQueryClient.ListRecords(
context.Background(),
&nstypes.QueryListRecordsRequest{
Attributes: parseRequestAttributes(attributes),
All: (all != nil && *all),
},
)
if err != nil {
return nil, err
}
@ -141,13 +152,15 @@ func (q queryResolver) GetRecordsByIds(ctx context.Context, ids []string) ([]*Re
for i, id := range ids {
res, err := nsQueryClient.GetRecord(context.Background(), &nstypes.QueryRecordByIdRequest{Id: id})
if err != nil {
return nil, err
// Return nil for record not found.
gqlResponse[i] = nil
} else {
record, err := getGQLRecord(context.Background(), q, res.GetRecord())
if err != nil {
return nil, err
}
gqlResponse[i] = record
}
record, err := getGQLRecord(context.Background(), q, res.GetRecord())
if err != nil {
return nil, err
}
gqlResponse[i] = record
}
return gqlResponse, nil

View File

@ -3,12 +3,13 @@ package gql
import (
"context"
"encoding/json"
"reflect"
"strconv"
sdk "github.com/cosmos/cosmos-sdk/types"
auctiontypes "github.com/tharsis/ethermint/x/auction/types"
bondtypes "github.com/tharsis/ethermint/x/bond/types"
nstypes "github.com/tharsis/ethermint/x/nameservice/types"
"reflect"
"strconv"
)
// OwnerAttributeName denotes the owner attribute name for a bond.
@ -72,9 +73,10 @@ func getGQLRecord(ctx context.Context, resolver QueryResolver, record nstypes.Re
return &Record{
ID: record.Id,
BondID: record.GetBondId(),
CreateTime: record.GetCreateTime().String(),
ExpiryTime: record.GetExpiryTime().String(),
CreateTime: record.GetCreateTime(),
ExpiryTime: record.GetExpiryTime(),
Owners: record.GetOwners(),
Names: record.GetNames(),
Attributes: attributes,
References: references,
}, nil
@ -265,3 +267,49 @@ func mapToKeyValuePairs(attrs map[string]interface{}) ([]*KeyValue, error) {
return kvPairs, nil
}
func parseRequestAttributes(attrs []*KeyValueInput) []*nstypes.QueryListRecordsRequest_KeyValueInput {
kvPairs := []*nstypes.QueryListRecordsRequest_KeyValueInput{}
for _, value := range attrs {
kvPair := &nstypes.QueryListRecordsRequest_KeyValueInput{
Key: value.Key,
Value: &nstypes.QueryListRecordsRequest_ValueInput{},
}
if value.Value.String != nil {
kvPair.Value.String_ = *value.Value.String
kvPair.Value.Type = "string"
}
if value.Value.Int != nil {
kvPair.Value.Int = int64(*value.Value.Int)
kvPair.Value.Type = "int"
}
if value.Value.Float != nil {
kvPair.Value.Float = *value.Value.Float
kvPair.Value.Type = "float"
}
if value.Value.Boolean != nil {
kvPair.Value.Boolean = *value.Value.Boolean
kvPair.Value.Type = "boolean"
}
if value.Value.Reference != nil {
reference := &nstypes.QueryListRecordsRequest_ReferenceInput{
Id: value.Value.Reference.ID,
}
kvPair.Value.Reference = reference
kvPair.Value.Type = "reference"
}
// TODO: Handle arrays.
kvPairs = append(kvPairs, kvPair)
}
return kvPairs
}

View File

@ -106,7 +106,7 @@ type PeerInfo {
remote_ip: String!
}
# Vulcanize DXNS status.
# Vulcanize chiba-clonk status.
type Status {
version: String!
node: NodeInfo!

24
init.sh
View File

@ -32,6 +32,30 @@ cat $HOME/.chibaclonkd/config/genesis.json | jq '.app_state["staking"]["params"]
cat $HOME/.chibaclonkd/config/genesis.json | jq '.app_state["crisis"]["constant_fee"]["denom"]="aphoton"' > $HOME/.chibaclonkd/config/tmp_genesis.json && mv $HOME/.chibaclonkd/config/tmp_genesis.json $HOME/.chibaclonkd/config/genesis.json
cat $HOME/.chibaclonkd/config/genesis.json | jq '.app_state["gov"]["deposit_params"]["min_deposit"][0]["denom"]="aphoton"' > $HOME/.chibaclonkd/config/tmp_genesis.json && mv $HOME/.chibaclonkd/config/tmp_genesis.json $HOME/.chibaclonkd/config/genesis.json
cat $HOME/.chibaclonkd/config/genesis.json | jq '.app_state["mint"]["params"]["mint_denom"]="aphoton"' > $HOME/.chibaclonkd/config/tmp_genesis.json && mv $HOME/.chibaclonkd/config/tmp_genesis.json $HOME/.chibaclonkd/config/genesis.json
# Custom modules
cat $HOME/.chibaclonkd/config/genesis.json | jq '.app_state["nameservice"]["params"]["record_rent"]["denom"]="aphoton"' > $HOME/.chibaclonkd/config/tmp_genesis.json && mv $HOME/.chibaclonkd/config/tmp_genesis.json $HOME/.chibaclonkd/config/genesis.json
cat $HOME/.chibaclonkd/config/genesis.json | jq '.app_state["nameservice"]["params"]["authority_rent"]["denom"]="aphoton"' > $HOME/.chibaclonkd/config/tmp_genesis.json && mv $HOME/.chibaclonkd/config/tmp_genesis.json $HOME/.chibaclonkd/config/genesis.json
cat $HOME/.chibaclonkd/config/genesis.json | jq '.app_state["nameservice"]["params"]["authority_auction_commit_fee"]["denom"]="aphoton"' > $HOME/.chibaclonkd/config/tmp_genesis.json && mv $HOME/.chibaclonkd/config/tmp_genesis.json $HOME/.chibaclonkd/config/genesis.json
cat $HOME/.chibaclonkd/config/genesis.json | jq '.app_state["nameservice"]["params"]["authority_auction_reveal_fee"]["denom"]="aphoton"' > $HOME/.chibaclonkd/config/tmp_genesis.json && mv $HOME/.chibaclonkd/config/tmp_genesis.json $HOME/.chibaclonkd/config/genesis.json
cat $HOME/.chibaclonkd/config/genesis.json | jq '.app_state["nameservice"]["params"]["authority_auction_minimum_bid"]["denom"]="aphoton"' > $HOME/.chibaclonkd/config/tmp_genesis.json && mv $HOME/.chibaclonkd/config/tmp_genesis.json $HOME/.chibaclonkd/config/genesis.json
if [[ "$TEST_NAMESERVICE_EXPIRY" == "true" ]]; then
echo "Setting timers for expiry tests."
cat $HOME/.chibaclonkd/config/genesis.json | jq '.app_state["nameservice"]["params"]["record_rent_duration"]="60s"' > $HOME/.chibaclonkd/config/tmp_genesis.json && mv $HOME/.chibaclonkd/config/tmp_genesis.json $HOME/.chibaclonkd/config/genesis.json
cat $HOME/.chibaclonkd/config/genesis.json | jq '.app_state["nameservice"]["params"]["authority_grace_period"]="60s"' > $HOME/.chibaclonkd/config/tmp_genesis.json && mv $HOME/.chibaclonkd/config/tmp_genesis.json $HOME/.chibaclonkd/config/genesis.json
cat $HOME/.chibaclonkd/config/genesis.json | jq '.app_state["nameservice"]["params"]["authority_rent_duration"]="60s"' > $HOME/.chibaclonkd/config/tmp_genesis.json && mv $HOME/.chibaclonkd/config/tmp_genesis.json $HOME/.chibaclonkd/config/genesis.json
fi
if [[ "$TEST_AUCTION_ENABLED" == "true" ]]; then
echo "Enabling auction and setting timers."
cat $HOME/.chibaclonkd/config/genesis.json | jq '.app_state["nameservice"]["params"]["authority_auction_enabled"]=true' > $HOME/.chibaclonkd/config/tmp_genesis.json && mv $HOME/.chibaclonkd/config/tmp_genesis.json $HOME/.chibaclonkd/config/genesis.json
cat $HOME/.chibaclonkd/config/genesis.json | jq '.app_state["nameservice"]["params"]["authority_rent_duration"]="60s"' > $HOME/.chibaclonkd/config/tmp_genesis.json && mv $HOME/.chibaclonkd/config/tmp_genesis.json $HOME/.chibaclonkd/config/genesis.json
cat $HOME/.chibaclonkd/config/genesis.json | jq '.app_state["nameservice"]["params"]["authority_grace_period"]="300s"' > $HOME/.chibaclonkd/config/tmp_genesis.json && mv $HOME/.chibaclonkd/config/tmp_genesis.json $HOME/.chibaclonkd/config/genesis.json
cat $HOME/.chibaclonkd/config/genesis.json | jq '.app_state["nameservice"]["params"]["authority_auction_commits_duration"]="60s"' > $HOME/.chibaclonkd/config/tmp_genesis.json && mv $HOME/.chibaclonkd/config/tmp_genesis.json $HOME/.chibaclonkd/config/genesis.json
cat $HOME/.chibaclonkd/config/genesis.json | jq '.app_state["nameservice"]["params"]["authority_auction_reveals_duration"]="60s"' > $HOME/.chibaclonkd/config/tmp_genesis.json && mv $HOME/.chibaclonkd/config/tmp_genesis.json $HOME/.chibaclonkd/config/genesis.json
fi
# increase block time (?)
cat $HOME/.chibaclonkd/config/genesis.json | jq '.consensus_params["block"]["time_iota_ms"]="1000"' > $HOME/.chibaclonkd/config/tmp_genesis.json && mv $HOME/.chibaclonkd/config/tmp_genesis.json $HOME/.chibaclonkd/config/genesis.json

View File

@ -68,23 +68,22 @@ message Record {
string bond_id = 2 [
(gogoproto.moretags) = "json:\"bondId\" yaml:\"bondId\""
];
google.protobuf.Timestamp create_time = 3 [
(gogoproto.stdtime) = true,
(gogoproto.nullable) = false,
string create_time = 3 [
(gogoproto.moretags) = "json:\"createTime\" yaml:\"createTime\""
];
google.protobuf.Timestamp expiry_time = 4 [
(gogoproto.stdtime) = true,
(gogoproto.nullable) = false,
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 [
string attributes = 7 [
(gogoproto.moretags) = "json:\"attributes\" yaml:\"attributes\""
];
repeated string names = 8 [
(gogoproto.moretags) = "json:\"names\" yaml:\"names\""
];
}
// AuthorityEntry defines the nameservice module AuthorityEntries

View File

@ -39,12 +39,12 @@ service Query {
rpc Whois(QueryWhoisRequest) returns (QueryWhoisResponse){
option (google.api.http).get = "/vulcanize/nameservice/v1beta1/whois/{name}";
}
// LookupWrn
rpc LookupWrn(QueryLookupWrn) returns (QueryLookupWrnResponse){
// LookupCrn
rpc LookupCrn(QueryLookupCrn) returns (QueryLookupCrnResponse){
option (google.api.http).get = "/vulcanize/nameservice/v1beta1/lookup";
}
// ResolveWrn
rpc ResolveWrn(QueryResolveWrn) returns (QueryResolveWrnResponse){
// ResolveCrn
rpc ResolveCrn(QueryResolveCrn) returns (QueryResolveCrnResponse){
option (google.api.http).get = "/vulcanize/nameservice/v1beta1/resolve";
}
// GetRecordExpiryQueue
@ -68,8 +68,28 @@ message QueryParamsResponse{
// QueryListRecordsRequest is request type for nameservice records list
message QueryListRecordsRequest{
message ReferenceInput {
string id = 1;
}
message ValueInput {
string type = 1;
string string = 2;
int64 int = 3;
double float = 4;
bool boolean = 5;
ReferenceInput reference = 6;
repeated ValueInput values = 7;
}
message KeyValueInput {
string key = 1;
ValueInput value = 2;
}
repeated KeyValueInput attributes = 1;
bool all = 2;
// pagination defines an optional pagination for the request.
cosmos.base.query.v1beta1.PageRequest pagination = 1;
cosmos.base.query.v1beta1.PageRequest pagination = 3;
}
// QueryListRecordsResponse is response type for nameservice records list
@ -158,23 +178,23 @@ message QueryWhoisResponse{
];
}
// QueryLookupWrn is request type for LookupWrn
message QueryLookupWrn{
string wrn = 1;
// QueryLookupCrn is request type for LookupCrn
message QueryLookupCrn{
string crn = 1;
}
// QueryLookupWrnResponse is response type for QueryLookupWrn
message QueryLookupWrnResponse{
// QueryLookupCrnResponse is response type for QueryLookupCrn
message QueryLookupCrnResponse{
NameRecord name = 1;
}
// QueryResolveWrn is request type for ResolveWrn
message QueryResolveWrn{
string wrn = 1;
// QueryResolveCrn is request type for ResolveCrn
message QueryResolveCrn{
string crn = 1;
}
// QueryResolveWrnResponse is response type for QueryResolveWrn
message QueryResolveWrnResponse{
// QueryResolveCrnResponse is response type for QueryResolveCrn
message QueryResolveCrnResponse{
Record record = 1;
}

View File

@ -20,7 +20,7 @@ service Msg {
rpc DissociateRecords(MsgDissociateRecords) returns (MsgDissociateRecordsResponse){}
// ReAssociateRecords
rpc ReAssociateRecords(MsgReAssociateRecords) returns (MsgReAssociateRecordsResponse){}
// SetName will store the name with given wrn and name
// SetName will store the name with given crn and name
rpc SetName(MsgSetName) returns (MsgSetNameResponse){}
// Reserve name
rpc ReserveName(MsgReserveAuthority) returns (MsgReserveAuthorityResponse){}
@ -43,6 +43,7 @@ message MsgSetRecord{
// MsgSetRecordResponse
message MsgSetRecordResponse{
string id = 1;
}
// Payload
@ -56,7 +57,7 @@ message Payload {
// MsgSetName
message MsgSetName{
string wrn = 1;
string crn = 1;
string cid = 2;
string signer = 3;
}
@ -92,7 +93,7 @@ message MsgSetAuthorityBondResponse{
// MsgDeleteNameAuthority is SDK message for DeleteNameAuthority
message MsgDeleteNameAuthority{
string wrn = 1;
string crn = 1;
string signer = 2;
}

View File

@ -1,17 +1,17 @@
# Build chain
```bash
# it will create binary in build folder with `ethermintd`
$ make build
```bash
# it will create binary in build folder with `ethermintd`
$ make build
```
# Setup Chain
```bash
./build/chibaclonkd keys add root
./build/chibaclonkd keys add root
./build/chibaclonkd init test-moniker --chain-id ethermint_9000-1
./build/chibaclonkd add-genesis-account $(./build/chibaclonkd keys show root -a) 1000000000000000000aphoton,1000000000000000000stake
./build/chibaclonkd gentx root 1000000000000000000stake --chain-id ethermint_9000-1
./build/chibaclonkd gentx root 1000000000000000000stake --chain-id ethermint_9000-1
./build/chibaclonkd collect-gentxs
./build/chibaclonkd start
```
@ -78,7 +78,7 @@ $ ./build/chibaclonkd tx nameservice set ~/Desktop/examples/records/example1.yml
## Get records list
```bash
$ ./build/chibaclonkd q nameservice list -o json | jq
$ ./build/chibaclonkd q nameservice list -o json | jq
[
{
"id": "bafyreih7un2ntk235wshncebus5emlozdhdixrrv675my5umb6fgdergae",
@ -181,8 +181,8 @@ $ ./build/chibaclonkd q nameservice balance -o json | jq .
## add bond to the authority
```bash
$ ./build/chibaclonkd tx nameservice authority-bond [Authority Name] [Bond ID ] --from root --chain-id ethermint_9000-1 -y -o json | jq .
$ ./build/chibaclonkd tx nameservice authority-bond hello 95f68b1b862bfd1609b0c9aaf7300287b92fec90ac64027092c3e723af36e83d --from root --chain-id ethermint_9000-1 -y -o json | jq .
$ ./build/chibaclonkd tx nameservice authority-bond [Authority Name] [Bond ID ] --from root --chain-id ethermint_9000-1 -y -o json | jq .
$ ./build/chibaclonkd tx nameservice authority-bond hello 95f68b1b862bfd1609b0c9aaf7300287b92fec90ac64027092c3e723af36e83d --from root --chain-id ethermint_9000-1 -y -o json | jq .
```
## Query the records by associate bond id
@ -247,12 +247,12 @@ txhash: 7AFEF524CB0D92D6576FC08601A787786E802449888FD8DDAA7635698CC85060
"timestamp": ""
}
```
```
## dissociate-records => remove all record from bond
```bash
$./build/chibaclonkd tx nameservice dissociate-records c3f7a78c5042d2003880962ba31ff3b01fcf5942960e0bc3ca331f816346a440 --from root --chain-id ethermint_9000-1 -y -o json | jq .
$./build/chibaclonkd tx nameservice dissociate-records c3f7a78c5042d2003880962ba31ff3b01fcf5942960e0bc3ca331f816346a440 --from root --chain-id ethermint_9000-1 -y -o json | jq .
{
"height": "0",
"txhash": "0316F503E5DEA47CB108AE6C7C7FFAF3F71CC56BC22F63CB97322E1BE48B33B9",
@ -274,14 +274,14 @@ $./build/chibaclonkd tx nameservice dissociate-records c3f7a78c5042d2003880962ba
> When a record is expires , needs to renew record
```bash
$ ./build/chibaclonkd tx nameservice renew-record bafyreih7un2ntk235wshncebus5emlozdhdixrrv675my5umb6fgdergae --from root --chain-id ethermint_9000-1
$ ./build/chibaclonkd tx nameservice renew-record bafyreih7un2ntk235wshncebus5emlozdhdixrrv675my5umb6fgdergae --from root --chain-id ethermint_9000-1
```
## Set the authority name
```bash
$ ./build/chibaclonkd tx nameservice set-name wrn://hello/test test_hello_cid --from root --chain-id ethermint_9000-1 -y -o json | jq .
$ ./build/chibaclonkd tx nameservice set-name crn://hello/test test_hello_cid --from root --chain-id ethermint_9000-1 -y -o json | jq .
{
"height": "0",
"txhash": "66A63C73B076EEE9A2F7605354448EDEB161F0115D4D03AF68C01BA28DB97486",
@ -301,7 +301,7 @@ $ ./build/chibaclonkd tx nameservice set-name wrn://hello/test test_hello_cid -
## Delete the name
```bash
$./build/chibaclonkd tx nameservice delete-name wrn://hello/test --from root --chain-id ethermint_9000-1 -y
$./build/chibaclonkd tx nameservice delete-name crn://hello/test --from root --chain-id ethermint_9000-1 -y
code: 0
codespace: ""
data: ""
@ -320,7 +320,7 @@ txhash: A3FF4C46BAC7BD6E54BBB743A49830AE8C6F6FE59282384789CBA323C1FE540C
## List of Authorities Expire Queue
```bash
$ ./build/chibaclonkd q nameservice authority-expiry -o json | jq .
$ ./build/chibaclonkd q nameservice authority-expiry -o json | jq .
{
"authorities": [],
"pagination": null
@ -331,7 +331,7 @@ $ ./build/chibaclonkd q nameservice authority-expiry -o json | jq .
## List of Records Expire Queue
```bash
$ ./build/chibaclonkd q nameservice record-expiry -o json | jq .
$ ./build/chibaclonkd q nameservice record-expiry -o json | jq .
{
"records": [],
"pagination": null

View File

@ -13,5 +13,8 @@ func BeginBlocker(ctx sdk.Context, k keeper.Keeper) {
// EndBlocker Called every block, update validator set
func EndBlocker(ctx sdk.Context, k keeper.Keeper) []abci.ValidatorUpdate {
k.ProcessRecordExpiryQueue(ctx)
k.ProcessAuthorityExpiryQueue(ctx)
return []abci.ValidatorUpdate{}
}

View File

@ -3,12 +3,13 @@ package cli
import (
"encoding/json"
"fmt"
"strings"
"github.com/cosmos/cosmos-sdk/client"
"github.com/cosmos/cosmos-sdk/client/flags"
"github.com/cosmos/cosmos-sdk/version"
"github.com/spf13/cobra"
"github.com/tharsis/ethermint/x/nameservice/types"
"strings"
)
// GetQueryCmd returns the cli query commands for this module
@ -23,7 +24,7 @@ func GetQueryCmd() *cobra.Command {
bondQueryCmd.AddCommand(
GetCmdWhoIs(),
GetCmdResolve(),
GetCmdLookupWRN(),
GetCmdLookupCRN(),
GetRecordExpiryQueue(),
GetAuthorityExpiryQueue(),
GetQueryParamsCmd(),
@ -68,15 +69,15 @@ $ %s query %s whois [name]
return cmd
}
// GetCmdLookupWRN queries naming info for a WRN.
func GetCmdLookupWRN() *cobra.Command {
// GetCmdLookupCRN queries naming info for a CRN.
func GetCmdLookupCRN() *cobra.Command {
cmd := &cobra.Command{
Use: "lookup [wrn]",
Short: "Get naming info for WRN.",
Use: "lookup [crn]",
Short: "Get naming info for CRN.",
Long: strings.TrimSpace(
fmt.Sprintf(`Get naming info for WRN.
fmt.Sprintf(`Get naming info for CRN.
Example:
$ %s query %s lookup [wrn]
$ %s query %s lookup [crn]
`,
version.AppName, types.ModuleName,
),
@ -88,7 +89,7 @@ $ %s query %s lookup [wrn]
return err
}
queryClient := types.NewQueryClient(clientCtx)
res, err := queryClient.LookupWrn(cmd.Context(), &types.QueryLookupWrn{Wrn: args[0]})
res, err := queryClient.LookupCrn(cmd.Context(), &types.QueryLookupCrn{Crn: args[0]})
if err != nil {
return err
}
@ -141,7 +142,7 @@ func GetCmdList() *cobra.Command {
Long: strings.TrimSpace(
fmt.Sprintf(`Get the records.
Example:
$ %s query %s list
$ %s query %s list
`,
version.AppName, types.ModuleName,
),
@ -184,7 +185,7 @@ func GetCmdGetResource() *cobra.Command {
Long: strings.TrimSpace(
fmt.Sprintf(`Get the record by id.
Example:
$ %s query %s get [ID]
$ %s query %s get [ID]
`,
version.AppName, types.ModuleName,
),
@ -207,15 +208,15 @@ $ %s query %s get [ID]
return cmd
}
// GetCmdResolve resolves a WRN to a record.
// GetCmdResolve resolves a CRN to a record.
func GetCmdResolve() *cobra.Command {
cmd := &cobra.Command{
Use: "resolve [wrn]",
Short: "Resolve WRN to record.",
Use: "resolve [crn]",
Short: "Resolve CRN to record.",
Long: strings.TrimSpace(
fmt.Sprintf(`Resolve WRN to record.
fmt.Sprintf(`Resolve CRN to record.
Example:
$ %s query %s resolve [wrn]
$ %s query %s resolve [crn]
`,
version.AppName, types.ModuleName,
),
@ -227,7 +228,7 @@ $ %s query %s resolve [wrn]
return err
}
queryClient := types.NewQueryClient(clientCtx)
record, err := queryClient.ResolveWrn(cmd.Context(), &types.QueryResolveWrn{Wrn: args[0]})
record, err := queryClient.ResolveCrn(cmd.Context(), &types.QueryResolveCrn{Crn: args[0]})
if err != nil {
return err
}
@ -246,7 +247,7 @@ func GetCmdQueryByBond() *cobra.Command {
Long: strings.TrimSpace(
fmt.Sprintf(`Get the record by bond id.
Example:
$ %s query %s query-by-bond [bond id]
$ %s query %s query-by-bond [bond id]
`,
version.AppName, types.ModuleName,
),

View File

@ -2,6 +2,9 @@ package cli
import (
"fmt"
"io/ioutil"
"strings"
"github.com/cosmos/cosmos-sdk/client"
"github.com/cosmos/cosmos-sdk/client/tx"
sdk "github.com/cosmos/cosmos-sdk/types"
@ -10,8 +13,6 @@ import (
"github.com/tharsis/ethermint/server/flags"
"github.com/tharsis/ethermint/x/nameservice/types"
"gopkg.in/yaml.v3"
"io/ioutil"
"strings"
)
// NewTxCmd returns a root CLI command handler for all x/bond transaction commands.
@ -241,12 +242,12 @@ $ %s tx %s reassociate-records [old-bond-id] [new-bond-id]
// GetCmdSetName is the CLI command for mapping a name to a CID.
func GetCmdSetName() *cobra.Command {
cmd := &cobra.Command{
Use: "set-name [wrn] [cid]",
Short: "Set WRN to CID mapping.",
Use: "set-name [crn] [cid]",
Short: "Set CRN to CID mapping.",
Long: strings.TrimSpace(
fmt.Sprintf(`Set name with wrn and cid.
fmt.Sprintf(`Set name with crn and cid.
Example:
$ %s tx %s set-name [wrn] [cid]
$ %s tx %s set-name [crn] [cid]
`,
version.AppName, types.ModuleName,
),
@ -345,12 +346,12 @@ $ %s tx %s authority-bond [name] [bond-id]
func GetCmdDeleteName() *cobra.Command {
cmd := &cobra.Command{
Use: "delete-name [wrn]",
Short: "Delete WRN.",
Use: "delete-name [crn]",
Short: "Delete CRN.",
Long: strings.TrimSpace(
fmt.Sprintf(`Delete WRN.
fmt.Sprintf(`Delete CRN.
Example:
$ %s tx %s delete-name [wrn]
$ %s tx %s delete-name [crn]
`,
version.AppName, types.ModuleName,
),

View File

@ -3,6 +3,9 @@ package testutil
import (
"encoding/json"
"fmt"
"os"
"time"
"github.com/cosmos/cosmos-sdk/client/flags"
clitestutil "github.com/cosmos/cosmos-sdk/testutil/cli"
sdk "github.com/cosmos/cosmos-sdk/types"
@ -10,8 +13,6 @@ import (
tmcli "github.com/tendermint/tendermint/libs/cli"
"github.com/tharsis/ethermint/x/nameservice/client/cli"
nstypes "github.com/tharsis/ethermint/x/nameservice/types"
"os"
"time"
)
func (s *IntegrationTestSuite) TestGRPCQueryParams() {
@ -51,8 +52,8 @@ func (s *IntegrationTestSuite) TestGRPCQueryParams() {
sr.NoError(err)
params := nstypes.DefaultParams()
params.RecordRent = sdk.NewCoin(s.cfg.BondDenom, nstypes.DefaultRecordRent)
params.RecordRentDuration = 5 * time.Second
params.AuthorityGracePeriod = 5 * time.Second
params.RecordRentDuration = 10 * time.Second
params.AuthorityGracePeriod = 10 * time.Second
sr.Equal(response.GetParams().String(), params.String())
}
})
@ -130,7 +131,7 @@ func (s *IntegrationTestSuite) TestGRPCQueryWhoIs() {
func (s *IntegrationTestSuite) TestGRPCQueryLookup() {
val := s.network.Validators[0]
sr := s.Require()
reqUrl := val.APIAddress + "/vulcanize/nameservice/v1beta1/lookup?wrn=%s"
reqUrl := val.APIAddress + "/vulcanize/nameservice/v1beta1/lookup?crn=%s"
var authorityName = "QueryLookUp"
testCases := []struct {
@ -165,13 +166,13 @@ func (s *IntegrationTestSuite) TestGRPCQueryLookup() {
s.Run(tc.name, func() {
if !tc.expectErr {
tc.preRun(authorityName)
tc.url = fmt.Sprintf(reqUrl, fmt.Sprintf("wrn://%s/", authorityName))
tc.url = fmt.Sprintf(reqUrl, fmt.Sprintf("crn://%s/", authorityName))
}
resp, _ := rest.GetRequest(tc.url)
if tc.expectErr {
sr.Contains(string(resp), tc.errorMsg)
} else {
var response nstypes.QueryLookupWrnResponse
var response nstypes.QueryLookupCrnResponse
err := val.ClientCtx.Codec.UnmarshalJSON(resp, &response)
sr.NoError(err)
sr.NotZero(len(response.Name.Latest.Id))
@ -236,8 +237,8 @@ func (s *IntegrationTestSuite) TestGRPCQueryRecordExpiryQueue() {
if !tc.expectErr {
tc.preRun(s.bondId)
}
// wait 7 seconds for records expires
time.Sleep(time.Second * 7)
// wait 12 seconds for records expires
time.Sleep(time.Second * 12)
resp, _ := rest.GetRequest(tc.url)
require := s.Require()
if tc.expectErr {
@ -306,8 +307,8 @@ func (s *IntegrationTestSuite) TestGRPCQueryAuthorityExpiryQueue() {
if !tc.expectErr {
tc.preRun("QueryAuthorityExpiryQueue")
}
// wait 7 seconds to name authorites expires
time.Sleep(time.Second * 7)
// wait 12 seconds to name authorites expires
time.Sleep(time.Second * 12)
resp, _ := rest.GetRequest(tc.url)
require := s.Require()
@ -317,7 +318,8 @@ func (s *IntegrationTestSuite) TestGRPCQueryAuthorityExpiryQueue() {
var response nstypes.QueryGetAuthorityExpiryQueueResponse
err := val.ClientCtx.Codec.UnmarshalJSON(resp, &response)
sr.NoError(err)
sr.NotZero(len(response.GetAuthorities()))
// removed from expiry queue as no bond set
sr.Zero(len(response.GetAuthorities()))
}
})
}

View File

@ -3,14 +3,15 @@ package testutil
import (
"encoding/json"
"fmt"
"os"
"time"
"github.com/cosmos/cosmos-sdk/client/flags"
clitestutil "github.com/cosmos/cosmos-sdk/testutil/cli"
sdk "github.com/cosmos/cosmos-sdk/types"
tmcli "github.com/tendermint/tendermint/libs/cli"
"github.com/tharsis/ethermint/x/nameservice/client/cli"
"github.com/tharsis/ethermint/x/nameservice/types"
"os"
"time"
)
func (s *IntegrationTestSuite) TestGetCmdQueryParams() {
@ -39,8 +40,8 @@ func (s *IntegrationTestSuite) TestGetCmdQueryParams() {
sr.NoError(err)
params := types.DefaultParams()
params.RecordRent = sdk.NewCoin(s.cfg.BondDenom, types.DefaultRecordRent)
params.RecordRentDuration = 5 * time.Second
params.AuthorityGracePeriod = 5 * time.Second
params.RecordRentDuration = 10 * time.Second
params.AuthorityGracePeriod = 10 * time.Second
sr.Equal(param.GetParams().String(), params.String())
})
}
@ -302,7 +303,7 @@ func (s *IntegrationTestSuite) TestGetCmdWhoIs() {
}
}
func (s *IntegrationTestSuite) TestGetCmdLookupWRN() {
func (s *IntegrationTestSuite) TestGetCmdLookupCRN() {
val := s.network.Validators[0]
sr := s.Require()
var authorityName = "test1"
@ -314,7 +315,7 @@ func (s *IntegrationTestSuite) TestGetCmdLookupWRN() {
preRun func(authorityName string)
}{
{
"invalid request without wrn",
"invalid request without crn",
[]string{fmt.Sprintf("--%s=json", tmcli.OutputFlag)},
true,
0,
@ -324,7 +325,7 @@ func (s *IntegrationTestSuite) TestGetCmdLookupWRN() {
},
{
"success query with name",
[]string{fmt.Sprintf("wrn://%s/", authorityName), fmt.Sprintf("--%s=json", tmcli.OutputFlag)},
[]string{fmt.Sprintf("crn://%s/", authorityName), fmt.Sprintf("--%s=json", tmcli.OutputFlag)},
false,
1,
func(authorityName string) {
@ -337,10 +338,10 @@ func (s *IntegrationTestSuite) TestGetCmdLookupWRN() {
for _, tc := range testCases {
s.Run(tc.name, func() {
if !tc.expErr {
// set-name with wrn and bond-id
// set-name with crn and bond-id
tc.preRun(authorityName)
}
cmd := cli.GetCmdLookupWRN()
cmd := cli.GetCmdLookupCRN()
clientCtx := val.ClientCtx
out, err := clitestutil.ExecTestCLICmd(clientCtx, cmd, tc.args)
@ -348,7 +349,7 @@ func (s *IntegrationTestSuite) TestGetCmdLookupWRN() {
sr.Error(err)
} else {
sr.NoError(err)
var response types.QueryLookupWrnResponse
var response types.QueryLookupCrnResponse
err = clientCtx.Codec.UnmarshalJSON(out.Bytes(), &response)
sr.NoError(err)
nameRecord := response.GetName()
@ -364,7 +365,7 @@ func (s *IntegrationTestSuite) TestGetCmdLookupWRN() {
noOfRecords int
}{
{
"invalid request without wrn",
"invalid request without crn",
[]string{"invalid", fmt.Sprintf("--%s=json", tmcli.OutputFlag)},
true,
0,
@ -432,7 +433,7 @@ func (s *IntegrationTestSuite) GetRecordExpiryQueue() {
s.Run(tc.name, func() {
if !tc.expErr {
tc.preRun(authorityName, s)
time.Sleep(time.Second * 7)
time.Sleep(time.Second * 12)
}
cmd := cli.GetRecordExpiryQueue()
clientCtx := val.ClientCtx
@ -565,7 +566,7 @@ func createNameRecord(authorityName string, s *IntegrationTestSuite) {
sr.Zero(d.Code)
args = []string{
fmt.Sprintf("wrn://%s/", authorityName),
fmt.Sprintf("crn://%s/", authorityName),
"test_hello_cid",
fmt.Sprintf("--%s=%s", flags.FlagFrom, accountName),
fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation),

View File

@ -47,8 +47,8 @@ func (s *IntegrationTestSuite) SetupSuite() {
s.Require().NoError(s.cfg.Codec.UnmarshalJSON(genesisState[nstypes.ModuleName], &nsData))
nsData.Params.RecordRent = sdk.NewCoin(s.cfg.BondDenom, nstypes.DefaultRecordRent)
nsData.Params.RecordRentDuration = 5 * time.Second
nsData.Params.AuthorityGracePeriod = 5 * time.Second
nsData.Params.RecordRentDuration = 10 * time.Second
nsData.Params.AuthorityGracePeriod = 10 * time.Second
nsDataBz, err := s.cfg.Codec.MarshalJSON(&nsData)
s.Require().NoError(err)
genesisState[nstypes.ModuleName] = nsDataBz
@ -313,7 +313,7 @@ func (s *IntegrationTestSuite) TestGetCmdSetName() {
{
"success",
[]string{
fmt.Sprintf("wrn://%s/", authorityName),
fmt.Sprintf("crn://%s/", authorityName),
"test_hello_cid",
fmt.Sprintf("--%s=%s", flags.FlagFrom, accountName),
fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation),
@ -488,7 +488,7 @@ func (s *IntegrationTestSuite) TestGetCmdDeleteName() {
preRun func(authorityName string, s *IntegrationTestSuite)
}{
{
"invalid request without wrn",
"invalid request without crn",
[]string{
fmt.Sprintf("--%s=%s", flags.FlagFrom, accountName),
fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation),
@ -521,7 +521,7 @@ func (s *IntegrationTestSuite) TestGetCmdDeleteName() {
s.Run(fmt.Sprintf("Case %s", tc.name), func() {
if !tc.err {
tc.preRun(authorityName, s)
tc.args = append([]string{fmt.Sprintf("wrn://%s/", authorityName)}, tc.args...)
tc.args = append([]string{fmt.Sprintf("crn://%s/", authorityName)}, tc.args...)
}
clientCtx := val.ClientCtx
cmd := cli.GetCmdDeleteName()
@ -551,7 +551,7 @@ func (s *IntegrationTestSuite) TestGetCmdDissociateBond() {
postRun func(recordId string, s *IntegrationTestSuite)
}{
{
"invalid request without wrn",
"invalid request without crn",
[]string{
fmt.Sprintf("--%s=%s", flags.FlagFrom, accountName),
fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation),
@ -670,7 +670,7 @@ func (s *IntegrationTestSuite) TestGetCmdDissociateBond() {
// postRun func(recordId string, s *IntegrationTestSuite)
// }{
// {
// "invalid request without wrn",
// "invalid request without crn",
// []string{
// fmt.Sprintf("--%s=%s", flags.FlagFrom, accountName),
// fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation),
@ -794,7 +794,7 @@ func (s *IntegrationTestSuite) TestGetCmdAssociateBond() {
postRun func(recordId, bondId string, s *IntegrationTestSuite)
}{
{
"invalid request without wrn",
"invalid request without crn",
[]string{
fmt.Sprintf("--%s=%s", flags.FlagFrom, accountName),
fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation),

View File

@ -1,6 +1,8 @@
package nameservice
import (
"time"
sdk "github.com/cosmos/cosmos-sdk/types"
abci "github.com/tendermint/tendermint/abci/types"
"github.com/tharsis/ethermint/x/nameservice/keeper"
@ -14,7 +16,13 @@ func InitGenesis(ctx sdk.Context, keeper keeper.Keeper, data types.GenesisState)
keeper.PutRecord(ctx, record)
// Add to record expiry queue if expiry time is in the future.
if record.ExpiryTime.After(ctx.BlockTime()) {
expiryTime, err := time.Parse(time.RFC3339, record.ExpiryTime)
if err != nil {
panic(err)
}
if expiryTime.After(ctx.BlockTime()) {
keeper.InsertRecordExpiryQueue(ctx, record)
}

View File

@ -2,11 +2,18 @@ package keeper
import (
"context"
sdk "github.com/cosmos/cosmos-sdk/types"
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
"github.com/tharsis/ethermint/x/nameservice/types"
)
// BondIDAttributeName denotes the record bond ID.
const BondIDAttributeName = "bondId"
// ExpiryTimeAttributeName denotes the record expiry time.
const ExpiryTimeAttributeName = "expiryTime"
type Querier struct {
Keeper
}
@ -19,9 +26,20 @@ func (q Querier) Params(c context.Context, _ *types.QueryParamsRequest) (*types.
return &types.QueryParamsResponse{Params: &params}, nil
}
func (q Querier) ListRecords(c context.Context, _ *types.QueryListRecordsRequest) (*types.QueryListRecordsResponse, error) {
func (q Querier) ListRecords(c context.Context, req *types.QueryListRecordsRequest) (*types.QueryListRecordsResponse, error) {
ctx := sdk.UnwrapSDKContext(c)
records := q.Keeper.ListRecords(ctx)
attributes := req.GetAttributes()
all := req.GetAll()
records := []types.Record{}
if len(attributes) > 0 {
records = q.Keeper.MatchRecords(ctx, func(record *types.RecordType) bool {
return MatchOnAttributes(record, attributes, all)
})
} else {
records = q.Keeper.ListRecords(ctx)
}
return &types.QueryListRecordsResponse{Records: records}, nil
}
@ -61,27 +79,27 @@ func (q Querier) Whois(c context.Context, request *types.QueryWhoisRequest) (*ty
return &types.QueryWhoisResponse{NameAuthority: nameAuthority}, nil
}
func (q Querier) LookupWrn(c context.Context, req *types.QueryLookupWrn) (*types.QueryLookupWrnResponse, error) {
func (q Querier) LookupCrn(c context.Context, req *types.QueryLookupCrn) (*types.QueryLookupCrnResponse, error) {
ctx := sdk.UnwrapSDKContext(c)
wrn := req.GetWrn()
if !q.Keeper.HasNameRecord(ctx, wrn) {
return nil, sdkerrors.Wrap(sdkerrors.ErrUnknownRequest, "WRN not found.")
crn := req.GetCrn()
if !q.Keeper.HasNameRecord(ctx, crn) {
return nil, sdkerrors.Wrap(sdkerrors.ErrUnknownRequest, "CRN not found.")
}
nameRecord := q.Keeper.GetNameRecord(ctx, wrn)
nameRecord := q.Keeper.GetNameRecord(ctx, crn)
if nameRecord == nil {
return nil, sdkerrors.Wrap(sdkerrors.ErrUnknownRequest, "name record not found.")
}
return &types.QueryLookupWrnResponse{Name: nameRecord}, nil
return &types.QueryLookupCrnResponse{Name: nameRecord}, nil
}
func (q Querier) ResolveWrn(c context.Context, req *types.QueryResolveWrn) (*types.QueryResolveWrnResponse, error) {
func (q Querier) ResolveCrn(c context.Context, req *types.QueryResolveCrn) (*types.QueryResolveCrnResponse, error) {
ctx := sdk.UnwrapSDKContext(c)
wrn := req.GetWrn()
record := q.Keeper.ResolveWRN(ctx, wrn)
crn := req.GetCrn()
record := q.Keeper.ResolveCRN(ctx, crn)
if record == nil {
return nil, sdkerrors.Wrap(sdkerrors.ErrUnknownRequest, "record not found.")
}
return &types.QueryResolveWrnResponse{Record: record}, nil
return &types.QueryResolveCrnResponse{Record: record}, nil
}
func (q Querier) GetRecordExpiryQueue(c context.Context, _ *types.QueryGetRecordExpiryQueue) (*types.QueryGetRecordExpiryQueueResponse, error) {
@ -95,3 +113,115 @@ func (q Querier) GetAuthorityExpiryQueue(c context.Context, _ *types.QueryGetAut
authorities := q.Keeper.GetAuthorityExpiryQueue(ctx)
return &types.QueryGetAuthorityExpiryQueueResponse{Authorities: authorities}, nil
}
func matchOnRecordField(record *types.RecordType, attr *types.QueryListRecordsRequest_KeyValueInput) (fieldFound bool, matched bool) {
fieldFound = false
matched = true
switch attr.Key {
case BondIDAttributeName:
{
fieldFound = true
if record.BondId != attr.Value.GetString_() {
matched = false
return
}
}
case ExpiryTimeAttributeName:
{
fieldFound = true
if record.ExpiryTime != attr.Value.GetString_() {
matched = false
return
}
}
}
return
}
func MatchOnAttributes(record *types.RecordType, attributes []*types.QueryListRecordsRequest_KeyValueInput, all bool) bool {
// Filter deleted records.
if record.Deleted {
return false
}
// If ONLY named records are requested, check for that condition first.
if !all && len(record.Names) == 0 {
return false
}
recAttrs := record.Attributes
for _, attr := range attributes {
// First try matching on record struct fields.
fieldFound, matched := matchOnRecordField(record, attr)
if fieldFound {
if !matched {
return false
}
continue
}
recAttrVal, recAttrFound := recAttrs[attr.Key]
if !recAttrFound {
return false
}
if attr.Value.Type == "int" {
recAttrValInt, ok := recAttrVal.(int)
if !ok || int(attr.Value.GetInt()) != recAttrValInt {
return false
}
}
if attr.Value.Type == "float" {
recAttrValFloat, ok := recAttrVal.(float64)
if !ok || attr.Value.GetFloat() != recAttrValFloat {
return false
}
}
if attr.Value.Type == "string" {
recAttrValString, ok := recAttrVal.(string)
if !ok {
return false
}
if attr.Value.GetString_() != recAttrValString {
return false
}
}
if attr.Value.Type == "boolean" {
recAttrValBool, ok := recAttrVal.(bool)
if !ok || attr.Value.GetBoolean() != recAttrValBool {
return false
}
}
if attr.Value.Type == "reference" {
obj, ok := recAttrVal.(map[string]interface{})
if !ok {
// Attr value is not an object.
return false
}
if _, ok := obj["/"].(string); !ok {
// Attr value is not a reference.
return false
}
recAttrValRefID := obj["/"].(string)
if recAttrValRefID != attr.Value.GetReference().GetId() {
return false
}
}
// TODO: Handle arrays.
}
return true
}

View File

@ -3,9 +3,10 @@ package keeper_test
import (
"context"
"fmt"
"os"
"github.com/tharsis/ethermint/x/nameservice/client/cli"
nameservicetypes "github.com/tharsis/ethermint/x/nameservice/types"
"os"
)
func (suite *KeeperTestSuite) TestGrpcQueryParams() {
@ -62,12 +63,13 @@ func (suite *KeeperTestSuite) TestGrpcGetRecordLists() {
sr.NoError(err)
payload, err := cli.GetPayloadFromFile(dir + "/../helpers/examples/example1.yml")
sr.NoError(err)
err = suite.app.NameServiceKeeper.ProcessSetRecord(ctx, nameservicetypes.MsgSetRecord{
record, err := suite.app.NameServiceKeeper.ProcessSetRecord(ctx, nameservicetypes.MsgSetRecord{
BondId: suite.bond.GetId(),
Signer: suite.accounts[0].String(),
Payload: payload.ToPayload(),
})
sr.NoError(err)
sr.NotNil(record.Id)
}
resp, err := grpcClient.ListRecords(context.Background(), test.req)
if test.expErr {
@ -192,12 +194,13 @@ func (suite *KeeperTestSuite) TestGrpcQueryNameserviceModuleBalance() {
sr.NoError(err)
payload, err := cli.GetPayloadFromFile(dir + "/../helpers/examples/example1.yml")
sr.NoError(err)
err = suite.app.NameServiceKeeper.ProcessSetRecord(ctx, nameservicetypes.MsgSetRecord{
record, err := suite.app.NameServiceKeeper.ProcessSetRecord(ctx, nameservicetypes.MsgSetRecord{
BondId: suite.bond.GetId(),
Signer: suite.accounts[0].String(),
Payload: payload.ToPayload(),
})
sr.NoError(err)
sr.NotNil(record.Id)
}
resp, err := grpcClient.GetNameServiceModuleBalance(context.Background(), test.req)
if test.expErr {

View File

@ -1,7 +1,11 @@
package keeper
import (
"bytes"
"fmt"
"sort"
"time"
"github.com/cosmos/cosmos-sdk/codec"
"github.com/cosmos/cosmos-sdk/codec/legacy"
sdk "github.com/cosmos/cosmos-sdk/types"
@ -13,8 +17,6 @@ import (
bondkeeper "github.com/tharsis/ethermint/x/bond/keeper"
"github.com/tharsis/ethermint/x/nameservice/helpers"
"github.com/tharsis/ethermint/x/nameservice/types"
"sort"
"time"
)
var (
@ -27,8 +29,8 @@ var (
// PrefixNameAuthorityRecordIndex is the prefix for the name -> NameAuthority index.
PrefixNameAuthorityRecordIndex = []byte{0x01}
// PrefixWRNToNameRecordIndex is the prefix for the WRN -> NamingRecord index.
PrefixWRNToNameRecordIndex = []byte{0x02}
// PrefixCRNToNameRecordIndex is the prefix for the CRN -> NamingRecord index.
PrefixCRNToNameRecordIndex = []byte{0x02}
// PrefixBondIDToRecordsIndex is the prefix for the Bond ID -> [Record] index.
PrefixBondIDToRecordsIndex = []byte{0x03}
@ -118,8 +120,30 @@ func (k Keeper) ListRecords(ctx sdk.Context) []types.Record {
if bz != nil {
var obj types.Record
k.cdc.MustUnmarshal(bz, &obj)
//records = append(records, recordObjToRecord(store, k.cdc, obj))
records = append(records, obj)
records = append(records, recordObjToRecord(store, k.cdc, obj))
}
}
return records
}
// MatchRecords - get all matching records.
func (k Keeper) MatchRecords(ctx sdk.Context, matchFn func(*types.RecordType) bool) []types.Record {
var records []types.Record
store := ctx.KVStore(k.storeKey)
itr := sdk.KVStorePrefixIterator(store, PrefixCIDToRecordIndex)
defer itr.Close()
for ; itr.Valid(); itr.Next() {
bz := store.Get(itr.Key())
if bz != nil {
var obj types.Record
k.cdc.MustUnmarshal(bz, &obj)
obj = recordObjToRecord(store, k.cdc, obj)
record := obj.ToRecordType()
if matchFn(&record) {
records = append(records, obj)
}
}
}
@ -147,7 +171,7 @@ func (k Keeper) GetRecordExpiryQueue(ctx sdk.Context) []*types.ExpiryQueueRecord
}
// ProcessSetRecord creates a record.
func (k Keeper) ProcessSetRecord(ctx sdk.Context, msg types.MsgSetRecord) error {
func (k Keeper) ProcessSetRecord(ctx sdk.Context, msg types.MsgSetRecord) (*types.RecordType, error) {
payload := msg.Payload.ToReadablePayload()
record := types.RecordType{Attributes: payload.Record, BondId: msg.BondId}
@ -155,13 +179,14 @@ func (k Keeper) ProcessSetRecord(ctx sdk.Context, msg types.MsgSetRecord) error
resourceSignBytes, _ := record.GetSignBytes()
cid, err := record.GetCID()
if err != nil {
return sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "Invalid record JSON")
return nil, sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "Invalid record JSON")
}
record.Id = cid
if exists := k.HasRecord(ctx, record.Id); exists {
return nil
// Immutable record already exists. No-op.
return &record, nil
}
record.Owners = []string{}
@ -169,13 +194,13 @@ func (k Keeper) ProcessSetRecord(ctx sdk.Context, msg types.MsgSetRecord) error
pubKey, err := legacy.PubKeyFromBytes(helpers.BytesFromBase64(sig.PubKey))
if err != nil {
fmt.Println("Error decoding pubKey from bytes: ", err)
return sdkerrors.Wrap(sdkerrors.ErrUnauthorized, "Invalid public key.")
return nil, sdkerrors.Wrap(sdkerrors.ErrUnauthorized, "Invalid public key.")
}
sigOK := pubKey.VerifySignature(resourceSignBytes, helpers.BytesFromBase64(sig.Sig))
if !sigOK {
fmt.Println("Signature mismatch: ", sig.PubKey)
return sdkerrors.Wrap(sdkerrors.ErrUnauthorized, "Invalid signature.")
return nil, sdkerrors.Wrap(sdkerrors.ErrUnauthorized, "Invalid signature.")
}
record.Owners = append(record.Owners, pubKey.Address().String())
}
@ -184,9 +209,9 @@ func (k Keeper) ProcessSetRecord(ctx sdk.Context, msg types.MsgSetRecord) error
sort.Strings(record.Owners)
sdkErr := k.processRecord(ctx, &record, false)
if sdkErr != nil {
return sdkErr
return nil, sdkErr
}
return nil
return &record, nil
}
func (k Keeper) processRecord(ctx sdk.Context, record *types.RecordType, isRenewal bool) error {
@ -198,8 +223,8 @@ func (k Keeper) processRecord(ctx sdk.Context, record *types.RecordType, isRenew
return err
}
record.CreateTime = ctx.BlockHeader().Time
record.ExpiryTime = ctx.BlockHeader().Time.Add(params.RecordRentDuration)
record.CreateTime = ctx.BlockHeader().Time.Format(time.RFC3339)
record.ExpiryTime = ctx.BlockHeader().Time.Add(params.RecordRentDuration).Format(time.RFC3339)
record.Deleted = false
k.PutRecord(ctx, record.ToRecordObj())
@ -268,9 +293,111 @@ func (k Keeper) GetRecordExpiryQueueTimeSlice(ctx sdk.Context, timestamp time.Ti
// InsertRecordExpiryQueue inserts a record CID to the appropriate timeslice in the record expiry queue.
func (k Keeper) InsertRecordExpiryQueue(ctx sdk.Context, val types.Record) {
timeSlice := k.GetRecordExpiryQueueTimeSlice(ctx, val.ExpiryTime)
expiryTime, err := time.Parse(time.RFC3339, val.ExpiryTime)
if err != nil {
panic(err)
}
timeSlice := k.GetRecordExpiryQueueTimeSlice(ctx, expiryTime)
timeSlice = append(timeSlice, val.Id)
k.SetRecordExpiryQueueTimeSlice(ctx, val.ExpiryTime, timeSlice)
k.SetRecordExpiryQueueTimeSlice(ctx, expiryTime, timeSlice)
}
// DeleteRecordExpiryQueue deletes a record CID from the record expiry queue.
func (k Keeper) DeleteRecordExpiryQueue(ctx sdk.Context, record types.Record) {
expiryTime, err := time.Parse(time.RFC3339, record.ExpiryTime)
if err != nil {
panic(err)
}
timeSlice := k.GetRecordExpiryQueueTimeSlice(ctx, expiryTime)
var newTimeSlice []string
for _, cid := range timeSlice {
if !bytes.Equal([]byte(cid), []byte(record.Id)) {
newTimeSlice = append(newTimeSlice, cid)
}
}
if len(newTimeSlice) == 0 {
k.DeleteRecordExpiryQueueTimeSlice(ctx, expiryTime)
} else {
k.SetRecordExpiryQueueTimeSlice(ctx, expiryTime, newTimeSlice)
}
}
// RecordExpiryQueueIterator returns all the record expiry queue timeslices from time 0 until endTime.
func (k Keeper) RecordExpiryQueueIterator(ctx sdk.Context, endTime time.Time) sdk.Iterator {
store := ctx.KVStore(k.storeKey)
rangeEndBytes := sdk.InclusiveEndBytes(getRecordExpiryQueueTimeKey(endTime))
return store.Iterator(PrefixExpiryTimeToRecordsIndex, rangeEndBytes)
}
// GetAllExpiredRecords returns a concatenated list of all the timeslices before currTime.
func (k Keeper) GetAllExpiredRecords(ctx sdk.Context, currTime time.Time) (expiredRecordCIDs []string) {
// Gets an iterator for all timeslices from time 0 until the current block header time.
itr := k.RecordExpiryQueueIterator(ctx, ctx.BlockHeader().Time)
defer itr.Close()
for ; itr.Valid(); itr.Next() {
timeslice, err := helpers.BytesArrToStringArr(itr.Value())
if err != nil {
panic(err)
}
expiredRecordCIDs = append(expiredRecordCIDs, timeslice...)
}
return expiredRecordCIDs
}
// ProcessRecordExpiryQueue tries to renew expiring records (by collecting rent) else marks them as deleted.
func (k Keeper) ProcessRecordExpiryQueue(ctx sdk.Context) {
cids := k.GetAllExpiredRecords(ctx, ctx.BlockHeader().Time)
for _, cid := range cids {
record := k.GetRecord(ctx, cid)
// If record doesn't have an associated bond or if bond no longer exists, mark it deleted.
if record.BondId == "" || !k.bondKeeper.HasBond(ctx, record.BondId) {
record.Deleted = true
k.PutRecord(ctx, record)
k.DeleteRecordExpiryQueue(ctx, record)
return
}
// Try to renew the record by taking rent.
k.TryTakeRecordRent(ctx, record)
}
}
// TryTakeRecordRent tries to take rent from the record bond.
func (k Keeper) TryTakeRecordRent(ctx sdk.Context, record types.Record) {
params := k.GetParams(ctx)
rent := params.RecordRent
sdkErr := k.bondKeeper.TransferCoinsToModuleAccount(ctx, record.BondId, types.RecordRentModuleAccountName, sdk.NewCoins(rent))
if sdkErr != nil {
// Insufficient funds, mark record as deleted.
record.Deleted = true
k.PutRecord(ctx, record)
k.DeleteRecordExpiryQueue(ctx, record)
return
}
// Delete old expiry queue entry, create new one.
k.DeleteRecordExpiryQueue(ctx, record)
record.ExpiryTime = ctx.BlockHeader().Time.Add(params.RecordRentDuration).Format(time.RFC3339)
k.InsertRecordExpiryQueue(ctx, record)
// Save record.
record.Deleted = false
k.PutRecord(ctx, record)
k.AddBondToRecordIndexEntry(ctx, record.BondId, record.Id)
}
// GetModuleBalances gets the nameservice module account(s) balances.
@ -292,3 +419,19 @@ func (k Keeper) GetModuleBalances(ctx sdk.Context) []*types.AccountBalance {
return balances
}
func recordObjToRecord(store sdk.KVStore, codec codec.BinaryCodec, record types.Record) types.Record {
reverseNameIndexKey := GetCIDToNamesIndexKey(record.Id)
if store.Has(reverseNameIndexKey) {
names, err := helpers.BytesArrToStringArr(store.Get(reverseNameIndexKey))
if err != nil {
panic(err)
}
record.Names = names
}
return record
}

View File

@ -2,6 +2,7 @@ package keeper
import (
"context"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/tharsis/ethermint/x/nameservice/types"
)
@ -24,7 +25,7 @@ func (m msgServer) SetRecord(c context.Context, msg *types.MsgSetRecord) (*types
return nil, err
}
err = m.Keeper.ProcessSetRecord(ctx, types.MsgSetRecord{
record, err := m.Keeper.ProcessSetRecord(ctx, types.MsgSetRecord{
BondId: msg.GetBondId(),
Signer: msg.GetSigner(),
Payload: msg.GetPayload(),
@ -47,7 +48,7 @@ func (m msgServer) SetRecord(c context.Context, msg *types.MsgSetRecord) (*types
),
})
return &types.MsgSetRecordResponse{}, nil
return &types.MsgSetRecordResponse{Id: record.Id}, nil
}
func (m msgServer) SetName(c context.Context, msg *types.MsgSetName) (*types.MsgSetNameResponse, error) {
@ -64,7 +65,7 @@ func (m msgServer) SetName(c context.Context, msg *types.MsgSetName) (*types.Msg
sdk.NewEvent(
types.EventTypeSetRecord,
sdk.NewAttribute(types.AttributeKeySigner, msg.Signer),
sdk.NewAttribute(types.AttributeKeyWRN, msg.Wrn),
sdk.NewAttribute(types.AttributeKeyCRN, msg.Crn),
sdk.NewAttribute(types.AttributeKeyCID, msg.Cid),
),
sdk.NewEvent(
@ -146,7 +147,7 @@ func (m msgServer) DeleteName(c context.Context, msg *types.MsgDeleteNameAuthori
sdk.NewEvent(
types.EventTypeDeleteName,
sdk.NewAttribute(types.AttributeKeySigner, msg.Signer),
sdk.NewAttribute(types.AttributeKeyWRN, msg.Wrn),
sdk.NewAttribute(types.AttributeKeyCRN, msg.Crn),
),
sdk.NewEvent(
sdk.EventTypeMessage,

View File

@ -1,7 +1,12 @@
package keeper
import (
"bytes"
"fmt"
"net/url"
"strings"
"time"
"github.com/cosmos/cosmos-sdk/codec"
cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types"
sdk "github.com/cosmos/cosmos-sdk/types"
@ -9,9 +14,6 @@ import (
auctiontypes "github.com/tharsis/ethermint/x/auction/types"
"github.com/tharsis/ethermint/x/nameservice/helpers"
"github.com/tharsis/ethermint/x/nameservice/types"
"net/url"
"strings"
"time"
)
func getAuthorityPubKey(pubKey cryptotypes.PubKey) string {
@ -26,9 +28,9 @@ func GetNameAuthorityIndexKey(name string) []byte {
return append(PrefixNameAuthorityRecordIndex, []byte(name)...)
}
// GetNameRecordIndexKey Generates WRN -> NameRecord index key.
func GetNameRecordIndexKey(wrn string) []byte {
return append(PrefixWRNToNameRecordIndex, []byte(wrn)...)
// GetNameRecordIndexKey Generates CRN -> NameRecord index key.
func GetNameRecordIndexKey(crn string) []byte {
return append(PrefixCRNToNameRecordIndex, []byte(crn)...)
}
func GetCIDToNamesIndexKey(id string) []byte {
@ -101,35 +103,35 @@ func RemoveBondToAuthorityIndexEntry(store sdk.KVStore, bondID string, name stri
store.Delete(getBondIDToAuthoritiesIndexKey(bondID, name))
}
func (k Keeper) updateBlockChangeSetForName(ctx sdk.Context, wrn string) {
func (k Keeper) updateBlockChangeSetForName(ctx sdk.Context, crn string) {
changeSet := k.getOrCreateBlockChangeSet(ctx, ctx.BlockHeight())
changeSet.Names = append(changeSet.Names, wrn)
changeSet.Names = append(changeSet.Names, crn)
k.saveBlockChangeSet(ctx, changeSet)
}
func (k Keeper) getAuthority(ctx sdk.Context, wrn string) (string, *url.URL, *types.NameAuthority, error) {
parsedWRN, err := url.Parse(wrn)
func (k Keeper) getAuthority(ctx sdk.Context, crn string) (string, *url.URL, *types.NameAuthority, error) {
parsedCRN, err := url.Parse(crn)
if err != nil {
return "", nil, nil, sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "Invalid WRN.")
return "", nil, nil, sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "Invalid CRN.")
}
name := parsedWRN.Host
name := parsedCRN.Host
if !k.HasNameAuthority(ctx, name) {
return name, nil, nil, sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "Name authority not found.")
}
authority := k.GetNameAuthority(ctx, name)
return name, parsedWRN, &authority, nil
return name, parsedCRN, &authority, nil
}
func (k Keeper) checkWRNAccess(ctx sdk.Context, signer sdk.AccAddress, wrn string) error {
name, parsedWRN, authority, err := k.getAuthority(ctx, wrn)
func (k Keeper) checkCRNAccess(ctx sdk.Context, signer sdk.AccAddress, crn string) error {
name, parsedCRN, authority, err := k.getAuthority(ctx, crn)
if err != nil {
return err
}
formattedWRN := fmt.Sprintf("wrn://%s%s", name, parsedWRN.RequestURI())
if formattedWRN != wrn {
return sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "Invalid WRN.")
formattedCRN := fmt.Sprintf("crn://%s%s", name, parsedCRN.RequestURI())
if formattedCRN != crn {
return sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "Invalid CRN.")
}
if authority.OwnerAddress != signer.String() {
@ -159,14 +161,14 @@ func (k Keeper) checkWRNAccess(ctx sdk.Context, signer sdk.AccAddress, wrn strin
}
// HasNameRecord - checks if a name record exists.
func (k Keeper) HasNameRecord(ctx sdk.Context, wrn string) bool {
func (k Keeper) HasNameRecord(ctx sdk.Context, crn string) bool {
store := ctx.KVStore(k.storeKey)
return store.Has(GetNameRecordIndexKey(wrn))
return store.Has(GetNameRecordIndexKey(crn))
}
// GetNameRecord - gets a name record from the store.
func GetNameRecord(store sdk.KVStore, codec codec.BinaryCodec, wrn string) *types.NameRecord {
nameRecordKey := GetNameRecordIndexKey(wrn)
func GetNameRecord(store sdk.KVStore, codec codec.BinaryCodec, crn string) *types.NameRecord {
nameRecordKey := GetNameRecordIndexKey(crn)
if !store.Has(nameRecordKey) {
return nil
}
@ -179,14 +181,14 @@ func GetNameRecord(store sdk.KVStore, codec codec.BinaryCodec, wrn string) *type
}
// GetNameRecord - gets a name record from the store.
func (k Keeper) GetNameRecord(ctx sdk.Context, wrn string) *types.NameRecord {
_, _, authority, err := k.getAuthority(ctx, wrn)
func (k Keeper) GetNameRecord(ctx sdk.Context, crn string) *types.NameRecord {
_, _, authority, err := k.getAuthority(ctx, crn)
if err != nil || authority.Status != types.AuthorityActive {
// If authority is not active (or any other error), lookup fails.
return nil
}
nameRecord := GetNameRecord(ctx.KVStore(k.storeKey), k.cdc, wrn)
nameRecord := GetNameRecord(ctx.KVStore(k.storeKey), k.cdc, crn)
// Name record may not exist.
if nameRecord == nil {
@ -203,12 +205,12 @@ func (k Keeper) GetNameRecord(ctx sdk.Context, wrn string) *types.NameRecord {
}
// RemoveRecordToNameMapping removes a name from the record ID -> []names index.
func RemoveRecordToNameMapping(store sdk.KVStore, id string, wrn string) {
func RemoveRecordToNameMapping(store sdk.KVStore, id string, crn string) {
reverseNameIndexKey := GetCIDToNamesIndexKey(id)
names, _ := helpers.BytesArrToStringArr(store.Get(reverseNameIndexKey))
nameSet := helpers.SliceToSet(names)
nameSet.Remove(wrn)
nameSet.Remove(crn)
if nameSet.Cardinality() == 0 {
// Delete as storing empty slice throws error from baseapp.
@ -220,7 +222,7 @@ func RemoveRecordToNameMapping(store sdk.KVStore, id string, wrn string) {
}
// AddRecordToNameMapping adds a name to the record ID -> []names index.
func AddRecordToNameMapping(store sdk.KVStore, id string, wrn string) {
func AddRecordToNameMapping(store sdk.KVStore, id string, crn string) {
reverseNameIndexKey := GetCIDToNamesIndexKey(id)
var names []string
@ -229,14 +231,14 @@ func AddRecordToNameMapping(store sdk.KVStore, id string, wrn string) {
}
nameSet := helpers.SliceToSet(names)
nameSet.Add(wrn)
nameSet.Add(crn)
bz, _ := helpers.StrArrToBytesArr(helpers.SetToSlice(nameSet))
store.Set(reverseNameIndexKey, bz)
}
// SetNameRecord - sets a name record.
func SetNameRecord(store sdk.KVStore, codec codec.BinaryCodec, wrn string, id string, height int64) {
nameRecordIndexKey := GetNameRecordIndexKey(wrn)
func SetNameRecord(store sdk.KVStore, codec codec.BinaryCodec, crn string, id string, height int64) {
nameRecordIndexKey := GetNameRecordIndexKey(crn)
var nameRecord types.NameRecord
if store.Has(nameRecordIndexKey) {
@ -246,7 +248,7 @@ func SetNameRecord(store sdk.KVStore, codec codec.BinaryCodec, wrn string, id st
// Update old CID -> []Name index.
if nameRecord.Latest.Id != "" || len(nameRecord.Latest.Id) != 0 {
RemoveRecordToNameMapping(store, nameRecord.Latest.Id, wrn)
RemoveRecordToNameMapping(store, nameRecord.Latest.Id, crn)
}
}
@ -259,35 +261,35 @@ func SetNameRecord(store sdk.KVStore, codec codec.BinaryCodec, wrn string, id st
// Update new CID -> []Name index.
if id != "" {
AddRecordToNameMapping(store, id, wrn)
AddRecordToNameMapping(store, id, crn)
}
}
// SetNameRecord - sets a name record.
func (k Keeper) SetNameRecord(ctx sdk.Context, wrn string, id string) {
SetNameRecord(ctx.KVStore(k.storeKey), k.cdc, wrn, id, ctx.BlockHeight())
func (k Keeper) SetNameRecord(ctx sdk.Context, crn string, id string) {
SetNameRecord(ctx.KVStore(k.storeKey), k.cdc, crn, id, ctx.BlockHeight())
// Update changeSet for name.
k.updateBlockChangeSetForName(ctx, wrn)
k.updateBlockChangeSetForName(ctx, crn)
}
// ProcessSetName creates a WRN -> Record ID mapping.
// ProcessSetName creates a CRN -> Record ID mapping.
func (k Keeper) ProcessSetName(ctx sdk.Context, msg types.MsgSetName) error {
signerAddress, err := sdk.AccAddressFromBech32(msg.Signer)
if err != nil {
return err
}
err = k.checkWRNAccess(ctx, signerAddress, msg.Wrn)
err = k.checkCRNAccess(ctx, signerAddress, msg.Crn)
if err != nil {
return err
}
nameRecord := k.GetNameRecord(ctx, msg.Wrn)
nameRecord := k.GetNameRecord(ctx, msg.Crn)
if nameRecord != nil && nameRecord.Latest.Id == msg.Cid {
return nil
}
k.SetNameRecord(ctx, msg.Wrn, msg.Cid)
k.SetNameRecord(ctx, msg.Crn, msg.Cid)
return nil
}
@ -296,7 +298,7 @@ func (k Keeper) ProcessSetName(ctx sdk.Context, msg types.MsgSetName) error {
func (k Keeper) ListNameRecords(ctx sdk.Context) []types.NameEntry {
var nameEntries []types.NameEntry
store := ctx.KVStore(k.storeKey)
itr := sdk.KVStorePrefixIterator(store, PrefixWRNToNameRecordIndex)
itr := sdk.KVStorePrefixIterator(store, PrefixCRNToNameRecordIndex)
defer itr.Close()
for ; itr.Valid(); itr.Next() {
bz := store.Get(itr.Key())
@ -304,7 +306,7 @@ func (k Keeper) ListNameRecords(ctx sdk.Context) []types.NameEntry {
var record types.NameRecord
k.cdc.MustUnmarshal(bz, &record)
nameEntries = append(nameEntries, types.NameEntry{
Name: string(itr.Key()[len(PrefixWRNToNameRecordIndex):]),
Name: string(itr.Key()[len(PrefixCRNToNameRecordIndex):]),
Entry: &record,
})
}
@ -425,13 +427,13 @@ func (k Keeper) createAuthority(ctx sdk.Context, name string, owner string, isRo
// ProcessReserveAuthority reserves a name authority.
func (k Keeper) ProcessReserveAuthority(ctx sdk.Context, msg types.MsgReserveAuthority) error {
wrn := fmt.Sprintf("wrn://%s", msg.GetName())
parsedWrn, err := url.Parse(wrn)
crn := fmt.Sprintf("crn://%s", msg.GetName())
parsedCrn, err := url.Parse(crn)
if err != nil {
return sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "Invalid name")
}
name := parsedWrn.Host
if fmt.Sprintf("wrn://%s", name) != wrn {
name := parsedCrn.Host
if fmt.Sprintf("crn://%s", name) != crn {
return sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "Invalid name")
}
if strings.Contains(name, ".") {
@ -482,23 +484,23 @@ func (k Keeper) ProcessSetAuthorityBond(ctx sdk.Context, msg types.MsgSetAuthori
return nil
}
// ProcessDeleteName removes a WRN -> Record ID mapping.
// ProcessDeleteName removes a CRN -> Record ID mapping.
func (k Keeper) ProcessDeleteName(ctx sdk.Context, msg types.MsgDeleteNameAuthority) error {
signerAddress, err := sdk.AccAddressFromBech32(msg.Signer)
if err != nil {
return err
}
err = k.checkWRNAccess(ctx, signerAddress, msg.Wrn)
err = k.checkCRNAccess(ctx, signerAddress, msg.Crn)
if err != nil {
return err
}
if !k.HasNameRecord(ctx, msg.Wrn) {
if !k.HasNameRecord(ctx, msg.Crn) {
return sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "Name not found.")
}
// Set CID to empty string.
k.SetNameRecord(ctx, msg.Wrn, "")
k.SetNameRecord(ctx, msg.Crn, "")
return nil
}
@ -524,9 +526,9 @@ func (k Keeper) GetAuthorityExpiryQueue(ctx sdk.Context) []*types.ExpiryQueueRec
return authorities
}
// ResolveWRN resolves a WRN to a record.
func (k Keeper) ResolveWRN(ctx sdk.Context, wrn string) *types.Record {
_, _, authority, err := k.getAuthority(ctx, wrn)
// ResolveCRN resolves a CRN to a record.
func (k Keeper) ResolveCRN(ctx sdk.Context, crn string) *types.Record {
_, _, authority, err := k.getAuthority(ctx, crn)
if err != nil || authority.Status != types.AuthorityActive {
// If authority is not active (or any other error), resolution fails.
return nil
@ -534,7 +536,7 @@ func (k Keeper) ResolveWRN(ctx sdk.Context, wrn string) *types.Record {
// Name should not resolve if it's stale.
// i.e. authority was registered later than the name.
record, nameRecord := ResolveWRN(ctx.KVStore(k.storeKey), wrn, k, ctx)
record, nameRecord := ResolveCRN(ctx.KVStore(k.storeKey), crn, k, ctx)
if authority.Height > nameRecord.Latest.Height {
return nil
}
@ -542,9 +544,9 @@ func (k Keeper) ResolveWRN(ctx sdk.Context, wrn string) *types.Record {
return record
}
// ResolveWRN resolves a WRN to a record.
func ResolveWRN(store sdk.KVStore, wrn string, k Keeper, c sdk.Context) (*types.Record, *types.NameRecord) {
nameKey := GetNameRecordIndexKey(wrn)
// ResolveCRN resolves a CRN to a record.
func ResolveCRN(store sdk.KVStore, crn string, k Keeper, c sdk.Context) (*types.Record, *types.NameRecord) {
nameKey := GetNameRecordIndexKey(crn)
if store.Has(nameKey) {
bz := store.Get(nameKey)
@ -596,6 +598,111 @@ func (k Keeper) SetAuthorityExpiryQueueTimeSlice(ctx sdk.Context, timestamp time
store.Set(getAuthorityExpiryQueueTimeKey(timestamp), bz)
}
// ProcessAuthorityExpiryQueue tries to renew expiring authorities (by collecting rent) else marks them as expired.
func (k Keeper) ProcessAuthorityExpiryQueue(ctx sdk.Context) {
names := k.GetAllExpiredAuthorities(ctx, ctx.BlockHeader().Time)
for _, name := range names {
authority := k.GetNameAuthority(ctx, name)
// If authority doesn't have an associated bond or if bond no longer exists, mark it expired.
if authority.BondId == "" || !k.bondKeeper.HasBond(ctx, authority.BondId) {
authority.Status = types.AuthorityExpired
k.SetNameAuthority(ctx, name, &authority)
k.DeleteAuthorityExpiryQueue(ctx, name, authority)
ctx.Logger().Info(fmt.Sprintf("Marking authority expired as no bond present: %s", name))
return
}
// Try to renew the authority by taking rent.
k.TryTakeAuthorityRent(ctx, name, authority)
}
}
// DeleteAuthorityExpiryQueueTimeSlice deletes a specific authority expiry queue timeslice.
func (k Keeper) DeleteAuthorityExpiryQueueTimeSlice(ctx sdk.Context, timestamp time.Time) {
store := ctx.KVStore(k.storeKey)
store.Delete(getAuthorityExpiryQueueTimeKey(timestamp))
}
// DeleteAuthorityExpiryQueue deletes an authority name from the authority expiry queue.
func (k Keeper) DeleteAuthorityExpiryQueue(ctx sdk.Context, name string, authority types.NameAuthority) {
timeSlice := k.GetAuthorityExpiryQueueTimeSlice(ctx, authority.ExpiryTime)
newTimeSlice := []string{}
for _, existingName := range timeSlice {
if !bytes.Equal([]byte(existingName), []byte(name)) {
newTimeSlice = append(newTimeSlice, existingName)
}
}
if len(newTimeSlice) == 0 {
k.DeleteAuthorityExpiryQueueTimeSlice(ctx, authority.ExpiryTime)
} else {
k.SetAuthorityExpiryQueueTimeSlice(ctx, authority.ExpiryTime, newTimeSlice)
}
}
// GetAllExpiredAuthorities returns a concatenated list of all the timeslices before currTime.
func (k Keeper) GetAllExpiredAuthorities(ctx sdk.Context, currTime time.Time) (expiredAuthorityNames []string) {
// Gets an iterator for all timeslices from time 0 until the current block header time.
itr := k.AuthorityExpiryQueueIterator(ctx, ctx.BlockHeader().Time)
defer itr.Close()
for ; itr.Valid(); itr.Next() {
timeslice := []string{}
timeslice, err := helpers.BytesArrToStringArr(itr.Value())
if err != nil {
panic(err)
}
expiredAuthorityNames = append(expiredAuthorityNames, timeslice...)
}
return expiredAuthorityNames
}
// AuthorityExpiryQueueIterator returns all the authority expiry queue timeslices from time 0 until endTime.
func (k Keeper) AuthorityExpiryQueueIterator(ctx sdk.Context, endTime time.Time) sdk.Iterator {
store := ctx.KVStore(k.storeKey)
rangeEndBytes := sdk.InclusiveEndBytes(getAuthorityExpiryQueueTimeKey(endTime))
return store.Iterator(PrefixExpiryTimeToAuthoritiesIndex, rangeEndBytes)
}
// TryTakeAuthorityRent tries to take rent from the authority bond.
func (k Keeper) TryTakeAuthorityRent(ctx sdk.Context, name string, authority types.NameAuthority) {
ctx.Logger().Info(fmt.Sprintf("Trying to take rent for authority: %s", name))
params := k.GetParams(ctx)
rent := params.AuthorityRent
sdkErr := k.bondKeeper.TransferCoinsToModuleAccount(ctx, authority.BondId, types.AuthorityRentModuleAccountName, sdk.NewCoins(rent))
if sdkErr != nil {
// Insufficient funds, mark authority as expired.
authority.Status = types.AuthorityExpired
k.SetNameAuthority(ctx, name, &authority)
k.DeleteAuthorityExpiryQueue(ctx, name, authority)
ctx.Logger().Info(fmt.Sprintf("Insufficient funds in owner account to pay authority rent, marking as expired: %s", name))
return
}
// Delete old expiry queue entry, create new one.
k.DeleteAuthorityExpiryQueue(ctx, name, authority)
authority.ExpiryTime = ctx.BlockTime().Add(params.AuthorityRentDuration)
k.InsertAuthorityExpiryQueue(ctx, name, authority.ExpiryTime)
// Save authority.
authority.Status = types.AuthorityActive
k.SetNameAuthority(ctx, name, &authority)
k.AddBondToAuthorityIndexEntry(ctx, authority.BondId, name)
ctx.Logger().Info(fmt.Sprintf("Authority rent paid successfully: %s", name))
}
// ListNameAuthorityRecords - get all name authority records.
func (k Keeper) ListNameAuthorityRecords(ctx sdk.Context) map[string]types.NameAuthority {
nameAuthorityRecords := make(map[string]types.NameAuthority)

View File

@ -2,6 +2,8 @@ package keeper
import (
"fmt"
"time"
"github.com/cosmos/cosmos-sdk/codec"
sdk "github.com/cosmos/cosmos-sdk/types"
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
@ -143,8 +145,7 @@ func (k RecordKeeper) QueryRecordsByBond(ctx sdk.Context, bondID string) []types
if bz != nil {
var obj types.Record
k.cdc.MustUnmarshal(bz, &obj)
//records = append(records, recordObjToRecord(store, k.cdc, obj))
records = append(records, obj)
records = append(records, recordObjToRecord(store, k.cdc, obj))
}
}
@ -159,12 +160,18 @@ func (k Keeper) ProcessRenewRecord(ctx sdk.Context, msg types.MsgRenewRecord) er
// Check if renewal is required (i.e. expired record marked as deleted).
record := k.GetRecord(ctx, msg.RecordId)
if !record.Deleted || record.ExpiryTime.After(ctx.BlockTime()) {
expiryTime, err := time.Parse(time.RFC3339, record.ExpiryTime)
if err != nil {
panic(err)
}
if !record.Deleted || expiryTime.After(ctx.BlockTime()) {
return sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "Renewal not required.")
}
recordType := record.ToRecordType()
err := k.processRecord(ctx, &recordType, true)
err = k.processRecord(ctx, &recordType, true)
if err != nil {
return err
}

View File

@ -19,7 +19,7 @@ const (
AttributeKeyNewBondId = "new-bond-id"
AttributeKeyCID = "cid"
AttributeKeyName = "name"
AttributeKeyWRN = "wrn"
AttributeKeyCRN = "crn"
AttributeKeyRecordId = "record-id"
AttributeValueCategory = ModuleName
)

View File

@ -1,9 +1,10 @@
package types
import (
"net/url"
sdk "github.com/cosmos/cosmos-sdk/types"
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
"net/url"
)
var (
@ -14,9 +15,9 @@ var (
)
// NewMsgSetName is the constructor function for MsgSetName.
func NewMsgSetName(wrn string, cid string, signer sdk.AccAddress) MsgSetName {
func NewMsgSetName(crn string, cid string, signer sdk.AccAddress) MsgSetName {
return MsgSetName{
Wrn: wrn,
Crn: crn,
Cid: cid,
Signer: signer.String(),
}
@ -31,8 +32,8 @@ func (msg MsgSetName) Type() string { return "set-name" }
// ValidateBasic Implements Msg.
func (msg MsgSetName) ValidateBasic() error {
if msg.Wrn == "" {
return sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "WRN is required.")
if msg.Crn == "" {
return sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "CRN is required.")
}
if msg.Cid == "" {
@ -144,9 +145,9 @@ func (msg MsgSetAuthorityBond) GetSigners() []sdk.AccAddress {
}
// NewMsgDeleteNameAuthority is the constructor function for MsgDeleteNameAuthority.
func NewMsgDeleteNameAuthority(wrn string, signer sdk.AccAddress) MsgDeleteNameAuthority {
func NewMsgDeleteNameAuthority(crn string, signer sdk.AccAddress) MsgDeleteNameAuthority {
return MsgDeleteNameAuthority{
Wrn: wrn,
Crn: crn,
Signer: signer.String(),
}
}
@ -159,17 +160,17 @@ func (msg MsgDeleteNameAuthority) Type() string { return "delete-name" }
// ValidateBasic Implements Msg.
func (msg MsgDeleteNameAuthority) ValidateBasic() error {
if len(msg.Wrn) == 0 {
return sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "wrn is required.")
if len(msg.Crn) == 0 {
return sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "crn is required.")
}
if len(msg.Signer) == 0 {
return sdkerrors.Wrap(sdkerrors.ErrInvalidAddress, "invalid signer.")
}
_, err := url.Parse(msg.Wrn)
_, err := url.Parse(msg.Crn)
if err != nil {
return sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "invalid wrn.")
return sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "invalid crn.")
}
return nil

View File

@ -156,13 +156,14 @@ func (m *Params) GetAuthorityAuctionMinimumBid() types.Coin {
// Params defines the nameservice 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 time.Time `protobuf:"bytes,3,opt,name=create_time,json=createTime,proto3,stdtime" json:"create_time" json:"createTime" yaml:"createTime"`
ExpiryTime time.Time `protobuf:"bytes,4,opt,name=expiry_time,json=expiryTime,proto3,stdtime" json:"expiry_time" 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"`
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 string `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"`
}
func (m *Record) Reset() { *m = Record{} }
@ -212,18 +213,18 @@ func (m *Record) GetBondId() string {
return ""
}
func (m *Record) GetCreateTime() time.Time {
func (m *Record) GetCreateTime() string {
if m != nil {
return m.CreateTime
}
return time.Time{}
return ""
}
func (m *Record) GetExpiryTime() time.Time {
func (m *Record) GetExpiryTime() string {
if m != nil {
return m.ExpiryTime
}
return time.Time{}
return ""
}
func (m *Record) GetDeleted() bool {
@ -240,10 +241,17 @@ func (m *Record) GetOwners() []string {
return nil
}
func (m *Record) GetAttributes() []byte {
func (m *Record) GetAttributes() string {
if m != nil {
return m.Attributes
}
return ""
}
func (m *Record) GetNames() []string {
if m != nil {
return m.Names
}
return nil
}
@ -764,88 +772,90 @@ func init() {
}
var fileDescriptor_c2009c2df775dbad = []byte{
// 1295 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x57, 0x4f, 0x6f, 0x1b, 0x45,
0x14, 0xcf, 0xc6, 0x89, 0x1d, 0x8f, 0x1b, 0x83, 0x86, 0xb4, 0x75, 0x02, 0xf5, 0x06, 0xa3, 0xaa,
0xad, 0x42, 0xbc, 0x94, 0x1e, 0xca, 0x1f, 0x21, 0x94, 0x4d, 0xd2, 0x10, 0x10, 0x10, 0x26, 0xbd,
0xc0, 0xc5, 0xcc, 0xee, 0x4e, 0xec, 0xa1, 0xde, 0x5d, 0x6b, 0x67, 0x36, 0xd4, 0x70, 0xe2, 0x1b,
0x44, 0xe2, 0xd2, 0x03, 0xe2, 0x0b, 0x80, 0xc4, 0xc7, 0xa0, 0xc7, 0x1e, 0x11, 0x12, 0x06, 0x25,
0xdf, 0xc0, 0x9f, 0x00, 0xed, 0xcc, 0xec, 0x5f, 0xdb, 0x75, 0x69, 0xc5, 0x6d, 0xdf, 0xff, 0xdf,
0x7b, 0xf3, 0xde, 0x9b, 0x59, 0x60, 0x9c, 0x86, 0x7d, 0x1b, 0x7b, 0xf4, 0x3b, 0x62, 0x78, 0xd8,
0x25, 0x8c, 0x04, 0xa7, 0xd4, 0x26, 0xc6, 0xe9, 0x6d, 0x8b, 0x70, 0x7c, 0x3b, 0xcb, 0x6b, 0x0f,
0x02, 0x9f, 0xfb, 0xf0, 0x5a, 0x62, 0xd0, 0xce, 0x0a, 0x95, 0xc1, 0x46, 0xb3, 0xeb, 0xfb, 0xdd,
0x3e, 0x31, 0x84, 0xb2, 0x15, 0x9e, 0x18, 0x4e, 0x18, 0x60, 0x4e, 0x7d, 0x4f, 0x9a, 0x6f, 0xe8,
0x45, 0x39, 0xa7, 0x2e, 0x61, 0x1c, 0xbb, 0x03, 0xa5, 0xb0, 0xd6, 0xf5, 0xbb, 0xbe, 0xf8, 0x34,
0xa2, 0x2f, 0xc5, 0x6d, 0xda, 0x3e, 0x73, 0x7d, 0x66, 0x58, 0x98, 0xa5, 0xe0, 0x6c, 0x9f, 0x2a,
0xb7, 0xad, 0xbf, 0x56, 0x41, 0xf9, 0x08, 0x07, 0xd8, 0x65, 0x90, 0x82, 0x5a, 0x40, 0x6c, 0x3f,
0x70, 0x3a, 0x01, 0xf1, 0x78, 0x43, 0xdb, 0xd4, 0x6e, 0xd6, 0xde, 0x5e, 0x6f, 0x4b, 0x07, 0xed,
0xc8, 0x41, 0x0c, 0xb6, 0xbd, 0xeb, 0x53, 0xcf, 0xdc, 0x7e, 0x3c, 0xd2, 0x17, 0xc6, 0x23, 0xfd,
0xfa, 0x37, 0xcc, 0xf7, 0xde, 0x6b, 0x65, 0x6c, 0x5b, 0x9b, 0x43, 0xec, 0xf6, 0xf3, 0x2c, 0x04,
0x24, 0x85, 0x88, 0xc7, 0xe1, 0x99, 0x06, 0xd6, 0x32, 0xc2, 0x4e, 0x9c, 0x6b, 0x63, 0x51, 0x05,
0x95, 0xc9, 0xb6, 0xe3, 0x64, 0xdb, 0x7b, 0x4a, 0xc1, 0xdc, 0x55, 0x41, 0xef, 0x4e, 0x04, 0x4d,
0x9c, 0x4c, 0x89, 0x9e, 0xca, 0x1e, 0xfd, 0xad, 0x6b, 0x08, 0xa6, 0x50, 0x62, 0xc7, 0x30, 0x04,
0x75, 0x1c, 0xf2, 0x9e, 0x1f, 0x50, 0x3e, 0x94, 0x05, 0x28, 0xcd, 0x2b, 0xc0, 0x1d, 0x85, 0x65,
0x4b, 0x62, 0xc9, 0x9b, 0xc7, 0x28, 0x0a, 0x5c, 0xb4, 0x9a, 0x30, 0x44, 0x25, 0x7e, 0xd2, 0xc0,
0xd5, 0xbc, 0x4a, 0x5a, 0x8c, 0xa5, 0x79, 0xc5, 0x38, 0x54, 0x00, 0x3e, 0x98, 0x06, 0x60, 0xa2,
0x1e, 0xb3, 0xc4, 0xa2, 0x24, 0x97, 0x73, 0xb0, 0x92, 0xaa, 0x3c, 0xd2, 0xc0, 0x95, 0xd4, 0xae,
0x1b, 0x60, 0x9b, 0x74, 0x06, 0x24, 0xa0, 0xbe, 0xd3, 0x58, 0x9e, 0x87, 0xee, 0x40, 0xa1, 0x7b,
0xbf, 0x88, 0x2e, 0xeb, 0x66, 0x12, 0x5c, 0x4e, 0x2a, 0xb0, 0xad, 0x25, 0xc2, 0x83, 0x48, 0x76,
0x24, 0x44, 0xf0, 0x07, 0x0d, 0xac, 0xa7, 0x56, 0x38, 0xb4, 0xa3, 0xa0, 0x1d, 0xe2, 0x61, 0xab,
0x4f, 0x9c, 0x46, 0x79, 0x53, 0xbb, 0xb9, 0x62, 0xee, 0x8f, 0x47, 0xfa, 0x4e, 0x31, 0x7c, 0x41,
0x75, 0x12, 0x41, 0x51, 0x01, 0xa5, 0x27, 0xb4, 0x23, 0x45, 0xfb, 0x52, 0x02, 0x7f, 0xd7, 0xc0,
0x14, 0x3b, 0xdb, 0x77, 0x5d, 0xca, 0x59, 0x7a, 0x90, 0x95, 0x79, 0xa5, 0xea, 0xa8, 0x52, 0x1d,
0xcf, 0xc2, 0x5a, 0x74, 0x39, 0x1b, 0xf4, 0x84, 0xa6, 0x28, 0xa1, 0x5e, 0xcc, 0x60, 0x57, 0xaa,
0x25, 0x07, 0x3d, 0x3d, 0x93, 0x80, 0x9c, 0x12, 0xdc, 0xcf, 0x64, 0xb2, 0xf2, 0xc2, 0x99, 0x14,
0x5d, 0xce, 0xce, 0x64, 0x42, 0x73, 0x7a, 0x26, 0x48, 0xaa, 0x25, 0x99, 0xfc, 0xa2, 0x81, 0xd7,
0x66, 0x95, 0xa5, 0x73, 0x42, 0x48, 0xa3, 0x3a, 0x6f, 0xae, 0x3f, 0x57, 0x39, 0x1c, 0x3c, 0xfd,
0x34, 0x22, 0x67, 0xf3, 0xce, 0x41, 0xe8, 0xa0, 0xf5, 0xe9, 0xd5, 0xbf, 0x47, 0xc8, 0x0c, 0xb4,
0x32, 0x75, 0x81, 0x16, 0xbc, 0x30, 0xda, 0xd4, 0xd9, 0xbc, 0x5a, 0xcf, 0x40, 0x2b, 0x2b, 0x1c,
0xa1, 0xfd, 0x4d, 0x03, 0xd7, 0x26, 0x8d, 0x5d, 0xea, 0x51, 0x37, 0x74, 0x3b, 0x16, 0x75, 0x1a,
0xb5, 0x79, 0x70, 0xbf, 0x50, 0x70, 0x0f, 0x67, 0xc1, 0xcd, 0x78, 0x9b, 0x8d, 0x37, 0xab, 0x84,
0x36, 0x8a, 0x80, 0x3f, 0x95, 0x52, 0x93, 0x3a, 0xad, 0x8b, 0x12, 0x28, 0x23, 0xb1, 0xed, 0xe1,
0x0d, 0xb0, 0x48, 0x1d, 0x71, 0xad, 0x55, 0xcd, 0xab, 0xe3, 0x91, 0xfe, 0x8a, 0x44, 0x90, 0x86,
0x89, 0x7c, 0x2d, 0x52, 0x07, 0xbe, 0x03, 0x2a, 0x96, 0xef, 0x39, 0x1d, 0xea, 0x88, 0xfb, 0xa8,
0x6a, 0xea, 0xe3, 0x91, 0xfe, 0xaa, 0xd4, 0x8e, 0x04, 0x87, 0x89, 0x85, 0xa2, 0x50, 0x59, 0x7e,
0xc0, 0x3e, 0xa8, 0xd9, 0x01, 0xc1, 0x9c, 0x74, 0xa2, 0xdb, 0x59, 0xdd, 0x20, 0x1b, 0x13, 0xd3,
0x72, 0x3f, 0xbe, 0xba, 0x4d, 0x43, 0x55, 0xe3, 0x0d, 0xe9, 0x5d, 0x1a, 0x47, 0xe2, 0x38, 0x42,
0x86, 0x73, 0x16, 0xb5, 0x3f, 0x48, 0x19, 0x51, 0x34, 0xf2, 0x70, 0x40, 0x83, 0xa1, 0x8c, 0xb6,
0xf4, 0x5f, 0xa3, 0x49, 0xe3, 0x6c, 0xb4, 0x0c, 0x47, 0x46, 0x4b, 0x19, 0xb0, 0x01, 0x2a, 0x0e,
0xe9, 0x13, 0x4e, 0xe4, 0xea, 0x5f, 0x41, 0x31, 0x09, 0xef, 0x82, 0xb2, 0xff, 0xad, 0x47, 0x02,
0xd6, 0x28, 0x6f, 0x96, 0xf2, 0xe5, 0x92, 0xfc, 0xd8, 0xbd, 0xa2, 0x90, 0x52, 0x87, 0x07, 0x00,
0x60, 0xce, 0x03, 0x6a, 0x85, 0x9c, 0x30, 0xb1, 0x25, 0x2f, 0x99, 0x37, 0x52, 0x7c, 0xa9, 0x2c,
0x69, 0x84, 0x94, 0x83, 0x32, 0xa6, 0xad, 0x1e, 0xa8, 0xef, 0xc4, 0x3d, 0xb0, 0xef, 0xf1, 0x60,
0x08, 0x21, 0x58, 0x8a, 0x5e, 0x59, 0xf2, 0xb8, 0x91, 0xf8, 0x86, 0x26, 0x58, 0x26, 0x91, 0x50,
0xbd, 0x32, 0xde, 0x6c, 0x3f, 0xf5, 0x45, 0xd6, 0xfe, 0x0c, 0xbb, 0x24, 0xf1, 0x8a, 0xa4, 0x69,
0xeb, 0xcf, 0x12, 0x58, 0xcd, 0x09, 0xe0, 0x97, 0xe0, 0x65, 0x91, 0x4e, 0x67, 0x10, 0x5a, 0x7d,
0x6a, 0x77, 0x1e, 0x90, 0xa1, 0x6a, 0x32, 0x23, 0x7d, 0x1b, 0x08, 0x8d, 0x23, 0xa1, 0xf0, 0x09,
0x19, 0xe6, 0xea, 0x91, 0x72, 0x51, 0x3d, 0xcf, 0x80, 0x47, 0x60, 0x55, 0xba, 0xc6, 0x8e, 0x13,
0x10, 0xc6, 0x54, 0x3b, 0x6e, 0x8d, 0x47, 0xfa, 0x8d, 0x8c, 0xdf, 0x1d, 0x29, 0xcd, 0x79, 0x8d,
0x79, 0xe8, 0x52, 0x96, 0x84, 0x57, 0x40, 0xb9, 0x47, 0x68, 0xb7, 0x27, 0x5f, 0x37, 0x4b, 0x48,
0x51, 0x11, 0x9f, 0x71, 0xcc, 0x43, 0x26, 0xba, 0xa8, 0x8a, 0x14, 0x05, 0xf7, 0x00, 0x88, 0x47,
0x8e, 0xca, 0x73, 0xaf, 0x9a, 0xd7, 0xc7, 0x23, 0xfd, 0xf5, 0x78, 0x7a, 0x85, 0xec, 0x70, 0x2f,
0x9d, 0xd4, 0x98, 0x81, 0xaa, 0xf1, 0x77, 0x6e, 0xa0, 0xca, 0x53, 0x07, 0x6a, 0x2f, 0x37, 0x50,
0x7b, 0xb9, 0x81, 0xca, 0xb6, 0x78, 0xe5, 0x7f, 0x6d, 0xf1, 0xd6, 0xd7, 0xa0, 0x1a, 0x9d, 0xed,
0xec, 0x0e, 0xfa, 0x30, 0xdf, 0x41, 0xb7, 0x9e, 0xa1, 0x83, 0xe4, 0xf2, 0x89, 0xdb, 0xe7, 0x67,
0x0d, 0x80, 0x94, 0x0b, 0xef, 0x81, 0x72, 0x1f, 0x73, 0xc2, 0xe2, 0xd7, 0x76, 0xfb, 0x99, 0x1d,
0x0a, 0x8c, 0x48, 0x59, 0xc3, 0x8f, 0x40, 0xa5, 0x47, 0x19, 0xf7, 0x05, 0xb2, 0xd2, 0x73, 0x38,
0x8a, 0xcd, 0x5b, 0xef, 0x82, 0x97, 0x0a, 0x32, 0x58, 0x4f, 0xf7, 0xa6, 0x58, 0x8f, 0x69, 0x0f,
0x2d, 0x66, 0x7b, 0xa8, 0x15, 0x80, 0xea, 0x31, 0xed, 0x7a, 0x98, 0x87, 0x01, 0x81, 0x5b, 0xa0,
0xc4, 0x68, 0x57, 0x0d, 0xc2, 0xfa, 0x78, 0xa4, 0x5f, 0x96, 0x07, 0xc2, 0x68, 0x37, 0x3e, 0x89,
0xe8, 0x13, 0x45, 0x5a, 0x51, 0x7f, 0x0c, 0x42, 0x4b, 0x4c, 0xce, 0xc4, 0xc2, 0x1d, 0x84, 0x56,
0x66, 0x62, 0x14, 0x85, 0xca, 0xea, 0xe3, 0xc7, 0x45, 0x50, 0x37, 0xfb, 0xbe, 0xfd, 0x60, 0xb7,
0x87, 0xbd, 0x2e, 0x39, 0x26, 0x3c, 0x03, 0x2f, 0x0a, 0x5e, 0x4a, 0x5a, 0xbc, 0x01, 0x2a, 0xf2,
0xd9, 0xcf, 0x44, 0x8d, 0xaa, 0x28, 0x26, 0xe1, 0x06, 0x58, 0x51, 0xbd, 0xca, 0x1a, 0x25, 0x21,
0x4a, 0x68, 0xf8, 0x3d, 0xb8, 0x14, 0x0f, 0x80, 0x45, 0x9d, 0x68, 0x3c, 0xa2, 0xf2, 0x6e, 0xcf,
0x29, 0xaf, 0xba, 0x87, 0x4c, 0xea, 0x1c, 0x7a, 0x27, 0xbe, 0x79, 0x2b, 0xfd, 0x4b, 0xc2, 0x89,
0x84, 0x15, 0x66, 0x46, 0xb0, 0x50, 0x2d, 0x43, 0xc1, 0x4d, 0x50, 0x8b, 0xaf, 0x36, 0x4a, 0x58,
0x63, 0x59, 0x60, 0xcb, 0xb2, 0xe0, 0x1a, 0x58, 0x16, 0xf1, 0xe5, 0xe6, 0x45, 0x92, 0x68, 0xfd,
0xaa, 0x45, 0xfb, 0x30, 0x0b, 0xa1, 0x30, 0xc8, 0xda, 0x73, 0x0e, 0xf2, 0x7d, 0x50, 0xb7, 0xa8,
0xe3, 0x4c, 0x6c, 0xa4, 0xed, 0xf1, 0x48, 0xbf, 0xa5, 0xe6, 0x59, 0xc8, 0x0b, 0x2b, 0x29, 0xcf,
0x44, 0xab, 0x39, 0xda, 0xfc, 0xf8, 0xf1, 0x79, 0x53, 0x7b, 0x72, 0xde, 0xd4, 0xfe, 0x39, 0x6f,
0x6a, 0x67, 0x17, 0xcd, 0x85, 0x27, 0x17, 0xcd, 0x85, 0x3f, 0x2e, 0x9a, 0x0b, 0x5f, 0xbd, 0xd5,
0xa5, 0xbc, 0x17, 0x5a, 0x6d, 0xdb, 0x77, 0x0d, 0xde, 0xc3, 0x01, 0xa3, 0xcc, 0x20, 0xbc, 0x47,
0x02, 0x97, 0x7a, 0xdc, 0x78, 0x98, 0xfb, 0xf3, 0xe6, 0xc3, 0x01, 0x61, 0x56, 0x59, 0xec, 0x84,
0x3b, 0xff, 0x06, 0x00, 0x00, 0xff, 0xff, 0x2a, 0x84, 0x83, 0x21, 0x9f, 0x0f, 0x00, 0x00,
// 1325 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, 0x4f, 0x1a, 0xff, 0xff, 0x1a, 0xd2, 0x76, 0x13, 0xa8, 0x37, 0x18,
0x55, 0x6d, 0x55, 0xea, 0xa5, 0xf4, 0xa2, 0x7c, 0x08, 0xa1, 0x6c, 0xd2, 0xa6, 0x01, 0x01, 0x61,
0xda, 0x1b, 0xb8, 0x31, 0xb3, 0xbb, 0x53, 0x7b, 0xa8, 0x77, 0xd7, 0xda, 0x99, 0x0d, 0x35, 0x5c,
0xf1, 0x06, 0x95, 0xb8, 0xe9, 0x05, 0xe2, 0x05, 0x40, 0xe2, 0x31, 0xe8, 0x65, 0x2f, 0x11, 0x12,
0x06, 0xb5, 0x6f, 0xe0, 0x27, 0x40, 0x3b, 0x1f, 0xfb, 0x65, 0xbb, 0x8e, 0xda, 0xbb, 0x3d, 0xe7,
0x77, 0xce, 0x99, 0xdf, 0x9c, 0x39, 0xe7, 0xcc, 0x2c, 0xb0, 0x4f, 0x92, 0x81, 0x87, 0x43, 0xfa,
0x3d, 0xb1, 0x43, 0x1c, 0x10, 0x46, 0xe2, 0x13, 0xea, 0x11, 0xfb, 0xe4, 0xba, 0x4b, 0x38, 0xbe,
0x5e, 0xd4, 0x75, 0x86, 0x71, 0xc4, 0x23, 0x78, 0x21, 0x73, 0xe8, 0x14, 0x41, 0xe5, 0xb0, 0xd3,
0xea, 0x45, 0x51, 0x6f, 0x40, 0x6c, 0x61, 0xec, 0x26, 0xf7, 0x6d, 0x3f, 0x89, 0x31, 0xa7, 0x51,
0x28, 0xdd, 0x77, 0xac, 0x2a, 0xce, 0x69, 0x40, 0x18, 0xc7, 0xc1, 0x50, 0x19, 0x6c, 0xf5, 0xa2,
0x5e, 0x24, 0x3e, 0xed, 0xf4, 0x4b, 0x69, 0x5b, 0x5e, 0xc4, 0x82, 0x88, 0xd9, 0x2e, 0x66, 0x39,
0x39, 0x2f, 0xa2, 0x2a, 0x6c, 0xfb, 0xef, 0x4d, 0x50, 0x3f, 0xc6, 0x31, 0x0e, 0x18, 0xa4, 0x60,
0x23, 0x26, 0x5e, 0x14, 0xfb, 0xdd, 0x98, 0x84, 0xdc, 0x34, 0x76, 0x8d, 0xcb, 0x1b, 0xef, 0x6e,
0x77, 0x64, 0x80, 0x4e, 0x1a, 0x40, 0x93, 0xed, 0xec, 0x47, 0x34, 0x74, 0xae, 0x3d, 0x19, 0x5b,
0x4b, 0x93, 0xb1, 0x75, 0xf1, 0x5b, 0x16, 0x85, 0x1f, 0xb4, 0x0b, 0xbe, 0xed, 0xdd, 0x11, 0x0e,
0x06, 0x65, 0x15, 0x02, 0x52, 0x42, 0x24, 0xe4, 0xf0, 0x91, 0x01, 0xb6, 0x0a, 0x60, 0x57, 0xef,
0xd5, 0x5c, 0x56, 0x8b, 0xca, 0xcd, 0x76, 0xf4, 0x66, 0x3b, 0x07, 0xca, 0xc0, 0xd9, 0x57, 0x8b,
0xde, 0x9c, 0x5a, 0x34, 0x0b, 0x32, 0x63, 0xf5, 0x1c, 0x7b, 0xfc, 0x8f, 0x65, 0x20, 0x98, 0x53,
0xd1, 0x81, 0x61, 0x02, 0x9a, 0x38, 0xe1, 0xfd, 0x28, 0xa6, 0x7c, 0x24, 0x13, 0x50, 0x5b, 0x94,
0x80, 0x1b, 0x8a, 0xcb, 0x55, 0xc9, 0xa5, 0xec, 0xae, 0x59, 0x54, 0xb4, 0x68, 0x33, 0x53, 0x88,
0x4c, 0xfc, 0x6c, 0x80, 0xf3, 0x65, 0x93, 0x3c, 0x19, 0x2b, 0x8b, 0x92, 0x71, 0xa4, 0x08, 0x7c,
0x34, 0x8b, 0xc0, 0x54, 0x3e, 0xe6, 0xc1, 0x22, 0x25, 0x67, 0x4b, 0xb4, 0xb2, 0xac, 0x3c, 0x36,
0xc0, 0xb9, 0xdc, 0xaf, 0x17, 0x63, 0x8f, 0x74, 0x87, 0x24, 0xa6, 0x91, 0x6f, 0xae, 0x2e, 0x62,
0x77, 0xa8, 0xd8, 0x7d, 0x58, 0x65, 0x57, 0x0c, 0x33, 0x4d, 0xae, 0x84, 0x0a, 0x6e, 0x5b, 0x19,
0x78, 0x98, 0x62, 0xc7, 0x02, 0x82, 0x3f, 0x1a, 0x60, 0x3b, 0xf7, 0xc2, 0x89, 0x97, 0x2e, 0xda,
0x25, 0x21, 0x76, 0x07, 0xc4, 0x37, 0xeb, 0xbb, 0xc6, 0xe5, 0x75, 0xe7, 0xd6, 0x64, 0x6c, 0xed,
0x55, 0x97, 0xaf, 0x98, 0x4e, 0x33, 0xa8, 0x1a, 0xa0, 0xfc, 0x84, 0xf6, 0x24, 0x74, 0x4b, 0x22,
0xf0, 0x0f, 0x03, 0xcc, 0xf0, 0xf3, 0xa2, 0x20, 0xa0, 0x9c, 0xe5, 0x07, 0xb9, 0xb6, 0x28, 0x55,
0x5d, 0x95, 0xaa, 0xbb, 0xf3, 0xb8, 0x56, 0x43, 0xce, 0x27, 0x3d, 0x65, 0x29, 0x52, 0x68, 0x55,
0x77, 0xb0, 0x2f, 0xcd, 0xb2, 0x83, 0x9e, 0xbd, 0x93, 0x98, 0x9c, 0x10, 0x3c, 0x28, 0xec, 0x64,
0xfd, 0x95, 0x77, 0x52, 0x0d, 0x39, 0x7f, 0x27, 0x53, 0x96, 0xb3, 0x77, 0x82, 0xa4, 0x59, 0xb6,
0x93, 0x5f, 0x0d, 0xf0, 0xc6, 0xbc, 0xb4, 0x74, 0xef, 0x13, 0x62, 0x36, 0x16, 0xf5, 0xf5, 0x17,
0x6a, 0x0f, 0x87, 0x2f, 0x3e, 0x8d, 0x34, 0xd8, 0xa2, 0x73, 0x10, 0x36, 0x68, 0x7b, 0x76, 0xf6,
0x6f, 0x13, 0x32, 0x87, 0xad, 0xdc, 0xba, 0x60, 0x0b, 0x5e, 0x99, 0x6d, 0x1e, 0x6c, 0x51, 0xae,
0xe7, 0xb0, 0x95, 0x19, 0x4e, 0xd9, 0xfe, 0x6e, 0x80, 0x0b, 0xd3, 0xce, 0x01, 0x0d, 0x69, 0x90,
0x04, 0x5d, 0x97, 0xfa, 0xe6, 0xc6, 0x22, 0xba, 0x5f, 0x2a, 0xba, 0x47, 0xf3, 0xe8, 0x16, 0xa2,
0xcd, 0xe7, 0x5b, 0x34, 0x42, 0x3b, 0x55, 0xc2, 0x9f, 0x49, 0xd4, 0xa1, 0x7e, 0xfb, 0x69, 0x0d,
0xd4, 0x91, 0x98, 0xf6, 0xf0, 0x12, 0x58, 0xa6, 0xbe, 0xb8, 0xd6, 0x1a, 0xce, 0xf9, 0xc9, 0xd8,
0x7a, 0x4d, 0x32, 0xc8, 0x97, 0x49, 0x63, 0x2d, 0x53, 0x1f, 0xbe, 0x07, 0xd6, 0xdc, 0x28, 0xf4,
0xbb, 0xd4, 0x17, 0xf7, 0x51, 0xc3, 0xb1, 0x26, 0x63, 0xeb, 0x75, 0x69, 0x9d, 0x02, 0x47, 0x99,
0x87, 0x92, 0x50, 0x5d, 0x7e, 0xc0, 0x3b, 0x60, 0xc3, 0x8b, 0x09, 0xe6, 0xa4, 0x9b, 0xde, 0xce,
0xe2, 0x06, 0x69, 0x38, 0x97, 0x26, 0x63, 0xeb, 0x2d, 0xe9, 0x2d, 0xc1, 0x7b, 0x34, 0xc8, 0x8e,
0xa2, 0xa0, 0x41, 0x20, 0x17, 0xd2, 0x48, 0xe4, 0xe1, 0x90, 0xc6, 0x23, 0x19, 0x69, 0xa5, 0x1a,
0x49, 0x82, 0xc5, 0x48, 0x05, 0x0d, 0x02, 0xb9, 0x00, 0x4d, 0xb0, 0xe6, 0x93, 0x01, 0xe1, 0x44,
0x8e, 0xec, 0x75, 0xa4, 0x45, 0x78, 0x13, 0xd4, 0xa3, 0xef, 0x42, 0x12, 0x33, 0xb3, 0xbe, 0x5b,
0x2b, 0x6f, 0x53, 0xea, 0x75, 0x68, 0x25, 0x21, 0x65, 0x0e, 0x0f, 0x01, 0xc0, 0x9c, 0xc7, 0xd4,
0x4d, 0x38, 0x61, 0x62, 0xba, 0x95, 0xb8, 0xe5, 0x58, 0x76, 0x80, 0xb9, 0x06, 0x15, 0x5c, 0xe1,
0x0d, 0xb0, 0x2a, 0xde, 0x42, 0xe6, 0xba, 0x20, 0x70, 0x61, 0x32, 0xb6, 0xb6, 0x65, 0x0c, 0xa1,
0xd6, 0xee, 0x52, 0x40, 0xd2, 0xb6, 0xdd, 0x07, 0xcd, 0x3d, 0x7d, 0xe0, 0xb7, 0x42, 0x1e, 0x8f,
0x20, 0x04, 0x2b, 0x29, 0x24, 0xcf, 0x16, 0x89, 0x6f, 0xe8, 0x80, 0x55, 0x92, 0x82, 0xea, 0x49,
0xf1, 0x76, 0xe7, 0x85, 0xcf, 0xaf, 0xce, 0xe7, 0x38, 0x20, 0x59, 0x54, 0x24, 0x5d, 0xdb, 0x7f,
0xd5, 0xc0, 0x66, 0x09, 0x80, 0x5f, 0x81, 0xff, 0x8b, 0x1c, 0x74, 0x87, 0x89, 0x3b, 0xa0, 0x5e,
0xf7, 0x01, 0x19, 0xa9, 0x8a, 0xb2, 0xf3, 0x87, 0x80, 0xb0, 0x38, 0x16, 0x06, 0x9f, 0x92, 0x51,
0x29, 0x89, 0xb9, 0x16, 0x35, 0xcb, 0x0a, 0x78, 0x0c, 0x36, 0x65, 0x68, 0xec, 0xfb, 0x31, 0x61,
0x4c, 0xd5, 0xde, 0xd5, 0xc9, 0xd8, 0xba, 0x54, 0x88, 0xbb, 0x27, 0xd1, 0x52, 0x54, 0xad, 0x43,
0x67, 0x8a, 0x22, 0x3c, 0x07, 0xea, 0x7d, 0x42, 0x7b, 0x7d, 0xf9, 0x94, 0x59, 0x41, 0x4a, 0x4a,
0xf5, 0x8c, 0x63, 0x9e, 0x30, 0x59, 0x56, 0x48, 0x49, 0xf0, 0x00, 0x00, 0xdd, 0x5f, 0x54, 0x16,
0x4b, 0xc3, 0xb9, 0x38, 0x19, 0x5b, 0x6f, 0xea, 0x56, 0x15, 0xd8, 0xd1, 0x41, 0xde, 0x96, 0x5a,
0x81, 0x1a, 0xfa, 0xbb, 0xd4, 0x3d, 0xf5, 0x99, 0xdd, 0x73, 0x50, 0xea, 0x9e, 0x83, 0xbc, 0x7b,
0x06, 0xe5, 0x9a, 0x97, 0xb7, 0xe6, 0xce, 0xd4, 0x5d, 0x73, 0x4f, 0x3f, 0x7c, 0x1d, 0x5b, 0xcd,
0x92, 0xd3, 0xf4, 0xc4, 0xa3, 0xf4, 0xf2, 0x28, 0xf4, 0x45, 0xfb, 0x1b, 0xd0, 0x48, 0xcf, 0x76,
0x7e, 0x05, 0x7d, 0x5c, 0xae, 0xa0, 0x2b, 0xa7, 0xa8, 0x20, 0x39, 0x69, 0x74, 0xf9, 0xfc, 0x62,
0x00, 0x90, 0x6b, 0xe1, 0x6d, 0x50, 0x1f, 0x60, 0x4e, 0x98, 0x7e, 0x5a, 0x77, 0x4e, 0x1d, 0x50,
0x70, 0x44, 0xca, 0x1b, 0xde, 0x01, 0x6b, 0x7d, 0xca, 0x78, 0x24, 0x98, 0xd5, 0x5e, 0x22, 0x90,
0x76, 0x6f, 0xbf, 0x0f, 0xfe, 0x57, 0xc1, 0x60, 0x33, 0x1f, 0x92, 0x62, 0x16, 0xe6, 0x35, 0xb4,
0x5c, 0xac, 0xa1, 0x76, 0x0c, 0x1a, 0x77, 0x69, 0x2f, 0xc4, 0x3c, 0x89, 0x09, 0xbc, 0x0a, 0x6a,
0x8c, 0xf6, 0x54, 0x23, 0x6c, 0x4f, 0xc6, 0xd6, 0x59, 0x79, 0x20, 0x8c, 0xf6, 0xf4, 0x49, 0xa4,
0x9f, 0x28, 0xb5, 0x4a, 0xeb, 0x63, 0x98, 0xb8, 0xa2, 0x73, 0xa6, 0xa6, 0xeb, 0x30, 0x71, 0x0b,
0x1d, 0xa3, 0x24, 0x54, 0x57, 0x1f, 0x3f, 0x2d, 0x83, 0xa6, 0x33, 0x88, 0xbc, 0x07, 0xfb, 0x7d,
0x1c, 0xf6, 0xc8, 0x5d, 0xc2, 0x0b, 0xf4, 0xd2, 0xc5, 0x6b, 0x59, 0x89, 0x9b, 0x60, 0x4d, 0xbe,
0xf1, 0x99, 0xc8, 0x51, 0x03, 0x69, 0x11, 0xee, 0x80, 0x75, 0x55, 0xab, 0xcc, 0xac, 0x09, 0x28,
0x93, 0xe1, 0x0f, 0xe0, 0x8c, 0x6e, 0x00, 0x97, 0xfa, 0x69, 0x7b, 0xa4, 0xe9, 0xbd, 0xb6, 0x20,
0xbd, 0xea, 0xd2, 0x71, 0xa8, 0x7f, 0x14, 0xde, 0x8f, 0x9c, 0x2b, 0xf9, 0x2f, 0x11, 0xce, 0x10,
0x56, 0xe9, 0x19, 0xa1, 0x42, 0x1b, 0x05, 0x09, 0xee, 0x82, 0x0d, 0x7d, 0x8f, 0x51, 0xc2, 0xcc,
0x55, 0xc1, 0xad, 0xa8, 0x82, 0x5b, 0x7a, 0x5a, 0x8a, 0x71, 0xad, 0xc7, 0xe1, 0x6f, 0x46, 0x3a,
0x0f, 0x8b, 0x14, 0x2a, 0x8d, 0x6c, 0xbc, 0x64, 0x23, 0xdf, 0x03, 0x4d, 0x97, 0xfa, 0xfe, 0xd4,
0x44, 0xba, 0x36, 0x19, 0x5b, 0x57, 0x54, 0x3f, 0x0b, 0xbc, 0x32, 0x92, 0xca, 0x4a, 0xb4, 0x59,
0x92, 0x9d, 0x4f, 0x9e, 0x3c, 0x6b, 0x19, 0x4f, 0x9f, 0xb5, 0x8c, 0x7f, 0x9f, 0xb5, 0x8c, 0x47,
0xcf, 0x5b, 0x4b, 0x4f, 0x9f, 0xb7, 0x96, 0xfe, 0x7c, 0xde, 0x5a, 0xfa, 0xfa, 0x9d, 0x1e, 0xe5,
0xfd, 0xc4, 0xed, 0x78, 0x51, 0x60, 0xf3, 0x3e, 0x8e, 0x19, 0x65, 0x36, 0xe1, 0x7d, 0x12, 0x07,
0x34, 0xe4, 0xf6, 0xc3, 0xd2, 0x6f, 0x36, 0x1f, 0x0d, 0x09, 0x73, 0xeb, 0x62, 0x26, 0xdc, 0xf8,
0x2f, 0x00, 0x00, 0xff, 0xff, 0x7f, 0x95, 0x34, 0xdd, 0x8c, 0x0f, 0x00, 0x00,
}
func (m *Params) Marshal() (dAtA []byte, err error) {
@ -991,6 +1001,15 @@ func (m *Record) MarshalToSizedBuffer(dAtA []byte) (int, error) {
_ = i
var l int
_ = l
if len(m.Names) > 0 {
for iNdEx := len(m.Names) - 1; iNdEx >= 0; iNdEx-- {
i -= len(m.Names[iNdEx])
copy(dAtA[i:], m.Names[iNdEx])
i = encodeVarintNameservice(dAtA, i, uint64(len(m.Names[iNdEx])))
i--
dAtA[i] = 0x42
}
}
if len(m.Attributes) > 0 {
i -= len(m.Attributes)
copy(dAtA[i:], m.Attributes)
@ -1017,22 +1036,20 @@ func (m *Record) MarshalToSizedBuffer(dAtA []byte) (int, error) {
i--
dAtA[i] = 0x28
}
n11, err11 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.ExpiryTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.ExpiryTime):])
if err11 != nil {
return 0, err11
if len(m.ExpiryTime) > 0 {
i -= len(m.ExpiryTime)
copy(dAtA[i:], m.ExpiryTime)
i = encodeVarintNameservice(dAtA, i, uint64(len(m.ExpiryTime)))
i--
dAtA[i] = 0x22
}
i -= n11
i = encodeVarintNameservice(dAtA, i, uint64(n11))
i--
dAtA[i] = 0x22
n12, err12 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.CreateTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.CreateTime):])
if err12 != nil {
return 0, err12
if len(m.CreateTime) > 0 {
i -= len(m.CreateTime)
copy(dAtA[i:], m.CreateTime)
i = encodeVarintNameservice(dAtA, i, uint64(len(m.CreateTime)))
i--
dAtA[i] = 0x1a
}
i -= n12
i = encodeVarintNameservice(dAtA, i, uint64(n12))
i--
dAtA[i] = 0x1a
if len(m.BondId) > 0 {
i -= len(m.BondId)
copy(dAtA[i:], m.BondId)
@ -1112,12 +1129,12 @@ func (m *NameAuthority) MarshalToSizedBuffer(dAtA []byte) (int, error) {
_ = i
var l int
_ = l
n14, err14 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.ExpiryTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.ExpiryTime):])
if err14 != nil {
return 0, err14
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
}
i -= n14
i = encodeVarintNameservice(dAtA, i, uint64(n14))
i -= n12
i = encodeVarintNameservice(dAtA, i, uint64(n12))
i--
dAtA[i] = 0x3a
if len(m.BondId) > 0 {
@ -1498,10 +1515,14 @@ func (m *Record) Size() (n int) {
if l > 0 {
n += 1 + l + sovNameservice(uint64(l))
}
l = github_com_gogo_protobuf_types.SizeOfStdTime(m.CreateTime)
n += 1 + l + sovNameservice(uint64(l))
l = github_com_gogo_protobuf_types.SizeOfStdTime(m.ExpiryTime)
n += 1 + l + sovNameservice(uint64(l))
l = len(m.CreateTime)
if l > 0 {
n += 1 + l + sovNameservice(uint64(l))
}
l = len(m.ExpiryTime)
if l > 0 {
n += 1 + l + sovNameservice(uint64(l))
}
if m.Deleted {
n += 2
}
@ -1515,6 +1536,12 @@ func (m *Record) Size() (n int) {
if l > 0 {
n += 1 + l + sovNameservice(uint64(l))
}
if len(m.Names) > 0 {
for _, s := range m.Names {
l = len(s)
n += 1 + l + sovNameservice(uint64(l))
}
}
return n
}
@ -2200,7 +2227,7 @@ func (m *Record) Unmarshal(dAtA []byte) error {
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field CreateTime", wireType)
}
var msglen int
var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowNameservice
@ -2210,30 +2237,29 @@ func (m *Record) Unmarshal(dAtA []byte) error {
}
b := dAtA[iNdEx]
iNdEx++
msglen |= int(b&0x7F) << shift
stringLen |= uint64(b&0x7F) << shift
if b < 0x80 {
break
}
}
if msglen < 0 {
intStringLen := int(stringLen)
if intStringLen < 0 {
return ErrInvalidLengthNameservice
}
postIndex := iNdEx + msglen
postIndex := iNdEx + intStringLen
if postIndex < 0 {
return ErrInvalidLengthNameservice
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.CreateTime, dAtA[iNdEx:postIndex]); err != nil {
return err
}
m.CreateTime = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
case 4:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field ExpiryTime", wireType)
}
var msglen int
var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowNameservice
@ -2243,24 +2269,23 @@ func (m *Record) Unmarshal(dAtA []byte) error {
}
b := dAtA[iNdEx]
iNdEx++
msglen |= int(b&0x7F) << shift
stringLen |= uint64(b&0x7F) << shift
if b < 0x80 {
break
}
}
if msglen < 0 {
intStringLen := int(stringLen)
if intStringLen < 0 {
return ErrInvalidLengthNameservice
}
postIndex := iNdEx + msglen
postIndex := iNdEx + intStringLen
if postIndex < 0 {
return ErrInvalidLengthNameservice
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.ExpiryTime, dAtA[iNdEx:postIndex]); err != nil {
return err
}
m.ExpiryTime = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
case 5:
if wireType != 0 {
@ -2318,7 +2343,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 stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowNameservice
@ -2328,25 +2353,55 @@ func (m *Record) Unmarshal(dAtA []byte) error {
}
b := dAtA[iNdEx]
iNdEx++
byteLen |= int(b&0x7F) << shift
stringLen |= uint64(b&0x7F) << shift
if b < 0x80 {
break
}
}
if byteLen < 0 {
intStringLen := int(stringLen)
if intStringLen < 0 {
return ErrInvalidLengthNameservice
}
postIndex := iNdEx + byteLen
postIndex := iNdEx + intStringLen
if postIndex < 0 {
return ErrInvalidLengthNameservice
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
m.Attributes = append(m.Attributes[:0], dAtA[iNdEx:postIndex]...)
if m.Attributes == nil {
m.Attributes = []byte{}
m.Attributes = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
case 8:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field Names", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowNameservice
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
stringLen |= uint64(b&0x7F) << shift
if b < 0x80 {
break
}
}
intStringLen := int(stringLen)
if intStringLen < 0 {
return ErrInvalidLengthNameservice
}
postIndex := iNdEx + intStringLen
if postIndex < 0 {
return ErrInvalidLengthNameservice
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
m.Names = append(m.Names, string(dAtA[iNdEx:postIndex]))
iNdEx = postIndex
default:
iNdEx = preIndex

File diff suppressed because it is too large Load Diff

View File

@ -320,73 +320,73 @@ func local_request_Query_Whois_0(ctx context.Context, marshaler runtime.Marshale
}
var (
filter_Query_LookupWrn_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)}
filter_Query_LookupCrn_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)}
)
func request_Query_LookupWrn_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq QueryLookupWrn
func request_Query_LookupCrn_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq QueryLookupCrn
var metadata runtime.ServerMetadata
if err := req.ParseForm(); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_LookupWrn_0); err != nil {
if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_LookupCrn_0); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := client.LookupWrn(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
msg, err := client.LookupCrn(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_Query_LookupWrn_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq QueryLookupWrn
func local_request_Query_LookupCrn_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq QueryLookupCrn
var metadata runtime.ServerMetadata
if err := req.ParseForm(); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_LookupWrn_0); err != nil {
if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_LookupCrn_0); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := server.LookupWrn(ctx, &protoReq)
msg, err := server.LookupCrn(ctx, &protoReq)
return msg, metadata, err
}
var (
filter_Query_ResolveWrn_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)}
filter_Query_ResolveCrn_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)}
)
func request_Query_ResolveWrn_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq QueryResolveWrn
func request_Query_ResolveCrn_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq QueryResolveCrn
var metadata runtime.ServerMetadata
if err := req.ParseForm(); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_ResolveWrn_0); err != nil {
if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_ResolveCrn_0); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := client.ResolveWrn(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
msg, err := client.ResolveCrn(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
return msg, metadata, err
}
func local_request_Query_ResolveWrn_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq QueryResolveWrn
func local_request_Query_ResolveCrn_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
var protoReq QueryResolveCrn
var metadata runtime.ServerMetadata
if err := req.ParseForm(); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_ResolveWrn_0); err != nil {
if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_ResolveCrn_0); err != nil {
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
}
msg, err := server.ResolveWrn(ctx, &protoReq)
msg, err := server.ResolveCrn(ctx, &protoReq)
return msg, metadata, err
}
@ -609,7 +609,7 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv
})
mux.Handle("GET", pattern_Query_LookupWrn_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
mux.Handle("GET", pattern_Query_LookupCrn_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
@ -618,18 +618,18 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_Query_LookupWrn_0(rctx, inboundMarshaler, server, req, pathParams)
resp, md, err := local_request_Query_LookupCrn_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Query_LookupWrn_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
forward_Query_LookupCrn_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("GET", pattern_Query_ResolveWrn_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
mux.Handle("GET", pattern_Query_ResolveCrn_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
@ -638,14 +638,14 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := local_request_Query_ResolveWrn_0(rctx, inboundMarshaler, server, req, pathParams)
resp, md, err := local_request_Query_ResolveCrn_0(rctx, inboundMarshaler, server, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Query_ResolveWrn_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
forward_Query_ResolveCrn_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
@ -870,7 +870,7 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie
})
mux.Handle("GET", pattern_Query_LookupWrn_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
mux.Handle("GET", pattern_Query_LookupCrn_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
@ -879,18 +879,18 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_Query_LookupWrn_0(rctx, inboundMarshaler, client, req, pathParams)
resp, md, err := request_Query_LookupCrn_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Query_LookupWrn_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
forward_Query_LookupCrn_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
mux.Handle("GET", pattern_Query_ResolveWrn_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
mux.Handle("GET", pattern_Query_ResolveCrn_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
ctx, cancel := context.WithCancel(req.Context())
defer cancel()
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
@ -899,14 +899,14 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
resp, md, err := request_Query_ResolveWrn_0(rctx, inboundMarshaler, client, req, pathParams)
resp, md, err := request_Query_ResolveCrn_0(rctx, inboundMarshaler, client, req, pathParams)
ctx = runtime.NewServerMetadataContext(ctx, md)
if err != nil {
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
return
}
forward_Query_ResolveWrn_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
forward_Query_ResolveCrn_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...)
})
@ -968,9 +968,9 @@ var (
pattern_Query_Whois_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"vulcanize", "nameservice", "v1beta1", "whois", "name"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_Query_LookupWrn_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"vulcanize", "nameservice", "v1beta1", "lookup"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_Query_LookupCrn_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"vulcanize", "nameservice", "v1beta1", "lookup"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_Query_ResolveWrn_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"vulcanize", "nameservice", "v1beta1", "resolve"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_Query_ResolveCrn_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"vulcanize", "nameservice", "v1beta1", "resolve"}, "", runtime.AssumeColonVerbOpt(true)))
pattern_Query_GetRecordExpiryQueue_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"vulcanize", "nameservice", "v1beta1", "record-expiry"}, "", runtime.AssumeColonVerbOpt(true)))
@ -992,9 +992,9 @@ var (
forward_Query_Whois_0 = runtime.ForwardResponseMessage
forward_Query_LookupWrn_0 = runtime.ForwardResponseMessage
forward_Query_LookupCrn_0 = runtime.ForwardResponseMessage
forward_Query_ResolveWrn_0 = runtime.ForwardResponseMessage
forward_Query_ResolveCrn_0 = runtime.ForwardResponseMessage
forward_Query_GetRecordExpiryQueue_0 = runtime.ForwardResponseMessage

View File

@ -23,6 +23,12 @@ func NewMsgSetRecord(payload Payload, bondID string, signer sdk.AccAddress) MsgS
}
}
// Route Implements Msg.
func (msg MsgSetRecord) Route() string { return RouterKey }
// Type Implements Msg.
func (msg MsgSetRecord) Type() string { return "set-record" }
func (msg MsgSetRecord) ValidateBasic() error {
if len(msg.Signer) == 0 {
return sdkerrors.Wrap(sdkerrors.ErrInvalidAddress, msg.Signer)

View File

@ -91,6 +91,7 @@ func (m *MsgSetRecord) GetPayload() Payload {
// MsgSetRecordResponse
type MsgSetRecordResponse struct {
Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
}
func (m *MsgSetRecordResponse) Reset() { *m = MsgSetRecordResponse{} }
@ -126,6 +127,13 @@ func (m *MsgSetRecordResponse) XXX_DiscardUnknown() {
var xxx_messageInfo_MsgSetRecordResponse proto.InternalMessageInfo
func (m *MsgSetRecordResponse) GetId() string {
if m != nil {
return m.Id
}
return ""
}
// Payload
type Payload struct {
Record *Record `protobuf:"bytes,1,opt,name=record,proto3" json:"record,omitempty"`
@ -181,7 +189,7 @@ func (m *Payload) GetSignatures() []Signature {
// MsgSetName
type MsgSetName struct {
Wrn string `protobuf:"bytes,1,opt,name=wrn,proto3" json:"wrn,omitempty"`
Crn string `protobuf:"bytes,1,opt,name=crn,proto3" json:"crn,omitempty"`
Cid string `protobuf:"bytes,2,opt,name=cid,proto3" json:"cid,omitempty"`
Signer string `protobuf:"bytes,3,opt,name=signer,proto3" json:"signer,omitempty"`
}
@ -219,9 +227,9 @@ func (m *MsgSetName) XXX_DiscardUnknown() {
var xxx_messageInfo_MsgSetName proto.InternalMessageInfo
func (m *MsgSetName) GetWrn() string {
func (m *MsgSetName) GetCrn() string {
if m != nil {
return m.Wrn
return m.Crn
}
return ""
}
@ -476,7 +484,7 @@ var xxx_messageInfo_MsgSetAuthorityBondResponse proto.InternalMessageInfo
// MsgDeleteNameAuthority is SDK message for DeleteNameAuthority
type MsgDeleteNameAuthority struct {
Wrn string `protobuf:"bytes,1,opt,name=wrn,proto3" json:"wrn,omitempty"`
Crn string `protobuf:"bytes,1,opt,name=crn,proto3" json:"crn,omitempty"`
Signer string `protobuf:"bytes,2,opt,name=signer,proto3" json:"signer,omitempty"`
}
@ -513,9 +521,9 @@ func (m *MsgDeleteNameAuthority) XXX_DiscardUnknown() {
var xxx_messageInfo_MsgDeleteNameAuthority proto.InternalMessageInfo
func (m *MsgDeleteNameAuthority) GetWrn() string {
func (m *MsgDeleteNameAuthority) GetCrn() string {
if m != nil {
return m.Wrn
return m.Crn
}
return ""
}
@ -1059,62 +1067,62 @@ func init() {
}
var fileDescriptor_b66a805dda801ce9 = []byte{
// 866 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x56, 0xcd, 0x6e, 0xd3, 0x4c,
0x14, 0x8d, 0x9b, 0x7e, 0xc9, 0x97, 0x1b, 0xa8, 0x5a, 0x13, 0xaa, 0xe0, 0x52, 0x3b, 0xb8, 0x6a,
0x15, 0x54, 0x11, 0xb7, 0x29, 0x88, 0xaa, 0x50, 0x89, 0x46, 0x80, 0x00, 0x29, 0x08, 0xb9, 0x0b,
0x24, 0x36, 0x95, 0x13, 0x8f, 0x1c, 0x57, 0x89, 0x27, 0xf2, 0x38, 0x4d, 0x43, 0x25, 0xd8, 0x20,
0x21, 0xb1, 0xe2, 0x29, 0x10, 0x2f, 0x81, 0xd8, 0x76, 0xd9, 0x25, 0xab, 0x08, 0xb5, 0x6f, 0x90,
0x2d, 0x1b, 0xe4, 0x9f, 0xd8, 0xe3, 0xfc, 0x34, 0x3f, 0x74, 0x37, 0x9e, 0xb9, 0xe7, 0x9e, 0x73,
0xcf, 0xcc, 0xf5, 0x0c, 0xac, 0x1d, 0x35, 0xaa, 0x65, 0xc5, 0xd0, 0xdf, 0x23, 0xc9, 0x50, 0x6a,
0x88, 0x20, 0xf3, 0x48, 0x2f, 0x23, 0xe9, 0x68, 0xb3, 0x84, 0x2c, 0x65, 0x53, 0xb2, 0x8e, 0x73,
0x75, 0x13, 0x5b, 0x98, 0x5d, 0xf6, 0xe3, 0x72, 0x54, 0x5c, 0xce, 0x8b, 0xe3, 0x52, 0x1a, 0xd6,
0xb0, 0x13, 0x29, 0xd9, 0x23, 0x17, 0xc4, 0x49, 0x97, 0x27, 0xa7, 0x13, 0x39, 0x00, 0xf1, 0x3b,
0x03, 0xd7, 0x8a, 0x44, 0xdb, 0x47, 0x96, 0x8c, 0xca, 0xd8, 0x54, 0xd9, 0x6d, 0x88, 0x97, 0xb0,
0xa1, 0x1e, 0xe8, 0x6a, 0x9a, 0xc9, 0x30, 0xd9, 0x44, 0x41, 0xe8, 0xb4, 0x85, 0xa5, 0x43, 0x82,
0x8d, 0x1d, 0xd1, 0x5e, 0x78, 0xa9, 0x8a, 0x99, 0x96, 0x52, 0xab, 0xfa, 0x5f, 0x72, 0xcc, 0x1d,
0xb0, 0x8b, 0x10, 0x23, 0xba, 0x66, 0x20, 0x33, 0x3d, 0x63, 0x03, 0x65, 0xef, 0x8b, 0x7d, 0x0e,
0xf1, 0xba, 0xd2, 0xaa, 0x62, 0x45, 0x4d, 0x47, 0x33, 0x4c, 0x36, 0x99, 0x5f, 0xcb, 0x5d, 0x5a,
0x5a, 0xee, 0x8d, 0x1b, 0x5d, 0x98, 0x3d, 0x6d, 0x0b, 0x11, 0xb9, 0x0b, 0x16, 0x17, 0x21, 0x45,
0x2b, 0x95, 0x11, 0xa9, 0x63, 0x83, 0x20, 0xf1, 0x27, 0x03, 0x71, 0x0f, 0xc2, 0xee, 0x42, 0xcc,
0x74, 0x56, 0x1d, 0xf1, 0xc9, 0xfc, 0xea, 0x08, 0x2a, 0x2f, 0x95, 0x07, 0x62, 0x1b, 0x00, 0xb6,
0x68, 0xc5, 0x6a, 0x98, 0x88, 0xa4, 0x67, 0x32, 0xd1, 0x6c, 0x32, 0x9f, 0x1d, 0x91, 0x62, 0xbf,
0x0b, 0x28, 0xac, 0xdb, 0x7a, 0x3b, 0x6d, 0x61, 0xc5, 0x75, 0x2b, 0xc8, 0xd4, 0x75, 0x8c, 0x9a,
0x91, 0x29, 0x22, 0xf1, 0x05, 0x80, 0x5b, 0xd9, 0x6b, 0xa5, 0x86, 0xd8, 0x79, 0x88, 0x36, 0x4d,
0xc3, 0x75, 0x5f, 0xb6, 0x87, 0xf6, 0x4c, 0x59, 0x57, 0x3d, 0x5b, 0xed, 0x21, 0xe5, 0x75, 0x94,
0xf6, 0x5a, 0x4c, 0x01, 0x1b, 0x64, 0xf2, 0x1d, 0x7a, 0x0b, 0x37, 0x8a, 0x44, 0x93, 0x1d, 0xe9,
0x68, 0xaf, 0x61, 0x55, 0xb0, 0xa9, 0x5b, 0x2d, 0x96, 0x85, 0x59, 0xbb, 0x20, 0x8f, 0xc9, 0x19,
0x0f, 0xdd, 0xc4, 0x14, 0xfc, 0x87, 0x9b, 0x01, 0x9f, 0xfb, 0x21, 0x2e, 0xc3, 0xd2, 0x80, 0xc4,
0x3e, 0xef, 0x89, 0xc3, 0xbb, 0x8f, 0x2c, 0x7f, 0xa9, 0x80, 0x0d, 0x75, 0x20, 0x2f, 0x75, 0xec,
0x66, 0xa6, 0x3d, 0x76, 0x61, 0x2b, 0x5c, 0x6d, 0xbd, 0xe4, 0xbe, 0xb6, 0x02, 0x2c, 0x16, 0x89,
0xf6, 0x14, 0x55, 0x91, 0x85, 0x6c, 0xb3, 0x02, 0x5b, 0xfa, 0xfd, 0x1f, 0x62, 0x8a, 0x98, 0x01,
0x7e, 0x70, 0x0e, 0x9f, 0xe5, 0x10, 0xe6, 0x1c, 0x83, 0x0c, 0xd4, 0xf4, 0xfa, 0xeb, 0x09, 0x24,
0xdc, 0xc3, 0x16, 0x74, 0xd8, 0x4a, 0xa7, 0x2d, 0x08, 0x6e, 0xa9, 0xee, 0x52, 0x50, 0xac, 0xff,
0x2d, 0xff, 0xdf, 0x1d, 0x0e, 0x55, 0x93, 0x76, 0x2a, 0xa2, 0xb8, 0x7c, 0x15, 0xdf, 0x18, 0x98,
0x2f, 0x12, 0x6d, 0x8f, 0x10, 0x5c, 0xd6, 0x15, 0x0b, 0x39, 0xbb, 0xf0, 0xef, 0x42, 0xae, 0x7e,
0xcf, 0x38, 0x48, 0xf7, 0xea, 0xf4, 0x8b, 0xa8, 0xc1, 0x82, 0x6d, 0xb6, 0x7e, 0xc5, 0x45, 0x0c,
0x73, 0x73, 0x09, 0x6e, 0xf5, 0xd1, 0xf9, 0x5a, 0x2a, 0xce, 0xaf, 0x28, 0x58, 0x74, 0xfd, 0x26,
0x57, 0xff, 0xf3, 0x14, 0x79, 0xb8, 0x3d, 0x88, 0xc9, 0x57, 0xf2, 0x83, 0x81, 0x9b, 0xce, 0xae,
0xef, 0xf5, 0x6a, 0x79, 0x06, 0x49, 0x03, 0x35, 0x0f, 0xc2, 0x7a, 0x56, 0x3b, 0x6d, 0xe1, 0x8e,
0xab, 0xc7, 0x40, 0xcd, 0x42, 0x48, 0x52, 0x30, 0x21, 0x27, 0xfc, 0xb1, 0x9d, 0x06, 0x57, 0xd5,
0x83, 0xf0, 0x46, 0x53, 0x69, 0x70, 0x55, 0x0d, 0xa7, 0x09, 0x26, 0xe4, 0x84, 0x3f, 0x1e, 0xba,
0xe3, 0x02, 0x2c, 0x0f, 0x94, 0xdf, 0x2d, 0x30, 0xff, 0x27, 0x01, 0xd1, 0x22, 0xd1, 0x58, 0x0c,
0x89, 0xe0, 0x92, 0x5a, 0x1f, 0xf1, 0x4f, 0xa6, 0xef, 0x09, 0x6e, 0x6b, 0x82, 0x60, 0xdf, 0xd7,
0x08, 0xdb, 0x80, 0x24, 0xdd, 0xb7, 0xf7, 0x46, 0x67, 0xa1, 0xc2, 0xb9, 0x07, 0x13, 0x85, 0x53,
0xb4, 0x27, 0x70, 0x3d, 0xdc, 0xa7, 0xd2, 0xe8, 0x4c, 0x21, 0x00, 0xf7, 0x70, 0x42, 0x00, 0x45,
0xfe, 0x01, 0xe6, 0x7a, 0x1a, 0x6c, 0x63, 0x74, 0xb2, 0x30, 0x82, 0xdb, 0x9e, 0x14, 0x41, 0xf1,
0x7f, 0x66, 0x60, 0xa1, 0xbf, 0xab, 0xb6, 0x26, 0xc9, 0xe8, 0x81, 0xb8, 0x47, 0x53, 0x80, 0x28,
0x25, 0x5f, 0x18, 0x60, 0x07, 0x34, 0xd5, 0xfd, 0x71, 0xb6, 0xb5, 0x17, 0xc5, 0x3d, 0x9e, 0x06,
0x45, 0x89, 0xd1, 0x21, 0xde, 0x7d, 0x1c, 0xdc, 0x1d, 0xeb, 0x30, 0xdb, 0xa1, 0xdc, 0xe6, 0xd8,
0xa1, 0x14, 0xd5, 0x47, 0xfb, 0xd4, 0x3b, 0xd7, 0xb9, 0x43, 0x97, 0x1f, 0x47, 0x79, 0xf8, 0xf6,
0xe7, 0x76, 0x26, 0xc7, 0x50, 0x02, 0x3e, 0x31, 0x00, 0xc1, 0x8d, 0xca, 0x8e, 0xd1, 0x47, 0x03,
0xee, 0x5f, 0x6e, 0x77, 0x2a, 0x58, 0x58, 0xc6, 0x7c, 0xdf, 0xc3, 0x25, 0x3f, 0x96, 0xa3, 0x21,
0xcc, 0x38, 0x6e, 0x0c, 0x7d, 0xa3, 0x44, 0x0a, 0xaf, 0x4e, 0xcf, 0x79, 0xe6, 0xec, 0x9c, 0x67,
0x7e, 0x9f, 0xf3, 0xcc, 0xd7, 0x0b, 0x3e, 0x72, 0x76, 0xc1, 0x47, 0x7e, 0x5d, 0xf0, 0x91, 0x77,
0x1b, 0x9a, 0x6e, 0x55, 0x1a, 0xa5, 0x5c, 0x19, 0xd7, 0x24, 0xab, 0xa2, 0x98, 0x44, 0x27, 0x12,
0xb2, 0x2a, 0xc8, 0xac, 0xe9, 0x86, 0x25, 0x1d, 0x87, 0x9e, 0xff, 0x56, 0xab, 0x8e, 0x48, 0x29,
0xe6, 0xbc, 0xf8, 0xb7, 0xfe, 0x06, 0x00, 0x00, 0xff, 0xff, 0x20, 0x34, 0xe4, 0xef, 0x81, 0x0c,
0x00, 0x00,
// 878 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x57, 0x4d, 0x6b, 0xe3, 0x46,
0x18, 0xb6, 0xec, 0xd4, 0xae, 0x5f, 0xb7, 0x21, 0x51, 0xdd, 0xe0, 0x2a, 0x8d, 0xe4, 0x2a, 0x24,
0xb8, 0x84, 0x5a, 0x89, 0xd3, 0xd2, 0x90, 0x36, 0xd0, 0x98, 0xb6, 0xb4, 0x05, 0x97, 0xa2, 0x1c,
0x0a, 0xbd, 0x04, 0xd9, 0x1a, 0x64, 0x05, 0x5b, 0x63, 0x34, 0x72, 0x1c, 0x37, 0xd0, 0x5e, 0x16,
0x16, 0xf6, 0xb4, 0xbf, 0x62, 0xd9, 0x3f, 0xb1, 0xec, 0x35, 0xc7, 0x1c, 0xf7, 0x64, 0x96, 0xe4,
0x1f, 0xf8, 0xba, 0x97, 0x45, 0xa3, 0xaf, 0x91, 0x3f, 0xe2, 0x8f, 0xcd, 0x6d, 0x34, 0xf3, 0x3e,
0xef, 0xf3, 0xbc, 0xcf, 0xcc, 0xab, 0x91, 0x60, 0xf7, 0xb2, 0xdb, 0x6a, 0x68, 0x96, 0xf9, 0x2f,
0x52, 0x2c, 0xad, 0x8d, 0x08, 0xb2, 0x2f, 0xcd, 0x06, 0x52, 0x2e, 0x0f, 0xea, 0xc8, 0xd1, 0x0e,
0x14, 0xe7, 0xaa, 0xdc, 0xb1, 0xb1, 0x83, 0xf9, 0xad, 0x30, 0xae, 0xcc, 0xc4, 0x95, 0xfd, 0x38,
0x21, 0x6f, 0x60, 0x03, 0xd3, 0x48, 0xc5, 0x1d, 0x79, 0x20, 0x41, 0x79, 0x38, 0x39, 0x9b, 0x88,
0x02, 0xe4, 0x97, 0x1c, 0x7c, 0x52, 0x23, 0xc6, 0x19, 0x72, 0x54, 0xd4, 0xc0, 0xb6, 0xce, 0x1f,
0x41, 0xa6, 0x8e, 0x2d, 0xfd, 0xdc, 0xd4, 0x0b, 0x5c, 0x91, 0x2b, 0x65, 0xab, 0xd2, 0x70, 0x20,
0x6d, 0x5e, 0x10, 0x6c, 0x1d, 0xcb, 0xee, 0xc2, 0xef, 0xba, 0x5c, 0xec, 0x6b, 0xed, 0x56, 0xf8,
0xa4, 0xa6, 0xbd, 0x01, 0xbf, 0x01, 0x69, 0x62, 0x1a, 0x16, 0xb2, 0x0b, 0x49, 0x17, 0xa8, 0xfa,
0x4f, 0xfc, 0xaf, 0x90, 0xe9, 0x68, 0xfd, 0x16, 0xd6, 0xf4, 0x42, 0xaa, 0xc8, 0x95, 0x72, 0x95,
0xdd, 0xf2, 0x83, 0xa5, 0x95, 0xff, 0xf2, 0xa2, 0xab, 0x2b, 0x37, 0x03, 0x29, 0xa1, 0x06, 0x60,
0x79, 0x17, 0xf2, 0xac, 0x52, 0x15, 0x91, 0x0e, 0xb6, 0x08, 0xe2, 0x57, 0x21, 0x19, 0x88, 0x55,
0x93, 0xa6, 0x2e, 0xbf, 0xe6, 0x20, 0xe3, 0xa7, 0xe0, 0x4f, 0x20, 0x6d, 0xd3, 0x68, 0xba, 0x9e,
0xab, 0xec, 0xcc, 0xa0, 0xf6, 0x53, 0xfb, 0x20, 0xbe, 0x0b, 0xe0, 0x16, 0xa1, 0x39, 0x5d, 0x1b,
0x91, 0x42, 0xb2, 0x98, 0x2a, 0xe5, 0x2a, 0xa5, 0x19, 0x29, 0xce, 0x02, 0x40, 0x75, 0xcf, 0xd5,
0x3f, 0x1c, 0x48, 0xdb, 0x9e, 0x7b, 0x51, 0xa6, 0xc0, 0x41, 0x66, 0x46, 0x65, 0x88, 0xe4, 0xdf,
0x00, 0xbc, 0x4a, 0xff, 0xd4, 0xda, 0x88, 0x5f, 0x83, 0x54, 0xc3, 0xb6, 0xfc, 0x02, 0xdd, 0x21,
0x9d, 0x31, 0x75, 0xdf, 0x66, 0x77, 0xc8, 0x78, 0x9f, 0x62, 0xbd, 0x97, 0xf3, 0xc0, 0x47, 0x99,
0x02, 0xc7, 0xe4, 0xbf, 0xe1, 0xb3, 0x1a, 0x31, 0x54, 0x2a, 0x1d, 0x9d, 0x76, 0x9d, 0x26, 0xb6,
0x4d, 0xa7, 0xcf, 0xf3, 0xb0, 0xe2, 0x16, 0xe4, 0x33, 0xd1, 0xf1, 0xd4, 0x4d, 0xcd, 0xc3, 0x47,
0xb8, 0x17, 0xf1, 0x79, 0x0f, 0xf2, 0x16, 0x6c, 0x4e, 0x48, 0x1c, 0xf2, 0x5e, 0x53, 0xde, 0x33,
0xe4, 0x84, 0x4b, 0x55, 0x6c, 0xe9, 0x13, 0x79, 0x99, 0x63, 0x98, 0x5c, 0xf6, 0x18, 0xc6, 0xad,
0xf0, 0xb4, 0x8d, 0x92, 0x87, 0xda, 0xaa, 0xb0, 0x51, 0x23, 0xc6, 0xcf, 0xa8, 0x85, 0x1c, 0xe4,
0x9a, 0x15, 0xd9, 0x32, 0xee, 0xff, 0x14, 0x53, 0xe4, 0x22, 0x88, 0x93, 0x73, 0x84, 0x2c, 0x17,
0xb0, 0x4a, 0x0d, 0xb2, 0x50, 0xcf, 0xef, 0xb7, 0x9f, 0x20, 0xeb, 0x1d, 0xb6, 0xa8, 0xe3, 0xb6,
0x87, 0x03, 0x49, 0xf2, 0x4a, 0xf5, 0x96, 0xa2, 0x62, 0xc3, 0x67, 0xf5, 0xe3, 0x60, 0x38, 0x55,
0x4d, 0x81, 0x56, 0xc4, 0x70, 0x85, 0x2a, 0x5e, 0x70, 0xb0, 0x56, 0x23, 0xc6, 0x29, 0x21, 0xb8,
0x61, 0x6a, 0x0e, 0xa2, 0xbb, 0xf0, 0xe1, 0x42, 0x1e, 0x7f, 0xcf, 0x04, 0x28, 0x8c, 0xea, 0x0c,
0x8b, 0x68, 0xc3, 0xba, 0x6b, 0xb6, 0xf9, 0xc8, 0x45, 0x4c, 0x73, 0x73, 0x13, 0xbe, 0x18, 0xa3,
0x0b, 0xb5, 0x34, 0xe9, 0xab, 0x29, 0x5a, 0xf4, 0xfc, 0x26, 0x8f, 0xff, 0x32, 0x95, 0x45, 0xf8,
0x72, 0x12, 0x53, 0xa8, 0xe4, 0x15, 0x07, 0x9f, 0xd3, 0x5d, 0x3f, 0x1d, 0xd5, 0xf2, 0x0b, 0xe4,
0x2c, 0xd4, 0x3b, 0x8f, 0xeb, 0xd9, 0x19, 0x0e, 0xa4, 0xaf, 0x3c, 0x3d, 0x16, 0xea, 0x55, 0x63,
0x92, 0xa2, 0x09, 0x35, 0x1b, 0x8e, 0xdd, 0x34, 0xb8, 0xa5, 0x9f, 0xc7, 0x37, 0x9a, 0x49, 0x83,
0x5b, 0x7a, 0x3c, 0x4d, 0x34, 0xa1, 0x66, 0xc3, 0xf1, 0xd4, 0x1d, 0x97, 0x60, 0x6b, 0xa2, 0xfc,
0xa0, 0xc0, 0xca, 0xbb, 0x2c, 0xa4, 0x6a, 0xc4, 0xe0, 0x31, 0x64, 0xa3, 0x4b, 0x6b, 0x6f, 0xc6,
0x3b, 0x99, 0xbd, 0x37, 0x84, 0xc3, 0x05, 0x82, 0x43, 0x5f, 0x13, 0x7c, 0x17, 0x72, 0x6c, 0xdf,
0x7e, 0x33, 0x3b, 0x0b, 0x13, 0x2e, 0x7c, 0xb7, 0x50, 0x38, 0x43, 0x7b, 0x0d, 0x9f, 0xc6, 0xfb,
0x54, 0x99, 0x9d, 0x29, 0x06, 0x10, 0xbe, 0x5f, 0x10, 0xc0, 0x90, 0xff, 0x07, 0xab, 0x23, 0x0d,
0xb6, 0x3f, 0x3b, 0x59, 0x1c, 0x21, 0x1c, 0x2d, 0x8a, 0x60, 0xf8, 0x9f, 0x72, 0xb0, 0x3e, 0xde,
0x55, 0x87, 0x8b, 0x64, 0xf4, 0x41, 0xc2, 0x0f, 0x4b, 0x80, 0x18, 0x25, 0xcf, 0x38, 0xe0, 0x27,
0x34, 0xd5, 0xb7, 0xf3, 0x6c, 0xeb, 0x28, 0x4a, 0xf8, 0x71, 0x19, 0x14, 0x23, 0xc6, 0x84, 0x4c,
0xf0, 0x71, 0xf0, 0xf5, 0x5c, 0x87, 0xd9, 0x0d, 0x15, 0x0e, 0xe6, 0x0e, 0x65, 0xa8, 0xfe, 0x77,
0x4f, 0x3d, 0xbd, 0xce, 0x29, 0x5d, 0x65, 0x1e, 0xe5, 0xf1, 0xdb, 0x5f, 0x38, 0x5e, 0x1c, 0xc3,
0x08, 0x78, 0xc2, 0x01, 0x44, 0x37, 0x2a, 0x3f, 0x47, 0x1f, 0x4d, 0xb8, 0x7f, 0x85, 0x93, 0xa5,
0x60, 0x71, 0x19, 0x6b, 0x63, 0x1f, 0x2e, 0x95, 0xb9, 0x1c, 0x8d, 0x61, 0xe6, 0x71, 0x63, 0xea,
0x37, 0x4a, 0xa2, 0xfa, 0xc7, 0xcd, 0x9d, 0xc8, 0xdd, 0xde, 0x89, 0xdc, 0xdb, 0x3b, 0x91, 0x7b,
0x7e, 0x2f, 0x26, 0x6e, 0xef, 0xc5, 0xc4, 0x9b, 0x7b, 0x31, 0xf1, 0xcf, 0xbe, 0x61, 0x3a, 0xcd,
0x6e, 0xbd, 0xdc, 0xc0, 0x6d, 0xc5, 0x69, 0x6a, 0x36, 0x31, 0x89, 0x82, 0x9c, 0x26, 0xb2, 0xdb,
0xa6, 0xe5, 0x28, 0x57, 0xb1, 0xdf, 0x01, 0xa7, 0xdf, 0x41, 0xa4, 0x9e, 0xa6, 0x7f, 0x00, 0x87,
0xef, 0x03, 0x00, 0x00, 0xff, 0xff, 0x08, 0x20, 0xb1, 0x62, 0x91, 0x0c, 0x00, 0x00,
}
// Reference imports to suppress errors if they are not otherwise used.
@ -1141,7 +1149,7 @@ type MsgClient interface {
DissociateRecords(ctx context.Context, in *MsgDissociateRecords, opts ...grpc.CallOption) (*MsgDissociateRecordsResponse, error)
// ReAssociateRecords
ReAssociateRecords(ctx context.Context, in *MsgReAssociateRecords, opts ...grpc.CallOption) (*MsgReAssociateRecordsResponse, error)
// SetName will store the name with given wrn and name
// SetName will store the name with given crn and name
SetName(ctx context.Context, in *MsgSetName, opts ...grpc.CallOption) (*MsgSetNameResponse, error)
// Reserve name
ReserveName(ctx context.Context, in *MsgReserveAuthority, opts ...grpc.CallOption) (*MsgReserveAuthorityResponse, error)
@ -1263,7 +1271,7 @@ type MsgServer interface {
DissociateRecords(context.Context, *MsgDissociateRecords) (*MsgDissociateRecordsResponse, error)
// ReAssociateRecords
ReAssociateRecords(context.Context, *MsgReAssociateRecords) (*MsgReAssociateRecordsResponse, error)
// SetName will store the name with given wrn and name
// SetName will store the name with given crn and name
SetName(context.Context, *MsgSetName) (*MsgSetNameResponse, error)
// Reserve name
ReserveName(context.Context, *MsgReserveAuthority) (*MsgReserveAuthorityResponse, error)
@ -1608,6 +1616,13 @@ func (m *MsgSetRecordResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) {
_ = i
var l int
_ = l
if len(m.Id) > 0 {
i -= len(m.Id)
copy(dAtA[i:], m.Id)
i = encodeVarintTx(dAtA, i, uint64(len(m.Id)))
i--
dAtA[i] = 0xa
}
return len(dAtA) - i, nil
}
@ -1694,10 +1709,10 @@ func (m *MsgSetName) MarshalToSizedBuffer(dAtA []byte) (int, error) {
i--
dAtA[i] = 0x12
}
if len(m.Wrn) > 0 {
i -= len(m.Wrn)
copy(dAtA[i:], m.Wrn)
i = encodeVarintTx(dAtA, i, uint64(len(m.Wrn)))
if len(m.Crn) > 0 {
i -= len(m.Crn)
copy(dAtA[i:], m.Crn)
i = encodeVarintTx(dAtA, i, uint64(len(m.Crn)))
i--
dAtA[i] = 0xa
}
@ -1888,10 +1903,10 @@ func (m *MsgDeleteNameAuthority) MarshalToSizedBuffer(dAtA []byte) (int, error)
i--
dAtA[i] = 0x12
}
if len(m.Wrn) > 0 {
i -= len(m.Wrn)
copy(dAtA[i:], m.Wrn)
i = encodeVarintTx(dAtA, i, uint64(len(m.Wrn)))
if len(m.Crn) > 0 {
i -= len(m.Crn)
copy(dAtA[i:], m.Crn)
i = encodeVarintTx(dAtA, i, uint64(len(m.Crn)))
i--
dAtA[i] = 0xa
}
@ -2271,6 +2286,10 @@ func (m *MsgSetRecordResponse) Size() (n int) {
}
var l int
_ = l
l = len(m.Id)
if l > 0 {
n += 1 + l + sovTx(uint64(l))
}
return n
}
@ -2299,7 +2318,7 @@ func (m *MsgSetName) Size() (n int) {
}
var l int
_ = l
l = len(m.Wrn)
l = len(m.Crn)
if l > 0 {
n += 1 + l + sovTx(uint64(l))
}
@ -2389,7 +2408,7 @@ func (m *MsgDeleteNameAuthority) Size() (n int) {
}
var l int
_ = l
l = len(m.Wrn)
l = len(m.Crn)
if l > 0 {
n += 1 + l + sovTx(uint64(l))
}
@ -2729,6 +2748,38 @@ func (m *MsgSetRecordResponse) Unmarshal(dAtA []byte) error {
return fmt.Errorf("proto: MsgSetRecordResponse: illegal tag %d (wire type %d)", fieldNum, wire)
}
switch fieldNum {
case 1:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field Id", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowTx
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
stringLen |= uint64(b&0x7F) << shift
if b < 0x80 {
break
}
}
intStringLen := int(stringLen)
if intStringLen < 0 {
return ErrInvalidLengthTx
}
postIndex := iNdEx + intStringLen
if postIndex < 0 {
return ErrInvalidLengthTx
}
if postIndex > l {
return io.ErrUnexpectedEOF
}
m.Id = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
default:
iNdEx = preIndex
skippy, err := skipTx(dAtA[iNdEx:])
@ -2901,7 +2952,7 @@ func (m *MsgSetName) Unmarshal(dAtA []byte) error {
switch fieldNum {
case 1:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field Wrn", wireType)
return fmt.Errorf("proto: wrong wireType = %d for field Crn", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
@ -2929,7 +2980,7 @@ func (m *MsgSetName) Unmarshal(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
m.Wrn = string(dAtA[iNdEx:postIndex])
m.Crn = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
case 2:
if wireType != 2 {
@ -3489,7 +3540,7 @@ func (m *MsgDeleteNameAuthority) Unmarshal(dAtA []byte) error {
switch fieldNum {
case 1:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field Wrn", wireType)
return fmt.Errorf("proto: wrong wireType = %d for field Crn", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
@ -3517,7 +3568,7 @@ func (m *MsgDeleteNameAuthority) Unmarshal(dAtA []byte) error {
if postIndex > l {
return io.ErrUnexpectedEOF
}
m.Wrn = string(dAtA[iNdEx:postIndex])
m.Crn = string(dAtA[iNdEx:postIndex])
iNdEx = postIndex
case 2:
if wireType != 2 {

View File

@ -2,9 +2,9 @@ package types
import (
"crypto/sha256"
canonicalJson "github.com/gibson042/canonicaljson-go"
"github.com/tharsis/ethermint/x/nameservice/helpers"
"time"
)
const (
@ -24,11 +24,9 @@ type PayloadType struct {
func (payloadObj *PayloadType) ToPayload() Payload {
var payload = Payload{
Record: &Record{
CreateTime: time.Time{},
ExpiryTime: time.Time{},
Deleted: false,
Owners: nil,
Attributes: helpers.MarshalMapToJSONBytes(payloadObj.Record),
Attributes: helpers.BytesToBase64(helpers.MarshalMapToJSONBytes(payloadObj.Record)),
},
Signatures: payloadObj.Signatures,
}
@ -40,7 +38,7 @@ func (payloadObj *PayloadType) ToPayload() Payload {
func (payload Payload) ToReadablePayload() PayloadType {
var payloadType PayloadType
payloadType.Record = helpers.UnMarshalMapFromJSONBytes(payload.Record.Attributes)
payloadType.Record = helpers.UnMarshalMapFromJSONBytes(helpers.BytesFromBase64(payload.Record.Attributes))
payloadType.Signatures = payload.Signatures
@ -58,7 +56,8 @@ func (r *Record) ToRecordType() RecordType {
resourceObj.ExpiryTime = r.ExpiryTime
resourceObj.Deleted = r.Deleted
resourceObj.Owners = r.Owners
resourceObj.Attributes = helpers.UnMarshalMapFromJSONBytes(r.Attributes)
resourceObj.Names = r.Names
resourceObj.Attributes = helpers.UnMarshalMapFromJSONBytes(helpers.BytesFromBase64(r.Attributes))
return resourceObj
}
@ -68,8 +67,8 @@ type RecordType struct {
Id string `json:"id,omitempty"`
Names []string `json:"names,omitempty"`
BondId string `json:"bondId,omitempty"`
CreateTime time.Time `json:"createTime,omitempty"`
ExpiryTime time.Time `json:"expiryTime,omitempty"`
CreateTime string `json:"createTime,omitempty"`
ExpiryTime string `json:"expiryTime,omitempty"`
Deleted bool `json:"deleted,omitempty"`
Owners []string `json:"owners,omitempty"`
Attributes map[string]interface{} `json:"attributes,omitempty"`
@ -86,7 +85,7 @@ func (r *RecordType) ToRecordObj() Record {
resourceObj.ExpiryTime = r.ExpiryTime
resourceObj.Deleted = r.Deleted
resourceObj.Owners = r.Owners
resourceObj.Attributes = helpers.MarshalMapToJSONBytes(r.Attributes)
resourceObj.Attributes = helpers.BytesToBase64(helpers.MarshalMapToJSONBytes(r.Attributes))
return resourceObj
}