Skip to content
New issue

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

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

Already on GitHub? Sign in to your account

Various Bug fixes #124

Merged
merged 1 commit into from
Dec 20, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 18 additions & 19 deletions app/app.go
Original file line number Diff line number Diff line change
Expand Up @@ -123,19 +123,20 @@ func NewCyberdApp(
cdc := MakeCodec()

dbKeys := CyberdAppDbKeys{
main: sdk.NewKVStoreKey("main"),
acc: sdk.NewKVStoreKey("acc"),
cidNum: sdk.NewKVStoreKey("cid_index"),
links: sdk.NewKVStoreKey("links"),
rank: sdk.NewKVStoreKey("rank"),
stake: sdk.NewKVStoreKey("stake"),
fees: sdk.NewKVStoreKey("fee"),
tStake: sdk.NewTransientStoreKey("transient_stake"),
keyDistr: sdk.NewKVStoreKey("distr"),
slashing: sdk.NewKVStoreKey("slashing"),
params: sdk.NewKVStoreKey("params"),
tParams: sdk.NewTransientStoreKey("transient_params"),
accBandwidth: sdk.NewKVStoreKey("acc_bandwidth"),
main: sdk.NewKVStoreKey("main"),
acc: sdk.NewKVStoreKey("acc"),
cidNum: sdk.NewKVStoreKey("cid_index"),
cidNumReverse: sdk.NewKVStoreKey("cid_index_reverse"),
links: sdk.NewKVStoreKey("links"),
rank: sdk.NewKVStoreKey("rank"),
stake: sdk.NewKVStoreKey("stake"),
fees: sdk.NewKVStoreKey("fee"),
tStake: sdk.NewTransientStoreKey("transient_stake"),
keyDistr: sdk.NewKVStoreKey("distr"),
slashing: sdk.NewKVStoreKey("slashing"),
params: sdk.NewKVStoreKey("params"),
tParams: sdk.NewTransientStoreKey("transient_params"),
accBandwidth: sdk.NewKVStoreKey("acc_bandwidth"),
}

ms := store.NewMainKeeper(dbKeys.main)
Expand Down Expand Up @@ -198,7 +199,7 @@ func NewCyberdApp(
// register message routes
app.Router().
AddRoute("bank", sdkbank.NewHandler(app.bankKeeper)).
AddRoute("link", link.NewLinksHandler(app.cidNumKeeper, app.linkIndexedKeeper, app.accountKeeper)).
AddRoute("link", link.NewLinksHandler(app.cidNumKeeper, &app.linkIndexedKeeper, app.accountKeeper)).
AddRoute("stake", stake.NewHandler(app.stakeKeeper)).
AddRoute("slashing", slashing.NewHandler(app.slashingKeeper))

Expand All @@ -213,7 +214,7 @@ func NewCyberdApp(

// mount the multistore and load the latest state
app.MountStores(
dbKeys.main, dbKeys.acc, dbKeys.cidNum, dbKeys.links, dbKeys.rank, dbKeys.stake,
dbKeys.main, dbKeys.acc, dbKeys.cidNum, dbKeys.cidNumReverse, dbKeys.links, dbKeys.rank, dbKeys.stake,
dbKeys.slashing, dbKeys.params, dbKeys.keyDistr, dbKeys.fees, dbKeys.accBandwidth,
)
app.MountStoresTransient(dbKeys.tParams, dbKeys.tStake)
Expand Down Expand Up @@ -377,10 +378,8 @@ func (app *CyberdApp) DeliverTx(txBytes []byte) (res abci.ResponseDeliverTx) {
} else {

resp := app.BaseApp.DeliverTx(txBytes)
if resp.Code == 0 {
app.bandwidthMeter.ConsumeAccBandwidth(ctx, accBw, txCost)
app.curBlockSpentBandwidth = app.curBlockSpentBandwidth + uint64(txCost)
}
app.bandwidthMeter.ConsumeAccBandwidth(ctx, accBw, txCost)
app.curBlockSpentBandwidth = app.curBlockSpentBandwidth + uint64(txCost)

return abci.ResponseDeliverTx{
Code: uint32(resp.Code),
Expand Down
10 changes: 7 additions & 3 deletions app/rpc.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ import (
)

type RankedCid struct {
cid cbdlink.Cid
rank float64
Cid cbdlink.Cid `json:"cid"`
Rank float64 `amino:"unsafe" json:"rank"`
}

func (app *CyberdApp) RpcContext() sdk.Context {
Expand All @@ -35,7 +35,7 @@ func (app *CyberdApp) Search(cid string, page, perPage int) ([]RankedCid, int, e

result := make([]RankedCid, 0, len(rankedCidNumbers))
for _, c := range rankedCidNumbers {
result = append(result, RankedCid{cid: app.cidNumKeeper.GetCid(ctx, c.GetNumber()), rank: c.GetRank()})
result = append(result, RankedCid{Cid: app.cidNumKeeper.GetCid(ctx, c.GetNumber()), Rank: c.GetRank()})
}

return result, size, nil
Expand Down Expand Up @@ -65,3 +65,7 @@ func (app *CyberdApp) IsLinkExist(from cbdlink.Cid, to cbdlink.Cid, address sdk.

return false
}

func (app *CyberdApp) CurrentBandwidthPrice() float64 {
return app.currentCreditPrice
}
27 changes: 27 additions & 0 deletions client/helpers.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package client

import (
cbdlink "github.com/cybercongress/cyberd/x/link/types"
)

type CidsFilter map[cbdlink.Cid]map[cbdlink.Cid]struct{}

func (cf CidsFilter) Put(from cbdlink.Cid, to cbdlink.Cid) {

cidLinks := cf[from]
if cidLinks == nil {
cidLinks = make(map[cbdlink.Cid]struct{})
}
cidLinks[to] = struct{}{}
cf[from] = cidLinks
}

func (cf CidsFilter) Contains(from cbdlink.Cid, to cbdlink.Cid) bool {

cidLinks := cf[from]
if cidLinks == nil {
return false
}
_, contains := cidLinks[to]
return contains
}
68 changes: 50 additions & 18 deletions client/http_client.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,10 @@ import (
sdk "github.com/cosmos/cosmos-sdk/types"
authtxb "github.com/cosmos/cosmos-sdk/x/auth/client/txbuilder"
"github.com/cybercongress/cyberd/app"
cbd "github.com/cybercongress/cyberd/app/types"
"github.com/cybercongress/cyberd/daemon/rpc"
bwtps "github.com/cybercongress/cyberd/x/bandwidth/types"
"github.com/cybercongress/cyberd/x/link"
cbdlink "github.com/cybercongress/cyberd/x/link/types"
tdmClient "github.com/tendermint/tendermint/rpc/client"
"github.com/tendermint/tendermint/rpc/lib/client"
"os"
Expand All @@ -29,8 +31,8 @@ type HttpCyberdClient struct {
// fields used by local keys store to sing transactions
passphrase string
fromAddress sdk.AccAddress
cliCtx cli.CLIContext
txBuilder authtxb.TxBuilder
cliCtx *cli.CLIContext
txBuilder *authtxb.TxBuilder
}

func NewHttpCyberdClient(nodeUrl string, passphrase string, singAddr string) CyberdClient {
Expand Down Expand Up @@ -58,11 +60,18 @@ func NewHttpCyberdClient(nodeUrl string, passphrase string, singAddr string) Cyb
}.WithCodec(cdc).WithAccountDecoder(cdc)

accountNumber, _ := cliCtx.GetAccountNumber(addr)
seq, err := cliCtx.GetAccountSequence(addr)

if err != nil {
panic(err)
}

txBuilder := authtxb.TxBuilder{
Gas: 1000000,
ChainID: status.NodeInfo.Network,
AccountNumber: accountNumber,
Codec: cdc,
Sequence: seq,
}

return HttpCyberdClient{
Expand All @@ -73,46 +82,68 @@ func NewHttpCyberdClient(nodeUrl string, passphrase string, singAddr string) Cyb

passphrase: passphrase,
fromAddress: addr,
cliCtx: cliCtx,
txBuilder: txBuilder,
cliCtx: &cliCtx,
txBuilder: &txBuilder,
}
}

func (c HttpCyberdClient) GetChainId() string {
return c.chainId
}

/*func (c HttpCyberdClient) GetCurrentBandwidthCreditPrice() (float64, error) {

func (c HttpCyberdClient) IsLinkExist(from cbdlink.Cid, to cbdlink.Cid, addr sdk.AccAddress) (result bool, err error) {
_, err = c.httpClient.Call("is_link_exist",
map[string]interface{}{"from": from, "to": to, "address": addr.String()},
&result,
)
return
}

func (c HttpCyberdClient) GetAccount(address sdk.AccAddress) (auth.Account, error) {

func (c HttpCyberdClient) GetCurrentBandwidthCreditPrice() (float64, error) {
result := &rpc.ResultBandwidthPrice{}
_, err := c.httpClient.Call("current_bandwidth_price", map[string]interface{}{}, &result)
return result.Price, err
}

func (c HttpCyberdClient) GetAccountBandwidth(address sdk.AccAddress) (bdwth.AcсBandwidth, error) {

}*/
func (c HttpCyberdClient) GetAccountBandwidth() (result bwtps.AcсBandwidth, err error) {
_, err = c.httpClient.Call("account_bandwidth",
map[string]interface{}{"address": c.fromAddress.String()}, &result)
return
}

func (c HttpCyberdClient) SubmitLinkSync(link Link) error {
return c.SubmitLinksSync([]Link{link})
}

func (c HttpCyberdClient) SubmitLinksSync(links []Link) error {
msges := make([]sdk.Msg, 0, len(links))

// used to remove duplicated items
var filter = make(CidsFilter)
msges := make([]sdk.Msg, 0)

for _, l := range links {
msges = append(msges, link.NewMsg(c.fromAddress, cbd.Cid(l.From), cbd.Cid(l.To)))

if filter.Contains(l.From, l.To) {
continue
}

exists, err := c.IsLinkExist(l.From, l.To, c.fromAddress)
if err != nil {
return err
}
if !exists {
msges = append(msges, link.NewMsg(c.fromAddress, l.From, l.To))
}
filter.Put(l.From, l.To)
}
return c.BroadcastTx(msges)
}

func (c HttpCyberdClient) BroadcastTx(msgs []sdk.Msg) error {

seq, err := c.cliCtx.GetAccountSequence(c.fromAddress)
if err != nil {
return err
if len(msgs) == 0 {
return nil
}
c.txBuilder.Sequence = seq

txBytes, err := c.txBuilder.BuildAndSign(c.cliCtx.From, c.passphrase, msgs)
if err != nil {
Expand All @@ -130,6 +161,7 @@ func (c HttpCyberdClient) BroadcastTx(msgs []sdk.Msg) error {
if result.Code != 0 {
return errors.New(string(result.Log))
}
c.txBuilder.Sequence = c.txBuilder.Sequence + 1
return nil
}

Expand Down
26 changes: 14 additions & 12 deletions client/spec.go
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
package client

import (
cbd "github.com/cybercongress/cyberd/app/types"
sdk "github.com/cosmos/cosmos-sdk/types"
bwtps "github.com/cybercongress/cyberd/x/bandwidth/types"
cbdlink "github.com/cybercongress/cyberd/x/link/types"
)

type Link struct {
From cbd.Cid
To cbd.Cid
From cbdlink.Cid
To cbdlink.Cid
}

type CyberdClient interface {
Expand All @@ -15,17 +17,17 @@ type CyberdClient interface {
// returns current connected node chain id
GetChainId() string

/* // get current bandwidth credits price
// price 1 is price for situation, when all users use all their bandwidth (all blocks are filled for 100%)
// if price < 1, that means blocks filled partially, thus allow more active users to do more transactions
// if price > 1, that means network is under high load.
GetCurrentBandwidthCreditPrice() (float64, error)
// returns, if given link already exists
IsLinkExist(from cbdlink.Cid, to cbdlink.Cid, addr sdk.AccAddress) (result bool, err error)

// returns account for given address
GetAccount(address sdk.AccAddress) (auth.Account, error)
// get current bandwidth credits price
// price 1 is price for situation, when all users use all their bandwidth (all blocks are filled for 100%)
// if price < 1, that means blocks filled partially, thus allow more active users to do more transactions
// if price > 1, that means network is under high load.
GetCurrentBandwidthCreditPrice() (float64, error)

// returns account bandwidth information for given account
GetAccountBandwidth(address sdk.AccAddress) (bdwth.AcсBandwidth, error)*/
// returns account bandwidth information for given account
GetAccountBandwidth() (bwtps.AcсBandwidth, error)

// links two cids for given user
// this method also should check, either cids are correct cids and given user is msg signer
Expand Down
9 changes: 9 additions & 0 deletions daemon/rpc/bandwidth.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package rpc

type ResultBandwidthPrice struct {
Price float64 `amino:"unsafe" json:"price"`
}

func CurrentBandwidthPrice() (*ResultBandwidthPrice, error) {
return &ResultBandwidthPrice{cyberdApp.CurrentBandwidthPrice()}, nil
}
9 changes: 5 additions & 4 deletions daemon/rpc/routes.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,11 @@ func SetCyberdApp(cApp *app.CyberdApp) {
}

var Routes = map[string]*rpcserver.RPCFunc{
"search": rpcserver.NewRPCFunc(Search, "cid,page,perPage"),
"account": rpcserver.NewRPCFunc(Account, "address"),
"account_bandwidth": rpcserver.NewRPCFunc(AccountBandwidth, "address"),
"is_link_exist": rpcserver.NewRPCFunc(IsLinkExist, "from, to, address"),
"search": rpcserver.NewRPCFunc(Search, "cid,page,perPage"),
"account": rpcserver.NewRPCFunc(Account, "address"),
"account_bandwidth": rpcserver.NewRPCFunc(AccountBandwidth, "address"),
"is_link_exist": rpcserver.NewRPCFunc(IsLinkExist, "from,to,address"),
"current_bandwidth_price": rpcserver.NewRPCFunc(CurrentBandwidthPrice, ""),
}

func init() {
Expand Down
10 changes: 10 additions & 0 deletions docs/rpc.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ the method name for further details such as parameter and return information.
|2|[account](#account)|Get account nonce, pubkey, number, and coins.|
|3|[account_bandwidth](#account-bandwidth)|Get account bandwidth info for current height.|
|4|[is_link_exist](#link-exist)|Return true, if given link exist.|
|5|[current_bandwidth_price](#current-bandwidth-price)|Returns current bandwidth credit price.|

### Method Details

Expand Down Expand Up @@ -80,6 +81,15 @@ the method name for further details such as parameter and return information.
|Description|Return true, if given link exist.|
|[Return to Overview](#method-overview)<br />

<a name="current-bandwidth-price"/>

| | |
|---|---|
|Method|current_bandwidth_price|
|Parameters||
|Description|Returns current bandwidth credit price.|
|[Return to Overview](#method-overview)<br />

***
<br />
<br />
Expand Down
1 change: 1 addition & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,7 @@ github.com/syndtr/goleveldb v0.0.0-20181128100959-b001fa50d6b2 h1:GnOzE5fEFN3b2z
github.com/syndtr/goleveldb v0.0.0-20181128100959-b001fa50d6b2/go.mod h1:Z4AUp2Km+PwemOoO/VB5AOx9XSsIItzFjoJlOSiYmn0=
github.com/tendermint/btcd v0.0.0-20180816174608-e5840949ff4f h1:R0wLxgASGMoRQTF/dCSk4N+M3j9DLyPDzDff2WtCg/I=
github.com/tendermint/btcd v0.0.0-20180816174608-e5840949ff4f/go.mod h1:DC6/m53jtQzr/NFmMNEu0rxf18/ktVoVtMrnDD5pN+U=
github.com/tendermint/crypto v0.0.0-20180820045704-3764759f34a5 h1:u8i49c+BxloX3XQ55cvzFNXplizZP/q00i+IlttUjAU=
github.com/tendermint/crypto v0.0.0-20180820045704-3764759f34a5/go.mod h1:z4YtwM70uOnk8h0pjJYlj3zdYwi9l03By6iAIF5j/Pk=
github.com/tendermint/go-amino v0.14.1 h1:o2WudxNfdLNBwMyl2dqOJxiro5rfrEaU0Ugs6offJMk=
github.com/tendermint/go-amino v0.14.1/go.mod h1:i/UKE5Uocn+argJJBb12qTZsCDBcAYMbR92AaJVmKso=
Expand Down
7 changes: 4 additions & 3 deletions testnet/checklist.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,9 @@
2. adjust genesis supply in x/mint
3. reset old state
4. change genesis file chain-id
5. generate new first validator keys
6. upadte genesis gen tx
5. upadte genesis gen tx
6. update readme.md testnet lable
7. Update docs/run_validator.md guide

## Useful commands

Expand All @@ -21,7 +22,7 @@
scp -P 33324 /home/hlb/projects/cyberd/testnet/genesis.json earth@earth.cybernode.ai:/cyberdata/cyberd/config/
scp -P 33324 /home/hlb/projects/cyberd/testnet/config.toml earth@earth.cybernode.ai:/cyberdata/cyberd/config/
# Copy from earth
scp -P 33324 earth@earth.cybernode.ai:/path/file /host/path/file
scp -P 33324 earth@93.125.26.210:/cyberdata/cyberd/config/priv_validator.json ~/.cyberd/config/
```

```bash
Expand Down
2 changes: 1 addition & 1 deletion testnet/config.toml
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ db_backend = "leveldb"
db_dir = "data"

# Output level for logging, including package level options
log_level = "main:info,state:info,*:error"
log_level = "*:error"

# Output format: 'plain' (colored text) or 'json'
log_format = "plain"
Expand Down
Loading